[
  {
    "path": ".editorconfig",
    "content": "# Editor configuration, see http://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\nmax_line_length = off\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".firebaserc",
    "content": "{\n  \"projects\": {\n    \"default\": \"angular-presentation\",\n    \"kirjs\": \"kirjs-kirjs\"\n  },\n  \"targets\": {\n    \"angular-presentation\": {\n      \"hosting\": {\n        \"codelab\": [\n          \"angular-presentation\"\n        ],\n        \"kirjs\": [\n          \"kirjs-home\"\n        ],\n        \"codelab-next\": [\n          \"codelab-next\"\n        ],\n        \"lis\": [\n          \"lis-lis\"\n        ],\n        \"angular-ivy\": [\n            \"angular-ivy\"\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": ".flooignore",
    "content": "extern\nnode_modules\ntmp\nvendor\n.idea/workspace.xml\n.idea/misc.xml\n"
  },
  {
    "path": ".gitattributes",
    "content": "src/assets/monaco linguist-vendored\n"
  },
  {
    "path": ".gitignore",
    "content": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\n/dist\n/tmp\n/out-tsc\n\n# dependencies\n/node_modules\nyarn.lock\n\n# IDEs and editors\n/.idea\n.project\n.classpath\n.c9/\n*.launch\n.settings/\n*.sublime-workspace\n\n# IDE - VSCode\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n\n# misc\n/.sass-cache\n/connect.lock\n/coverage\n/typings\n.firebase\n*.log\n.floo\n\n# e2e\n/e2e/*.js\n/e2e/*.map\n\n# OS generated files\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db\n\n"
  },
  {
    "path": ".nvmrc",
    "content": "10.17.0\n"
  },
  {
    "path": ".prettierignore",
    "content": "ng2ts\ndist\ncoverage\nlibs/code-demos/assets/runner/ng2/ng-bundle.js\nlibs/code-demos/assets/runner/ng-dts/files.txt\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"singleQuote\": true\n}\n"
  },
  {
    "path": ".travis.yml",
    "content": "dist: trusty\nlanguage: node_js\nnode_js:\n  - \"10\"\n\nenv:\n  matrix:\n    - TRIGGER=\"format:check\"\n    - TRIGGER=\"lint\"\n    - TRIGGER=\"ng build --  --prod --source-map=false --build-optimizer=false\"\n\nscript:\n  - npm run $TRIGGER\n\nnotifications:\n  email: false\n\ncache:\n  npm: true\n  directories:\n    - node_modules\n\ndeploy:\n  provider: firebase\n  project: \"angular-presentation\"\n  token:\n    secure: \"ed9U/81s4sR9ihLEogOdbXlKin0/vhJdk9XaLLTv6jVxGG/n40tcwwsCze6F3sBTibjq90OJHZn1ip+4uDdF+BzdzJ+hjU0SCR4B/Fi3OtxW73vz//ou1BktVrkHh+kzyS+3AvLQ9xvkz1h57vfzgfW8V/Jhy3PviZXvoPO4ttOQs2HwbO3C0BvwIaneRlNDudRz/rIQDHxHPaR6Hh3gG69vBc6D0eWhbMbFcWr6kHN3t2ki3APFR3omtNhZIdrFF9icSkeQ1fwiMKKfQaxmHXT1HZhxSCfvcqYwIqqidcFWTpABlt+2MNpWjnPLJV0l4D2HGSVF4RWtLFqfHhm/cyJTB/1ejDB92U4bA5W/tSGGgry5mgvD2pGrRHqHt+awtP9G4hgrZB3oADj3Q0nbj4VRDMgAYbAvrRYSFzxeXg50j7NwogGh02osAGpBhZzJA1I93c2yEPmcu+ysG1FkCnggh65LYX3Zjyu2eRyuPj0kaT+5OhFUanpCYO2cM/pGFMnG8+InvwLKUKfAtgUrP6yefd5CGJZaWbLGemNue6teAyMVWye4Ep2swY3DW0di5Ikn5lrV2V33yzeNd2OoSQbCaBbFLEYrlHw1+/7yNf928jj4vG0TYJwdUhlZDWdkogFIGx5cyu7dNEa5UnlzhJFkqIoo77kQrD0PKCyoAVg=\"\n  before_deploy:\n    - npm run pre-deploy\n  on:\n    branch: release\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"nrwl.angular-console\",\n    \"angular.ng-template\",\n    \"esbenp.prettier-vscode\"\n  ]\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2017 Kirill Cherkashin\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "[![Join our Slack, #codelab channel](https://img.shields.io/badge/slack-%23codelab-yellowgreen)](https://nycjsorg.now.sh) [![Check out the demo](https://img.shields.io/badge/see%20the-Demo-brightgreen)](https://codelab.fun)\n\n# Angular Codelab - [codelab.fun](https://codelab.fun)\n\nAngular Codelab is a self-paced interactive Angular course:\n\n<img alt=\"interactive exercises\" src=\"https://user-images.githubusercontent.com/2545357/66274607-4d17a880-e84e-11e9-8ed0-a1ae678988a5.gif\"  width=\"600\">\n \n- 🔥 Everything in the browser - **no setup needed**\n- 🔥 **Interactive code samples** - Change the code and see the result immediately!\n- 🔥 Hands-on **Exercises** to solidify your knowledge\n- 🔥 **Free** - Made for Angular enthusiasts by Angular enthusiasts  \n- 🔥 Written in Angular and **open source**\n\nTry it out yourself at [codelab.fun](https://codelab.fun)\n\n## Help us make Codelab.fun better\n\n- [Contribute to the codebase](#contribute-to-the-codebase)\n- [Host a live Angular Codelab event in your city](#host-a-live-angular-codelab-event-in-your-city)\n- [Translate Codelab to your language](#translate-codelab-to-your-language)\n\n### Contribute to the codebase\n\nCodelab.fun is an Angular app!\n\nIt uses [angular-cli](https://cli.angular.io/) with [nx](https://nx.dev) and all materials are in a form of Angular components.\n\n![image](https://user-images.githubusercontent.com/2545357/66277059-0edab300-e867-11e9-863e-340e6d888ea5.png)\n\nSee what [Good first issues](https://github.com/codelab-fun/codelab/issues?q=is%3Aissue+is%3Aopen+label%3Agood-first-issue) are available.\n\nSee [CONTRIBUTING.md](./docs/CONTRIBUTING.md) for detailed instructions.\n\n### Host a live Angular Codelab event in your city\n\nWe have hosted multiple live codelab events in 10+ cities, and you can help us host one in yours!\n\nSee how in [HOSTING.md](./docs/HOSTING.md)\n\n<img alt=\"People learning angular\" src=\"https://user-images.githubusercontent.com/2545357/66275179-1fcdf900-e854-11e9-8c44-69e4368ba6c1.png\"  width=\"600\">\n\n### Translate Codelab to your language\n\nCurrently codelab.fun is availble in English and Russian.\n\nSee [TRANSLATING.md](./docs/TRANSLATING.md) for how you can help us translate the codelab into your language.\n\nThanks to amazing [PoEditor](https://poeditor.com) for providing us with an open source licence\n"
  },
  {
    "path": "angular.json",
    "content": "{\n  \"$schema\": \"./node_modules/@angular/cli/lib/config/schema.json\",\n  \"version\": 1,\n  \"newProjectRoot\": \"\",\n  \"projects\": {\n    \"codelab\": {\n      \"root\": \"apps/codelab\",\n      \"sourceRoot\": \"apps/codelab/src\",\n      \"projectType\": \"application\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-builders/custom-webpack:browser\",\n          \"options\": {\n            \"customWebpackConfig\": {\n              \"path\": \"apps/codelab/extra-webpack.config.js\"\n            },\n            \"outputPath\": \"dist/apps/codelab\",\n            \"index\": \"apps/codelab/src/index.html\",\n            \"main\": \"apps/codelab/src/main.ts\",\n            \"tsConfig\": \"apps/codelab/tsconfig.app.json\",\n            \"polyfills\": \"apps/codelab/src/polyfills.ts\",\n            \"aot\": true,\n            \"assets\": [\n              \"apps/codelab/src/assets\",\n              \"apps/codelab/src/favicon.ico\",\n              \"apps/codelab/src/manifest.webmanifest\",\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"node_modules/monaco-editor/\",\n                \"output\": \"./assets/monaco/\"\n              },\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"libs/intro/assets/\",\n                \"output\": \"./assets/intro/\"\n              },\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"libs/code-demos/assets/runner/\",\n                \"output\": \"./assets/runner/\"\n              }\n            ],\n            \"styles\": [\"apps/codelab/src/styles.scss\"],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"ru\": {\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": true,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"baseHref\": \"/ru/\",\n              \"deployUrl\": \"/ru/\",\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/codelab/src/environments/environment.ts\",\n                  \"with\": \"apps/codelab/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"outputPath\": \"dist/apps/codelab/ru\",\n              \"i18nFile\": \"apps/codelab/src/locale/codelab.ru.xtb\",\n              \"i18nFormat\": \"xtb\",\n              \"i18nLocale\": \"ru\"\n            },\n            \"production\": {\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/codelab/src/environments/environment.ts\",\n                  \"with\": \"apps/codelab/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"serviceWorker\": false\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-builders/custom-webpack:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"codelab:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"codelab:build:production\"\n            },\n            \"ru\": {\n              \"browserTarget\": \"codelab:build:ru\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"codelab:build\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"apps/codelab/src/test.ts\",\n            \"karmaConfig\": \"apps/codelab/karma.conf.js\",\n            \"polyfills\": \"apps/codelab/src/polyfills.ts\",\n            \"tsConfig\": \"apps/codelab/tsconfig.spec.json\",\n            \"scripts\": [],\n            \"styles\": [\"apps/codelab/src/styles.scss\"],\n            \"assets\": [\n              \"apps/codelab/src/assets\",\n              \"apps/codelab/src/favicon.ico\",\n              \"apps/codelab/src/manifest.webmanifest\"\n            ]\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"apps/codelab/tsconfig.app.json\",\n              \"apps/codelab/tsconfig.spec.json\"\n            ],\n            \"exclude\": []\n          }\n        }\n      }\n    },\n    \"browser\": {\n      \"root\": \"libs/browser\",\n      \"sourceRoot\": \"libs/browser/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/browser/tsconfig.lib.json\",\n              \"libs/browser/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"console\": {\n      \"root\": \"libs/console\",\n      \"sourceRoot\": \"libs/console/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"libs/console/src/test.ts\",\n            \"tsConfig\": \"libs/console/tsconfig.spec.json\",\n            \"karmaConfig\": \"libs/console/karma.conf.js\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/console/tsconfig.lib.json\",\n              \"libs/console/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"utils\": {\n      \"root\": \"libs/utils\",\n      \"sourceRoot\": \"libs/utils/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"libs/utils/src/test.ts\",\n            \"tsConfig\": \"libs/utils/tsconfig.spec.json\",\n            \"karmaConfig\": \"libs/utils/karma.conf.js\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/utils/tsconfig.lib.json\",\n              \"libs/utils/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"kirjs\": {\n      \"root\": \"apps/kirjs/\",\n      \"sourceRoot\": \"apps/kirjs/src\",\n      \"projectType\": \"application\",\n      \"prefix\": \"kirjs\",\n      \"schematics\": {},\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"aot\": true,\n            \"outputPath\": \"dist/apps/kirjs\",\n            \"index\": \"apps/kirjs/src/index.html\",\n            \"main\": \"apps/kirjs/src/main.ts\",\n            \"polyfills\": \"apps/kirjs/src/polyfills.ts\",\n            \"tsConfig\": \"apps/kirjs/tsconfig.app.json\",\n            \"assets\": [\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"node_modules/monaco-editor/\",\n                \"output\": \"./assets/monaco/\"\n              },\n              \"apps/kirjs/src/favicon.ico\",\n              \"apps/kirjs/src/assets\",\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"libs/code-demos/assets/runner/\",\n                \"output\": \"./assets/runner/\"\n              }\n            ],\n            \"styles\": [\"apps/kirjs/src/styles.css\"],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"ru\": {\n              \"outputPath\": \"dist/apps/kirjs/ru\",\n              \"aot\": true,\n              \"i18nFile\": \"apps/kirjs/src/locale/kirjs.ru.xtb\",\n              \"i18nFormat\": \"xtb\",\n              \"i18nLocale\": \"ru\"\n            },\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/kirjs/src/environments/environment.ts\",\n                  \"with\": \"apps/kirjs/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"kirjs:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"kirjs:build:production\"\n            },\n            \"ru\": {\n              \"browserTarget\": \"kirjs:build:ru\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"kirjs:build\"\n          },\n          \"configurations\": {\n            \"ru\": {\n              \"outputPath\": \"locale/\",\n              \"outFile\": \"messages.ru.untranslated.xlf\",\n              \"i18nFormat\": \"xlf\",\n              \"i18nLocale\": \"ru\"\n            }\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"apps/kirjs/src/test.ts\",\n            \"polyfills\": \"apps/kirjs/src/polyfills.ts\",\n            \"tsConfig\": \"apps/kirjs/tsconfig.spec.json\",\n            \"karmaConfig\": \"apps/kirjs/karma.conf.js\",\n            \"styles\": [\"apps/kirjs/src/styles.css\"],\n            \"scripts\": [],\n            \"assets\": [\"apps/kirjs/src/favicon.ico\", \"apps/kirjs/src/assets\"]\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"apps/kirjs/tsconfig.app.json\",\n              \"apps/kirjs/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"angular-ast-viz\": {\n      \"root\": \"libs/angular-ast-viz\",\n      \"sourceRoot\": \"libs/angular-ast-viz/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/angular-ast-viz/tsconfig.lib.json\",\n            \"project\": \"libs/angular-ast-viz/ng-package.json\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"project\": \"libs/angular-ast-viz/ng-package.prod.json\"\n            }\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"libs/angular-ast-viz/src/test.ts\",\n            \"tsConfig\": \"libs/angular-ast-viz/tsconfig.spec.json\",\n            \"karmaConfig\": \"libs/angular-ast-viz/karma.conf.js\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/angular-ast-viz/tsconfig.lib.json\",\n              \"libs/angular-ast-viz/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"angular-slides-to-pdf\": {\n      \"root\": \"libs/angular-slides-to-pdf\",\n      \"sourceRoot\": \"libs/angular-slides-to-pdf/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/angular-slides-to-pdf/tsconfig.lib.json\",\n            \"project\": \"libs/angular-slides-to-pdf/ng-package.json\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"project\": \"libs/angular-slides-to-pdf/ng-package.prod.json\"\n            }\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"libs/angular-slides-to-pdf/src/test.ts\",\n            \"tsConfig\": \"libs/angular-slides-to-pdf/tsconfig.spec.json\",\n            \"karmaConfig\": \"libs/angular-slides-to-pdf/karma.conf.js\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/angular-slides-to-pdf/tsconfig.lib.json\",\n              \"libs/angular-slides-to-pdf/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"feedback\": {\n      \"root\": \"libs/feedback\",\n      \"sourceRoot\": \"libs/feedback/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/feedback/tsconfig.lib.json\",\n            \"project\": \"libs/feedback/ng-package.json\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"libs/feedback/src/test.ts\",\n            \"tsConfig\": \"libs/feedback/tsconfig.spec.json\",\n            \"karmaConfig\": \"libs/feedback/karma.conf.js\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/feedback/tsconfig.lib.json\",\n              \"libs/feedback/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"code-demos\": {\n      \"root\": \"libs/code-demos\",\n      \"sourceRoot\": \"libs/code-demos/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/code-demos/tsconfig.lib.json\",\n            \"project\": \"libs/code-demos/ng-package.json\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"project\": \"libs/code-demos/ng-package.prod.json\"\n            }\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/code-demos/tsconfig.lib.json\",\n              \"libs/code-demos/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"libs/code-demos/jest.config.js\",\n            \"tsConfig\": \"libs/code-demos/tsconfig.spec.json\",\n            \"setupFile\": \"libs/code-demos/src/test-setup.ts\"\n          }\n        }\n      }\n    },\n    \"live\": {\n      \"root\": \"libs/live\",\n      \"sourceRoot\": \"libs/live/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"live\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/live/tsconfig.lib.json\",\n            \"project\": \"libs/live/ng-package.json\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/live/tsconfig.lib.json\",\n              \"libs/live/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"libs/live/jest.config.js\",\n            \"tsConfig\": \"libs/live/tsconfig.spec.json\"\n          }\n        }\n      },\n      \"schematics\": {}\n    },\n    \"firebase-login\": {\n      \"root\": \"libs/firebase-login\",\n      \"sourceRoot\": \"libs/firebase-login/src\",\n      \"projectType\": \"library\",\n      \"prefix\": \"angular-presentation\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/firebase-login/tsconfig.lib.json\",\n            \"project\": \"libs/firebase-login/ng-package.json\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"libs/firebase-login/src/test.ts\",\n            \"tsConfig\": \"libs/firebase-login/tsconfig.spec.json\",\n            \"karmaConfig\": \"libs/firebase-login/karma.conf.js\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/firebase-login/tsconfig.lib.json\",\n              \"libs/firebase-login/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"blog\": {\n      \"root\": \"apps/blog/\",\n      \"sourceRoot\": \"apps/blog/src\",\n      \"projectType\": \"application\",\n      \"prefix\": \"codelab\",\n      \"schematics\": {\n        \"@nrwl/schematics:component\": {\n          \"style\": \"scss\"\n        }\n      },\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"outputPath\": \"dist/apps/blog\",\n            \"index\": \"apps/blog/src/index.html\",\n            \"main\": \"apps/blog/src/main.ts\",\n            \"polyfills\": \"apps/blog/src/polyfills.ts\",\n            \"tsConfig\": \"apps/blog/tsconfig.app.json\",\n            \"assets\": [\"apps/blog/src/favicon.ico\", \"apps/blog/src/assets\"],\n            \"styles\": [\"apps/blog/src/styles.scss\"],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/blog/src/environments/environment.ts\",\n                  \"with\": \"apps/blog/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"2mb\",\n                  \"maximumError\": \"20mb\"\n                }\n              ]\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"blog:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"blog:build:production\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"blog:build\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"apps/blog/tsconfig.app.json\",\n              \"apps/blog/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"apps/blog/jest.config.js\",\n            \"tsConfig\": \"apps/blog/tsconfig.spec.json\",\n            \"setupFile\": \"apps/blog/src/test-setup.ts\"\n          }\n        }\n      }\n    },\n    \"angular-thirty-seconds\": {\n      \"root\": \"apps/angular-thirty-seconds/\",\n      \"sourceRoot\": \"apps/angular-thirty-seconds/src\",\n      \"projectType\": \"application\",\n      \"prefix\": \"codelab\",\n      \"schematics\": {\n        \"@nrwl/schematics:component\": {\n          \"style\": \"scss\"\n        }\n      },\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"outputPath\": \"dist/apps/codelab/30\",\n            \"index\": \"apps/angular-thirty-seconds/src/index.html\",\n            \"main\": \"apps/angular-thirty-seconds/src/main.ts\",\n            \"polyfills\": \"apps/angular-thirty-seconds/src/polyfills.ts\",\n            \"tsConfig\": \"apps/angular-thirty-seconds/tsconfig.app.json\",\n            \"assets\": [\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"node_modules/monaco-editor/\",\n                \"output\": \"./assets/monaco/\"\n              },\n              \"apps/angular-thirty-seconds/src/favicon.ico\",\n              \"apps/angular-thirty-seconds/src/assets\",\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"libs/code-demos/assets/runner/\",\n                \"output\": \"./assets/runner/\"\n              }\n            ],\n            \"styles\": [\n              \"apps/angular-thirty-seconds/src/styles.scss\",\n              \"node_modules/prismjs/themes/prism-okaidia.css\",\n              \"node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css\"\n            ],\n            \"scripts\": [\n              \"node_modules/prismjs/prism.js\",\n              \"node_modules/prismjs/components/prism-typescript.min.js\",\n              \"node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js\"\n            ]\n          },\n          \"configurations\": {\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/angular-thirty-seconds/src/environments/environment.ts\",\n                  \"with\": \"apps/angular-thirty-seconds/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"baseHref\": \"/30/\",\n              \"deployUrl\": \"/30/\",\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"60mb\",\n                  \"maximumError\": \"70mb\"\n                }\n              ]\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"angular-thirty-seconds:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"angular-thirty-seconds:build:production\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"angular-thirty-seconds:build\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"apps/angular-thirty-seconds/src/test.ts\",\n            \"polyfills\": \"apps/angular-thirty-seconds/src/polyfills.ts\",\n            \"tsConfig\": \"apps/angular-thirty-seconds/tsconfig.spec.json\",\n            \"karmaConfig\": \"apps/angular-thirty-seconds/karma.conf.js\",\n            \"styles\": [\"apps/angular-thirty-seconds/src/styles.scss\"],\n            \"scripts\": [],\n            \"assets\": [\n              \"apps/angular-thirty-seconds/src/favicon.ico\",\n              \"apps/angular-thirty-seconds/src/assets\"\n            ]\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"apps/angular-thirty-seconds/tsconfig.app.json\",\n              \"apps/angular-thirty-seconds/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        }\n      }\n    },\n    \"lis\": {\n      \"projectType\": \"application\",\n      \"schematics\": {},\n      \"root\": \"apps/lis\",\n      \"sourceRoot\": \"apps/lis/src\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"outputPath\": \"dist/apps/lis\",\n            \"index\": \"apps/lis/src/index.html\",\n            \"main\": \"apps/lis/src/main.ts\",\n            \"polyfills\": \"apps/lis/src/polyfills.ts\",\n            \"tsConfig\": \"apps/lis/tsconfig.app.json\",\n            \"aot\": false,\n            \"assets\": [\n              \"apps/lis/src/favicon.ico\",\n              \"apps/lis/src/assets\",\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"node_modules/monaco-editor/\",\n                \"output\": \"./assets/monaco/\"\n              },\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"libs/code-demos/assets/runner/\",\n                \"output\": \"./assets/runner/\"\n              }\n            ],\n            \"styles\": [\"apps/lis/src/styles.css\"],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/lis/src/environments/environment.ts\",\n                  \"with\": \"apps/lis/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"2mb\",\n                  \"maximumError\": \"5mb\"\n                },\n                {\n                  \"type\": \"anyComponentStyle\",\n                  \"maximumWarning\": \"6kb\",\n                  \"maximumError\": \"10kb\"\n                }\n              ]\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"lis:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"lis:build:production\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"lis:build\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"apps/lis/tsconfig.app.json\",\n              \"apps/lis/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\", \"!apps/lis/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"apps/lis/jest.config.js\",\n            \"tsConfig\": \"apps/lis/tsconfig.spec.json\",\n            \"setupFile\": \"apps/lis/src/test-setup.ts\"\n          }\n        }\n      }\n    },\n    \"playground\": {\n      \"projectType\": \"application\",\n      \"schematics\": {\n        \"@nrwl/angular:component\": {\n          \"style\": \"scss\"\n        }\n      },\n      \"root\": \"apps/playground\",\n      \"sourceRoot\": \"apps/playground/src\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"outputPath\": \"dist/apps/playground\",\n            \"index\": \"apps/playground/src/index.html\",\n            \"main\": \"apps/playground/src/main.ts\",\n            \"polyfills\": \"apps/playground/src/polyfills.ts\",\n            \"tsConfig\": \"apps/playground/tsconfig.app.json\",\n            \"aot\": true,\n            \"assets\": [\n              \"apps/playground/src/favicon.ico\",\n              \"apps/playground/src/assets\",\n              {\n                \"glob\": \"**/*\",\n                \"input\": \"node_modules/monaco-editor/\",\n                \"output\": \"./assets/monaco/\"\n              }\n            ],\n            \"styles\": [\"apps/playground/src/styles.scss\"],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"apps/playground/src/environments/environment.ts\",\n                  \"with\": \"apps/playground/src/environments/environment.prod.ts\"\n                }\n              ],\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"20mb\",\n                  \"maximumError\": \"25mb\"\n                },\n                {\n                  \"type\": \"anyComponentStyle\",\n                  \"maximumWarning\": \"6kb\",\n                  \"maximumError\": \"10kb\"\n                }\n              ]\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"playground:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"playground:build:production\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"playground:build\"\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"apps/playground/tsconfig.app.json\",\n              \"apps/playground/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\", \"!apps/playground/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"apps/playground/jest.config.js\",\n            \"tsConfig\": \"apps/playground/tsconfig.spec.json\",\n            \"setupFile\": \"apps/playground/src/test-setup.ts\"\n          }\n        }\n      }\n    },\n    \"firebase\": {\n      \"projectType\": \"library\",\n      \"root\": \"libs/firebase\",\n      \"sourceRoot\": \"libs/firebase/src\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/firebase/tsconfig.lib.json\",\n              \"libs/firebase/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\", \"!libs/firebase/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"libs/firebase/jest.config.js\",\n            \"tsConfig\": \"libs/firebase/tsconfig.spec.json\",\n            \"setupFile\": \"libs/firebase/src/test-setup.ts\"\n          }\n        }\n      },\n      \"schematics\": {}\n    },\n    \"intro\": {\n      \"projectType\": \"library\",\n      \"root\": \"libs/intro\",\n      \"sourceRoot\": \"libs/intro/src\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/intro/tsconfig.lib.json\",\n              \"libs/intro/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\", \"!libs/intro/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"libs/intro/jest.config.js\",\n            \"tsConfig\": \"libs/intro/tsconfig.spec.json\",\n            \"setupFile\": \"libs/intro/src/test-setup.ts\"\n          }\n        }\n      },\n      \"schematics\": {}\n    },\n    \"slides\": {\n      \"projectType\": \"library\",\n      \"root\": \"libs/slides\",\n      \"sourceRoot\": \"libs/slides/src\",\n      \"prefix\": \"codelab\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@nrwl/angular:package\",\n          \"options\": {\n            \"tsConfig\": \"libs/slides/tsconfig.lib.json\",\n            \"project\": \"libs/slides/ng-package.json\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"tsConfig\": \"libs/slides/tsconfig.lib.prod.json\"\n            }\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"libs/slides/tsconfig.lib.json\",\n              \"libs/slides/tsconfig.spec.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\", \"!libs/slides/**\"]\n          }\n        },\n        \"test\": {\n          \"builder\": \"@nrwl/jest:jest\",\n          \"options\": {\n            \"jestConfig\": \"libs/slides/jest.config.js\",\n            \"tsConfig\": \"libs/slides/tsconfig.spec.json\",\n            \"setupFile\": \"libs/slides/src/test-setup.ts\"\n          }\n        }\n      },\n      \"schematics\": {}\n    }\n  },\n  \"defaultProject\": \"codelab\",\n  \"schematics\": {\n    \"@schematics/angular:component\": {\n      \"prefix\": \"slides\",\n      \"style\": \"css\"\n    },\n    \"@schematics/angular:directive\": {\n      \"prefix\": \"slides\"\n    },\n    \"@nrwl/schematics:library\": {\n      \"unitTestRunner\": \"karma\",\n      \"framework\": \"angular\"\n    },\n    \"@nrwl/schematics:application\": {\n      \"unitTestRunner\": \"karma\",\n      \"e2eTestRunner\": \"protractor\"\n    },\n    \"@nrwl/schematics:node-application\": {\n      \"framework\": \"express\"\n    },\n    \"@nrwl/angular:application\": {\n      \"unitTestRunner\": \"jest\",\n      \"e2eTestRunner\": \"cypress\"\n    },\n    \"@nrwl/angular:library\": {\n      \"unitTestRunner\": \"jest\"\n    }\n  },\n  \"cli\": {\n    \"defaultCollection\": \"@nrwl/angular\",\n    \"analytics\": \"2d33a6dc-15e8-4227-b14e-dedd96805cec\"\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/browserslist",
    "content": "# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n#\n# For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11"
  },
  {
    "path": "apps/angular-thirty-seconds/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nmodule.exports = function(config) {\n  config.set({\n    basePath: '../',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage-istanbul-reporter'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    coverageIstanbulReporter: {\n      dir: require('path').join(__dirname, '../coverage'),\n      reports: ['html', 'lcovonly'],\n      fixWebpackSourcePaths: true\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false\n  });\n};\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-root',\n  template: `\n    <div class=\"wrapper\">\n      <router-outlet></router-outlet>\n    </div>\n  `,\n\n  styles: [\n    `\n      .wrapper {\n        margin: 0 60px;\n        padding: 0 20px;\n      }\n\n      :host ::ng-deep {\n        font-family: 'Helvetica Neue', sans-serif;\n        font-weight: 300;\n        padding: 0 20px;\n        display: block;\n      }\n    `\n  ]\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/app.module.ts",
    "content": "import { MatButtonModule } from '@angular/material/button';\nimport { MatTableModule } from '@angular/material/table';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { RouterModule, Routes } from '@angular/router';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { monacoReady } from '@codelab/code-demos';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CreateSnippetComponent } from './create-snippet/create-snippet.component';\nimport { CreateSnippetModule } from './create-snippet/create-snippet.module';\nimport { environment } from '../../../codelab/src/environments/environment';\nimport { AngularFireModule } from '@angular/fire';\nimport { PullRequestsListComponent } from './pull-requests-list/pull-requests-list.component';\n\nexport const angularFire = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\nconst routes: Routes = [\n  { path: '', redirectTo: 'list', pathMatch: 'full' },\n  { path: 'list', component: PullRequestsListComponent },\n  { path: 'new/:repoName/:repoOwner', component: CreateSnippetComponent },\n  {\n    path: 'new/:repoName/:repoOwner/:pullNumber',\n    component: CreateSnippetComponent\n  }\n];\n\n@NgModule({\n  imports: [\n    angularFire,\n    BrowserModule,\n    BrowserAnimationsModule,\n    RouterModule.forRoot(routes),\n    MatButtonModule,\n    MatTableModule,\n    HttpClientModule,\n    CreateSnippetModule\n  ],\n  declarations: [AppComponent, PullRequestsListComponent],\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useValue: monacoReady,\n      multi: true\n    }\n  ],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/create-snippet.component.html",
    "content": "<div *ngIf=\"!isLoading; else loadingTmp\" class=\"container\">\n  <h1>\n    {{ isEditing ? '' : 'New' }} Snippet\n    <button (click)=\"openPreview()\" mat-button class=\"btn-submit\">\n      {{ isEditing ? 'Edit' : 'Create' }} Snippet\n    </button>\n  </h1>\n\n  <codelab-snippet-info></codelab-snippet-info>\n\n  <form [formGroup]=\"snippetForm\">\n    <section>\n      <div class=\"input-block\">\n        <div>\n          <label for=\"snippetTitle\">\n            Title <span class=\"required\">*</span>\n          </label>\n          <mat-form-field>\n            <input\n              formControlName=\"title\"\n              maxlength=\"120\"\n              id=\"snippetTitle\"\n              type=\"text\"\n              matInput\n            />\n          </mat-form-field>\n          <span class=\"input-info\"> Maximum 120 symbols </span>\n          <div\n            *ngIf=\"\n              snippetForm.get('title').touched &&\n              snippetForm.get('title').invalid\n            \"\n          >\n            <div\n              *ngIf=\"snippetForm.get('title').errors['required']\"\n              class=\"validation-message\"\n            >\n              This field is required\n            </div>\n          </div>\n        </div>\n        <div>\n          <label for=\"snippetLevel\">\n            Level <span class=\"required\">*</span>\n          </label>\n          <mat-form-field>\n            <mat-select formControlName=\"level\" id=\"snippetLevel\">\n              <mat-option value=\"beginner\">beginner</mat-option>\n              <mat-option value=\"intermediate\">intermediate</mat-option>\n              <mat-option value=\"advanced\">advanced</mat-option>\n            </mat-select>\n          </mat-form-field>\n          <div\n            *ngIf=\"\n              snippetForm.get('level').touched &&\n              snippetForm.get('level').invalid\n            \"\n          >\n            <div\n              *ngIf=\"snippetForm.get('level').errors['required']\"\n              class=\"validation-message\"\n            >\n              This field is required\n            </div>\n          </div>\n        </div>\n\n        <div>\n          <label for=\"snippetTwitter\">\n            Your twitter handle\n          </label>\n          <mat-form-field>\n            <input\n              formControlName=\"twitter\"\n              id=\"snippetTwitter\"\n              type=\"text\"\n              matInput\n            />\n          </mat-form-field>\n        </div>\n\n        <div>\n          <label for=\"tags\"> Tags <span class=\"required\">*</span> </label>\n          <mat-form-field>\n            <mat-chip-list #chipList>\n              <mat-chip\n                *ngFor=\"let tag of tags\"\n                [removable]=\"true\"\n                (removed)=\"removeTag(tag)\"\n              >\n                {{ tag }}\n              </mat-chip>\n              <input\n                #tagInput\n                formControlName=\"tags\"\n                id=\"tags\"\n                [matAutocomplete]=\"auto\"\n                [matChipInputFor]=\"chipList\"\n                [matChipInputAddOnBlur]=\"true\"\n                [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n                (matChipInputTokenEnd)=\"addTag($event)\"\n              />\n            </mat-chip-list>\n            <mat-autocomplete\n              #auto=\"matAutocomplete\"\n              (optionSelected)=\"selectedTags($event)\"\n            >\n              <mat-option\n                *ngFor=\"let tag of filteredTags | async\"\n                [value]=\"tag\"\n              >\n                {{ tag }}\n              </mat-option>\n            </mat-autocomplete>\n          </mat-form-field>\n          <span class=\"input-info\"> Maximum 5 tags </span>\n          <div\n            *ngIf=\"\n              snippetForm.get('tags').touched && snippetForm.get('tags').invalid\n            \"\n          >\n            <div\n              *ngIf=\"snippetForm.get('tags').errors['required']\"\n              class=\"validation-message\"\n            >\n              This field is required\n            </div>\n            <div\n              *ngIf=\"snippetForm.get('tags').errors['tagsError']\"\n              class=\"validation-message\"\n            >\n              {{ snippetForm.get('tags').errors['tagsError'] }}\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section>\n      <div class=\"w-50\">\n        <label for=\"content\"> Content <span class=\"required\">*</span> </label>\n        <mat-form-field>\n          <textarea formControlName=\"content\" id=\"content\" type=\"text\" matInput>\n          </textarea>\n        </mat-form-field>\n        <div\n          *ngIf=\"\n            snippetForm.get('content').touched &&\n            snippetForm.get('content').invalid\n          \"\n        >\n          <div\n            *ngIf=\"snippetForm.get('content').errors['required']\"\n            class=\"validation-message\"\n          >\n            This field is required\n          </div>\n          <div\n            *ngIf=\"snippetForm.get('content').errors['linesError']\"\n            class=\"validation-message\"\n          >\n            {{ snippetForm.get('content').errors['linesError'] }}\n          </div>\n        </div>\n      </div>\n      <div class=\"markdown-info\">\n        <markdown [data]=\"snippetForm.get('content').value\"></markdown>\n      </div>\n    </section>\n\n    <p (click)=\"hasBonus = !hasBonus\" class=\"cursor-pointer\">\n      <span *ngIf=\"!hasBonus\" class=\"icon-plus\"> Add Bonus section </span>\n      <span *ngIf=\"hasBonus\" class=\"icon-minus\"> Remove Bonus section </span>\n    </p>\n    <ng-container *ngIf=\"hasBonus\">\n      <section>\n        <div class=\"w-50\">\n          <label for=\"bonus\"> Bonus </label>\n          <mat-form-field>\n            <textarea formControlName=\"bonus\" id=\"bonus\" type=\"text\" matInput>\n            </textarea>\n          </mat-form-field>\n        </div>\n        <div class=\"markdown-info\">\n          <markdown [data]=\"snippetForm.get('bonus').value\"></markdown>\n        </div>\n      </section>\n    </ng-container>\n\n    <p (click)=\"hasLinks = !hasLinks\" class=\"cursor-pointer\">\n      <span *ngIf=\"!hasLinks\" class=\"icon-plus\"> Add Links section </span>\n      <span *ngIf=\"hasLinks\" class=\"icon-minus\"> Remove Links section </span>\n    </p>\n    <ng-container *ngIf=\"hasLinks\">\n      <section>\n        <div class=\"w-50\">\n          <label for=\"links\"> Links </label>\n          <mat-form-field>\n            <textarea formControlName=\"links\" id=\"links\" type=\"text\" matInput>\n            </textarea>\n          </mat-form-field>\n        </div>\n      </section>\n    </ng-container>\n\n    <p (click)=\"hasDemo = !hasDemo\" class=\"cursor-pointer\">\n      <span *ngIf=\"!hasDemo\" class=\"icon-plus\"> Add Demo section </span>\n      <span *ngIf=\"hasDemo\" class=\"icon-minus\"> Remove Demo section </span>\n    </p>\n    <ng-container *ngIf=\"hasDemo\">\n      <section>\n        <div class=\"w-100\">\n          <code-demo formControlName=\"demo\" bootstrap=\"main\"></code-demo>\n        </div>\n      </section>\n    </ng-container>\n  </form>\n</div>\n\n<ng-template #loadingTmp>\n  <codelab-snippet-spinner></codelab-snippet-spinner>\n</ng-template>\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/create-snippet.component.scss",
    "content": ":host {\n  label {\n    color: #3e515b;\n  }\n\n  textarea {\n    width: 100%;\n    height: 280px;\n  }\n\n  mat-form-field {\n    width: 100%;\n  }\n\n  section {\n    display: flex;\n    margin: 30px 0;\n  }\n\n  .icon {\n    justify-content: center;\n    align-items: center;\n    font-size: 15px;\n\n    &-plus:before {\n      content: '\\FF0B';\n      border: 1px solid #444;\n      border-radius: 50%;\n      color: #444;\n    }\n\n    &-minus:before {\n      content: '\\FF0D';\n      border: 1px solid #444;\n      border-radius: 50%;\n      color: #444;\n    }\n  }\n\n  .btn-submit {\n    float: right;\n    font-weight: 400;\n    text-align: center;\n    vertical-align: middle;\n    border: 1px solid #213451;\n    font-size: 14px;\n    color: #fff;\n    background-color: #213451;\n    cursor: pointer;\n  }\n\n  .container {\n    max-width: 850px;\n    padding: 0 15px 30px 15px;\n    margin: 0 auto;\n    font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n  }\n\n  .input-info {\n    display: block;\n    height: 10px;\n    line-height: 10px;\n    font-size: 0.625em;\n    margin-top: -15px;\n    color: #8b8b8b;\n  }\n\n  .markdown-info {\n    width: 50%;\n    padding: 15px 35px;\n    border: 1px solid #a4b7c1;\n    margin-left: 30px;\n  }\n\n  .input-block {\n    width: 300px;\n\n    div {\n      margin-bottom: 25px;\n      width: 100%;\n    }\n  }\n\n  .required {\n    color: red;\n  }\n\n  .cursor-pointer {\n    cursor: pointer;\n  }\n\n  .w {\n    &-100 {\n      width: 100%;\n    }\n\n    &-50 {\n      width: 50%;\n    }\n  }\n\n  .validation-message {\n    color: red;\n    position: absolute;\n    width: 100%;\n    height: 1em;\n    margin-top: 5px;\n    line-height: 1em;\n    font-size: 0.75em;\n    text-align: left;\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/create-snippet.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { CreateSnippetComponent } from './create-snippet.component';\nimport { CreateSnippetModule } from './create-snippet.module';\nimport { ActivatedRoute } from '@angular/router';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { SnippetService } from '../shared/services/snippet.service';\nimport SpyObj = jasmine.SpyObj;\nimport { of } from 'rxjs';\n\ndescribe('CreateSnippetComponent', () => {\n  let component: CreateSnippetComponent;\n  let fixture: ComponentFixture<CreateSnippetComponent>;\n  let snippetService: SpyObj<SnippetService>;\n  let activatedRoute: Partial<ActivatedRoute>;\n\n  beforeEach(async(() => {\n    activatedRoute = {\n      snapshot: {\n        params: {}\n      }\n    } as any;\n\n    snippetService = jasmine.createSpyObj('snippetService', ['fetchPR']);\n\n    TestBed.configureTestingModule({\n      imports: [CreateSnippetModule, NoopAnimationsModule],\n      providers: [\n        {\n          provide: ActivatedRoute,\n          useFactory: () => activatedRoute\n        },\n        {\n          provide: SnippetService,\n          useValue: snippetService\n        }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {});\n\n  xit('should create', () => {\n    const repoName = 'name';\n    const repoOwner = 'PIKACHU';\n    const pullNumber = 689;\n\n    activatedRoute = {\n      snapshot: {\n        params: {\n          pullNumber,\n          repoName,\n          repoOwner\n        }\n      }\n    } as any;\n\n    snippetService.fetchPR.and.returnValue(of({}));\n\n    fixture = TestBed.createComponent(CreateSnippetComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n\n    expect(snippetService.fetchPR).toHaveBeenCalledWith(\n      repoName,\n      repoOwner,\n      pullNumber\n    );\n  });\n});\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/create-snippet.component.ts",
    "content": "import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  OnDestroy,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n  MatAutocomplete,\n  MatAutocompleteSelectedEvent\n} from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { MatDialog } from '@angular/material/dialog';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { finalize, map } from 'rxjs/operators';\nimport { ReplaySubject } from 'rxjs/internal/ReplaySubject';\nimport { SnippetOverviewComponent } from './snippet-modal/snippet-overview.component';\nimport {\n  angularSampleCode,\n  LINKS_PLACEHOLDER,\n  MARKDOWN_PLACEHOLDER,\n  TAGS_LIST\n} from '../shared';\nimport { SnippetService } from '../shared/services/snippet.service';\nimport {\n  markFormControlsAsTouched,\n  validatorMaxLines,\n  validatorMaxTags\n} from '../shared/functions/validation';\nimport { parseSnippet } from '../shared/functions/parse-snippet';\nimport { SEPARATOR } from '../shared/consts';\n\ninterface SnippetFileInfo {\n  sha: string;\n  fileName: string;\n  snippet: string;\n  branchName: string;\n}\n\nfunction importSnippet(snippet) {\n  const result = { ...snippet };\n  result.links = (result.links || []).join(SEPARATOR);\n  return result;\n}\n\n@Component({\n  selector: 'codelab-create-snippet',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './create-snippet.component.html',\n  styleUrls: ['./create-snippet.component.scss']\n})\nexport class CreateSnippetComponent implements OnDestroy {\n  @ViewChild('tagInput', { static: false }) tagInput: ElementRef<\n    HTMLInputElement\n  >;\n  @ViewChild('auto', { static: false }) matAutocomplete: MatAutocomplete;\n\n  repoName: string;\n  repoOwner: string;\n\n  destroy = new ReplaySubject<void>(1);\n\n  isLoading = false;\n  isEditing = false;\n  snippetFileInfo: SnippetFileInfo;\n\n  TAGS_LIST = TAGS_LIST;\n  tags: string[] = ['tip'];\n  filteredTags: Observable<string[]>;\n\n  snippetForm = this.fb.group({\n    title: ['', Validators.required],\n    twitter: [''],\n    level: ['beginner', Validators.required],\n    tags: [this.tags, [Validators.required, validatorMaxTags(5)]],\n    content: [\n      MARKDOWN_PLACEHOLDER,\n      [Validators.required, validatorMaxLines(25)]\n    ],\n    bonus: [''],\n    links: [LINKS_PLACEHOLDER],\n    demo: [angularSampleCode]\n  });\n\n  hasBonus = false;\n  hasLinks = false;\n  hasDemo = false;\n\n  separatorKeysCodes: number[] = [ENTER, COMMA];\n\n  constructor(\n    private fb: FormBuilder,\n    private cd: ChangeDetectorRef,\n    private activatedRoute: ActivatedRoute,\n    private snippetService: SnippetService,\n    public dialog: MatDialog\n  ) {\n    const pullNumber = this.activatedRoute.snapshot.params['pullNumber'];\n    this.repoName = this.activatedRoute.snapshot.params['repoName'];\n    this.repoOwner = this.activatedRoute.snapshot.params['repoOwner'];\n\n    if (pullNumber) {\n      this.isEditing = true;\n      this.fetchPR(pullNumber);\n    }\n\n    this.filteredTags = this.snippetForm\n      .get('tags')\n      .valueChanges.pipe(\n        map((tags: string) =>\n          tags ? this._filterTags(tags.slice(-1)[0]) : this.TAGS_LIST.slice()\n        )\n      );\n  }\n\n  fetchPR(pullNumber: number) {\n    this.isLoading = true;\n    this.snippetService\n      .fetchPR(this.repoName, this.repoOwner, pullNumber)\n      .pipe(\n        finalize(() => {\n          this.isLoading = false;\n          this.cd.markForCheck();\n        })\n      )\n      .subscribe((snippetFileInfo: SnippetFileInfo) => {\n        this.snippetFileInfo = snippetFileInfo;\n\n        const snippet = importSnippet(parseSnippet(snippetFileInfo.snippet));\n        if (snippet.demo) {\n          this.hasDemo = true;\n        }\n        if (snippet.bonus) {\n          this.hasBonus = true;\n        }\n        if (snippet.links) {\n          this.hasLinks = true;\n        }\n        this.snippetForm.patchValue(snippet);\n      });\n  }\n\n  ngOnDestroy() {\n    this.destroy.next(null);\n    this.destroy.complete();\n  }\n\n  openPreview() {\n    if (this.snippetForm.valid) {\n      this.dialog.open(SnippetOverviewComponent, {\n        data: {\n          formValue: this.getPreparedFormValue(this.snippetForm.value),\n          isEditing: this.isEditing,\n          fileInfo: this.snippetFileInfo\n            ? {\n                sha: this.snippetFileInfo['sha'],\n                fileName: this.snippetFileInfo['fileName'],\n                branchName: this.snippetFileInfo['branchName']\n              }\n            : null,\n          repoName: this.repoName,\n          repoOwner: this.repoOwner\n        }\n      });\n    } else {\n      markFormControlsAsTouched(this.snippetForm);\n    }\n  }\n\n  getPreparedFormValue(value) {\n    Object.keys(value['demo']).forEach(x => {\n      const isChangedAndNotEmpty =\n        this.hasDemo && value.demo[x] && value.demo[x] !== angularSampleCode[x];\n      value['demo'][x] = isChangedAndNotEmpty ? value.demo[x] : null;\n    });\n    value['bonus'] = this.hasBonus ? value['bonus'] : null;\n    value['links'] = this.hasLinks ? value['links'] : null;\n    return value;\n  }\n\n  addTag(event: MatChipInputEvent): void {\n    if (!this.matAutocomplete.isOpen) {\n      const input = event.input;\n      const value = event.value;\n      if ((value || '').trim()) {\n        this.tags.push(value.trim());\n      }\n      if (input) {\n        input.value = '';\n      }\n      this.snippetForm.get('tags').patchValue(this.tags);\n    }\n  }\n\n  removeTag(tag: string): void {\n    const index = this.tags.indexOf(tag);\n    if (index >= 0) {\n      this.tags.splice(index, 1);\n    }\n    this.snippetForm.get('tags').patchValue(this.tags);\n  }\n\n  selectedTags(event: MatAutocompleteSelectedEvent): void {\n    this.tags.push(event.option.viewValue);\n    this.tagInput.nativeElement.value = '';\n    this.snippetForm.get('tags').patchValue(this.tags);\n  }\n\n  private _filterTags(value: string): string[] {\n    const filterValue = value ? value.toLowerCase() : null;\n    return this.TAGS_LIST.filter(\n      tag => tag.toLowerCase().indexOf(filterValue) === 0\n    );\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/create-snippet.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CreateSnippetComponent } from './create-snippet.component';\nimport { SnippetInfoComponent } from './snippet-info/snippet-info.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MarkdownModule } from 'ngx-markdown';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { SnippetOverviewComponent } from './snippet-modal/snippet-overview.component';\nimport { SnippetSpinnerComponent } from './snippet-spinner/snippet-spinner.component';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { RouterModule } from '@angular/router';\n\nconst MAT_MODULES = [\n  MatButtonModule,\n  MatFormFieldModule,\n  MatChipsModule,\n  MatAutocompleteModule,\n  MatSelectModule,\n  MatInputModule,\n  MatDialogModule,\n  MatSnackBarModule\n];\n\n@NgModule({\n  declarations: [\n    CreateSnippetComponent,\n    SnippetInfoComponent,\n    SnippetOverviewComponent,\n    SnippetSpinnerComponent\n  ],\n  entryComponents: [SnippetOverviewComponent],\n  imports: [\n    ...MAT_MODULES,\n    CommonModule,\n    ReactiveFormsModule,\n    AngularFireAuthModule,\n    MarkdownModule.forRoot(),\n    CodeDemoModule,\n    RouterModule\n  ]\n})\nexport class CreateSnippetModule {}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-info/snippet-info.component.html",
    "content": "<div class=\"snippets-info\">\n  This form will generate a snippet request for you.\n</div>\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-info/snippet-info.component.scss",
    "content": ":host {\n  .snippets-info {\n    float: right;\n    top: 40px;\n    max-width: 50%;\n    padding: 35px 35px 15px 35px;\n    margin-left: 30px;\n  }\n\n  .nav {\n    &-fixed-wrapper {\n      position: fixed;\n      right: 30px;\n      bottom: 30px;\n      z-index: 2000;\n    }\n\n    &-btn {\n      border-radius: 50%;\n      width: 45px;\n      height: 45px;\n      font-weight: bold;\n      display: table;\n      text-align: center;\n\n      box-shadow: 0 3px 7px rgba(0, 0, 0, 0.9);\n\n      &-go-up {\n        background: #213451;\n        color: white;\n        cursor: pointer;\n      }\n\n      p {\n        vertical-align: middle;\n        display: table-cell;\n      }\n    }\n  }\n\n  .animated {\n    animation-duration: 1s;\n  }\n\n  @keyframes fadeIn {\n    from {\n      opacity: 0;\n    }\n\n    to {\n      opacity: 1;\n    }\n  }\n\n  .fadeIn {\n    animation-name: fadeIn;\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-info/snippet-info.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-snippet-info',\n  templateUrl: './snippet-info.component.html',\n  styleUrls: ['./snippet-info.component.scss']\n})\nexport class SnippetInfoComponent {}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-modal/snippet-overview.component.html",
    "content": "<h1 mat-dialog-title>\n  Snippet Markdown\n</h1>\n<mat-dialog-content>\n  <markdown [data]=\"snippetWithFormat\"></markdown>\n</mat-dialog-content>\n<div class=\"snippet-modal-footer\">\n  <mat-dialog-actions>\n    <button mat-button (click)=\"this.dialogRef.close()\">\n      Back to form\n    </button>\n    <button mat-button (click)=\"onSubmit()\" cdkFocusInitial class=\"btn-submit\">\n      {{ isEditing ? 'Edit' : 'Create' }} Snippet\n    </button>\n  </mat-dialog-actions>\n</div>\n\n<ng-container *ngIf=\"isPRCreating\">\n  <codelab-snippet-spinner></codelab-snippet-spinner>\n</ng-container>\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-modal/snippet-overview.component.scss",
    "content": ":host {\n  h1 {\n    color: #444;\n  }\n\n  .snippet-modal {\n    &-footer {\n      float: right;\n    }\n  }\n\n  .btn-submit {\n    float: right;\n    font-weight: 400;\n    text-align: center;\n    vertical-align: middle;\n    border: 1px solid #213451;\n    font-size: 14px;\n    color: #fff;\n    background-color: #213451;\n    cursor: pointer;\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-modal/snippet-overview.component.ts",
    "content": "import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { auth } from 'firebase/app';\nimport { finalize, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { ReplaySubject } from 'rxjs/internal/ReplaySubject';\nimport { SnippetService } from '../../shared/services/snippet.service';\nimport { GitHubService } from '../../shared/services/github.service';\nimport { generateSnippet } from '../../shared/functions/generate-snippet';\nimport { SEPARATOR } from '../../shared/consts';\n\ninterface SnippetOverviewData {\n  formValue: object;\n  isEditing: boolean;\n  fileInfo: {\n    sha: string;\n    fileName: string;\n    branchName: string;\n  };\n  repoName: string;\n  repoOwner: string;\n}\n\nfunction exportSnippet(snippet) {\n  const result = { ...snippet };\n  result.links = result.links ? result.links.split(SEPARATOR) : undefined;\n  result.author = result.author || '** Your github username will be here **';\n  result.bonus = result.bonus || undefined;\n  return result;\n}\n\n@Component({\n  selector: 'codelab-snippet-overview',\n  templateUrl: './snippet-overview.component.html',\n  styleUrls: ['./snippet-overview.component.scss']\n})\nexport class SnippetOverviewComponent implements OnInit, OnDestroy {\n  destroy = new ReplaySubject<void>(1);\n\n  githubAuth;\n  isPRCreating = false;\n\n  isEditing: boolean;\n  snippet: string;\n  snippetWithFormat: string;\n\n  constructor(\n    public dialogRef: MatDialogRef<SnippetOverviewComponent>,\n    private afAuth: AngularFireAuth,\n    private snippetService: SnippetService,\n    private githubService: GitHubService,\n    private _snackBar: MatSnackBar,\n    private router: Router,\n    @Inject(MAT_DIALOG_DATA) public data: SnippetOverviewData\n  ) {}\n\n  ngOnInit() {\n    this.isEditing = this.data.isEditing;\n    this.snippet = generateSnippet(exportSnippet(this.data.formValue));\n    // This is a temporary hack.\n    // The version of markdown requires new lines between meta values, but github does not.\n    this.snippetWithFormat = this.snippet.replace(\n      /\\n(title|author|twitter|level|tags|links):/g,\n      '\\n\\n$1:'\n    );\n  }\n\n  ngOnDestroy() {\n    this.destroy.next(null);\n    this.destroy.complete();\n  }\n\n  async onSubmit() {\n    console.log('You can copy the snippet here:\\n', this.snippet);\n    this.isPRCreating = true;\n\n    if (!(this.githubAuth && this.githubAuth.credential)) {\n      await this.login();\n    }\n\n    if (this.isEditing) {\n      this.snippetService\n        .updatePR(\n          this.githubAuth,\n          this.snippet,\n          this.data.fileInfo,\n          this.data.repoName\n        )\n        .pipe(\n          finalize(() => (this.isPRCreating = false)),\n          takeUntil(this.destroy)\n        )\n        .subscribe(res =>\n          this.navigateAndShowSnackBar(\n            'Success',\n            'Snippet updated',\n            res['commit']['html_url']\n          )\n        );\n    } else {\n      this.snippetService\n        .createPR(\n          this.githubAuth,\n          this.snippet,\n          this.data.formValue['title'],\n          this.data.repoName,\n          this.data.repoOwner\n        )\n        .pipe(\n          switchMap(res =>\n            this.githubService.addLinkToEditForm(\n              this.data.repoOwner,\n              this.data.repoName,\n              res['number']\n            )\n          ),\n          switchMap(res =>\n            this.githubService.addSnippetLabel(\n              this.data.repoOwner,\n              this.data.repoName,\n              res['number']\n            )\n          ),\n          finalize(() => (this.isPRCreating = false)),\n          takeUntil(this.destroy)\n        )\n        .subscribe(res =>\n          this.navigateAndShowSnackBar(\n            'Pull request created',\n            res['title'].replace('Add - new snippet: ', ''),\n            res['html_url']\n          )\n        );\n    }\n  }\n\n  navigateAndShowSnackBar(text: string, linkLabel: string, linkUrl: string) {\n    this.dialogRef.close();\n    this.router.navigate(['list']);\n    const snakeBarRef = this._snackBar.open(text, linkLabel, {\n      duration: 20000\n    });\n    snakeBarRef\n      .onAction()\n      .pipe(take(1))\n      .subscribe(() => window.open(linkUrl));\n  }\n\n  async login() {\n    const provider = new auth.GithubAuthProvider().addScope('repo');\n    this.githubAuth = await this.afAuth.auth.signInWithPopup(provider);\n    this.data.formValue['author'] = this.githubAuth.additionalUserInfo.username;\n    this.snippet = generateSnippet(exportSnippet(this.data.formValue));\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-spinner/snippet-spinner.component.html",
    "content": "<div class=\"spinner-back-ground\">\n  <div class=\"centered-spinner\">\n    <div class=\"preload\">\n      <div></div>\n      <div></div>\n      <div></div>\n      <div></div>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-spinner/snippet-spinner.component.scss",
    "content": ".spinner-back-ground {\n  position: fixed;\n  width: 100%;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  background-color: rgba(0, 0, 0, 0.2);\n  z-index: 9999;\n}\n\n.centered-spinner {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100vw;\n  height: 100vh;\n}\n\n.preload {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  /*change these sizes to fit into your project*/\n  width: 100px;\n  height: 100px;\n}\n\n.preload div {\n  border: 0;\n  margin: 0;\n  width: 40%;\n  height: 40%;\n  position: absolute;\n  border-radius: 50%;\n  animation: spin 2s ease infinite;\n}\n\n.preload :first-child {\n  background: #19a68c;\n  animation-delay: -1.5s;\n}\n\n.preload :nth-child(2) {\n  background: #f63d3a;\n  animation-delay: -1s;\n}\n\n.preload :nth-child(3) {\n  background: #fda543;\n  animation-delay: -0.5s;\n}\n\n.preload :last-child {\n  background: #193b48;\n}\n\n@keyframes spin {\n  0%,\n  100% {\n    transform: translate(0);\n  }\n  25% {\n    transform: translate(160%);\n  }\n  50% {\n    transform: translate(160%, 160%);\n  }\n  75% {\n    transform: translate(0, 160%);\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/create-snippet/snippet-spinner/snippet-spinner.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-snippet-spinner',\n  templateUrl: './snippet-spinner.component.html',\n  styleUrls: ['./snippet-spinner.component.scss']\n})\nexport class SnippetSpinnerComponent {}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/pull-requests-list/pull-requests-list.component.html",
    "content": "<div class=\"container\">\n  <div class=\"flex-header\">\n    <h1>Open pull requests</h1>\n    <button\n      mat-raised-button\n      color=\"accent\"\n      class=\"align-center\"\n      [routerLink]=\"['/new', repoName, repoOwner]\"\n    >\n      Create new snippet\n    </button>\n  </div>\n\n  <table\n    *ngIf=\"pullsList$ | async as pullsList; else loading\"\n    mat-table\n    [dataSource]=\"pullsList\"\n  >\n    <ng-container matColumnDef=\"number\">\n      <th mat-header-cell *matHeaderCellDef>#</th>\n      <td mat-cell *matCellDef=\"let item\" class=\"mat-cell-padding\">\n        {{ item.number }}\n      </td>\n    </ng-container>\n    <ng-container matColumnDef=\"title\">\n      <th mat-header-cell *matHeaderCellDef>Title</th>\n      <td mat-cell *matCellDef=\"let item\" class=\"mat-cell-padding\">\n        <a\n          href=\"https://github.com/{{ repoOwner }}/{{ repoName }}/pull/{{\n            item.number\n          }}\"\n          target=\"_blank\"\n          >{{ item.title }}</a\n        >\n      </td>\n    </ng-container>\n    <ng-container matColumnDef=\"login\">\n      <th mat-header-cell *matHeaderCellDef>Author</th>\n      <td mat-cell *matCellDef=\"let item\" class=\"mat-cell-padding\">\n        {{ item.user.login }}\n      </td>\n    </ng-container>\n    <ng-container matColumnDef=\"created_at\">\n      <th mat-header-cell *matHeaderCellDef>Creation Date</th>\n      <td mat-cell *matCellDef=\"let item\" class=\"mat-cell-padding\">\n        {{ item.created_at | date: 'MM/dd/yyyy' }}\n      </td>\n    </ng-container>\n    <ng-container matColumnDef=\"action\">\n      <th mat-header-cell *matHeaderCellDef>Action</th>\n      <td mat-cell *matCellDef=\"let item\" class=\"mat-cell-padding\">\n        <button\n          mat-button\n          color=\"warn\"\n          [routerLink]=\"['/new', repoName, repoOwner, item['number']]\"\n        >\n          Edit\n        </button>\n      </td>\n    </ng-container>\n    <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n    <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n  </table>\n</div>\n\n<ng-template #loading>\n  loading ...\n</ng-template>\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/pull-requests-list/pull-requests-list.component.scss",
    "content": "h1 {\n  color: #444;\n}\n\n.container {\n  max-width: 850px;\n  padding: 0 15px 30px 15px;\n  margin: 0 auto;\n  font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n}\n\ntable {\n  width: 100%;\n}\n\n.mat-cell-padding {\n  padding: 0 5px;\n}\n\n.flex-header {\n  display: flex;\n  justify-content: space-between;\n}\n\n.align-center {\n  align-self: center;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/pull-requests-list/pull-requests-list.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { GitHubService } from '../shared/services/github.service';\n\nconst REPO_OWNER = 'nycJSorg';\nconst REPO_NAME = '30-seconds-of-angular';\n\n@Component({\n  selector: 'codelab-pull-requests-list',\n  templateUrl: './pull-requests-list.component.html',\n  styleUrls: ['./pull-requests-list.component.scss']\n})\nexport class PullRequestsListComponent {\n  repoOwner = REPO_OWNER;\n  repoName = REPO_NAME;\n\n  pullsList$ = this.githubService.getPullsList(this.repoOwner, this.repoName);\n\n  displayedColumns = ['number', 'title', 'login', 'created_at', 'action'];\n\n  constructor(private router: Router, private githubService: GitHubService) {}\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/angular-sample.ts",
    "content": "export const angularSampleCode = {\n  'app.component.ts': `import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Edit me </h1>\\`\n})\nexport class AppComponent {}`,\n  'app.module.ts': `import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}`,\n\n  'main.ts': `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n`,\n  'index.html': '<my-app></my-app>'\n};\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/constants.ts",
    "content": "export const MARKDOWN_PLACEHOLDER = `\nYou can use markdown here.\\n\nHighlight \\`important terms\\` with backticks.\\n\nFor examples use:\n\\`\\`\\`typescript\nconst language = 'English';\nfunction theLanguageISpeak(language) {\n  // English? No, only typescript!\n  return 'typescript'\n}\n\\`\\`\\``;\n\nexport const TAGS_LIST = [\n  'components',\n  'tip',\n  'forms',\n  'templates',\n  'styling',\n  'routing',\n  'performance'\n];\n\nexport const LINKS_PLACEHOLDER = `https://angular.io/\nhttps://www.typescriptlang.org/`;\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/consts.ts",
    "content": "export const SEPARATOR = '\\n';\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/generate-snippet.spec.ts",
    "content": "import { testSnippetMd, testSnippetParsed } from './test-data/snippet';\nimport { generateSnippet } from './generate-snippet';\n\ndescribe('GenerateSnippet', () => {\n  it('generates a simple snippet', () => {\n    const actual = generateSnippet(testSnippetParsed);\n    expect(actual).toEqual(testSnippetMd);\n  });\n\n  it('generates a snippet without demo', () => {\n    const testSnippet = { ...testSnippetParsed };\n    delete testSnippet.demo;\n    const actual = generateSnippet(testSnippet);\n    expect(actual).not.toContain('file:');\n  });\n\n  it('generates a snippet without bonus', () => {\n    const testSnippet = { ...testSnippetParsed };\n    delete testSnippet.bonus;\n    const actual = generateSnippet(testSnippet);\n    expect(actual).not.toContain('bonus');\n  });\n\n  it('generates a snippet without links', () => {\n    const testSnippet = { ...testSnippetParsed };\n    delete testSnippet.links;\n    const actual = generateSnippet(testSnippet);\n    expect(actual).not.toContain('links');\n  });\n});\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/generate-snippet.ts",
    "content": "import { Snippet } from '../interfaces/snippet';\nimport { angularSampleCode } from '../angular-sample';\nimport { SEPARATOR } from '../consts';\n\nconst config = {\n  header: ['title', 'author', 'twitter', 'level', 'links', 'tags'],\n  body: ['content', 'bonus']\n};\n\nfunction arrayToMarkdownList(tagsArray: Array<string>): string {\n  return tagsArray\n    .filter(a => a)\n    .map(x => `- ${x}`)\n    .join(`\\n`);\n}\n\nfunction generateMdHeader(keys: string[], snippet: Snippet) {\n  return keys\n    .map(key => ({\n      key,\n      value: snippet[key]\n    }))\n    .filter(({ value }) => !!value)\n    .map(({ value, key }) => {\n      if (typeof value === 'string') {\n        return `${key}: ${value}`;\n      }\n      if (Array.isArray(value)) {\n        return `${key}:\n${arrayToMarkdownList(value)}`;\n      }\n      throw new Error(key + 'is not a real key');\n    })\n    .join(SEPARATOR);\n}\n\nconst ucFirst = s => {\n  if (typeof s !== 'string') {\n    return '';\n  }\n  return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\nconst extensionTolanguage = {\n  ts: 'typescript',\n  js: 'javascript'\n};\n\nfunction getFileLanguage(fileName) {\n  const fileExtension =\n    fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length) ||\n    fileName;\n  return extensionTolanguage[fileExtension] || fileExtension;\n}\n\n/**\n * Drop markdown \"```language```\" from the code\n */\nfunction addMarkdownLanguageMark(code: string, filename: string) {\n  return `\\`\\`\\`${getFileLanguage(filename)}\n${code}\n\\`\\`\\``;\n}\n\nfunction generateMdBody(keys: string[], snippet: Snippet) {\n  return keys\n    .map(key => ({\n      key,\n      value: snippet[key]\n    }))\n    .filter(({ value, key }) => !!value)\n    .map(({ value, key }) => {\n      return `# ${ucFirst(key)}\n${value}\n`;\n    })\n    .join(SEPARATOR);\n}\n\nfunction generateDemo(snippet) {\n  if (!snippet.demo) {\n    return '';\n  }\n\n  return (\n    Object.entries(snippet.demo)\n      .filter(([key, value]) => value && value !== angularSampleCode[key])\n      .map(([key, value]) => {\n        return `# file:${key}\n${addMarkdownLanguageMark(value.toString(), key)}`;\n      })\n      .join(SEPARATOR) + SEPARATOR\n  );\n}\n\nexport function generateSnippet(snippet: Snippet) {\n  const header = generateMdHeader(config.header, snippet);\n  const body = generateMdBody(config.body, snippet);\n  const demo = generateDemo(snippet);\n  return `---\n${header}\n---\n${body}\n${demo}`;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/parse-snippet.spec.ts",
    "content": "import { parseSnippet } from './parse-snippet';\nimport {\n  testSnippetEdgeCases,\n  testSnippetMd,\n  testSnippetMinimal,\n  testSnippetParsed\n} from './test-data/snippet';\n\ndescribe('ParseSnippet', () => {\n  it('parses a simple snippet', () => {\n    const actual = parseSnippet(testSnippetMd);\n    expect(actual).toEqual(testSnippetParsed);\n  });\n\n  it('testSnippetMinimal', () => {\n    const actual = parseSnippet(testSnippetMinimal);\n    expect(actual.bonus).toBe('');\n    expect(actual.links).toEqual(undefined);\n    expect(actual.demo).toEqual(undefined);\n    expect(actual.content).toEqual('Content');\n  });\n\n  it('works when file names have spaces', () => {\n    const actual = parseSnippet(testSnippetEdgeCases);\n\n    expect(actual.demo).toEqual({\n      'app.component.ts':\n        \"import { Component } from '@angular/core';\\n\\n@Component({\\n  selector: 'my-app',\\n  template: `<h1>Edit me </h1>`\\n})\\nexport class AppComponent {}\",\n      'app.module.ts':\n        \"import { BrowserModule } from '@angular/platform-browser';\\nimport { NgModule } from '@angular/core';\\nimport { AppComponent } from './app.component';\\n\" +\n        '\\n@NgModule({\\n  imports: [BrowserModule],\\n  declarations: [AppComponent],\\n' +\n        '  bootstrap: [AppComponent]\\n})\\nexport class AppModule {}',\n      'main.ts':\n        \"import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\nimport { AppModule } from './app.module';\" +\n        '\\n\\nplatformBrowserDynamic().bootstrapModule(AppModule);\\n',\n      'index.html': '<my-app></my-app>',\n      'app.svg': '<circle r=100 fill=red></circle>'\n    });\n  });\n});\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/parse-snippet.ts",
    "content": "import { angularSampleCode } from '../angular-sample';\n\n// @ts-ignore\n// If you delete this you get a run time error.\n// This is needed for gray-matter\nwindow.Buffer = {\n  from() {}\n};\n\n// @ts-ignore\nconst matter = require('gray-matter');\n\n/**\n *\n * Takes markdown and returns content.\n * e.g. input:\n *\n * # LOL\n * 1\n * # HI\n * 2\n *\n * result:\n *\n * {LOL: \"1\", HI: \"2\"}\n */\nfunction extractHeaders(str) {\n  const match = ('\\n' + str + '\\n#').match(/\\n#+.*\\n[\\s\\S]*?(?=\\n#)/g);\n  return !match\n    ? { content: str }\n    : match.reduce((result, a) => {\n        const [, header, content] = a.match(/^\\n#+(.*)\\n([\\s\\S]*)$/);\n        result[header.trim().toLocaleLowerCase()] = content.trim();\n        return result;\n      }, {});\n}\n\n/**\n *\n * Takes markdown and returns content.\n * e.g. input:\n *\n * ---\n * title: Hello\n * tags:\n * - tips\n * - good-to-know\n * ---\n *\n * # LOL\n * 1\n * # HI\n * 2\n *\n * result:\n *\n * {title: \"Hello\", tags: [\"tips\", \"good-to-know\"], LOL: \"1\", HI: \"2\"}\n *\n */\nfunction mdTextToJson(snippet: string) {\n  const metaData = matter(snippet);\n  return { ...extractHeaders(metaData.content), ...metaData.data };\n}\n\n/**\n * Drop markdown \"```language```\" from the code\n */\nfunction stripMarkdownLanguageMark(code = '') {\n  return code.replace(/```\\w+\\n/, '').replace(/\\n```/, '');\n}\n\nfunction normalize(text) {\n  return text ? text.replace(/↵/g, '\\n') : '';\n}\n\nexport function parseSnippet(snippetBody: string) {\n  const snippet = mdTextToJson(snippetBody);\n  snippet.content = normalize(snippet.content);\n  snippet.bonus = normalize(snippet.bonus);\n\n  const demoFiles = Object.entries(snippet)\n    .filter(([key]) => key.startsWith('file:'))\n    .reduce((files, [key, value]) => {\n      files[key.replace(/^file:/, '').trim()] = stripMarkdownLanguageMark(\n        value.toString()\n      );\n      return files;\n    }, {});\n\n  if (Object.keys(demoFiles).length) {\n    snippet.demo = {\n      ...angularSampleCode,\n      ...demoFiles\n    };\n  }\n\n  return snippet;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/test-data/snippet.ts",
    "content": "export const testSnippetMd = `---\ntitle: title\nauthor: author\ntwitter: kirjs\nlevel: intermediate\nlinks:\n- gogel.com\n- 123.com\ntags:\n- tip\n---\n# Content\nContent\n\n# Bonus\nWow bonus\n\n# file:app.component.ts\n\\`\\`\\`typescript\nimport { Component } from '@angular/core';\n @Component({\n  selector: 'my-app',\n  templateUrl: './app.svg'\n})\nexport class AppComponent {}\n\\`\\`\\`\n# file:app.svg\n\\`\\`\\`svg\n<circle r=100 fill=red></circle>\n\\`\\`\\`\n`;\n\nexport const testSnippetParsed = {\n  content: 'Content',\n  bonus: 'Wow bonus',\n  'file:app.component.ts':\n    \"```typescript\\nimport { Component } from '@angular/core';\\n @Component({\\n  selector: 'my-app',\\n  templateUrl: './app.svg'\\n})\\nexport class AppComponent {}\\n```\",\n  'file:app.svg': '```svg\\n<circle r=100 fill=red></circle>\\n```',\n  title: 'title',\n  author: 'author',\n  twitter: 'kirjs',\n  level: 'intermediate',\n  links: ['gogel.com', '123.com'],\n  tags: ['tip'],\n  demo: {\n    'app.component.ts':\n      \"import { Component } from '@angular/core';\\n @Component({\\n  selector: 'my-app',\\n  templateUrl: './app.svg'\\n})\\nexport class AppComponent {}\",\n    'app.module.ts':\n      \"import { BrowserModule } from '@angular/platform-browser';\\nimport { NgModule } from '@angular/core';\\nimport { AppComponent } from './app.component';\\n\" +\n      '\\n@NgModule({\\n  imports: [BrowserModule],\\n  declarations: [AppComponent],\\n  bootstrap: [AppComponent]\\n})\\nexport class AppModule {}',\n    'main.ts':\n      \"import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\nimport { AppModule } from './app.module';\\n\\nplatformBrowserDynamic().bootstrapModule(AppModule);\\n\",\n    'index.html': '<my-app></my-app>',\n    'app.svg': '<circle r=100 fill=red></circle>'\n  }\n};\n\nexport const testSnippetMinimal = `---\ntitle: title\nauthor: author\ntwitter: kirjs\nlevel: intermediate\ntags:\n- tip\n---\n# Content\nContent`;\n\nexport const testSnippetEdgeCases = `---\ntitle: title\nauthor: author\ntwitter: kirjs\nlevel: intermediate\ntags:\n- tip\n---\n# Content\nContent\n\n# file: app.svg\n\\`\\`\\`svg\n<circle r=100 fill=red></circle>\n\\`\\`\\`\n`;\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/validation/index.ts",
    "content": "export * from './validation';\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/functions/validation/validation.ts",
    "content": "import { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { AbstractControl } from '@angular/forms';\n\nexport function markFormControlsAsTouched(\n  formGroup: FormGroup | FormArray\n): void {\n  Object.values(formGroup.controls).forEach(control => {\n    if (control instanceof FormControl) {\n      control.markAsTouched({ onlySelf: true });\n    } else if (control instanceof FormGroup || control instanceof FormArray) {\n      markFormControlsAsTouched(control);\n    }\n  });\n}\n\nexport function validatorMaxTags(maximumTags: number) {\n  return (control: AbstractControl) => {\n    return Array.isArray(control.value) && control.value.length > maximumTags\n      ? { tagsError: `Number of tags should be below ${maximumTags + 1}` }\n      : null;\n  };\n}\n\nexport function validatorMaxLines(lines: number) {\n  return (control: AbstractControl) => {\n    return control.value.split('\\n').length > lines\n      ? { linesError: `This field shouldn't have more than ${lines} lines` }\n      : null;\n  };\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/index.ts",
    "content": "export * from './angular-sample';\nexport * from './constants';\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/branch.interface.ts",
    "content": "export interface Branch {\n  ref: string;\n  node_id: string;\n  url: string;\n  object: {\n    type: string;\n    sha: string;\n    url: string;\n  };\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/commit-info.interface.ts",
    "content": "export interface CommitInfo {\n  message: string;\n  content: string;\n  branchName: string;\n  filePath: string;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/github-auth.interface.ts",
    "content": "import { User } from './user.interface';\n\nexport interface GithubAuth {\n  additionalUserInfo: {\n    profile: User;\n  };\n  credential: {\n    accessToken: string;\n  };\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/index.ts",
    "content": "export * from './branch.interface';\nexport * from './github-auth.interface';\nexport * from './repo.interface';\nexport * from './user.interface';\nexport * from './pull-request.intreface';\nexport * from './commit-info.interface';\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/pull-request.intreface.ts",
    "content": "export interface CreatePullRequest {\n  title: string;\n  body: string;\n  branchName: string;\n  labels?: Array<string>;\n}\n\nexport interface PullRequest {\n  title: string;\n  html_url: string;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/repo.interface.ts",
    "content": "export interface Repo {\n  name: string;\n  full_name: string;\n  sha: string;\n  url: string;\n  git_refs_url: string;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/snippet.ts",
    "content": "export type Snippet = Record<string, any>;\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/interfaces/user.interface.ts",
    "content": "export interface User {\n  login: string;\n  repos_url: string;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/services/github.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { catchError, map } from 'rxjs/operators';\nimport { throwError } from 'rxjs/internal/observable/throwError';\nimport { MonoTypeOperatorFunction } from 'rxjs/internal/types';\nimport {\n  Branch,\n  CommitInfo,\n  CreatePullRequest,\n  Repo,\n  User\n} from '../interfaces';\n\n// TODO work on github api names\n// Here is an example link: https://github.com/github-tools/github\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GitHubService {\n  private apiGithubUrl = 'https://api.github.com';\n  private options: object;\n\n  constructor(private http: HttpClient, private _snackBar: MatSnackBar) {}\n\n  showSnackbarOnError<T>(message: string): MonoTypeOperatorFunction<T> {\n    return catchError(() => {\n      this._snackBar.open(message, '', { duration: 10000 });\n      return throwError(new Error(message));\n    });\n  }\n\n  setToken(token: string) {\n    this.options = { headers: { Authorization: `token ${token}` } };\n  }\n\n  getRepo(owner: string, repoName: string): Observable<Repo> {\n    requires(owner, 'Owner is required');\n    requires(repoName, 'Repo name is required');\n\n    const requestUrl = `${this.apiGithubUrl}/repos/${owner}/${repoName}`;\n    return this.http\n      .get<Repo>(requestUrl, this.options)\n      .pipe(this.showSnackbarOnError(\"Can't get repo\"));\n  }\n\n  getMyRepos(user: User): Observable<Repo[]> {\n    requires(user, 'User is required');\n\n    return this.http\n      .get<Repo[]>(user.repos_url, this.options)\n      .pipe(this.showSnackbarOnError(\"Can't fetch user repos\"));\n  }\n\n  forkRepo(repo: Repo): Observable<Repo> {\n    requires(repo, 'Repository is required');\n\n    const requestUrl = `${this.apiGithubUrl}/repos/${repo.full_name}/forks`;\n    return this.http\n      .post<Repo>(requestUrl, {}, this.options)\n      .pipe(this.showSnackbarOnError(\"Can't fork 30 secs repo\"));\n  }\n\n  getMasterBranch(repo: Repo): Observable<Branch> {\n    requires(repo, 'Repository is required');\n\n    const requestUrl = `${this.apiGithubUrl}/repos/${repo.full_name}/git/refs/heads/master`;\n    return this.http\n      .get<Branch>(requestUrl, this.options)\n      .pipe(\n        this.showSnackbarOnError(\n          `Can't fetch master branch of ${repo.full_name}`\n        )\n      );\n  }\n\n  createBranch(\n    repo: Repo,\n    baseBranch: Branch,\n    branchName: string\n  ): Observable<Branch> {\n    requires(repo, 'Repository is required');\n    requires(baseBranch, 'Base branch is required');\n    requires(branchName, 'Branch name is required');\n\n    const requestUrl = `${this.apiGithubUrl}/repos/${repo.full_name}/git/refs`;\n    const branchRef = `refs/heads/${branchName}`;\n    const requestData = {\n      ref: branchRef,\n      sha: baseBranch.object.sha\n    };\n\n    return this.http\n      .post<Branch>(requestUrl, requestData, this.options)\n      .pipe(\n        this.showSnackbarOnError(\n          `Can't create branch ${branchName} of base branch ${baseBranch.object.url}`\n        )\n      );\n  }\n\n  createCommit(repo: Repo, commitInfo: CommitInfo): Observable<any> {\n    requires(repo, 'Repository is required');\n    requires(commitInfo, 'Commit is required');\n\n    const requestUrl = `${this.apiGithubUrl}/repos/${repo.full_name}/${commitInfo.filePath}`;\n    const requestData = {\n      message: commitInfo.message,\n      branch: commitInfo.branchName,\n      content: commitInfo.content\n    };\n\n    return this.http\n      .put(requestUrl, requestData, this.options)\n      .pipe(this.showSnackbarOnError(\"Can't create commit\"));\n  }\n\n  createPullRequest(\n    repo: Repo,\n    user: User,\n    pullRequest: CreatePullRequest\n  ): Observable<any> {\n    requires(repo, 'Repository is required');\n    requires(user, 'User is required');\n    requires(pullRequest, 'Pull request is required');\n\n    const requestUrl = `${this.apiGithubUrl}/repos/${repo.full_name}/pulls`;\n    const requestData = {\n      title: pullRequest.title,\n      head: `${user.login}:${pullRequest.branchName}`,\n      base: 'master',\n      body: pullRequest.body,\n      labels: pullRequest.labels\n    };\n\n    return this.http\n      .post(requestUrl, requestData, this.options)\n      .pipe(this.showSnackbarOnError(\"Can't create pull request\"));\n  }\n\n  getPullsList(owner: string, repoName: string): Observable<any> {\n    return this.http\n      .get<any>(\n        `${this.apiGithubUrl}/repos/${owner}/${repoName}/pulls`,\n        this.options\n      )\n      .pipe(\n        map(res =>\n          res.filter(\n            x =>\n              x['labels'].length &&\n              x['labels'].map(y => y['name']).indexOf('snippet') > -1\n          )\n        ),\n        this.showSnackbarOnError(\"Can't fetch user repos\")\n      );\n  }\n\n  getPullByPullNumber(\n    owner: string,\n    repoName: string,\n    pullNumber: number\n  ): Observable<any> {\n    return this.http\n      .get<any>(\n        `${this.apiGithubUrl}/repos/${owner}/${repoName}/pulls/${pullNumber}`,\n        this.options\n      )\n      .pipe(this.showSnackbarOnError(\"Can't get pull request\"));\n  }\n\n  addLinkToEditForm(\n    owner: string,\n    repoName: string,\n    pullNumber: number\n  ): Observable<any> {\n    return this.http\n      .patch<any>(\n        `${this.apiGithubUrl}/repos/${owner}/${repoName}/pulls/${pullNumber}`,\n        {\n          body: `Here you can edit snippet content: https://30.codelab.fun/new/${pullNumber}`\n        },\n        this.options\n      )\n      .pipe(this.showSnackbarOnError(\"Can't update pull request\"));\n  }\n\n  addSnippetLabel(owner: string, repoName: string, issueNumber: number) {\n    return this.http\n      .patch<any>(\n        `${this.apiGithubUrl}/repos/${owner}/${repoName}/issues/${issueNumber}`,\n        { labels: ['snippet'] },\n        this.options\n      )\n      .pipe(this.showSnackbarOnError(\"Can't get issues list\"));\n  }\n\n  getPullFileByPullNumber(\n    owner: string,\n    repoName: string,\n    pullNumber: number\n  ): Observable<any> {\n    return this.http\n      .get<any>(\n        `${this.apiGithubUrl}/repos/${owner}/${repoName}/pulls/${pullNumber}/files`,\n        this.options\n      )\n      .pipe(this.showSnackbarOnError(\"Can't get pull request file\"));\n  }\n\n  getSnippetBody(url) {\n    return this.http\n      .get<any>(url, this.options)\n      .pipe(this.showSnackbarOnError(\"Can't get snippet body\"));\n  }\n\n  updateFile(repoFullName, snippetData, fileInfo): Observable<any> {\n    const requestUrl = `${this.apiGithubUrl}/repos/${repoFullName}/contents/${fileInfo['fileName']}`;\n    const requestPayload = {\n      message: `Snippet Update`,\n      content: btoa(snippetData),\n      sha: fileInfo['sha'],\n      branch: fileInfo['branchName']\n    };\n    return this.http\n      .put<any>(requestUrl, requestPayload, this.options)\n      .pipe(this.showSnackbarOnError('Cannot update file'));\n  }\n}\n\nfunction requires(expression: any, message: string) {\n  if (!expression) {\n    throw new Error(message);\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/services/snippet.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\nimport { SnippetService } from './snippet.service';\nimport { GitHubService } from './github.service';\nimport { of } from 'rxjs';\nimport SpyObj = jasmine.SpyObj;\n\ndescribe('SnippetService', () => {\n  let gitHubService: SpyObj<GitHubService>;\n  const repoName = '30seconds';\n  const repoOwner = 'PIKACHU';\n  const pullNumber = 689;\n\n  beforeEach(() => {\n    gitHubService = jasmine.createSpyObj('gitHubService', [\n      'getPullByPullNumber',\n      'getPullFileByPullNumber',\n      'getSnippetBody'\n    ]);\n\n    TestBed.configureTestingModule({\n      providers: [\n        {\n          provide: GitHubService,\n          useValue: gitHubService\n        }\n      ]\n    });\n  });\n\n  it('should be created', () => {\n    const snippet = 'pirojok';\n    const fileName = 'john';\n    const contents_url = 'LOL';\n    const branchName = 'branch';\n\n    const service: SnippetService = TestBed.inject(SnippetService);\n\n    gitHubService.getPullByPullNumber.and.returnValue(\n      of({\n        head: { ref: branchName }\n      })\n    );\n    const sha = 'sa sha';\n\n    gitHubService.getPullFileByPullNumber.and.returnValue(\n      of([\n        {\n          contents_url,\n          sha,\n          filename: fileName\n        }\n      ])\n    );\n\n    gitHubService.getSnippetBody.and.returnValue(\n      of({\n        content: btoa(snippet)\n      })\n    );\n\n    service.fetchPR(repoName, repoOwner, pullNumber).subscribe(result => {\n      expect(result).toEqual({\n        branchName,\n        fileName,\n        sha,\n        snippet\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/app/shared/services/snippet.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { debounceTime, map, switchMap } from 'rxjs/operators';\nimport slugify from 'slugify';\nimport { GitHubService } from './github.service';\nimport {\n  Branch,\n  CommitInfo,\n  CreatePullRequest,\n  GithubAuth,\n  PullRequest,\n  Repo,\n  User\n} from '../interfaces';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SnippetService {\n  constructor(private githubService: GitHubService) {}\n\n  fetchPR(repoName: string, repoOwner: string, pullNumber: number) {\n    // todo move it to service later\n    const pr$ = this.githubService.getPullByPullNumber(\n      repoOwner,\n      repoName,\n      pullNumber\n    );\n    const file$ = this.githubService\n      .getPullFileByPullNumber(repoOwner, repoName, pullNumber)\n      .pipe(\n        switchMap(([file]) => {\n          return this.githubService.getSnippetBody(file['contents_url']).pipe(\n            map(res => {\n              const body = atob(res.content);\n              return {\n                ...res[0],\n                body,\n                sha: file['sha'],\n                fileName: file['filename']\n              };\n            })\n          );\n        })\n      );\n\n    return combineLatest([file$, pr$]).pipe(\n      map(([file, pr]) => {\n        return {\n          sha: file['sha'],\n          fileName: file['fileName'],\n          snippet: file['body'] as string,\n          branchName: pr['head']['ref']\n        };\n      })\n    );\n  }\n\n  updatePR(\n    githubAuth: GithubAuth,\n    snippetData: string,\n    fileInfo: object,\n    repoName: string\n  ): Observable<any> {\n    this.githubService.setToken(githubAuth.credential.accessToken);\n    const user: User = githubAuth.additionalUserInfo.profile;\n\n    return this.githubService.getMyRepos(user).pipe(\n      switchMap((repos: Repo[]) => {\n        const repo = repos.find(r => r.name === repoName);\n        return this.githubService.updateFile(\n          repo.full_name,\n          snippetData,\n          fileInfo\n        );\n      })\n    );\n  }\n\n  createPR(\n    githubAuth: GithubAuth,\n    snippetData: string,\n    title: string,\n    repoName: string,\n    repoOwner: string\n  ): Observable<PullRequest> {\n    requires(githubAuth, 'Github auth is required');\n    requires(snippetData, 'Snippet is required');\n    requires(title, 'Snippet title is required');\n\n    this.githubService.setToken(githubAuth.credential.accessToken);\n\n    const branchName = `new_snippet_${this.toLowerCaseAndSlugify(title)}`;\n    const filePath = `contents/snippets/${this.toLowerCaseAndSlugify(\n      title\n    )}.md`;\n\n    const user: User = githubAuth.additionalUserInfo.profile;\n    return this.githubService.getRepo(repoOwner, repoName).pipe(\n      switchMap((baseRepo: Repo) => {\n        return this.githubService.getMyRepos(user).pipe(\n          switchMap((repos: Repo[]) => {\n            const repo = repos.find(r => r.name === repoName);\n            return repo\n              ? of(repo)\n              : this.githubService.forkRepo(baseRepo).pipe(debounceTime(5000));\n          }),\n          switchMap((userRepo: Repo) => {\n            return this.githubService.getMasterBranch(userRepo).pipe(\n              switchMap((masterBranch: Branch) => {\n                return this.githubService.createBranch(\n                  userRepo,\n                  masterBranch,\n                  branchName\n                );\n              }),\n              switchMap(() => {\n                const commit: CommitInfo = {\n                  message:\n                    'I have added awesome snippet. Look at my awesome snippet!',\n                  content: btoa(snippetData),\n                  branchName: branchName,\n                  filePath: filePath\n                };\n                return this.githubService.createCommit(userRepo, commit);\n              }),\n              switchMap(() => {\n                const pullRequest: CreatePullRequest = {\n                  title: `Add - new snippet: ${title}`,\n                  body: 'Here is a new snippet. Hope you like it :)',\n                  labels: ['snippet'],\n                  branchName: branchName\n                };\n                return this.githubService.createPullRequest(\n                  baseRepo,\n                  user,\n                  pullRequest\n                );\n              })\n            );\n          })\n        );\n      })\n    );\n  }\n\n  private toLowerCaseAndSlugify(str: string) {\n    return slugify(str.toLowerCase());\n  }\n}\n\nfunction requires(expression: any, message: string) {\n  if (!expression) {\n    throw new Error(message);\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "apps/angular-thirty-seconds/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true\n};\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>AngularThirtySeconds</title>\n    <base href=\"/\" />\n\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link\n      rel=\"icon\"\n      type=\"image/x-icon\"\n      href=\"apps/angular-thirty-seconds/src/favicon.ico\"\n    />\n  </head>\n  <body>\n    <codelab-root></codelab-root>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic()\n  .bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/polyfills.ts",
    "content": "/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n *   2. Application imports. Files imported after ZoneJS that should be loaded before your main\n *      file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\n// import 'classlist.js';  // Run `npm install --save classlist.js`.\n\n/**\n * Web Animations `@angular/platform-browser/animations`\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\n */\n// import 'web-animations-js';  // Run `npm install --save web-animations-js`.\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags.ts';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n *  with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n *  (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/styles.scss",
    "content": "@import '~@angular/material/prebuilt-themes/indigo-pink.css';\n\nhtml,\nbody {\n  margin: 0;\n  padding: 0;\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "apps/angular-thirty-seconds/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../../dist/out-tsc\",\n    \"types\": []\n  },\n  \"exclude\": [\"test.ts\", \"**/*.spec.ts\"],\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\"]\n  }\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "apps/angular-thirty-seconds/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "apps/blog/browserslist",
    "content": "# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n#\n# For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11"
  },
  {
    "path": "apps/blog/jest.config.js",
    "content": "module.exports = {\n  name: 'blog',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/apps/blog/'\n};\n"
  },
  {
    "path": "apps/blog/src/app/app.component.html",
    "content": "<div routerLink=\"/\">\n  <h2><span>Angular Codelab Newsletter</span></h2>\n  <img src=\"/assets/images/logo.png\" />\n</div>\n\n<router-outlet></router-outlet>\n"
  },
  {
    "path": "apps/blog/src/app/app.component.scss",
    "content": "h2 {\n  color: white;\n  text-align: center;\n  height: 70px;\n  background-image: linear-gradient(to right, red, white);\n  width: 90%;\n}\ndiv {\n  width: 100%;\n  display: flex;\n}\n\nspan {\n  margin: auto;\n  display: inline-block;\n  vertical-align: middle;\n  line-height: normal;\n  margin-top: 20px;\n}\n\nimg {\n  height: 100px;\n  margin-left: auto;\n}\n"
  },
  {
    "path": "apps/blog/src/app/app.component.spec.ts",
    "content": "import { TestBed, async } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\nimport { RouterTestingModule } from '@angular/router/testing';\n\ndescribe('AppComponent', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [RouterTestingModule],\n      declarations: [AppComponent]\n    }).compileComponents();\n  }));\n\n  it('should create the app', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app).toBeTruthy();\n  });\n\n  it(`should have as title 'blog'`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app.title).toEqual('blog');\n  });\n\n  it('should render title in a h1 tag', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.debugElement.nativeElement;\n    expect(compiled.querySelector('h1').textContent).toContain(\n      'Welcome to blog!'\n    );\n  });\n});\n"
  },
  {
    "path": "apps/blog/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n  title = 'blog';\n}\n"
  },
  {
    "path": "apps/blog/src/app/app.module.ts",
    "content": "import { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RouterModule, Routes } from '@angular/router';\nimport { MarkdownModule } from 'ngx-markdown';\n\nimport { environment } from '../../../../apps/codelab/src/environments/environment';\nimport { AppComponent } from './app.component';\nimport { FeedComponent } from './feed/feed.component';\nimport { FormComponent } from './form/form.component';\nimport { PostService } from './post.service';\nimport { PostComponent } from './post/post.component';\nimport { SinglePostComponent } from './single-post/single-post.component';\n\nexport const angularFire = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\nconst appRoutes: Routes = [\n  { path: 'post/:id', component: PostComponent },\n  { path: '', component: FeedComponent },\n  { path: 'form', component: FormComponent }\n];\n\n@NgModule({\n  declarations: [\n    AppComponent,\n    FormComponent,\n    FeedComponent,\n    PostComponent,\n    SinglePostComponent\n  ],\n  imports: [\n    BrowserModule,\n    MarkdownModule.forRoot(),\n    MatFormFieldModule,\n    MatSelectModule,\n    ReactiveFormsModule,\n    HttpClientModule,\n    AngularFireDatabaseModule,\n    angularFire,\n    MatCardModule,\n    AngularFireAuthModule,\n    MatSnackBarModule,\n\n    RouterModule.forRoot(appRoutes, { initialNavigation: 'enabled' })\n  ],\n  providers: [PostService],\n  bootstrap: [AppComponent],\n  exports: [FormComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/blog/src/app/common.ts",
    "content": "export interface Post {\n  key?: string;\n  title: string;\n  author: string;\n  text: string;\n  date: string;\n  hidden: boolean;\n}\n"
  },
  {
    "path": "apps/blog/src/app/feed/feed.component.html",
    "content": "<a routerLink=\"/form\">Tell us what you have done!</a>\n\n<div *ngFor=\"let post of posts$ | async\">\n  <codelab-single-post [post]=\"post\" [full]=\"false\"></codelab-single-post>\n  <div></div>\n</div>\n"
  },
  {
    "path": "apps/blog/src/app/feed/feed.component.scss",
    "content": ""
  },
  {
    "path": "apps/blog/src/app/feed/feed.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { FeedComponent } from './feed.component';\n\ndescribe('FeedComponent', () => {\n  let component: FeedComponent;\n  let fixture: ComponentFixture<FeedComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [FeedComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FeedComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/blog/src/app/feed/feed.component.ts",
    "content": "import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { PostService } from '../post.service';\nimport { Observable } from 'rxjs';\nimport { Post } from '../common';\nimport { map } from 'rxjs/operators';\n\n@Component({\n  selector: 'codelab-feed',\n  templateUrl: './feed.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['./feed.component.scss']\n})\nexport class FeedComponent {\n  posts$: Observable<Post[]>;\n\n  constructor(private postService: PostService) {\n    this.posts$ = this.postService.repo$.snapshotChanges().pipe(\n      map(items => {\n        return items\n          .map(a => {\n            return {\n              ...a.payload.val(),\n              key: a.payload.key\n            };\n          })\n          .reverse();\n      })\n    );\n  }\n}\n"
  },
  {
    "path": "apps/blog/src/app/form/form.component.html",
    "content": "<h3>Tell us what's new</h3>\n<form class=\"container\" [formGroup]=\"myform\" (ngSubmit)=\"onSubmit()\">\n  <input\n    type=\"text\"\n    placeholder=\"Title\"\n    class=\"form-control\"\n    [formControl]=\"title\"\n    required\n  />\n\n  <input\n    type=\"text\"\n    placeholder=\"Name\"\n    class=\"form-control\"\n    [formControl]=\"author\"\n    required\n  />\n\n  <textarea\n    rows=\"5\"\n    class=\"form-control\"\n    [formControl]=\"text\"\n    placeholder=\"Text\"\n    required\n    (keydown.control.enter)=\"onSubmit()\"\n  >\n  </textarea>\n\n  <button\n    type=\"submit\"\n    class=\"btn btn-primary form-control\"\n    [attr.disabled]=\"myform.valid ? null : true\"\n  >\n    Submit\n  </button>\n</form>\n\n<a routerLink=\"\">Back</a>\n"
  },
  {
    "path": "apps/blog/src/app/form/form.component.scss",
    "content": ".container {\n  display: flex;\n  flex-direction: column;\n  width: 40%;\n}\n\ninput,\ntextarea {\n  width: 600px;\n}\n\n.form-control {\n  margin: 2px;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n"
  },
  {
    "path": "apps/blog/src/app/form/form.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { FormComponent } from './form.component';\n\ndescribe('FormComponent', () => {\n  let component: FormComponent;\n  let fixture: ComponentFixture<FormComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [FormComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FormComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/blog/src/app/form/form.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { PostService } from '../post.service';\nimport { Router } from '@angular/router';\nimport { Post } from '../common';\n\n@Component({\n  selector: 'codelab-form',\n  templateUrl: './form.component.html',\n  styleUrls: ['./form.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormComponent {\n  title = new FormControl('', Validators.required);\n  author = new FormControl('', Validators.required);\n  text = new FormControl('', Validators.required);\n  date: Date;\n  post: Observable<Post>;\n  myform = new FormGroup({\n    title: this.title,\n    author: this.author,\n    text: this.text\n  });\n  statusMessage = '';\n  error = false;\n\n  constructor(\n    private http: HttpClient,\n    private postService: PostService,\n    private router: Router\n  ) {}\n\n  onSubmit() {\n    const formValues: any = this.myform.getRawValue();\n    this.postService\n      .addPost(formValues)\n      .then(({ key }) => {\n        this.myform.reset();\n        this.router.navigateByUrl(`post/${key}`);\n      })\n      .catch(() => {\n        this.statusMessage = 'Error';\n        this.error = true;\n      });\n  }\n}\n"
  },
  {
    "path": "apps/blog/src/app/post/post.component.html",
    "content": "<ng-container *ngIf=\"post$ | async as post\">\n  <codelab-single-post\n    [post]=\"post\"\n    [full]=\"true\"\n    [key]=\"key\"\n  ></codelab-single-post>\n  <button routerLink=\"/\">Back</button>\n</ng-container>\n"
  },
  {
    "path": "apps/blog/src/app/post/post.component.scss",
    "content": ".text {\n  overflow: hidden;\n  max-height: 100px;\n}\n"
  },
  {
    "path": "apps/blog/src/app/post/post.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PostComponent } from './post.component';\n\ndescribe('PostComponent', () => {\n  let component: PostComponent;\n  let fixture: ComponentFixture<PostComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [PostComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PostComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/blog/src/app/post/post.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Post } from '../common';\nimport { PostService } from '../post.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { MarkdownModule } from 'ngx-markdown';\n\n@Component({\n  selector: 'codelab-post',\n  templateUrl: './post.component.html',\n  styleUrls: ['./post.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PostComponent implements OnInit {\n  post$: Observable<Post>;\n  key: string;\n\n  constructor(\n    private postService: PostService,\n    private route: ActivatedRoute\n  ) {}\n\n  ngOnInit() {\n    this.key = this.route.snapshot.params['id'];\n    this.post$ = this.postService.getPost(this.key);\n  }\n}\n"
  },
  {
    "path": "apps/blog/src/app/post.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { AngularFireDatabase, AngularFireList } from '@angular/fire/database';\nimport { Observable } from 'rxjs';\nimport { Post } from './common';\nimport { database } from 'firebase/app';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PostService {\n  repo$: AngularFireList<Post> = this.database.list('/posts', ref => {\n    return ref.orderByChild('hidden').equalTo(null);\n  });\n\n  constructor(private database: AngularFireDatabase) {}\n\n  getPostById(id: string) {\n    return this.database.object(`posts/${id}`);\n  }\n\n  removePost(id: string) {\n    return this.getPostById(id).remove();\n  }\n\n  updatePost(id: string, post: Partial<Post>) {\n    return this.getPostById(id).update(post);\n  }\n\n  addPost(post: Post): any {\n    return this.repo$.push({\n      ...post,\n      date: database.ServerValue.TIMESTAMP as string\n    });\n  }\n\n  getPost(id: string): Observable<any> {\n    return this.getPostById(id).valueChanges();\n  }\n}\n"
  },
  {
    "path": "apps/blog/src/app/single-post/single-post.component.html",
    "content": "<mat-card>\n  <mat-card-content>\n    <p class=\"head\">\n      <span class=\"title\">{{ post.title }}</span>\n      <span class=\"date\"\n        >by <span>{{ post.author }}</span> on\n        {{ post.date | date: 'short' }}</span\n      >\n    </p>\n\n    <div class=\"container\">\n      <markdown ngPreserveWhitespaces>\n        <div [class.text]=\"!full\" [innerHTML]=\"post.text\"></div>\n      </markdown>\n\n      <span *ngIf=\"!full\"><a routerLink=\"/post/{{ post.key }}\">More</a> </span>\n      <span *ngIf=\"full\">\n        <button (click)=\"edit()\">Edit</button>\n        <button (click)=\"delete()\">Delete</button>\n      </span>\n    </div>\n  </mat-card-content>\n</mat-card>\n"
  },
  {
    "path": "apps/blog/src/app/single-post/single-post.component.scss",
    "content": ".date {\n  float: right;\n  margin-right: 5px;\n}\n\n.title {\n  margin-top: 0px;\n  margin-top: 0px;\n  padding-left: 5px;\n}\n\nmat-card {\n  margin-bottom: 10px;\n  padding-bottom: 10px;\n}\n.text {\n  overflow: hidden;\n  max-height: 100px;\n}\n\n.gradient {\n  position: absolute;\n  height: 130px;\n  bottom: 0;\n  width: 100%;\n}\n\n.container {\n  position: relative;\n}\n"
  },
  {
    "path": "apps/blog/src/app/single-post/single-post.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { AccessService } from '../../../../codelab/src/app/shared/services/access.service';\nimport { Post } from '../common';\nimport { PostService } from '../post.service';\nimport { Router } from '@angular/router';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n  selector: 'codelab-single-post',\n  templateUrl: './single-post.component.html',\n  styleUrls: ['./single-post.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SinglePostComponent {\n  @Input() post: Post;\n  @Input() full: boolean;\n  @Input() key = '';\n\n  constructor(\n    private postService: PostService,\n    private accessService: AccessService,\n    private router: Router,\n    private snackBar: MatSnackBar\n  ) {}\n\n  delete() {\n    this.accessService.oldIsAdmin$.subscribe();\n    this.post.hidden = true;\n    this.postService\n      .updatePost(this.key, this.post)\n      .then(() => {\n        this.router.navigateByUrl(``);\n      })\n      .catch(err => {\n        this.snackBar.open(`ERR: ${err}`);\n      });\n  }\n}\n"
  },
  {
    "path": "apps/blog/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "apps/blog/src/assets/fonts/droid-sans/Apache License.txt",
    "content": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "apps/blog/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true\n};\n"
  },
  {
    "path": "apps/blog/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "apps/blog/src/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Blog</title>\n    <base href=\"/\" />\n\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\" />\n  </head>\n  <body>\n    <codelab-root></codelab-root>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/blog/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic()\n  .bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "apps/blog/src/polyfills.ts",
    "content": "/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n *   2. Application imports. Files imported after ZoneJS that should be loaded before your main\n *      file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\n// import 'classlist.js';  // Run `npm install --save classlist.js`.\n\n/**\n * Web Animations `@angular/platform-browser/animations`\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\n */\n// import 'web-animations-js';  // Run `npm install --save web-animations-js`.\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags.ts';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n *  with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n *  (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"
  },
  {
    "path": "apps/blog/src/styles.scss",
    "content": "/* You can add global styles to this file, and also import other style files */\n@import '~@angular/material/prebuilt-themes/indigo-pink.css';\n@font-face {\n  font-family: 'Droid Sans';\n  src: url('/assets/fonts/droid-sans/DroidSans.ttf') format('opentype');\n}\n\n@font-face {\n  font-family: 'Droid Sans Bold';\n  src: url('/assets/fonts/droid-sans/DroidSans-Bold.ttf') format('opentype');\n}\n\nbody {\n  font-family: 'Droid Sans', 'Droid Sans Bold';\n}\n"
  },
  {
    "path": "apps/blog/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "apps/blog/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": []\n  },\n  \"exclude\": [\"src/test-setup.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "apps/blog/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"include\": [\"**/*.ts\"],\n  \"angularCompilerOptions\": {\n    \"enableIvy\": true\n  }\n}\n"
  },
  {
    "path": "apps/blog/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "apps/blog/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "apps/codelab/browserslist",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11 # For IE 9-11 support, remove 'not'.\n"
  },
  {
    "path": "apps/codelab/extra-webpack.config.js",
    "content": "const webpack = require('webpack');\nconst MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');\n\nconst findLoader = (webpackConfig, regex) => {\n  return webpackConfig.module.rules\n    .filter(rule => !!rule.use)\n    .find(rule => rule.use.find(it => !!it.loader && regex.test(it.loader)));\n};\n\nmodule.exports = (webpackConfig, cliConfig) => {\n  if (cliConfig.buildOptimizer) {\n    const loader = findLoader(\n      webpackConfig,\n      /@angular-devkit\\/build-optimizer.*\\/webpack-loader/\n    );\n\n    const originalTest = loader.test;\n    loader.test = file => {\n      const isMonaco = !!file.match('node_modules/monaco-editor');\n      return !isMonaco && !!file.match(originalTest);\n    };\n  }\n\n  webpackConfig.plugins.push(new MonacoWebpackPlugin());\n\n  return webpackConfig;\n};\n"
  },
  {
    "path": "apps/codelab/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nmodule.exports = function(config) {\n  config.set({\n    basePath: '../',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage-istanbul-reporter'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    coverageIstanbulReporter: {\n      dir: require('path').join(__dirname, '../coverage'),\n      reports: ['html', 'lcovonly'],\n      fixWebpackSourcePaths: true\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false\n  });\n};\n"
  },
  {
    "path": "apps/codelab/src/app/admin/admin-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AdminComponent } from './admin.component';\nimport { UsersComponent } from './users/users.component';\nimport { FeedbackComponent } from './feedback/feedback.component';\n\nconst routes = [\n  {\n    path: '',\n    component: AdminComponent,\n    children: [\n      { path: 'users', component: UsersComponent },\n      { path: 'feedback', component: FeedbackComponent }\n    ]\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class AdminRoutingModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/admin.component.css",
    "content": ":host {\n  display: block;\n  max-width: 1000px;\n  margin: 0 auto;\n}\n\n.wrapper {\n  margin-top: 20px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/admin.component.html",
    "content": "<mat-card>\n  <h2>Angular Codelab 🔥 Admin</h2>\n\n  <nav mat-tab-nav-bar>\n    <a\n      *ngFor=\"let link of links\"\n      mat-tab-link\n      routerLinkActive\n      #rla=\"routerLinkActive\"\n      [routerLink]=\"link.link\"\n      [active]=\"rla.isActive\"\n    >\n      {{ link.name }}\n    </a>\n  </nav>\n\n  <div class=\"wrapper\">\n    <router-outlet></router-outlet>\n  </div>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/admin/admin.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { AdminComponent } from './admin.component';\nimport { AdminModule } from './admin.module';\nimport { getMockAngularFireProviders } from '@codelab/utils/src/lib/testing/mocks/angular-fire';\nimport { RouterModule } from '@angular/router';\n\ndescribe('AdminComponent', () => {\n  let component: AdminComponent;\n  let fixture: ComponentFixture<AdminComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [AdminModule, RouterModule.forRoot([])],\n      providers: [...getMockAngularFireProviders()]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(AdminComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/admin/admin.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-admin',\n  templateUrl: './admin.component.html',\n  styleUrls: ['./admin.component.css']\n})\nexport class AdminComponent {\n  readonly links = [\n    { link: 'users', name: 'Users' },\n    { link: 'feedback', name: 'Feedback' }\n  ];\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/admin.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { AdminComponent } from './admin.component';\nimport { AdminRoutingModule } from './admin-routing.module';\nimport { FeedbackModule } from './feedback/feedback.module';\nimport { UsersModule } from './users/users.module';\n\n@NgModule({\n  imports: [\n    AdminRoutingModule,\n    CommonModule,\n    FeedbackModule,\n    UsersModule,\n    MatCardModule,\n    MatTabsModule\n  ],\n  declarations: [AdminComponent]\n})\nexport class AdminModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback-message-table/feedback-message-table.component.ts",
    "content": "import {\n  Component,\n  Input,\n  ViewChild,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy\n} from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatSort } from '@angular/material/sort';\nimport { Message } from '@codelab/feedback/src/lib/message';\n\nconst clearTags = (value: string) =>\n  value.replace(/<[^>]+>/g, '').replace(/Angular Codelab \\/ /, '');\nconst clearAllTags = (values: Message[]): Message[] =>\n  values.map((m: Message) => ({\n    ...m,\n    header: clearTags(m.header || 'No header')\n  }));\nconst sortingDataAccessor = (item, property) => {\n  switch (property) {\n    case 'timestamp':\n      return new Date(item.timestamp).toISOString();\n    default:\n      return item[property];\n  }\n};\n\n@Component({\n  selector: 'codelab-feedback-message-table',\n  templateUrl: './feedback-message-table.html',\n  styleUrls: ['./feedback-message-table.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FeedbackMessageTableComponent {\n  @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n  @Input('dataSource')\n  set dataSourceSetter(values: Message[]) {\n    this.dataSource.data = clearAllTags(values);\n    this.dataSource.sortingDataAccessor = sortingDataAccessor;\n    this.dataSource.sort = this.sort;\n  }\n  dataSource = new MatTableDataSource([]);\n\n  closeReasons = [\n    { name: '[Duplicate]', reason: '[Duplicate]' },\n    { name: '[No fix]', reason: '[No fix]' },\n    { name: '[Done]', reason: '[Done]' },\n    { name: '[Nice message]', reason: '[Nice message, though not a real bug]' },\n    { name: \"[Can't reproduce]\", reason: \"[Can't reproduce]\" }\n  ];\n\n  tableColumns = ['comment', 'name', 'header', 'timestamp', 'actions'];\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback-message-table/feedback-message-table.css",
    "content": ".done-row {\n  background: #fcfcfc;\n  color: #666;\n}\n\n.mat-column-comment {\n  width: 55%;\n  padding-right: 5px;\n}\n\n.mat-column-name {\n  width: 10%;\n  padding-right: 5px;\n}\n\n.mat-column-header {\n  width: 20%;\n  padding-right: 5px;\n}\n\n.mat-column-timestamp {\n  width: 10%;\n  max-width: 120px;\n  padding-right: 5px;\n}\n\n.mat-column-actions {\n  width: 5%;\n  max-width: 20px;\n}\n\ntable {\n  width: 100%;\n  overflow: hidden;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback-message-table/feedback-message-table.html",
    "content": "<table mat-table [dataSource]=\"dataSource\" matSort class=\"mat-elevation-z4\">\n  <ng-container matColumnDef=\"comment\">\n    <th mat-header-cell *matHeaderCellDef mat-sort-header>comment</th>\n    <td mat-cell *matCellDef=\"let element\">\n      {{element.comment}}\n    </td>\n  </ng-container>\n\n  <ng-container matColumnDef=\"name\">\n    <th mat-header-cell *matHeaderCellDef mat-sort-header>\n      name\n    </th>\n    <td mat-cell *matCellDef=\"let element\">{{element.name}}</td>\n  </ng-container>\n\n  <ng-container matColumnDef=\"header\">\n    <th mat-header-cell *matHeaderCellDef mat-sort-header>header</th>\n    <td mat-cell *matCellDef=\"let element\">\n      <a [routerLink]=\"element.href\">{{ element.header}}</a>\n    </td>\n  </ng-container>\n\n  <ng-container matColumnDef=\"href\">\n    <th mat-header-cell *matHeaderCellDef>href</th>\n    <td mat-cell *matCellDef=\"let element\">{{element.href}}</td>\n  </ng-container>\n\n  <ng-container matColumnDef=\"timestamp\">\n    <th mat-header-cell *matHeaderCellDef mat-sort-header>timestamp</th>\n    <td mat-cell *matCellDef=\"let element\">\n      {{element.timestamp|date}}\n    </td>\n  </ng-container>\n\n  <ng-container matColumnDef=\"actions\" stickyEnd>\n    <th mat-header-cell *matHeaderCellDef></th>\n    <td mat-cell *matCellDef=\"let element\">\n      <feedback-issue-dropdown [message]=\"element\"></feedback-issue-dropdown>\n    </td>\n  </ng-container>\n\n  <tr mat-header-row *matHeaderRowDef=\"tableColumns\"></tr>\n  <tr\n    mat-row\n    *matRowDef=\"let row; columns: tableColumns\"\n    [class.done-row]=\"row.isDone\"\n  ></tr>\n</table>\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback.component.css",
    "content": ".panel {\n  margin-bottom: 10px;\n}\n\nmat-form-field {\n  margin-left: 15px;\n  margin-top: 5px;\n  width: 120px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback.component.html",
    "content": "<div no-padding>\n  <div>\n    <mat-form-field>\n      <mat-label>Feedback</mat-label>\n      <mat-select\n        [value]=\"filter$ | async\"\n        (selectionChange)=\"this.filter$.next($event.value)\"\n      >\n        <mat-option value=\"all\">All</mat-option>\n        <mat-option value=\"done\">Done</mat-option>\n        <mat-option value=\"notDone\">Undone</mat-option>\n      </mat-select>\n    </mat-form-field>\n\n    <mat-form-field>\n      <mat-label>Group by</mat-label>\n      <mat-select\n        [value]=\"group$ | async\"\n        (selectionChange)=\"group$.next($event.value)\"\n      >\n        <mat-option value=\"nothing\">Do not group</mat-option>\n        <mat-option value=\"href\">Slide URL</mat-option>\n        <mat-option value=\"name\">Name</mat-option>\n      </mat-select>\n    </mat-form-field>\n\n    <mat-form-field>\n      <input\n        matInput\n        [matDatepicker]=\"picker\"\n        placeholder=\"From\"\n        [(ngModel)]=\"datesForFilter.dateFrom\"\n        (dateChange)=\"changeDate()\"\n      />\n      <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n      <mat-datepicker #picker></mat-datepicker>\n    </mat-form-field>\n\n    <mat-form-field>\n      <input\n        matInput\n        [matDatepicker]=\"picker2\"\n        placeholder=\"To\"\n        [(ngModel)]=\"datesForFilter.dateTo\"\n        (dateChange)=\"changeDate()\"\n      />\n      <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n      <mat-datepicker #picker2></mat-datepicker>\n    </mat-form-field>\n    <button mat-button (click)=\"clearDate()\">Clear</button>\n  </div>\n\n  <div>\n    <div *ngFor=\"let item of this.messages$ | async\" class=\"panel\">\n      <mat-expansion-panel [expanded]=\"true\" [hideToggle]=\"true\">\n        <mat-expansion-panel-header>\n          <mat-panel-title>\n            <h3>{{ item.key }}</h3>\n          </mat-panel-title>\n        </mat-expansion-panel-header>\n        <codelab-feedback-message-table\n          [dataSource]=\"item.value\"\n        ></codelab-feedback-message-table>\n      </mat-expansion-panel>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { FeedbackComponent } from './feedback.component';\nimport { FeedbackModule } from './feedback.module';\nimport { getMockAngularFireProviders } from '@codelab/utils/src/lib/testing/mocks/angular-fire';\nimport { GithubService } from './github.service';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\n\ndescribe('FeedbackComponent', () => {\n  let component: FeedbackComponent;\n  let fixture: ComponentFixture<FeedbackComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [FeedbackModule, NoopAnimationsModule],\n      providers: [\n        ...getMockAngularFireProviders(),\n        { provide: GithubService, useValue: {} }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FeedbackComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { AngularFireDatabase, AngularFireList } from '@angular/fire/database';\nimport { Message } from '@codelab/feedback/src/lib/message';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\ntype Filter = 'all' | 'done' | 'notDone';\ntype Grouping = 'nothing' | 'href' | 'name';\n\nfunction groupBy(feedback: Array<Message>, grouping: Grouping) {\n  const result = feedback.reduce((comment, item) => {\n    const groupName = item[grouping];\n    comment[groupName] = comment[groupName] || [];\n    comment[groupName].push(item);\n    return comment;\n  }, {});\n\n  return Object.keys(result).map(key => ({ key, value: result[key] }));\n}\n\nfunction normalize(feedback: Array<any>) {\n  return feedback.map(item => ({\n    ...(item.payload && item.payload.val()),\n    key: item.key\n  }));\n}\n\nfunction group([feedback, grouping]) {\n  if (grouping === 'nothing') {\n    return [\n      {\n        key: 'Messages',\n        value: feedback\n      }\n    ];\n  }\n  if (grouping === 'name' || grouping === 'href') {\n    return groupBy(feedback, grouping);\n  }\n  throw new Error('Unknown grouping: ' + grouping);\n}\n\nfunction filter([feedback, filterName, [fromDate, toDate]]) {\n  let result;\n  if (filterName === 'all') {\n    result = feedback;\n  }\n\n  if (filterName === 'done') {\n    result = feedback.filter(message => message.isDone);\n  }\n\n  if (filterName === 'notDone') {\n    result = feedback.filter(message => !message.isDone);\n  }\n\n  const fromMs = fromDate ? new Date(fromDate).getTime() : null;\n  const toMs = toDate ? new Date(toDate).getTime() + 86400000 : null; // add 24hrs to include the day of upper bound\n\n  result = result.filter(msg => {\n    const timestampMs = new Date(msg.timestamp).getTime();\n    return (\n      (fromMs ? timestampMs >= fromMs : true) &&\n      (toMs ? timestampMs <= toMs : true)\n    );\n  });\n  return result;\n}\n\n@Component({\n  selector: 'codelab-feedback',\n  templateUrl: './feedback.component.html',\n  styleUrls: ['./feedback.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FeedbackComponent implements OnInit {\n  messages$: Observable<{ key: string; value: Message }[]>;\n  filter$ = new BehaviorSubject<Filter>('notDone');\n  dateFilter$ = new BehaviorSubject<[string, string]>(['', '']);\n  group$ = new BehaviorSubject<Grouping>('nothing');\n\n  datesForFilter = { dateFrom: '', dateTo: '' };\n\n  constructor(private database: AngularFireDatabase) {}\n\n  ngOnInit() {\n    const feedback$: AngularFireList<any[]> = this.database.list('/feedback');\n\n    const filteredMessages$ = combineLatest([\n      feedback$.snapshotChanges().pipe(map(normalize)),\n      this.filter$,\n      this.dateFilter$\n    ]).pipe(map(filter));\n\n    this.messages$ = combineLatest([filteredMessages$, this.group$]).pipe(\n      map(group)\n    );\n  }\n\n  changeDate(clearDates = false) {\n    if (clearDates) {\n      this.datesForFilter = { dateFrom: '', dateTo: '' };\n    }\n    this.dateFilter$.next([\n      this.datesForFilter.dateFrom || '',\n      this.datesForFilter.dateTo || ''\n    ]);\n  }\n\n  clearDate() {\n    this.changeDate(true);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/feedback.module.ts",
    "content": "import { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { SlidesModule } from '@ng360/slides';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { FeedbackMessageTableComponent } from './feedback-message-table/feedback-message-table.component';\nimport { FeedbackComponent } from './feedback.component';\nimport { FeedbackModule as FeedbackLibModule } from '@codelab/feedback';\n\n@NgModule({\n  imports: [\n    RouterModule,\n    AngularFireDatabaseModule,\n    AngularFireAuthModule,\n    BrowserWindowModule,\n    FormsModule,\n    ReactiveFormsModule,\n    CommonModule,\n    SlidesModule,\n    MatButtonModule,\n    MatCardModule,\n    MatMenuModule,\n    MatSelectModule,\n    MatTableModule,\n    MatIconModule,\n    MatDatepickerModule,\n    MatNativeDateModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatExpansionModule,\n    MatSortModule,\n    FeedbackLibModule\n  ],\n  declarations: [FeedbackComponent, FeedbackMessageTableComponent],\n  exports: [FeedbackComponent],\n  entryComponents: [FeedbackComponent]\n})\nexport class FeedbackModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/feedback/github.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GithubService {\n  repo = 'codelab-fun/codelab';\n\n  constructor(private http: HttpClient) {}\n\n  createIssue(issueData, accessToken) {\n    const headers = { Authorization: 'token ' + accessToken };\n    const options = { headers };\n    return this.http.post(\n      `https://api.github.com/repos/${this.repo}/issues`,\n      issueData,\n      options\n    );\n  }\n\n  closeIssue(changes, issueId, accessToken) {\n    const headers = { Authorization: 'token ' + accessToken };\n    const options = { headers };\n    return this.http.patch(\n      `https://api.github.com/repos/${this.repo}/issues/${issueId}`,\n      changes,\n      options\n    );\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/users/users.component.css",
    "content": "table {\n  width: 100%;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/users/users.component.html",
    "content": "<table mat-table [dataSource]=\"admins$ | async\" class=\"mat-elevation-z8\">\n  <ng-container matColumnDef=\"key\">\n    <th mat-header-cell *matHeaderCellDef>Key</th>\n    <td mat-cell *matCellDef=\"let admin\">{{ admin.key }}</td>\n  </ng-container>\n\n  <ng-container matColumnDef=\"isCurrentUser\">\n    <th mat-header-cell *matHeaderCellDef>You</th>\n    <td mat-cell *matCellDef=\"let admin\">\n      {{ admin.isCurrentUser ? '⛱' : '' }}\n    </td>\n  </ng-container>\n\n  <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n  <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n</table>\n"
  },
  {
    "path": "apps/codelab/src/app/admin/users/users.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { UsersComponent } from './users.component';\nimport { UsersModule } from './users.module';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { of } from 'rxjs';\nimport { LoginService } from '@codelab/firebase-login';\n\ndescribe('UsersComponent', () => {\n  let component: UsersComponent;\n  let fixture: ComponentFixture<UsersComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [UsersModule],\n      providers: [\n        {\n          provide: SyncDbService,\n          useValue: { list: () => ({ snapshots$: of([]) }) }\n        },\n        {\n          provide: LoginService,\n          useValue: {}\n        }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(UsersComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/admin/users/users.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport { LoginService } from '@codelab/firebase-login';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { map } from 'rxjs/operators';\nimport { firebaseToValuesWithKey } from '@codelab/utils/src/lib/sync/common';\nimport { combineLatest, Observable } from 'rxjs';\nimport { Permissions } from '../../shared/services/access.service';\n\nexport interface AdminDb {\n  key: string;\n  permissions: Record<Permissions, boolean>;\n}\n\nexport interface Admin extends AdminDb {\n  isCurrentUser: boolean;\n}\n\nexport interface UserDb {\n  admin: AdminDb[];\n}\n\n@Component({\n  selector: 'codelab-users',\n  templateUrl: './users.component.html',\n  styleUrls: ['./users.component.css']\n})\nexport class UsersComponent {\n  readonly displayedColumns = ['isCurrentUser', 'key'];\n\n  readonly admins = this.dbService.list('admin');\n  private readonly allAdmins$ = this.admins.snapshots$.pipe(\n    map(firebaseToValuesWithKey)\n  );\n\n  readonly admins$: Observable<Admin[]> = combineLatest([\n    this.allAdmins$,\n    this.loginService.uid$\n  ]).pipe(\n    map(([admins, currentUserUid]) => {\n      return admins.map(admin => ({\n        ...admin,\n        isCurrentUser: admin.key === currentUserUid\n      }));\n    })\n  );\n\n  constructor(\n    private readonly loginService: LoginService,\n    private readonly dbService: SyncDbService<UserDb>\n  ) {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/admin/users/users.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UsersComponent } from './users.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatTableModule } from '@angular/material/table';\n\n@NgModule({\n  declarations: [UsersComponent],\n  entryComponents: [UsersComponent],\n  imports: [CommonModule, MatTableModule, MatCardModule]\n})\nexport class UsersModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/app-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LoginComponent } from './components/login/login.component';\nimport { NotFoundComponent } from './components/not-found/not-found.component';\nimport { AdminGuard } from './shared/services/guards/admin-guard';\nimport { LoginGuard } from './shared/services/guards/login-guard';\n\nconst routes: Routes = [\n  {\n    path: '',\n    loadChildren: () =>\n      import('./codelabs/codelabs.module').then(m => m.CodelabsModule)\n  },\n  {\n    path: 'login',\n    component: LoginComponent,\n    canActivate: [LoginGuard]\n  },\n  {\n    path: 'admin',\n    loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule),\n    canActivate: [AdminGuard]\n  },\n  {\n    path: 'sync',\n    loadChildren: () =>\n      import('./sync/sync.module').then(m => m.SyncAdminModule)\n  },\n  { path: '**', component: NotFoundComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forRoot(routes)],\n  exports: [RouterModule]\n})\nexport class AppRoutingModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-root',\n  template: '<router-outlet></router-outlet>'\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/app.module.ts",
    "content": "import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { monacoReady } from '@codelab/code-demos';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { LoginModule } from './components/login/login.module';\nimport { menuRoutes } from './codelabs/angular/angular-routing.module';\nimport { MENU_ROUTES } from './common';\nimport { environment } from '../environments/environment';\nimport { NotFoundModule } from './components/not-found/not-found.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DirectivesModule } from './directives/directives.module';\nimport { HttpClientModule } from '@angular/common/http';\n\n@NgModule({\n  imports: [\n    AppRoutingModule,\n    LoginModule,\n    BrowserModule,\n    BrowserAnimationsModule,\n    HttpClientModule,\n    AngularFireModule.initializeApp(environment.firebaseConfig),\n    AngularFireAuthModule,\n    AngularFireDatabaseModule,\n    NotFoundModule,\n    MatButtonModule,\n    DirectivesModule\n  ],\n  declarations: [AppComponent],\n  providers: [\n    { provide: MENU_ROUTES, useValue: menuRoutes },\n    { provide: APP_INITIALIZER, useValue: monacoReady, multi: true }\n  ],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/about.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <div *slide cover>\n    codelab.fun\n  </div>\n\n  <!--  TODO(anya):-->\n  <div *slide cover>What is codelab.fun</div>\n  <div *slide pic-label>\n    Online interactive angular tutorial no setup\n    <div class=\"no-setup\" pic></div>\n  </div>\n  <div *slide pic-label>\n    Interactive code samples\n    <div class=\"examples\" pic></div>\n  </div>\n  <div *slide pic-label>\n    Hands on exercises\n    <div class=\"exercises\" pic></div>\n  </div>\n  <div *slide pic-label>\n    All open source/Angular Ivy/on Github\n    <div class=\"github\" pic></div>\n    <div class=\"issues\" pic></div>\n  </div>\n\n  <div *slide pic-label>\n    Regular offline contributors meetings\n    <div class=\"community\" pic></div>\n  </div>\n  <div *slide>\n    <h2>20+ Live-events in 10+ countries</h2>\n    <div pic class=\"img-todo\"></div>\n  </div>\n  <div *slide>\n    <h2>~1000 users a month</h2>\n    <div pic class=\"img-todo\"></div>\n  </div>\n  <div *slide>\n    <h2>Almost 50 contributors</h2>\n    <div pic class=\"img-todo\"></div>\n  </div>\n  <!-- end  TODO(anya):-->\n  <div *slide>\n    <h2>Live-Stream \"Звуки программистов\"</h2>\n    <h2>\n      @kirjs and @thekiba_io meet on weekends and do long technical streams in\n      russian, https://www.twitch.tv/kirjs\n    </h2>\n    <div pic class=\"img-todo\"></div>\n  </div>\n\n  <!--\n   Story\n  -->\n  <div *slide cover>Nov 11, 2016</div>\n  <div *slide text>Angular 2.1</div>\n  <div *slide text>Kirjs did not know Angular</div>\n  <div *slide text>Move exercises to the browser</div>\n  <!--  MORE - TBD-->\n\n  <!--\n   TODO: Runner story\n  -->\n  <div *slide>Running tests (mocha / babel + traversing AST)</div>\n  <div *slide>\n    - The goal is to quickly assess whether user's code does what we want.\n  </div>\n  <div *slide>\n    - Initially the plan was to run unit tests in an iframe with TestBed, mocha\n    + chai (code TBD)\n  </div>\n\n  <!--\n     Types\n  -->\n  <div *slide text>Types</div>\n  <div *slide text>There's no types (TODO: Explain)</div>\n\n  <!--\n      Creating slides\n  -->\n  <div *slide cover>Next level</div>\n\n  <!--\n      Creating slides\n  -->\n  <div cover *slide>Creating slides library with Angular</div>\n\n  <div *slide>\n    <h2>What's an ideal API for a presentation?</h2>\n    <code-demo-editor\n      language=\"html\"\n      [(ngModel)]=\"code.slides.component\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide>\n    <h2>Can we use ng-template?</h2>\n    <code-demo-editor\n      language=\"html\"\n      [(ngModel)]=\"code.slides.template\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide>\n    <h2>Can we use ng-template?</h2>\n    <code-demo-editor\n      language=\"html\"\n      [(ngModel)]=\"code.slides.directive\"\n    ></code-demo-editor>\n  </div>\n\n  <!--\n    Highlighting directive\n  -->\n  <div *slide cover>\n    Highlights\n  </div>\n\n  <div *slide>\n    <h2>How to implement this?</h2>\n    <div class=\"highlight-slides\" pic></div>\n  </div>\n\n  <div *slide>\n    <h2>We need a popup which</h2>\n    <ul>\n      <li>plays well with Monaco</li>\n      <li>Updates when the code is updated</li>\n      <li>Not obstructive</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>We don't. We use highlight instead</h2>\n    <!--    <code-demo-editor></code-demo-editor>-->\n  </div>\n  <div *slide>\n    <h2>We don't. We use highlight instead</h2>\n    <!--    <code-demo-editor></code-demo-editor>-->\n  </div>\n\n  <div *slide>\n    <h2>Find position by regex or string</h2>\n    <code-demo-editor [(ngModel)]=\"code.highlights.find\"></code-demo-editor>\n  </div>\n\n  <div *slide>\n    <h2>Add classes using Monaco's deltaDecorations</h2>\n    <!--    TODO-->\n  </div>\n\n  <!--\n      Code in a template\n  -->\n  <div *slide cover>Storing code samples</div>\n  <div *slide>\n    <h2>This can't be hard!</h2>\n    <code-demo-editor\n      language=\"html\"\n      [(ngModel)]=\"code.storingCode.plain\"\n    ></code-demo-editor>\n  </div>\n  <div *slide>\n    <h2>Can we use multiline strings?</h2>\n    <code-demo-editor\n      language=\"html\"\n      [(ngModel)]=\"code.storingCode.backticks\"\n      [codeDemoHighlight]=\"code.storingCode.backticksMatch\"\n    ></code-demo-editor>\n  </div>\n  <div *slide>\n    <h2>Custom interpolation to the rescue?</h2>\n    <code-demo\n      language=\"html\"\n      [(ngModel)]=\"code.storingCode.interpolation\"\n    ></code-demo>\n  </div>\n\n  <div *slide>\n    <h2>Can we use ng-template?</h2>\n    <!--    TODO-->\n  </div>\n  <div *slide>\n    <h2>Can we use ngNonBindable?</h2>\n    <!--    TODO-->\n  </div>\n  <div *slide>\n    <h2>Can we use Script tag?</h2>\n    <!--    TODO-->\n  </div>\n  <div *slide>\n    <h2>Can we use Textarea?</h2>\n    <!--    TODO-->\n  </div>\n  <div *slide>\n    <h2>Textarea + ngNonBindable</h2>\n    <!--    TODO-->\n  </div>\n\n  <div *slide>\n    <h2>Code in the component</h2>\n    <!--    TODO-->\n  </div>\n\n  <div *slide>\n    <h2>raw-loader - code in files</h2>\n    <!--    TODO-->\n  </div>\n\n  <!--\n    Types\n   -->\n\n  <div *slide cover>\n    Can we use figure out the types now?\n  </div>\n\n  <div *slide>\n    <h2>Let's fake it!</h2>\n    <code-demo-file-path path=\"fake-types.d.ts\"></code-demo-file-path>\n    <code-demo-editor [(ngModel)]=\"code.fakeTypes\"></code-demo-editor>\n  </div>\n\n  <div *slide>\n    <h2>Then webstorm started shouting at me.</h2>\n    <div class=\"types-error\" pic></div>\n  </div>\n  <div *slide>\n    <h2>Let's fake it!</h2>\n    <code-demo-file-path\n      path=\"fake-types.d.ts.not-really\"\n    ></code-demo-file-path>\n    <code-demo-editor [(ngModel)]=\"code.fakeTypes\"></code-demo-editor>\n  </div>\n  <div *slide>\n    <h2>Types work!</h2>\n    <div class=\"types-work\" pic></div>\n  </div>\n\n  <!--\n   Feedback\n  -->\n  <div *slide>\n    <h2>So we kinda ready for prime time, except nothing really works</h2>\n    <!--    TODO-->\n  </div>\n\n  <div *slide>\n    <h2>People will probably get really mad?</h2>\n    <!--    TODO-->\n  </div>\n\n  <div *slide>\n    <h2>Let's add feedback feature</h2>\n    <!--    TODO screenshot-->\n  </div>\n  <div *slide>\n    <h2>We use firebase</h2>\n    <!--    TODO screenshot-->\n  </div>\n\n  <div *slide>\n    <h2>\n      We want the feedback to be as specific as possible, so we need to identify\n      the slide\n    </h2>\n    <!--    TODO screenshot-->\n  </div>\n\n  <div *slide>\n    <h2>We Already use routing, and each slide has a #</h2>\n    <!--    TODO screenshot-->\n  </div>\n\n  <div *slide>\n    <h2>We can't generate and ID</h2>\n    <!--    TODO screenshot-->\n  </div>\n  <div *slide>\n    <h2>We have to give an ID manually</h2>\n    <!--    TODO screenshot-->\n  </div>\n\n  <div *slide>\n    <h2>TADA</h2>\n    <!-- Ugly code -->\n  </div>\n\n  <!--\n    Success\n   -->\n\n  <!--\n    Translations\n   -->\n  <div *slide cover>i18n</div>\n\n  <div *slide>\n    <h2>We use standard Angular i18n</h2>\n    <!--    TODO: Code sample-->\n  </div>\n  <div *slide>\n    <h2>But how can we translate code samples?</h2>\n    <!--    TODO: Illustration-->\n  </div>\n  <div *slide>\n    <ul>\n      <li>Have strings in template with ids</li>\n      <li>Then query it in the Component</li>\n    </ul>\n    {{ \"@ViewChild('translations', { static: true }) translation;\" }}\n    <!--    TODO: Illustration-->\n  </div>\n\n  <div *slide text>\n    How to we translate it in a way that scales?\n  </div>\n\n  <div *slide>\n    <h2>Codelab uses PoEditor</h2>\n    <div pic class=\"i18n-poeditor\"></div>\n  </div>\n\n  <div *slide>\n    <h2>Thanks PoEditor for providing us with an Open Source license!</h2>\n    <div pic class=\"i18n-poeditor\"></div>\n  </div>\n\n  <div *slide text>Anybody can help with translation</div>\n  <div *slide text>- Already translated into Russian</div>\n\n  <!--\n    Optimizing everything.\n   -->\n  <!--  TODO(🦊):-->\n  <div *slide>Let's make it faster</div>\n\n  <div *slide>- изначальные проблемы:</div>\n  <div *slide>очень долго пересобиралось, потому что пересоздавался iframe</div>\n  <div *slide>\n    типы задавались вручную, поэтому было проблемно подключать дополнительные\n    библиотеки\n  </div>\n  <div *slide>- что сделано:</div>\n  <div *slide>iframe стал переиспользоваться</div>\n  <div *slide>инстанс ts compiler был переведен на watch режим</div>\n  <div *slide>реализован bundler, который собирает типы в один файл</div>\n  <div *slide>оптимизация бандла с пакетами, чтобы все сжималось</div>\n  <div *slide>- что получили:</div>\n  <div *slide>\n    перезапуск вместо 0.5-1 сек стало почти мгновенно (показать демонстрацию)\n  </div>\n  <div *slide>размер бандла уменьшился в 2 раза (todo: посмотреть размер)</div>\n  <div *slide>\n    появилась возможность подключать любые библиотеки на этапе компиляции\n  </div>\n  <div *slide>Running tests (mocha / babel + traversing AST)</div>\n  <div *slide>\n    - The goal is to quickly assess whether user's code does what we want.\n  </div>\n  <div *slide>\n    - Initially the plan was to run unit tests in an iframe with TestBed, mocha\n    + chai (code TBD)\n  </div>\n  <div *slide>- Phase 2 - We started reusing iframe (code TBD)</div>\n  <div *slide>- Special case testing bootstrapping the app (code TBD)</div>\n  <div *slide>\n    - We also added babel tests (babel can parse TypeScript) (code TBD)\n  </div>\n  <div *slide>- This works, we look at the code, not at the result.</div>\n  <div *slide>Monaco</div>\n  <div *slide>\n    - The goal is to give users a type aware editor with SyntaxHighlighting\n    quick, extensible\n  </div>\n  <div *slide>- We chose monaco</div>\n  <div *slide>\n    - Bundle size/It's own AMD loader/Have to be included in the assets\n  </div>\n  <div *slide>- Adding types to monaco</div>\n  <div *slide>- Highlighting</div>\n  <div *slide>- Autofolding</div>\n  <div *slide>- Init on app load</div>\n  <div *slide>Experiments/What's next?</div>\n  <div *slide>Sync lib</div>\n  <div *slide>- Codelab is not just an angular course it is a platform</div>\n  <div *slide>- Demo</div>\n  <div *slide>New runner</div>\n  <div *slide>- What we want:</div>\n  <div *slide>- Generic runner (not just angular)</div>\n  <div *slide>\n    - Does not need types/libraries bundled (fetched them asynchronously from\n    cdn)\n  </div>\n  <div *slide>- Where we are?</div>\n  <div *slide>- We don't know how to</div>\n  <div *slide>How/Why to contribute?</div>\n  <div *slide>Is is hard?</div>\n  <div *slide>How to start</div>\n  <div *slide>Why to contribute?</div>\n  <div *slide>What's next?</div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/about.component.scss",
    "content": ".screenshot {\n  /*background: url(\"images/sss\");*/\n}\n\n[cover] ::ng-deep {\n  line-height: 100vh;\n  text-align: center;\n  background: #6cae00;\n  color: white;\n  font-size: 100px;\n  font-weight: 300;\n}\n\n[text] ::ng-deep {\n  line-height: 100vh;\n  text-align: center;\n  background: #6cae00;\n  color: white;\n  font-size: 100px;\n  font-weight: 300;\n}\n\n[pic] {\n  background-size: contain;\n  background-repeat: no-repeat;\n  width: 100%;\n  height: 100%;\n}\n\n[pic-label] ::ng-deep {\n  line-height: 20vh;\n  text-align: center;\n  color: black;\n  font-size: 100px;\n  font-weight: 280;\n}\n\n.types-error {\n  background-image: url('./images/types-error.png');\n}\n\n.types-missing {\n  background-image: url('./images/types-missing.png');\n}\n\n.types-work {\n  background-image: url('./images/types-work.png');\n}\n\n.i18n-poeditor {\n  background-image: url('./images/i18n-poeditor.png');\n}\n\n.highlight-slides {\n  background-image: url('./images/highlight-slides.png');\n}\n\n.img-todo {\n  content: 'lol';\n  border: 50px white dotted;\n  margin-top: 20px;\n  background: #d68200;\n  box-sizing: border-box;\n\n  &:before {\n    line-height: 100%;\n    font-size: 200px;\n    content: 'IMAGE-TBD';\n    padding: 100px 0;\n    text-align: center;\n    display: block;\n    color: white;\n  }\n}\nh2 {\n  padding: 20px;\n}\n\n.no-setup {\n  background-image: url('./images/no-setup.png');\n}\n\n.examples {\n  background-image: url('./images/examples.gif');\n}\n\n.exercises {\n  background-image: url('./images/exercises.gif');\n}\n\n.github {\n  background-image: url('./images/github.png');\n}\n\n.issues {\n  background-image: url('./images/issues.gif');\n}\n\n.community {\n  background-image: url('./images/codelab.jpeg');\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/about.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { AboutComponent } from './about.component';\n\ndescribe('AboutComponent', () => {\n  let component: AboutComponent;\n  let fixture: ComponentFixture<AboutComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [AboutComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(AboutComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/about.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\ndeclare const require;\n\n@Component({\n  selector: 'about',\n  templateUrl: './about.component.html',\n  styleUrls: ['./about.component.scss']\n})\nexport class AboutComponent implements OnInit {\n  code = {\n    fakeTypes: require('!!raw-loader!./samples/fake-types.d.ts.not-really'),\n    slides: {\n      template: require('!!raw-loader!./samples/slides/ng-template.html'),\n      component: require('!!raw-loader!./samples/slides/slide-component.html'),\n      directive: require('!!raw-loader!./samples/slides/structural-directive.html')\n    },\n    storingCode: {\n      plain: require('!!raw-loader!./samples/storing-code/plain.html'),\n      backticks: require('!!raw-loader!./samples/storing-code/backticks.html'),\n      backticksMatch: [/{{`/, /`}}/],\n      interpolation: {\n        'bootstrap.ts': require('!!raw-loader!./samples/storing-code/interpolations.ts')\n      }\n    },\n    highlights: {\n      find: require('!!raw-loader!@codelab/code-demos/src/lib/code-demo-editor/utils/utils')\n    }\n  };\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/about.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { AboutComponent } from './about.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(AboutComponent));\n\n@NgModule({\n  declarations: [AboutComponent],\n  imports: [CommonModule, SlidesModule, routes, CodeDemoModule, FormsModule]\n})\nexport class AboutModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/fake-types.d.ts.not-really",
    "content": "interface RouteConfig {\n  path: string;\n  component: any;\n}\n\ndeclare module '@angular/core' {\n  export class EventEmitter<T> {\n    emit: (param: T) => void;\n  }\n\n  export interface DirectiveConfig {\n    selector: string;\n  }\n\n  export interface ComponentConfig {\n    selector: string;\n    template?: string;\n    templateUrl?: string;\n  }\n\n  export interface PipeConfig {\n    name: string;\n  }\n\n  export function enableProdMode();\n\n  export function Component(config: ComponentConfig);\n\n  export function Directive(config: DirectiveConfig);\n\n  export class TemplateRef<T> {\n  }\n\n  export class ViewContainerRef {\n    clear: () => void;\n    createEmbeddedView: (ref: TemplateRef<any>, context: any) => void;\n  }\n\n  export interface AfterViewInit {\n    ngAfterViewInit: () => void;\n  }\n\n  export interface OnInit {\n    ngOnInit: () => void;\n  }\n\n  export interface NgModuleConfig {\n    imports?: any[];\n    declarations?: any[];\n    providers?: any[];\n    bootstrap?: any[];\n    exports?: any[];\n  }\n\n  export function NgModule(config: NgModuleConfig);\n\n  export function Injectable();\n\n  export function Output();\n\n  export function Input();\n\n  export interface OnChanges {\n    ngOnChanges: (simpleChanges: SimpleChange[]) => void;\n  }\n\n  export interface SimpleChange {\n    [key: string]: any;\n  }\n\n  export function Pipe(config: PipeConfig);\n\n  export interface PipeTransform {\n    transform(value: string);\n  }\n}\n\ndeclare module '@angular/forms' {\n  export class FormsModule {\n  }\n}\ndeclare module '@angular/platform-browser' {\n  export class BrowserModule {\n  }\n}\n\ndeclare module '@angular/platform-browser/animations' {\n  export class NoopAnimationsModule {\n  }\n}\ndeclare module '@angular/platform-browser-dynamic' {\n  export class Platform {\n    bootstrapModule: (module: any, config?: any) => void;\n  }\n\n  export function platformBrowserDynamic(): Platform;\n}\n\ndeclare module '@angular/compiler' {\n  export class ResourceLoader {\n  }\n}\n\ndeclare class Observable<T> {\n  subscribe: (T) => void;\n}\n\ndeclare module '@angular/router' {\n  export type Routes = Array<RouteConfig>;\n\n  export class RouterModule {\n    static forRoot: (routes: Routes) => any;\n  }\n}\n\ndeclare module '@angular/common' {\n  export class NgIf {\n    constructor(v: any, t: any);\n  }\n}\n\ndeclare module '@angular/material' {\n  export class MatTab {\n    position: number;\n  }\n\n  export class MatTabGroup {\n    selectedIndex: number;\n    selectChange: Observable<any>;\n  }\n\n  export class MatInputModule {\n  }\n\n  export class MatTabsModule {\n  }\n\n  export class MatToolbarModule {\n  }\n\n  export class MatCardModule {\n  }\n\n  export class MatButtonModule {\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/slides/ng-template.html",
    "content": "<slide-deck>\n  <ng-template>\n    <h2>Awesome slide</h2>\n  </ng-template>\n  <ng-template>\n    <h2>Code sample</h2>\n  </ng-template>\n  <ng-template>\n    <music-player></music-player>\n  </ng-template>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/slides/slide-component.html",
    "content": "<slide-deck>\n  <slide>\n    <h2>Awesome slide</h2>\n  </slide>\n  <slide>\n    <h2>Code sample</h2>\n  </slide>\n  <slide>\n    <music-player></music-player>\n  </slide>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/slides/structural-directive.html",
    "content": "<slide-deck>\n  <div *slide>\n    <h2>Awesome slide</h2>\n  </div>\n  <div *slide>\n    <h2>Code sample</h2>\n  </div>\n  <div *slide>\n    <music-player></music-player>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/storing-code/backticks.html",
    "content": "<div *slide id=\"angular-component\">\n  <code-editor>\n    {{` import { Component } from '@angular/core'; @Component({ selector:\n    'hello-world', template: `\n    <h1>Hello I'm an Angular app!</h1>\n    <h2>Very soon you will learn how to create and bootstrap me!</h2>\n    ` }) export class AppComponent {} `}}\n  </code-editor>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/storing-code/interpolations.ts",
    "content": "import { Component, NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\n@Component({\n  selector: 'app-root',\n  template: `\n    🐶 1 + 2 🦊\n  `,\n  interpolation: ['🐶', '🦊']\n})\nexport class AppComponent {}\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n\nplatformBrowserDynamic()\n  .bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/about/samples/storing-code/plain.html",
    "content": "<div *slide id=\"angular-component\">\n  <code-editor>\n    import { Component } from '@angular/core'; @Component({ selector:\n    'hello-world', template: `\n    <h1>Hello I'm an Angular app!</h1>\n    <h2>Very soon you will learn how to create and bootstrap me!</h2>\n    ` }) export class AppComponent {}\n  </code-editor>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/angular-cli/angular-cli.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/angular-cli/angular-cli.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      i18n-title\n      title=\"Angular-cli\"\n      i18n-description\n      description=\"Learn how to quickly start working on your Angular app\"\n    ></codelab-title-slide>\n  </div>\n\n  <div *slide id=\"angular-cli\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n    <h2 i18n>\n      Angular CLI is a command line tool that can be used to quickly get up to\n      speed with running your Angular app.\n    </h2>\n\n    <preview-terminal-window>\n      $ ng hello\n      <span class=\"success\" i18n>\n        Hi, I'm <b>angular-cli</b>, I'm a command line tool!\n      </span>\n      <span i18n> It may sound scary, but I'm really easy to use! </span>\n    </preview-terminal-window>\n    <!--Привет, я - <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>angular-cli<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, я инструмент для командой строки!-->\n  </div>\n\n  <div *slide id=\"npm\">\n    <codelab-breadcrumb i18n>node</codelab-breadcrumb>\n    <h2 i18n>Before you start, make sure you have node.js on your machine.</h2>\n    <h2 i18n>Open terminal and type in: <code>node -v</code></h2>\n    <ul>\n      <li i18n>\n        If there is an error, follow the\n        <a href=\"https://nodejs.org/en/download/\">NodeJS setup instructions</a>\n      </li>\n      <li i18n>\n        If the output is a number, you're good, move to the next slide.\n      </li>\n    </ul>\n    <preview-terminal-window>\n      $ node -v<span class=\"success\"> v6.11.3</span>\n    </preview-terminal-window>\n  </div>\n\n  <div *slide id=\"install\">\n    <codelab-breadcrumb i18n>installing</codelab-breadcrumb>\n    <h2 i18n>\n      Run <code>npm install -g @angular/cli</code> to install\n      <b>Angular cli</b> on your machine\n    </h2>\n    <preview-terminal-window>\n      <pre>\n      $ sudo npm install -g @angular/cli<span class=\"skipped\">\n      &hellip; A bunch of output omitted for brevety &hellip;</span>\n      │ ├─┬ strip-ansi@3.0.1\n      │ │ └── ansi-regex@2.1.1\n      │ ├─┬ supports-color@3.2.3\n      │ │ └── has-flag@1.0.0\n      │ └─┬ yargs@6.6.0\n      │ ├── camelcase@3.0.0\n      │ ├── os-locale@1.4.0\n      │ ├─┬ string-width@1.0.2\n      │ │ ├── code-point-at@1.1.0\n      │ │ └─┬ is-fullwidth-code-point@1.0.0\n      │ │ └── number-is-nan@1.0.1\n      │ ├── which-module@1.0.0\n      │ └── yargs-parser@4.2.1\n      ├── webpack-merge@4.1.0\n      ├── webpack-sources@1.0.1\n      └── zone.js@0.8.18\n      </pre>\n    </preview-terminal-window>\n  </div>\n\n  <div *slide id=\"new-app\">\n    <codelab-breadcrumb i18n>Creating new Angular app</codelab-breadcrumb>\n    <h2 i18n>\n      To create a new Angular app run:\n      <code>ng new awesome-app</code>, then <code>cd awesome-app</code>\n    </h2>\n    <preview-terminal-window>\n      <pre>\n      $ ng new awesome-app\n\n      create awesome-app/README.md (1026 bytes)\n      create awesome-app/.angular-cli.json (1288 bytes)\n      create awesome-app/.editorconfig (245 bytes)<span class=\"skipped\">\n        &hellip; A bunch of output omitted for brevety &hellip;</span>\n      create awesome-app/src/app/app.component.spec.ts (986 bytes)\n      create awesome-app/src/app/app.component.ts (207 bytes)\n      <div class=\"success\">\n        Installing packages for tooling via npm.\n        Installed packages for tooling via npm.\n        Successfully initialized git.\n        Project 'awesome-app' successfully created.\n      </div>\n      </pre>\n    </preview-terminal-window>\n  </div>\n\n  <div *slide id=\"starting\">\n    <codelab-breadcrumb i18n>Starting the app</codelab-breadcrumb>\n    <h2 i18n>\n      Once you're in the app folder, start the app with <code>ng serve</code>\n    </h2>\n    <preview-terminal-window\n      >>\n      <pre>\n      $ ng serve\n      ** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **\n      Date: 2017-10-22T03:25:09.430Z - Hash: 6af162d0da3cc77873d4\n      Time: 6417ms\n      chunk {{'{'}}inline{{'}'}} inline.bundle.js, inline.bundle.js.map (inline) 5.83 kB [entry] [rendered]\n      chunk {{'{'}}main{{'}'}} main.bundle.js, main.bundle.js.map (main) 8.63 kB {{'{'}}vendor{{'}'}} [initial]\n      [rendered]\n      chunk {{'{'}}polyfills{{'}'}} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 199 kB {{'{'}}inline{{'}'}}\n        [initial] [rendered]\n      chunk {{'{'}}styles{{'}'}} styles.bundle.js, styles.bundle.js.map (styles) 11.3 kB {{'{'}}inline{{'}'}} [initial]\n      [rendered]\n      chunk {{'{'}}vendor{{'}'}} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.32 MB [initial] [rendered]\n      <span class=\"success\">\n      webpack: Compiled successfully.\n      </span>\n    </pre>\n    </preview-terminal-window>\n\n    <h2 i18n>\n      Once the app is started just open\n      <a href=\"http://localhost:4200/\">http://localhost:4200/</a> in your\n      browser\n    </h2>\n  </div>\n\n  <div *slide id=\"generating\">\n    <codelab-breadcrumb i18n>Generating components</codelab-breadcrumb>\n    <h2 i18n>\n      You can easily generate new components\n      <code>ng generate component my-component</code>\n    </h2>\n    <preview-terminal-window\n      ><pre>\n      $ ng generate component my-component\n      create src/app/my-component/my-component.component.css (0 bytes)\n      create src/app/my-component/my-component.component.html (31 bytes)\n      create src/app/my-component/my-component.component.spec.ts (664 bytes)\n      create src/app/my-component/my-component.component.ts (292 bytes)\n      update src/app/app.module.ts (418 bytes)\n    </pre\n      >\n    </preview-terminal-window>\n\n    <h2 i18n>You can also generate modules, services and pipes</h2>\n    <div class=\"info\" i18n>\n      You can use a shorter version: <code>ng g c my-component</code>\n    </div>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n\n          >End of The Angular-cli Milestone\n        </codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body>\n        <h2 i18n>\n          This is <b>the end</b> of the codelab, but it's just the beginning of\n          your Angular journey. Below are some links that can help you continue\n          learning.\n        </h2>\n        <ul>\n          <li>\n            <a href=\"https://angular.io/\" target=\"_blank\">Angular.io</a> &mdash;\n            <span i18n>Find features, docs and events listed here</span>\n          </li>\n          <li>\n            <a href=\"https://cli.angular.io/\" target=\"_blank\">Angular CLI</a>\n            <span i18n>\n              makes it easy to create an application that already works, right\n              out of the box and generate new components! It also takes care of\n              the build system for you\n            </span>\n          </li>\n        </ul>\n      </div>\n\n      <div class=\"footer\" footer>\n        <feedback-rating lesson=\"AngularCli\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/angular-cli/angular-cli.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-slides-angular-cli',\n  templateUrl: './angular-cli.component.html',\n  styleUrls: [\n    '../../../components/css/codelab-styles.scss',\n    './angular-cli.component.css'\n  ]\n})\nexport class AngularCliComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/angular-cli/angular-cli.module.ts",
    "content": "import { AngularCliComponent } from './angular-cli.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CommonModule } from '@angular/common';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\nimport { FormsModule } from '@angular/forms';\nimport { ExternalLinkDirectiveDirective } from '../../../components/external-link-directive/external-link-directive.directive';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\n\nconst routes = RouterModule.forChild([\n  ...SlidesRoutes.get(AngularCliComponent)\n]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    CommonModule,\n    BrowserWindowModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [AngularCliComponent, ExternalLinkDirectiveDirective],\n  exports: [AngularCliComponent]\n})\nexport class AngularCliModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/angular-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AngularRoutesComponent } from '../../components/angular-routes/angular-routes.component';\nimport { FullLayoutComponent } from '../../containers/full-layout';\nimport { environment } from '../../../environments/environment';\nimport { MENU_ROUTES, MenuRoutes } from '../../common';\n\nconst routes: MenuRoutes = [\n  {\n    path: '',\n    component: FullLayoutComponent,\n    children: [\n      {\n        path: '',\n        component: AngularRoutesComponent\n      },\n      {\n        path: 'intro',\n        loadChildren: () => import('@codelab/intro').then(m => m.IntroModule),\n        name: 'Introduction',\n        description: `Learn more about Angular`,\n        page: 'main',\n        prod: true\n      },\n      {\n        path: 'typescript',\n        loadChildren: () =>\n          import('./typescript/typescript.module').then(\n            m => m.TypeScriptModule\n          ),\n        name: 'TypeScript',\n        description:\n          'Angular is written in TypeScript, a superset of JavaScript. Learn TypeScript',\n        page: 'typescript',\n        prod: true\n      },\n      {\n        path: 'create-first-app',\n        loadChildren: () =>\n          import('./create-first-app/create-first-app.module').then(\n            m => m.CreateFirstAppModule\n          ),\n        name: 'Create your first Angular app',\n        description:\n          'Learn how to create and bootstrap your first Angular application',\n        page: 'main',\n        prod: true,\n        translationIds: ['createFirstNgApp', 'learnHowToBootstrapApp']\n      },\n      {\n        path: 'templates',\n        loadChildren: () =>\n          import('./templates/templates.module').then(m => m.TemplatesModule),\n        name: 'Templates',\n        description: 'Learn how to use Angular templates',\n        page: 'main',\n        prod: true,\n        translationIds: ['templates', 'learnUsingTemplates']\n      },\n      {\n        path: 'dependency-injection',\n        loadChildren: () =>\n          import('./dependency-injection/dependency-injection.module').then(\n            m => m.DependencyInjectionModule\n          ),\n        name: 'Dependency-Injection',\n        description:\n          'Learn how to provide dependencies to your code instead of hard-coding them',\n        page: 'main',\n        prod: true,\n        translationIds: ['dependencyInjection', 'learnToProvideDependencies']\n      },\n      {\n        path: 'component-tree',\n        loadChildren: () =>\n          import('./component-tree/component-tree.module').then(\n            m => m.ComponentTreeModule\n          ),\n        name: 'Component-Tree',\n        description: 'Learn how to structure your app with reusable components',\n        page: 'main',\n        prod: true,\n        translationIds: [\n          'componentTree',\n          'learnToStructureAppWithReusableComponents'\n        ]\n      },\n      // {\n      //   path: 'custom-events',\n      //   loadChildren: './custom-events/custom-events.module#CustomEventsModule',\n      //   name: 'Custom-Events (work in progress)',\n      //   description: 'Learn to bind to events.',\n      //   page: 'bonus',\n      //   translationIds: ['customEvents', 'learnToBindToEvents']\n      // },\n      {\n        path: 'router',\n        loadChildren: () =>\n          import('./router/router.module').then(m => m.RouterCodelabModule),\n        name: 'Angular Router',\n        description: 'Learn how to add routes to your Angular application',\n        page: 'main',\n        prod: true\n      },\n      {\n        path: 'material',\n        loadChildren: () =>\n          import('./material/material.module').then(\n            m => m.MaterialCodelabModule\n          ),\n        name: 'Angular Material',\n        description: 'Learn how to use Angular Material',\n        page: 'main',\n        prod: true\n      },\n      {\n        path: 'forms',\n        loadChildren: () =>\n          import('./forms/forms.module').then(m => m.FormsCodelabModule),\n        name: 'Forms',\n        description: 'Learn how to add Forms to your app',\n        page: 'main',\n        prod: true\n      },\n      {\n        path: 'angular-cli',\n        loadChildren: () =>\n          import('./angular-cli/angular-cli.module').then(\n            m => m.AngularCliModule\n          ),\n        name: 'Angular-cli',\n        description: 'Learn how to quickly start working with angular',\n        page: 'main',\n        prod: true\n      },\n      {\n        path: 'pipes',\n        loadChildren: () =>\n          import('./pipes/pipes.module').then(m => m.PipesModule),\n        name: 'Pipes',\n        description:\n          'Learn how pipes transform input values to output values for display in a view',\n        page: 'bonus',\n        prod: false\n      },\n      {\n        path: 'structural-directives',\n        loadChildren: () =>\n          import('./structural-directives/structural-directives.module').then(\n            m => m.StructuralDirectivesModule\n          ),\n        name: 'Structural Directives',\n        description: 'Learn about structural directives in angular',\n        page: 'bonus',\n        prod: true\n      },\n      {\n        path: 'playground',\n        loadChildren: () =>\n          import('./playground/playground.module').then(\n            m => m.PlaygroundModule\n          ),\n        page: 'bonus',\n        prod: true\n      }\n    ]\n  }\n];\n\nconst isProd = environment.production;\nexport const menuRoutes = routes[0].children\n  .filter(x => x.page === 'main')\n  // Hide non-prod routes in prod\n  .filter(x => !isProd || x.prod);\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule],\n  providers: [{ provide: MENU_ROUTES, useValue: menuRoutes }]\n})\nexport class AngularRoutingModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/angular.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { AngularRoutingModule } from './angular-routing.module';\nimport { FullLayoutModule } from '../../containers/full-layout/full-layout.module';\nimport { AngularRoutesModule } from '../../components/angular-routes/angular-routes.module';\n\n@NgModule({\n  imports: [AngularRoutingModule, FullLayoutModule, AngularRoutesModule]\n})\nexport class AngularModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/component-tree.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/component-tree.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div\n    i18n=\"@@addComponentDecoratorAndSetSelectorToMyVideo\"\n    id=\"addComponentDecoratorAndSetSelectorToMyVideo\"\n  >\n    video/video.component.ts: Add the '@Component' decorator and set its\n    selector property to 'my-video'.\n  </div>\n  <div i18n=\"@@addVideoComponentToAppModule\" id=\"addVideoComponentToAppModule\">\n    app.module.ts: Add VideoComponent to the AppModule 'declarations'.\n  </div>\n\n  <div\n    i18n=\"@@setTemplateUrlToLoadAppropriateFile\"\n    id=\"setTemplateUrlToLoadAppropriateFile\"\n  >\n    video/video.component.ts: Set the templateUrl to load the appropriate html\n    file\n  </div>\n  <div\n    i18n=\"@@addVideoPropertyAndDecorateWithInput\"\n    id=\"addVideoPropertyAndDecorateWithInput\"\n  >\n    video/video.component.ts: Add a video property and decorate it with @Input()\n  </div>\n  <div i18n=\"@@displayVideoTitle\" id=\"displayVideoTitle\">\n    video/video.component.html: Display the video title\n  </div>\n  <div i18n=\"@@displayVideoThumbnail\" id=\"displayVideoThumbnail\">\n    video/video.component.html: Display the video thumbnail (src)\n  </div>\n  <div i18n=\"@@displayVideoDescription\" id=\"displayVideoDescription\">\n    video/video.component.html: Display the video description\n  </div>\n  <div i18n=\"@@displayVideoData\" id=\"displayVideoData\">\n    video/video.component.html: Display the video date\n  </div>\n  <div i18n=\"@@displayNumberOfVideoViews\" id=\"displayNumberOfVideoViews\">\n    video/video.component.html: Display the number of video views\n  </div>\n  <div i18n=\"@@displayNumberOfVideoLikes\" id=\"displayNumberOfVideoLikes\">\n    video/video.component.html: Display the number video likes\n  </div>\n  <div i18n=\"@@replaceTitleAndThumbnail\" id=\"replaceTitleAndThumbnail\">\n    app.html: Replace existing title and thumbnail with our shiny new my-video\n    component\n  </div>\n  <div\n    i18n=\"@@useDataBindingToPassVideoToComponent\"\n    id=\"useDataBindingToPassVideoToComponent\"\n  >\n    app.html: Use the data binding to pass the video object to the component\n    (don't forget the square brackets)\n  </div>\n</div>\n\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n\n  <slide-arrows></slide-arrows>\n\n  <!--  MILESTONE #3  Dependency Injection  -->\n  <!-- RECAP -->\n\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      i18n-title\n      title=\"Component Tree\"\n      i18n-description\n      description=\"Combine components together\"\n      prereqs=\"\"\n    ></codelab-title-slide>\n  </div>\n\n  <!--  COMPONENT TREE  -->\n  <div *slide id=\"description\" milestone=\"component-tree\">\n    <codelab-breadcrumb i18n>Component Tree</codelab-breadcrumb>\n    <h2 i18n>\n      So far we have only one component, but as your app grows it will form a\n      tree of components\n    </h2>\n    <codelab-components-hierarchy-svg></codelab-components-hierarchy-svg>\n  </div>\n\n  <!--  Parent/Child COMPONENTS-->\n  <div *slide id=\"parent-child-component\" milestone=\"Component Tree\">\n    <codelab-breadcrumb i18n>Parent and Child</codelab-breadcrumb>\n    <h2 i18n>\n      Any component can render another one by using an HTML element that matches\n      the selector of the other component\n    </h2>\n    <div row>\n      <div column-5>\n        <code-demo-file-path path=\"box.component.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.circleAndBox.other.boxNoParams\"\n          [codeDemoHighlight]=\"code.parentComponentSkeleton.match\"\n        ></code-demo-editor>\n      </div>\n      <div column-5>\n        <code-demo-file-path path=\"circle.component.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.circleAndBox.files[0].code\"\n          [codeDemoHighlight]=\"code.parentComponentSkeleton.match\"\n        ></code-demo-editor>\n      </div>\n    </div>\n    <preview-browser-window style=\"margin-top: 280px;\">\n      <div style=\"border: 1px #ddd solid; width: 100px\">\n        <div\n          style=\"width: 100px;height: 100px;background-color: green;border-radius: 50%\"\n        ></div>\n      </div>\n    </preview-browser-window>\n  </div>\n\n  <!--  PASSING DATA  -->\n  <div *slide id=\"passing-data\" milestone=\"component-tree\">\n    <codelab-breadcrumb i18n\n      >Passing Data from Parent to Child</codelab-breadcrumb\n    >\n    <h2 i18n>\n      Parent component passes its data to the child component via properties\n    </h2>\n    <div class=\"exercise\" i18n>\n      Change the <b>size</b> to <b>100</b> and <b>color</b> to <b>red</b> to\n      recreate the Japanese flag.\n    </div>\n    <codelab-exercise-playground\n      [exercise]=\"code.boxAndCircle\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <!--  PASSING DATA  -->\n  <div *slide id=\"passing-data-child\" milestone=\"component-tree\">\n    <codelab-breadcrumb i18n\n      >Passing Data from Parent to Child</codelab-breadcrumb\n    >\n    <h2 i18n>\n      The child class must decorate its properties with a special\n      <b>@Input()</b> decorator\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.circleAndBox\"\n      [highlights]=\"code.passingDataToChildHighlights\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      This is the first time we're applying decorators to properties (as opposed\n      to classes).\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-1-pre\" milestone=\"component-tree\">\n    <codelab-breadcrumb i18n>Exercise 1</codelab-breadcrumb>\n    <h2 i18n>\n      We already know how to create a component. Let's move all the\n      video-related information into a new component called VideoComponent.\n    </h2>\n    <h3 i18n>\n      We will bootstrap the component for you; the result will be as follows:\n    </h3>\n    <preview-browser-window>\n      <div>\n        <h2 i18n>Cute kitten</h2>\n        <img src=\"/assets/images/cat-00.png\" />\n        <div>Date 2016-11-25</div>\n        <div>Views 100</div>\n        <div>Likes 49329</div>\n        <div>Description todo</div>\n      </div>\n    </preview-browser-window>\n  </div>\n\n  <!--  COMPONENT TREE EXERCISE 1 -->\n  <div *slide id=\"exercise-1\" no-padding>\n    <codelab-exercise\n      milestone=\"component-tree\"\n      [translations]=\"t\"\n      [exercise]=\"exercise\"\n    >\n    </codelab-exercise>\n  </div>\n  <!--TODO: looks like exercise is broken: after entering \"selector: 'my-video'\" it has error 'undefined in selector-->\n\n  <!-- NgModule -->\n  <div *slide id=\"module\" milestone=\"component-tree-2\">\n    <codelab-breadcrumb i18n>Parent and Child component</codelab-breadcrumb>\n    <h2 i18n>\n      Components won't know about each other unless they're declared in the same\n      module\n    </h2>\n    <code-demo\n      [files]=\"code.appModule.files\"\n      [highlights]=\"code.appModule.highlights\"\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.appModule.code\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"recap\" milestone=\"component-tree-2\">\n    <codelab-breadcrumb i18n>Review</codelab-breadcrumb>\n    <div>\n      <div row>\n        <div column-5>\n          <code-demo-file-path path=\"box.component.ts\"></code-demo-file-path>\n          <code-demo-editor\n            [fontSize]=\"15\"\n            [(ngModel)]=\"code.circleAndBox.files[1].code\"\n            [codeDemoHighlight]=\"code.parentComponentSkeleton.match\"\n          ></code-demo-editor>\n        </div>\n        <div column-5>\n          <code-demo-file-path path=\"circle.component.ts\"></code-demo-file-path>\n          <code-demo-editor\n            [fontSize]=\"15\"\n            [(ngModel)]=\"code.circleAndBox.files[0].code\"\n            [codeDemoHighlight]=\"code.parentComponentSkeleton.match\"\n          ></code-demo-editor>\n        </div>\n      </div>\n      <div row>\n        <div column-5>\n          <code-demo-file-path path=\"module.ts\"></code-demo-file-path>\n          <code-demo-editor\n            [fontSize]=\"15\"\n            [(ngModel)]=\"code.circleAndBox.files[2].code\"\n            [codeDemoHighlight]=\"code.appModule.match\"\n          ></code-demo-editor>\n        </div>\n        <preview-browser-window\n          style=\"display: block;width: 50vw; height: 50vh;\"\n        >\n          <div style=\"border: 1px #ddd solid; width: 100px\">\n            <div\n              style=\"width: 30px;height: 30px;background-color: green;border-radius: 50%\"\n            ></div>\n          </div>\n        </preview-browser-window>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-2-pre\" milestone=\"component-tree-2\">\n    <codelab-breadcrumb i18n>Exercise 2</codelab-breadcrumb>\n    <h2 i18n>In the next exercise you will use the newly created component</h2>\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercise2\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <!--  COMPONENT TREE EXERCISE 2-->\n  <div *slide id=\"exercise-2\" no-padding>\n    <codelab-exercise\n      [translations]=\"t\"\n      [exercise]=\"exercise2\"\n      milestone=\"component-tree-2\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <!--  COMPONENT TREE EXERCISE 2-->\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div header>\n        <codelab-breadcrumb i18n>Milestone Completed</codelab-breadcrumb>\n      </div>\n      <div body></div>\n      <div footer>\n        <h2>\n          <ng-container i18n>Next: </ng-container>\n          <a routerLink=\"../../router/0\" i18n>\n            Learn how to set up routing in your Angular app\n          </a>\n        </h2>\n        <feedback-rating lesson=\"AngularComponentTree\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/component-tree.component.ts",
    "content": "import { AfterViewInit, Component, ViewChild } from '@angular/core';\nimport {\n  ExerciseConfigTemplate,\n  Ng2TsExercises,\n  SlideTemplate\n} from '../../../../../../../ng2ts/ng2ts';\n\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\nimport { boxAndCircle, circleAndBox } from '../../../shared/helpers/helpers';\n\nconst circleAndBoxCode = circleAndBox();\ndeclare const require;\n\n@Component({\n  selector: 'codelab-slides-component-tree',\n  templateUrl: './component-tree.component.html',\n  styleUrls: [\n    '../../../components/css/codelab-styles.scss',\n    './component-tree.component.css'\n  ]\n})\nexport class ComponentTreeComponent implements AfterViewInit {\n  t: { [key: string]: string };\n\n  @ViewChild('translations', { static: false }) translation;\n\n  exercise: ExerciseConfigTemplate | SlideTemplate;\n  exercise2: ExerciseConfigTemplate | SlideTemplate;\n  title = 'Component Tree';\n  description = '';\n  prereqs = '';\n\n  code = {\n    parentComponentSkeleton: {\n      match: /slides-circle/,\n      code: `import { Component } from '@angular/core';\n\n@Component({\n  selector: 'slides-hello',\n  template: \\`<h1>Hello</h1><slides-world></slides-world>\\`\n})\nexport class HelloComponent {}\n`,\n      path: 'parent.component.ts',\n      type: 'typescript'\n    },\n    childComponentSkeleton: {\n      code: `import { Component } from '@angular/core';\n\n@Component({\n  selector: 'slides-world',\n  template: '<h1>World</h1>'\n})\nexport class WorldComponent {}\n`,\n      path: 'child.component.ts',\n      type: 'typescript'\n    },\n    appModule: {\n      code: {\n        'app.module.ts': require('!!raw-loader!./samples/module/app.module.ts'),\n        'circle.component.ts': require('!!raw-loader!./samples/module/circle.component.ts'),\n        'box.component.ts': require('!!raw-loader!./samples/module/box.component.ts'),\n        'bootstrap.ts': require('!!raw-loader!./../../../shared/angular-code/bootstrap.ts'),\n        'index.html': require('!!raw-loader!./samples/module/index.html')\n      },\n      files: ['app.module.ts'],\n      highlights: { 'app.module.ts': /declarations.*/ }\n    },\n    parentComponent: {\n      code: `import { Component } from '@angular/core';\nimport { Result } from './result.model';\n\n@Component({\n  selector: 'parent',\n  template: '<child [data]=”results()”>\n             </child>'\n})\nexport class Parent {\n  results(): Result[] {...}\n}`,\n      path: 'parent.component.ts',\n      type: 'typescript'\n    },\n    childComponent: {\n      code: `import { Component, Input } from '@angular/core';\nimport { Result } from './result.model';\n\n@Component({\n  selector: 'child',\n  template: '<p *ngFor=\"let result of data\">{{result}}</p>'\n})\nexport class Child {\n  @Input() data: Result[];\n}`,\n      path: 'child.component.ts',\n      type: 'typescript'\n    },\n\n    boxAndCircle: boxAndCircle(),\n    circleAndBox: circleAndBoxCode,\n    passingDataToChildHighlights: {\n      'circle.component.ts': [/@Input\\(\\) size/, /@Input\\(\\) color/]\n    }\n  };\n\n  constructor(private exercises: Ng2TsExercises) {\n    this.exercise = exercises.getExercises(4, 1);\n    this.exercise2 = exercises.getExercises(4, 2);\n  }\n\n  ngAfterViewInit() {\n    this.t = extractMessages(this.translation);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/component-tree.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { ComponentTreeComponent } from './component-tree.component';\nimport { ComponentsHierarchySvgComponent } from './components-hierarchy-svg';\nimport { Ng2TsExercises } from '../../../../../../../ng2ts/ng2ts';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild([\n  ...SlidesRoutes.get(ComponentTreeComponent)\n]);\n\n@NgModule({\n  imports: [\n    routes,\n    BrowserWindowModule,\n    CodeDemoModule,\n    FeedbackModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  providers: [Ng2TsExercises],\n  declarations: [ComponentTreeComponent, ComponentsHierarchySvgComponent],\n  exports: [ComponentTreeComponent]\n})\nexport class ComponentTreeModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/components-hierarchy-svg/components-hierarchy-svg.component.html",
    "content": "<svg width=\"90vw\" height=\"60vh\" viewBox=\"0 0 780 540\">\n  <style>\n    /* TODO: Use proper fonts */\n    .parent {\n      font-family: Arial, Helvetica, sans-serif;\n      font-size: 50px;\n      fill: white;\n    }\n\n    .child-first {\n      font-family: Arial, Helvetica, sans-serif;\n      font-size: 30px;\n      font-weight: bold;\n      fill: white;\n    }\n  </style>\n\n  <g>\n    <rect\n      x=\"0\"\n      y=\"0\"\n      width=\"780\"\n      height=\"540\"\n      style=\"fill:rgb(100%,100%,100%);\"\n    />\n    <path\n      style=\"fill:rgb(0%,19.999695%,55.299377%);\"\n      d=\"M 110.039062 288.71875 L 529.199219 288.71875 L 529.199219 263.640625 L 110.039062 263.640625 Z M 110.039062 288.71875 \"\n    />\n    <path\n      style=\"fill:rgb(0%,19.999695%,55.299377%);\"\n      d=\"M 183.839844 124.921875 L 183.839844 93.371094 C 183.839844 75.941406 197.96875 61.808594 215.390625 61.808594 L 509.851562 61.808594 L 509.851562 52.800781 L 527.878906 70.828125 L 509.851562 88.859375 L 509.851562 79.851562 L 215.390625 79.851562 C 207.921875 79.851562 201.871094 85.898438 201.871094 93.371094 L 201.871094 124.921875 Z M 183.839844 124.921875 \"\n    />\n    <path\n      style=\"fill:rgb(0%,19.999695%,55.299377%);\"\n      d=\"M 183.839844 429.359375 L 183.839844 458.550781 C 183.839844 474.671875 196.910156 487.738281 213.03125 487.738281 L 511.199219 487.738281 L 511.199219 496.078125 L 527.878906 479.398438 L 511.199219 462.71875 L 511.199219 471.058594 L 213.03125 471.058594 C 206.121094 471.058594 200.519531 465.460938 200.519531 458.550781 L 200.519531 429.359375 Z M 183.839844 429.359375 \"\n    />\n    <path\n      style=\"fill:rgb(0%,14.898682%,41.598511%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,19.999695%,55.299377%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 0 263.820312 C 0 364.320312 81.476562 445.800781 181.980469 445.800781 C 282.480469 445.800781 363.960938 364.320312 363.960938 263.820312 C 363.960938 163.320312 282.480469 81.839844 181.980469 81.839844 C 81.476562 81.839844 0 163.320312 0 263.820312 Z M 0 263.820312 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(0%,36.898804%,72.198486%);\"\n      d=\"M 563.761719 43.679688 L 665.160156 43.679688 L 665.160156 33.601562 L 563.761719 33.601562 Z M 563.761719 43.679688 \"\n    />\n    <path\n      style=\"fill:rgb(41.999817%,63.09967%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 643.679688 502.859375 C 643.679688 514.820312 653.378906 524.519531 665.339844 524.519531 C 677.300781 524.519531 687 514.820312 687 502.859375 C 687 490.898438 677.300781 481.199219 665.339844 481.199219 C 653.378906 481.199219 643.679688 490.898438 643.679688 502.859375 Z M 643.679688 502.859375 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(0%,36.898804%,72.198486%);\"\n      d=\"M 563.761719 107.878906 L 665.160156 107.878906 L 665.160156 97.679688 L 563.761719 97.679688 Z M 563.761719 107.878906 \"\n    />\n    <path\n      style=\"fill:rgb(41.999817%,63.09967%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 643.679688 436.859375 C 643.679688 448.820312 653.378906 458.519531 665.339844 458.519531 C 677.300781 458.519531 687 448.820312 687 436.859375 C 687 424.898438 677.300781 415.199219 665.339844 415.199219 C 653.378906 415.199219 643.679688 424.898438 643.679688 436.859375 Z M 643.679688 436.859375 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(0%,36.898804%,72.198486%);\"\n      d=\"M 563.761719 249.121094 L 665.160156 249.121094 L 665.160156 238.441406 L 563.761719 238.441406 Z M 563.761719 249.121094 \"\n    />\n    <path\n      style=\"fill:rgb(41.999817%,63.09967%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 643.679688 296.039062 C 643.679688 308.039062 653.378906 317.761719 665.339844 317.761719 C 677.300781 317.761719 687 308.039062 687 296.039062 C 687 284.039062 677.300781 274.320312 665.339844 274.320312 C 653.378906 274.320312 643.679688 284.039062 643.679688 296.039062 Z M 643.679688 296.039062 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(0%,36.898804%,72.198486%);\"\n      d=\"M 563.761719 313.558594 L 665.160156 313.558594 L 665.160156 302.878906 L 563.761719 302.878906 Z M 563.761719 313.558594 \"\n    />\n    <path\n      style=\"fill:rgb(41.999817%,63.09967%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 643.679688 231.660156 C 643.679688 243.621094 653.378906 253.320312 665.339844 253.320312 C 677.300781 253.320312 687 243.621094 687 231.660156 C 687 219.699219 677.300781 210 665.339844 210 C 653.378906 210 643.679688 219.699219 643.679688 231.660156 Z M 643.679688 231.660156 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(0%,36.898804%,72.198486%);\"\n      d=\"M 563.761719 446.160156 L 665.160156 446.160156 L 665.160156 435.601562 L 563.761719 435.601562 Z M 563.761719 446.160156 \"\n    />\n    <path\n      style=\"fill:rgb(41.999817%,63.09967%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 643.679688 99 C 643.679688 111 653.378906 120.71875 665.339844 120.71875 C 677.300781 120.71875 687 111 687 99 C 687 87.003906 677.300781 77.28125 665.339844 77.28125 C 653.378906 77.28125 643.679688 87.003906 643.679688 99 Z M 643.679688 99 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(0%,36.898804%,72.198486%);\"\n      d=\"M 563.761719 510.359375 L 665.160156 510.359375 L 665.160156 499.679688 L 563.761719 499.679688 Z M 563.761719 510.359375 \"\n    />\n    <path\n      style=\"fill:rgb(41.999817%,63.09967%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 643.679688 34.859375 C 643.679688 46.824219 653.378906 56.519531 665.339844 56.519531 C 677.300781 56.519531 687 46.824219 687 34.859375 C 687 22.898438 677.300781 13.199219 665.339844 13.199219 C 653.378906 13.199219 643.679688 22.898438 643.679688 34.859375 Z M 643.679688 34.859375 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(13.299561%,44.699097%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 581.941406 27.238281 C 555.960938 3 513.898438 3 487.921875 27.238281 C 581.941406 114.960938 581.941406 114.960938 581.941406 114.960938 C 607.921875 90.722656 607.921875 51.476562 581.941406 27.238281 Z M 581.941406 27.238281 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(13.299561%,44.699097%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 468.238281 66.898438 C 468.238281 103.851562 498.378906 133.800781 535.558594 133.800781 C 572.738281 133.800781 602.878906 103.851562 602.878906 66.898438 C 602.878906 29.953125 572.738281 0 535.558594 0 C 498.378906 0 468.238281 29.953125 468.238281 66.898438 Z M 468.238281 66.898438 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(13.299561%,44.699097%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 581.941406 433.441406 C 555.960938 409.199219 513.898438 409.199219 487.921875 433.441406 C 581.941406 521.160156 581.941406 521.160156 581.941406 521.160156 C 607.921875 496.921875 607.921875 457.679688 581.941406 433.441406 Z M 581.941406 433.441406 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(13.299561%,44.699097%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 468.238281 473.101562 C 468.238281 510.050781 498.378906 540 535.558594 540 C 572.738281 540 602.878906 510.050781 602.878906 473.101562 C 602.878906 436.148438 572.738281 406.199219 535.558594 406.199219 C 498.378906 406.199219 468.238281 436.148438 468.238281 473.101562 Z M 468.238281 473.101562 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(13.299561%,44.699097%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 581.941406 224.160156 C 555.960938 199.921875 513.898438 199.921875 487.921875 224.160156 C 581.941406 311.878906 581.941406 311.878906 581.941406 311.878906 C 607.921875 287.640625 607.921875 248.398438 581.941406 224.160156 Z M 581.941406 224.160156 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n    <path\n      style=\"fill:rgb(13.299561%,44.699097%,100%);stroke-width:0.72;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,9.799194%,27.799988%);stroke-opacity:1;stroke-miterlimit:10;\"\n      d=\"M 468.238281 263.820312 C 468.238281 300.769531 498.378906 330.71875 535.558594 330.71875 C 572.738281 330.71875 602.878906 300.769531 602.878906 263.820312 C 602.878906 226.871094 572.738281 196.921875 535.558594 196.921875 C 498.378906 196.921875 468.238281 226.871094 468.238281 263.820312 Z M 468.238281 263.820312 \"\n      transform=\"matrix(1,0,0,-1,0,540)\"\n    />\n  </g>\n\n  <text x=\"495\" y=\"79\" class=\"child-first\">Child</text>\n  <text x=\"495\" y=\"288\" class=\"child-first\">Child</text>\n  <text x=\"495\" y=\"487\" class=\"child-first\">Child</text>\n\n  <text x=\"110\" y=\"290\" class=\"parent\">Parent</text>\n</svg>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/components-hierarchy-svg/components-hierarchy-svg.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ComponentsHierarchySvgComponent } from './components-hierarchy-svg.component';\n\ndescribe('ComponentsHierarchySvgComponent', () => {\n  let component: ComponentsHierarchySvgComponent;\n  let fixture: ComponentFixture<ComponentsHierarchySvgComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ComponentsHierarchySvgComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ComponentsHierarchySvgComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/components-hierarchy-svg/components-hierarchy-svg.component.ts",
    "content": "import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-components-hierarchy-svg',\n  templateUrl: './components-hierarchy-svg.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ComponentsHierarchySvgComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/components-hierarchy-svg/index.ts",
    "content": "export * from './components-hierarchy-svg.component';\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/samples/module/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BoxComponent } from './box.component';\nimport { CircleComponent } from './circle.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [BoxComponent, CircleComponent],\n  bootstrap: [BoxComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/samples/module/box.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: `\n    <div>\n      <slides-circle [size]=\"100\" [color]=\"circleColor\"></slides-circle>\n    </div>\n  `\n})\nexport class BoxComponent {\n  circleColor = 'green';\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/samples/module/circle.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'slides-circle',\n  template:\n    '<div class=\"circle\" [style.width]=\"size\" [style.height]=\"size\" [style.background]=\"color\"></div>'\n})\nexport class CircleComponent {\n  @Input() size: number;\n  @Input() color: string;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/component-tree/samples/module/index.html",
    "content": "<!DOCTYPE >\n<head>\n  <style>\n    .circle {\n      border-radius: 50%;\n    }\n  </style>\n</head>\n<body>\n  <my-app>\n    Loading...\n  </my-app>\n</body>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/create-first-app.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/create-first-app.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div i18n=\"@@componentIsDecorator\" id=\"componentIsDecorator\">\n    @Component is an Angular decorator\n  </div>\n  <div i18n=\"@@noSemicolon\" id=\"noSemicolon\">\n    No semicolon here (as it attaches itself to the class below\n  </div>\n  <div i18n=\"@@decoratorGoesAboveEntity\" id=\"decoratorGoesAboveEntity\">\n    The Decorator goes directly above the decorated entity (class in this case)\n  </div>\n  <div i18n=\"@@componentNameIsClassName\" id=\"componentNameIsClassName\">\n    Component name is the class name (AppComponent).\n  </div>\n  <div i18n=\"@@createClassAppComponent\" id=\"createClassAppComponent\">\n    Create a class called 'AppComponent'\n  </div>\n  <div i18n=\"@@createClassAppModule\" id=\"createClassAppModule\">\n    Create a class called 'AppModule'\n  </div>\n  <div i18n=\"@@allSetBootstrapApp\" id=\"allSetBootstrapApp\">\n    All set! Bootstrap your application\n  </div>\n\n  <div i18n=\"@@exportClass\" id=\"exportClass\">Export the class</div>\n  <div i18n=\"@@addComponentDecorator\" id=\"addComponentDecorator\">\n    Add a Component decorator for the class\n  </div>\n  <div i18n=\"@@addSelectorMyApp\" id=\"addSelectorMyApp\">\n    Add a selector to the component decorator and set it to 'my-app'\n  </div>\n  <div i18n=\"@@addTemplateHelloMewTube\" id=\"addTemplateHelloMewTube\">\n    Add a template that contains: h1 with a text \"Hello MewTube!\"\n  </div>\n  <div i18n=\"@@addNgModuleDecorator\" id=\"addNgModuleDecorator\">\n    Add a NgModule decorator for the class\n  </div>\n  <div i18n=\"@@addBrowserModuleToNgModule\" id=\"addBrowserModuleToNgModule\">\n    Add 'BrowserModule' to the NgModule decorator imports\n  </div>\n  <div\n    i18n=\"@@addAppComponentToDeclarations\"\n    id=\"addAppComponentToDeclarations\"\n  >\n    Add 'AppComponent' to the 'declarations' property of the decorator\n  </div>\n  <div i18n=\"@@addAppComponentToBootstrap\" id=\"addAppComponentToBootstrap\">\n    Add 'AppComponent' to the 'bootstrap' property of the decorator\n  </div>\n</div>\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      title=\"Create your first Angular app\"\n      i18n-title=\"@@CreateYFirstAgApp\"\n      description=\"You will learn how to create your first Angular component, put it in a module, and bootstrap the app.\"\n      i18n-description\n      prereqs=\"Knowing TypeScript basics would help a lot\"\n      i18n-prereqs\n    ></codelab-title-slide>\n  </div>\n\n  <!--WHAT IS ANGULAR-->\n  <div *slide id=\"angular-description\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>What is Angular?</codelab-breadcrumb>\n    <div class=\"centered-vertically\">\n      <h2 i18n>\n        Angular is a <b>development platform</b> for building mobile and desktop\n        applications. Angular lets you <b>extend HTML's syntax</b> to express\n        your application's components clearly and succinctly. Angular's binding\n        and Dependency Injection <b>eliminate much of the code</b> you would\n        otherwise have to write.\n      </h2>\n    </div>\n  </div>\n\n  <!--index.html-->\n  <div *slide id=\"index-html\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n    <h2 i18n>Given an HTML file:</h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.indexHtml\"\n      [highlights]=\"code.indexHtmlMatches\"\n    ></code-demo>\n    <h2 i18n style=\"margin-top: 20px;\">\n      Let's create an Angular app which replaces the <b>hello-world</b> HTML\n      element with the app's contents.\n    </h2>\n    <h2 i18n>This can be done with 3 simple steps.</h2>\n  </div>\n\n  <!--Steps to create an Angular app-->\n  <div *slide id=\"angular-app\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n    <h2 i18n>The 3 steps are:</h2>\n    <ol>\n      <li i18n>Create an Angular component</li>\n      <li i18n>Create an Angular module</li>\n      <li i18n>Bootstrap the module</li>\n    </ol>\n  </div>\n\n  <!--COMPONENT-->\n  <div *slide id=\"component\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Step 1</codelab-breadcrumb>\n    <h2 i18n>\n      Start by creating an Angular <b>Component</b>. Components in Angular are\n      responsible for the visual part of the app\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.component.ts\"\n      [highlights]=\"code.componentMatches\"\n    ></code-demo>\n    <h2 i18n>\n      An Angular component is just a class. Properties and behavior can be added\n      inside.\n    </h2>\n  </div>\n\n  <!--@-Decorator-->\n  <div *slide id=\"component-decorator\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Decorators</codelab-breadcrumb>\n\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.component.ts\"\n      [highlights]=\"code.decoratorsMatches\"\n    ></code-demo>\n\n    <h2 i18n>The class is adorned with a <b>@Component</b> decorator</h2>\n    <div class=\"info\" i18n>\n      Decorators attach <b>Angular</b> specific information to the class.\n    </div>\n  </div>\n\n  <!--@-Decorator-->\n  <div *slide id=\"decorator\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Decorators</codelab-breadcrumb>\n    <h2 i18n>\n      Decorators are a new feature of TypeScript. They attach metadata to a\n      class, function, property or variable\n    </h2>\n    <code-demo-editor\n      language=\"typescript\"\n      [fontSize]=\"30\"\n      [(ngModel)]=\"code.decorators.code\"\n    ></code-demo-editor>\n\n    <div class=\"info\" i18n>\n      TypeScript decorators are inspired by a similar feature in the Python\n      language.\n    </div>\n  </div>\n\n  <!--Selector-->\n  <div *slide id=\"selector\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Selector</codelab-breadcrumb>\n    <h2 i18n>\n      Selectors define the location of the component. When Angular renders this\n      component, it'll find a <b>hello-world</b> HTML element in the document\n      and render the component inside of it\n    </h2>\n\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.component.ts\"\n      [highlights]=\"code.selectorMatches\"\n    ></code-demo>\n  </div>\n\n  <!--Template-->\n  <div *slide id=\"template\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Inline Template</codelab-breadcrumb>\n    <h2 i18n>Template defines the HTML code that the component generates</h2>\n\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.component.ts\"\n      [highlights]=\"code.templateMatches\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      If the amount of HTML grows out of hand, it's possible (and recommended)\n      to use a <b>templateUrl</b> instead and provide a path to the HTML file.\n    </div>\n  </div>\n\n  <!--MODULE BOOTSTRAPPING-->\n  <div *slide id=\"exercise-component-pre\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide you'll create your first <b>Angular</b> component! We'll\n      do all the wiring for you. The result will look like this:\n    </h2>\n\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercises[0]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <!--Angular app exercise-->\n  <div *slide no-padding id=\"exercise-component\">\n    <codelab-exercise\n      [translations]=\"t\"\n      testRunner=\"babel\"\n      [exercise]=\"exercises[0]\"\n      milestone=\"Bootstrap\"\n    >\n      <div class=\"description\"><p i18n>Create first Angular component!</p></div>\n    </codelab-exercise>\n  </div>\n\n  <!--ngModule intro-->\n  <div *slide id=\"module\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>Step 2</codelab-breadcrumb>\n    <h2 i18n>Next step is to declare the component in an <b>NgModule</b>.</h2>\n    <h2 i18n>\n      <b>NgModule</b> does not have any visual representation and is used\n      exclusively for grouping Angular building blocks together\n    </h2>\n    <div class=\"info\" i18n>\n      We will learn more about NgModules in the future milestones\n    </div>\n  </div>\n\n  <!--MODULE ANATOMY-->\n  <div *slide id=\"module-exercise\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>Module Class</codelab-breadcrumb>\n    <h2 i18n>Like a component, <b>Angular</b> module is just a class</h2>\n\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.module.ts\"\n      [highlights]=\"code.exportMatches\"\n    ></code-demo>\n  </div>\n\n  <!--MODULE ANATOMY-->\n  <div *slide id=\"module-decorator\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>NgModule Decorator</codelab-breadcrumb>\n    <h2 i18n>\n      Like a component, <b>Angular</b> module is adorned with a decorator\n      providing metadata\n    </h2>\n\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.module.ts\"\n      [highlights]=\"code.ngModuleMatches\"\n    ></code-demo>\n  </div>\n\n  <!--Imports-->\n  <div *slide id=\"imports\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>Browser Module</codelab-breadcrumb>\n    <codelab-slides-ng-module-mode></codelab-slides-ng-module-mode>\n  </div>\n\n  <!--Declarations-->\n  <div *slide id=\"declarations\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>Declarations</codelab-breadcrumb>\n    <h2 i18n>\n      The <b>declarations</b> array specifies components belonging to the\n      AppModule\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.module.ts\"\n      [highlights]=\"code.declarationsMatches\"\n    ></code-demo>\n  </div>\n\n  <!--Bootstrap-->\n  <div *slide id=\"bootstrap\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>Bootstrap</codelab-breadcrumb>\n    <h2 i18n>\n      The component passed into the <b>bootstrap</b> array will be created and\n      displayed in your <b>index.html</b> file\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.module.ts\"\n      [highlights]=\"code.bootstrapMatches\"\n    ></code-demo>\n  </div>\n\n  <!--MODULE BOOTSTRAPPING-->\n  <div *slide id=\"exercise-module-pre\" milestone=\"Bootstrap2\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide you'll create your first <b>Angular</b> module! We'll\n      use the component from the previous exercises and do all the wiring for\n      you. The result will look like this:\n    </h2>\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercises[1]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <!--DESCRIPTION 1-->\n  <div *slide id=\"exercise-module\" no-padding>\n    <codelab-exercise\n      [translations]=\"t\"\n      testRunner=\"babel\"\n      [exercise]=\"exercises[1]\"\n      milestone=\"Bootstrap2\"\n    >\n      <div class=\"description\"><p i18n>Create first NgModule.</p></div>\n    </codelab-exercise>\n  </div>\n\n  <!--MODULE BOOTSTRAPPING-->\n  <div *slide id=\"bootstrapping\" milestone=\"Bootstrap3\">\n    <codelab-breadcrumb i18n>Bootstrapping</codelab-breadcrumb>\n    <h2 i18n>\n      We have everything ready, so now it's time to start (bootstrap) the app!\n    </h2>\n    <h2 i18n>\n      Passing your <b>AppModule</b> to the <b>bootstrapModule</b> method will\n      start up all the components from that module's bootstrap section\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"bootstrap.ts\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      For most simple apps, you can just copy/paste the code above \"as is\"\n    </div>\n  </div>\n\n  <div *slide id=\"bootstrapping-more\" milestone=\"Bootstrap\">\n    <codelab-breadcrumb i18n>Bootstrapping 1</codelab-breadcrumb>\n    <h2 i18n>How does bootstrapping work in Angular?</h2>\n    <br />\n    <h2 i18n>\n      1. Kicks off execution environment. <b>platformBrowserDynamic()</b> tells\n      Angular that we are operating in the browser\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"bootstrap.ts\"\n      [highlights]=\"code.bootstrapPlatformMatches\"\n    ></code-demo>\n\n    <div class=\"info\">\n      <a href=\"https://angular.io/guide/bootstrapping\" target=\"_blank\" i18n\n        >Read more about root module and bootstrapping in Angular\n      </a>\n    </div>\n  </div>\n\n  <div *slide id=\"bootstrapping-more-2\" milestone=\"Bootstrap3\">\n    <codelab-breadcrumb i18n>Bootstrapping 2</codelab-breadcrumb>\n    <h2 i18n>\n      2. Angular initializes the component from the <b>bootstrap</b> array in\n      <b>app.module.ts</b> (<b>HelloWorldComponent</b> in this case)\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"app.module.ts\"\n      [highlights]=\"code.bootstrapMatches\"\n    ></code-demo>\n\n    <div class=\"info\">\n      <a href=\"https://angular.io/guide/bootstrapping\" target=\"_blank\" i18n\n        >Read more about root module and bootstrapping in Angular\n      </a>\n    </div>\n  </div>\n\n  <div *slide id=\"bootstrapping-more-3\" milestone=\"Bootstrap3\">\n    <codelab-breadcrumb i18n>Bootstrapping 3</codelab-breadcrumb>\n    <h2 i18n>\n      3. Angular looks in the document for an element matching the selector\n      defined in <b>HelloWorldComponent</b> (<b>'hello-world'</b> in our case)\n      and inserts the component inside that element\n    </h2>\n    <code-demo\n      [fontSize]=\"18\"\n      [(ngModel)]=\"code.angularApp\"\n      files=\"index.html\"\n      [highlights]=\"code.indexHtmlMatches\"\n    ></code-demo>\n\n    <div class=\"info\">\n      <a href=\"https://angular.io/guide/bootstrapping\" target=\"_blank\" i18n\n        >Read more about root module and bootstrapping in Angular\n      </a>\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-bootstrap-pre\" milestone=\"Bootstrap3\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      All set! In the next page you'll bootstrap your first <b>Angular</b> app!\n    </h2>\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercises[2]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <!--DESCRIPTION 2-->\n  <div *slide id=\"exercise-bootstrap\" no-padding>\n    <codelab-exercise\n      milestone=\"Bootstrap3\"\n      testRunner=\"babel\"\n      [translations]=\"t\"\n      [exercise]=\"exercises[2]\"\n    >\n      <div class=\"description\">\n        <p i18n>\n          Now that we've got both NgModule and the component ready, let's\n          bootstrap the app!\n        </p>\n      </div>\n    </codelab-exercise>\n    <!--TODO: check the result area - it's shown if the test passed for the first time, but doesn't disappear in case if to broke the test-->\n  </div>\n\n  <!--Whole picture-->\n  <div *slide id=\"overview\">\n    <codelab-breadcrumb i18n>Review</codelab-breadcrumb>\n    <h2 i18n>Loading order: index -> main -> app.module -> app.component</h2>\n\n    <div row>\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"index.html\"></code-demo-file-path>\n\n        <code-demo-editor\n          style=\"height: 50vh\"\n          [fontSize]=\"18\"\n          [codeDemoHighlight]=\"code.indexHtmlMatches['index.html']\"\n          language=\"html\"\n          [(ngModel)]=\"code.angularApp['index.html']\"\n        ></code-demo-editor>\n      </div>\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"bootstrap.ts\"></code-demo-file-path>\n\n        <code-demo-editor\n          style=\"height: 50vh\"\n          [fontSize]=\"18\"\n          [(ngModel)]=\"code.angularApp['bootstrap.ts']\"\n        ></code-demo-editor>\n      </div>\n    </div>\n    <div row>\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"app.module.ts\"></code-demo-file-path>\n\n        <code-demo-editor\n          style=\"height: 50vh\"\n          [fontSize]=\"18\"\n          [(ngModel)]=\"code.angularApp['app.module.ts']\"\n        ></code-demo-editor>\n      </div>\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"app.component.ts\"></code-demo-file-path>\n\n        <code-demo-editor\n          style=\"height: 50vh\"\n          [fontSize]=\"18\"\n          [codeDemoHighlight]=\"code.helloMatches['app.component.ts']\"\n          [(ngModel)]=\"code.angularApp['app.component.ts']\"\n        ></code-demo-editor>\n      </div>\n    </div>\n\n    <div class=\"info\" i18n>\n      While Angular is loading, the contents of the element will stay the same\n      (<b>Loading...</b>) in this case\n    </div>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n>End of Bootstrap Section</codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body>\n        <h2 i18n>Well done! This is the end of the milestone!</h2>\n      </div>\n      <div class=\"footer\" footer>\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../templates/0\" i18n>\n            Go to the templates Milestone\n          </a>\n        </h2>\n        <feedback-rating lesson=\"FirstAngularApp\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/create-first-app.component.ts",
    "content": "import { Component, OnInit, ViewChild } from '@angular/core';\n\nimport { ng2tsConfig } from '../../../../../../../ng2ts/ng2ts';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\n\ndeclare const require;\n\n@Component({\n  selector: 'codelab-slides-create-first-app',\n  templateUrl: './create-first-app.component.html',\n  styleUrls: [\n    '../../../components/css/codelab-styles.scss',\n    './create-first-app.component.css'\n  ]\n})\nexport class CreateFirstAppComponent implements OnInit {\n  t: { [key: string]: string };\n\n  // TODO(kirjs): we can't access tanslation in OnInit hook iwht static set to false\n  // need to consider changing how we set code\n  @ViewChild('translations', { static: true }) translation;\n  //  Exercises\n  exercises = [\n    ng2tsConfig.milestones[1].exercises[1],\n    ng2tsConfig.milestones[1].exercises[2],\n    ng2tsConfig.milestones[1].exercises[3],\n    {\n      name: 'Create a component',\n      description: '<p>Create first Angular component!</p>',\n      files: [\n        {\n          bootstrap: false,\n          excludeFromTesting: false,\n          type: 'typescript',\n          path: 'app.component.ts',\n          template: `import {Component} from '@angular/core';\\n\\n`,\n          moduleName: 'app.component',\n          code: `import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: '<h1>Hello MewTube!</h1>',\n})\nexport class AppComponent {\n}\n`,\n          solution: `import { Component } from '@angular/core';\\n\\n@Component({\\n  selector: 'my-app',\\n\n              template: '<h1>Hello MewTube!</h1>',\\n})\\nexport class AppComponent {\\n}\\n`,\n          after: 'export function evalJs( js ){ return eval(js);}'\n        },\n        {\n          bootstrap: false,\n          excludeFromTesting: false,\n          type: 'typescript',\n          path: 'app.module.ts',\n          template: `import { BrowserWindowModule } from '@angular/platform-browser';\\nimport { NgModule } from '@angular/core';\\n\n            import { AppComponent } from './app.component';\\n\\n@NgModule({\\n  imports: [BrowserWindowModule],\\n  declarations: [AppComponent],\n            \\n  bootstrap: [AppComponent]\\n})\\nexport class AppModule {\\n}\\n`,\n          moduleName: 'app.module',\n          code: `import { BrowserWindowModule } from '@angular/platform-browser';\\nimport {NgModule} from '@angular/core';\\n\n            import { AppComponent } from './app.component';\\n\\n@NgModule({\\n  imports: [BrowserWindowModule],\\n  declarations: [AppComponent],\n            \\n  bootstrap: [AppComponent]\\n})\\nexport class AppModule {\\n}\\n`,\n          readonly: true,\n          collapsed: true\n        },\n        {\n          bootstrap: true,\n          excludeFromTesting: true,\n          type: 'typescript',\n          path: 'main.ts',\n          template: `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\nimport {AppModule} from './app.module';\\n\\n\n            const platform = platformBrowserDynamic();\\nplatform.bootstrapModule(AppModule);\\n`,\n          moduleName: 'main',\n          code: `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\nimport {AppModule} from './app.module';\\n\\n\n            const platform = platformBrowserDynamic();\\nplatform.bootstrapModule(AppModule);\\n`,\n          readonly: true,\n          collapsed: true\n        }\n      ]\n    }\n  ];\n\n  // tslint:disable:max-line-length TODO: Clean up exercises and remove this comment.\n  private code: any = {};\n\n  // tslint:enable:max-line-length\n\n  ngOnInit() {\n    this.t = extractMessages(this.translation);\n\n    this.code = {\n      indexHtml: {\n        'index.html': require('!!raw-loader!./samples/index-html/index.html'),\n        'bootstrap.ts': require('!!raw-loader!./samples/index-html/bootstrap.ts')\n      },\n      angularApp: {\n        'index.html': require('!!raw-loader!./samples/app-component/index.html'),\n        'bootstrap.ts': require('!!raw-loader!./samples/app-component/bootstrap.ts'),\n        'app.component.ts': require('!!raw-loader!./samples/app-component/app.component.ts'),\n        'app.module.ts': require('!!raw-loader!./samples/app-component/app.module.ts')\n      },\n      indexHtmlMatches: { 'index.html': /<hello-[^]*world>/ },\n      helloMatches: { 'app.component.ts': /hello-world/ },\n      componentMatches: { 'app.component.ts': /export.*/ },\n      decoratorsMatches: { 'app.component.ts': /@C[^]*?\\)[^]/ },\n      selectorMatches: { 'app.component.ts': /selector.*'.*'/ },\n      templateMatches: { 'app.component.ts': /template: `[^]*?`[^]/ },\n      exportMatches: { 'app.module.ts': /export.*/ },\n      ngModuleMatches: { 'app.module.ts': /@N[^]*?\\)[^]/ },\n      declarationsMatches: { 'app.module.ts': /declarations.*/ },\n      bootstrapMatches: { 'app.module.ts': /bootstrap.*/ },\n      bootstrapPlatformMatches: {\n        'bootstrap.ts': /platformBrowserDynamic\\(\\).*/\n      },\n      decorators: {\n        code: `import {Component} from '@angular/core';\n// ${this.t.componentIsDecorator}\n@Component({\n  // metadata\n}) // ${this.t.noSemicolon}\nexport class AppComponent {\n  // ${this.t.decoratorGoesAboveEntity}\n  // ${this.t.componentNameIsClassName}\n}`\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/create-first-app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CommonModule } from '@angular/common';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FormsModule } from '@angular/forms';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\nimport { ModeComponent } from './mode/mode.component';\nimport { CreateFirstAppComponent } from './create-first-app.component';\n\nconst routes = RouterModule.forChild([\n  ...SlidesRoutes.get(CreateFirstAppComponent)\n]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    CommonModule,\n    CodeDemoModule,\n    BrowserWindowModule,\n    CodelabComponentsModule,\n    CodeDemoModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [CreateFirstAppComponent, ModeComponent],\n  exports: [CreateFirstAppComponent]\n})\nexport class CreateFirstAppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/mode/mode.component.css",
    "content": ".mode {\n  background-size: cover;\n  cursor: pointer;\n  background-repeat: no-repeat;\n  width: 60px;\n  height: 40px;\n  padding: 5px;\n  margin-right: 10px;\n  filter: grayscale(100%);\n}\n\n.mode.mode-current {\n  filter: none;\n}\n\n.mode:hover {\n  border-bottom: 5px solid gray;\n}\n\n.mode-web {\n  background-image: url(./pics/browsericon.png);\n}\n\n.mode-mobile {\n  background-image: url(./pics/phoneicon.png);\n}\n\n.mode-vr {\n  background-image: url(./pics/vricon.png);\n}\n\n.angular {\n  width: 100px;\n}\n\n.module-options {\n  display: flex;\n}\n\n.box-row {\n  display: flex;\n}\n\n.box-row-fill {\n  width: 50vw;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/mode/mode.component.html",
    "content": "<div *ngIf=\"mode === 'web'\">\n  <h2 i18n>\n    Because we're building a browser web app, we need to pass\n    <b>BrowserModule</b> to the <b>imports</b> array\n  </h2>\n  <div class=\"box-row\">\n    <div class=\"box-row-fill\">\n      <code-demo-file-path path=\"app.module.ts\"></code-demo-file-path>\n\n      <code-demo-editor\n        [fontSize]=\"30\"\n        [(ngModel)]=\"code.moduleAnatomy.code\"\n        style=\"height: 400px;\"\n        [codeDemoHighlight]=\"[code.moduleAnatomy.matches.importsArr]\"\n      ></code-demo-editor>\n    </div>\n    <preview-browser-window style=\"width: 490px; height: 300px;\">\n      <h1>Hello World</h1>\n      <div style=\"width: 100%; text-align: center;\">\n        <img class=\"angular\" src=\"/assets/images/angular.svg\" />\n      </div>\n    </preview-browser-window>\n  </div>\n</div>\n<div *ngIf=\"mode === 'mobile'\">\n  <h2 i18n>With Angular we build mobile apps using NativeScript or Ionic.</h2>\n  <div class=\"box-row\">\n    <div class=\"box-row-fill\">\n      <code-demo-editor\n        [fontSize]=\"30\"\n        [(ngModel)]=\"code.moduleAnatomy.codeMobile\"\n        [codeDemoHighlight]=\"[code.moduleAnatomy.matches.importsArr]\"\n      ></code-demo-editor>\n    </div>\n    <img\n      style=\"height: 340px; padding-top: 10px;\"\n      src=\"/assets/images/helloworldapp.png\"\n    />\n  </div>\n</div>\n<div *ngIf=\"mode === 'vr'\">\n  <h2 i18n>With Angular you can build VR apps with A-FRAME or WEBGL.</h2>\n  <div class=\"box-row\">\n    <div class=\"box-row-fill\">\n      <code-demo-editor\n        [fontSize]=\"30\"\n        [(ngModel)]=\"code.moduleAnatomy.codeVR\"\n      ></code-demo-editor>\n    </div>\n    <img\n      style=\"width: 680px; padding-top: 10px;\"\n      src=\"/assets/images/vrhelloworld.png\"\n    />\n  </div>\n</div>\n\n<div class=\"info mt-60\" i18n style=\"display: flex;\">\n  <div>\n    Angular is not just for web apps anymore; you can also use it to create\n    native phone apps and even VR scenes.\n  </div>\n  <div class=\"module-options\">\n    <a\n      class=\"mode mode-{{ m }}\"\n      *ngFor=\"let m of modes\"\n      [class.mode-current]=\"mode === m\"\n      (click)=\"mode = m\"\n    ></a>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/mode/mode.component.spec.ts",
    "content": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ModeComponent } from './mode.component';\n\ndescribe('ModeComponent', () => {\n  let component: ModeComponent;\n  let fixture: ComponentFixture<ModeComponent>;\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      declarations: [ModeComponent]\n    });\n    fixture = TestBed.createComponent(ModeComponent);\n    component = fixture.componentInstance;\n  });\n  it('can load instance', () => {\n    expect(component).toBeTruthy();\n  });\n  it(`modes defaults to: ['web', 'mobile', 'vr']`, () => {\n    expect(component.modes).toEqual(['web', 'mobile', 'vr']);\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/mode/mode.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-slides-ng-module-mode',\n  templateUrl: './mode.component.html',\n  styleUrls: ['./mode.component.css']\n})\nexport class ModeComponent implements OnInit {\n  modes = ['web', 'mobile', 'vr'];\n  mode = this.modes[0];\n  code = {\n    moduleAnatomy: {\n      // Module Anatomy - Milestone #1\n      code: `/* Imports */\n\n@NgModule({\n  imports: [ BrowserModule ],\n  declarations: [ HelloWorldComponent ],\n  bootstrap: [ HelloWorldComponent ],\n})\nexport class AppModule {}`,\n      codeMobile: `/* Imports */\n\n@NgModule({\n  imports: [ NativeScriptModule ],\n  declarations: [ HelloWorldComponent ],\n  bootstrap: [ HelloWorldComponent ],\n})\nexport class AppModule {}`,\n      codeVR: `/* Imports */\n\n@NgModule({\n  imports: [ SomeMagicVRModule ],\n  declarations: [ HelloWorldComponent ],\n  bootstrap: [ HelloWorldComponent ],\n})\nexport class AppModule {}`,\n      matches: {\n        exportClass: /export.*/,\n        ngModule: /@N[^]*?\\)[^]/,\n        importsArr: /imports.*/\n      },\n      readonly: true,\n      path: 'module.anatomy.ts',\n      type: 'typescript'\n    }\n  };\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/samples/app-component/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'hello-world',\n  template: `\n    <h1>Hello I'm an Angular app!</h1>\n    <h2>Very soon you will learn how to create and bootstrap me!</h2>\n  `\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/samples/app-component/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/samples/app-component/bootstrap.ts",
    "content": "import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/samples/app-component/index.html",
    "content": "<!DOCTYPE >\n<body>\n  <hello-world>\n    Loading...\n  </hello-world>\n\n  <!--this is main.ts compiled.\n  Often build system will insert the script tag for you-->\n  <script src=\"main.js\"></script>\n</body>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/samples/index-html/bootstrap.ts",
    "content": "import { Component, NgModule } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { BrowserModule } from '@angular/platform-browser';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'hello-world',\n  template: `\n    <h1>Hello I'm an Angular app!</h1>\n    <h2>Very soon you will learn how to create and bootstrap me!</h2>\n  `\n})\nexport class AppComponent {}\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/create-first-app/samples/index-html/index.html",
    "content": "<!DOCTYPE >\n<body>\n  <hello-world>\n    Loading...\n  </hello-world>\n\n  <!--this is main.ts compiled.\n  Often build system will insert the script tag for you-->\n  <script src=\"main.js\"></script>\n</body>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/custom-events/custom-events.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/custom-events/custom-events.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      title=\"Custom Events\"\n      description=\"Learn to bind to custom events using @Output()\"\n      prereqs=\"Component-Tree\"\n    ></codelab-title-slide>\n  </div>\n\n  <!--  Slide 1-->\n  <div *slide id=\"custom-event-slide-1\" milestone=\"CustomEvents\">\n    <h1>Custom Events / Intro</h1>\n    <h1>\n      In this milestone, you will learn to use @Output() to communicate from\n      child to parent component and handle custom events.\n    </h1>\n  </div>\n\n  <!--  Slide 2 -->\n  <div *slide id=\"custom-event-slide-2\" milestone=\"CustomEvents\">\n    <h1>Custom Events / Passing data from child to parent</h1>\n\n    <div row>\n      <div column-5>\n        <code-demo-file-path path=\"parent.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.exercise1a.code\"\n          [codeDemoHighlight]=\"code.exercise1a.match\"\n        ></code-demo-editor>\n        <h1>\n          To 'listen' to a child's event, we bind to the child's event\n          childDidSomething.\n        </h1>\n      </div>\n      <div column-5>\n        <code-demo-file-path path=\"child.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.exercise1b.code\"\n          [codeDemoHighlight]=\"code.exercise1a.match\"\n        ></code-demo-editor>\n        <h1>\n          To let the parent know that there is an event. We emit an event from\n          the child.\n        </h1>\n      </div>\n    </div>\n  </div>\n\n  <!--  Slide 3 -->\n  <div *slide id=\"custom-event-slide-3\" milestone=\"CustomEvents\">\n    <h1>Custom Events / Exercise - Intro</h1>\n    <h1>\n      Let's implement a ThumbsUp and ThumbsDown button for the VideoComponent\n      you worked on before.\n    </h1>\n\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercises[0]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <!--  Slide 4 -->\n  <div *slide id=\"custom-event-slide-4\" no-padding>\n    <codelab-exercise\n      milestone=\"CustomEvents\"\n      [translations]=\"t\"\n      [exercise]=\"exercises[0]\"\n    >\n    </codelab-exercise>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/custom-events/custom-events.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { ng2tsConfig } from '../../../../../../../ng2ts/ng2ts';\n\n@Component({\n  selector: 'codelab-slides-custom-events',\n  templateUrl: './custom-events.component.html',\n  styleUrls: ['./custom-events.component.css']\n})\nexport class CustomEventsComponent {\n  code = {\n    exercise1a: {\n      // parent\n      code: `\n                import { Component } from '@angular/core';\n\n                @Component({\n                    selector: 'parent',\n                    template: \\`\n                        <child (childDidSomething)=\"parentDoSomething()\"></child>\n                    \\`\n                })\n                export class ParentComponent {\n                    parentDoSomething() {\n                        console.log('child did something');\n                    }\n                }\n            `,\n      path: 'test.ts',\n      type: 'typescript',\n      match: /childDidSomething/\n    },\n    exercise1b: {\n      // child\n      code: `\n                import { Component } from '@angular/core';\n\n                @Component({\n                    selector: 'child',\n                    template: \\`\n                        <button (click)=\"buttonClicked()\"></button>\n                    \\`\n                })\n                export class ChildComponent {\n                    @Output() childDidSomething = new EventEmitter<any>();\n\n                    buttonClicked() {\n                        this.childDidSomething.emit();\n                    }\n                }\n            `,\n      path: 'test.ts',\n      type: 'typescript',\n      match: ``\n    }\n  };\n\n  exercises = [ng2tsConfig.milestones[5].exercises[1]];\n\n  //   constructor(private exercises: Ng2TsExercises) {\n  //     // this.exercise = exercises.getExercises(4, 1);\n  //     // this.exercise2 = exercises.getExercises(4, 2);\n  //   }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/custom-events/custom-events.module.ts",
    "content": "import { CustomEventsComponent } from './custom-events.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CommonModule } from '@angular/common';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\nimport { FormsModule } from '@angular/forms';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\n\nconst routes = RouterModule.forChild([\n  ...SlidesRoutes.get(CustomEventsComponent)\n]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    CommonModule,\n    BrowserWindowModule,\n    CodeDemoModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [CustomEventsComponent],\n  exports: [CustomEventsComponent]\n})\nexport class CustomEventsModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/dependency-injection/dependency-injection.component.css",
    "content": ".content-container {\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n  margin-top: 20px;\n}\n\n.center-preview {\n  margin: 0 auto;\n}\n\n.mewtube-preview {\n  height: 100%;\n  padding: 2vw;\n  overflow: auto;\n}\n\n.comparision {\n  padding: 0.5em;\n}\n\n.diagram-container {\n  height: 500px;\n  width: 100%;\n  max-width: 800px;\n  margin: 2rem auto 0;\n}\n.di-diagram {\n  height: 100%;\n  width: 100%;\n  background: url(./pics/deps.svg) no-repeat;\n  background-size: contain;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/dependency-injection/dependency-injection.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div\n    i18n=\"@@shorthandMakesProfessionAvailable\"\n    id=\"shorthandMakesProfessionAvailable\"\n  >\n    * TypeScript shorthand makes 'profession' * available to component instance.\n  </div>\n  <div i18n=\"@@assumingJobHasPropTitle\" id=\"assumingJobHasPropTitle\">\n    assuming Job has property '.title'\n  </div>\n  <div i18n=\"@@addIjectableDecoraterToClass\" id=\"addIjectableDecoraterToClass\">\n    video.service.ts: Add @Injectable() decorator to the class\n  </div>\n\n  <div i18n=\"@@addVideoServiceToNgModule\" id=\"addVideoServiceToNgModule\">\n    app.module.ts: Add VideoService to the NgModule providers property\n  </div>\n  <div i18n=\"@@getRidOfFakeVideos\" id=\"getRidOfFakeVideos\">\n    app.component.ts: Get rid of FAKE_VIDEOS\n  </div>\n  <div i18n=\"@@injectVideoService\" id=\"injectVideoService\">\n    app.component.ts: Inject 'VideoService' in the component constructor as\n    'videoService'\n  </div>\n  <div\n    i18n=\"@@updateAppComponentSearchmethod\"\n    id=\"updateAppComponentSearchmethod\"\n  >\n    app.component.ts: Update the app component's search method to use\n    videoService's search method\n  </div>\n</div>\n\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <div *slide id=\"intro\" no-padding milestone=\"dependency-injection\">\n    <codelab-title-slide\n      title=\"Dependency Injection\"\n      i18n-title=\"@@dependencyInjection\"\n      description=\"Learn more about Angular's powerful Dependency Injection system\"\n      i18n-description=\"@@dependencyInjectionLearnMore\"\n    ></codelab-title-slide>\n  </div>\n\n  <!--  MILESTONE #3  Dependency Injection  -->\n  <!-- RECAP -->\n  <div *slide id=\"dependency\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Example of a dependency</codelab-breadcrumb>\n    <h2 i18n>\n      We display a list of hard-coded videos in our component, but in the real\n      world we'd load them from the server.\n    </h2>\n    <h2 i18n>\n      The code for fetching the data would live in a separate class (service)\n      called VideoService\n    </h2>\n    <h2 i18n>Therefore our component will depend on the VideoService:</h2>\n    <svg viewBox=\"99 99 601 201\" style=\"margin-top: 2vw\">\n      <rect\n        x=\"100\"\n        y=\"100\"\n        width=\"200\"\n        height=\"100\"\n        fill=\"#fff\"\n        stroke=\"#000\"\n        rx=\"15\"\n        ry=\"15\"\n        stroke-width=\"1.5\"\n      ></rect>\n      <text\n        x=\"200\"\n        y=\"150\"\n        fill=\"#000\"\n        text-anchor=\"middle\"\n        alignment-baseline=\"middle\"\n      >\n        AppComponent\n      </text>\n      <rect\n        x=\"400\"\n        y=\"100\"\n        width=\"200\"\n        height=\"100\"\n        fill=\"#fff\"\n        stroke=\"#000\"\n        rx=\"15\"\n        ry=\"15\"\n        stroke-width=\"1.5\"\n      ></rect>\n      <text\n        x=\"500\"\n        y=\"150\"\n        fill=\"#000\"\n        text-anchor=\"middle\"\n        alignment-baseline=\"middle\"\n      >\n        VideoService\n      </text>\n      <line x1=\"300\" x2=\"400\" y1=\"150\" y2=\"150\" stroke=\"#000\"></line>\n      <path d=\"M 300 150 l 10 6 l -3 -6 l 3 -6 \" stroke=\"#444\"></path>\n    </svg>\n  </div>\n\n  <div *slide id=\"dependency-injection-intro\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n\n    <h2 i18n>\n      As our app grows, number of dependencies will increase. Dependencies, in\n      order, will have their own dependencies. Managing all of them manually\n      becomes increasingly harder.\n    </h2>\n    <h2 i18n>\n      To simplify that <b>Angular</b> provides a mechanism called\n      <b>Dependency injection</b>\n    </h2>\n    <div class=\"diagram-container\">\n      <div class=\"di-diagram\"></div>\n    </div>\n  </div>\n\n  <!--  COMPARISON -->\n  <div *slide id=\"comparison\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Comparison</codelab-breadcrumb>\n    <div style=\"display: flex;\">\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"person.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.withOutDI.code\"\n          [codeDemoHighlight]=\"[code.withOutDI.matches.noDI, 'profession']\"\n        ></code-demo-editor>\n        <h2 class=\"comparision\" i18n>\n          Without Dependency Injection, <b>Profession</b> has to be instantiated\n          in the <b>Person</b> class\n        </h2>\n      </div>\n      <div class=\"col-6\" style=\"margin-left: 10px;\">\n        <code-demo-file-path path=\"person-di.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.withDI.code\"\n          [codeDemoHighlight]=\"[code.withDI.matches.constructor]\"\n        ></code-demo-editor>\n        <h2 class=\"comparision\" i18n>\n          With Dependency Injection, <b>Person</b> class just \"requires\" an\n          instance of <b>Job</b> in the constructor, and Angular takes care of\n          instantiating it\n        </h2>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"comparison-2\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Parameters</codelab-breadcrumb>\n    <div class=\"content-container\">\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"person.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.withOutDI.code2\"\n          [codeDemoHighlight]=\"[code.withOutDI.matches.noDI]\"\n        ></code-demo-editor>\n        <h2 class=\"comparision\" i18n>\n          Without Dependency Injection, you have to figure out all the\n          parameters yourself\n        </h2>\n      </div>\n      <div class=\"col-6\" style=\"margin-left: 10px;\">\n        <code-demo-file-path path=\"person-di.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.withDI.code\"\n          [codeDemoHighlight]=\"[code.withDI.matches.constructor]\"\n        ></code-demo-editor>\n        <h2 class=\"comparision\" i18n>\n          With Dependency Injection, Angular takes care of it\n        </h2>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"comparison-3\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Testing</codelab-breadcrumb>\n    <h2 i18n>\n      Also Dependency Injection simplifies testing a lot, because you can just\n      pass mock dependencies as constructor parameters\n    </h2>\n    <div class=\"content-container\">\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"person-di.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.withDI.code\"\n        ></code-demo-editor>\n      </div>\n      <div class=\"col-6\">\n        <code-demo-file-path path=\"person-di.spec.ts\"></code-demo-file-path>\n        <code-demo-editor\n          [fontSize]=\"15\"\n          [(ngModel)]=\"code.withDITesting.code\"\n        ></code-demo-editor>\n      </div>\n    </div>\n  </div>\n\n  <!--  Steps to create an Angular app -->\n  <div *slide id=\"angular-app\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Example</codelab-breadcrumb>\n    <h2 i18n>\n      Let's say we have an existing <b>UnitConverterService</b> and we want to\n      start using it in <b>UnitConversionComponent</b>. It will take 3 simple\n      steps:\n    </h2>\n    <ol>\n      <li i18n>Mark dependency as @Injectable()</li>\n      <li i18n>Provide in the module</li>\n      <li i18n>Require in the component</li>\n    </ol>\n  </div>\n\n  <!--  IMPLEMENTATION STEP #1  -->\n  <div *slide id=\"make-injectable\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Step 1</codelab-breadcrumb>\n    <h2 i18n>\n      Mark the class as <b>@Injectable()</b>. This lets Angular know that this\n      class is part of Angular Dependency Injection system\n    </h2>\n    <code-demo-file-path path=\"unit-converter-service.ts\"></code-demo-file-path>\n    <code-demo-editor\n      [(ngModel)]=\"code.classAsInjectable.code\"\n      [codeDemoHighlight]=\"[code.classAsInjectable.matches.injectable]\"\n    ></code-demo-editor>\n    <div class=\"info\" i18n>\n      If a service class is marked as injectable, it can require other services\n      in its constructor.\n    </div>\n  </div>\n\n  <!--  IMPLEMENTATION STEP #2  -->\n  <div *slide id=\"provide-injectable\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Step 2</codelab-breadcrumb>\n    <h2 i18n>\n      Provide the injectable to the <b>providers</b> section of <b>NgModule</b>\n    </h2>\n    <code-demo-file-path path=\"app.module.ts\"></code-demo-file-path>\n    <code-demo-editor\n      [(ngModel)]=\"code.provideInjectable.code\"\n      [codeDemoHighlight]=\"[\n        code.provideInjectable.matches.providers,\n        'UnitConverterService'\n      ]\"\n    ></code-demo-editor>\n    <div class=\"info\" i18n>\n      Now, this service becomes available for every <b>Component</b> and other\n      service in this <b>NgModule</b>.\n    </div>\n  </div>\n\n  <!--  IMPLEMENTATION STEP #3  -->\n  <div *slide id=\"consume-injectable\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Step 3</codelab-breadcrumb>\n    <h2 i18n>Consume the Injectable in the component</h2>\n    <code-demo-file-path\n      path=\"unit-conversion.component.ts\"\n    ></code-demo-file-path>\n    <code-demo-editor\n      [(ngModel)]=\"code.consumeInjectable.code\"\n      [codeDemoHighlight]=\"[code.consumeInjectable.matches.constructor]\"\n    ></code-demo-editor>\n    <div class=\"info\" i18n>\n      Because of the <b>private</b> access modifier the service becomes\n      accessible across the class as <b>this.converter</b>.\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-pre\" milestone=\"dependency-injection\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide you'll use videoService which has even more cats!!! The\n      result will look like this:\n    </h2>\n\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercise\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <!--  CREATE FIRST ANGULAR COMPONENT EXERCISE-->\n  <div *slide id=\"exercise\" no-padding>\n    <codelab-exercise\n      milestone=\"dependency-injection\"\n      [translations]=\"t\"\n      [exercise]=\"exercise\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n>Milestone Completed</codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body></div>\n      <div class=\"footer\" footer>\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../component-tree/0\" i18n>\n            Learn how to combine components together\n          </a>\n        </h2>\n\n        <feedback-rating lesson=\"Angulardependency-injection\">\n        </feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/dependency-injection/dependency-injection.component.ts",
    "content": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Ng2TsExercises } from '../../../../../../../ng2ts/ng2ts';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\n\n@Component({\n  selector: 'codelab-slides-dependency-injection',\n  templateUrl: './dependency-injection.component.html',\n  styleUrls: ['./dependency-injection.component.css']\n})\nexport class DependencyInjectionComponent implements OnInit {\n  t: { [key: string]: string };\n  exercise;\n\n  // TODO(kirjs): we can't access tanslation in OnInit hook iwht static set to false\n  // need to consider changing how we set code\n  @ViewChild('translations', { static: true }) translation;\n  code = {};\n\n  constructor(private exercises: Ng2TsExercises) {\n    this.exercise = exercises.getExercises(3, 1);\n  }\n\n  ngOnInit() {\n    this.t = extractMessages(this.translation);\n\n    this.code = {\n      withOutDI: {\n        code: `export class Person {\n  profession: Job;\n\n  constructor() {\n    this.profession = new Job();\n  }\n}`,\n        code2: `import {ProfessionsEnum} from './professions';\n\nexport class Person {\n  profession: Job;\n\n  constructor() {\n    const Schedule = new Schedule(ProfessionsEnum.ENGINEER);\n    this.profession = new Job(ProfessionsEnum.ENGINEER, Schedule, /* TODO: Find how to inject salary*/);\n  }\n}`,\n\n        matches: {\n          noDI: /this.*/\n        },\n        readonly: true,\n        path: 'person-noDI.ts',\n        type: 'typescript'\n      },\n\n      withDI: {\n        code: `export class Person {\n  /**\n   ${this.t.shorthandMakesProfessionAvailable}\n   */\n  constructor(public profession: Job) {}\n}`,\n        matches: {\n          constructor: /constructor.*/\n        },\n        readonly: true,\n        path: 'personDI.ts',\n        type: 'typescript'\n      },\n      withDITesting: {\n        code: `const mockProfession = new Job('lawyer');\nit('should create a Person with the right profession', () => {\n  const person = new Person(mockProfession);\n  // ${this.t.assumingJobHasPropTitle}\n  expect(person.profession.title).toEqual('lawyer');\n});\n`,\n        matches: {\n          constructor: /constructor.*/\n        },\n        readonly: true,\n        path: 'personDI.spec.ts',\n        type: 'typescript'\n      },\n\n      classAsInjectable: {\n        code: `import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UnitConverterService {\n  // ...\n}`,\n        matches: {\n          injectable: /@I[^]*?\\)[^]/\n        },\n        readonly: true,\n        type: 'typescript'\n      },\n\n      provideInjectable: {\n        code: `import { NgModule } from '@angular/core';\nimport { UnitConverterService } from '../services/unit-converter.service';\nimport { UnitConversionComponent } from './unit-conversion.component';\n\n@NgModule({\n  declarations: [ UnitConversionComponent ],\n  providers: [ UnitConverterService ]\n})\nexport class AppModule {}`,\n        matches: {\n          providers: /providers.*/\n        },\n        readonly: true,\n        type: 'typescript'\n      },\n\n      consumeInjectable: {\n        code: `import { Component } from '@angular/core';\nimport { UnitConverterService } from '../services/unit-converter.service';\n\n@Component({...})\nexport class UnitConversionComponent {\n  constructor(private converter: UnitConverterService) {}\n}`,\n        matches: {\n          constructor: /constructor.*/\n        }\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/dependency-injection/dependency-injection.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { DependencyInjectionComponent } from './dependency-injection.component';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\nimport { Ng2TsExercises } from '../../../../../../../ng2ts/ng2ts';\n\nconst routes = RouterModule.forChild([\n  ...SlidesRoutes.get(DependencyInjectionComponent)\n]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    BrowserWindowModule,\n    CodeDemoModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  providers: [Ng2TsExercises],\n  declarations: [DependencyInjectionComponent],\n  exports: [DependencyInjectionComponent]\n})\nexport class DependencyInjectionModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/forms.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/forms.component.html",
    "content": "<div #translations style=\"display: none\">\n  ¬\n  <div i18n=\"AddFormsModule\" id=\"AddFormsModule\">\n    app.module.ts: Add FormsModule and MatInputModule, to the imports.\n  </div>\n  <div i18n=\"AddInput\" id=\"AddInput\">\n    upload/upload.component.html: Add a new input element\n  </div>\n  <div i18n=\"AddTitle\" id=\"AddTitle\">\n    upload/upload.component.html: Bind the input to the title property using\n    ngModel\n  </div>\n  <div i18n=\"AddDescription\" id=\"AddDescription\">\n    upload/upload.component.html: Add \"description\" textarea bound to the\n    description property of the component\n  </div>\n</div>\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\" no-padding milestone=\"forms\">\n    <codelab-title-slide\n      i18n-title\n      i18n-description\n      title=\"Forms\"\n      description=\"Adding basic forms into your app\"\n    ></codelab-title-slide>\n  </div>\n\n  <div *slide id=\"simple-form\" milestone=\"forms\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Simple Form</codelab-breadcrumb>\n    <h2 i18n>\n      We have this simple form, let's find out how to map input values with the\n      ones from our Angular component!\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"samples.basicForm\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"forms-module\" milestone=\"forms\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Simple Form</codelab-breadcrumb>\n    <h2 i18n>First we have to add <b>FormsModule</b> to our NgModule.</h2>\n    <!--[openFilesIndex]=\"[1]\"-->\n    <codelab-exercise-playground\n      files=\"app.module.ts\"\n      [exercise]=\"samples.basicForm\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"ng-model\" milestone=\"forms\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>NgModel</codelab-breadcrumb>\n    <h2 i18n>\n      Now let's use ngModel to bind the inputs to the appropriate fields on the\n      component.\n    </h2>\n    <h2 i18n>Try changing the inputs and see the values updated.</h2>\n    <codelab-exercise-playground\n      [exercise]=\"samples.ngModel\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      [(NgModel)] - <b>Banana in the box</b> is a simple mnemonic for the braces\n      order.\n    </div>\n  </div>\n\n  <div *slide id=\"forms-validation-1\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Validation</codelab-breadcrumb>\n    <h2 i18n>\n      It's really easy to add validation for your inputs using predefined\n      Angular directives.\n    </h2>\n    <h2 i18n>Let's make username <b>required</b></h2>\n    <codelab-exercise-playground\n      [exercise]=\"samples.ngValidation1\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      If you clear the input it'll be marked with an error, however no error\n      will be displayed. We'll learn how to display it in the next slide\n    </div>\n  </div>\n\n  <div *slide id=\"forms-validation-2\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Displaying Validation Errors</codelab-breadcrumb>\n    <h2 i18n>Now we let's display validation error. It takes 2 steps:</h2>\n    <ul>\n      <li i18n>\n        Get ahold of the input ngModel using <b>#name=\"ngModel\"</b> binding\n      </li>\n      <li i18n>Use <b>usernameModel</b>'s <b>errors</b> property.</li>\n    </ul>\n    <codelab-exercise-playground\n      [exercise]=\"samples.ngValidation2\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      Try clearing the username input and see the error displayed.\n    </div>\n  </div>\n  <div *slide id=\"built-in\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Validators</codelab-breadcrumb>\n    <h2 i18n>\n      Here's the list of\n      <a href=\"https://angular.io/api/forms/Validators#min\"\n        >built-in validators</a\n      >\n      that Angular provides out of the box\n    </h2>\n    <ul>\n      <li i18n>min</li>\n      <li i18n>max</li>\n      <li i18n>required</li>\n      <li i18n>requiredTrue</li>\n      <li i18n>email</li>\n      <li i18n>minLength</li>\n      <li i18n>maxLength</li>\n      <li i18n>pattern</li>\n    </ul>\n    <div class=\"info\" i18n>\n      It's also possible to create custom validators, but it's out of scope for\n      this milestone, you can read more:\n      <a href=\"https://angular.io/guide/form-validation#custom-validators\"\n        >here</a\n      >\n    </div>\n  </div>\n\n  <div *slide id=\"forms-always-required\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Error Always Displayed</codelab-breadcrumb>\n    <h2 i18n>\n      There's one small issue though, if we don't have initial values, the error\n      is displayed right away.\n    </h2>\n    <!--[openFilesIndex]=\"[0,2]\" TODO(kirjs)-->\n    <codelab-exercise-playground\n      [exercise]=\"samples.touched\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"forms-touched-dirty\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Touched & Dirty</codelab-breadcrumb>\n    <h2 i18n>\n      Luckily we can check if the user interacted with an input using\n      <b>touched</b> property.\n    </h2>\n    <ul>\n      <li i18n>\n        <b>dirty</b> is true if the user changed the value of the input.\n      </li>\n      <li i18n>\n        <b>touched</b> is true if the user focused on the input, and then blured\n        without changing the value.\n      </li>\n    </ul>\n    <codelab-exercise-playground\n      [exercise]=\"samples.touched2\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      Try focusing/bluring the <b>username</b> field, or adding some value and\n      then removing to see the error.\n    </div>\n  </div>\n\n  <div *slide id=\"forms-material\" milestone=\"forms\">\n    <codelab-breadcrumb i18n>Material Inputs (Bonus!)</codelab-breadcrumb>\n    <h2 i18n>\n      Now let's make our forms beautiful using Material Design inputs! Main\n      building blocks are:\n    </h2>\n    <ul>\n      <li i18n><b>mat-form-field</b> - Wraps the input</li>\n      <li i18n><b>matInput</b> - has to be put on the input</li>\n      <li i18n><b>mat-error</b> - Smarter error wrapper</li>\n    </ul>\n\n    <codelab-exercise-playground\n      [exercise]=\"samples.ngMaterial\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      Note that we don't need to <b>#name</b> the input anymore.\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-pre\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide there is an exercise. We're going to add a form to the\n      upload page.\n    </h2>\n    <codelab-exercise-preview\n      style=\"height:50vh\"\n      column-5\n      [exercise]=\"exercise\"\n      [url]=\"'/assets/runner/'\"\n    >\n    </codelab-exercise-preview>\n    <div class=\"info\" i18n>\n      Note: you'd have to manually click on the \"upload link\" to see the result,\n      we're working on the fix.\n    </div>\n  </div>\n\n  <div *slide id=\"exercise\" no-padding>\n    <codelab-exercise\n      milestone=\"forms\"\n      [translations]=\"t\"\n      url=\"/assets/runner\"\n      [exercise]=\"exercise\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n>End of The Forms Milestone</codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body>\n        <h2 i18n>Well done! This is the end of the milestone!</h2>\n        <h2 i18n>\n          There are more than one way to handle forms in Angular. While\n          <b>Advanced forms</b> milestone is in works, check out\n          <a href=\"https://angular.io/guide/dynamic-form\">Angular docs</a>\n        </h2>\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../angular-cli/0\" i18n>\n            Learn how to start working on your angular app in the Angular-cli\n            Milestone\n          </a>\n        </h2>\n      </div>\n      <div class=\"footer\" footer>\n        <feedback-rating lesson=\"Forms\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/forms.component.ts",
    "content": "import { CodelabFile } from '../../../shared/helpers/codelabFile';\nimport { AfterViewInit, Component, ViewChild } from '@angular/core';\nimport {\n  ExerciseConfigTemplate,\n  Ng2TsExercises\n} from '../../../../../../../ng2ts/ng2ts';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\n\ndeclare const require;\n\ninterface FileHighlights {\n  appModule?: RegExp | RegExp[];\n  appHtml?: RegExp | RegExp[];\n  appComponent?: RegExp | RegExp[];\n}\n\nfunction formsConfig(code, highlights: FileHighlights = {}) {\n  const files = {\n    appHtml: require('!!raw-loader!./samples/basic/app.1.html'),\n    appModule: require('!!raw-loader!./samples/basic/app.module.ts'),\n    appComponent: require('!!raw-loader!./samples/basic/app.component.ts'),\n    ...code\n  };\n\n  return {\n    files: [\n      CodelabFile.Html('app')\n        .setCode(files.appHtml)\n        .withHighlight(highlights.appHtml),\n\n      CodelabFile.TypeScriptFile('app.module')\n        .setCode(files.appModule)\n        .withHighlight(highlights.appModule),\n\n      CodelabFile.TypeScriptFile('app.component')\n        .setCode(files.appComponent)\n        .withHighlight(highlights.appComponent),\n\n      CodelabFile.TypeScriptFile('bootstrap')\n        .setCode(require('!!raw-loader!./samples/basic/main.ts'))\n        .makeBootstrappable(),\n\n      CodelabFile.Css('styles').setCode(\n        require('!!raw-loader!@angular/material/prebuilt-themes/indigo-pink.css')\n      ),\n\n      CodelabFile.Css('extra').setCode(\n        require('!!raw-loader!./samples/basic/styles.css')\n      )\n    ]\n  };\n}\n\n@Component({\n  selector: 'codelab-slides-forms',\n  templateUrl: './forms.component.html',\n  styleUrls: ['./forms.component.css']\n})\nexport class FormsComponent implements AfterViewInit {\n  @ViewChild('translations', { static: false }) translations;\n  exercise: ExerciseConfigTemplate;\n  samples = {\n    basicForm: formsConfig(\n      { appHtml: require('!!raw-loader!./samples/basic/app.1.html') },\n      {\n        appModule: /FormsModule]/\n      }\n    ),\n    ngModel: formsConfig(\n      { appHtml: require('!!raw-loader!./samples/basic/app.2.html') },\n      {\n        appHtml: [/ngModel/g]\n      }\n    ),\n    ngValidation1: formsConfig(\n      { appHtml: require('!!raw-loader!./samples/basic/app.3.html') },\n      {\n        appHtml: [/required/]\n      }\n    ),\n    ngValidation2: formsConfig(\n      { appHtml: require('!!raw-loader!./samples/basic/app.4.html') },\n      {\n        appHtml: [/#usernameModel=\"ngModel\"/, /<div \\*[\\s\\S]*?<\\/div>/]\n      }\n    ),\n    touched: formsConfig(\n      {\n        appHtml: require('!!raw-loader!./samples/basic/app.4.html'),\n        appComponent: require('!!raw-loader!./samples/basic/app.component.5.ts')\n      },\n      {\n        appComponent: /username = ''/\n      }\n    ),\n    touched2: formsConfig(\n      {\n        appHtml: require('!!raw-loader!./samples/basic/app.5.html'),\n        appComponent: require('!!raw-loader!./samples/basic/app.component.5.ts')\n      },\n      {\n        appHtml: /(usernameModel.touched \\|\\| usernameModel.dirty)/\n      }\n    ),\n    ngMaterial: formsConfig(\n      {\n        appHtml: require('!!raw-loader!./samples/basic/app.6.html'),\n        appModule: require('!!raw-loader!./samples/basic/app.module.6.ts').replace(\n          'component.5',\n          'component' /*Stupid hack*/\n        )\n      },\n      {\n        appHtml: [\n          /<mat-form-field>/,\n          /<\\/mat-form-field>/,\n          /matInput/,\n          /<mat-error>.*<\\/mat-error>/\n        ]\n      }\n    )\n  };\n  private t: Record<string, string>;\n\n  constructor(private exercises: Ng2TsExercises) {\n    this.exercise = exercises.getExercises(7, 0);\n  }\n\n  ngAfterViewInit() {\n    this.t = extractMessages(this.translations);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/forms.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { FormsComponent } from './forms.component';\nimport { Ng2TsExercises } from '../../../../../../../ng2ts/ng2ts';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild([...SlidesRoutes.get(FormsComponent)]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    CommonModule,\n    BrowserWindowModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [FormsComponent],\n  exports: [FormsComponent],\n  providers: [Ng2TsExercises]\n})\nexport class FormsCodelabModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.1.html",
    "content": "<div class=\"field\">\n  *name:\n  <input name=\"username\" />\n</div>\n<div class=\"field\">\n  email:\n  <input name=\"email\" />\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.2.html",
    "content": "<div class=\"field\">\n  *name:\n  <input [(ngModel)]=\"username\" name=\"username\" />\n</div>\n<div class=\"field\">\n  email:\n  <input [(ngModel)]=\"email\" name=\"email\" />\n</div>\n\n<div class=\"values\">\n  Username: {{username}} <br />\n  email: {{email}}\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.3.html",
    "content": "<div class=\"field\">\n  *name:\n  <input required [(ngModel)]=\"username\" name=\"username\" />\n</div>\n<div class=\"field\">\n  email:\n  <input [(ngModel)]=\"email\" name=\"email\" />\n</div>\n\n<div class=\"values\">\n  Username: {{username}} <br />\n  email: {{email}}\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.4.html",
    "content": "<div class=\"field\">\n  *name:\n  <input #usernameModel=\"ngModel\" [(ngModel)]=\"username\" required />\n  <div *ngIf=\"usernameModel.invalid\" class=\"error\">\n    Username is required\n  </div>\n</div>\n<div class=\"field\">\n  email:\n  <input [(ngModel)]=\"email\" />\n</div>\n\n<div class=\"values\">\n  Username: {{username}} <br />\n  email: {{email}}\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.5.html",
    "content": "<div class=\"field\">\n  *name:\n  <input required #usernameModel=\"ngModel\" [(ngModel)]=\"username\" />\n  <div\n    *ngIf=\"usernameModel.invalid\n    && (usernameModel.touched || usernameModel.dirty)\"\n    class=\"error\"\n  >\n    Username is required\n  </div>\n</div>\n<div class=\"field\">email: <input [(ngModel)]=\"email\" /></div>\n\n<div class=\"values\">\n  Username: {{username}} <br />\n  email: {{email}}\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.6.html",
    "content": "<p>\n  <mat-form-field>\n    <input\n      matInput\n      value=\"Pirojok\"\n      placeholder=\"name\"\n      [(ngModel)]=\"username\"\n      required\n    />\n    <mat-error>Username is required</mat-error>\n  </mat-form-field>\n</p>\n<p>\n  <mat-form-field>\n    <input matInput [(ngModel)]=\"email\" placeholder=\"email\" />\n  </mat-form-field>\n</p>\n<div class=\"values\">\n  Username: {{username}} <br />\n  email: {{email}}\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.component.5.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.html'\n})\nexport class AppComponent {\n  username = '';\n  email = 'pirojok@angular.io';\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  templateUrl: 'app.html'\n})\nexport class AppComponent {\n  username = 'Pirojok';\n  email = 'pirojok@angular.io';\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.html",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.module.6.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component.5';\nimport { FormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\n\n@NgModule({\n  imports: [BrowserModule, NoopAnimationsModule, MatInputModule, FormsModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  imports: [BrowserModule, FormsModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/code.ts",
    "content": "// I'm ignored\nexport const hi = 'hi';\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/main.ts",
    "content": "import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\nimport { ResourceLoader } from '@angular/compiler';\nimport * as code from './code';\n\nclass MyResourceLoader extends ResourceLoader {\n  get(url: string): Promise<string> {\n    const templateId = Object.keys(code).find(key =>\n      key.includes(url.replace(/[\\/\\.-]/gi, '_'))\n    );\n    const template = code[templateId];\n    if (!template) {\n      console.log(template);\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n    return Promise.resolve(template);\n  }\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, {\n  providers: [{ provide: ResourceLoader, useClass: MyResourceLoader, deps: [] }]\n} as any);\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/forms/samples/basic/styles.css",
    "content": "body {\n  padding: 0;\n  margin: 0;\n}\n\n.error {\n  color: red;\n  font-size: 12px;\n  margin-top: 6px;\n}\n\n.field {\n  padding: 10px;\n  border-bottom: 1px #ddd solid;\n  width: 200px;\n}\n\n.field input {\n  float: right;\n}\n\n.values {\n  margin-top: 20px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/material.component.css",
    "content": ".examples {\n  width: 100%;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/material.component.html",
    "content": "<div #translations style=\"display: none\">\n  ¬\n  <div i18n=\"@@AddMatModules\" id=\"AddMatModules\">\n    app.module.ts: Add MatCardModule and MatToolbarModule, to the imports.\n  </div>\n  <div i18n=\"@@AddMatToolbar\" id=\"AddMatToolbar\">\n    app.html: Add material toolbar containing the title\n  </div>\n  <div i18n=\"@@UseMatCard\" id=\"UseMatCard\">\n    video/video.component.html: Use material card to display the data\n  </div>\n  <div i18n=\"@@AddMatCardTitle\" id=\"AddMatCardTitle\">\n    video/video.component.html: Add mat-card-title (inside of the mat-card) to\n    display video title\n  </div>\n  <div i18n=\"@@AddMatCardSubtitle\" id=\"AddMatCardSubtitle\">\n    video/video.component.html: Add mat-card-subtitle (inside of the mat-card)\n    to display video description\n  </div>\n  <div i18n=\"@@AddMatImage\" id=\"AddMatImage\">\n    video/video.component.html: Mark img with mat-card-image attribute (inside\n    of the mat-card) so that it takes full card size\n  </div>\n  <div i18n=\"@@MoveDataToNewComponent\" id=\"MoveDataToNewComponent\">\n    video/video.component.html: move date/views/likes info inside of\n    mat-card-content (inside of the mat-card)\n  </div>\n</div>\n\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      i18n-title\n      i18n-description\n      title=\"Material design\"\n      description=\"Learn how to use Angular Material\"\n    ></codelab-title-slide>\n  </div>\n  <!--  INTRO -->\n  <div *slide id=\"components\" milestone=\"material\">\n    <h2 i18n>\n      Now let's use\n      <a href=\"https://material.angular.io\" target=\"_blank\">Angular Material</a>\n      to make our app look beautiful ✨✨\n    </h2>\n    <h2 i18n>\n      Angular Material provides you with a set of\n      <a href=\"https://material.io/\" target=\"_blank\">Material Design</a>\n      components for Angular:\n    </h2>\n    <!--Angular Material предоставляет множество Angular-компонентов в стиле-->\n    <!--<ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Material Design<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>:-->\n    <ul>\n      <li i18n>Fast and Consistent</li>\n      <li i18n>Versatile</li>\n      <li i18n>Accessible</li>\n      <li i18n>Optimized for Angular</li>\n      <li i18n>Look great on mobile</li>\n    </ul>\n\n    <h2 i18n>\n      See the list of components\n      <a\n        href=\"https://material.angular.io/components/categories\"\n        target=\"_blank\"\n        >here</a\n      >\n    </h2>\n  </div>\n\n  <div *slide id=\"toolbar\" milestone=\"material\">\n    <codelab-breadcrumb i18n>MatToolBar</codelab-breadcrumb>\n    <h2 i18n>Adding a toolbar takes 2 steps:</h2>\n    <ul>\n      <li i18n>Add <b>MatToolbarModule</b> to the imports</li>\n      <li i18n>Use the component in the template</li>\n    </ul>\n    <!--MatToolBar-->\n    <code-demo\n      [(ngModel)]=\"code.material.step1.code\"\n      [files]=\"code.material.step1.files\"\n      [highlights]=\"code.material.step1.highlights\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      Note that Angular animations come in a separate module. We're including\n      <b>NoopAnimationsModule</b> here, but could have used\n      <b>BrowserAnimationsModule</b> instead, to have full-fledged animations.\n    </div>\n  </div>\n\n  <div *slide id=\"card\" milestone=\"material\">\n    <codelab-breadcrumb i18n>Card</codelab-breadcrumb>\n    <h2 i18n>Now let's add material card.</h2>\n    <code-demo\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.material.step2.code\"\n      [files]=\"code.material.step2.files\"\n      [highlights]=\"code.material.step2.highlights\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"header\" milestone=\"material\">\n    <codelab-breadcrumb i18n>Card Header</codelab-breadcrumb>\n    <h2 i18n>Header and an image.</h2>\n    <code-demo\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.material.step3.code\"\n      [files]=\"code.material.step3.files\"\n      [highlights]=\"code.material.step3.highlights\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"buttons\" milestone=\"material\">\n    <codelab-breadcrumb i18n>Buttons</codelab-breadcrumb>\n    <h2 i18n>Adding some actions....</h2>\n    <code-demo\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.material.step4.code\"\n      [files]=\"code.material.step4.files\"\n      [highlights]=\"code.material.step4.highlights\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      Note that for the button we're using <b>mat-button</b> attribute instead\n      of a separate tag.\n    </div>\n  </div>\n\n  <div *slide id=\"themes\" milestone=\"material\">\n    <codelab-breadcrumb i18n>Themes</codelab-breadcrumb>\n    <h2 i18n>\n      All Angular Material components allow to apply themes. Try different\n      themes by clicking the buttons below:\n    </h2>\n    <div style=\"margin-bottom: 1.5vw;\">\n      <button\n        mat-button\n        mat-raised-button\n        [color]=\"theme === 'indigo' ? 'primary' : 'secondary'\"\n        (click)=\"setTheme('indigo')\"\n        i18n\n      >\n        Indigo\n      </button>\n      <button\n        mat-button\n        mat-raised-button\n        [color]=\"theme === 'deeppurple' ? 'primary' : 'secondary'\"\n        (click)=\"setTheme('deeppurple')\"\n        i18n\n      >\n        Deep purple\n      </button>\n      <button\n        mat-button\n        mat-raised-button\n        [color]=\"theme === 'pink' ? 'primary' : 'secondary'\"\n        (click)=\"setTheme('pink')\"\n        i18n\n      >\n        Pink\n      </button>\n      <button\n        mat-button\n        mat-raised-button\n        [color]=\"theme === 'purple' ? 'primary' : 'secondary'\"\n        (click)=\"setTheme('purple')\"\n        i18n\n      >\n        Purple\n      </button>\n    </div>\n    <code-demo\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.material.themes.code\"\n      [files]=\"code.material.themes.files\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      Read more on theming Angular Material\n      <a href=\"https://material.angular.io/guide/theming\">in this guide</a>\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-pre\" milestone=\"material\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide there is an exercise. We're going to materialize our\n      application\n    </h2>\n    <codelab-exercise-preview\n      style=\"height: 50vh;width: 100%\"\n      [exercise]=\"exercise\"\n      [url]=\"'/assets/runner/'\"\n    ></codelab-exercise-preview>\n    <div class=\"info\" i18n>\n      Note: the final app won't be super beautiful, we're still working on that.\n    </div>\n  </div>\n\n  <div *slide id=\"exercise\" no-padding>\n    <codelab-exercise\n      milestone=\"material\"\n      url=\"/assets/runner\"\n      [translations]=\"t\"\n      [exercise]=\"exercise\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n\n          >End of The Material Milestone\n        </codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body>\n        <h2 i18n>Well done! This is the end of the milestone!</h2>\n        <h2 i18n>\n          Check out Angular Material\n          <a\n            href=\"https://material.angular.io/guide/getting-started\"\n            target=\"_blank\"\n            >\"Getting Started\"</a\n          >\n          Guide\n        </h2>\n      </div>\n      <div class=\"footer\" footer>\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../forms/0\" i18n>\n            Learn how to create simple forms with Angular\n          </a>\n        </h2>\n        <feedback-rating lesson=\"Material\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/material.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\n\nimport {\n  ExerciseConfigTemplate,\n  Ng2TsExercises\n} from '../../../../../../../ng2ts/ng2ts';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\nimport { CodelabFile } from '../../../shared/helpers/codelabFile';\n\ndeclare const require;\n\ninterface FileHighlights {\n  appModule?: RegExp;\n  appHtml?: RegExp;\n}\n\nfunction matExercise(\n  modules,\n  html,\n  highlights: FileHighlights = {},\n  theme = 'purple'\n) {\n  const moduleCode = require('!!raw-loader!./samples/basic/app.module.ts').replace(\n    /MatCardModule, MatToolbarModule/g,\n    modules\n  );\n\n  return {\n    files: [\n      CodelabFile.TypeScriptFile('app.module')\n        .setCode(moduleCode)\n        .withHighlight(highlights.appModule),\n      CodelabFile.Html('app')\n        .setCode(html)\n        .withHighlight(highlights.appHtml),\n      CodelabFile.TypeScriptFile('app.component').setCode(\n        require('!!raw-loader!./samples/basic/app.component.ts')\n      ),\n      CodelabFile.TypeScriptFile('bootstrap')\n        .setCode(require('!!raw-loader!./samples/basic/main.ts'))\n        .makeBootstrappable(),\n      CodelabFile.Css('styles').setCode(\n        require('!!raw-loader!@angular/material/prebuilt-themes/indigo-pink.css')\n      ),\n      CodelabFile.Css('extra').setCode('body {padding: 0; margin: 0;}')\n    ]\n  };\n}\n\n@Component({\n  selector: 'codelab-slides-material',\n  templateUrl: './material.component.html',\n  styleUrls: ['./material.component.css'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class MaterialComponent implements AfterViewInit {\n  exercise: ExerciseConfigTemplate;\n  @ViewChild('themePlayground', { static: false }) themePlayground;\n  @ViewChild('translations', { static: false }) translations;\n\n  themes = {\n    indigo: require('!!raw-loader!@angular/material/prebuilt-themes/indigo-pink.css'),\n    deeppurple: require('!!raw-loader!@angular/material/prebuilt-themes/deeppurple-amber.css'),\n    pink: require('!!raw-loader!@angular/material/prebuilt-themes/pink-bluegrey.css'),\n    purple: require('!!raw-loader!@angular/material/prebuilt-themes/purple-green.css')\n  };\n\n  code = {\n    material: {\n      step1: {\n        code: {\n          'app.component.ts': require('!!raw-loader!./samples/basic/app.component.ts'),\n          'app.module.ts': require('!!raw-loader!./samples/step1/app.module.ts'),\n          'app.html': require('!!raw-loader!./samples/step1/app.html'),\n          'bootstrap.ts': require('!!raw-loader!./samples/basic/main.ts'),\n          'styles.css': this.themes.indigo\n        },\n        files: ['app.module.ts', 'app.html'],\n        highlights: {\n          'app.module.ts': 'MatToolbarModule,',\n          'app.html': /<mat-toolbar[\\s\\S]*<\\/mat-toolbar>/\n        }\n      },\n      step2: {\n        code: {\n          'app.component.ts': require('!!raw-loader!./samples/basic/app.component.ts'),\n          'app.module.ts': require('!!raw-loader!./samples/step2/app.module.ts'),\n          'app.html': require('!!raw-loader!./samples/step2/app.html'),\n          'bootstrap.ts': require('!!raw-loader!./samples/basic/main.ts'),\n          'styles.css': this.themes.indigo\n        },\n        files: ['app.module.ts', 'app.html'],\n        highlights: {\n          'app.module.ts': /MatCardModule,/,\n          'app.html': /<mat-card[\\s\\S]*<\\/mat-card>/\n        }\n      },\n      step3: {\n        code: {\n          'app.component.ts': require('!!raw-loader!./samples/basic/app.component.ts'),\n          'app.module.ts': require('!!raw-loader!./samples/step2/app.module.ts'),\n          'app.html': require('!!raw-loader!./samples/step3/app.html'),\n          'bootstrap.ts': require('!!raw-loader!./samples/basic/main.ts'),\n          'styles.css': this.themes.indigo\n        },\n        files: ['app.html'],\n        highlights: {\n          'app.html': /<mat-card-header[\\s\\S]*?Photo of a Shiba Inu[\\s\\S]*?>/\n        }\n      },\n      step4: {\n        code: {\n          'app.component.ts': require('!!raw-loader!./samples/basic/app.component.ts'),\n          'app.module.ts': require('!!raw-loader!./samples/step4/app.module.ts'),\n          'app.html': require('!!raw-loader!./samples/step4/app.html'),\n          'bootstrap.ts': require('!!raw-loader!./samples/basic/main.ts'),\n          'styles.css': this.themes.indigo\n        },\n        files: ['app.module.ts', 'app.html'],\n        highlights: {\n          'app.module.ts': /MatButtonModule\\n/,\n          'app.html': /<mat-card-actions[\\s\\S]*<\\/mat-card-actions>/\n        }\n      },\n      themes: {\n        code: {\n          'app.component.ts': require('!!raw-loader!./samples/basic/app.component.ts'),\n          'app.module.ts': require('!!raw-loader!./samples/step4/app.module.ts'),\n          'app.html': require('!!raw-loader!./samples/step4/app.html'),\n          'bootstrap.ts': require('!!raw-loader!./samples/basic/main.ts'),\n          'styles.css': this.themes.indigo\n        },\n        files: ['app.html', 'styles.css']\n      },\n      theme: matExercise(\n        `MatToolbarModule,\\n    MatCardModule,\\n    MatButtonModule`,\n        require('!!raw-loader!./samples/basic/app.4.html')\n      )\n    }\n  };\n  private theme = 'indigo';\n  private t: Record<string, string>;\n\n  constructor(private exercises: Ng2TsExercises) {\n    this.exercise = exercises.getExercises(6, 0);\n  }\n\n  ngAfterViewInit() {\n    this.t = extractMessages(this.translations);\n  }\n\n  setTheme(theme) {\n    this.theme = theme;\n    this.code.material.themes.code['styles.css'] = this.themes[theme];\n    this.code.material.themes.code = { ...this.code.material.themes.code };\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/material.module.ts",
    "content": "import { MaterialComponent } from './material.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { Ng2TsExercises } from '../../../../../../../ng2ts/ng2ts';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild([...SlidesRoutes.get(MaterialComponent)]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    CommonModule,\n    BrowserWindowModule,\n    MatButtonModule,\n    MatCardModule,\n    MatInputModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule,\n    CodeDemoModule\n  ],\n  declarations: [MaterialComponent],\n  exports: [MaterialComponent],\n  providers: [Ng2TsExercises]\n})\nexport class MaterialCodelabModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.1.html",
    "content": "<mat-toolbar color=\"primary\">\n  <span>Hi, I'm material toolbar</span>\n</mat-toolbar>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.2.html",
    "content": "<mat-toolbar color=\"primary\">\n  <span>Hi, I'm material toolbar</span>\n</mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.3.html",
    "content": "<mat-toolbar color=\"primary\">\n  <span>Hi, I'm material toolbar</span>\n</mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-header>\n    <div mat-card-avatar class=\"example-header-image\"></div>\n    <mat-card-title>Shiba Inu</mat-card-title>\n    <mat-card-subtitle>Dog Breed</mat-card-subtitle>\n  </mat-card-header>\n  <img\n    mat-card-image\n    src=\"http://material.angular.io/assets/img/examples/shiba2.jpg\"\n    alt=\"Photo of a Shiba Inu\"\n  />\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.4.html",
    "content": "<mat-toolbar color=\"primary\"> <span>Header</span> </mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-header>\n    <div mat-card-avatar class=\"example-header-image\"></div>\n    <mat-card-title>Shiba Inu</mat-card-title>\n    <mat-card-subtitle>Dog Breed</mat-card-subtitle>\n  </mat-card-header>\n  <img\n    mat-card-image\n    src=\"http://material.angular.io/assets/img/examples/shiba2.jpg\"\n    alt=\"Photo of a Shiba Inu\"\n  />\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n  <mat-card-actions>\n    <button mat-raised-button color=\"primary\">LIKE</button>\n    <button mat-button>SHARE</button>\n  </mat-card-actions>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.html'\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.html",
    "content": "<mat-toolbar color=\"primary\"> <span>Header</span> </mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-header>\n    <div mat-card-avatar class=\"example-header-image\"></div>\n    <mat-card-title>Shiba Inu</mat-card-title>\n    <mat-card-subtitle>Dog Breed</mat-card-subtitle>\n  </mat-card-header>\n  <img\n    mat-card-image\n    src=\"http://material.angular.io/assets/img/examples/shiba2.jpg\"\n    alt=\"Photo of a Shiba Inu\"\n  />\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n  <mat-card-actions>\n    <button mat-button>LIKE</button> <button mat-button>SHARE</button>\n  </mat-card-actions>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [\n    BrowserModule,\n    NoopAnimationsModule,\n    MatToolbarModule,\n    MatCardModule,\n    MatButtonModule\n  ],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/code.ts",
    "content": "// I'm ignored\nexport const hi = 'hi';\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/basic/main.ts",
    "content": "import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\nimport { ResourceLoader } from '@angular/compiler';\nimport * as code from './code';\n\nclass MyResourceLoader extends ResourceLoader {\n  get(url: string): Promise<string> {\n    const templateId = Object.keys(code).find(key =>\n      key.includes(url.replace(/[\\/\\.-]/gi, '_'))\n    );\n    const template = code[templateId];\n    if (!template) {\n      console.log(template);\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n    return Promise.resolve(template);\n  }\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, [\n  {\n    providers: [\n      {\n        provide: ResourceLoader,\n        useFactory: () => new MyResourceLoader(),\n        deps: []\n      }\n    ]\n  }\n]);\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step1/app.html",
    "content": "<mat-toolbar color=\"primary\">\n  <span>Hi, I'm material toolbar</span>\n</mat-toolbar>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step1/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [\n    BrowserModule,\n    NoopAnimationsModule,\n    MatToolbarModule,\n    MatCardModule,\n    MatButtonModule\n  ],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step2/app.html",
    "content": "<mat-toolbar color=\"primary\">\n  <span>Hi, I'm material toolbar</span>\n</mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step2/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [\n    BrowserModule,\n    NoopAnimationsModule,\n    MatToolbarModule,\n    MatCardModule,\n    MatButtonModule\n  ],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step3/app.html",
    "content": "<mat-toolbar color=\"primary\">\n  <span>Hi, I'm material toolbar</span>\n</mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-header>\n    <div mat-card-avatar class=\"example-header-image\"></div>\n    <mat-card-title>Shiba Inu</mat-card-title>\n    <mat-card-subtitle>Dog Breed</mat-card-subtitle>\n  </mat-card-header>\n  <img\n    mat-card-image\n    src=\"http://material.angular.io/assets/img/examples/shiba2.jpg\"\n    alt=\"Photo of a Shiba Inu\"\n  />\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step4/app.html",
    "content": "<mat-toolbar color=\"primary\"> <span>Header</span> </mat-toolbar>\n\n<mat-card class=\"example-card\">\n  <mat-card-header>\n    <div mat-card-avatar class=\"example-header-image\"></div>\n    <mat-card-title>Shiba Inu</mat-card-title>\n    <mat-card-subtitle>Dog Breed</mat-card-subtitle>\n  </mat-card-header>\n  <img\n    mat-card-image\n    src=\"http://material.angular.io/assets/img/examples/shiba2.jpg\"\n    alt=\"Photo of a Shiba Inu\"\n  />\n  <mat-card-content>\n    <p>\n      The Shiba Inu is the smallest of the six original and distinct spitz\n      breeds of dog from Japan. A small, agile dog that copes very well with\n      mountainous terrain, the Shiba Inu was originally bred for hunting.\n    </p>\n  </mat-card-content>\n  <mat-card-actions>\n    <button mat-raised-button color=\"primary\">LIKE</button>\n    <button mat-button>SHARE</button>\n  </mat-card-actions>\n</mat-card>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/material/samples/step4/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [\n    BrowserModule,\n    NoopAnimationsModule,\n    MatToolbarModule,\n    MatCardModule,\n    MatButtonModule\n  ],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/pipes.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/pipes.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <div *slide id=\"intro\" no-padding milestone=\"Pipes\">\n    <codelab-title-slide\n      title=\"Pipes\"\n      description=\"Learn how pipes transform input values to output values for display in a view.\"\n      prereqs=\"Interpolation expressions\"\n    ></codelab-title-slide>\n  </div>\n\n  <!-- WHAT ARE PIPES  -->\n  <div *slide id=\"pipes-description\" milestone=\"Pipes\">\n    <h1>Introduction</h1>\n    <div class=\"centered-vertically\">\n      <h2>\n        Every application starts out with what seems like a simple task: get\n        data, transform it, and show it to users. Getting data could be as\n        simple as creating a local variable or as complex as streaming data over\n        a WebSocket.<br /><br />\n        An Angular pipe is a <b>function</b> that transforms input values to\n        output values for display in a view. Let's see how it works.\n      </h2>\n    </div>\n  </div>\n\n  <!--  HOW DO PIPES WORK -->\n  <div *slide id=\"how-pipes-work\" milestone=\"Pipes\">\n    <h1>How do pipes work?</h1>\n    <h2>\n      A pipe takes in data as input and transforms it to a desired output.\n    </h2>\n    <h3>\n      Inside the interpolation expression, we use the pipe\n      <b>( &#124; )</b> operator to pass the App Component's 'dob' through the\n      the 'date' pipe on the right, transforming a long timestamp into a more\n      human-readable output. All pipes follow this signature.\n      <codelab-exercise-playground\n        [exercise]=\"code.workingPipes.template\"\n        [codeDemoHighlight]=\"[code.workingPipes.matches.pipeOperator]\"\n      ></codelab-exercise-playground>\n    </h3>\n  </div>\n\n  <!--  BUILT-IN PIPES -->\n  <div *slide id=\"built-in-pipes\" milestone=\"Pipes\">\n    <h1>Built-in Pipes</h1>\n    <div class=\"centered-vertically\">\n      <h2>\n        Angular comes with a variety of built-in pipes that can be used in any\n        template or binding expression. Some of these pipes are:\n      </h2>\n      <ul>\n        <li>DatePipe</li>\n        <li>UpperCasePipe</li>\n        <li>LowerCasePipe</li>\n        <li>CurrencyPipe</li>\n        <li>PercentPipe</li>\n      </ul>\n      <h2>\n        You can check out all the pipes\n        <a href=\"https://angular.io/docs/ts/latest/api/#!?query=pipe\"\n          >in the docs.</a\n        >\n      </h2>\n    </div>\n  </div>\n\n  <!--  CHAINED PIPES -->\n  <div *slide id=\"chained-pipes\" milestone=\"Pipes\">\n    <h1>Chained Pipes</h1>\n    <h2>\n      Translate Dali's birthday to a more human-friendly format. While you're at\n      it, make his birthday uppercase, too.\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.chainedPipesExample.template\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" milestone=\"Pipes\">Hint: dob ... date ... uppercase</div>\n  </div>\n\n  <!--  PIPES WITH ARGUMENT -->\n  <div *slide id=\"argument-pipes\" milestone=\"Pipes\">\n    <h1>Pipes with arguments:</h1>\n    <code-demo-editor [(ngModel)]=\"code.argumentPipes.template\" language=\"html\">\n    </code-demo-editor>\n    <div class=\"info\" milestone=\"Pipes\">\n      To add parameters to a pipe, append a colon ( : ) followed by the\n      parameters' values e.g. currency:'AUD'\n    </div>\n  </div>\n\n  <!--  PIPES AS FILTERS  -->\n  <div *slide id=\"pipes-as-filters\" milestone=\"Pipes\">\n    <h1>Using custom pipes to filter data</h1>\n    <code-demo-editor [(ngModel)]=\"code.filterPipes.template\" language=\"html\">\n    </code-demo-editor>\n  </div>\n\n  <!--  CREATING A PIPE  -->\n  <div *slide id=\"crating-pipe\" milestone=\"Pipes\">\n    <h1>Creating a pipe</h1>\n    <code-demo-editor\n      [fontSize]=\"25\"\n      [(ngModel)]=\"code.creatingAPipe.template\"\n      [codeDemoHighlight]=\"code.creatingAPipe.matches.exportClass\"\n    >\n    </code-demo-editor>\n    <h2>A pipe is a class decorated with pipe metadata.</h2>\n  </div>\n\n  <!--  PIPE TRANSFORM  -->\n  <div *slide id=\"pipeTransform\" milestone=\"Pipes\">\n    <h1>Creating a pipe</h1>\n    <code-demo-editor\n      [fontSize]=\"25\"\n      [(ngModel)]=\"code.creatingAPipe.template\"\n      [codeDemoHighlight]=\"code.creatingAPipe.matches.pipeTransform\"\n    >\n    </code-demo-editor>\n    <h2>The pipe class implements the PipeTransform interface.</h2>\n  </div>\n\n  <!--  PIPE TRANSFORM METHOD  -->\n  <div *slide id=\"pipe-transform-method\" milestone=\"Pipes\">\n    <h1>Creating a pipe</h1>\n    <code-demo-editor\n      [fontSize]=\"25\"\n      [(ngModel)]=\"code.creatingAPipe.template\"\n      [codeDemoHighlight]=\"code.creatingAPipe.matches.method\"\n    >\n    </code-demo-editor>\n    <h2>\n      The transform method accepts an input value followed by optional\n      parameters and returns the transformed value.\n    </h2>\n  </div>\n\n  <!--  PIPE DECORATOR  -->\n  <div *slide id=\"pipe-decorator\" milestone=\"Pipes\">\n    <h1>Creating a pipe</h1>\n    <code-demo-editor\n      [fontSize]=\"25\"\n      [(ngModel)]=\"code.creatingAPipe.template\"\n      [codeDemoHighlight]=\"code.creatingAPipe.matches.decorator\"\n    >\n    </code-demo-editor>\n    <h2>\n      The @Pipe decorator allows you to define the pipe name that you'll use\n      within template expressions.\n    </h2>\n    <div class=\"info\" milestone=\"Pipes\">\n      Don't forget to import the @Pipe decorator from the core Angular library.\n    </div>\n  </div>\n\n  <!--  END -->\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header><h1>End of the Pipes Section</h1></div>\n      <div class=\"body\" body>\n        <h2>Well done! This is the end of the milestone!</h2>\n      </div>\n      <div class=\"footer\" footer>\n        <h2>\n          <a routerLink=\"/visual-studio-code/0\"\n            >Go to the next Bonus Milestone</a\n          >\n        </h2>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/pipes.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { displayAngularComponent } from '../../../shared/helpers/helpers';\n\n@Component({\n  selector: 'codelab-slides-pipes',\n  templateUrl: './pipes.component.html',\n  styleUrls: ['./pipes.component.css']\n})\nexport class PipesComponent {\n  code = {\n    chainedPipesExample: {\n      template: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Salvador's Dali DOB</h1>\n  <p>{{ dob }}</p>\\`\n})\nexport class AppComponent {\n  dob = new Date(1904, 4, 11);\n}`)\n    },\n    workingPipes: {\n      template: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Salvador's Dali DOB</h1>\n  <p>{{dob}}</p>\n  <p>{{ dob | date }}</p>\\`\n})\nexport class AppComponent {\n  dob = new Date(1904, 4, 11);\n}`),\n      matches: {\n        pipeOperator: '|'\n      }\n    },\n    argumentPipes: {\n      template: `<p>Your budget is {{budget | currency:'AUD'}}</p>\n<p>Your truncated name is {{name | substring:1:4}}</p>\n<!-- Maryanne -> Mary -->`,\n      readonly: true,\n      path: 'argument.pipe.html'\n    },\n    filterPipes: {\n      template: `<!-- Here we pipe team.roster through\n  a custom “notInjured” pipe,\n  then render each player that isn't injured. -->\n<ul>\n  <li *ngFor=\"let player of (team.roster | notInjured)\">\n    {{player.name}}\n  </li>\n</ul>`,\n      readonly: true,\n      path: 'filter.pipe.html'\n    },\n    creatingAPipe: {\n      template: `import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({name: 'substring'})\nexport class SubstringPipe implements PipeTransform {\n  transform(value: string, start: number, end: number): string {\n    return (value || '').slice(start, end);\n  }\n}`,\n      matches: {\n        exportClass: /export.*/,\n        decorator: /@Pipe/,\n        pipeTransform: /PipeTransform/,\n        method: /transform[^]*?\\)[^]/\n      },\n      readonly: true,\n      path: 'substring.pipe.ts',\n      type: 'typescript'\n    }\n  };\n\n  constructor() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/pipes.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { PipesComponent } from './pipes.component';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(PipesComponent));\n\n@NgModule({\n  imports: [\n    routes,\n    CodeDemoModule,\n    BrowserWindowModule,\n    FeedbackModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [PipesComponent],\n  exports: [PipesComponent]\n})\nexport class PipesModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/samples/pipes/app.component.html",
    "content": "Wow, check out this terribly formatted date:\n<h1>{{ birthday }}</h1>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/samples/pipes/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.component.html'\n})\nexport class AppComponent {\n  birthday = new Date('2012-01-19');\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/pipes/samples/pipes/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\n// Useless app module to prevent angular from complaining\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/playground/angular-sample.ts",
    "content": "export const angularSampleCode = {\n  'app.component.ts': `import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Edit me </h1>\\`\n})\nexport class AppComponent {}`,\n  'app.module.ts': `import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}`,\n\n  'main.ts': `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n`,\n  'index.html': '<my-app></my-app>'\n};\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/playground/playground.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/playground/playground.component.html",
    "content": "<code-demo\n  [(ngModel)]=\"code\"\n  (ngModelChange)=\"handleUpdate($event)\"\n  bootstrap=\"main\"\n></code-demo>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/playground/playground.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PlaygroundComponent } from './playground.component';\nimport { PlaygroundModule } from './playground.module';\nimport { ActivatedRoute, Router } from '@angular/router';\n\ndescribe('PlaygroundComponent', () => {\n  let component: PlaygroundComponent;\n  let fixture: ComponentFixture<PlaygroundComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [PlaygroundModule],\n      providers: [\n        {\n          provide: ActivatedRoute,\n          useValue: { snapshot: { queryParams: { code: '' } } }\n        },\n        {\n          provide: Router,\n          useValue: {\n            navigate: jasmine.createSpy('navigate')\n          }\n        }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PlaygroundComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create!', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/playground/playground.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { angularSampleCode } from './angular-sample';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n  selector: 'codelab-playground',\n  templateUrl: './playground.component.html',\n  styleUrls: ['./playground.component.css']\n})\nexport class PlaygroundComponent {\n  code = angularSampleCode;\n\n  constructor(\n    private readonly activatedRoute: ActivatedRoute,\n    private readonly router: Router\n  ) {\n    const code = activatedRoute.snapshot.queryParams.code;\n    if (code) {\n      try {\n        this.code = { ...angularSampleCode, ...JSON.parse(atob(code)) };\n      } catch (e) {\n        console.log('can not parse code', code);\n      }\n    }\n  }\n\n  handleUpdate(code: any) {\n    const encoded = btoa(JSON.stringify(code));\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams: { code: encoded }\n    });\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/playground/playground.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlaygroundComponent } from './playground.component';\nimport { RouterModule } from '@angular/router';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  declarations: [PlaygroundComponent],\n  imports: [\n    RouterModule.forChild([{ path: '', component: PlaygroundComponent }]),\n    CodeDemoModule,\n    CommonModule,\n    FormsModule\n  ]\n})\nexport class PlaygroundModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/router.component.css",
    "content": ".router-preview {\n  display: flex;\n}\n\n.router-preview codelab-exercise-preview {\n  margin: 10px;\n}\n\n.router-preview ::ng-deep .url {\n  color: black !important;\n  background: #f8ff15 !important;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/router.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div i18n=\"@@UseRouterModule\" id=\"UseRouterModule\">\n    app.module.ts: Using RouterModule.forRoot provide an empty array to the\n    module\n  </div>\n  <div i18n=\"@@AddEmptyRoute\" id=\"AddEmptyRoute\">\n    app.module.ts: Add a route with an empty ('') path to display\n    SearchComponent\n  </div>\n  <div i18n=\"@@AddUploadRoute\" id=\"AddUploadRoute\">\n    app.module.ts: Add a route with path of \"upload\" to display UploadComponent\n  </div>\n  <div i18n=\"@@AddRouterOutlet\" id=\"AddRouterOutlet\">\n    app.html: Add router-outlet\n  </div>\n  <div i18n=\"@@AddSearchMenu\" id=\"AddSearchMenu\">\n    app.html: Add a menu item with a text Search pointing to \"/\"\n  </div>\n  <div i18n=\"@@AddUploadMenu\" id=\"AddUploadMenu\">\n    app.html: Add a menu item with a text Upload pointing to \"/upload\"\n  </div>\n</div>\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      i18n-title\n      i18n-description\n      title=\"Routing\"\n      description=\"Learn how to add routing to your app\"\n    ></codelab-title-slide>\n  </div>\n\n  <!--  Slide 2-->\n  <div *slide id=\"router-intro\" milestone=\"Router\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n    <h2 i18n>\n      Router is used to give <b>URLs</b> to different parts of your app.\n    </h2>\n    <div class=\"router-preview\">\n      <preview-browser-window\n        column-5\n        url=\"http://localhost:4200/kittens\"\n        style=\"height: 40vh\"\n      >\n        <h1 i18n>Kittens</h1>\n      </preview-browser-window>\n      <preview-browser-window\n        column-5\n        url=\"http://localhost:4200/puppies\"\n        style=\"height: 40vh\"\n      >\n        <h1 i18n>Puppies</h1>\n      </preview-browser-window>\n    </div>\n  </div>\n  <div *slide id=\"router-intro2\" milestone=\"Router\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n    <h2 i18n>It takes 3 steps to set up routing in Angular:</h2>\n    <ol>\n      <li i18n>\n        Configure the mapping and specify which component to display for which\n        URL\n      </li>\n      <li i18n>Create the menu with navigation links</li>\n      <li i18n>Find a place to display selected component</li>\n    </ol>\n  </div>\n\n  <div *slide id=\"router-config\" milestone=\"Router\">\n    <codelab-breadcrumb i18n>Configuration</codelab-breadcrumb>\n    <h2 i18n>\n      Routes are configured by defining an array of mapping between URL path and\n      a component\n    </h2>\n    <code-demo\n      url=\"/assets/runner\"\n      [(ngModel)]=\"code.files\"\n      [files]=\"code.config.files\"\n      [highlights]=\"code.config.highlights\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"router-config-pass-to-module\" milestone=\"Router\">\n    <codelab-breadcrumb i18n>Configuration</codelab-breadcrumb>\n    <h2 i18n>Then we have to pass the config to our module.</h2>\n    <code-demo\n      url=\"/assets/runner\"\n      [(ngModel)]=\"code.files\"\n      [files]=\"code.configPass.files\"\n      [highlights]=\"code.configPass.highlights\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      Note that we're using <b>RouterModule.forRoot</b> which creates an Angular\n      Module out of our configuration.\n    </div>\n  </div>\n\n  <div *slide id=\"router-outlet\" milestone=\"Router\">\n    <codelab-breadcrumb i18n>router-outlet</codelab-breadcrumb>\n    <h2 i18n>\n      Now we have to find a place where the router would display selected\n      component.\n    </h2>\n    <h2 i18n>It can be marked by placing <b>router-outlet</b> tag</h2>\n\n    <code-demo\n      url=\"/assets/runner\"\n      [(ngModel)]=\"code.files\"\n      [files]=\"code.routerOutlet.files\"\n      [highlights]=\"code.routerOutlet.highlights\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"menu\" milestone=\"Router\">\n    <codelab-breadcrumb i18n>Menu</codelab-breadcrumb>\n    <h2 i18n>The last part is creating the menu.</h2>\n    <h2 i18n>Use <b>routerLink</b> directive to provide the URL</h2>\n\n    <code-demo\n      url=\"/assets/runner\"\n      [(ngModel)]=\"code.files\"\n      [files]=\"code.menu.files\"\n      [highlights]=\"code.menu.highlights\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"exercise-pre\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide there is an exercise. We're going to add 2 routes:\n      <b>Search</b> and <b>Upload</b>, and a menu for switching between them.\n    </h2>\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercise\"\n      [url]=\"'/assets/runner/'\"\n    ></codelab-exercise-preview>\n    <div class=\"info\" i18n>\n      Note: We have already created empty Upload component and SearchComponent\n      containing search logic.\n    </div>\n  </div>\n\n  <div *slide id=\"exercise\" no-padding>\n    <codelab-exercise\n      milestone=\"Router\"\n      [translations]=\"t\"\n      url=\"/assets/runner\"\n      [exercise]=\"exercise\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n\n          >End of The Routing Milestone\n        </codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body>\n        <h2 i18n>Well done! This is the end of the milestone!</h2>\n        <h2 i18n>\n          Check out\n          <a href=\"https://angular.io/guide/router\">Angular Router Guide</a> for\n          more fun and advanced techniques.\n        </h2>\n      </div>\n      <div class=\"footer\" footer>\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../material/0\" i18n>\n            Learn how to create beautiful UIs with Angular Material\n          </a>\n        </h2>\n        <feedback-rating lesson=\"Router\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/router.component.ts",
    "content": "import { CodelabFile } from '../../../shared/helpers/codelabFile';\nimport { AfterViewInit, Component, ViewChild } from '@angular/core';\nimport {\n  ExerciseConfigTemplate,\n  Ng2TsExercises\n} from '../../../../../../../ng2ts/ng2ts';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\n\ndeclare const require;\n\ninterface FileHighlights {\n  appModule?: RegExp | RegExp[];\n  appHtml?: RegExp | RegExp[];\n}\n\n@Component({\n  selector: 'codelab-slides-router',\n  templateUrl: './router.component.html',\n  styleUrls: ['./router.component.css']\n})\nexport class RouterComponent implements AfterViewInit {\n  @ViewChild('translations', { static: false }) translations;\n  private t: Record<string, string>;\n  exercise: ExerciseConfigTemplate;\n\n  code = {\n    files: {\n      'app.module.ts': require('!!raw-loader!./samples/simple-router/app.module.ts'),\n      'app.component.html': require('!!raw-loader!./samples/simple-router/app.component.html'),\n      'app.component.ts': require('!!raw-loader!./samples/simple-router/app.component.ts'),\n      'components/kitten.ts': require('!!raw-loader!./samples/simple-router/components/kitten.ts'),\n      'components/puppy.ts': require('!!raw-loader!./samples/simple-router/components/puppy.ts'),\n      'bootstrap.ts': require('!!raw-loader!./samples/simple-router/main.ts'),\n      'index.html': require('!!raw-loader!./samples/simple-router/index.html'),\n      'components/.html': require('!!raw-loader!./samples/simple-router/index.html')\n    },\n    config: {\n      files: ['app.module.ts'],\n      highlights: { 'app.module.ts': /const routes[\\s\\S]*?];[\\s\\S]/ }\n    },\n    configPass: {\n      files: ['app.module.ts'],\n      highlights: { 'app.module.ts': /RouterModule.forRoot\\(routes\\)/ }\n    },\n    routerOutlet: {\n      files: ['app.component.html'],\n      highlights: { 'app.component.html': /<router-outlet><\\/router-outlet>/ }\n    },\n    menu: {\n      files: ['app.component.html'],\n      highlights: { 'app.component.html': /<a[\\s\\S]*\\/a>/ }\n    }\n  };\n\n  constructor(private exercises: Ng2TsExercises) {\n    this.exercise = exercises.getExercises(5, 0);\n  }\n\n  ngAfterViewInit() {\n    this.t = extractMessages(this.translations);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/router.module.ts",
    "content": "import { RouterComponent } from './router.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { Ng2TsExercises } from '../../../../../../../ng2ts/ng2ts';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild([...SlidesRoutes.get(RouterComponent)]);\n\n@NgModule({\n  imports: [\n    routes,\n    FeedbackModule,\n    CommonModule,\n    BrowserWindowModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule,\n    CodeDemoModule\n  ],\n  declarations: [RouterComponent],\n  providers: [Ng2TsExercises],\n  exports: [RouterComponent]\n})\nexport class RouterCodelabModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/app.component.html",
    "content": "<h1>Puppies And Kittens</h1>\n<a routerLink=\"/\">Puppies</a> | <a routerLink=\"/kittens\">Kittens</a>\n<router-outlet></router-outlet>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line\n  selector: 'my-app',\n  templateUrl: './app.component.html'\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { RouterModule, Routes } from '@angular/router';\nimport { PuppyComponent } from './components/puppy';\nimport { KittenComponent } from './components/kitten';\nimport { BrowserModule } from '@angular/platform-browser';\n\nconst routes: Routes = [\n  { path: '', component: PuppyComponent },\n  { path: 'kittens', component: KittenComponent }\n];\n\n@NgModule({\n  declarations: [AppComponent, PuppyComponent, KittenComponent],\n  imports: [BrowserModule, RouterModule.forRoot(routes)],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/code.ts",
    "content": "// I'm ignored\nexport const hi = 'hi';\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/components/kitten.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-i-am-not-very-important',\n  template: '<h1>Kittens</h1>'\n})\nexport class KittenComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/components/puppy.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-i-will-be-ignored',\n  template: '<h1>Puppies!</h1>'\n})\nexport class PuppyComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/index.html",
    "content": "<base href=\"/assets/runner/\" />\n<my-app></my-app>\n<div class=\"error\"></div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/router/samples/simple-router/main.ts",
    "content": "import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\nimport { ResourceLoader } from '@angular/compiler';\nimport * as code from './code';\n\nclass MyResourceLoader extends ResourceLoader {\n  get(url: string): Promise<string> {\n    const templateId = Object.keys(code).find(key =>\n      key.includes(url.replace(/[\\/\\.-]/gi, '_'))\n    );\n    const template = code[templateId];\n    if (!template) {\n      console.log(template);\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n    return Promise.resolve(template);\n  }\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, {\n  providers: [\n    {\n      provide: ResourceLoader,\n      useFactory: () => new MyResourceLoader(),\n      deps: []\n    }\n  ]\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/bsod.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Press+Start+2p);\n\n.container {\n  display: flex;\n  font-family: 'Press Start 2P', cursive;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n}\n\n.msg {\n  padding-left: 100px;\n  padding-right: 100px;\n}\n\np {\n  text-align: left;\n}\n\n.continue {\n  text-align: center;\n}\n\n.highlight {\n  color: rgb(1, 2, 172);\n  background-color: rgb(172, 173, 168);\n  padding: 3px;\n  text-align: center;\n  width: 150px;\n}\n\n.blink {\n  animation: blink 1s steps(2, start) infinite;\n}\n\n@keyframes blink {\n  to {\n    visibility: hidden;\n  }\n}\n\n#bsod,\n#bsod-2,\n#bsod-beautiful {\n  color: white;\n  background: #084fdd;\n  display: inline-block;\n  height: 100vh;\n}\n\n#bsod-2 .alfred-upset {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 263px;\n  height: 420px;\n  background: url(./pics/Alfred_Sisley_photo_full.jpg);\n}\n\n#bsod-beautiful {\n  background: url(./pics/bebbf81f5402fbbec1cff6eb687aa90a.jpg) no-repeat center\n    center fixed;\n  background-size: 100%;\n  color: black;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/mat-tab-nav-bar/alert.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: '' + 'app-alert',\n  template: `\n    Hi ALert\n  `\n})\nexport class AlertComponent {\n  constructor() {\n    alert('Hello');\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/mat-tab-nav-bar/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  template: `\n    <nav mat-tab-nav-bar>\n      <a mat-tab-link *ngFor=\"let tab of tabs\" [routerLink]=\"tab.link\">\n        {{ tab.label }}\n      </a>\n    </nav>\n\n    <router-outlet></router-outlet>\n  `\n})\nexport class AppComponent {\n  tabs = [\n    {\n      link: '',\n      label: 'Tab 1'\n    },\n    {\n      link: 'danger',\n      label: 'Danger'\n    }\n  ];\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/mat-tab-nav-bar/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { AlertComponent } from './alert.component';\nimport { TabComponent } from './tab.component';\nimport { RouterModule } from '@angular/router';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nconst routes = [\n  { path: '', component: TabComponent },\n  { path: 'danger', component: AlertComponent }\n];\n\n@NgModule({\n  imports: [BrowserModule, MatTabsModule, RouterModule.forRoot(routes)],\n  declarations: [AppComponent, AlertComponent, TabComponent],\n  bootstrap: [AppComponent],\n  providers: [{ provide: APP_BASE_HREF, useValue: '/assets/runner/' }]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/mat-tab-nav-bar/tab.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  template: `\n    <div><img src=\"../images/sisley/img4.jpeg\" alt=\"\" /></div>\n  `\n})\nexport class TabComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/alert.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: '' + 'app-alert',\n  template: `\n    This is AlertComponent!\n  `\n})\nexport class AlertComponent {\n  constructor() {\n    alert('Hello');\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.html'\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/app.html",
    "content": "<h1>Alfred Sisley</h1>\n\n<mat-tab-group>\n  <mat-tab label=\"Art works\">\n    <div><img src=\"../images/sisley/img1.jpeg\" alt=\"\" /></div>\n  </mat-tab>\n  <mat-tab label=\"TBD\"> <div>TBD</div> </mat-tab>\n</mat-tab-group>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { AlertComponent } from './alert.component';\nimport { BreakMyComputerComponent } from './break-my-computer.component';\nimport { TaetLedComponent } from './taet-led.component';\n\n@NgModule({\n  imports: [BrowserModule, MatTabsModule, NoopAnimationsModule],\n  declarations: [\n    AppComponent,\n    AlertComponent,\n    BreakMyComputerComponent,\n    TaetLedComponent\n  ],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/app.solved.html",
    "content": "<h1>Alfred Sisley</h1>\n\n<mat-tab-group #tabs>\n  <mat-tab label=\"Art works\">\n    <div *ngIf=\"tabs.selectedIndex===0\">\n      <img src=\"../images/sisley/img1.jpeg\" alt=\"\" />\n    </div>\n  </mat-tab>\n  <mat-tab label=\"TBD\">\n    <div *ngIf=\"tabs.selectedIndex===1\"><app-alert></app-alert></div>\n  </mat-tab>\n</mat-tab-group>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/break-my-computer.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'break-my-computer',\n  template: `\n    I'll break your computer\n  `\n})\nexport class BreakMyComputerComponent {\n  constructor() {\n    alert('Congratulations! Your computer has been broken successfully!');\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/style.css",
    "content": "body,\nhtml {\n  width: 100%;\n  height: 100%;\n}\n\nbody,\nh1,\np,\ndiv {\n  font-family: 'Helvetica Neue', sans-serif;\n  font-weight: 300;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs/taet-led.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'play-terrible-russian-pop-music',\n  template: `\n    <iframe\n      width=\"560\"\n      height=\"315\"\n      src=\"https://www.youtube.com/embed/i9AHJkHqkpw?t=1m20s&autoplay=1\"\n      frameborder=\"0\"\n      allowfullscreen\n    ></iframe>\n  `\n})\nexport class TaetLedComponent {\n  constructor() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/alert.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: '' + 'app-alert',\n  template: `\n    Hi ALert\n  `\n})\nexport class AlertComponent {\n  constructor() {\n    alert('Hello');\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n/* tslint:disable */\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.html'\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/app.html",
    "content": "<h1>Alfred Sisley</h1>\n\n<mat-tab-group>\n  <mat-tab label=\"Artworks\">\n    <div><img src=\"../images/sisley/img2.jpeg\" alt=\"\" /></div>\n  </mat-tab>\n  <mat-tab label=\"Tab 2\"> <div>Content 2</div> </mat-tab>\n</mat-tab-group>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { AlertComponent } from './alert.component';\nimport { HideMeDirective } from './hideme.directive';\n\n@NgModule({\n  imports: [BrowserModule, MatTabsModule, NoopAnimationsModule],\n  declarations: [AppComponent, AlertComponent, HideMeDirective],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/app.solved.html",
    "content": "<mat-tab-group>\n  <mat-tab label=\"Tab 1\">\n    <div *matHideMe><img src=\"../images/sisley/img3.jpeg\" alt=\"\" /></div>\n  </mat-tab>\n  <mat-tab label=\"Tab 2\">\n    <div *matHideMe><app-alert></app-alert></div>\n  </mat-tab>\n</mat-tab-group>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/hideme.directive.solved.ts",
    "content": "import {\n  AfterViewInit,\n  Directive,\n  TemplateRef,\n  ViewContainerRef\n} from '@angular/core';\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\n\n/* tslint:disable */\n@Directive({ selector: '[matHideMe]' })\nexport class HideMeDirective implements AfterViewInit {\n  constructor(\n    private parentTab: MatTab,\n    private tabs: MatTabGroup,\n    private viewContainer: ViewContainerRef,\n    private templateRef: TemplateRef<any>\n  ) {\n    (tabs as any).selectChange.subscribe(({ tab }: { tab: MatTab }) => {\n      this.toggleContentDisplay(tab === parentTab);\n    });\n  }\n\n  toggleContentDisplay(isDisplayed: boolean) {\n    if (isDisplayed) {\n      this.viewContainer.createEmbeddedView(this.templateRef);\n    } else {\n      this.viewContainer.clear();\n    }\n  }\n\n  ngAfterViewInit() {\n    this.toggleContentDisplay(\n      this.parentTab.position === this.tabs.selectedIndex\n    );\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/hideme.directive.ts",
    "content": "import { Directive } from '@angular/core';\n\n/* tslint:disable */\n@Directive({ selector: '[matHideMe]' })\nexport class HideMeDirective {\n  constructor() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/material-tabs-structural-directive/ignored.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { HideMeDirective } from './hideme.directive.solved';\n\n// This is needed because angular cli wants the directive to be in a module\n// https://github.com/angular/angular/issues/13590\n@NgModule({\n  declarations: [HideMeDirective]\n})\nexport class IgnoredModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/micro-syntax/code.ts",
    "content": "// Needed for type checking,\nexport const app_html = '';\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/micro-syntax/ms.spec.ts",
    "content": "import { parseTemplate } from './ms';\n\ndescribe('micro-syntax', () => {\n  it('parses ngIF', () => {\n    expect(parseTemplate('<div *ngIf=\"hero\">{{hero.name}}</div>'))\n      .toBe(`<ng-template [ngIf]=\"hero\">\n  <div>{{hero.name}}</div>\n</ng-template>`);\n  });\n\n  it('parses ngIf multi line', () => {\n    expect(\n      parseTemplate(`<div *ngIf=\"hero\">\n  {{hero.name}}\n  </div>`)\n    ).toBe(`<ng-template [ngIf]=\"hero\">\n  <div>\n  {{hero.name}}\n  </div>\n</ng-template>`);\n  });\n\n  xit('parses ngFor', () => {\n    expect(\n      parseTemplate(`<div *ngFor=\"let x of list\">\n  {{hero.name}}\n  </div>`)\n    ).toBe(`<ng-template [ngIf]=\"hero\">\n  <div>\n  {{hero.name}}\n  </div>\n</ng-template>`);\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/micro-syntax/ms.ts",
    "content": "import * as code from './code';\n\nexport function parseTemplate(template: string) {\n  const x = template.match(\n    /<([^ ]+)\\s+\\*(\\w+)\\s*=\"([^\"]+)\"\\s*>([\\s\\S]*)<\\/\\w+>/\n  );\n  if (x) {\n    const [_, tag, directive, value, contents] = x;\n    return `<ng-template [${directive}]=\"${value}\">\n  <${tag}>${contents}</${tag}>\n</ng-template>`;\n  }\n}\n\nconst pre = document.createElement('pre');\ndocument.body.appendChild(pre);\npre.innerText = parseTemplate(code.app_html);\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/structural-directives/microsyntax.html",
    "content": "*:prefix=\"( :let | :expression ) (';' | ',')? ( :let | :as | :keyExp )*\"\n:prefix: HTML attribute key. :key: HTML attribute key. :local: local variable\nname used in the template. :export: value exported by the directive under a\ngiven name. :experession: standard Angular expression :keyExp = :key \":\"?\n:expression (\"as\" :local)? \";\"? :let = \"let\" :local \"=\" :export \";\"? :as =\n:export \"as\" :local \";\"?\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/structural-directives/ng-for-after.html",
    "content": "<ng-template\n  ngFor\n  let-hero\n  [ngForOf]=\"heroes\"\n  let-i=\"index\"\n  let-odd=\"odd\"\n  [ngForTrackBy]=\"trackById\"\n>\n  <div [class.odd]=\"odd\">({{i}}) {{hero.name}}</div>\n</ng-template>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/structural-directives/ng-for-before.html",
    "content": "<div\n  *ngFor=\"let hero of heroes; let i=index; let odd=odd; trackBy: trackById\"\n  [class.odd]=\"odd\"\n>\n  ({{i}}) {{hero.name}}\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/structural-directives/ng-if-after.html",
    "content": "<ng-template [ngIf]=\"hero\"> <div>{{hero.name}}</div> </ng-template>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/samples/structural-directives/ng-if-before.html",
    "content": "<div *ngIf=\"hero\">{{hero.name}}</div>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/structural-directives.component.css",
    "content": "#intro .bg {\n  background: #fff;\n  opacity: 0.5;\n  padding: 2vw 5vw;\n  margin: 5vw 0;\n}\n\n#intro h1 {\n  font-size: 10vw;\n}\n\n#intro h2 {\n  font-size: 6vw;\n}\n\n:host /deep/ .slide {\n  background: transparent;\n}\n\n#intro {\n  background: url(./pics/bridge-at-villeneuve-la-garenne-1872.jpg) no-repeat;\n  display: inline-block;\n  height: 100vh;\n}\n\n#we-need-tabs {\n  background: url(./pics/alfred-sisley-9485226-1-402.jpg) no-repeat black;\n  display: inline-block;\n  height: 100vh;\n}\n\n#we-need-tabs h1 {\n  color: #ffffee;\n  font-size: 8vw;\n  background: #000;\n  opacity: 0.5;\n}\n\n:host /deep/ .runner,\n:host /deep/ .runner iframe {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n/* Specificity */\n:host /deep/ .side.side.side {\n  display: block;\n}\n\n.font-size:hover {\n  opacity: 1;\n}\n\n.font-size {\n  display: block;\n  opacity: 0.1;\n  background-color: #eeeeee;\n  border-radius: 50%;\n  font-size: 30px;\n  width: 30px;\n  height: 30px;\n  cursor: pointer;\n  text-align: center;\n}\n\n.twitter {\n  position: absolute;\n  left: 20px;\n  bottom: 20px;\n  color: #400;\n  height: 50px;\n  z-index: 100;\n  font-size: 50px;\n  font-family: Monaco, 'Lucida Console', monospace;\n  opacity: 1;\n  width: auto;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/structural-directives.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <div class=\"twitter\">@kirjs</div>\n\n  <div class=\"btn-bar\">\n    <div class=\"increase-font-size font-size\" (click)=\"updateFontSize(2)\">\n      +\n    </div>\n    <div class=\"decrease-font-size font-size\" (click)=\"updateFontSize(-2)\">\n      -\n    </div>\n  </div>\n\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <div *slide id=\"intro\" no-padding>\n    <div class=\"bg\">\n      <h1>Structural directives</h1>\n      <h2>By @kirjs</h2>\n    </div>\n  </div>\n  <div *slide id=\"we-need-tabs\" no-padding><h1>We need tabs</h1></div>\n\n  <div *slide id=\"intro2\" no-padding>\n    <codelab-exercise-playground\n      files=\"app.component.ts\"\n      [exercise]=\"code.materialTabs\"\n    ></codelab-exercise-playground>\n    <!--<slides-exercise [files]=\"code.materialTabs\">-->\n    <!--<div class=\"description\"></div>-->\n    <!--<slides-new-editors class=\"editor\" [fontSize]=\"fontSize\">-->\n    <!--</slides-new-editors>-->\n    <!--<slides-angular-preview-runner class=\"preview\"></slides-angular-preview-runner>-->\n    <!--</slides-exercise>-->\n  </div>\n\n  <div *slide id=\"bsod\" no-padding>\n    <div class=\"container\">\n      <div class=\"msg\" align=\"center\">\n        <p class=\"highlight\">Windows</p>\n        <p>\n          A fatal exception 0E has occured at 028:C00068F8 in VxD VMM(01)\n          000059F8. The current application will be terminated.\n        </p>\n        <p>* Press any key to terminate the application.</p>\n        <p>\n          * Press CTRL+ALT+DEL to restart your computer. You will lose any\n          unsaved information in all aplications.\n        </p>\n        <br />\n        <p class=\"continue\">\n          Press any key to continue <span class=\"blink\">_</span>\n        </p>\n      </div>\n    </div>\n  </div>\n  <div *slide id=\"bsod-2\" no-padding>\n    <div class=\"alfred-upset\"></div>\n    <div class=\"container\">\n      <div class=\"msg\" align=\"center\">\n        <p class=\"highlight\">Windows</p>\n        <p>\n          A fatal exception 0E has occured at 028:C00068F8 in VxD VMM(01)\n          000059F8. The current application will be terminated.\n        </p>\n        <p>* Press any key to terminate the application.</p>\n        <p>\n          * Press CTRL+ALT+DEL to restart your computer. You will lose any\n          unsaved information in all aplications.\n        </p>\n        <br />\n        <p class=\"continue\">\n          Press any key to continue <span class=\"blink\">_</span>\n        </p>\n      </div>\n    </div>\n  </div>\n  <div *slide id=\"bsod-beautiful\" no-padding>\n    <div class=\"container\">\n      <div class=\"msg\" align=\"center\">\n        <p class=\"highlight\">Windows</p>\n        <p>\n          A fatal exception 0E has occured at 028:C00068F8 in VxD VMM(01)\n          000059F8. The current application will be terminated.\n        </p>\n        <p>* Press any key to terminate the application.</p>\n        <p>\n          * Press CTRL+ALT+DEL to restart your computer. You will lose any\n          unsaved information in all aplications.\n        </p>\n        <br />\n        <p class=\"continue\">\n          Press any key to continue <span class=\"blink\">_</span>\n        </p>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"play-with-tabs\" no-padding>\n    <!--<slides-exercise [files]=\"code.materialTabs\">-->\n    <!--<div class=\"description\"></div>-->\n    <!--<slides-new-editors [fontSize]=\"fontSize\" class=\"editor\">-->\n    <!--</slides-new-editors>-->\n    <!--<slides-angular-preview-runner class=\"preview\"></slides-angular-preview-runner>-->\n    <!--</slides-exercise>-->\n  </div>\n\n  <div *slide id=\"structural-directives-ng-if\">\n    <h1>Structural directives ngIf</h1>\n    <div>\n      <code-demo-file-path path=\"before\"></code-demo-file-path>\n      <code-demo-editor\n        [fontSize]=\"fontSize\"\n        [minLines]=\"3\"\n        language=\"html\"\n        [(ngModel)]=\"code.structuralDirectives.ngIfBefore\"\n      ></code-demo-editor>\n      <br /><br />\n      <h2>Desugars into</h2>\n      <br /><br />\n      <code-demo-file-path path=\"after\"></code-demo-file-path>\n      <code-demo-editor\n        [fontSize]=\"fontSize\"\n        [minLines]=\"3\"\n        language=\"html\"\n        [(ngModel)]=\"code.structuralDirectives.ngIfAfter\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"structural-directives-ng-for\">\n    <h1>Structural directives ngFor</h1>\n    <div>\n      <code-demo-file-path path=\"before\"></code-demo-file-path>\n      <code-demo-editor\n        [fontSize]=\"fontSize\"\n        [minLines]=\"3\"\n        language=\"html\"\n        [(ngModel)]=\"code.structuralDirectives.ngForBefore\"\n      ></code-demo-editor>\n      <br /><br />\n      <h2>Desugars into</h2>\n      <br /><br />\n      <code-demo-file-path path=\"after\"></code-demo-file-path>\n      <code-demo-editor\n        [fontSize]=\"fontSize\"\n        [minLines]=\"3\"\n        language=\"html\"\n        [(ngModel)]=\"code.structuralDirectives.ngForAfter\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"structural-directives-microsyntax\">\n    <h1>Angular MicroSyntax</h1>\n    <div>\n      <code-demo-file-path path=\"before\"></code-demo-file-path>\n      <code-demo-editor\n        language=\"text\"\n        readonly=\"false\"\n        [fontSize]=\"fontSize\"\n        [minLines]=\"3\"\n        [(ngModel)]=\"code.structuralDirectives.microSyntax\"\n      ></code-demo-editor>\n    </div>\n    <a\n      href=\"https://gist.github.com/mhevery/d3530294cff2e4a1b3fe15ff75d08855#file-microsyntax-md\"\n      >More details</a\n    >\n  </div>\n\n  <div *slide id=\"play-with-tabs-structural-directive\" no-padding>\n    <!--<slides-exercise [files]=\"code.materialTabsStructuralDirective\">-->\n    <!--<div class=\"description\"></div>-->\n    <!--<slides-new-editors class=\"editor\" [fontSize]=\"fontSize\">-->\n    <!--</slides-new-editors>-->\n    <!--<slides-angular-preview-runner class=\"preview\"></slides-angular-preview-runner>-->\n    <!--</slides-exercise>-->\n  </div>\n\n  <div *slide id=\"mat-tab-nav-bar\" no-padding>\n    <!--<slides-exercise [files]=\"code.mdTabNavBar\">-->\n    <!--<slides-new-editors class=\"editor\" [fontSize]=\"fontSize\">-->\n    <!--</slides-new-editors>-->\n    <!--<slides-angular-preview-runner class=\"preview\"></slides-angular-preview-runner>-->\n    <!--</slides-exercise>-->\n  </div>\n\n  <div *slide id=\"micro-syntax\" no-padding>\n    <h1>Russian pop music</h1>\n    <h2>@kirjs</h2>\n    <iframe\n      width=\"560\"\n      height=\"315\"\n      src=\"https://www.youtube.com/embed/i9AHJkHqkpw\"\n      frameborder=\"0\"\n      allowfullscreen\n    ></iframe>\n    <iframe\n      width=\"560\"\n      height=\"315\"\n      src=\"https://www.youtube.com/embed/et281UHNoOU\"\n      frameborder=\"0\"\n      allowfullscreen\n    ></iframe>\n    <iframe\n      width=\"560\"\n      height=\"315\"\n      src=\"https://www.youtube.com/embed/n3Go8ub9a1k\"\n      frameborder=\"0\"\n      allowfullscreen\n    ></iframe>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/structural-directives.component.ts",
    "content": "import { Component } from '@angular/core';\n\nimport {\n  bootstrap,\n  builder,\n  exercise,\n  html,\n  stylesheet\n} from '../../../shared/helpers/helpers';\n\ndeclare const require;\n\n@Component({\n  selector: 'codelab-slides-structural-directives',\n  templateUrl: './structural-directives.component.html',\n  styleUrls: ['./structural-directives.component.css', './bsod.css']\n})\nexport class StructuralDirectivesComponent {\n  fontSize = 18;\n\n  code = {\n    materialTabs: {\n      files: [\n        html(\n          'app',\n          require('!!raw-loader!./samples/material-tabs/app.html'),\n          require('!!raw-loader!./samples/material-tabs/app.solved.html')\n        ),\n        exercise(\n          'app.component',\n          require('!!raw-loader!./samples/material-tabs/app.component.ts')\n        ),\n        exercise(\n          'alert.component',\n          require('!!raw-loader!./samples/material-tabs/alert.component.ts')\n        ),\n        exercise(\n          'taet-led.component',\n          require('!!raw-loader!./samples/material-tabs/taet-led.component.ts')\n        ),\n        exercise(\n          'app.module',\n          require('!!raw-loader!./samples/material-tabs/app.module.ts')\n        ),\n        exercise(\n          'break-my-computer.component',\n          require('!!raw-loader!./samples/material-tabs/break-my-computer.component.ts')\n        ),\n        stylesheet(require('!!raw-loader!./samples/material-tabs/style.css')),\n        bootstrap('main', builder.bootstrap())\n      ]\n    },\n    materialTabsStructuralDirective: [\n      html(\n        'app',\n        require('!!raw-loader!./samples/material-tabs-structural-directive/app.html'),\n        require('!!raw-loader!./samples/material-tabs-structural-directive/app.solved.html')\n      ),\n      exercise(\n        'app.component',\n        require('!!raw-loader!./samples/material-tabs-structural-directive/app.component.ts')\n      ),\n      exercise(\n        'hideme.directive',\n        require('!!raw-loader!./samples/material-tabs-structural-directive/hideme.directive.ts'),\n        require('!!raw-loader!./samples/material-tabs-structural-directive/hideme.directive.solved.ts')\n      ),\n      exercise(\n        'alert.component',\n        require('!!raw-loader!./samples/material-tabs-structural-directive/alert.component.ts')\n      ),\n      exercise(\n        'app.module',\n        require('!!raw-loader!./samples/material-tabs-structural-directive/app.module.ts')\n      ),\n      stylesheet(require('!!raw-loader!./samples/material-tabs/style.css')),\n      bootstrap('main', builder.bootstrap())\n    ],\n    microSyntax: [\n      html('app', `<div *ngFor=\"let x of 122\"></div>`),\n      bootstrap('main', require('!!raw-loader!./samples/micro-syntax/ms.ts'))\n    ],\n\n    mdTabNavBar: [\n      exercise(\n        'app.component',\n        require('!!raw-loader!./samples/mat-tab-nav-bar/app.component.ts')\n      ),\n      exercise(\n        'alert.component',\n        require('!!raw-loader!./samples/mat-tab-nav-bar/alert.component.ts')\n      ),\n      exercise(\n        'tab.component',\n        require('!!raw-loader!./samples/mat-tab-nav-bar/tab.component.ts')\n      ),\n      stylesheet(require('!!raw-loader!./samples/material-tabs/style.css')),\n      exercise(\n        'app.module',\n        require('!!raw-loader!./samples/mat-tab-nav-bar/app.module.ts')\n      ),\n      bootstrap('main', builder.bootstrap())\n    ],\n\n    structuralDirectives: {\n      ngIfBefore: require('!!raw-loader!./samples/structural-directives/ng-if-before.html'),\n      ngIfAfter: require('!!raw-loader!./samples/structural-directives/ng-if-after.html'),\n      ngForBefore: require('!!raw-loader!./samples/structural-directives/ng-for-before.html'),\n      ngForAfter: require('!!raw-loader!./samples/structural-directives/ng-for-after.html'),\n      microSyntax: require('!!raw-loader!./samples/structural-directives/microsyntax.html')\n    }\n  };\n\n  constructor() {}\n\n  updateFontSize(diff) {\n    this.fontSize += diff;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/structural-directives/structural-directives.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { StructuralDirectivesComponent } from './structural-directives.component';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild(\n  SlidesRoutes.get(StructuralDirectivesComponent)\n);\n\n@NgModule({\n  imports: [\n    routes,\n    CodeDemoModule,\n    BrowserWindowModule,\n    FeedbackModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [StructuralDirectivesComponent],\n  exports: [StructuralDirectivesComponent]\n})\nexport class StructuralDirectivesModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/data-binding-extra/app.component.html",
    "content": "<h1>Here we bind value of the input to the name property</h1>\n<input [value]=\"name\" />\n\n<h1>A shortcut applying (or not) class name based on the value of isSpecial</h1>\n<div [class.special]=\"isSpecial\">\n  Wow, I'm special!\n</div>\n\n<h1>Shortcut for binding styles</h1>\n<button [style.color]=\"isSpecial ? 'green' : 'gray'\">\n  special button\n</button>\n\n<h1>It also works with custom components</h1>\n<number-praiser [number]=\"343\"></number-praiser>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/data-binding-extra/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.component.html'\n})\nexport class AppComponent {\n  readonly name = 'Camille Pissarro';\n  isSpecial = true;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/data-binding-extra/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BirthdayCardComponent } from './number-praiser';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent, BirthdayCardComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/data-binding-extra/index.html",
    "content": "<!DOCTYPE >\n<style>\n  .special {\n    background-color: #00c212;\n    color: white;\n    padding: 10px;\n  }\n\n  h2 {\n    font-family: 'Helvetica Neue', sans-serif;\n    font-size: 16px;\n    font-weight: 300;\n    background: #ddd;\n    border: 1px #444 solid;\n    padding: 20px;\n    border-radius: 4px;\n  }\n\n  h1 {\n    margin-top: 20px;\n    margin-bottom: 8px;\n    font-family: 'Helvetica Neue', sans-serif;\n    font-size: 18px;\n    font-weight: 300;\n    border-top: 1px #ddd solid;\n    padding-top: 20px;\n  }\n\n  h1:first-child {\n    border-top: 0;\n    padding-top: 0;\n  }\n</style>\n\n<body>\n  <my-app>\n    Loading...\n  </my-app>\n</body>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/data-binding-extra/number-praiser.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'number-praiser',\n  template: `\n    <h2 style=\"background: #fdf700\">\n      🎈 {{ number }} &nbsp; 🎈 What an amazing number!!! 🎖\n    </h2>\n  `\n})\nexport class BirthdayCardComponent {\n  @Input() number = 0;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/event-binding/app.component.html",
    "content": "<h2>Message: {{ message }}</h2>\n\n<button (click)=\"message = 'hello'\">Update version</button>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/event-binding/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.component.html'\n})\nexport class AppComponent {\n  message = 'no message';\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/event-binding/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\n// Useless app module to prevent angular from complaining\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/event-binding-shortcuts/app.component.html",
    "content": "<h2>Message: {{ message }}</h2>\n\n<input\n  #input\n  (keydown.control.enter)=\"message = input.value; input.value = ''\"\n/>\n\n<button (click)=\"message = input.value; input.value = ''\">\n  Update message\n</button>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/reference-binding/app.component.html",
    "content": "<h2>Message: {{ message }}</h2>\n\n<input #input />\n\n<button (click)=\"message = input.value; input.value = ''\">\n  Update message\n</button>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/reference-binding/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.component.html'\n})\nexport class AppComponent {\n  message = 'No message';\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/samples/reference-binding/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\n// Useless app module to prevent angular from complaining\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/templates.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/templates.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div i18n=\"@@thisIsValidHTML\" id=\"thisIsValidHTML\">\n    This is valid HTML syntax.\n  </div>\n  <div i18n=\"@@worksOnAttributeSyntax\" id=\"worksOnAttributeSyntax\">\n    It works on attribute syntax.\n  </div>\n  <div\n    i18n=\"@@allowsToConditionallyBindClass\"\n    id=\"allowsToConditionallyBindClass\"\n  >\n    It allows to conditionally bind a class\n  </div>\n  <div i18n=\"@@orStyleProps\" id=\"orStyleProps\">Or style properties</div>\n  <div i18n=\"@@worksWithCustomComponents\" id=\"worksWithCustomComponents\">\n    And works with custom components!\n  </div>\n  <div\n    i18n=\"@@whenUserClicksItCallsSaveUser\"\n    id=\"whenUserClicksItCallsSaveUser\"\n  >\n    When user clicks the button, it calls the \"saveUser\" function on the\n    component instance and passes the underlying event.\n  </div>\n  <div\n    i18n=\"@@youCanAlsoCreateEventsForCustomComponents\"\n    id=\"youCanAlsoCreateEventsForCustomComponents\"\n  >\n    You can also create events for custom components. Here we have a depleted\n    event, and it's going to call the \"soundAlarm\" function on the component\n    instance when it fires.\n  </div>\n  <div\n    i18n=\"@@thereAreShortcutEventBindings\"\n    id=\"thereAreShortcutEventBindings\"\n  >\n    There are also shortcut event bindings! The submit function on the component\n    instance will be called when the user presses control and enter (this is an\n    Angular feature).\n  </div>\n  <div i18n=\"@@userNameHasRefToInput\" id=\"userNameHasRefToInput\">\n    userName has a reference to the input element\n  </div>\n  <div i18n=\"@@tryChangingToTrue\" id=\"tryChangingToTrue\">\n    Try changing to true!\n  </div>\n  <div i18n=\"@@needToRepeatPuppiesHere\" id=\"needToRepeatPuppiesHere\">\n    Need to repeat puppies here\n  </div>\n  <div i18n=\"@@addVideosProperty\" id=\"addVideosProperty\">\n    app.component.ts: Add a 'videos' property, set the value as empty array.\n  </div>\n  <div i18n=\"@@assignFakeVideosToComponent\" id=\"assignFakeVideosToComponent\">\n    app.component.ts: Inside of the 'search' method assign FAKE_VIDEOS, to the\n    component 'videos' property.\n  </div>\n  <div i18n=\"@@addH1HeaderWithATitle\" id=\"addH1HeaderWithATitle\">\n    app.html: Add an H1 header, display the 'title' property of the AppComponent\n    inside\n  </div>\n\n  <div i18n=\"@@addSearchMethodOnComponent\" id=\"addSearchMethodOnComponent\">\n    app.component.ts: Add a 'search' method on the component, that takes a\n    'searchString' parameter.\n  </div>\n  <div\n    i18n=\"@@addClickHandlerToButtonCallSearch\"\n    id=\"addClickHandlerToButtonCallSearch\"\n  >\n    app.html: Add a click handler to the button, call 'search' method and pass\n    the input value (Actual search functionality will be implemented in the next\n    exercise)\n  </div>\n  <div i18n=\"@@addMessageNoVideos\" id=\"addMessageNoVideos\">\n    app.html: Add a message saying 'no videos' which is displayed only when the\n    videos array is empty\n  </div>\n\n  <div\n    i18n=\"@@bonusDisplayAllVideosByDefault\"\n    id=\"bonusDisplayAllVideosByDefault\"\n  >\n    #Bonus app.component.ts: Right now it takes pressing a search button to\n    display the videos. Instead display all videos by default.\n  </div>\n  <div\n    i18n=\"@@insideSearchMethodFilterFakeVideos\"\n    id=\"insideSearchMethodFilterFakeVideos\"\n  >\n    app.component.ts: Inside of the 'search' method filter FAKE_VIDEOS and only\n    return videos with the title containing searchString. (hint: use .includes\n    or .indexOf string methods)\n  </div>\n  <div i18n=\"@@alsoDisplayThumbnail\" id=\"alsoDisplayThumbnail\">\n    app.html: Also display a thumbnail\n  </div>\n  <div\n    i18n=\"@@IterateWithNgForAndDisplayTitle\"\n    id=\"IterateWithNgForAndDisplayTitle\"\n  >\n    app.html: Iterate over the videos using '*ngFor', and display a title for\n    each\n  </div>\n\n  <div i18n=\"@@addButtonWithtextSearch\" id=\"addButtonWithtextSearch\">\n    app.html: Add a button tag with a text 'search'\n  </div>\n  <div i18n=\"@@addInputWithPlaceholderVideo\" id=\"addInputWithPlaceholderVideo\">\n    app.html: Add an input tag with a 'placeholder' attribute set to 'video'\n  </div>\n</div>\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\" no-padding>\n    <codelab-title-slide\n      title=\"Templates\"\n      i18n-title=\"@@templates\"\n      description=\"Learn more about Angular templates!\"\n      i18n-description\n      prereqs=\"\"\n    ></codelab-title-slide>\n  </div>\n\n  <!--  COMPONENT -->\n  <div *slide id=\"component\" milestone=\"Templates\">\n    <codelab-breadcrumb i18n>Intro</codelab-breadcrumb>\n    <h2 i18n>\n      Angular has a very expressive template system, which takes HTML as a base,\n      and extends it with custom elements\n    </h2>\n    <codelab-exercise-playground\n      [highlights]=\"code.template.matches.template\"\n      [exercise]=\"code.template.intro\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <!--  INTERPOLATION-->\n  <div *slide id=\"interpolation\" milestone=\"Templates\">\n    <codelab-breadcrumb i18n>Interpolation</codelab-breadcrumb>\n    <h2 i18n>\n      Double curlies include the appropriate component property value\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.template.interpolation\"\n      [highlights]=\"code.template.matches.curlies\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" milestone=\"Templates\" style=\"margin-top: -8px;\" i18n>\n      Backticks <b>` `</b>, are magic quotes that allow multi-line strings and\n      text interpolation.\n    </div>\n  </div>\n\n  <!--INTERPOLATION-METHOD-->\n  <div *slide id=\"interpolation-method\" milestone=\"Templates\">\n    <codelab-breadcrumb i18n>Interpolation</codelab-breadcrumb>\n    <h2 i18n>\n      Simple expressions are also allowed, you can run a component method (like\n      fullName() below), or calculate <code>323213+34234</code>\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.template.interpolationMethod\"\n      [highlights]=\"code.template.matches.curliesFullName\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"exercise-pre\" milestone=\"Templates\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide you'll edit a component template to create a simple\n      header and search form. The result will look like this:\n    </h2>\n\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercises[0]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <div *slide id=\"exercise\" no-padding>\n    <codelab-exercise\n      milestone=\"Templates\"\n      [translations]=\"t\"\n      [exercise]=\"exercises[0]\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <!--  PRE DATA BINDING-->\n  <div *slide id=\"data-binding-pre\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Properties</codelab-breadcrumb>\n    <h2 i18n>\n      String interpolation <b>{{ curlies }}</b> can also be used to pass a value\n      to a child element's attribute\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.template.dataBindingPre\"\n      [highlights]=\"code.template.matches.curliesAttribute\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <!--  DATA BINDING  -->\n  <div *slide id=\"data-binding\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Property Binding</codelab-breadcrumb>\n    <h2 i18n>\n      Better option is to use property binding <b>[attribute] = property</b>\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.template.dataBinding\"\n      [highlights]=\"code.template.matches.squares\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" style=\"margin-top: -10px; z-index: 2;\" i18n>\n      You can use arbitrary expressions in the binding.\n    </div>\n  </div>\n\n  <!--  DATA BINDING EXTRAS-->\n  <div *slide id=\"data-binding-extras\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Data binding extras</codelab-breadcrumb>\n    <h2 i18n>\n      Angular supports more advanced property bindings than just attribute name\n    </h2>\n    <code-demo\n      [files]=\"code.template.dataBindingExtra.files\"\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.template.dataBindingExtra.code\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"event-binding\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Event binding: (event)</codelab-breadcrumb>\n    <h2 i18n>\n      For handling user actions we can use event bindings. To do that we wrap\n      the event name in parentheses, and pass an expression performing required\n      action:\n    </h2>\n    <code-demo\n      [files]=\"code.eventBinding.files\"\n      [highlights]=\"code.eventBinding.highlights\"\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.eventBinding.code\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      While parentheses are used for event binding: <b>(event)</b>, \"on-\" can\n      also be used, e.g. <b>on-click</b> is the same as <b>(click)</b>.\n    </div>\n  </div>\n\n  <div *slide id=\"reference-bindings\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Event binding shortcuts</codelab-breadcrumb>\n    <h2 i18n>\n      When we need to access an HTML element or an Angular component from the\n      template, we can mark it with <b>#name</b>, and it becomes available as\n      <b>name</b> everywhere in the template:\n    </h2>\n    <code-demo\n      [files]=\"code.referenceBinding.files\"\n      [highlights]=\"code.referenceBinding.highlights\"\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.referenceBinding.code\"\n    ></code-demo>\n    <div class=\"info\" i18n>\n      We'll learn a better way to work with inputs in Forms milestone.\n    </div>\n  </div>\n\n  <div *slide id=\"event-binding-shortcuts\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Event binding shortcuts</codelab-breadcrumb>\n    <h2 i18n>\n      Angular also provides a shortcut for handling keyboard shortcuts. Try\n      updating the message by pressing Control + Enter in the input.\n    </h2>\n    <code-demo\n      [files]=\"code.eventBindingShortcuts.files\"\n      [highlights]=\"code.eventBindingShortcuts.highlights\"\n      [allowSwitchingFiles]=\"false\"\n      [(ngModel)]=\"code.eventBindingShortcuts.code\"\n    ></code-demo>\n  </div>\n\n  <!--  CONDITIONAL DISPLAY-->\n  <div *slide id=\"conditional-display-ngif\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Conditional Display (*ngIf)</codelab-breadcrumb>\n    <h2 i18n>\n      This conditional expression will add or remove an element from the DOM if\n      it evaluates as a truthy\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.ngIfDirective.template\"\n      [highlights]=\"code.ngIfDirective.matches.ngIf\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"exercise-2-pre\" milestone=\"Templates2\">\n    <codelab-breadcrumb i18n>Exercise 2</codelab-breadcrumb>\n    <h2 i18n>\n      In the next slide you'll add a click handler to the search button, and\n      display a message for the case where no videos were found. The result will\n      look like this:\n    </h2>\n\n    <codelab-exercise-preview\n      column-5\n      [exercise]=\"exercises[1]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <div *slide id=\"exercise-2\" no-padding>\n    <codelab-exercise\n      milestone=\"Templates2\"\n      [translations]=\"t\"\n      [exercise]=\"exercises[1]\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"repeating\" milestone=\"Templates3\">\n    <codelab-breadcrumb i18n>Repeating elements</codelab-breadcrumb>\n    <h2 i18n>\n      Let's say you have an array of puppies, and want to display all of them on\n      the page. Angular has a special syntax for that called <b>*ngFor</b>,\n      let's see how it works on the next slide\n    </h2>\n    <codelab-exercise-playground\n      [exercise]=\"code.ngForDirectivePre.template\"\n      [highlights]=\"code.ngForDirectivePre.matches\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"conditional-display-ngfor\" milestone=\"Templates3\">\n    <codelab-breadcrumb i18n>Repeating elements (*ngFor)</codelab-breadcrumb>\n    <h2 i18n>\n      Here <b>*ngFor</b> repeats HTML element it's attached to (li in this case)\n      for every single puppy in the puppies array\n    </h2>\n    <codelab-exercise-playground\n      #forExercise\n      [exercise]=\"code.ngForDirective.template\"\n      [highlights]=\"code.ngForDirective.matches.ngFor\"\n    ></codelab-exercise-playground>\n    <div class=\"info mt-60\" i18n>\n      HTML attributes in <b>Angular</b> are case sensitive:\n      <b><s>*ngfor</s></b> won't work, <b>*ngFor</b> will\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-3-pre\" milestone=\"Templates3\">\n    <codelab-breadcrumb i18n>Exercise 3</codelab-breadcrumb>\n    <div flex style=\"height: 100%;\">\n      <div column-5>\n        <h2 i18n>\n          In the next slide you'll finally display the videos! The result will\n          look like this:\n        </h2>\n      </div>\n      <codelab-exercise-preview\n        column-5\n        [exercise]=\"exercises[2]\"\n      ></codelab-exercise-preview>\n    </div>\n  </div>\n\n  <div *slide id=\"exercise-3\" no-padding>\n    <codelab-exercise\n      [translations]=\"t\"\n      [exercise]=\"exercises[2]\"\n      milestone=\"Templates3\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <codelab-breadcrumb i18n>Milestone Completed</codelab-breadcrumb>\n      </div>\n      <div class=\"body\" body></div>\n      <div class=\"footer\" footer>\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../dependency-injection/0\" i18n>\n            Learn how to use Angular Dependency Injection\n          </a>\n        </h2>\n        <feedback-rating lesson=\"AngularTemplates\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/templates.component.ts",
    "content": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ng2tsConfig } from '../../../../../../../ng2ts/ng2ts';\nimport {\n  displayAngularComponent,\n  displayAngularComponentWithHtml\n} from '../../../shared/helpers/helpers';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\n\ndeclare const require;\n\nconst baseCode = 'TODO';\n\n@Component({\n  selector: 'codelab-slides-templates',\n  templateUrl: './templates.component.html',\n  styleUrls: ['./templates.component.css']\n})\nexport class TemplatesComponent implements OnInit {\n  t: { [key: string]: string };\n  exercises = [\n    ng2tsConfig.milestones[2].exercises[1],\n    ng2tsConfig.milestones[2].exercises[2],\n    ng2tsConfig.milestones[2].exercises[3]\n  ];\n  curlies = '{{ property }}';\n\n  // TODO(kirjs): we can't access tanslation in OnInit hook iwht static set to false\n  // need to consider changing how we set code\n  @ViewChild('translations', { static: true }) translation;\n  code: any = {};\n\n  constructor() {}\n\n  ngOnInit() {\n    this.t = extractMessages(this.translation);\n\n    this.code = {\n      template: {\n        intro: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: '<h1>Hello World!</h1>'\n})\nexport class AppComponent {\n}`),\n\n        matches: {\n          curlies: { 'app.component.ts': [/{{.*}}/, /firstName = .*/] },\n          curliesFullName: { 'app.component.ts': [/{{.*}}/, /fullName\\(\\){/] },\n          curliesAttribute: { 'app.component.ts': [/\"{{.*}}\"/, /avatar = .*/] },\n          template: { 'app.component.ts': /<h1>.*<\\/h1>/ },\n          squares: { 'app.component.ts': /\\[.*]/ }\n        },\n        interpolation: displayAngularComponent(\n          `import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>\n    Hello {{firstName}}!\n    </h1>\\`\n})\nexport class AppComponent {\n  firstName = 'Pierre-Auguste';\n  lastName = 'Renoir';\n}`,\n          ''\n        ),\n        interpolationMethod: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Hello {{fullName()}}!</h1>\\`\n})\nexport class AppComponent {\n  firstName = 'Pierre-Auguste';\n  lastName = 'Renoir';\n  fullName(){\n     return this.firstName + \" \" + this.lastName\n  }\n}`),\n        dataBindingPre: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Hello {{fullName()}}!</h1>\n    <img src=\"{{avatar}}\">\n  \\`\n})\nexport class AppComponent {\n  firstName = 'Pierre-Auguste';\n  lastName = 'Renoir';\n  avatar = 'assets/images/renoir.jpg';\n  fullName(){  return this.firstName + \" \" + this.lastName }\n}`),\n        dataBinding: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Hello {{fullName()}}!</h1>\n    <img [src]=\"avatar\">\n  \\`\n})\nexport class AppComponent {\n  firstName = 'Pierre-Auguste';\n  lastName = 'Renoir';\n  avatar = 'assets/images/renoir.jpg';\n  fullName(){  return this.firstName + \" \" + this.lastName }\n}`),\n        dataBindingExtra: {\n          code: {\n            'app.component.html': require('!!raw-loader!./samples/data-binding-extra/app.component.html'),\n            'app.component.ts': require('!!raw-loader!./samples/data-binding-extra/app.component.ts'),\n            'bootstrap.ts': require('!!raw-loader!./../../../shared/angular-code/bootstrap.ts'),\n            'app.module.ts': require('!!raw-loader!./samples/data-binding-extra/app.module.ts'),\n            'number-praiser.ts': require('!!raw-loader!./samples/data-binding-extra/number-praiser.ts'),\n            'index.html': require('!!raw-loader!./samples/data-binding-extra/index.html')\n          },\n          files: ['app.component.html', 'app.component.ts']\n        }\n      },\n      ngIfDirective: {\n        template: displayAngularComponent(`import {Component} from '@angular/core';\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Hello {{firstName}}!</h1>\n    <img src=\"{{avatar}}\" *ngIf=\"onDisplay()\">\n  \\`\n})\nexport class AppComponent {\n  firstName = 'Pierre-Auguste';\n  avatar = 'assets/images/renoir.jpg';\n  onDisplay(){  return false } // ${this.t.tryChangingToTrue}\n}`),\n        matches: {\n          ngIf: { 'app.component.ts': /\\*ngIf/ }\n        }\n      },\n      ngForDirectivePre: {\n        template: displayAngularComponent(`import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Puppies names:</h1>\n    ??? <!-- ${this.t.needToRepeatPuppiesHere} -->\n  \\`\n})\nexport class AppComponent {\n  puppies = ['Schumann', 'Mendelssohn', 'Bach'];\n}`),\n        matches: { 'app.component.ts': ['???', /puppies.*;/] }\n      },\n      ngForDirective: {\n        template: displayAngularComponent(\n          `import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Puppies names:</h1>\n  <ul>\n    <li *ngFor=\"let puppy of puppies\">\n      {{puppy}}\n    </li>\n  </ul>\n  \\`\n})\nexport class AppComponent {\n  puppies = ['Schumann', 'Mendelssohn', 'Bach'];\n}`,\n          `\nimport {AppComponent} from './app.component';\n\ndescribe('AppComponent', ()=>{\n  it('Add one more puppy to the list', ()=>{\n    const app = new AppComponent();\n    chai.expect(app.puppies.length).equals(4);\n  })\n})\n\n`\n        ),\n        matches: {\n          ngFor: { 'app.component.ts': '*ngFor' }\n        }\n      },\n\n      templateInterpolation: `\n      <!-- Use property value from person object from component instance. -->\n      <h2>Profile for {{person.name}}</h2>\n\n      <!-- Use method on person object from component instance. -->\n      <h2>Profile for {{person.getBiography()}}</h2>\n\n      <!-- Use property on person object from component instance. -->\n      <img src=\"{{person.pic}}\" alt=\"Photo of {{person.name}}\">\n    `,\n      templateInterpolationMatch: /{{person.name}}/,\n      templateInterpolationExercise: displayAngularComponentWithHtml(\n        baseCode,\n        `<h1>Hello, {{user.firstName}}</h1>`\n      ),\n      templateInterpolationExerciseMatch: /user.firstName/,\n      bindingPropMatch: /person.photoUrl/,\n      bindingPropExercise: displayAngularComponentWithHtml(\n        baseCode,\n        `<h1 [innerText]=\"user.fullName()\"></h1>`\n      ),\n      bindingPropExerciseMatch: /user.pic/,\n      eventBinding: {\n        code: {\n          'app.component.html': require('!!raw-loader!./samples/event-binding/app.component.html'),\n          'app.component.ts': require('!!raw-loader!./samples/event-binding/app.component.ts'),\n          'bootstrap.ts': require('!!raw-loader!./../../../shared/angular-code/bootstrap.ts'),\n          'app.module.ts': require('!!raw-loader!./../../../shared/angular-code/app.module.ts'),\n          'index.html': require('!!raw-loader!./../../../shared/angular-code/index.html')\n        },\n        files: ['app.component.html'],\n        highlights: { 'app.component.html': '(click)' }\n      },\n      referenceBinding: {\n        code: {\n          'app.component.html': require('!!raw-loader!./samples/reference-binding/app.component.html'),\n          'app.component.ts': require('!!raw-loader!./samples/reference-binding/app.component.ts'),\n          'bootstrap.ts': require('!!raw-loader!./../../../shared/angular-code/bootstrap.ts'),\n          'app.module.ts': require('!!raw-loader!./../../../shared/angular-code/app.module.ts'),\n          'index.html': require('!!raw-loader!./../../../shared/angular-code/index.html')\n        },\n        files: ['app.component.html'],\n        highlights: { 'app.component.html': ['#input', 'input.value'] }\n      },\n      eventBindingShortcuts: {\n        code: {\n          'app.component.html': require('!!raw-loader!./samples/event-binding-shortcuts/app.component.html'),\n          'app.component.ts': require('!!raw-loader!./samples/reference-binding/app.component.ts'),\n          'bootstrap.ts': require('!!raw-loader!./../../../shared/angular-code/bootstrap.ts'),\n          'app.module.ts': require('!!raw-loader!./../../../shared/angular-code/app.module.ts'),\n          'index.html': require('!!raw-loader!./../../../shared/angular-code/index.html')\n        },\n        files: ['app.component.html'],\n        highlights: { 'app.component.html': '(keydown.control.enter)' }\n      },\n\n      eventBindingExercise: displayAngularComponentWithHtml(\n        baseCode,\n        `<!--Type your template here onButtonClick -->`\n      ),\n      conditionalDisplay: `<!-- ngIf conditionally toggles the visibility of a section of the UI. -->\n<section *ngIf=\"showSection\">Howdy!</section>\n<!-- The '*' means this directive alters the component tree's structure. -->\n<!-- Note also that *ngIf is case-sensitive! -->\n`,\n      conditionalDisplayMatch: /ngIf/,\n      conditionalDisplayExercise: displayAngularComponentWithHtml(\n        baseCode,\n        `<!--Type your template here displayUser -->`\n      ),\n      conditionalDisplayFor: `<ul>\n  <li *ngFor=\"let puppy of puppies\">\n    {{puppy.name}}\n  </li>\n</ul>`,\n      conditionalDisplayForMatch: /ngFor/,\n      conditionalDisplayForExercise: displayAngularComponentWithHtml(\n        baseCode,\n        `<!--Type your template here heros -->`\n      )\n    };\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/templates/templates.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { TemplatesComponent } from './templates.component';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild([...SlidesRoutes.get(TemplatesComponent)]);\n\n@NgModule({\n  imports: [\n    routes,\n    CodeDemoModule,\n    FeedbackModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [TemplatesComponent],\n  exports: [TemplatesComponent]\n})\nexport class TemplatesModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/code/app.ts",
    "content": "export const value = { value: 4 };\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/code/code.ts",
    "content": "export { ts } from '../../../../../../../../../ng2ts/code';\n\nexport const app_ts_AST = {};\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/code/mini-exercise-test.ts",
    "content": "import { value } from './app';\nimport { app_ts_AST, ts } from './code';\n\ndeclare const it, describe;\n\nfunction getFunctionNode(code) {\n  let functionNode;\n\n  /**\n   * Fancy: Require the actual source code, and search in it.\n   */\n  function findFunctionNode(node) {\n    if (\n      node.kind === ts.SyntaxKind.FunctionDeclaration &&\n      node.name.text === 'add'\n    ) {\n      functionNode = node;\n    }\n    ts.forEachChild(node, findFunctionNode);\n  }\n\n  findFunctionNode(code);\n  return functionNode;\n}\n\ndescribe('value', () => {\n  it(`@@specifyTheTypeForB`, () => {\n    const func = getFunctionNode(app_ts_AST);\n    chai.assert(\n      func.parameters[1].type &&\n        func.parameters[1].type.kind === ts.SyntaxKind.NumberKeyword,\n      'Test failed: b is not a number'\n    );\n  });\n\n  it(`@@typescriptHighlightsErrorFix224`, () => {\n    chai.expect(value.value).equals(4);\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html",
    "content": "<svg\n  width=\"460\"\n  height=\"460\"\n  xmlns=\"http://www.w3.org/2000/svg\"\n  style=\"margin:0 auto;\"\n>\n  <g>\n    <ellipse\n      stroke=\"#000\"\n      ry=\"227.013155\"\n      rx=\"229.499997\"\n      cy=\"227.986845\"\n      cx=\"228.999988\"\n      st\n      roke-width=\"1.5\"\n      fill=\"#09bcd3\"\n    ></ellipse>\n    <ellipse\n      stroke=\"#000\"\n      ry=\"120.786392\"\n      rx=\"125.000014\"\n      cy=\"314.213608\"\n      cx=\"286.499992\"\n      stroke-width=\"1.5\"\n      fill=\"#b060b0\"\n    ></ellipse>\n    <ellipse\n      stroke=\"#000\"\n      ry=\"57.866101\"\n      rx=\"58.500002\"\n      cy=\"356.133899\"\n      cx=\"335\"\n      stroke-width=\"1.5\"\n      fill=\"#7baaf7\"\n    ></ellipse>\n    <text\n      stroke=\"#000\"\n      transform=\"matrix(13.140515327453613,0,0,2.8643743991851807,-3943.7705259025097,-461.11222444847226) \"\n      font-size=\"24\"\n      y=\"272\"\n      x=\"342.016307\"\n      fill-opacity=\"null\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      fill=\"#000000\"\n    ></text>\n    <text\n      stroke=\"#000\"\n      transform=\"matrix(18.086650848388672,0,0,3.8073328758437137,-6947.660337984561,-421.3642402462918) \"\n      font-size=\"24\"\n      y=\"162\"\n      x=\"393.328125\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      fill=\"#000000\"\n    ></text>\n    <text\n      font-size=\"24\"\n      y=\"129\"\n      x=\"84.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      ES7\n    </text>\n    <text\n      font-size=\"24\"\n      y=\"173\"\n      x=\"83.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      Decorators\n    </text>\n    <text\n      font-size=\"24\"\n      y=\"214.593269\"\n      x=\"83.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      Types\n    </text>\n    <text\n      font-size=\"33\"\n      y=\"81\"\n      x=\"83.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      TypeScript\n    </text>\n    <text\n      font-size=\"20\"\n      y=\"293\"\n      x=\"188.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      Classes\n    </text>\n    <text\n      font-size=\"20\"\n      y=\"315\"\n      x=\"188.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      Modules\n    </text>\n    <text\n      font-size=\"20\"\n      y=\"339.593269\"\n      x=\"189.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n      i18n\n    >\n      More...\n    </text>\n    <text\n      font-size=\"25\"\n      y=\"262\"\n      x=\"188.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n    >\n      ES6\n    </text>\n    <text\n      font-size=\"33\"\n      y=\"371\"\n      x=\"306.5\"\n      stroke-opacity=\"null\"\n      stroke-width=\"0\"\n      stroke=\"#000\"\n      fill=\"#000000\"\n    >\n      ES5\n    </text>\n  </g>\n</svg>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TypeScriptSvgComponent } from './typescript-svg.component';\n\ndescribe('TypeScriptSvgComponent', () => {\n  let component: TypeScriptSvgComponent;\n  let fixture: ComponentFixture<TypeScriptSvgComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TypeScriptSvgComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TypeScriptSvgComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-typescript-svg',\n  templateUrl: './typescript-svg.component.html'\n})\nexport class TypeScriptSvgComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/typescript.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/typescript.component.html",
    "content": "<div #translations style=\"display: none\" codelabBreadcrumbParent=\"TypeScript\">\n  <div i18n=\"@@shorthandFunction\" id=\"shorthandFunction\">\n    Or use shorthand function notation.\n  </div>\n  <div i18n=\"@@errorNotAPuppy\" id=\"errorNotAPuppy\">\n    Error: this is clearly not a puppy\n  </div>\n  <div i18n=\"@@thisIsNumber\" id=\"thisIsNumber\">This is a number</div>\n  <div i18n=\"@@useShorthandNotation\" id=\"useShorthandNotation\">\n    Or use shorthand function notation.\n  </div>\n  <div i18n=\"@@calledArrowFunction\" id=\"calledArrowFunction\">\n    (Also called arrow function)\n  </div>\n  <div i18n=\"@@typescriptCanInferNumber\" id=\"typescriptCanInferNumber\">\n    Actually TypeScript can infer number here;\n  </div>\n  <div i18n=\"@@typescriptCanInferString\" id=\"typescriptCanInferString\">\n    TypeScript can infer it's a string.\n  </div>\n  <div i18n=\"@@cantAddNumAndBool\" id=\"cantAddNumAndBool\">\n    Can't add number and boolean\n  </div>\n  <div i18n=\"@@cantSliceNum\" id=\"cantSliceNum\">Can't slice a number</div>\n  <div i18n=\"@@canSliceString\" id=\"canSliceString\">But can slice a string!</div>\n  <div i18n=\"@@works\" id=\"works\">Works!</div>\n  <div i18n=\"@@typeDoesSameThing\" id=\"typeDoesSameThing\">\n    Type[] does the same thing.\n  </div>\n  <div i18n=\"@@thisIsMethod\" id=\"thisIsMethod\">This is a method.</div>\n  <div i18n=\"@@commonDogName\" id=\"commonDogName\">\n    This a common russian dog name.\n  </div>\n  <div i18n=\"@@thatsHowRussianDogsTalk\" id=\"thatsHowRussianDogsTalk\">\n    That's how russian dogs talk.\n  </div>\n  <div i18n=\"@@nowWeCanInstantiate\" id=\"nowWeCanInstantiate\">\n    Now we can instantiate (create) it\n  </div>\n  <div i18n=\"@@andUseItsMethods\" id=\"andUseItsMethods\">And use its methods</div>\n  <div i18n=\"@@laterWeWillHaveCode\" id=\"laterWeWillHaveCode\">\n    Later we'll have code here\n  </div>\n  <div i18n=\"@@letsCreateMorePuppies\" id=\"letsCreateMorePuppies\">\n    Let's create more puppies\n  </div>\n  <div i18n=\"@@varAllowedNotRecommended\" id=\"varAllowedNotRecommended\">\n    Var is still allowed but not recommended.\n  </div>\n  <div i18n=\"@@letInsteadOfVar\" id=\"letInsteadOfVar\">\n    Let should be used instead of var.\n  </div>\n  <div\n    i18n=\"@@letUnavailableOutsideIfUnlikeIf\"\n    id=\"letUnavailableOutsideIfUnlikeIf\"\n  >\n    Unlike var let is unavailable outside of this if.\n  </div>\n  <div i18n=\"@@constLikeLet\" id=\"constLikeLet\">\n    Const is like let, but if you try to change it, TS will give you an error.\n  </div>\n  <div i18n=\"@@definitelyBoolean\" id=\"definitelyBoolean\">\n    okay, definitely a boolean\n  </div>\n  <div i18n=\"@@createClassCodelab\" id=\"createClassCodelab\">\n    Create a class called 'Codelab'\n  </div>\n  <div i18n=\"@@exportClass\" id=\"exportClass\">Export the class</div>\n  <div i18n=\"@@addConstructor\" id=\"addConstructor\">Add a constructor</div>\n  <div\n    i18n=\"@@makeConstructorTakeParamGuests\"\n    id=\"makeConstructorTakeParamGuests\"\n  >\n    Make constructor take a parameter 'guests'\n  </div>\n  <div i18n=\"@@specifyTheTypeForGuests\" id=\"specifyTheTypeForGuests\">\n    Specify the type for the guests parameter (hint: it's an array of a type\n    Guest)\n  </div>\n  <div i18n=\"@@makeParemeterPublic\" id=\"makeParemeterPublic\">\n    Make the parameter public (note that now you can access it anywhere in the\n    class using this.guests)\n  </div>\n  <div\n    i18n=\"@@createNewMethodGetGuestsComing\"\n    id=\"createNewMethodGetGuestsComing\"\n  >\n    Create new method 'getGuestsComing'\n  </div>\n\n  <div i18n=\"@@specifyTheTypeForB\" id=\"specifyTheTypeForB\">\n    \"b\" in the code below is highlighted, because TypeScript is missing the\n    type. Specify the type for b.\n  </div>\n  <div\n    i18n=\"@@typescriptHighlightsErrorFix224\"\n    id=\"typescriptHighlightsErrorFix224\"\n  >\n    With this information TypeScript can highlight the error. Fix it, make 2 + 2\n    = 4 again!\n  </div>\n\n  <div\n    i18n=\"@@modifyGetGuestsComingToFilter\"\n    id=\"modifyGetGuestsComingToFilter\"\n  >\n    Modify getGuestsComing to filter the guests array return an array of guests\n    with the 'coming' property set to true.\n  </div>\n</div>\n<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <codelab-progress-bar></codelab-progress-bar>\n\n  <slide-arrows></slide-arrows>\n\n  <div *slide id=\"intro\" milestone=\"TypeScript\" no-padding>\n    <codelab-title-slide\n      title=\"TypeScript\"\n      i18n-title=\"@@typescript\"\n      description=\"Angular is written in TypeScript. Learn more about the language basics.\"\n      i18n-description=\"@@AngularIsWrittenInTypeScript\"\n      prereqs=\"Basic understanding of JavaScript is required.\"\n      i18n-prereqs=\"\"\n    ></codelab-title-slide>\n  </div>\n\n  <div *slide id=\"why-typescript\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Why TypeScript</codelab-breadcrumb>\n    <h2 i18n>\n      <b>JavaScript</b> is a great language, but there's space for improvement:\n    </h2>\n    <ul>\n      <li i18n>\n        JS is not type safe which makes it harder to develop large scale\n        applications\n      </li>\n      <li i18n>\n        New features of the latest versions of JS standards (ES2018, ES2019) are\n        not supported well across all the browsers\n      </li>\n    </ul>\n    <div class=\"info\" i18n>\n      <b>ES</b> stands for\n      <a href=\"https://en.wikipedia.org/wiki/ECMAScript\"><b>ECMAScript</b></a\n      >, which is the name of the JavaScript language specification (standard)\n    </div>\n  </div>\n\n  <div *slide id=\"about-typescript-2\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>TypeScript</codelab-breadcrumb>\n    <h2 i18n>\n      This is why <b>TypeScript</b> has been created. Since TypeScript can be\n      compiled to JavaScript, it can be used in any modern browser.\n    </h2>\n    <div row>\n      <div>\n        <ul>\n          <li i18n>TypeScript extends the latest version of JavaScript</li>\n          <li i18n>\n            TypeScript adds new features from the next version of JavaScript\n          </li>\n          <li i18n>\n            On top of it, TypeScript adds an optional type system and decorators\n          </li>\n        </ul>\n      </div>\n      <div class=\"space-left\">\n        <codelab-typescript-svg></codelab-typescript-svg>\n      </div>\n    </div>\n    <div class=\"info\" i18n>\n      Decorator looks like @twitter_handles, we'll learn more about them later\n    </div>\n  </div>\n\n  <!--  NUMBER-TYPE  -->\n  <div\n    *slide\n    id=\"typescript-why-ts\"\n    milestone=\"TypeScript\"\n    style=\"display: flex\"\n  >\n    <codelab-breadcrumb i18n>Type System</codelab-breadcrumb>\n    <h2 i18n>\n      Below we have an <b>add</b> function, and we're adding 2 and 2. What could\n      go wrong?\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      [highlights]=\"code.tsExerciseMatch\"\n      [exercise]=\"code.js2And2\"\n    ></codelab-exercise-playground>\n    <h2 i18n>\n      Turns out it's possible to pass a string to this function and we get\n      <b>22</b> instead of <b>4</b>. Let's see how TypeScript can help address\n      this issue on the next slide\n    </h2>\n  </div>\n\n  <!--  NUMBER-TYPE  -->\n  <div *slide id=\"typescript-mini-exercise\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Type System</codelab-breadcrumb>\n    <h2 i18n>\n      TypeScript uses \"<b>:</b>\" to specify the type information (e.g.\n      <b>n: number</b>). Both <b>a</b> and <b>b</b> should be numbers. We\n      specified the type for <b>a</b>, now it's your turn!\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      [exercise]=\"code.tsExercise\"\n    ></codelab-exercise-playground>\n    <div data-position=\"top\" class=\"info\" i18n>The code above is editable!</div>\n  </div>\n\n  <div *slide id=\"types-primitives\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n\n      >Primitives (strings, numbers, etc...)\n    </codelab-breadcrumb>\n    <h2 i18n>Below are more types we can use</h2>\n\n    <code-demo-file-path path=\"types.ts\"></code-demo-file-path>\n    <code-demo-editor\n      style=\"height: 400px;\"\n      language=\"typescript\"\n      [lineNumbers]=\"false\"\n      [fontSize]=\"20\"\n      [(ngModel)]=\"code.moreTypes.code\"\n    >\n    </code-demo-editor>\n  </div>\n\n  <div *slide id=\"types-more\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Interfaces</codelab-breadcrumb>\n    <h2 i18n>\n      TypeScript Interfaces allow to specify properties and methods for an\n      object.\n    </h2>\n    <code-demo-file-path path=\"puppies.ts\"></code-demo-file-path>\n    <code-demo-editor\n      style=\"height: 400px;\"\n      language=\"typescript\"\n      [lineNumbers]=\"false\"\n      [fontSize]=\"20\"\n      [(ngModel)]=\"code.moreTypes.codeInterfaces\"\n    >\n    </code-demo-editor>\n    <div class=\"info\" i18n>\n      Here, <b>realPuppy</b> is an implementation of the <b>Puppy</b> Interface.\n    </div>\n  </div>\n\n  <div *slide id=\"types-arrays\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Arrays</codelab-breadcrumb>\n    <h2 i18n>\n      Array types are defined as <b>Array{{ '<' }}Type{{ '>' }}</b> or\n      <b>Type[]</b>\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      [highlights]=\"code.classDescription.matches.arrayMatch\"\n      [exercise]=\"code.moreTypes.codeArrays\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      Here, each element in the <b>betterCats</b> array is an instance of the\n      <b>Cat</b> Interface.\n    </div>\n  </div>\n\n  <!--  CLASSES  -->\n  <div *slide id=\"classes\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Classes</codelab-breadcrumb>\n    <h2 i18n>TypeScript has <b>classes</b>, and Angular uses them heavily.</h2>\n    <h2 i18n>\n      They are similar to classes in other languages, and are used to group\n      methods and properties together\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      [highlights]=\"code.classDescription.matches.classPuppyMatch\"\n      [exercise]=\"code.classDescription.code\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"classes-constructor\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Constructor</codelab-breadcrumb>\n    <h2 i18n>\n      There's a special method on the class called <b>constructor</b>. It's run\n      when the class is instantiated and allows the class to take parameters\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      [exercise]=\"code.classDescription.codeConstructor\"\n      [highlights]=\"code.classDescription.matches.constructorMatch\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"classes-access-modifier\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Access Modifiers</codelab-breadcrumb>\n    <h2 i18n>\n      Constructor parameters marked as <b>public</b> (or private, or protected),\n      become class properties accessible as <b>this.ParameterName</b> within the\n      class\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      [highlights]=\"code.classDescription.matches.modifierMatch\"\n      [exercise]=\"code.classDescription.codeConstructor\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      private or protected properties are not visible outside of the class.\n    </div>\n  </div>\n\n  <div *slide id=\"export\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Export</codelab-breadcrumb>\n    <h2 i18n>\n      By the way, did you notice the <b>export</b> keyword before class? It is\n      used to share information between files. In the next slide, we'll show you\n      how to import and use this class in a different file\n    </h2>\n\n    <code-demo-file-path path=\"puppy.ts\"></code-demo-file-path>\n    <code-demo-editor\n      style=\"height: 400px;\"\n      [codeDemoHighlight]=\"[code.classDescription.matches.exportMatch]\"\n      language=\"typescript\"\n      [lineNumbers]=\"false\"\n      [fontSize]=\"20\"\n      [(ngModel)]=\"code.classDescription.codeExport.files[0].code\"\n    >\n    </code-demo-editor>\n  </div>\n\n  <div *slide id=\"import\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Import</codelab-breadcrumb>\n    <h2 i18n>Now we can use the <b>Puppy</b> class in the other file</h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      ui=\"console\"\n      files=\"puppy.ts,app.ts\"\n      [highlights]=\"code.classDescription.matches.importMatch\"\n      [exercise]=\"code.classDescription.codeImport\"\n    ></codelab-exercise-playground>\n    <div class=\"info\" i18n>\n      <b>import</b> and <b>export</b> keywords are not just for classes. They\n      work with variables, functions and other things!\n    </div>\n  </div>\n\n  <div *slide id=\"filter\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Filter (One last thing)</codelab-breadcrumb>\n    <h2 i18n>\n      \"<b>filter</b>\" is an Array method that allows you to generate a new array\n      keeping only values that satisfy the condition\n    </h2>\n    <codelab-exercise-playground\n      presets=\"\"\n      [exercise]=\"code.filter\"\n    ></codelab-exercise-playground>\n  </div>\n\n  <div *slide id=\"more\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>More</codelab-breadcrumb>\n    <h2 i18n>TypeScript supports lots of other cool features such as:</h2>\n    <ul>\n      <li>\n        <a\n          i18n\n          href=\"https://www.typescriptlang.org/docs/handbook/enums.html\"\n          target=\"_blank\"\n          >Enums</a\n        >\n      </li>\n      <li>\n        <a\n          i18n\n          href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function\"\n          target=\"_blank\"\n          >Async / Await</a\n        >\n      </li>\n      <li>\n        <a\n          i18n\n          href=\"https://www.typescriptlang.org/docs/handbook/classes.html\"\n          target=\"_blank\"\n          >Accessors (Getters / Setters)</a\n        >\n      </li>\n      <li>\n        <a\n          i18n\n          href=\"https://www.typescriptlang.org/docs/handbook/variable-declarations.html\"\n          target=\"_blank\"\n          >Destructuring</a\n        >\n      </li>\n      <li>\n        <a\n          i18n\n          href=\"https://www.typescriptlang.org/docs/handbook/functions.html\"\n          target=\"_blank\"\n          >Arrow functions</a\n        >\n      </li>\n      <li i18n>And more!</li>\n    </ul>\n    <h2 i18n>\n      We won't cover them in detail, check out the\n      <a href=\"http://www.typescriptlang.org/\" target=\"_blank\">TypeScript</a>\n      website!\n    </h2>\n  </div>\n\n  <div *slide id=\"exercise-pre\" milestone=\"TypeScript\">\n    <codelab-breadcrumb i18n>Exercise</codelab-breadcrumb>\n    <h2 i18n>In the next slide we have a TypeScript exercise</h2>\n    <h2 i18n>\n      Your task is to build a TypeScript class called Codelab which will take a\n      list of guests, and will have a method to output only the ones who are\n      coming.\n    </h2>\n    <h2 i18n>The result will be as follows:</h2>\n    <codelab-exercise-preview\n      [presets]=\"[]\"\n      [exercise]=\"exercises[0]\"\n    ></codelab-exercise-preview>\n  </div>\n\n  <div *slide id=\"exercise-new\" no-padding>\n    <codelab-exercise\n      [translations]=\"t\"\n      [presets]=\"[]\"\n      [exercise]=\"exercises[0]\"\n      milestone=\"TypeScript\"\n    >\n    </codelab-exercise>\n  </div>\n\n  <div *slide id=\"end\">\n    <codelab-closing-slide>\n      <div header>\n        <codelab-breadcrumb i18n>Milestone Completed</codelab-breadcrumb>\n      </div>\n      <div body>\n        <h2 i18n>\n          Now you should know enough <b>TypeScript</b> to start learning\n          <b>Angular</b>! Read more about TypeScript on\n          <a href=\"http://www.typescriptlang.org/\">TypeScript web site</a>\n        </h2>\n      </div>\n      <div footer>\n        <br />\n        <br />\n        <h2>\n          <ng-container i18n>Next:</ng-container>\n          <a routerLink=\"../../create-first-app/0\" i18n>\n            Learn how to create your first Angular app!\n          </a>\n        </h2>\n        <feedback-rating lesson=\"TypeScript\"></feedback-rating>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript/typescript.component.ts",
    "content": "import { Component, OnInit, ViewChild } from '@angular/core';\n\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\nimport { ng2tsConfig } from '../../../../../../../../ng2ts/ng2ts';\nimport {\n  javaScriptWithConsoleLog,\n  typeScriptWithConsoleLog\n} from '../../../../shared/helpers/helpers';\n\ndeclare const require;\n\n@Component({\n  selector: 'codelab-slides-typescript',\n  templateUrl: './typescript.component.html',\n  styleUrls: ['./typescript.component.css']\n})\nexport class TypeScriptComponent implements OnInit {\n  t: { [key: string]: string };\n  // need to consider changing how we set code\n  @ViewChild('translations', { static: true }) translation;\n\n  // TODO(kirjs): we can't access tanslation in OnInit hook iwht static set to false\n  private exercises = [ng2tsConfig.milestones[0].exercises[1]];\n  private code: any = {};\n\n  ngOnInit(): void {\n    this.t = extractMessages(this.translation);\n\n    this.code = {\n      filter: typeScriptWithConsoleLog(`const numbers = [12,23,62,34,19,40,4,9];\n\nconsole.log(numbers.filter(function(n: number){\n  return n > 30;\n}));\n\n// ${this.t.useShorthandNotation}\n// ${this.t.calledArrowFunction}\nconsole.log(\n  numbers.filter(n => n > 30)\n);`),\n      moreTypes: {\n        codeInterfaces: `interface Puppy {\n  name: string;\n  age: number;\n};\n\nconst realPuppy: Puppy = {\n  name: 'Pikachu',\n  age: 1\n};\n\nconst notRealPuppy: Puppy = {\n  says: 'meow' // ${this.t.errorNotAPuppy}\n}`,\n        codeArraysMatch: /Array/,\n        codeArrays: typeScriptWithConsoleLog(`// Array<Type>\nconst cats: Array<string> = ['Simba', 'Aslan'];\n// ${this.t.typeDoesSameThing}\nconst cats2: string[] = ['Simba', 'Aslan'];\n\ninterface Cat {\n  name: string,\n  age: number\n}\n\nconst betterCats: Cat[] = [\n  {name: 'Simba', age: 22},\n  {name: 'Aslan', age: 9999}\n];\n\nconsole.log(betterCats);`),\n        code: `const price: number = 100; // ${this.t.thisIsNumber}\nconst tax = 20; // ${this.t.typescriptCanInferNumber}\nconst productName = 'pikachu'; // ${this.t.typescriptCanInferString}\nconst isHungry = true; // Boolean\n\nconst weird = tax + isHungry; // ${this.t.cantAddNumAndBool}\ntax.slice(1,5); // ${this.t.cantSliceNum}\nproductName.slice(1,5); // ${this.t.canSliceString}\nconst total = price + tax; // ${this.t.works}`\n      },\n      varDeclaration: {\n        code: `// ${this.t.varAllowedNotRecommended}\nvar v = 1;\n\n// ${this.t.letInsteadOfVar}\nlet l = 1;\n\nif(true){\n  let ll = 1; // ${this.t.letUnavailableOutsideIfUnlikeIf}\n}\nconsole.log(ll); // undefined\n\n\n// ${this.t.constLikeLet}\nconst x = 1;\nx = 2;`\n      },\n      stringType: {\n        code: `let fullName: string = 'Bob Bobbington';\nlet sentence: string = \\`Hello, my name is \\${ fullName }.\\`;`\n      },\n      stringType2: {\n        code: `let sentence: string = \"Hello, my name is \" + fullName + \".\"`\n      },\n      anyType: {\n        code: `let notSure: any = 4;\nnotSure = \"maybe a string instead\";\nnotSure = false; // ${this.t.definitelyBoolean}`\n      },\n      classDescription: {\n        code: typeScriptWithConsoleLog(`export class Puppy {\n  // ${this.t.commonDogName}\n  name = 'Bar Boss';\n\n  // ${this.t.thisIsMethod}\n  bark(){\n    // ${this.t.thatsHowRussianDogsTalk}\n    return this.name + ': Gav gav!!';\n  }\n}\n\n// ${this.t.nowWeCanInstantiate}\nvar hotdog = new Puppy();\n// ${this.t.andUseItsMethods}\nconsole.log(hotdog.bark());\n`),\n        codeConstructor: typeScriptWithConsoleLog(`export class Puppy {\n  constructor(public name: string){\n    // ${this.t.laterWeWillHaveCode}\n  }\n  bark(){\n    return 'Gav! my name is ' + this.name;\n  }\n}\n\nvar hotdog = new Puppy('Édouard');\nconsole.log(hotdog.bark());\n// ${this.t.letsCreateMorePuppies}\nvar oscar = new Puppy('Oscar-Claude');\nconsole.log(oscar.bark());`),\n        codeExport: typeScriptWithConsoleLog(`export class Puppy {\n  constructor(public name: string){}\n  bark(){\n    return 'Gav! my name is ' + this.name;\n  }\n}`),\n        codeImport: typeScriptWithConsoleLog(\n          `import {Puppy} from './puppy';\n\nvar hotdog = new Puppy('Édouard');\nconsole.log(hotdog.bark());\n// ${this.t.letsCreateMorePuppies}\nvar oscar = new Puppy('Oscar-Claude');\nconsole.log(oscar.bark());`,\n          'import \"./app\";',\n          undefined,\n          `export class Puppy {\n  constructor(public name: string){}\n  bark(){\n    return 'Gav! my name is ' + this.name;\n  }\n}`\n        ),\n        matches: {\n          classPuppyMatch: { 'app.ts': /class Puppy/ },\n          classMatch: /class/,\n          exportMatch: /export/,\n          importMatch: {\n            'puppy.ts': /export/,\n            'app.ts': /import/\n          },\n          arrayMatch: {\n            'app.ts': [/Array<string>/, /string\\[]/]\n          },\n          constants: /const /,\n\n          constructorMatch: { 'app.ts': [/(public name: string)/, /Édouard/] },\n          modifierMatch: { 'app.ts': [/public name/, /this.name/] },\n          oscarMatch: /Oscar-Claude/\n        }\n      },\n      tsExercise: typeScriptWithConsoleLog(\n        `function add(a: number, b){\n  return a+b;\n};\n\nconsole.log(add(2, '2'));`,\n        undefined,\n        require(`!raw-loader!./code/mini-exercise-test.ts`)\n          .replace('@@specifyTheTypeForB', this.t.specifyTheTypeForB)\n          .replace(\n            '@@typescriptHighlightsErrorFix224',\n            this.t.typescriptHighlightsErrorFix224\n          )\n      ),\n\n      js2And2: (() => {\n        const code = javaScriptWithConsoleLog(\n          `function add(a, b){\n  return a+b;\n};\n\nconsole.log(add(2, '2'));`\n        );\n        (code.files[2] as any).bootstrap = false;\n        return code;\n      })(),\n      tsExerciseMatch: { 'app.ts': /'.*'/ }\n    };\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript-routing.module.ts",
    "content": "import { Component, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SlidesRoutes } from '@ng360/slides';\nimport { TypeScriptComponent } from './typescript/typescript.component';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'ignored',\n  template: '<router-outlet></router-outlet>'\n})\nexport class EmptyTypeScriptComponent {}\n\nconst routes = [\n  {\n    path: '',\n    component: EmptyTypeScriptComponent,\n    children: [...SlidesRoutes.get(TypeScriptComponent)]\n  }\n];\n\n@NgModule({\n  declarations: [EmptyTypeScriptComponent],\n  entryComponents: [EmptyTypeScriptComponent],\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class TypeScriptRoutingModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/angular/typescript/typescript.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { TypeScriptComponent } from './typescript/typescript.component';\nimport { TypeScriptRoutingModule } from './typescript-routing.module';\nimport { TypeScriptSvgComponent } from './typescript/typescript-svg/typescript-svg.component';\nimport { SharedModule } from '../../../shared/shared.module';\n\n@NgModule({\n  declarations: [TypeScriptComponent, TypeScriptSvgComponent],\n  imports: [SharedModule, TypeScriptRoutingModule]\n})\nexport class TypeScriptModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/codelabs-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { IndexComponent } from '../components/index/index.component';\n\nconst routes: Routes = [\n  { path: '', component: IndexComponent },\n  {\n    path: 'angular',\n    loadChildren: () =>\n      import('./angular/angular.module').then(m => m.AngularModule)\n  },\n  {\n    path: 'extra',\n    loadChildren: () => import('./extra/extra.module').then(m => m.ExtraModule)\n  },\n  {\n    path: 'about',\n    loadChildren: () => import('./about/about.module').then(m => m.AboutModule)\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class CodelabsRoutingModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/codelabs.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CodelabsRoutingModule } from './codelabs-routing.module';\nimport { IndexModule } from '../components/index/index.module';\n\n@NgModule({\n  imports: [CodelabsRoutingModule, IndexModule]\n})\nexport class CodelabsModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/code-playground/code-playground.component.css",
    "content": ".vscode-gifs img {\n  width: 100%;\n  height: auto;\n  max-height: 100%;\n}\n\n.feature-title {\n  text-align: center;\n  font-style: italic;\n  margin: 20px 1px 1px 1px;\n}\n\n.vscode-gifs {\n  display: inline-block;\n  padding: 5px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/code-playground/code-playground.component.html",
    "content": "<!--<slide-deck slideShortcuts slidesRouting slides-tracking>-->\n\n<!--<div *slide id=\"exercise-babel-angular\">-->\n\n<!--editor | preview-->\n\n<!--editor | tests-->\n<!--preview-->\n\n<!--editor | preview-->\n<!--| tests-->\n\n<!--editor | preview-->\n<!--| Visualisat-->\n\n<!--1. code- components-->\n<!--<code-group [(code)]=\"code\" [solution]=\"solution\" deps=\"rxjs\"></code-group>-->\n\n<!--<code-editor bootstrap=\"app.component.ts\"></code-editor>-->\n<!--<code-editor [(code)]=\"code\" deps=\"mocha\"></code-editor>-->\n<!--<code-editor [(code)]=\"code\" [solution]=\"solution\" deps=\"mocha\"></code-editor>-->\n\n<!--<code-preview [code]=\"code\" ui=\"browser\"></code-preview>-->\n<!--<code-preview bootstrap=\"main.ts\" ui=\"browser\"></code-preview>-->\n<!--<code-preview bootstrap=\"console.ts\" ui=\"console\"></code-preview>-->\n<!--<code-preview bootstrap=\"test.ts\" ui=\"tests\"></code-preview>-->\n\n<!--2. codelab- components-->\n<!--<codelab-preview></codelab-preview>-->\n<!--<codelab-exercise [(code)]=\"code\"></codelab-exercise>-->\n\n<!--<codelab-playground></codelab-playground>-->\n<!--3. presentations- components-->\n\n<!--Building block-->\n<!--1.Code-->\n<!--<code-editor [(ngModel)]=\"code\"></code-editor>-->\n<!--2. Preview-->\n<!--<code-preview [code]=\"code\"></code-preview>-->\n<!--<code-preview-native [code]=\"code\"></code-preview-native>-->\n<!--3. Angular preview-->\n<!--<code-preview [code]=\"code\" deps=\"angular\" ui=\"browser\"></code-preview>-->\n<!--4. Console preview-->\n<!--<code-preview [code]=\"code\" deps=\"rxjs\" ui=\"console\"></code-preview>-->\n<!--5. Rxjs preview-->\n<!--<code-preview [code]=\"code\" deps=\"rxjs\" ui=\"rxjs\"></code-preview>-->\n<!--6. Test preview-->\n<!--<code-preview [code]=\"code\" deps=\"angular, tests\" ui=\"tests\"></code-preview>-->\n<!--7. CodelabSlides-->\n<!--<codelab-slides></codelab-slides>-->\n\n<!--Codelab exercise-->\n<!--<codelab-exercise [(code)]=\"code\" deps=\"angular\" milestone=\"ms\">-->\n<!--<div class=\"description\">Lol</div>-->\n<!--<code-editor></code-editor>-->\n<!--<code-preview></code-preview>-->\n<!--<code-preview deps=\"tests\" ui=\"tests\"></code-preview>-->\n<!--</codelab-exercise>-->\n<!--<codelab-exercise [(code)]=\"code\" deps=\"angular\" milestone=\"ms\">-->\n<!--<div class=\"description\">Lo lololol</div>-->\n\n<!--<code-preview></code-preview>-->\n\n<!--;lololo-->\n<!--</codelab-exercise>-->\n\n<!--<code-preview [(code)]=\"code\" ></code-preview>-->\n<!--;lollool-->\n\n<!--<codelab-exercise [(code)]=\"code\">-->\n<!--<div class=\"description\">Lol</div>-->\n<!--<code-editor class=\"editor\"></code-editor>-->\n<!--<code-preview class=\"preview\"></code-preview>-->\n<!--<code-preview class=\"tests\" deps=\"angular, tests\" ui=\"tests\"></code-preview>-->\n<!--<codelab-slides class=\"editor\"></codelab-slides>-->\n<!--</codelab-exercise>-->\n<!--<codelab-exercise [(code)]=\"code\">-->\n<!--<div class=\"description\">Lol</div>-->\n<!--<code-editor class=\"editor\"></code-editor>-->\n<!--<code-preview class=\"preview\"></code-preview>-->\n<!--<code-preview class=\"tests\" deps=\"angular, tests\" ui=\"tests\"></code-preview>-->\n<!--<codelab-slides class=\"editor\"></codelab-slides>-->\n<!--</codelab-exercise>-->\n<!--<codelab-exercise [(code)]=\"code\">-->\n<!--<div class=\"description\">Lol</div>-->\n<!--<code-editor class=\"editor\"></code-editor>-->\n<!--<code-preview class=\"preview\"></code-preview>-->\n<!--<code-preview class=\"tests\" deps=\"angular, tests\" ui=\"tests\"></code-preview>-->\n<!--<codelab-slides class=\"editor\"></codelab-slides>-->\n<!--</codelab-exercise>-->\n<!--<codelab-exercise [(code)]=\"code\">-->\n<!--<div class=\"description\">Lol</div>-->\n<!--<code-editor class=\"editor\"></code-editor>-->\n<!--<code-preview class=\"preview\"></code-preview>-->\n<!--<code-preview class=\"tests\" deps=\"angular, tests\" ui=\"tests\"></code-preview>-->\n<!--<codelab-slides class=\"editor\"></codelab-slides>-->\n<!--</codelab-exercise>-->\n\n<!--<angular-demo [(code)]=\"code\">-->\n<!--Desciption lol img-->\n<!--</angular-demo>-->\n\n<!--<codelab-exercise1  [(ngModel)]=\"code\" deps=\"angular\" test-deps=\"babel\" ui=\"editor preview tests slides\">-->\n<!--Desciption lol img-->\n<!--</codelab-exercise1>-->\n\n<!--<codelab-exercise1  [(ngModel)]=\"code\" deps=\"angular\" test-deps=\"babel\" ui=\"editor preview tests slides\">-->\n<!--Desciption lol img-->\n<!--</codelab-exercise1>-->\n\n<!--<codelab-exercise1  [(ngModel)]=\"code\" deps=\"angular\" test-deps=\"babel\" ui=\"editor preview tests slides\">-->\n<!--Desciption lol img-->\n<!--</codelab-exercise1>-->\n\n<!--<codelab-exercise1  [(ngModel)]=\"code\" deps=\"angular\" test-deps=\"babel\" ui=\"editor preview tests slides\">-->\n<!--Desciption lol img-->\n<!--</codelab-exercise1>-->\n\n<!--<h1>LOL</h1>-->\n<!--<codelab-exercise show=\"code\"></codelab-exercise>-->\n<!--<codelab-exercise show=\"console\"></codelab-exercise>-->\n\n<!--<codelab-group [code]=\"code\">-->\n<!--<code-editor></code-editor>-->\n<!--<code-preview></code-preview>-->\n<!--</codelab-group>-->\n\n<!--<code-editor [code]=\"lol\"></code-editor>-->\n\n<!--### Rx js presentation-->\n<!--<codelab-exercise [(ngModel)]=\"code\">-->\n<!--<div class=\"description\">Lol</div>-->\n<!--<code-editor class=\"editor\"></code-editor>-->\n<!--<code-preview class=\"preview\"></code-preview>-->\n<!--<code-preview class=\"tests\" deps=\"angular, tests\" ui=\"tests\"></code-preview>-->\n<!--</codelab-exercise>-->\n\n<!--<rxjs-demo [(ngModel)]=\"code\"></rxjs-demo>-->\n<!--</div>-->\n\n<!--<div *slide id=\"lol\">-->\n<!--<h1>LOL2</h1>-->\n<!--</div>-->\n\n<!--</slide-deck>-->\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/code-playground/code-playground.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-code-playground',\n  templateUrl: './code-playground.component.html',\n  styleUrls: ['./code-playground.component.css']\n})\nexport class CodePlaygroundComponent {}\n\n//\n//\n// // 1. code- components\n// // <code-group [(code)]=\"code\" [solution]=\"solution\" deps=\"rxjs\"></code-group>\n// // <code-ts-review>\n// //\n// // <code-editor bootstrap=\"app.component.ts\"></code-editor>\n// // <code-editor [(code)]=\"code\" deps=\"mocha\"></code-editor>\n// // <code-editor [(code)]=\"code\" [solution]=\"solution\" deps=\"mocha\"></code-editor>\n// //\n// // <code-preview [code]=\"code\" ui=\"browser\"></code-preview>\n// // <code-preview bootstrap=\"main.ts\" ui=\"browser\"></code-preview>\n// // <code-preview bootstrap=\"console.ts\" ui=\"console\"></code-preview>\n// // <code-preview bootstrap=\"test.ts\" ui=\"tests\"></code-preview>\n//\n//\n// /// <code-group><code-preview> TypeScript\n// /// <code-group><code-preview> Javasdcript\n//\n// @Component({\n//   selector: 'codelab-exercise',\n//   template: '<code-group><ng-content></ng-content></code-group>',\n//   providers: [CodeSource]\n// })\n// class CodelabExercise {\n//   constructor(cs: CodeSource) {\n//     cs.addBeforeStep((cide) => {\n//       code.before = 1\n//     })\n//   }\n//\n//   getRoot(){\n//     return this.parent || this;\n//   }\n//\n//   addCode(code: Record) {\n//     this.code = code;\n//   }\n//\n//   getCode() {\n//     if (this.code) {\n//       return this.code;\n//     }\n//     return this.parent.getCode();\n//   }\n//\n//   getDeps() {\n//     return this.parent && this.parent.getDeps() + this.deps;\n//   }\n//\n// }\n//\n//\n// @Component({\n//   selector: 'code-group',\n//   template: '<ng-content></ng-content>',\n//   providers: [CodeSource]\n// })\n// class CodeGroup {\n//   // { \"main.ts\": \"console.log('')\" }\n//   @Input() code: Record<string, string>;\n//   // { \"main.ts\": \"console.log('Hello')\" }\n//   @Input() solution: Record<string, string>;\n//   // // \"main.ts\"\n//   // @Input() bootstrap: string;\n//   // \"angular, react\"\n//   @Input() deps: string;\n//   @Input() compile: (code: Record<string, string>) => Record<string, string>;\n//   // \"browser, tests\"\n//   @Input() ui: string;\n// }\n//\n// @Component({\n//   selector: 'code-preview',\n//   template: '',\n//   providers: [CodeSource]\n// })\n// class CodePreview {\n//   constructor(private source: CodeSource) {\n//   }\n// }\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/code-playground/code-playground.module.ts",
    "content": "import { RouterModule } from '@angular/router';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CodePlaygroundComponent } from './code-playground.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(CodePlaygroundComponent));\n\n@NgModule({\n  imports: [routes, SlidesModule, FeedbackModule, CommonModule],\n  declarations: [CodePlaygroundComponent],\n  exports: [CodePlaygroundComponent]\n})\nexport class CodePlaygroundModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/extra-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { environment } from '../../../environments/environment';\nimport { FullLayoutComponent } from '../../containers/full-layout';\n\nlet routes = [\n  {\n    path: '',\n    component: FullLayoutComponent,\n    children: [\n      {\n        path: 'code-playground',\n        loadChildren: () =>\n          import('./code-playground/code-playground.module').then(\n            m => m.CodePlaygroundModule\n          ),\n        name: 'code-playground',\n        description:\n          'Learn how pipes transform input values to output values for display in a view',\n        page: 'extra'\n      },\n      {\n        path: 'rating-summary',\n        loadChildren: () =>\n          import('./rating-summary/rating-summary.module').then(\n            m => m.RatingSummaryModule\n          ),\n        name: 'rating-summary',\n        description:\n          'Learn how pipes transform input values to output values for display in a view',\n        page: 'extra'\n      }\n    ]\n  }\n];\n\nif (environment.production) {\n  routes = routes.filter(r => r['prod']);\n}\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class ExtraRoutingModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/extra.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule } from '../../shared/shared.module';\nimport { ExtraRoutingModule } from './extra-routing.module';\nimport { FullLayoutModule } from '../../containers/full-layout/full-layout.module';\n\n@NgModule({\n  imports: [\n    SharedModule,\n    ExtraRoutingModule,\n    CommonModule,\n    HttpClientModule,\n    FormsModule,\n    FullLayoutModule\n  ]\n})\nexport class ExtraModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/rating-summary/rating-summary.component.css",
    "content": ".ratingsummary {\n  text-align: center;\n  margin-left: auto;\n  margin-right: auto;\n  margin-top: 60px;\n  border: 1px solid slategray;\n  padding: 20px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/rating-summary/rating-summary.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <div no-padding *slide>\n    <div class=\"ratingsummary\">\n      <feedback-rating showSummary=\"true\"> </feedback-rating>\n    </div>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/rating-summary/rating-summary.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-slides-rating-summary',\n  templateUrl: './rating-summary.component.html',\n  styleUrls: ['./rating-summary.component.css']\n})\nexport class RatingSummaryComponent implements OnInit {\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/rating-summary/rating-summary.module.ts",
    "content": "import { AngularFireModule } from '@angular/fire';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { RatingSummaryComponent } from './rating-summary.component';\nimport { environment } from '../../../../environments/environment';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(RatingSummaryComponent));\n\nexport const angularFire = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\n@NgModule({\n  imports: [\n    routes,\n    BrowserWindowModule,\n\n    angularFire,\n    CommonModule,\n    HttpClientModule,\n    FeedbackModule,\n    SlidesModule,\n    AngularFireDatabaseModule,\n    AngularFireAuthModule\n  ],\n  declarations: [RatingSummaryComponent],\n  providers: [],\n  exports: [RatingSummaryComponent]\n})\nexport class RatingSummaryModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/visual-studio-code/visual-studio-code.component.css",
    "content": ".vscode-gifs img {\n  width: 100%;\n  height: auto;\n  max-height: 100%;\n}\n\n.feature-title {\n  text-align: center;\n  font-style: italic;\n  margin: 20px 1px 1px 1px;\n}\n\n.vscode-gifs {\n  display: inline-block;\n  padding: 5px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/visual-studio-code/visual-studio-code.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <slide-arrows></slide-arrows>\n\n  <div id=\"intro\" no-padding milestone=\"TypeScript\">\n    <codelab-title-slide\n      title=\"Visual Studio Code\"\n      description=\"Another Code Editor?\"\n    ></codelab-title-slide>\n  </div>\n\n  <div id=\"about-typescript\">\n    <h1>What is Visual Studio Code?</h1>\n    <div row>\n      <div>\n        <h2>\n          Visual Studio Code is a free, open-source code editor developed by\n          Microsoft\n        </h2>\n        <ul>\n          <li>\n            built with Github Electron, and written in HTML, CSS,and Javascript\n          </li>\n          <li>\n            offers a robust extensible architecture and is highly customizable\n          </li>\n          <li>\n            <span>built-in perks include:</span>\n            <ul>\n              <li>Source Control</li>\n              <li>Extensions Marketplace</li>\n              <li>Debugger</li>\n              <li>Built-in Terminal</li>\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <div>\n    <h1>Why Use Visual Studio Code?</h1>\n    <h2>\n      It has awesome tooling support and works especially well with TypeScript.\n    </h2>\n    <h2 class=\"feature-title\">\n      It comes with <em>Intellisense</em>, which provides code completion and\n      code info.\n    </h2>\n    <div row>\n      <div class=\"col-6 vscode-gifs\">\n        <img\n          src=\"https://code.visualstudio.com/images/intellisense_intellisense.gif\"\n          alt=\"IntelliSense demo gif\"\n        />\n      </div>\n      <div class=\"col-6 vscode-gifs\">\n        <img\n          src=\"https://raw.githubusercontent.com/ionutvmi/path-autocomplete/master/demo/path-autocomplete.gif\"\n          alt=\"IntelliSense demo gif\"\n        />\n      </div>\n    </div>\n  </div>\n\n  <div>\n    <h1>No Really, Why Use Visual Studio Code?</h1>\n    <h2>Missing Reference? Syntax Error? No problem!</h2>\n    <h2 class=\"feature-title\">\n      Look for the lightbulb to shed some light on the issue and maybe even\n      automatically fix it for you.\n    </h2>\n    <div row>\n      <div class=\"col-6 vscode-gifs\">\n        <img\n          src=\"https://code.visualstudio.com/images/language-support_quick-fixes.gif\"\n          alt=\"IntelliSense demo gif\"\n        />\n      </div>\n    </div>\n  </div>\n\n  <div>\n    <h1>OK, How Do I Get VSCode?</h1>\n    <div row>\n      <div class=\"col-6\">\n        <h2>Interested? Curious?</h2>\n        <h2>Ready to join the cult?</h2>\n        <ol>\n          <li>\n            Click\n            <a href=\"https://code.visualstudio.com/\" target=\"_blank\">here</a> to\n            download.\n          </li>\n          <li>Run the installer</li>\n          <li>Enjoy!</li>\n          <li>Profit???</li>\n        </ol>\n      </div>\n      <div class=\"col-6\"><img src=\"http://i.imgur.com/dac74Al.gif\" /></div>\n    </div>\n  </div>\n\n  <div>\n    <h1>Popular extensions</h1>\n    <div row>\n      <ul>\n        <li>\n          <span\n            >are many extensions available for VSCode. Some good ones\n            include:</span\n          >\n          <ul>\n            <li>\n              <a\n                href=\"https://marketplace.visualstudio.com/items?itemName=robertohuertasm.vscode-icons\"\n                target=\"_blank\"\n                >vscode-icons</a\n              >\n              - Adds icons to your file tree (ohhhh shiny)\n            </li>\n            <li>\n              <a\n                href=\"https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig\"\n                target=\"_blank\"\n                >Editor Config</a\n              >\n              - Editor Config Plugin for vs code\n            </li>\n            <li>\n              <a\n                href=\"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint\"\n                target=\"_blank\"\n                >ESLint</a\n              >\n              - JS linter plugin\n            </li>\n            <li>\n              <a\n                href=\"https://marketplace.visualstudio.com/items?itemName=eg2.tslint\"\n                target=\"_blank\"\n                >TSLint</a\n              >\n              - TypeScript linter plugin (Moarrrrr linter)\n            </li>\n            <li>\n              <a\n                href=\"https://marketplace.visualstudio.com/items?itemName=HookyQR.beautify\"\n                target=\"_blank\"\n                >Beautify</a\n              >\n              - Beautify code, if you don't like JS-beautify\n            </li>\n            <li>\n              And many many more! check out the\n              <a\n                href=\"https://marketplace.visualstudio.com/VSCode\"\n                target=\"_blank\"\n                >offical site</a\n              >\n              and\n              <a\n                href=\"https://github.com/viatsko/awesome-vscode\"\n                target=\"_blank\"\n                >Awesome VS Code</a\n              >\n              for more!\n            </li>\n          </ul>\n        </li>\n      </ul>\n    </div>\n  </div>\n\n  <div>\n    <!--TODO: Add Mac shortcuts?-->\n    <h1>Common Keyboard Shortcuts</h1>\n    <ul>\n      <li>Formats your code (Shift+Alt+F)</li>\n      <li>Open New Window (Ctrl+Shift+N)</li>\n      <li>Open Project Folder (Ctrl+K,Ctrl+O)</li>\n      <li>Go to File (Ctrl+P)</li>\n      <li>Expand Selection (Shift+Alt+Right)</li>\n      <li>Search multiple File (Ctrl+Shift+F)</li>\n      <li>Go to Definition (F12)</li>\n      <li>Rename (F2)</li>\n      <li>Multiple Cursor(Alt+Mouse)</li>\n      <li>\n        See more\n        <a\n          href=\"https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf\"\n          target=\"_blank\"\n          >here</a\n        >\n      </li>\n    </ul>\n    <p>\n      Miss your old editor keymap? Try out of one of these extensions:\n      <a\n        href=\"https://marketplace.visualstudio.com/items?itemName=vscodevim.vim\"\n        target=\"_blank\"\n        >Vim</a\n      >,\n      <a\n        href=\"https://marketplace.visualstudio.com/items?itemName=ms-vscode.sublime-keybindings\"\n        target=\"_blank\"\n        >Atom</a\n      >,\n      <a\n        href=\"https://marketplace.visualstudio.com/items?itemName=ms-vscode.atom-keybindings\"\n        target=\"_blank\"\n        >Sublime</a\n      >\n    </p>\n  </div>\n\n  <div>\n    <!--TODO: mac shortcuts-->\n    <h1>What!? you forgot all the shortcuts already?</h1>\n    <h2>\n      No problem, VSCode has your back. Hit (F1) or (ctrl+shift+p) and type the\n      command you want to perform\n    </h2>\n    <div class=\"col-6 vscode-gifs\">\n      <img\n        src=\"https://code.visualstudio.com/images/javascript_formatter.gif\"\n        alt=\"IntelliSense demo\"\n      />\n    </div>\n  </div>\n\n  <div id=\"end'; milestone: 'Visaul-Studio-Code\">\n    <codelab-closing-slide>\n      <div class=\"header\" header>\n        <h1>End of Visual Studio Code Section</h1>\n      </div>\n      <div class=\"body\" body>\n        <h2>Well done! This is the end of the milestone!</h2>\n        <ul>\n          <li>\n            <a href=\"https://code.visualstudio.com/\" target=\"_blank\"\n              >Visual Studio Code Offical Site</a\n            >\n          </li>\n        </ul>\n      </div>\n      <div class=\"footer\" footer>\n        <h2>\n          <a routerLink=\"/\">Back to Index</a>\n          <!--<a routerLink=\"/bootstrap/0\">Go to the next Milestone</a>-->\n        </h2>\n      </div>\n    </codelab-closing-slide>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/visual-studio-code/visual-studio-code.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-slides-visual-studio-code',\n  templateUrl: './visual-studio-code.component.html',\n  styleUrls: ['./visual-studio-code.component.css']\n})\nexport class VisualStudioCodeComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/codelabs/extra/visual-studio-code/visual-studio-code.module.ts",
    "content": "import { RouterModule } from '@angular/router';\nimport { FeedbackModule } from '@codelab/feedback';\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { VisualStudioCodeComponent } from './visual-studio-code.component';\nimport { CodelabComponentsModule } from '../../../components/codelab-components.module';\n\nconst routes = RouterModule.forChild(\n  SlidesRoutes.get(VisualStudioCodeComponent)\n);\n\n@NgModule({\n  imports: [\n    SlidesModule,\n    CodelabComponentsModule,\n    routes,\n\n    FeedbackModule,\n    CommonModule\n  ],\n  declarations: [VisualStudioCodeComponent],\n  exports: [VisualStudioCodeComponent]\n})\nexport class VisualStudioCodeModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/common.ts",
    "content": "import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport type MenuRoutes = MenuRoute[];\n\ninterface MenuRoute extends Route {\n  name?: string;\n  description?: string;\n  page?: string;\n  prod?: boolean;\n  translationIds?: string[];\n  children?: MenuRoutes;\n}\n\nexport const MENU_ROUTES = new InjectionToken<MenuRoutes>('menuRoutes');\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-routes/angular-routes.component.html",
    "content": "<h3>Lessons</h3>\n<ol>\n  <li *ngFor=\"let route of menuRoutes\">\n    <h2>\n      <a [routerLink]=\"['/angular', route.path]\">{{ route.name }}</a>\n    </h2>\n    <div>{{ route.description }}</div>\n  </li>\n</ol>\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-routes/angular-routes.component.scss",
    "content": ":host {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  margin: 2rem;\n  font-family: 'Helvetica Neue', sans-serif;\n  font-size: 30px;\n\n  ol {\n    margin-block-start: 0;\n\n    h2 {\n      font-size: 1.2em;\n      margin-block-end: 0.5em;\n    }\n  }\n}\n\n@media screen and (max-width: 500px) {\n  :host {\n    font-size: 20px;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-routes/angular-routes.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { MENU_ROUTES } from '../../common';\n\n@Component({\n  selector: 'codelab-angular-routes',\n  templateUrl: 'angular-routes.component.html',\n  styleUrls: ['angular-routes.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AngularRoutesComponent {\n  constructor(@Inject(MENU_ROUTES) readonly menuRoutes) {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-routes/angular-routes.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { AngularRoutesComponent } from './angular-routes.component';\n\n@NgModule({\n  imports: [CommonModule, RouterModule],\n  declarations: [AngularRoutesComponent],\n  exports: [AngularRoutesComponent]\n})\nexport class AngularRoutesModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-test-runner/angular-test-runner.component.css",
    "content": ".runner {\n  display: none;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-test-runner/angular-test-runner.component.html",
    "content": "<slides-test-results\n  [result]=\"result\"\n  (selectFile)=\"selectFile.emit($event)\"\n></slides-test-results>\n<div #runner class=\"runner\"></div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-test-runner/angular-test-runner.component.ts",
    "content": "import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { createSystemJsSandbox } from '@codelab/code-demos/src/lib/shared/sandbox';\nimport { ScriptLoaderService } from '@codelab/code-demos/src/lib/shared/script-loader.service';\nimport babel_traverse from '@babel/traverse';\nimport * as babylon from 'babylon';\nimport * as babel_types from 'babel-types';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\nimport { TestRunResult } from '@codelab/utils/src/lib/test-results/common';\nimport { handleTestMessage } from './tests';\n\nconst ts = getTypeScript();\n\n// TODO(kirjs): This is a duplicate\nexport function addMetaInformation(sandbox, files: { [key: string]: string }) {\n  sandbox.evalJs(`System.registry.delete(System.normalizeSync('./code'));`);\n  (sandbox.iframe.contentWindow as any).System.register('code', [], function(\n    exports\n  ) {\n    return {\n      setters: [],\n      execute: function() {\n        exports('ts', ts);\n        exports('babylon', babylon);\n        exports('babel_traverse', babel_traverse);\n        exports('babel_types', babel_types);\n        Object.entries(files)\n          .filter(([moduleName]) => moduleName.match(/\\.ts$/))\n          .forEach(([path, code]) => {\n            exports(path.replace(/[\\/.-]/gi, '_'), code);\n            exports(\n              path.replace(/[\\/.-]/gi, '_') + '_AST',\n              ts.createSourceFile(path, code, ts.ScriptTarget.ES5)\n            );\n          });\n        Object.entries(files)\n          .filter(([moduleName]) => moduleName.match(/\\.html/))\n          .forEach(([path, code]) => {\n            const templatePath = path.replace(/[\\/.-]/gi, '_');\n            exports(templatePath, code);\n          });\n      }\n    };\n  });\n}\n\n@Component({\n  selector: 'codelab-simple-angular-test-runner',\n  templateUrl: './angular-test-runner.component.html',\n  styleUrls: ['./angular-test-runner.component.css']\n})\nexport class SimpleAngularTestRunnerComponent\n  implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n  handleMessageBound: any;\n  @Output() solved: EventEmitter<boolean> = new EventEmitter<boolean>();\n  @Output() public selectFile: EventEmitter<string> = new EventEmitter<\n    string\n  >();\n  @Input() translations: { [key: string]: string } = {};\n  @Input() code: any;\n  @Input() bootstrap: string;\n\n  @ViewChild('runner', { static: false }) runnerElement: ElementRef;\n\n  changedFilesSubject = new BehaviorSubject<Record<string, string>>({});\n  tests: any;\n  private subscription: Subscription;\n  result: TestRunResult = { tests: [] };\n\n  constructor(\n    private scriptLoaderService: ScriptLoaderService,\n    private cd: ChangeDetectorRef\n  ) {}\n\n  ngOnInit() {\n    this.handleMessageBound = message => {\n      this.tests = handleTestMessage(message, this.tests || []);\n\n      this.result = {\n        tests: this.tests.map(test => {\n          const name =\n            this.translations[test.title.replace('@@', '')] || test.title;\n          return { ...test, name, error: test.result };\n        })\n      };\n\n      if (message.data.type === 'testEnd') {\n        this.solved.emit(\n          this.tests.length > 0 && this.tests.every(test => test.pass)\n        );\n      }\n\n      this.cd.markForCheck();\n    };\n    window.addEventListener('message', this.handleMessageBound, false);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.code) {\n      this.changedFilesSubject.next(changes.code.currentValue);\n    }\n  }\n\n  async ngAfterViewInit() {\n    const sandbox = await createSystemJsSandbox(\n      this.runnerElement.nativeElement,\n      {\n        id: 'testing',\n        url: '/assets/runner'\n      }\n    );\n\n    sandbox.setHtml(\n      this.code['index.html'] ||\n        '<app-root></app-root><my-app></my-app><div class=\"error\"></div>'\n    );\n\n    sandbox.evalJs(this.scriptLoaderService.getScript('chai'));\n    sandbox.evalJs(this.scriptLoaderService.getScript('mocha'));\n    sandbox.evalJs(this.scriptLoaderService.getScript('test-bootstrap'));\n    sandbox.evalJs(this.scriptLoaderService.getScript('shim'));\n    sandbox.evalJs(this.scriptLoaderService.getScript('zone'));\n    sandbox.evalJs(this.scriptLoaderService.getScript('system-config'));\n    sandbox.evalJs(this.scriptLoaderService.getScript('ng-bundle'));\n\n    this.subscription = this.changedFilesSubject.subscribe(files => {\n      const hasErrors = Object.entries(files)\n        .filter(([path]) => path.match(/\\.js$/))\n        .map(([path, code]) => {\n          try {\n            sandbox.evalJs(\n              `System.registry.delete(System.normalizeSync('./${path.replace(\n                '.js',\n                ''\n              )}'));`\n            );\n            addMetaInformation(sandbox, this.code);\n            sandbox.evalJs(code);\n          } catch (e) {\n            console.groupCollapsed(e.message);\n            console.log(e);\n            console.groupEnd();\n            return true;\n          }\n          return false;\n        })\n        .some(a => a);\n\n      if (!hasErrors) {\n        sandbox.evalJs(`System.import('${this.bootstrap}')`);\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n      this.subscription = null;\n    }\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/angular-test-runner/tests.ts",
    "content": "export function handleTestMessage(message, tests) {\n  if (!message.data || !message.data.type) {\n    return tests;\n  }\n\n  if (message.data.type === 'testList') {\n    return message.data.tests.map(test => ({\n      title: test\n    }));\n  }\n\n  if (message.data.type === 'testEnd') {\n    return tests;\n  }\n\n  if (message.data.type === 'testResult') {\n    return tests.map(test => {\n      if (test.title === message.data.test.title) {\n        test.pass = message.data.pass;\n        test.result = message.data.result;\n      }\n      return test;\n    });\n  }\n\n  return tests;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/babel-test-runner/babel-helpers.ts",
    "content": "import * as T from 'babel-types';\nimport * as babylon from 'babylon';\nimport babel_traverse from '@babel/traverse';\nimport { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\nimport * as TsTypes from 'typescript';\n\nconst ts = getTypeScript();\n\nfunction matchesValue(actual, expected) {\n  if (!actual) {\n    return false;\n  }\n  if (expected instanceof RegExp) {\n    return expected.test(actual);\n  }\n\n  return actual.trim() === expected.trim();\n}\n\nexport const expectClass = name => ({ node, parent }) =>\n  T.isIdentifier(node, { name }) &&\n  T.isClassDeclaration(parent, { superClass: null });\n\nexport const expectExportedClass = name => ({ node, parent, parentPath }) =>\n  expectClass(name)({ node, parent }) &&\n  T.isExportNamedDeclaration(parentPath.parent);\n\nexport const expectDecorator = name => ({ node }) =>\n  T.isDecorator(node) && node.expression.callee.name === name;\n\nexport const expectDecoratorPropertyStringValue = (\n  decoratorName,\n  keyName,\n  value\n) => path => {\n  function matchesTemplateLiteral() {\n    return (\n      T.isTemplateLiteral(path.node) &&\n      matchesValue(path.node.quasis[0].value.raw, value)\n    );\n  }\n\n  function matchesStringLiteral() {\n    return T.isStringLiteral(path.node) && matchesValue(path.node.value, value);\n  }\n\n  return (\n    (matchesTemplateLiteral() || matchesStringLiteral()) &&\n    T.isObjectProperty(path.parent) &&\n    path.parent.key.name === keyName &&\n    path.findParent(T.isDecorator).node.expression.callee.name === decoratorName\n  );\n};\n\nexport function babelTestSuite(filePath, tests) {\n  return function test(files) {\n    const results = tests.map(({ title }) => ({ title, pass: false }));\n    const code = files[filePath];\n\n    const ast = babylon.parse(code, {\n      sourceType: 'module',\n      plugins: ['decorators']\n    });\n\n    babel_traverse(ast, {\n      enter(path) {\n        tests.forEach((testConfig, index) => {\n          try {\n            results[index].pass =\n              results[index].pass || testConfig.condition(path);\n          } catch (e) {\n            console.log(e);\n          }\n        });\n      }\n    });\n\n    return results;\n  };\n}\n\nexport type Predicate = (node: TsTypes.Node) => boolean;\n\nexport class MiniTsQuery {\n  constructor(private readonly ast: TsTypes.Node) {}\n\n  some(predicate: Predicate) {\n    let result = false;\n\n    this.traverse(this.ast, node => {\n      if (predicate(node)) {\n        result = true;\n      }\n    });\n\n    return result;\n  }\n\n  findOne(predicate) {\n    let result;\n\n    this.traverse(this.ast, node => {\n      if (!result && predicate(node)) {\n        result = node;\n      }\n    });\n\n    return result;\n  }\n\n  hasOne(predicate) {\n    return !!this.findOne(predicate);\n  }\n\n  hasIdentifier(identifier: string) {\n    return !!this.getIdentifier(identifier);\n  }\n\n  getIdentifier(identifier: string) {\n    return this.findOne(\n      node => ts.isIdentifier(node) && node.text === identifier\n    );\n  }\n\n  hasConstructorParam(identifier: string, type: string) {\n    const node = this.findOne(\n      node => ts.isIdentifier(node) && node.text === identifier\n    );\n\n    return node ? node.parent.type.typeName.text === type : undefined;\n  }\n\n  hasVariableDeclaration(identifier: string) {\n    const node = this.getIdentifier(identifier);\n    return node && ts.isVariableDeclaration(node.parent) ? node : undefined;\n  }\n\n  hasDecorator(type: string) {\n    return !!this.getDecorator(type);\n  }\n\n  hasDecoratorValue(decoratorType: string, property: string, type: string) {\n    const decorator = this.getDecorator(decoratorType);\n    if (\n      decorator.expression &&\n      ts.isCallExpression(decorator.expression) &&\n      decorator.expression.arguments &&\n      decorator.expression.arguments[0] &&\n      ts.isObjectLiteralExpression(decorator.expression.arguments[0])\n    ) {\n      return (decorator.expression.arguments[0] as any).properties\n        .filter(prop => prop && prop.name && prop.name.text === property)\n        .some(arrayValue =>\n          arrayValue.initializer.elements.some(a => a.text === type)\n        );\n    }\n    return false;\n  }\n\n  hasProvider(type: string) {\n    return this.hasDecoratorValue('NgModule', 'providers', 'VideoService');\n  }\n\n  getDecorator(type: string): TsTypes.Decorator {\n    return this.findOne(node => {\n      return (\n        ts.isDecorator(node) &&\n        node.expression &&\n        ts.isCallExpression(node.expression) &&\n        node.expression.expression &&\n        ts.isIdentifier(node.expression.expression) &&\n        node.expression.expression.text === type\n      );\n    });\n  }\n\n  private traverse(node, callback) {\n    callback(node);\n    ts.forEachChild(node, node => this.traverse(node, callback));\n  }\n}\n\nexport function tsAstTestSuite(tests) {\n  return function test(files) {\n    const results = tests.map(({ title }) => ({ title, pass: false }));\n    const astCache = {};\n\n    function getAst(filePath) {\n      if (!astCache[filePath]) {\n        astCache[filePath] = new MiniTsQuery(\n          ts.createSourceFile(\n            filePath,\n            files[filePath],\n            ts.ScriptTarget.ES2015,\n            /*setParentNodes */ true\n          )\n        );\n      }\n      return astCache[filePath];\n    }\n\n    tests.forEach((testConfig, index) => {\n      try {\n        if (!testConfig.file) {\n          throw new Error('test must specify a file');\n        }\n        results[index].pass =\n          results[index].pass || testConfig.condition(getAst(testConfig.file));\n      } catch (e) {\n        console.log(e);\n      }\n    });\n    return results;\n  };\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/babel-test-runner/babel-test-runner.component.css",
    "content": ".runner {\n  display: none;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/babel-test-runner/babel-test-runner.component.html",
    "content": "<slides-test-results [result]=\"result\"></slides-test-results>\n"
  },
  {
    "path": "apps/codelab/src/app/components/babel-test-runner/babel-test-runner.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { TestInfo } from '../../shared/interfaces/test-info';\nimport { FileConfig } from '../../shared/interfaces/file-config';\nimport { TestRunResult } from '@codelab/utils/src/lib/test-results/common';\n\ndeclare const require;\n\n@Component({\n  selector: 'codelab-babel-test-runner',\n  templateUrl: './babel-test-runner.component.html',\n  styleUrls: ['./babel-test-runner.component.css']\n})\nexport class BabelTestRunnerComponent implements AfterViewInit, OnChanges {\n  @Input() bootstrap: string;\n  tests: Array<TestInfo> = [];\n  @Input() translations: { [key: string]: string } = {};\n  @Input() code: any;\n  @Output() solved: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  constructor() {}\n\n  result: TestRunResult = { tests: [] };\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.code) {\n      this.run(this.code);\n    }\n  }\n\n  run(files: any) {\n    const test = files[this.bootstrap + '.ts.execute'];\n    try {\n      this.tests = test(files);\n      this.result = {\n        tests: this.tests.map(test => {\n          const name =\n            this.translations[test.title.replace('@@', '')] || test.title;\n\n          return {\n            ...test,\n            name,\n            error: test.result,\n            pass: !!test.pass\n          };\n        })\n      };\n\n      const isSolved = this.result.tests.every(a => a.pass);\n      this.solved.emit(isSolved);\n    } catch (e) {\n      this.tests.find(t => !t.pass).result = '[Parsing error]' + e;\n    }\n  }\n\n  selectFile(file: FileConfig) {\n    // this.parent.currentFile = file;\n  }\n\n  ngAfterViewInit(): void {\n    // this.parent.files$.subscribe(files => requestAnimationFrame(() => this.run(files)));\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/breadcrumb/breadcrumb.component.css",
    "content": "a {\n  text-decoration: none;\n  font-weight: 300;\n}\n\nspan {\n  cursor: pointer;\n}\n\nspan.arrow {\n  font-size: 0.5em;\n  vertical-align: middle;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/breadcrumb/breadcrumb.component.html",
    "content": "<h1>\n  <a routerLink=\"/\">Angular Codelab</a> {{ separator }}\n  <span [matMenuTriggerFor]=\"menu\">\n    {{ active }} <span class=\"arrow\">▼</span>\n  </span>\n  {{ separator }}\n  <ng-content></ng-content>\n</h1>\n\n<mat-menu #menu=\"matMenu\">\n  <a\n    *ngFor=\"let milestone of menuRoutes\"\n    #link=\"routerLinkActive\"\n    routerLinkActive\n    mat-menu-item\n    [disabled]=\"link.isActive\"\n    [routerLink]=\"['../..', milestone.path]\"\n    >{{ milestone.name }}\n  </a>\n</mat-menu>\n"
  },
  {
    "path": "apps/codelab/src/app/components/breadcrumb/breadcrumb.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BreadcrumbComponent } from './breadcrumb.component';\nimport { ActivatedRoute } from '@angular/router';\nimport { MENU_ROUTES } from '../../common';\nimport { CodelabComponentsModule } from '../codelab-components.module';\nimport { RouterTestingModule } from '@angular/router/testing';\n\ndescribe('BreadcrumbComponent', () => {\n  let component: BreadcrumbComponent;\n  let fixture: ComponentFixture<BreadcrumbComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [CodelabComponentsModule, RouterTestingModule],\n      providers: [\n        {\n          provide: ActivatedRoute,\n          useValue: {\n            pathFromRoot: [{ routeConfig: { name: 'lol' } }]\n          }\n        },\n        {\n          provide: MENU_ROUTES,\n          useValue: []\n        }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BreadcrumbComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/breadcrumb/breadcrumb.component.ts",
    "content": "import { Component, Inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MENU_ROUTES } from '../../common';\n\n@Component({\n  selector: 'codelab-breadcrumb',\n  templateUrl: './breadcrumb.component.html',\n  styleUrls: ['./breadcrumb.component.css']\n})\nexport class BreadcrumbComponent {\n  active: string;\n  readonly separator = '/';\n\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    @Inject(MENU_ROUTES) readonly menuRoutes\n  ) {\n    this.active = this.activatedRoute.pathFromRoot.find(\n      route => route.routeConfig && route.routeConfig['name']\n    ).routeConfig['name'];\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/buttons-nav-bar.component.html",
    "content": "<header class=\"btn-bar\">\n  <codelab-login-widget *canLoadAdmin></codelab-login-widget>\n  <codelab-menu-fullscreen-widget></codelab-menu-fullscreen-widget>\n  <codelab-menu-github-widget></codelab-menu-github-widget>\n  <feedback-widget></feedback-widget>\n  <codelab-menu-shortcut-widget></codelab-menu-shortcut-widget>\n</header>\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/buttons-nav-bar.component.scss",
    "content": ":host ::ng-deep {\n  .btn-bar {\n    z-index: 110;\n  }\n\n  button:focus {\n    outline: 0;\n  }\n\n  .menu-bar-btn {\n    width: 45px;\n    height: 45px;\n    border-radius: 50%;\n    background: no-repeat center white;\n    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\n    margin-left: 10px;\n    cursor: pointer;\n    border: none;\n    padding: 0;\n  }\n}\n\n::ng-deep {\n  .modal-title {\n    margin: 0 0 10px 0;\n  }\n\n  .buttons-nav-bar-modal-content-wrapper {\n    padding: 8px;\n    font-weight: 300;\n    font-family: 'Helvetica Neue', sans-serif;\n  }\n\n  @media screen and (max-width: 350px) {\n    .cdk-overlay-pane {\n      width: 100%;\n    }\n    .buttons-nav-bar-modal-content-wrapper {\n      width: 100%;\n    }\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/buttons-nav-bar.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-buttons-nav-bar',\n  templateUrl: './buttons-nav-bar.component.html',\n  styleUrls: ['./buttons-nav-bar.component.scss']\n})\nexport class ButtonsNavBarComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/buttons-nav-bar.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonsNavBarComponent } from './buttons-nav-bar.component';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { FirebaseLoginModule } from '@codelab/firebase-login';\nimport { MenuGithubWidgetModule } from './menu-github-widget/menu-github-widget.module';\nimport { MenuShortcutWidgetModule } from './menu-shortcut-widget/menu-shortcut-widget.module';\nimport { MenuFullscreenWidgetComponent } from './menu-fullscreen-widget/menu-fullscreen-widget.component';\nimport { DirectivesModule } from '../../directives/directives.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FeedbackModule,\n    FirebaseLoginModule,\n    MenuGithubWidgetModule,\n    MenuShortcutWidgetModule,\n    DirectivesModule\n  ],\n  declarations: [ButtonsNavBarComponent, MenuFullscreenWidgetComponent],\n  exports: [\n    ButtonsNavBarComponent,\n    FeedbackModule,\n    FirebaseLoginModule,\n    MenuGithubWidgetModule,\n    MenuShortcutWidgetModule\n  ]\n})\nexport class ButtonsNavBarModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-fullscreen-widget/menu-fullscreen-widget.component.html",
    "content": "<button class=\"menu-bar-btn\" (click)=\"openFullScreen()\">\n  <img alt=\"Toggle Fullscreen\" src=\"/assets/images/icons/fullscreen.png\" />\n</button>\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-fullscreen-widget/menu-fullscreen-widget.component.scss",
    "content": ".menu-bar-btn {\n  width: 45px;\n  height: 45px;\n  border-radius: 50%;\n  background: no-repeat center #ecf0f1;\n  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\n  margin-left: 10px;\n  cursor: pointer;\n  border: none;\n  padding: 0;\n\n  img {\n    width: 60%;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-fullscreen-widget/menu-fullscreen-widget.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MenuFullscreenWidgetComponent } from './menu-fullscreen-widget.component';\n\ndescribe('MenuFullscreenWidgetComponent', () => {\n  let component: MenuFullscreenWidgetComponent;\n  let fixture: ComponentFixture<MenuFullscreenWidgetComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MenuFullscreenWidgetComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MenuFullscreenWidgetComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-fullscreen-widget/menu-fullscreen-widget.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { FullScreenModeService } from '@ng360/slides';\n\n@Component({\n  selector: 'codelab-menu-fullscreen-widget',\n  templateUrl: './menu-fullscreen-widget.component.html',\n  styleUrls: ['./menu-fullscreen-widget.component.scss']\n})\nexport class MenuFullscreenWidgetComponent {\n  constructor(private fullScreenService: FullScreenModeService) {}\n\n  openFullScreen() {\n    this.fullScreenService.toggleFullScreen();\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.component.css",
    "content": ".menu-bar-btn.github-widget {\n  background-color: white;\n}\n\nimg {\n  width: 100%;\n}\n\n.octocat {\n  float: left;\n  width: 224px;\n  margin: 0 auto;\n  height: 224px;\n  background: url(images/octocat.png) no-repeat;\n  margin-right: 16px;\n}\n\n.content {\n  float: right;\n  width: 250px;\n}\n\n@media screen and (max-width: 350px) {\n  .octocat {\n    float: none;\n    margin: 5px auto;\n    display: block;\n  }\n\n  .content {\n    margin: 0 auto;\n    float: none;\n    text-align: center;\n  }\n}\n\nh3 {\n  font-weight: 300;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.component.html",
    "content": "<button class=\"menu-bar-btn github-widget\" [matMenuTriggerFor]=\"menu\">\n  <img alt=\"GitHub\" src=\"/assets/images/icons/github-icon.png\" />\n</button>\n\n<mat-menu #menu=\"matMenu\">\n  <div class=\"buttons-nav-bar-modal-content-wrapper\">\n    <div class=\"octocat\"></div>\n    <div class=\"content\">\n      <h2 class=\"modal-title\" i18n>This Codelab is written in Angular!</h2>\n      <h3 i18n>\n        It's 100% open-source and is available on\n        <a target=\"_blank\" href=\"https://github.com/codelab-fun/codelab\">\n          Github\n        </a>\n      </h3>\n      <h3 i18n>Please ⭐ the repo if you find it useful.</h3>\n    </div>\n  </div>\n</mat-menu>\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-menu-github-widget',\n  templateUrl: './menu-github-widget.component.html',\n  styleUrls: ['./menu-github-widget.component.css']\n})\nexport class MenuGithubWidgetComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MenuGithubWidgetComponent } from './menu-github-widget.component';\n\n@NgModule({\n  imports: [CommonModule, MatMenuModule],\n  declarations: [MenuGithubWidgetComponent],\n  exports: [MenuGithubWidgetComponent]\n})\nexport class MenuGithubWidgetModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-shortcut-widget/menu-shortcut-widget.component.css",
    "content": ".menu-bar-btn.index-menu {\n  background-color: #ff594b;\n}\n\nul,\nli {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n\na {\n  text-decoration: none;\n  cursor: pointer;\n  display: block;\n  padding: 6px 10px;\n}\n\na:hover {\n  background-color: #982a2a;\n  color: white;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-shortcut-widget/menu-shortcut-widget.component.html",
    "content": "<button class=\"menu-bar-btn index-menu\" [matMenuTriggerFor]=\"menu\">\n  <img alt=\"MenuShortcut\" src=\"/assets/images/home.png\" />\n</button>\n\n<mat-menu #menu=\"matMenu\">\n  <div class=\"buttons-nav-bar-modal-content-wrapper\">\n    <ul>\n      <li><a routerLink=\"/\">🏡 Index </a></li>\n      <li *ngFor=\"let navigationRoute of menuRoutes\">\n        <a [routerLink]=\"['/angular', navigationRoute['path']]\">\n          {{ navigationRoute['name'] }}\n        </a>\n      </li>\n    </ul>\n  </div>\n</mat-menu>\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-shortcut-widget/menu-shortcut-widget.component.ts",
    "content": "import { Component, Inject } from '@angular/core';\nimport { MENU_ROUTES } from '../../../common';\n\n@Component({\n  selector: 'codelab-menu-shortcut-widget',\n  templateUrl: './menu-shortcut-widget.component.html',\n  styleUrls: ['./menu-shortcut-widget.component.css']\n})\nexport class MenuShortcutWidgetComponent {\n  constructor(@Inject(MENU_ROUTES) readonly menuRoutes) {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/buttons-nav-bar/menu-shortcut-widget/menu-shortcut-widget.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MenuShortcutWidgetComponent } from './menu-shortcut-widget.component';\n\n@NgModule({\n  imports: [CommonModule, RouterModule, MatMenuModule],\n  declarations: [MenuShortcutWidgetComponent],\n  exports: [MenuShortcutWidgetComponent]\n})\nexport class MenuShortcutWidgetModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/codelab-components.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CodelabExerciseComponent } from './exercise/exercise.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSelectModule } from '@angular/material/select';\nimport { RouterModule } from '@angular/router';\nimport { DirectivesModule } from '../directives/directives.module';\nimport { TitleSlideComponent } from './slides/title-slide/title-slide.component';\nimport { CodelabClosingSlideComponent } from './slides/closing-slide/codelab-closing-slide.component';\nimport { CodelabExercisePreviewComponent } from './exercise-preview/exercise-preview.component';\nimport { CodelabExercisePlaygroundComponent } from './exercise-playground/codelab-exercise-playground.component';\nimport { CodelabProgressBarComponent } from './codelab-progress-bar/codelab-progress-bar.component';\nimport { BabelTestRunnerComponent } from './babel-test-runner/babel-test-runner.component';\nimport { CodelabRippleAnimationComponent } from './slides/title-slide/ripple-animation/codelab-ripple-animation.component';\nimport { SimpleAngularTestRunnerComponent } from './angular-test-runner/angular-test-runner.component';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { CodelabPreviewComponent } from './slides-preview/codelab-preview.component';\nimport { BreadcrumbComponent } from './breadcrumb/breadcrumb.component';\nimport { TestResultsModule } from '@codelab/utils/src/lib/test-results/test-results.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    RouterModule,\n    CodeDemoModule,\n    MatButtonModule,\n    MatMenuModule,\n    MatSelectModule,\n    TestResultsModule,\n    DirectivesModule\n  ],\n  declarations: [\n    SimpleAngularTestRunnerComponent,\n    TitleSlideComponent,\n    BabelTestRunnerComponent,\n    BreadcrumbComponent,\n    CodelabExerciseComponent,\n    CodelabPreviewComponent,\n    CodelabClosingSlideComponent,\n    CodelabExercisePreviewComponent,\n    CodelabExercisePlaygroundComponent,\n    CodelabProgressBarComponent,\n    CodelabRippleAnimationComponent\n  ],\n  exports: [\n    SimpleAngularTestRunnerComponent,\n    TitleSlideComponent,\n    BabelTestRunnerComponent,\n    BreadcrumbComponent,\n    CodelabExerciseComponent,\n    CodelabPreviewComponent,\n    CodelabClosingSlideComponent,\n    CodelabExercisePreviewComponent,\n    CodelabExercisePlaygroundComponent,\n    CodelabProgressBarComponent,\n    CodelabRippleAnimationComponent\n  ]\n})\nexport class CodelabComponentsModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/codelab-progress-bar/codelab-progress-bar.component.css",
    "content": ".progress-bar {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: 1;\n}\n\n.points-container {\n  display: flex;\n  height: 25px;\n}\n\n.points-container:hover .slide-block {\n  transition-duration: 0.5s;\n  height: 15px;\n}\n\n.slide-block {\n  flex-grow: 1;\n  height: 3px;\n  transition-duration: 0.5s;\n  background: #abb7b7;\n}\n\n.slide-block:hover {\n  background: #dadfe1;\n}\n\n.exercise-block {\n  background: #d35400;\n}\n\n.exercise-block:hover {\n  background: #f9690e;\n}\n\n.completed-slide {\n  background: #f89406;\n}\n\n.completed-slide:hover {\n  background: #e9d460;\n}\n\n.completed-slide.exercise-block {\n  background: #e67e22;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/codelab-progress-bar/codelab-progress-bar.component.html",
    "content": "<div class=\"progress-bar\" *ngIf=\"slides.length\">\n  <div class=\"points-container\" #progressBarDiv>\n    <div\n      class=\"slide-block\"\n      *ngFor=\"let slide of slides; let i = index\"\n      [class.exercise-block]=\"slide.isExercise\"\n      [class.completed-slide]=\"i <= activeSlideIndex\"\n      (click)=\"goToSlide(i)\"\n    ></div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/codelab-progress-bar/codelab-progress-bar.component.ts",
    "content": "import { AfterViewInit, Component } from '@angular/core';\nimport { SlidesDeckComponent } from '@ng360/slides';\n\n@Component({\n  selector: 'codelab-progress-bar',\n  templateUrl: './codelab-progress-bar.component.html',\n  styleUrls: ['./codelab-progress-bar.component.css']\n})\nexport class CodelabProgressBarComponent implements AfterViewInit {\n  slides = [];\n  activeSlideIndex = 0;\n  tempSlideId = 0;\n\n  constructor(public deck: SlidesDeckComponent) {}\n\n  ngAfterViewInit() {\n    // Change detection complains if updating it right away.\n    requestAnimationFrame(() => {\n      this.slides = this.deck.slides;\n      this.activeSlideIndex = this.deck.activeSlideIndex;\n    });\n\n    this.deck.slideChange.subscribe(index => {\n      this.activeSlideIndex = index;\n    });\n  }\n\n  previewSlide(index) {\n    this.tempSlideId = this.activeSlideIndex;\n    this.deck.goToSlide(index);\n  }\n\n  goToSlide(index) {\n    this.deck.goToSlide(index);\n    this.tempSlideId = this.activeSlideIndex;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/css/codelab-styles.scss",
    "content": "code-demo-file-path {\n  display: block;\n  margin: 1px 0;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise/exercise.component.css",
    "content": ".quarter {\n  width: 50vw;\n  height: 50vh;\n}\n\n.row {\n  display: flex;\n}\n\n.tests {\n  padding: 0.5vw;\n  box-sizing: border-box;\n  overflow-y: auto;\n}\n\n.solved-message {\n  margin-top: 16px;\n}\n\n.solved-message img {\n  display: block;\n  height: 280px;\n  margin-top: 16px;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise/exercise.component.html",
    "content": "<div *ngIf=\"code\">\n  <div class=\"row\">\n    <code-demo-multitab-editor\n      [codeDemoHighlight]=\"codeDemoHighlight\"\n      class=\"quarter\"\n      [autoSize]=\"false\"\n      [files]=\"files\"\n      [solutions]=\"solutions\"\n      [(ngModel)]=\"code\"\n      (ngModelChange)=\"update($event)\"\n    ></code-demo-multitab-editor>\n    <div class=\"quarter tests\">\n      <ng-content select=\".description\"></ng-content>\n      <codelab-simple-angular-test-runner\n        *ngIf=\"testRunner === 'iframe'\"\n        [translations]=\"translations\"\n        (selectFile)=\"files = [$event]\"\n        [bootstrap]=\"bootstrapTest\"\n        [code]=\"files$ | async\"\n        (solved)=\"isSolved = $event\"\n      ></codelab-simple-angular-test-runner>\n\n      <codelab-babel-test-runner\n        *ngIf=\"testRunner === 'babel'\"\n        [translations]=\"translations\"\n        [bootstrap]=\"bootstrapTest\"\n        (solved)=\"isSolved = $event; showDogs()\"\n        [code]=\"code\"\n      ></codelab-babel-test-runner>\n      <div *ngIf=\"isSolved\" class=\"solved-message\">\n        <button mat-button i18n nextSlide>\n          Well done! Now you can go to the next slide\n        </button>\n        <img\n          src=\"/assets/images/well_done.gif\"\n          i18n-alt\n          alt=\"Happy dogs celebrating your success\"\n        />\n      </div>\n    </div>\n  </div>\n  <div class=\"row\">\n    <codelab-preview class=\"quarter\" [milestone]=\"milestone\"></codelab-preview>\n    <code-demo-runner\n      class=\"quarter\"\n      [url]=\"url\"\n      [presets]=\"presets\"\n      [bootstrap]=\"bootstrap\"\n      [code]=\"files$ | async\"\n    ></code-demo-runner>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise/exercise.component.ts",
    "content": "import { ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { convertExerciseToMap } from '../../../../../../ng2ts/ng2ts';\nimport { CodeDemoComponent } from '@codelab/code-demos/src/lib/code-demo/code-demo.component';\n\nfunction filterByFileType(type: string, files: Record<string, string>) {\n  return Object.entries(files).reduce((changedFiles, [path, code]) => {\n    if (path.match(new RegExp(`\\\\\\.${type}$`))) {\n      changedFiles[path] = code;\n    }\n    return changedFiles;\n  }, {});\n}\n\nexport function extractSolutions(files: any[]) {\n  return files.reduce((result, file) => {\n    if (file.solution) {\n      result[file.path] = file.solution || file.template;\n    }\n\n    return result;\n  }, {});\n}\n\nexport function getChanges(current, previous) {\n  return Object.keys(current).reduce((changedFiles, path) => {\n    if (current[path] !== previous[path]) {\n      changedFiles[path] = current[path];\n    }\n    return changedFiles;\n  }, {});\n}\n\n@Component({\n  selector: 'codelab-exercise',\n  templateUrl: 'exercise.component.html',\n  styleUrls: ['./exercise.component.css']\n})\nexport class CodelabExerciseComponent extends CodeDemoComponent {\n  isSolved = false;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {\n    super();\n  }\n\n  showDogs() {\n    this.cdr.markForCheck();\n  }\n\n  @Input() set exercise(exercise) {\n    const map = convertExerciseToMap(exercise);\n\n    if (!this.highlights) {\n      this.highlights = map.highlights;\n    }\n    this.bootstrap = map.bootstrap;\n    this.bootstrapTest = map.bootstrapTest;\n    if (!this.files) {\n      this.files = [exercise.files[this.openFileIndex].path];\n    }\n    this.filesConfig = exercise;\n    this.solutions = extractSolutions(this.filesConfig.files);\n    this.code = map.code;\n    this.update(map.code);\n  }\n\n  retrieveFile(file, code) {\n    const f = this.filesConfig.files.find(f => f.path === file);\n    return (f.before || '') + code + (f.after || '');\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise-playground/codelab-exercise-playground.component.css",
    "content": ":host {\n  display: flex;\n  flex-direction: column;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise-playground/codelab-exercise-playground.component.html",
    "content": "<codelab-simple-angular-test-runner\n  *ngIf=\"bootstrapTest\"\n  [translations]=\"translations\"\n  (selectFile)=\"files = [$event]\"\n  [bootstrap]=\"bootstrapTest\"\n  [code]=\"files$ | async\"\n></codelab-simple-angular-test-runner>\n<div style=\" display: flex;height: 100%;\">\n  <div style=\"width: 50%;flex-grow: 0; display: flex;\">\n    <div *ngIf=\"path\" style=\"margin-left: 20px;color: red;\">{{ path }}</div>\n    <code-demo-multitab-editor\n      style=\"width: 100%\"\n      [displayFileName]=\"true\"\n      [allowSwitchingFiles]=\"allowSwitchingFiles\"\n      [highlights]=\"highlights\"\n      class=\"quarter\"\n      [files]=\"files\"\n      [solutions]=\"solutions\"\n      [(ngModel)]=\"code\"\n      (ngModelChange)=\"update($event)\"\n    ></code-demo-multitab-editor>\n  </div>\n\n  <code-demo-runner\n    [url]=\"url\"\n    style=\"width: 50%;flex-grow: 0\"\n    [ui]=\"ui\"\n    [presets]=\"presets\"\n    [bootstrap]=\"bootstrap\"\n    [code]=\"files$ | async\"\n  ></code-demo-runner>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise-playground/codelab-exercise-playground.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport { CodelabExerciseComponent } from '../exercise/exercise.component';\nimport { PreviewWindowType } from '@codelab/browser/src/lib/preview-window/preview-window.component';\n\n@Component({\n  selector: 'codelab-exercise-playground',\n  templateUrl: 'codelab-exercise-playground.component.html',\n  styleUrls: ['codelab-exercise-playground.component.css']\n})\nexport class CodelabExercisePlaygroundComponent extends CodelabExerciseComponent {\n  @Input() allowSwitchingFiles = false;\n  @Input() path = '';\n  @Input() ui: PreviewWindowType = 'browser';\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise-preview/exercise-preview.component.html",
    "content": "<code-demo-runner\n  [url]=\"url\"\n  style=\"width: 50%;flex-grow: 0\"\n  [presets]=\"presets\"\n  [bootstrap]=\"bootstrap\"\n  *ngIf=\"files$ | async as files\"\n  [code]=\"files\"\n></code-demo-runner>\n"
  },
  {
    "path": "apps/codelab/src/app/components/exercise-preview/exercise-preview.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport {\n  CodelabExerciseComponent,\n  extractSolutions\n} from '../exercise/exercise.component';\nimport { convertExerciseToMap } from '../../../../../../ng2ts/ng2ts';\n\n@Component({\n  selector: 'codelab-exercise-preview',\n  templateUrl: 'exercise-preview.component.html'\n  // styleUrls: ['../exercise/code-demo-code-demo.component.css'],\n})\nexport class CodelabExercisePreviewComponent extends CodelabExerciseComponent {\n  @Input() set exercise(exercise) {\n    const map = convertExerciseToMap(exercise);\n    this.filesConfig = exercise;\n    this.bootstrap = map.bootstrap;\n    this.code = extractSolutions(exercise.files);\n    this.update(this.code);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/external-link-directive/external-link-directive.directive.spec.ts",
    "content": "import { ExternalLinkDirectiveDirective } from './external-link-directive.directive';\n\ndescribe('ExternalLinkDirectiveDirective', () => {\n  it('should create an instance', () => {\n    const directive = new ExternalLinkDirectiveDirective({\n      nativeElement: document.createElement('a')\n    });\n    expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/external-link-directive/external-link-directive.directive.ts",
    "content": "import { Directive, Input, ElementRef } from '@angular/core';\n\n@Directive({\n  // tslint:disable-next-line\n  selector: '[href]'\n})\n// TODO(meinou): Remove the second postfix\nexport class ExternalLinkDirectiveDirective {\n  constructor({ nativeElement }: ElementRef) {\n    nativeElement.target = '_blank';\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/index/index.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div i18n=\"@@createFirstNgApp\" id=\"createFirstNgApp\">\n    Create your first Angular app\n  </div>\n  <div i18n=\"@@templates\" id=\"templates\">Templates</div>\n  <div i18n=\"@@dependencyInjection\" id=\"dependencyInjection\">\n    Dependency-Injection\n  </div>\n  <div i18n=\"@@componentTree\" id=\"componentTree\">Component-Tree</div>\n  <div i18n=\"@@customEvents\" id=\"customEvents\">Custom-Events</div>\n  <div i18n=\"@@angularWrittenInTypeScript\" id=\"angularWrittenInTypeScript\">\n    Angular is written in TypeScript, a superset of JavaScript. Learn\n    TypeScript.\n  </div>\n  <div i18n=\"@@learnHowToBootstrapApp\" id=\"learnHowToBootstrapApp\">\n    Learn how to create and bootstrap your first Angular application\n  </div>\n  <div i18n=\"@@learnUsingTemplates\" id=\"learnUsingTemplates\">\n    Learn how to use Angular templates\n  </div>\n  <div i18n=\"@@learnToProvideDependencies\" id=\"learnToProvideDependencies\">\n    Learn how to provide dependencies to your code instead of hard-coding them\n  </div>\n  <div\n    i18n=\"@@learnToStructureAppWithReusableComponents\"\n    id=\"learnToStructureAppWithReusableComponents\"\n  >\n    Learn how to structure your app with reusable components\n  </div>\n  <div i18n=\"@@learnToBindToEvents\" id=\"learnToBindToEvents\">\n    Learn to bind to events.\n  </div>\n</div>\n\n<slide-deck>\n  <codelab-sync-survey></codelab-sync-survey>\n  <codelab-buttons-nav-bar></codelab-buttons-nav-bar>\n\n  <div *slide id=\"index\">\n    <h1 i18n>Angular Codelab</h1>\n    <h2 i18n>\n      Welcome to the interactive Angular Codelab. Here you can learn the basics\n      of <a href=\"https://angular.io\">Angular</a>!\n    </h2>\n    <div class=\"play\">\n      <button\n        class=\"learn-box typescript\"\n        [routerLink]=\"['/angular', 'typescript', 'intro']\"\n      >\n        <span aria-hidden=\"true\">▶</span>\n        <div>\n          <div class=\"title\" i18n>Learn TypeScript</div>\n          <div class=\"hint\" i18n>Skip if you're familiar with TypeScript</div>\n        </div>\n        <img src=\"/assets/images/ts.png\" alt=\"TypeScript logo\" class=\"\" />\n      </button>\n      <button routerLink=\"/angular/create-first-app/intro\" class=\"learn-box\">\n        <span aria-hidden=\"true\">▶</span>\n        <div i18n>Learn Angular</div>\n        <img\n          src=\"/assets/images/angular.png\"\n          alt=\"Angular logo\"\n          class=\"angular\"\n        />\n      </button>\n    </div>\n\n    <button class=\"contents\" (click)=\"showContents = !showContents\" i18n>\n      Or click here to see full contents...\n    </button>\n    <ng-container *ngIf=\"showContents\">\n      <codelab-angular-routes></codelab-angular-routes>\n    </ng-container>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/codelab/src/app/components/index/index.component.scss",
    "content": ".intro li a:hover {\n  text-decoration: underline;\n}\n\n.intro li a {\n  text-decoration: none;\n  color: #888;\n}\n\n.intro ul {\n  margin: 0;\n  padding: 0;\n}\n\n.intro li {\n  margin: 0;\n  padding: 0;\n  padding-left: 21px;\n  font-size: 1.3vw;\n  margin-bottom: 16px;\n}\n\n.intro li h2 {\n  font-size: 2vw;\n}\n\n.feedback-shift {\n  position: fixed;\n  right: 107px;\n  bottom: 1vh;\n}\n\nimg .angular {\n  width: 30vw;\n}\n\n.learn-box:hover {\n  background: #eee;\n}\n\n.title {\n  color: #444;\n}\n\n.hint {\n  color: #666;\n  font-size: 3vw;\n}\n\n.learn-box.typescript {\n  opacity: 0.8;\n}\n\n.learn-box {\n  display: flex;\n  width: 100%;\n  font-size: 7vw;\n  justify-content: space-between;\n  background: #fafafa;\n  padding: 2vw;\n  margin-bottom: 2vw;\n  cursor: pointer;\n  border: 1px #999 solid;\n  border-radius: 10px;\n}\n\n.learn-box img {\n  width: 10vw;\n  height: 10vw;\n  font-size: 10px;\n}\n\n::ng-deep .slide {\n  display: block;\n}\n\n.play {\n  margin: 4vw 0;\n}\n\n.contents {\n  border-bottom: 1px #999 dashed;\n  display: inline-block;\n  cursor: pointer;\n  min-height: 20px;\n}\n\n::ng-deep {\n  .btn-bar {\n    z-index: 110;\n  }\n\n  .menu-bar-btn {\n    width: 45px;\n    height: 45px;\n    border-radius: 50%;\n    background: no-repeat center #3498db;\n    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\n    margin-left: 10px;\n    cursor: pointer;\n    border: none;\n    padding: 0;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/index/index.component.ts",
    "content": "import { Component, ViewChild } from '@angular/core';\n\n@Component({\n  selector: 'codelab-slides-index',\n  templateUrl: './index.component.html',\n  styleUrls: ['./index.component.scss']\n})\nexport class IndexComponent {\n  @ViewChild('translations', { static: false }) translations;\n\n  showContents: boolean;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/index/index.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { SlidesModule } from '@ng360/slides';\nimport { IndexComponent } from './index.component';\nimport { ButtonsNavBarModule } from '../buttons-nav-bar/buttons-nav-bar.module';\nimport { CodelabComponentsModule } from '../codelab-components.module';\nimport { SyncModule } from '../../sync/sync.module';\nimport { AngularRoutesModule } from '../angular-routes/angular-routes.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    ButtonsNavBarModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    MatCardModule,\n    SyncModule,\n    AngularRoutesModule\n  ],\n  declarations: [IndexComponent],\n  exports: [IndexComponent]\n})\nexport class IndexModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/login/login.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/components/login/login.component.html",
    "content": "<mat-card *ngIf=\"(loginService.isAnonymous$ | async) === false; else userInfo\">\n  <mat-card-content *ngIf=\"loginService.user$ | async as user\">\n    <div>user: {{ user.displayName || user.email }}</div>\n    <div>uid: {{ loginService.uid$ | async }}</div>\n  </mat-card-content>\n</mat-card>\n<ng-template #userInfo>\n  <button mat-button (click)=\"this.loginService.loginWithGithub()\">\n    Login with Github\n  </button>\n</ng-template>\n"
  },
  {
    "path": "apps/codelab/src/app/components/login/login.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { getMockAngularFireProviders } from '@codelab/utils/src/lib/testing/mocks/angular-fire';\nimport { LoginComponent } from './login.component';\nimport { LoginModule } from './login.module';\n\ndescribe('LoginComponent', () => {\n  let component: LoginComponent;\n  let fixture: ComponentFixture<LoginComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [LoginModule],\n      providers: [...getMockAngularFireProviders()]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LoginComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/login/login.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport { LoginService } from '@codelab/firebase-login';\nimport { auth } from 'firebase/app';\n\n@Component({\n  selector: 'codelab-login',\n  templateUrl: './login.component.html',\n  styleUrls: ['./login.component.css']\n})\nexport class LoginComponent {\n  constructor(\n    private auth: AngularFireAuth,\n    readonly loginService: LoginService\n  ) {}\n\n  login() {\n    this.auth.auth.signInWithPopup(new auth.GoogleAuthProvider());\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/login/login.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { RouterModule } from '@angular/router';\nimport { LoginComponent } from './login.component';\n\n@NgModule({\n  imports: [CommonModule, MatCardModule, RouterModule, MatButtonModule],\n  declarations: [LoginComponent]\n})\nexport class LoginModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/not-found/not-found.component.html",
    "content": "<div class=\"message\">\n  <div class=\"error-code\"><p>404</p></div>\n  <div class=\"error-message\">\n    <p class=\"header\">Oops! You're lost</p>\n    <p class=\"subheader\">The page you are looking for was not found.</p>\n  </div>\n</div>\n<nav>\n  <ul>\n    <li *ngFor=\"let route of routes\">\n      <a [routerLink]=\"route.path\">{{ route.name }}</a>\n    </li>\n  </ul>\n</nav>\n<codelab-buttons-nav-bar></codelab-buttons-nav-bar>\n"
  },
  {
    "path": "apps/codelab/src/app/components/not-found/not-found.component.scss",
    "content": ":host {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  height: 100%;\n  font-family: 'Helvetica Neue', sans-serif;\n\n  .message {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    .error-code {\n      font-size: 70px;\n      margin-right: 20px;\n    }\n\n    .error-message {\n      .header {\n        font-size: 20px;\n        font-weight: 600;\n      }\n\n      .subheader {\n        font-size: 14px;\n      }\n    }\n  }\n\n  nav {\n    max-width: 100%;\n    width: 400px;\n\n    ul {\n      display: flex;\n      justify-content: space-around;\n      width: 100%;\n      padding-inline-start: 0;\n\n      li {\n        list-style-type: none;\n      }\n    }\n  }\n}\n\n@media screen and (max-width: 500px) {\n  .container .message {\n    flex-direction: column;\n    text-align: center;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/not-found/not-found.component.ts",
    "content": "import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n  selector: 'codelab-not-found',\n  templateUrl: './not-found.component.html',\n  styleUrls: ['./not-found.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NotFoundComponent {\n  public routes = [\n    {\n      path: '',\n      name: 'Home'\n    },\n    {\n      path: '/angular/typescript',\n      name: 'Typescript'\n    },\n    {\n      path: '/angular',\n      name: 'Angular'\n    }\n  ];\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/not-found/not-found.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { ButtonsNavBarModule } from '../buttons-nav-bar/buttons-nav-bar.module';\nimport { NotFoundComponent } from './not-found.component';\n\n@NgModule({\n  imports: [CommonModule, RouterModule, ButtonsNavBarModule],\n  declarations: [NotFoundComponent]\n})\nexport class NotFoundModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/closing-slide/codelab-closing-slide.component.css",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/components/slides/closing-slide/codelab-closing-slide.component.html",
    "content": "<div class=\"last-slide\">\n  <div class=\"header\"><ng-content select=\"[header]\"></ng-content></div>\n  <div class=\"body\"><ng-content select=\"[body]\"></ng-content></div>\n\n  <div i18n class=\"info\">\n    This codelab is written in Angular and\n    <a target=\"_blank\" href=\"https://github.com/codelab-fun/codelab\"\n      >available on Github</a\n    >. Please ⭐ if you enjoyed it.\n  </div>\n\n  <div class=\"footer\"><ng-content select=\"[footer]\"></ng-content></div>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/closing-slide/codelab-closing-slide.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { CodelabClosingSlideComponent } from './codelab-closing-slide.component';\n\ndescribe('CodelabClosingSlideComponent', () => {\n  let component: CodelabClosingSlideComponent;\n  let fixture: ComponentFixture<CodelabClosingSlideComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [CodelabClosingSlideComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(CodelabClosingSlideComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/closing-slide/codelab-closing-slide.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-closing-slide',\n  templateUrl: './codelab-closing-slide.component.html',\n  styleUrls: ['./codelab-closing-slide.component.css']\n})\nexport class CodelabClosingSlideComponent implements OnInit {\n  @Input() header: String;\n  @Input() body: String;\n  @Input() footer: String;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/ripple-animation/codelab-ripple-animation.component.css",
    "content": "@keyframes circle {\n  from {\n    transform: scale(0);\n  }\n  to {\n    transform: scale(0.5);\n  }\n}\n\n.circle {\n  margin: 0 auto;\n  width: 25vw;\n  height: 25vw;\n  border: 1vw solid rgba(255, 89, 75, 0.1);\n  border-radius: 50%;\n  position: absolute;\n  left: 0;\n  top: 0;\n}\n\n.one {\n  animation: circle 4s infinite linear;\n}\n\n.two {\n  animation: circle 3s infinite linear;\n}\n\n.three {\n  animation: circle 2s infinite linear;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/ripple-animation/codelab-ripple-animation.component.html",
    "content": "<div class=\"circle one\"></div>\n<div class=\"class circle two\"></div>\n<div class=\"circle three\"></div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/ripple-animation/codelab-ripple-animation.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { CodelabRippleAnimationComponent } from './codelab-ripple-animation.component';\n\ndescribe('CodelabRippleAnimationComponent', () => {\n  let component: CodelabRippleAnimationComponent;\n  let fixture: ComponentFixture<CodelabRippleAnimationComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [CodelabRippleAnimationComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(CodelabRippleAnimationComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/ripple-animation/codelab-ripple-animation.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-ripple-animation',\n  templateUrl: './codelab-ripple-animation.component.html',\n  styleUrls: ['./codelab-ripple-animation.component.css']\n})\nexport class CodelabRippleAnimationComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/title-slide.component.css",
    "content": ":host {\n  height: 100%;\n}\n\n.title-slide {\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n}\n\n.header {\n  flex: 0.5;\n  display: flex;\n  justify-content: flex-end;\n  flex-direction: column;\n  background: #982a2a;\n  color: white;\n  font-size: 10vw;\n  padding: 2vw;\n}\n\n.contents {\n  padding: 2vw;\n  display: flex;\n  flex-direction: column;\n  flex: 0.5;\n}\n\n.description {\n  font-size: 5vw;\n}\n\n.instructions {\n  flex-grow: 1;\n  font-size: 4vw;\n  color: #666;\n  margin-top: 20px;\n}\n\n.left-half-ripple {\n  overflow: hidden;\n  margin: 0;\n  height: 25vw;\n  width: calc(25vw / 2 + 2vw);\n  position: absolute;\n  top: calc(50% - 25vw / 2);\n  right: 0;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/title-slide.component.html",
    "content": "<div class=\"title-slide\">\n  <div class=\"header\">{{ title }}</div>\n  <div class=\"contents\">\n    <div class=\"description\">{{ description }}</div>\n\n    <div class=\"instructions\" i18n>\n      Use <b>←</b> and <b>→</b> on your keyboard to navigate the slides.\n    </div>\n\n    <div class=\"prereqs\">\n      <strong *ngIf=\"prereqs\" i18n>Prerequisites:</strong> {{ prereqs }}\n    </div>\n  </div>\n</div>\n<codelab-ripple-animation class=\"left-half-ripple\"></codelab-ripple-animation>\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/title-slide.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\n\nimport { TitleSlideComponent } from './title-slide.component';\nimport { CodelabRippleAnimationComponent } from './ripple-animation/codelab-ripple-animation.component';\n\ndescribe('TitleSlideComponent', () => {\n  let component: TitleSlideComponent;\n  let fixture: ComponentFixture<TitleSlideComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [CodelabRippleAnimationComponent, TitleSlideComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TitleSlideComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n\n  it('should render a title', () => {\n    component.title = 'awesome title';\n    fixture.detectChanges();\n    const el = fixture.debugElement.query(By.css('.header'));\n    expect(el.nativeElement.textContent).toContain('awesome title');\n  });\n\n  it('should render a description', () => {\n    component.description = 'hello world!';\n    fixture.detectChanges();\n    const el = fixture.debugElement.query(By.css('.description'));\n    expect(el.nativeElement.textContent).toContain('hello world!');\n  });\n\n  it('should render prerequisites', () => {\n    component.prereqs = 'do this first';\n    fixture.detectChanges();\n    const el = fixture.debugElement.query(By.css('.prereqs'));\n    expect(el.nativeElement.textContent).toContain('do this first');\n    expect(el.nativeElement.textContent).toContain('Prerequisites');\n  });\n\n  it('should not show \"Prerequisites\" if undefined', () => {\n    component.prereqs = undefined;\n    fixture.detectChanges();\n    const el = fixture.debugElement.query(By.css('.prereqs'));\n    expect(el.nativeElement.textContent).not.toContain('Prerequisites');\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides/title-slide/title-slide.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'codelab-title-slide',\n  templateUrl: './title-slide.component.html',\n  styleUrls: ['./title-slide.component.css']\n})\nexport class TitleSlideComponent {\n  @Input() title: string;\n  @Input() description: string;\n  @Input() prereqs: string;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides-preview/codelab-preview.component.html",
    "content": "<div\n  data-step=\"3\"\n  data-intro=\"You can reference the slides for this milestone here.\"\n  data-position=\"top\"\n  class=\"codelab-preview\"\n  [class.expanded]=\"isExpanded\"\n>\n  <div class=\"preview-header\">\n    <button class=\"button-expand\" (click)=\"expandToggle()\"></button>\n  </div>\n  <div class=\"body\">\n    <iframe *ngIf=\"milestone\" [src]=\"iframeSource\"></iframe>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides-preview/codelab-preview.component.scss",
    "content": ".codelab-preview {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n.codelab-preview.expanded {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 100;\n  background-color: #fff;\n}\n\n.preview-header {\n  position: absolute;\n  right: 1px;\n  top: 1px;\n}\n\n.button-expand {\n  outline: none;\n  width: 35px;\n  height: 35px;\n  padding: 0;\n  border: 0;\n  background-image: url('/assets/images/expand.png');\n  background-color: #fff;\n  background-size: 100% 100%;\n  cursor: pointer;\n\n  &:hover {\n    background-color: #eee;\n  }\n}\n\niframe {\n  box-shadow: 0 0 1px #dddddd;\n  border: 0 solid;\n}\n\n.body,\niframe {\n  width: 100%;\n  height: 100%;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/components/slides-preview/codelab-preview.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\n\n@Component({\n  selector: 'codelab-preview',\n  templateUrl: './codelab-preview.component.html',\n  styleUrls: ['./codelab-preview.component.scss']\n})\nexport class CodelabPreviewComponent implements OnInit {\n  @Input() milestone;\n  public isExpanded: boolean;\n  private iframeSource;\n\n  constructor(\n    private sanitizer: DomSanitizer,\n    private router: Router,\n    private activatedRoute: ActivatedRoute,\n    private location: Location\n  ) {}\n\n  ngOnInit() {\n    const url = this.location.prepareExternalUrl(\n      this.router\n        .createUrlTree(['.'], {\n          relativeTo: this.activatedRoute,\n          queryParams: {\n            milestone: this.milestone,\n            hideControls: true,\n            resize: true\n          },\n          queryParamsHandling: 'merge'\n        })\n        .toString()\n    );\n\n    this.iframeSource = this.sanitizer.bypassSecurityTrustResourceUrl(url);\n  }\n\n  expandToggle() {\n    return (this.isExpanded = !this.isExpanded);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/containers/full-layout/full-layout.component.html",
    "content": "<router-outlet></router-outlet>\n<codelab-sync-survey></codelab-sync-survey>\n<codelab-buttons-nav-bar\n  [style.display]=\"displayButtons ? '' : 'none'\"\n></codelab-buttons-nav-bar>\n"
  },
  {
    "path": "apps/codelab/src/app/containers/full-layout/full-layout.component.scss",
    "content": ""
  },
  {
    "path": "apps/codelab/src/app/containers/full-layout/full-layout.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, Optional } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n  selector: 'codelab-full-layout',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './full-layout.component.html',\n  styleUrls: ['./full-layout.component.scss']\n})\nexport class FullLayoutComponent {\n  displayButtons: boolean;\n  constructor(@Optional() route: ActivatedRoute) {\n    this.displayButtons = !route.snapshot.queryParams.milestone;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/containers/full-layout/full-layout.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FullLayoutComponent } from './full-layout.component';\nimport { SyncModule } from '../../sync/sync.module';\nimport { ButtonsNavBarModule } from '../../components/buttons-nav-bar/buttons-nav-bar.module';\n\n@NgModule({\n  imports: [RouterModule, SyncModule, ButtonsNavBarModule],\n  declarations: [FullLayoutComponent]\n})\nexport class FullLayoutModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/containers/full-layout/index.ts",
    "content": "export * from './full-layout.component';\n"
  },
  {
    "path": "apps/codelab/src/app/containers/index.ts",
    "content": "export * from './full-layout';\n"
  },
  {
    "path": "apps/codelab/src/app/directives/directives.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { IsLoggedInDirective } from './permissions/is-logged-in/is-loggef-in.directive';\nimport { CanLoadAdminDirective } from './permissions/can-load-admin/can-load-admin.directive';\nimport { NextSlideDirective } from './nextSlide.directive';\nimport { PreviousSlideDirective } from './previousSlide.directive';\n\n@NgModule({\n  declarations: [\n    IsLoggedInDirective,\n    CanLoadAdminDirective,\n    NextSlideDirective,\n    PreviousSlideDirective\n  ],\n  exports: [\n    IsLoggedInDirective,\n    CanLoadAdminDirective,\n    NextSlideDirective,\n    PreviousSlideDirective\n  ]\n})\nexport class DirectivesModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/directives/nextSlide.directive.ts",
    "content": "import { Directive, HostListener } from '@angular/core';\nimport { SlidesDeckComponent } from '@ng360/slides';\n\n@Directive({\n  selector: '[nextSlide]'\n})\nexport class NextSlideDirective {\n  constructor(public deck: SlidesDeckComponent) {}\n\n  @HostListener('click')\n  onClick() {\n    this.deck.nextSlide();\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/directives/permissions/abstract-permission.ts",
    "content": "import {\n  TemplateRef,\n  ViewContainerRef,\n  OnDestroy,\n  Injectable\n} from '@angular/core';\nimport { AccessService } from '../../shared/services/access.service';\nimport { ReplaySubject, Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n@Injectable()\nexport class AbstractPermission implements OnDestroy {\n  public destroy = new ReplaySubject<any>(1);\n\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef,\n    public accessService: AccessService\n  ) {}\n\n  ngOnDestroy() {\n    this.destroy.next(null);\n    this.destroy.complete();\n  }\n\n  public render(observable: Observable<boolean>): void {\n    observable.pipe(takeUntil(this.destroy)).subscribe(hasPermission => {\n      if (hasPermission) {\n        this.viewContainer.createEmbeddedView(this.templateRef);\n      } else {\n        this.viewContainer.clear();\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/directives/permissions/can-load-admin/can-load-admin.directive.ts",
    "content": "import {\n  Directive,\n  OnInit,\n  TemplateRef,\n  ViewContainerRef\n} from '@angular/core';\nimport {\n  AccessService,\n  Permissions\n} from '../../../shared/services/access.service';\nimport { AbstractPermission } from '../abstract-permission';\n\n@Directive({\n  selector: '[canLoadAdmin]'\n})\nexport class CanLoadAdminDirective extends AbstractPermission\n  implements OnInit {\n  constructor(\n    templateRef: TemplateRef<any>,\n    viewContainer: ViewContainerRef,\n    accessService: AccessService\n  ) {\n    super(templateRef, viewContainer, accessService);\n  }\n\n  ngOnInit() {\n    this.render(this.accessService.can(Permissions.CAN_LOAD_ADMIN));\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/directives/permissions/is-logged-in/is-loggef-in.directive.ts",
    "content": "import {\n  Directive,\n  OnInit,\n  TemplateRef,\n  ViewContainerRef\n} from '@angular/core';\nimport { AccessService } from '../../../shared/services/access.service';\nimport { AbstractPermission } from '../abstract-permission';\n\n@Directive({\n  selector: '[isLoggedIn]'\n})\nexport class IsLoggedInDirective extends AbstractPermission implements OnInit {\n  constructor(\n    templateRef: TemplateRef<any>,\n    viewContainer: ViewContainerRef,\n    accessService: AccessService\n  ) {\n    super(templateRef, viewContainer, accessService);\n  }\n\n  ngOnInit() {\n    this.render(this.accessService.oldIsAdmin$);\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/directives/previousSlide.directive.ts",
    "content": "import { Directive, HostListener } from '@angular/core';\nimport { SlidesDeckComponent } from '@ng360/slides';\n\n@Directive({\n  selector: '[previousSlide]'\n})\nexport class PreviousSlideDirective {\n  constructor(public deck: SlidesDeckComponent) {}\n\n  @HostListener('click')\n  onClick() {\n    this.deck.previousSlide();\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/angular-code/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: 'Hi!'\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/angular-code/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/angular-code/bootstrap.ts",
    "content": "import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { ResourceLoader } from '@angular/compiler';\nimport * as code from './code';\nimport { AppModule } from './app.module';\n\nclass MyResourceLoader extends ResourceLoader {\n  get(url: string): Promise<string> {\n    const templateId = Object.keys(code).find(key =>\n      key.includes(url.replace(/[\\/\\.-]/gi, '_'))\n    );\n    const template = code[templateId];\n    if (!template) {\n      console.log(template);\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n    return Promise.resolve(template);\n  }\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, [\n  {\n    providers: [\n      {\n        provide: ResourceLoader,\n        useFactory: () => new MyResourceLoader(),\n        deps: []\n      }\n    ]\n  }\n]);\n"
  },
  {
    "path": "apps/codelab/src/app/shared/angular-code/code.ts",
    "content": "export const code = '';\n"
  },
  {
    "path": "apps/codelab/src/app/shared/angular-code/index.html",
    "content": "<!DOCTYPE >\n<style>\n  h2 {\n    font-family: 'Helvetica Neue', sans-serif;\n    font-size: 16px;\n    font-weight: 300;\n    background: #ddd;\n    border: 1px #444 solid;\n    padding: 20px;\n    border-radius: 4px;\n  }\n\n  h1 {\n    margin-top: 20px;\n    margin-bottom: 8px;\n    font-family: 'Helvetica Neue', sans-serif;\n    font-size: 18px;\n    font-weight: 300;\n    border-top: 1px #ddd solid;\n    padding-top: 20px;\n  }\n\n  h1:first-child {\n    border-top: 0;\n    padding-top: 0;\n  }\n</style>\n\n<body>\n  <my-app>\n    Loading...\n  </my-app>\n</body>\n"
  },
  {
    "path": "apps/codelab/src/app/shared/helpers/codelabFile.ts",
    "content": "import { FileConfig } from '../interfaces/file-config';\n\nexport enum FileType {\n  TypeScript = 'typescript',\n  Html = 'html',\n  Css = 'css'\n}\n\nconst fileConfig = {\n  [FileType.TypeScript]: {\n    extension: '.ts'\n  },\n  [FileType.Html]: {\n    extension: '.html'\n  },\n  [FileType.Css]: {\n    extension: '.css'\n  }\n};\n\nexport class CodelabFile implements FileConfig {\n  highlight?: RegExp | RegExp[];\n  after: string;\n  public code: string;\n  public template: string;\n  public solution: string;\n  public bootstrap = false;\n  public path: string;\n  public excludeFromTesting = false;\n  public test = false;\n  public before: string;\n  public hidden = false;\n\n  static TypeScriptFile(name: string): CodelabFile {\n    return new CodelabFile(FileType.TypeScript, name).setAfter(\n      'export function evalJs( js ){ return eval(js);}'\n    );\n  }\n\n  static TypeScriptTest(name: string): CodelabFile {\n    return new CodelabFile(FileType.TypeScript, name + 'Test').makeTest();\n  }\n\n  static Html(name: string): CodelabFile {\n    return new CodelabFile(FileType.Html, name);\n  }\n\n  static Css(name: string): CodelabFile {\n    return new CodelabFile(FileType.Css, name);\n  }\n\n  constructor(\n    public readonly type: FileType,\n    public readonly moduleName: string\n  ) {\n    this.path = moduleName + fileConfig[type].extension;\n  }\n\n  public setAfter(after: string): CodelabFile {\n    this.after = after;\n    return this;\n  }\n\n  public clone(): CodelabFile {\n    return Object.assign(Object.create(CodelabFile), this);\n  }\n\n  public makeBootstrappable(): CodelabFile {\n    this.bootstrap = true;\n    this.excludeFromTesting = true;\n    return this;\n  }\n\n  public makeHidden(): CodelabFile {\n    this.hidden = true;\n    return this;\n  }\n\n  public makeTest(): CodelabFile {\n    this.test = true;\n    this.before = 'mochaBefore();';\n    this.after = 'mochaAfter();';\n    this.excludeFromTesting = false;\n    this.makeHidden();\n    this.makeBootstrappable();\n    return this;\n  }\n\n  public setSolution(solution: string): CodelabFile {\n    this.solution = solution;\n    return this;\n  }\n\n  public withHighlight(highlight: RegExp | RegExp[]) {\n    this.highlight = highlight;\n    return this;\n  }\n\n  public setCode(code: string): CodelabFile {\n    this.code = code;\n    this.template = code;\n    if (!this.solution) {\n      this.solution = code;\n    }\n\n    return this;\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/helpers/helpers.ts",
    "content": "import { FileConfig } from '../interfaces/file-config';\n\nfunction exerciseWithConsoleLog(moduleName: string, code: any, code2: any) {\n  return {\n    ...exercise(moduleName, code, code2),\n    before: `\n\n    export const value = window.value = window.value || {};\n\n    function wrap(context, prop, callback){\n      if(!context[prop].patched){\n        const originalMethod = context[prop];\n\n         context[prop] = function(...args){\n          callback(...args);\n          return originalMethod.apply(context, args);\n         }\n\n         context[prop].patched = true;\n       }\n    }\n\n    /* TODO: Get rid of the CSS hack */\n\n    wrap(console, 'log', (v)=>{\n      value.value = v;\n      document.body.innerHTML += '<pre style=\"font-family: roboto-mono, monospace;font-size: 3vw; font-weight: 400; margin: 0;\">' +\n       '<span style=\"color: #999;font-size: 2vw;\">＜</span> ' + JSON.stringify(v, null, '  ') + '</pre> ' +\n       '<hr style=\"margin-left: 2vw;border: 0 solid;\">'\n         document.body.scrollTop = document.body.scrollHeight;\n    })\n  `\n  };\n}\n\nexport function exercise(\n  moduleName: string,\n  template: string,\n  solution?: string\n): FileConfig {\n  solution = solution || template;\n\n  return {\n    bootstrap: false,\n    excludeFromTesting: false,\n    type: 'typescript',\n    path: moduleName + '.ts',\n    template,\n    code: template,\n    moduleName: moduleName,\n    solution,\n    after: `export function evalJs( js ){ return eval(js);}`\n  };\n}\n\nexport function test(moduleName: string, template: string): FileConfig {\n  return {\n    path: moduleName + 'Test.ts',\n    type: 'typescript',\n    template,\n    code: template,\n    moduleName: moduleName + 'Test',\n    excludeFromTesting: false,\n    test: true,\n    bootstrap: true,\n    before: 'mochaBefore();',\n    after: 'mochaAfter();',\n    hidden: true\n  };\n}\n\ninterface SimpleImport {\n  name: string;\n  path: string;\n}\n\nexport const builder = {\n  imports(imports: Array<SimpleImport>) {\n    return imports.map(i => `import {${i.name}} from '${i.path}';`).join('\\n');\n  },\n  listOfComponents: (components: Array<SimpleImport>) => {\n    return `[${components.map(c => c.name).join(',')}]`;\n  },\n\n  ngModule(\n    declarations: Array<SimpleImport> = [\n      {\n        name: 'AppComponent',\n        path: './app.component'\n      }\n    ],\n    bootstrapComponent?: Array<SimpleImport>\n  ) {\n    bootstrapComponent = bootstrapComponent || declarations;\n\n    return `import {BrowserModule} from \\'@angular/platform-browser\\';\nimport {NgModule} from \\'@angular/core\\';\n${this.imports(declarations)}\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: ${this.listOfComponents(declarations)},\n  bootstrap: ${this.listOfComponents(bootstrapComponent)}\n})\nexport class AppModule {}`;\n  },\n\n  bootstrap(\n    module: SimpleImport = { name: 'AppModule', path: './app.module' }\n  ): string {\n    return `import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\n${this.imports([module])}\n\nimport {ResourceLoader} from '@angular/compiler';\nclass MyResourceLoader extends ResourceLoader {\n  get(url: string): Promise<string> {\n    const templateId = Object.keys(code).find(key => key.includes(url.replace(/[\\\\/\\\\.-]/gi, '_')));\n    const template = code[templateId];\n    if (!template) {\n      console.log(template);\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n    return Promise.resolve(template);\n  };\n}\n\n\n\n\nconst platform = platformBrowserDynamic();\nplatform.bootstrapModule(${module.name}, [\n  {\n    providers: [\n      {provide: ResourceLoader, useFactory: () => new MyResourceLoader(), deps: []}\n    ]\n  }\n]);\n\n`;\n  }\n};\n\nexport function html(path = 'app', code, solution = '') {\n  return {\n    code,\n    path: path + '.html',\n    solution: solution,\n    type: 'html'\n  };\n}\n\nexport function stylesheet(code, solution = '') {\n  return {\n    code,\n    path: 'style.css',\n    solution: solution || code,\n    type: 'css'\n  };\n}\n\nexport function bootstrap(\n  moduleName: string,\n  template: string,\n  solution?: string\n) {\n  solution = solution || template;\n  return {\n    bootstrap: true,\n    excludeFromTesting: true,\n    type: 'typescript',\n    path: moduleName + '.ts',\n    template,\n    code: template,\n    moduleName: moduleName,\n    solution\n  };\n}\n\nexport function circleAndBox() {\n  const result = boxAndCircle();\n  const temp = result.files[0];\n  result.files[0] = result.files[1];\n  result.files[1] = temp;\n  return result;\n}\n\n// That's me being plain lazy, we need\nexport function boxAndCircle() {\n  const moduleCode = `import {BrowserModule} from \\'@angular/platform-browser\\';\n  import {NgModule} from '@angular/core';\n  import {BoxComponent} from './box.component';\n  import {CircleComponent} from './circle.component';\n\n  @NgModule({\n    imports: [BrowserModule],\n    declarations: [CircleComponent, BoxComponent],\n    bootstrap: [BoxComponent]\n  })\n  export class AppModule {}`;\n  const circleCode = `import { Component, Input } from '@angular/core';\n\n  @Component({\n    selector: 'slides-circle',\n    template: '<div class=\"circle\" [style.width]=\"size\" [style.height]=\"size\" [style.background]=\"color\"></div>'\n  })\n  export class CircleComponent {\n    @Input() size: number;\n    @Input() color: string;\n  }`;\n\n  const boxCode = `import { Component } from '@angular/core';\n\n  @Component({\n    selector: 'my-app',\n    template: \\`<div><slides-circle\n      [size]=\"5\"\n      [color]=\"circleColor\"></slides-circle></div>\\`\n  })\n  export class BoxComponent {\n    circleColor=\"green\"\n  }`;\n\n  const bootstrapCode = `import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\nimport {AppModule} from './app.module';\nplatformBrowserDynamic().bootstrapModule(AppModule)\n`;\n\n  return {\n    other: {\n      boxNoParams: `import { Component } from '@angular/core';\n\n  @Component({\n    selector: 'slides-box',\n    template: \\`<div><slides-circle></slides-circle></div>\\`\n  })\n  export class BoxComponent {\n    circleColor=\"green\"\n  }`\n    },\n    files: [\n      exercise('box.component', boxCode),\n      exercise('circle.component', circleCode),\n      exercise('app.module', moduleCode),\n      bootstrap('main', bootstrapCode, bootstrapCode),\n      {\n        type: 'css',\n        path: 'styles.css',\n        template: `\n         my-app > div {\n           width: 300px;\n           height: 200px;\n           border: 1px #ddd solid;\n         }\n         .circle {\n           margin-left: 100px;\n           margin-top: 50px;\n           border-radius: 50%;\n         }\n        `\n      }\n    ]\n  };\n}\n\nexport function displayAngularComponent(\n  componentCode: string,\n  testCode?: string\n) {\n  // tslint:disable-next-line:max-line-length TODO: Clean up next line and remove this comment.\n  const moduleCode = builder.ngModule();\n  const bootstrapCode = builder.bootstrap();\n\n  return {\n    files: [\n      exercise('app.component', componentCode),\n      exercise('app.module', moduleCode),\n      bootstrap('main', bootstrapCode, bootstrapCode),\n      {\n        type: 'css',\n        path: 'styles.css',\n        code: `\n          body, html {\n            margin: 0;\n            padding: 2vw;\n            font-family: sans-serif;\n          }\n\n          h1, h2 {\n            margin: 0;\n            padding: 0;\n          }\n\n          h1 {font-size: 6vw;}\n          h2 {font-size: 4vw;}\n        `\n      },\n      ...(testCode ? [test('test', testCode)] : [])\n    ]\n  };\n}\n\nexport function typeScriptWithConsoleLog(\n  code: string,\n  bootstrapCode = 'import \"./app\";',\n  testCode = '',\n  otherCode = ''\n) {\n  const files = [\n    exerciseWithConsoleLog('app', code, code),\n    bootstrap('main', bootstrapCode, bootstrapCode),\n    test('test', testCode),\n    {\n      path: 'main.css',\n      type: 'css',\n      code: ``\n    }\n  ];\n  if (otherCode !== '') {\n    files.push(exercise('puppy', otherCode));\n  }\n  return {\n    files\n  };\n}\n\nexport function javaScriptWithConsoleLog(\n  code: string,\n  bootstrapCode = 'import \"./app\";',\n  testCode = '',\n  otherCode = ''\n) {\n  const result = typeScriptWithConsoleLog(\n    code,\n    bootstrapCode,\n    testCode,\n    otherCode\n  );\n  (result.files[0] as FileConfig).editorType = 'javascript';\n  return result;\n}\n\nexport function displayAngularComponentWithHtml(\n  componentCode: string,\n  code: string\n) {\n  return {\n    files: [\n      {\n        code,\n        path: 'app/app.html',\n        solution: '',\n        type: 'html'\n      },\n      ...displayAngularComponent(componentCode).files\n    ]\n  };\n}\n\nexport function solve(exerciseConfig) {\n  return {\n    ...exerciseConfig,\n    files: exerciseConfig.files.map(file => ({\n      ...file,\n      code: file.solution || file.code\n    }))\n  };\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/interfaces/exercise-config.ts",
    "content": "import { FileConfig } from './file-config';\nimport { TestInfo } from './test-info';\n\nexport interface ExerciseConfig {\n  name: string;\n  description: string;\n  runner?: string;\n  files: Array<FileConfig>;\n  skipTests?: boolean;\n  tests?: Array<TestInfo>;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/interfaces/file-config.ts",
    "content": "export interface FileConfig {\n  opened?: boolean;\n  /**\n   * typescript or html.\n   */\n  type?: string;\n\n  /**\n   * Source code of the file.\n   */\n  code?: string;\n\n  template: string;\n  /**\n   * Source code of the file.\n   */\n  solution?: string;\n\n  /**\n   * TS code to run before running the file.\n   */\n  before?: string;\n\n  /**\n   * TS code to run after running the file.\n   */\n  after?: string;\n\n  /**\n   * Usually the same as fileName without .ts postfix.\n   * Currently gets inferred from filename.\n   */\n  moduleName?: string;\n\n  /**\n   * Actual filename.\n   */\n  path: string;\n\n  /**\n   * If this is true; the file will be included in the preview iframe.\n   */\n  ui?: boolean;\n\n  /**\n   * If this is true\n   */\n  bootstrap?: boolean;\n\n  excludeFromTesting?: boolean;\n\n  /**\n   * if this is true; the file will be displayed in read only mode.\n   */\n  readonly?: boolean;\n\n  /**\n   * If this is true the file will be included in the test iframe.\n   */\n  test?: boolean;\n\n  /**\n   * If this is true; the file will be hidden.\n   */\n  hidden?: boolean;\n\n  /**\n   * File dependencies, need for proper highlighting in monaco.\n   */\n\n  editorType?: string;\n\n  // If this is set, this will be executed as a test.\n  // This is a hack and will be removed.\n  execute?: any;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/interfaces/test-info.ts",
    "content": "import { FileConfig } from './file-config';\n\nexport interface TestInfo {\n  title: string;\n  file: FileConfig;\n  pass?: boolean;\n  result?: string;\n  filename?: string;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/services/access.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { LoginService } from '@codelab/firebase-login';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { filter, switchMap } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { SyncDb } from '@codelab/utils/src/lib/sync/services/sync-data.service';\n\nexport enum Permissions {\n  MANAGE_USERS = 'manage_users',\n  CAN_LOAD_ADMIN = 'can_load_admin'\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AccessService {\n  readonly oldIsAdmin$ = this.loginService.uid$.pipe(\n    switchMap(uid => {\n      return this.dbService\n        .object('authorized_users')\n        .object(uid)\n        .withDefault(false)\n        .valueChanges();\n    })\n  );\n\n  private readonly adminPermissions = this.dbService\n    .object('admin')\n    .object(this.loginService.uid$)\n    .object('permissions');\n\n  constructor(\n    private readonly loginService: LoginService,\n    private readonly dbService: SyncDbService<SyncDb>\n  ) {}\n\n  can(p: Permissions): Observable<boolean> {\n    return (\n      this.adminPermissions\n        // TODO(kirjs): default: false\n        .object(p)\n        .valueChanges()\n        .pipe(filter(a => a !== null))\n    );\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/services/guards/admin-guard.ts",
    "content": "import { Injectable } from '@angular/core';\nimport {\n  Router,\n  RouterStateSnapshot,\n  ActivatedRouteSnapshot,\n  CanActivate\n} from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AccessService, Permissions } from '../access.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AdminGuard implements CanActivate {\n  constructor(private _route: Router, private accessService: AccessService) {}\n\n  canActivate(\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Observable<boolean> | boolean {\n    return true;\n    return this.accessService.can(Permissions.CAN_LOAD_ADMIN).pipe(\n      map(hasAccess => {\n        if (!hasAccess) {\n          this._route.navigate(['login']);\n          return false;\n        }\n\n        return true;\n      })\n    );\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/services/guards/login-guard.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { Router, RouterStateSnapshot, CanActivate } from '@angular/router';\nimport { LoginService } from '@codelab/firebase-login';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LoginGuard implements CanActivate {\n  constructor(private _route: Router, private loginService: LoginService) {}\n\n  canActivate(\n    ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Observable<boolean> | boolean {\n    return this.loginService.isAnonymous$.pipe(\n      map(res => {\n        if (res) {\n          // user is anonymous\n          return true;\n        }\n        // user is logged in, navigate to home\n        this._route.navigate(['/']);\n        return false;\n      })\n    );\n  }\n}\n"
  },
  {
    "path": "apps/codelab/src/app/shared/shared.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SlidesModule } from '@ng360/slides';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { CodelabComponentsModule } from '../components/codelab-components.module';\nimport { ButtonsNavBarModule } from '../components/buttons-nav-bar/buttons-nav-bar.module';\nimport { SyncModule } from '../sync/sync.module';\n\n@NgModule({\n  imports: [\n    HttpClientModule,\n    FormsModule,\n    RouterModule,\n    CodeDemoModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    ButtonsNavBarModule,\n    SyncModule\n  ],\n  exports: [\n    HttpClientModule,\n    FormsModule,\n    CodeDemoModule,\n    CodelabComponentsModule,\n    SlidesModule,\n    ButtonsNavBarModule\n  ]\n})\nexport class SharedModule {}\n"
  },
  {
    "path": "apps/codelab/src/app/sync/sync.component.css",
    "content": ".survey {\n  opacity: 0.98;\n  position: absolute;\n  top: 20px;\n  left: 20px;\n  bottom: 20px;\n  right: 20px;\n  border: 1px solid #000;\n  background-color: #fff;\n  padding: 20px;\n  z-index: 1000;\n  font-family: sans-serif;\n}\n\nh1 {\n  text-align: center;\n}\n"
  },
  {
    "path": "apps/codelab/src/app/sync/sync.component.html",
    "content": "<div class=\"survey\" *ngIf=\"shouldShowPresentation$ | async; else userId\">\n  <h1>Quick Survey</h1>\n\n  <slide-deck>\n    <div *isPresenting slideShortcuts></div>\n\n    <codelab-sync-button name=\"default\"></codelab-sync-button>\n    <codelab-configure-sync></codelab-configure-sync>\n    <div *slide>\n      <codelab-poll [poll]=\"polls[0]\">\n        <div class=\"question\"></div>\n      </codelab-poll>\n    </div>\n\n    <div *slide>\n      <codelab-poll [poll]=\"polls[1]\">\n        <div class=\"question\"></div>\n      </codelab-poll>\n    </div>\n\n    <div *slide>\n      <codelab-poll [poll]=\"polls[2]\">\n        <div class=\"question\"></div>\n      </codelab-poll>\n    </div>\n\n    <div *slide>\n      <codelab-poll [poll]=\"polls[3]\">\n        <div class=\"question\"></div>\n      </codelab-poll>\n    </div>\n  </slide-deck>\n</div>\n<ng-template #userId>\n  <ng-container *ngIf=\"admin\">\n    {{ userId$ | async }}\n  </ng-container>\n</ng-template>\n"
  },
  {
    "path": "apps/codelab/src/app/sync/sync.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncComponent } from './sync.component';\nimport { SyncModule } from './sync.module';\nimport { AngularFireDatabase } from '@angular/fire/database';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport {\n  getMockAngularFireProviders,\n  MockAngularFireAuth,\n  MockAngularFireDatabase\n} from '@codelab/utils/src/lib/testing/mocks/angular-fire';\n\ndescribe('SyncComponent', () => {\n  let component: SyncComponent;\n  let fixture: ComponentFixture<SyncComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SyncModule],\n      providers: [getMockAngularFireProviders()]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/codelab/src/app/sync/sync.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { switchMap } from 'rxjs/operators';\nimport {\n  canWritePresenterData,\n  SyncStatus\n} from '@codelab/utils/src/lib/sync/common';\nimport { of } from 'rxjs';\n\n@Component({\n  selector: 'codelab-sync-survey',\n  templateUrl: './sync.component.html',\n  styleUrls: ['./sync.component.css']\n})\nexport class SyncComponent {\n  @Input() admin = false;\n  readonly userId$ = this.syncSessionService.viewerId$;\n\n  readonly isPresentationEnabled$ = this.syncDataService\n    .getPresenterObject('enabled')\n    .withDefault(false)\n    .valueChanges();\n\n  readonly shouldShowPresentation$ = this.syncSessionService.status$.pipe(\n    switchMap(s => {\n      if (canWritePresenterData(s)) {\n        return of(true);\n      }\n\n      if (s === SyncStatus.OFF) {\n        return this.admin\n          ? this.syncSessionService.canStartSession$\n          : of(false);\n      }\n\n      return this.isPresentationEnabled$;\n    })\n  );\n\n  polls: SyncPollConfig[] = [\n    {\n      key: 'js',\n      type: 'stars',\n      question: 'How well do you know JavaScript'\n    },\n    {\n      key: 'ts',\n      type: 'stars',\n      question: 'How well do you know TypeScript'\n    },\n    {\n      key: 'angularjs',\n      type: 'stars',\n      question: 'How well do you know AngularJS (Old version)'\n    },\n    {\n      key: 'angular',\n      type: 'stars',\n      question:\n        'How well do you know Angular (The new version we are learning today)'\n    }\n  ];\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    private readonly syncSessionService: SyncSessionService\n  ) {}\n}\n"
  },
  {
    "path": "apps/codelab/src/app/sync/sync.module.ts",
    "content": "import { Component, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { SyncPollModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll.module';\nimport { SyncButtonModule } from '@codelab/utils/src/lib/sync/sync-button/sync-button.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { ConfigureSyncModule } from '@codelab/utils/src/lib/sync/components/configure-sync/configure-sync.module';\nimport { SyncComponent } from './sync.component';\n\n@NgModule({\n  declarations: [SyncComponent],\n  exports: [SyncComponent],\n  imports: [\n    CommonModule,\n    SlidesModule,\n    SyncPollModule,\n    SyncButtonModule,\n    SyncDirectivesModule,\n    ConfigureSyncModule\n  ]\n})\nexport class SyncModule {}\n\n@Component({\n  selector: 'codelab-sync-admin-wrapper',\n  template: '<codelab-sync-survey [admin]=\"true\"></codelab-sync-survey>'\n})\nexport class SyncAdminWrapperComponent {}\n\nconst routes = RouterModule.forChild(\n  SlidesRoutes.get(SyncAdminWrapperComponent)\n);\n\n@NgModule({\n  declarations: [SyncAdminWrapperComponent],\n  imports: [SyncModule, routes]\n})\nexport class SyncAdminModule {}\n"
  },
  {
    "path": "apps/codelab/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "apps/codelab/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true,\n\n  // Firebase\n  // TODO: Create a new firebase app/config for prod deploy.\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n"
  },
  {
    "path": "apps/codelab/src/environments/environment.ts",
    "content": "// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\n// The list of which env maps to which file can be found in `.angular-cli.json`.\n\nexport const environment = {\n  production: false,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n"
  },
  {
    "path": "apps/codelab/src/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Angular Codelab</title>\n    <base href=\"/\" />\n    <script>\n      (function(i, s, o, g, r, a, m) {\n        i['GoogleAnalyticsObject'] = r;\n        (i[r] =\n          i[r] ||\n          function() {\n            (i[r].q = i[r].q || []).push(arguments);\n          }),\n          (i[r].l = 1 * new Date());\n        (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);\n        a.async = 1;\n        a.src = g;\n        m.parentNode.insertBefore(a, m);\n      })(\n        window,\n        document,\n        'script',\n        'https://www.google-analytics.com/analytics.js',\n        'ga'\n      );\n\n      ga('create', 'UA-98631463-1', 'auto');\n      ga('send', 'pageview');\n    </script>\n    <link\n      href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\"\n    />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\" />\n    <link rel=\"apple-touch-icon\" href=\"assets/icons/touch-icon-ios.png\" />\n    <link rel=\"manifest\" href=\"manifest.webmanifest\" />\n    <meta name=\"theme-color\" content=\"#1976d2\" />\n  </head>\n  <body>\n    <codelab-root>\n      <div class=\"preload\">\n        <div></div>\n        <div></div>\n        <div></div>\n        <div></div>\n      </div>\n    </codelab-root>\n    <noscript\n      >Please enable JavaScript to continue using this application.</noscript\n    >\n  </body>\n</html>\n"
  },
  {
    "path": "apps/codelab/src/locale/codelab.ru.xtb",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE translationbundle [\n<!ELEMENT translationbundle (translation)*>\n<!ATTLIST translationbundle lang CDATA #REQUIRED>\n\n<!ELEMENT translation (#PCDATA|ph)*>\n<!ATTLIST translation id CDATA #REQUIRED>\n<!ATTLIST translation desc CDATA #IMPLIED>\n<!ATTLIST translation meaning CDATA #IMPLIED>\n<!ATTLIST translation xml:space (default|preserve) \"default\">\n\n<!ELEMENT ph (#PCDATA|ex)*>\n<!ATTLIST ph name CDATA #REQUIRED>\n\n<!ELEMENT ex (#PCDATA)>\n]>\n<translationbundle lang=\"ru\">\n  <translation id=\"2339071718884287683\">Angular Codelab</translation>\n  <translation id=\"1902505859733550335\">Милый котенок</translation>\n  <translation id=\"1036270088685658131\">В следующем упражнении вы будете использовать созданный ранее компонент</translation>\n  <translation id=\"9154976499052576586\">Здесь перечислены документация, описание функций и событий</translation>\n  <translation id=\"7127434905431284986\">Предположим, имеется HTML файл:</translation>\n  <translation id=\"5463471054765192731\">Это может быть сделано в три этапа.</translation>\n  <translation id=\"7109785117359301161\">Три этапа для создания приложения:</translation>\n  <translation id=\"8986953020363470779\">Создание Angular компонента</translation>\n  <translation id=\"7117530673690701168\">Создание Angular модуля</translation>\n  <translation id=\"1813487159288766093\">Запуск (Bootstrap) модуля</translation>\n  <translation id=\"7834786013480490982\">Компонент определяется декоратором <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>@Component<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph> у класса</translation>\n  <translation id=\"61555616227480717\">Создайте первый Angular компонент!</translation>\n  <translation id=\"8145952131430725333\">порядок загрузки:  index -&gt; main -&gt; app.module -&gt; app.component</translation>\n  <translation id=\"4135298275558664404\">Конец раздела загрузки (Bootstrap)</translation>\n  <translation id=\"470651207723290753\">Отлично сработано! Упражнение выполнено!\n</translation>\n  <translation id=\"dependencyInjection\">Внедрение зависимостей</translation>\n  <translation id=\"dependencyInjectionLearnMore\">Узнайте про систему внедрения зависимости в Angular\n</translation>\n  <translation id=\"3957097669887217853\">Отметить  зависимость декоратором @Injectable()</translation>\n  <translation id=\"5662947366104784178\">Передать модулю</translation>\n  <translation id=\"9143596698887173150\">Запросить в компоненте</translation>\n  <translation id=\"9193697677313937686\" desc=\"Внедрение?\">Запрашиваем внедряемый сервис в компоненте</translation>\n  <translation id=\"6385657961263768030\">При привязке можно использовать произвольные выражения</translation>\n  <translation id=\"6225777299423953966\">Почему TypeScript?</translation>\n  <translation id=\"4845793289318766506\">TypeScript</translation>\n  <translation id=\"4690830357394206486\">В TypeScript есть<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph> классы<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph>, и Angular часто их использует.</translation>\n  <translation id=\"5575767639565396335\">Теперь мы можем использовать класс <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>Puppy<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph> в другом файле.</translation>\n  <translation id=\"3591838911718818191\">Интерфейсы</translation>\n  <translation id=\"2778796732744507615\">Перечисляемые типы (enums)</translation>\n  <translation id=\"554505692155626925\">Асинхронность / Ожидания</translation>\n  <translation id=\"2854346138345342774\">Деструктурирование</translation>\n  <translation id=\"4818010747810947110\">И много чего еще!</translation>\n  <translation id=\"1966301836895698534\">На следующем слайде будет упражнение по TypeScript</translation>\n  <translation id=\"2921334658251839102\">Выглядеть будет вот так:</translation>\n  <translation id=\"shorthandFunction\">Или пользуйтесь сокращенной натацией</translation>\n  <translation id=\"errorNotAPuppy\">Ошибка: очевидно, что это не собачка</translation>\n  <translation id=\"thisIsNumber\">Это число (number)</translation>\n  <translation id=\"componentTree\">Дерево компонентов</translation>\n  <translation id=\"4420604777002064279\">Родительские и дочерние компоненты</translation>\n  <translation id=\"3260541536331111879\">Родительские и дочерние компоненты</translation>\n  <translation id=\"7430680760319628492\">Обзор</translation>\n  <translation id=\"5353140049958069641\">Упражнение 2</translation>\n  <translation id=\"componentIsDecorator\">@Component это декоратор Angular</translation>\n  <translation id=\"decoratorGoesAboveEntity\">Декоратор указывается над сущностью (классом)</translation>\n  <translation id=\"componentNameIsClassName\">Имя компонента это имя класса (AppComponent)</translation>\n  <translation id=\"3420408458155669913\">Что такое Angular</translation>\n  <translation id=\"3540108566782816830\">Селектор</translation>\n  <translation id=\"1334525262704836521\">Встроенный шаблон</translation>\n  <translation id=\"8988249734928621313\">Модуль</translation>\n  <translation id=\"8027333466268729668\">Декоратор NgModule</translation>\n  <translation id=\"1434785076190731280\">BrowserModule</translation>\n  <translation id=\"2046003391679469154\">Declarations</translation>\n  <translation id=\"1101953121986747707\">Bootstrap</translation>\n  <translation id=\"4814190538810111436\">Создание первого Ng модуля</translation>\n  <translation id=\"7662751436458775011\">Bootstrapping</translation>\n  <translation id=\"699691489139693623\">Bootstrapping 1</translation>\n  <translation id=\"4470411477201731376\">Bootstrapping 2</translation>\n  <translation id=\"3263507238146950325\">Bootstrapping 3</translation>\n  <translation id=\"shorthandMakesProfessionAvailable\">*Сокращения в Typescript  делают &apos;profession&apos; доступным в объекте компонента</translation>\n  <translation id=\"assumingJobHasPropTitle\">предполагая, что Job имеет свойство &apos;.title&apos;</translation>\n  <translation id=\"2250922476634643797\">Параметры</translation>\n  <translation id=\"8985868511640294928\">Тестирование</translation>\n  <translation id=\"2384026219516877038\">Пример</translation>\n  <translation id=\"thisIsValidHTML\">Это рабочий HTML синтаксис.</translation>\n  <translation id=\"worksOnAttributeSyntax\">Так можно привязать значение аттрибутов</translation>\n  <translation id=\"allowsToConditionallyBindClass\" desc=\"Было: Значение будет меняться в зависимости от переданного выражения\">Это позволяет условно сделать привязку к классу</translation>\n  <translation id=\"orStyleProps\" desc=\"Or style properties&#13;&#10;Или CSS\">Или CSS</translation>\n  <translation id=\"worksWithCustomComponents\">Все работает с пользовательскими компонентами</translation>\n  <translation id=\"whenUserClicksItCallsSaveUser\">При нажатии на кнопку, вызовется метод  компонента &quot;saveUser&quot; и передаст соответствующий event.</translation>\n  <translation id=\"youCanAlsoCreateEventsForCustomComponents\">Вы также можете создавать события для собственных компонентов.\nЗдесь у нас есть событие &quot;depleted&quot;, которое вызовет &quot;soundAlarm&quot; когда сработает</translation>\n  <translation id=\"thereAreShortcutEventBindings\">Еще есть упрощенный способ привязки событий!\nЕсли пользователь нажмет CTRL+ENTER, запустится метод submit (это возможность Angular)</translation>\n  <translation id=\"userNameHasRefToInput\">в userName есть ссылка на input</translation>\n  <translation id=\"tryChangingToTrue\">Попробуйте изменить на true!</translation>\n  <translation id=\"needToRepeatPuppiesHere\">Необходимо повторить собачку тут</translation>\n  <translation id=\"2093245413873276320\">Интерполирование</translation>\n  <translation id=\"8721861281513890587\">Cвойства</translation>\n  <translation id=\"7255408982840762838\">Привязка свойства</translation>\n  <translation id=\"2911314034876616874\">Продвинутая привязка данных</translation>\n  <translation id=\"2009489920751400915\">Привязка событий</translation>\n  <translation id=\"92659757529171106\">Повторяющиеся элементы</translation>\n  <translation id=\"8944028182505149416\">Повторение элементов  (*ngFor)</translation>\n  <translation id=\"6964671906994906253\">Упражнение 3</translation>\n  <translation id=\"useShorthandNotation\">Или используйте сокращенную нотацию для функций</translation>\n  <translation id=\"calledArrowFunction\">(стрелочные функции)</translation>\n  <translation id=\"typescriptCanInferNumber\">TypeScript догадается, что это число</translation>\n  <translation id=\"typescriptCanInferString\">TypeScript догадается, что это строка (string)</translation>\n  <translation id=\"cantAddNumAndBool\">Невозможно сложить число с логическим значением</translation>\n  <translation id=\"cantSliceNum\">У прототипа Number нет метода  slice</translation>\n  <translation id=\"canSliceString\">Но можно для строки</translation>\n  <translation id=\"works\">Работает!</translation>\n  <translation id=\"typeDoesSameThing\">Type[]  делает тоже самое.</translation>\n  <translation id=\"thisIsMethod\">Это метод</translation>\n  <translation id=\"thatsHowRussianDogsTalk\">Гав гав</translation>\n  <translation id=\"nowWeCanInstantiate\">Теперь мы можем создать экземпляр класса Puppy</translation>\n  <translation id=\"andUseItsMethods\">И вызвать его методы</translation>\n  <translation id=\"laterWeWillHaveCode\">Потом добавим здесь код</translation>\n  <translation id=\"letsCreateMorePuppies\">Создадим еще собачек</translation>\n  <translation id=\"varAllowedNotRecommended\">Var по-прежнему разрешен, но не рекомендуется.</translation>\n  <translation id=\"letInsteadOfVar\">Let рекомендуется для использования взамен var.</translation>\n  <translation id=\"letUnavailableOutsideIfUnlikeIf\">В отличие от var let недоступен вне this.</translation>\n  <translation id=\"constLikeLet\">Const похож на let, но если вы попробуете изменить его, то TS выдаст ошибку.</translation>\n  <translation id=\"definitelyBoolean\">хорошо, определенно boolean</translation>\n  <translation id=\"typescript\">TypeScript</translation>\n  <translation id=\"3570291272341874994\">Массивы</translation>\n  <translation id=\"6104897002627313660\">Конструктор</translation>\n  <translation id=\"6722511841825238135\">Модификатор доступа</translation>\n  <translation id=\"7462301153729425254\">Экспорт</translation>\n  <translation id=\"1071721880474488785\">Импорт</translation>\n  <translation id=\"1012910011980066980\">Фильтр (последнее)</translation>\n  <translation id=\"5937251202465808296\">Еще...</translation>\n  <translation id=\"4985288594861826441\">Раздел завершен</translation>\n  <translation id=\"noSemicolon\">Тут не должно быть точки с запятой. Декоратор привязывается к классу.</translation>\n  <translation id=\"CreateYFirstAgApp\">Первое приложение на Angular</translation>\n  <translation id=\"2628877838206351210\">Вы узнаете как создать Angular компонент, добавить его в модуль и запустить приложение.</translation>\n  <translation id=\"3602849743531844327\">Знание основ TypeScript</translation>\n  <translation id=\"templates\">Шаблоны</translation>\n  <translation id=\"6346332284188948979\">Узнайте больше о шаблонах в Angular!</translation>\n  <translation id=\"createClassCodelab\">Создайте класс  с именем &apos;Codelab&apos;</translation>\n  <translation id=\"1425139040251941806\">Основы JavaScript.</translation>\n  <translation id=\"addComponentDecoratorAndSetSelectorToMyVideo\">video/video.component.ts: Отметьте компонент декоратором &apos;@Component&apos;  и добавьте в него селектор  &apos;my-video&apos;.</translation>\n  <translation id=\"addVideoComponentToAppModule\">app.module.ts: Объявите компонент VideoComponent в свойстве  &apos;declarations&apos; модуля AppModule.</translation>\n  <translation id=\"setTemplateUrlToLoadAppropriateFile\">video.component.ts Добавьте ссылку на соответствующий HTML файл с шаблоном в свойство templateUrl , чтобы загрузить шаблон в компонент</translation>\n  <translation id=\"addVideoPropertyAndDecorateWithInput\">video/video.component.ts: Добавьте свойство video  и отметьте его декоратором @Input()</translation>\n  <translation id=\"displayVideoTitle\">video/video.component.html: Отобразите название (title) видео</translation>\n  <translation id=\"displayVideoThumbnail\">video/video.component.html: Отобразите превью (src) видео</translation>\n  <translation id=\"displayVideoDescription\">video/video.component.html: Отобразите описание(description) видео</translation>\n  <translation id=\"displayVideoData\">video/video.component.html: Выведите дату видео</translation>\n  <translation id=\"displayNumberOfVideoViews\">video/video.component.html: Отобразите количество просмотров видео(views)</translation>\n  <translation id=\"displayNumberOfVideoLikes\">video/video.component.html: Отобразите количество отметок &quot;нравится&quot;(likes)</translation>\n  <translation id=\"replaceTitleAndThumbnail\">app.html: Замените текущие название и превью видео на наш чудесный компонент &lt;my-video&gt;</translation>\n  <translation id=\"useDataBindingToPassVideoToComponent\">app.html: С помощью биндинга передайте объект &quot;video&quot; в компонент my-video (не забудьте про квадратные скобки)</translation>\n  <translation id=\"createClassAppComponent\">Создайте класс &apos;AppComponent&apos;</translation>\n  <translation id=\"createClassAppModule\">Создайте класс &apos;AppModule&apos;</translation>\n  <translation id=\"allSetBootstrapApp\">Всё готово! Загружайте приложение</translation>\n  <translation id=\"exportClass\">Экспортируйте класс</translation>\n  <translation id=\"addComponentDecorator\">Добавьте классу декоратор @Component</translation>\n  <translation id=\"addSelectorMyApp\">Добавьте селектор &apos;my-app&apos; в @Component декоратор компонента</translation>\n  <translation id=\"addTemplateHelloMewTube\">Добавьте шаблон, содержащий тег h1 с текстом &quot;Hello MewTube!&quot;</translation>\n  <translation id=\"addNgModuleDecorator\">Добавьте классу декоратор NgModule</translation>\n  <translation id=\"addBrowserModuleToNgModule\">Добавьте &apos;BrowserModule&apos; в свойство &apos;imports&apos; декоратора NgModule</translation>\n  <translation id=\"addAppComponentToDeclarations\">Добавьте компонент &apos;AppComponent&apos; к свойству &apos;declarations&apos; у декоратора</translation>\n  <translation id=\"addAppComponentToBootstrap\">Добавьте компонент &apos;AppComponent&apos;  в свойство &apos;bootstrap&apos;  декоратора</translation>\n  <translation id=\"addIjectableDecoraterToClass\">video.service.ts: Добавьте классу декоратор @Injectable()</translation>\n  <translation id=\"addVideoServiceToNgModule\">app.module.ts: Добавьте VideoService в свойство  providers вашего NgModule</translation>\n  <translation id=\"getRidOfFakeVideos\">app.component.ts: Избавьтесь от константы FAKE_VIDEOS</translation>\n  <translation id=\"injectVideoService\">app.component.ts: Внедрите &apos;VideoService&apos; в конструктор компонента как\n &apos;videoService&apos;\n</translation>\n  <translation id=\"updateAppComponentSearchmethod\">app.component.ts: Сделайте так, чтобы метод &apos;search&apos; компонента использовал метод  &apos;search&apos; сервиса &apos;videoService&apos;</translation>\n  <translation id=\"addVideosProperty\">app.component.ts: Добавьте свойство &apos;videos&apos;, и установите пустой массив в качестве значения.</translation>\n  <translation id=\"assignFakeVideosToComponent\">app.component.ts: Внутри метода &apos;search&apos; установите переменную FAKE_VIDEOS в качестве значения свойства &apos;videos&apos;.</translation>\n  <translation id=\"addH1HeaderWithATitle\">app.html: Добавьте заголовок h1, отобразите там свойство &apos;title&apos; AppComponent&apos;а</translation>\n  <translation id=\"addSearchMethodOnComponent\">app.component.ts: Добавьте в компонент метод &apos;search&apos;, который принимает параметр &apos;searchString&apos;</translation>\n  <translation id=\"addClickHandlerToButtonCallSearch\">app.html: Добавьте обработчик нажатия мышки на кнопку, вызовите метод &apos;search&apos; и передайте значение поля ввода (Сам поиск мы сделаем позже)</translation>\n  <translation id=\"addMessageNoVideos\">app.html: Добавьте сообщение  &apos;no videos&apos;, которое появляется только когда массив videos пуст</translation>\n  <translation id=\"bonusDisplayAllVideosByDefault\">#Bonus app.component.ts: Сейчас вам придется нажать кнопку поиска, чтобы отобразились видео. Поправьте код так, чтобы видео отображались по умолчанию, без нажатия кнопки.</translation>\n  <translation id=\"insideSearchMethodFilterFakeVideos\">app.component.ts: Внутри метода &apos;search&apos; отфильтруйте FAKE_VIDEOS так, чтобы возвращались только видео, название которых содержит искомую строку searchString. (подсказка: используйте .includes или .indexOf строковый метод)</translation>\n  <translation id=\"alsoDisplayThumbnail\">app.html: Отобразите превью</translation>\n  <translation id=\"IterateWithNgForAndDisplayTitle\">app.html: Пройдитесь по массиву videos с помощью &apos;*ngFor&apos; и выведите название каждого видео</translation>\n  <translation id=\"addButtonWithtextSearch\">app.html: Добавьте кнопку (&lt;button&gt;) с текстом  &apos;search&apos; (Поиск)</translation>\n  <translation id=\"addInputWithPlaceholderVideo\">app.html: Добавьте тег input с атрибутом  &apos;placeholder&apos; =  &apos;video&apos;</translation>\n  <translation id=\"addConstructor\">Добавьте конструктор</translation>\n  <translation id=\"makeConstructorTakeParamGuests\">Примите значение &apos;guests&apos; в качестве параметра конструктора</translation>\n  <translation id=\"specifyTheTypeForGuests\">Укажите тип параметра guests (подсказка: массив типа Guest)</translation>\n  <translation id=\"makeParemeterPublic\">Отметьте параметр ключевым словом public (обратите внимание, что теперь вы можете получить к нему доступ в классе, обратившись к this.guests)</translation>\n  <translation id=\"createNewMethodGetGuestsComing\">Создайте метод &apos;getGuestsComing&apos;</translation>\n  <translation id=\"modifyGetGuestsComingToFilter\">Измените метод getGuestsComing так, чтобы он возвращал массив из  элементов &apos;guests&apos;, у которых свойство &apos;coming&apos; равно true.</translation>\n  <translation id=\"createFirstNgApp\">Создайте ваше первое Angular приложение</translation>\n  <translation id=\"customEvents\">Пользовательские события</translation>\n  <translation id=\"learnHowToBootstrapApp\">Узнайте как создать и запустить ваше первое Angular приложение</translation>\n  <translation id=\"learnUsingTemplates\">Узнайте как пользоваться шаблонами в Angular</translation>\n  <translation id=\"learnToProvideDependencies\">Узнайте как использовать систему внедрения звисимостей вместо того, чтобы хардкодить их</translation>\n  <translation id=\"learnToStructureAppWithReusableComponents\">Узнайте как лучше всего организовать ваше приложение с помощью пользовательских компонентов.</translation>\n  <translation id=\"learnToBindToEvents\">Узнайте как привязывать события</translation>\n  <translation id=\"3356116837774924473\">Следующий шаг - определить компонент в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.</translation>\n  <translation id=\"3156349100343034471\">С Angular мы создаем мобильные приложения, используя NativeScript или Ionic</translation>\n  <translation id=\"300734632059872629\">С Angular мы можем создать VR приложения с помощью A-FRAME или WEDGL</translation>\n  <translation id=\"4295828568066353117\">Конец раздела Формы</translation>\n  <translation id=\"specifyTheTypeForB\">Переменная &apos;b&apos; в коде ниже отмечена как ошибка, так как тип отсутствует. Укажите тип переменной &apos;b&apos;.</translation>\n  <translation id=\"typescriptHighlightsErrorFix224\">Благодаря этой информации, TypeScript может указать нам на ошибку. Исправьте eё, чтобы 2 + 2 снова стало равно 4!</translation>\n  <translation id=\"7555895897701490119\">Другие типы, которые можно использовать</translation>\n  <translation id=\"7759544910570343367\">TypeScript</translation>\n  <translation id=\"3142775397600131493\">Пропустите, если вы уже знакомы с TypeScript</translation>\n  <translation id=\"4686588615295148276\">Angular</translation>\n  <translation id=\"7394559216825981545\">Или нажмите сюда чтобы показать все разделы</translation>\n  <translation id=\"5456916239811751709\">Это конец курса от Codelab, но только начало вашего путешествия в Angular. Ниже приведены некоторые ссылки, которые могут помочь вам продолжить изучение.</translation>\n  <translation id=\"1166207354981984344\">Пока в нашем приложении только один компонент, но по мере роста приложения и добавления новых компонентов, у нас получится дерево компонентов</translation>\n  <translation id=\"5463254600145635312\">Внутри компонент может отобразить любой другой с помощью HTML тега, который соответствует селектору выбранного компонента</translation>\n  <translation id=\"2842394284573918883\">Родительский компонент передает свои данные дочернему через свойства</translation>\n  <translation id=\"8392567546535132259\"> Измените <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> размер<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n на <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> 100 <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> и <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> цвет <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> на <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> красный <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, чтобы получить японский флаг</translation>\n  <translation id=\"6462196081007759452\">Свойства дочернего класса должны быть декорированы специальным <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> @Input() <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> декоратором</translation>\n  <translation id=\"2816636294709814885\">В этом случае мы впервые применяем декораторы к свойствам, а не к классам</translation>\n  <translation id=\"2478337245338174731\">В первом разделе мы изучили как создавать компоненты. Давайте создадим новый компонент VideoComponent и опишем там информацию, связанную с видео.</translation>\n  <translation id=\"7500497445913951281\">Результат будет отображаться автоматически. В итоге должно получиться следующее:</translation>\n  <translation id=\"3013712804500806977\">Компоненты не будут знать друг о друге, если они не задекларированы в общем модуле</translation>\n  <translation id=\"4335494429592099313\">Angular - это <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>платформа разработки<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph> для создания приложений под мобильные телефоны и компьютеры. Angular позволяет <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>расширить HTML синтаксис<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph> , чтобы кратко и удобно разрабатывать компоненты приложения. Привязка данных (Data Binding) и внедрение зависимостей (Dependency Injection)  позволяют использовать код в существенно меньшем объеме.</translation>\n  <translation id=\"6161264726933372468\">Давайте создадим Angular приложение, которое заменит <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>hello-world<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> HTML элемент некоторым наполнением.\n</translation>\n  <translation id=\"3518604211309075388\">Компонент в Angular - это просто класс. Свойства и поведение описываются внутри этого класса.</translation>\n  <translation id=\"8963391977207807015\">Декораторы - новая функциональность TypeScript. Они описывают мета-данные к классу, функции, свойству класса или переменной.</translation>\n  <translation id=\"901484278635100487\">&apos;Selector&apos; привязывает компонент к соответствующему элементу в HTML структуре документа. Когда Angular находит <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>hello-world<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> HTML тег в документе, он отрисовывает шаблон HelloWorldComponent&apos;а внутри этого тега</translation>\n  <translation id=\"5776232626408915586\">Шаблон (template) определяется HTML кодом, который генерируется компонентом.</translation>\n  <translation id=\"3490030044563966992\">Если количество тегов в HTML растет, можно (и рекомендуется) использовать  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> templateUrl<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> вместо этого, указав путь к файлу HTML с шаблоном.</translation>\n  <translation id=\"7639270097778554357\">На следующем слайде вы создадите свой первый <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>-компонент!\nПодготовьте компонент и опишите его поведение по предложенным инструкциям, результат будет отображен автоматически. В итоге должно получиться следующее:</translation>\n  <translation id=\"5126304564648715351\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> не имеет визуального представления и используется исключительно для группировки функциональных элементов Angular\n</translation>\n  <translation id=\"5509161378825547695\">Мы узнаем больше о NgModule в следующих секциях\n</translation>\n  <translation id=\"6207292630730452152\">В списке <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>declarations<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> определяются компоненты, принадлежащие AppModule</translation>\n  <translation id=\"6679702569828672754\">Компонент, указываемый в списке <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>bootstrap<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> будет создан и показан в файле <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>index.html<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"5729375766021589223\">На следующем слайде вы создадите свой первый  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>-модуль.\nПодготовьте модуль и опишите его поведение по предложенным инструкциям, результат будет отображен автоматически. В итоге получится следующее:</translation>\n  <translation id=\"6827469684284953312\">У нас всё готово, самое время начать (загрузить) приложение</translation>\n  <translation id=\"5839300755199336558\">Передайте <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>AppModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> в метод <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>bootstrapModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, и он запустит все компоненты из раздела bootstrap этого модуля</translation>\n  <translation id=\"4399973873640793995\">Для большинства простых приложений вы можете просто скопировать и вставить код выше «как есть»</translation>\n  <translation id=\"6908434431695362158\">Как работает начальная загрузка в Angular?</translation>\n  <translation id=\"6874245697228107216\">1. Добавим среду исполнения. <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>platformBrowserDynamic()<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> указывает Angular, что мы работаем в браузере</translation>\n  <translation id=\"3128495234135543796\">Узнайте больше о корневом модуле и начальной загрузке в Angular</translation>\n  <translation id=\"7573108776950995216\">2. Angular инициализирует компонент из списка <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>bootstrap<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, указанного в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>app.module.ts<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> (в нашем случае это <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>HelloWorldComponent<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</translation>\n  <translation id=\"8154401785955657985\">3. Angular ищет в документе элемент, соответствующий селектору, определенному в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>HelloWorldComponent<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> (в нашем случае это <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>&apos;hello-world&apos;<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>) и вставляет компонент внутрь этого элемента</translation>\n  <translation id=\"2407260837719515490\">Готово! На следующей странице вы запустите свое первое <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>-приложение</translation>\n  <translation id=\"1313383644474336301\">Теперь, когда у нас есть и NgModule, и готовый компонент, давайте загрузим приложение!</translation>\n  <translation id=\"4850683624715159256\">Пока Angular загружается, содержимое элемента остается неизменным: в нашем случае, &quot;<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Loading...<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&quot;</translation>\n  <translation id=\"1349735316800599429\">Мы пишем браузерное веб-приложение,  поэтому в списке <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>imports<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> необходимо указать <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>BrowserModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"5369563118314675128\"><ph name=\"START_TAG_DIV\"><ex>&lt;div&gt;</ex>&lt;div&gt;</ph>\n    Angular применяется не только для веб-приложений. Вы также можете создавать мобильные приложения и даже VR-зарисовки.\n  <ph name=\"CLOSE_TAG_DIV\"><ex>&lt;/div&gt;</ex>&lt;/div&gt;</ph>\n  <ph name=\"START_TAG_DIV_1\"><ex>&lt;div&gt;</ex>&lt;div&gt;</ph>\n    <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph><ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n  <ph name=\"CLOSE_TAG_DIV\"><ex>&lt;/div&gt;</ex>&lt;/div&gt;</ph>\n</translation>\n  <translation id=\"7427941055850419603\" desc=\"Как насчет вместо &quot;инициальзировано&quot; - &quot;определено&quot;?\">Без системы внедрения зависимостей (Dependency Injection), свойство <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>profession<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> должно быть инициализировано внутри класса <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Person<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"916298212817351454\">При использовании системы внедрения зависимостей (Dependency Injection), класс  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Person<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> просто запрашивает объект <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Job<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> в конструкторе. Angular инстанциирует зависимость и передает результат классу.</translation>\n  <translation id=\"1220299404805905128\">При использовании системы внедрения зависимостей Angular сделает это за вас.</translation>\n  <translation id=\"5041678758489152197\">Также внедрение зависимостей (Dependency Injection) значительно упрощает тестирование, так как для этого необходимо просто подать &quot;ложные&quot; зависимости (Mock Dependecies) в параметры конструктора</translation>\n  <translation id=\"6910202098357920279\">Предположим, что у нас есть существующий <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>UnitConverterService<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> и мы хотели бы использовать его в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>UnitConversionComponent<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. Для этого необходимо проделать 3 простых шага:</translation>\n  <translation id=\"2585772558422043391\">Мы помечаем класс декоратором <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>@Injectable()<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, что позволяет Angular понять, что этот класс будет использован в системе внедрения зависимостей.</translation>\n  <translation id=\"6496971683817494188\">Если сервисный класс отмечен декоратором @Injectable(), он может запрашивать другие сервисы в конструкторе</translation>\n  <translation id=\"287816816593865864\">Передайте все экспортируемые (injectable) зависимости в секцию <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>providers<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph> вашего <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph></translation>\n  <translation id=\"3053323241161491226\">Теперь этот сервис становится доступным для всех <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>компонентов<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph> и других сервисов в  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex></ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex></ph>.</translation>\n  <translation id=\"4224784797203649406\">Благодаря <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> private<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>  модификатору доступа, сервис становится доступным через класс как <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>this.converter<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"8777170680797795530\">На следующем слайде вы используете (и внедрите) videoService, в котором будет еще больше котиков!!! Результат будет выглядеть вот так:</translation>\n  <translation id=\"3770170783025031996\" desc=\"Banana in the box решил оставить как есть\">[(ngModel)] - <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Banana in the box<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> — мнемоника для такого порядка скобок</translation>\n  <translation id=\"1775873765805142503\">У Angular очень выразительная система шаблонов, основанная на HTML, которую можно расширить новыми элементами</translation>\n  <translation id=\"8908084104333691137\">В двойные фигурные скобки записывается нужное свойство компонента</translation>\n  <translation id=\"6743006858339549834\">Обратные кавычки <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>` `<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> — волшебные кавычки, позволяющие делать переносы строк и использовать строковую интерполяцию</translation>\n  <translation id=\"2708214618841180970\">Также можно использовать простые выражения: вы можете вызвать метод компонента (как fullName() ниже) или вычислить <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>323213+34234<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></translation>\n  <translation id=\"3402523483542521336\">На следующем слайде отредактируйте шаблон компонента, чтобы создать простой заголовок и форму поиска. Результат должен выглядеть следующим образом:</translation>\n  <translation id=\"8669367464399341938\">Строковая интерполяция <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{ curlies }}</ex>{{ curlies }}</ph><ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> также позволяет передавать значения в атрибуты дочерних элементов</translation>\n  <translation id=\"1929429019008245822\">      Но лучше использовать property binding (привязку свойств) <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>[attribute]=&quot;property&quot;<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n</translation>\n  <translation id=\"5131679624196947189\">Angular поддерживает более продвинутые привязки свойств, чем просто имя атрибута</translation>\n  <translation id=\"5621752484434623785\">Это условное выражение добавляет или удаляет DOM элемент по условию</translation>\n  <translation id=\"3782868128792375360\">На следующем слайде добавьте обработчик нажатий кнопки поиска и отображение сообщения для случая, когда ни одно видео не было найдено. Результат должен выглядеть следующим образом:</translation>\n  <translation id=\"2098931711932592374\">Допустим, у нас есть список щенков, и мы хотим отобразить их на странице. Для этого в Angular есть специальный синтаксис — <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>*ngFor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\nДавайте посмотрим, как это работает на следующем слайде</translation>\n  <translation id=\"2278439158834501962\">Для каждого щенка в массиве всех щенков<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>*ngFor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> повторяет тот HTML-элемент, в котором и указан (в этом случае li)</translation>\n  <translation id=\"6900873423530266803\"> HTML-атрибуты в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> регистрозависимы:\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"START_STRIKETHROUGH_TEXT\"><ex>&lt;s&gt;</ex>&lt;s&gt;</ph>*ngfor<ph name=\"CLOSE_STRIKETHROUGH_TEXT\"><ex>&lt;/s&gt;</ex>&lt;/s&gt;</ph><ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> не сработает, а <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>*ngFor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> сработает</translation>\n  <translation id=\"1916497009459167443\">На следующем слайде вы, наконец, покажете видео! Результат будет выглядеть следующим образом:</translation>\n  <translation id=\"3450228617967699820\" desc=\"&quot;отличный язык, но ему есть куда стремиться&quot;&#13;&#10;Я бы написал &quot;отличный язык, однако при его использовании есть некоторая специфика&quot;&#13;&#10;Потому что JS по задумке как раз лишен строгой типизации. Это не его недостаток или недоработка создателей, это именно особенность\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>JavaScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> – отличный язык, однако, при его использовании есть некоторая специфика:</translation>\n  <translation id=\"7378420032672625836\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>ES<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> расшифровывается как\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>ECMAScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph><ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> - стандарт языка JavaScript.</translation>\n  <translation id=\"1603010177589300581\">Кроме этого, TypeScript расширяет систему типов и декораторов</translation>\n  <translation id=\"519638442093250618\">Декораторы выглядят как @twitter_handles, мы изучим их позже</translation>\n  <translation id=\"8469244833465514706\">Ниже приведена функция <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>add<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, где мы складываем 2 + 2. Что может пойти не так?</translation>\n  <translation id=\"3382055352600412380\">Оказывается, можно передать строку в качестве параметра и получить\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>22<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> вместо <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>4<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. Давайте посмотрим, как TypeScript поможет нам это предотвратить.</translation>\n  <translation id=\"7706542074780362578\">В TypeScript для указания типа используется &quot;<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>:<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&quot; (например,\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>n: number<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>). Как <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>a<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, так и <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>b<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> должны быть числами. Мы указали тип <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>a<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, теперь ваша очередь!</translation>\n  <translation id=\"4416420426193040614\">Код выше можно редактировать</translation>\n  <translation id=\"5300204482622127378\">Здесь каждый элемент в массиве <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>betterCats<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> — экземпляр интерфейса <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Cat<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.</translation>\n  <translation id=\"952111865578275945\">Они похожи на классы в других языках программирования и используются для группировки методов и свойств</translation>\n  <translation id=\"5150753083587849200\">В классе есть специальный метод: <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>constructor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, который вызывается при создании класса и позволяет записать полученные параметры в свойства класса.</translation>\n  <translation id=\"462788382585371115\">Параметры конструктора, отмеченные как <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> public <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> (или private, или protected), записываются в свойства класса. Они будут доступны как <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> this.ParameterName <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> внутри класса.</translation>\n  <translation id=\"4472178753190540128\">Свойства &apos;private&apos; или &apos;protected&apos; не могут быть использованы вне класса.</translation>\n  <translation id=\"6571723708298379001\">Возможно, вы заметили оператор <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> export <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> перед классом.\nОн используется для того, чтобы сделать класс доступным в других файлах. На следующем слайде мы покажем вам, как импортировать и использовать тот класс в другом файле.</translation>\n  <translation id=\"687605542005054114\">&quot;<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>filter<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&quot; - метод массива, который позволяет генерировать новый массив, выбрав только значения,  удовлетворяющие условию</translation>\n  <translation id=\"2776231080049358900\">TypeScript поддерживает множество других интересных и полезных штук, например:</translation>\n  <translation id=\"2824004502397491284\">Стрелочные функции</translation>\n  <translation id=\"425764765304851377\">Мы не будем рассматривать их подробно, вы можете ознакомиться с ними на сайте <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph> TypeScript <ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"6106271638521818742\">Ваша задача - создать TypeScript класс и назвать его CodeLab. При создании он получит список гостей. Также мы создадим метод, который выведет список тех, кто придет.</translation>\n  <translation id=\"1232468595022253521\">ES7</translation>\n  <translation id=\"7684186891767163500\">Декораторы</translation>\n  <translation id=\"8826294926629434573\">Типы</translation>\n  <translation id=\"5784427236154138130\">TypeScript</translation>\n  <translation id=\"643059253899545925\">Классы</translation>\n  <translation id=\"7034028115313507184\">Модули</translation>\n  <translation id=\"2396430173482915571\">Далее...</translation>\n  <translation id=\"1697699319086615837\">Используйте клавиши <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>←<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> и <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>→<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> на клавиатурe для навигации по слайдам.</translation>\n  <translation id=\"9018170935953099606\">Необходимые знания</translation>\n  <translation id=\"4712788926759159307\">Опишите ошибку, или поделитесь идеями</translation>\n  <translation id=\"perfect\">Отлично</translation>\n  <translation id=\"good\">Хорошо</translation>\n  <translation id=\"ok\">Норм</translation>\n  <translation id=\"hopedForMore\">Не очень</translation>\n  <translation id=\"3134509873264839334\">Оцените этот урок ...</translation>\n  <translation id=\"5047002157177956173\">Узнайте как быстро начать работу над вашим Angular приложением</translation>\n  <translation id=\"943157291250853394\">Дерево компонентов</translation>\n  <translation id=\"1106515989755785596\">Научитесь выстраивать взаимосвязь между компонентами</translation>\n  <translation id=\"2078785402028999261\">Формы</translation>\n  <translation id=\"8668858903892446127\">Добавьте несложные формы в ваше приложение</translation>\n  <translation id=\"4263648592710459003\">Material Design</translation>\n  <translation id=\"794755284646120063\">Узнайте как использовать библиотеку Angular Material</translation>\n  <translation id=\"3035675235126347102\">Маршрутизация</translation>\n  <translation id=\"5735074005289672847\">Узнайте как добавить маршрутизацию в ваше приложение</translation>\n  <translation id=\"2332684851324173587\">Этот курс написан на Angular и <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>доступен на  Github<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>. Пожалуйста, поставьте ⭐, если вам понравилось! :)</translation>\n  <translation id=\"4905842152994295720\">Привет, я - <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>angular-cli<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, я инструмент для командой строки!</translation>\n  <translation id=\"1337679769155326866\">Прежде всего убедитесь, что на вашем компьютере есть node.js.</translation>\n  <translation id=\"5523986709480171160\">Откройте командную строку и введите: <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>node -v<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></translation>\n  <translation id=\"1982801473038876401\">Если увидите ошибку, следуйте  <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>инструкциям по настройке Node.js<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"8193695606609908840\">Перейдите в папку с только что созданным приложением и запустите его командой <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng serve<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></translation>\n  <translation id=\"4530312955809743235\">Когда приложение запустится, откройте\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>http://localhost:4200/<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> в вашем браузере</translation>\n  <translation id=\"1559754683396073636\">Вы можете сгенерировать новые компоненты командой\n      <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng generate component my-component<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></translation>\n  <translation id=\"2534370177218622487\">Вы также можете генерировать модули, сервисы и пайпы</translation>\n  <translation id=\"283640338338989513\">Можно использовать упрощенную версию: <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng g c my-component<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></translation>\n  <translation id=\"7762953763922284011\">У нас есть несложная форма, давайте разберемся как привязать ее значения к параметрам компонента</translation>\n  <translation id=\"6425132401823114131\">Сначала необходимо добавить  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>FormsModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> в наш NgModule</translation>\n  <translation id=\"7747367449350171293\">Далее мы можем использовать ngModel, чтобы привязать поля ввода к соответствующим параметрам компонента. </translation>\n  <translation id=\"4133557133353776426\">Пропробуйте поменять значение полей ввода, чтобы обновить значения</translation>\n  <translation id=\"6063238187884699771\">Давайте сделаем поле &quot;username&quot; обязательным (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>required<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</translation>\n  <translation id=\"8993640169220425895\">Теперь отобразим валидационную ошибку. Для этого нужно проделать следующее:</translation>\n  <translation id=\"2140417106288915448\">Получить доступ к модели (ngModel) поля ввода с помощью  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>#name=&quot;ngModel&quot;<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"5910204214213293332\">Использовать свойство <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> errors <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> у свойства <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>usernameModel<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"4692187312954805852\">Попробуйте очистить поле username, чтобы увидеть ошибку</translation>\n  <translation id=\"8486095358633987531\">Ниже представлен список <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>встроеных валидаторов<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>, которые используются в Angular</translation>\n  <translation id=\"3901733599428143571\">min - Минимальное значение (для чисел)</translation>\n  <translation id=\"5386793486940113646\">max - Максимальное значение (для чисел)</translation>\n  <translation id=\"1555721751742522708\">required - Обязательное значение</translation>\n  <translation id=\"3347261489424376125\">requiredTrue - Обязательное правдивое значение для флага</translation>\n  <translation id=\"7315714079098881460\">email - Соответствие регулярному выражению email&apos;а</translation>\n  <translation id=\"2218960621606808970\">minLength - Минимальная длина текстового поля</translation>\n  <translation id=\"2060941282153877777\">maxLength - Максимальная длина текстового поля</translation>\n  <translation id=\"7676249558622794260\">pattern - Регулярное выражение для текстового поля</translation>\n  <translation id=\"4722824416758060415\">Можно также создавать собственные валидаторы, узнайте больше: <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>здесь<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"6090593566257988703\">Осталось решить небольшую проблему: если не указывать изначальные значение полей ввода, ошибка будет отображена сразу</translation>\n  <translation id=\"7933306550899658878\">Мы можем проверить, взаимодействовал ли пользователь с полем ввода с помощью свойства   <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>touched<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.</translation>\n  <translation id=\"7424734033590338116\">Значение <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>touched<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>  положительно, если юзер сфокусировался на поле ввода и после убрал фокус, не меняя значение.</translation>\n  <translation id=\"4624575175624080439\">Попробуйте добавить/убрать фокус с поля ввода, или добавить/удалить значение, чтобы увидеть ошибку.</translation>\n  <translation id=\"3876627808167319645\">Теперь давайте сделаем нашу форму красивой с помощью Material Design.\nОсновные строительные блоки:</translation>\n  <translation id=\"3286433456748135142\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>mat-form-field<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - Обертка вокруг поля ввода</translation>\n  <translation id=\"304466263354781991\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>matInput<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - Аттрибут должен быть добавлен на поле ввода\n</translation>\n  <translation id=\"8297804625326045690\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>mat-error<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - Умная обертка для ошибок</translation>\n  <translation id=\"3440673282637430108\">Обратите внимание, что нам больше не нужно добавлять <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>#name<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> на поле ввода.</translation>\n  <translation id=\"1410328259781563181\">На следующем слайде будет упражнение, в котором мы добавим форму на страницу загрузки.</translation>\n  <translation id=\"2445797033343456600\">Обратите внимание: вам нужно будет вручную нажать на кнопку upload, чтобы увидеть результат</translation>\n  <translation id=\"5553423473844264824\">Есть два основных способа работы с формами в Angular. Пока раздел <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Продвинутых форм<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> в разработке, прочитайте <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph> документацию Angular <ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"1048302075193478813\">Быстрые</translation>\n  <translation id=\"7436636522347025101\">Гибкие в использовании</translation>\n  <translation id=\"6362038180167515562\">Поддерживают Accessibility(доступность в использовании)</translation>\n  <translation id=\"4824840533916827883\">Оптимизированы для Angular</translation>\n  <translation id=\"332404582323211180\">Отлично выглядят на мобильных устройствах</translation>\n  <translation id=\"1384935740236089810\">Вы можете посмотреть список компонентов\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>здесь<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"5179157556117527268\">Добавьте <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>MatToolbarModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> в импорты</translation>\n  <translation id=\"5392852815080322940\">Используйте компонент в шаблоне</translation>\n  <translation id=\"4611890716836134126\">Обратите внимание, что анимации в Angular вынесены в отдельный модуль. Мы добавляем\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NoopAnimationsModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> здесь, но могли бы использовать\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>BrowserAnimationsModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> вместо того, чтобы получить полноценные анимации.</translation>\n  <translation id=\"9159121920453591417\">Теперь давайте добавим material card</translation>\n  <translation id=\"7240476994819291465\">Заголовок и картинка</translation>\n  <translation id=\"9206609904661056407\">Добавим пару кнопок</translation>\n  <translation id=\"5230163445973304109\">Обратите внимание, что мы используем аттрибут <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>mat-button<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> вместо отдельного тега.</translation>\n  <translation id=\"5274217387047721869\">Indigo</translation>\n  <translation id=\"7493644276322780505\">Deep purple</translation>\n  <translation id=\"1453230058388265146\">Pink</translation>\n  <translation id=\"6699275925990014857\">Purple</translation>\n  <translation id=\"8974626884127165311\">На следующем слайде будет упражнение. Мы применим Angular Material к нашему приложению.</translation>\n  <translation id=\"943558698651917560\">Примечание: В результате наше приложение не будет выглядеть так прекрасно как могло бы, но мы работаем над этим.</translation>\n  <translation id=\"1931968164617039768\">Котятки</translation>\n  <translation id=\"6707280048767596762\">Щеночки</translation>\n  <translation id=\"6382596231037789146\">Настройте машрутизацию, привязав компоненты к соответствующим URL\n</translation>\n  <translation id=\"5711045063225432498\">Создайте меню</translation>\n  <translation id=\"5553583971169159914\">Выберите место, где отобразить выбранный компонент</translation>\n  <translation id=\"1258665563482381976\">Потом передадим конфигурацию в наш модуль</translation>\n  <translation id=\"7206914066261457043\">Обратите внимание, что мы используем <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>RouterModule.forRoot<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, который превращает нашу конфигурацию в Модуль Angular.</translation>\n  <translation id=\"2601425993761834840\">Теперь выберем место, где роутер отобразит выбранный компонент.</translation>\n  <translation id=\"2385039709831220213\">Мы можем сделать это положив тег <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>router-outlet<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> в нужное место в нужном компоненте</translation>\n  <translation id=\"1472582053378549544\">Осталось создать меню</translation>\n  <translation id=\"2583626845709708422\">Используйте директиву <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>routerLink<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> чтобы передать ссылку</translation>\n  <translation id=\"7666470893157840853\">На следующем слайде будет упражнение, в котором мы добавим два роута:\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Search<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> и <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Upload<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> и меню для переключения между ними</translation>\n  <translation id=\"6990537880445556268\">Мы уже создали пустой компонент Upload и SearchComponent, содержащий логику для поиска.</translation>\n  <translation id=\"33440573074633014\">Изучите <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular Router Guide<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> чтобы подняться на более продвинутый уровень.</translation>\n  <translation id=\"2050435296171660186\">Без системы внедрения зависимостей, вам придется разбираться со всеми параметрами самостоятельно.</translation>\n  <translation id=\"4302113860648465389\">Добро пожаловать в интерактивный курс по Angular. Здесь вы сможете выучить основы <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>!</translation>\n  <translation id=\"AddMatModules\">app.module.ts: Добавьте MatCardModule и MatToolbarModule в свойство &quot;imports&quot;.</translation>\n  <translation id=\"AddMatToolbar\">app.html: Добавьте material toolbar, содержащий значение свойства title</translation>\n  <translation id=\"UseMatCard\">video/video.component.html: Используйте material card, чтобы отобразить дату</translation>\n  <translation id=\"AddMatCardTitle\">video/video.component.html: Добавьте mat-card-title (внутри of the mat-card), чтобы отобразить заголовок видео (title)</translation>\n  <translation id=\"AddMatCardSubtitle\">video/video.component.html: Добавьте mat-card-subtitle (внутри mat-card), чтобы отобразить описание (description)</translation>\n  <translation id=\"AddMatImage\">video/video.component.html: Добавьте к картинке (img) аттрибут mat-card-image  и ее ширина увеличится до ширины mat-card</translation>\n  <translation id=\"MoveDataToNewComponent\"> video/video.component.html: Перенесите дату/информацию о просмотрах/лайках в mat-card-content (внутри mat-card)</translation>\n  <translation id=\"UseRouterModule\">app.module.ts: Используя RouterModule.forRoot, передайте пустой массив в модуль</translation>\n  <translation id=\"AddEmptyRoute\">app.module.ts: Добавьте роут с пустым (&apos;&apos;) путем, отображающий SearchComponent</translation>\n  <translation id=\"AddUploadRoute\">app.module.ts: Добавьте роут с путем (&apos;upload&apos;), отображающий UploadComponent</translation>\n  <translation id=\"AddRouterOutlet\"> app.html: Добавьте router-outlet</translation>\n  <translation id=\"AddSearchMenu\">app.html: Добавьте пункт меню с текстом &quot;Search&quot;, ведущий на &quot;/&quot;\n</translation>\n  <translation id=\"AddUploadMenu\">app.html: Добавьте пункт меню с текстом &quot;Upload&quot;, ведущий на &quot;/upload&quot;\n</translation>\n  <translation id=\"6930162363603699164\">Следующий слайд</translation>\n  <translation id=\"4201318520171370271\">Показать только следующий шаг</translation>\n  <translation id=\"316509725772872372\">Введение</translation>\n  <translation id=\"5129000868542765663\">Установка</translation>\n  <translation id=\"111382302678883601\">Создание нового приложение на Angular</translation>\n  <translation id=\"4986257953238550386\">Запускаем приложение</translation>\n  <translation id=\"3483089624374648626\">Генерируем компоненты</translation>\n  <translation id=\"7918580779851885096\">Упражнение 1</translation>\n  <translation id=\"2606744025024635328\">Узнайте, как настроить роутинг в вашем Angular приложении</translation>\n  <translation id=\"8428348909593474745\">Шаг 1</translation>\n  <translation id=\"2088668399944240044\">Декораторы</translation>\n  <translation id=\"9056543421332015840\">Упражнение</translation>\n  <translation id=\"3943314737845757694\">Шаг 2</translation>\n  <translation id=\"5354338296880936637\">К разделу &quot;Шаблоны&quot;</translation>\n  <translation id=\"8221226883715428312\">Пример зависимости</translation>\n  <translation id=\"6832879550227262389\">Сравнение</translation>\n  <translation id=\"5526580419389054630\">Шаг 3</translation>\n  <translation id=\"6756063415709931138\">Узнайте, как комбинировать компоненты</translation>\n  <translation id=\"6479000658382583894\">Простая форма</translation>\n  <translation id=\"6840782180922133192\">NgModel</translation>\n  <translation id=\"2957163997998056771\">Валидация</translation>\n  <translation id=\"2567247212086724875\">Отображение ошибки валидации</translation>\n  <translation id=\"7356419770205292883\">Валидаторы</translation>\n  <translation id=\"9096582104534626115\">Свойства Touched &amp; Dirty</translation>\n  <translation id=\"544989820040948372\">Material инпуты (бонус!)</translation>\n  <translation id=\"1590022389491166903\">Теперь сделаем наше приложение более привлекательным при помощи\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular Material<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> ✨✨</translation>\n  <translation id=\"5691966639616932851\">MatCard</translation>\n  <translation id=\"1176939237964189014\">Заголовок MatCard</translation>\n  <translation id=\"3795029841604666695\">MatButton</translation>\n  <translation id=\"2798270190074840767\">Темы оформления</translation>\n  <translation id=\"8060234990603309275\">Узнайте, как создавать простые формы в Angular</translation>\n  <translation id=\"3008420115644088420\">Конфигурация</translation>\n  <translation id=\"2102825898069375693\">Меню</translation>\n  <translation id=\"2000882412474211848\">Узнайте, как создавать красивые интерфейсы с помощью Angular Material</translation>\n  <translation id=\"2654534150745917262\">Узнайте, как использовать Angular Dependency Injection</translation>\n  <translation id=\"3895697023415732905\">Система типов</translation>\n  <translation id=\"1956073378030411818\">Классы</translation>\n  <translation id=\"2009894380211077290\">Узнайте, как создать ваше первое Angular приложение!</translation>\n  <translation id=\"9187829672586532965\">Angular CLI — инструмент для командной строки, который можно использовать для ускорения работы с вашим Angular приложением</translation>\n  <translation id=\"2419502187482209382\">Передача данных от родительского компонента к дочернему\n</translation>\n  <translation id=\"2019129744675333223\">Начнем с создания Angular <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> Component <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&apos;а. Компоненты в Angular отвечают за визуальную часть приложения.\n</translation>\n  <translation id=\"6183779997512008819\">Как и компонент, модуль в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - это просто класс 👍(JavaScript class)</translation>\n  <translation id=\"3985764469731255581\">Как и компонент, модуль в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> оборачивается в декоратор, в котором задается конфигурация модуля</translation>\n  <translation id=\"204452644781750281\">При помощи готовых директив, включенных в Angular, можно легко добавить валидацию инпутов</translation>\n  <translation id=\"1433726886237690907\">Если вы очистите инпут, он будет помечен ошибкой, однако при этом никакой ошибки показано не будет. На следующем слайде мы узнаем, как их отображать.</translation>\n  <translation id=\"938217018662676611\">Прочитайте больше о темах Angular Material\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>в этом руководстве<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"1679994121974369604\">Роуты настраиваются с помощью создания списка, привязывающего  URL-адресами к соответствующим компонентам</translation>\n  <translation id=\"6019360885418718089\">router-outlet</translation>\n  <translation id=\"8930981603461909094\">В этом примере, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>realPuppy<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> — экземпляр интерфейса <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Puppy<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.\n</translation>\n  <translation id=\"2311168139770217773\">Angular-cli</translation>\n  <translation id=\"4915312620327409019\">Ошибка всегда показана</translation>\n  <translation id=\"angularWrittenInTypeScript\">Angular написан на TypeScript, который, в свою очередь, является расширением JavaScript. Узнайте больше о TypeScript.</translation>\n  <translation id=\"AngularIsWrittenInTypeScript\">Angular написан на TypeScript. Узнайте больше про основы языка.\n</translation>\n  <translation id=\"3337298293457902572\">JavaScript не поддерживает строгую типизацию, что затрудняет разработку крупных приложений</translation>\n  <translation id=\"1580375574119219994\">TypeScript добавляет новую функциональность из следующей версии JavaScript</translation>\n  <translation id=\"4771765980799553216\">node</translation>\n  <translation id=\"1769865782711595328\">позволяет легко создавать работающее приложение прямо из коробки и генерировать новые компоненты! Он также настраивает конфигурацию сборки.</translation>\n  <translation id=\"5801908609593051593\">Далее: </translation>\n  <translation id=\"3632098750723132623\">Angular Material предоставляет набор Angular компонентов в стиле\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Material Design<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>, которые имеют ряд преимуществ: </translation>\n  <translation id=\"7498942977565054992\">MatToolBar</translation>\n  <translation id=\"5706278102391803377\">Смотрите также <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>руководство для начала работы с Angular Material<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"239501121574257057\">Таким образом, наш компонент будет зависеть от VideoService</translation>\n  <translation id=\"7872178699271799911\">Далее...</translation>\n  <translation id=\"4167729314672427096\">Показать все шаги</translation>\n  <translation id=\"6123662742212719424\">Декораторы в <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph> Angular <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> добавляют специальную информацию к классу.</translation>\n  <translation id=\"387888043502947069\">Условное отображение (*ngIf)</translation>\n  <translation id=\"7650606661639729179\">Этот курс написан на Angular</translation>\n  <translation id=\"7247528943225057900\">Поставьте нам  ⭐ если вы выучили что-то полезное</translation>\n  <translation id=\"3365331980798848575\">Не надо меня бояться, меня легко использовать</translation>\n  <translation id=\"4085083794028560127\">Если в результате увидите число(номер версии), то все в порядке, переходите на следующий слайд. </translation>\n  <translation id=\"4042225532935248191\">Декораторы в TypeScript были созданы по образу и подобию аналогичной функциональности в языке Python.</translation>\n  <translation id=\"6152129975764793011\">Мы показываем захардкоженый список видеозаписей в нашем компоненте, но в реальном приложении мы бы загрузили их с сервера</translation>\n  <translation id=\"1360085883339715410\">Код для получения данных был бы выделен в отдельный класс (сервис) с именем  VideoService </translation>\n  <translation id=\"3398399443611989744\">С ростом нашего приложения, увеличивается и число зависимостей. В свою очередь, зависимости будут обрастать собственными зависимостями. Держать это все под контролем вручную становится все сложнее и сложнее</translation>\n  <translation id=\"7439203421419595915\">Чтобы упростить это, у <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> есть механизм, который называется <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Dependency injection<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> </translation>\n  <translation id=\"5839870276585422607\" desc=\"AddFormsModule\">app.module.ts: Добавьте FormsModule и MatInputModule в свойство &quot;imports&quot;.</translation>\n  <translation id=\"891470929346566427\" desc=\"AddTitle\">upload/upload.component.html: Добавьте поле ввода &quot;title&quot; и привяжите его к свойству title компонента </translation>\n  <translation id=\"6729408012939811950\" desc=\"AddDescription\">upload/upload.component.html: Добавьте текстовое поле (textarea) &quot;description&quot; и привяжите к свойству description компонента </translation>\n  <translation id=\"8362373699100533468\">Значение <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>dirty<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> положительно, если пользователь изменил значение текстового поля.</translation>\n  <translation id=\"889876683989703032\">Узнайте, как начать работу с Angular приложением в разделе &quot;Angular-cli&quot;</translation>\n  <translation id=\"1020036473936546385\">Все компоненты Angular Material позволяют применять темы. Попробуйте различные темы, нажимая на кнопки ниже:</translation>\n  <translation id=\"240729475417950372\">Router is used to give <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>URLs<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to different parts of your app.</translation>\n  <translation id=\"1358575841391121669\">Новая функциональность последних версий стандарта JavaScript часто может не поддерживаться в некоторых браузерах</translation>\n  <translation id=\"3691746292360137570\">Поэтому был создан <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>TypeScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. Так как TypeScript может быть скомпилирован в JavaScript, он поддерживает все версии современных браузеров. </translation>\n  <translation id=\"6019046071155114697\">TypeScript расширяет последнюю версию JavaScript</translation>\n  <translation id=\"3449159358361800656\">Интерфейсы в Typescript позволяют указывать, какие свойства и методы должны быть у объекта</translation>\n  <translation id=\"5672896818220555303\">Типы массивов указываются с помощью <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Array<ph name=\"INTERPOLATION\"><ex>{{ &apos;&lt;&apos; }}</ex>{{ &apos;&lt;&apos; }}</ph> тип <ph name=\"INTERPOLATION_1\"><ex>{{ &apos;&gt;&apos; }}</ex>{{ &apos;&gt;&apos; }}</ph><ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> или <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Type[]<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"9170081835282059303\"><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>import<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> и <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>export<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> предназначены не только для классов. Они работают и с переменными, функциями и другими конструкциями!</translation>\n  <translation id=\"8077012278759389172\">Accessors (Getters / Setters)</translation>\n  <translation id=\"3264452655068017433\">Имя</translation>\n  <translation id=\"4040670753951663745\">Email (не обязателен и будет спрятан)</translation>\n  <translation id=\"6672095411961477302\">Отправить</translation>\n  <translation id=\"7780216916864532511\">Исходный код открыт на 100% и доступен на\n        <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>\n          Github\n        <ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"8146812459539176062\">Примитивные типы (string, number, и прочие...)\n</translation>\n  <translation id=\"790391870463021212\">Теперь вы знаете достаточно <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>TypeScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> чтобы начать изучение\n          <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>! Узнайте больше о TypeScript на\n          <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>TypeScript веб-сайт<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph></translation>\n  <translation id=\"5362445790127467384\">Дополнительные возможности привязки событий</translation>\n  <translation id=\"3944267632594384457\">Мы познакомимся с более удобным способом работы с текстовыми полями в разделе &quot;Формы&quot;</translation>\n  <translation id=\"5809886278086223708\">Настроить маршрутизацию в Angular можно в 3 шага:</translation>\n  <translation id=\"802747981858883975\">Конец раздела &quot;Маршрутизация&quot;</translation>\n  <translation id=\"7915809409906759185\">Вы можете добавить material toolbar в два шага:</translation>\n  <translation id=\"606239688044547568\">Конец раздела &quot;angular-cli&quot;</translation>\n  <translation id=\"3925110322481983370\">Выполните <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>npm install -g @angular/cli<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>, чтобы\n установить\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular cli<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> на ваш компьютер</translation>\n  <translation id=\"847815468721324902\">Чтобы создать новое Angular приложение, выполните:\n      <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng new awesome-app<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>, затем <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>cd awesome-app<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></translation>\n  <translation id=\"4707431474993551896\">Конец раздела &quot;angular-cli&quot;</translation>\n  <translation id=\"8465131485233524062\">Для обработки действий пользователя можно использовать привязку событий (event-binding). Для этого мы оборачиваем имя события в скобки и передаем выражение-обработчик:</translation>\n  <translation id=\"7777498168007367858\">В качестве альтернативы использования скобок для обозначения привязки событий (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>(event)<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>), может быть использован префикс &quot;on-&quot;, например <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>on-click<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> это то же самое что и <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>(click)<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.</translation>\n  <translation id=\"6553987567173031055\">Angular также предоставляет удобный способ обработки горячих клавиш.\nПопробуйте обновить сообщение, нажав Control + Enter в текстовом поле.</translation>\n  <translation id=\"1375939118759231175\">Чтобы получить доступ к HTML элементу или Angular компоненту из шаблона, можно пометить этот элемент как <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>#name<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, и он станет доступным как <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>name<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> во всём шаблоне: </translation>\n</translationbundle>\n"
  },
  {
    "path": "apps/codelab/src/locale/messages.xmb",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE messagebundle [\n<!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)>\n]>\n<messagebundle>\n  <msg id=\"createFirstNgApp\"><source>src/app/components/index/index.component.html:2,4</source>\n    Create your first Angular app\n  </msg>\n  <msg id=\"templates\"><source>src/app/components/index/index.component.html:5</source><source>src/app/codelabs/angular/templates/templates.component.html:119</source>Templates</msg>\n  <msg id=\"dependencyInjection\"><source>src/app/components/index/index.component.html:6,8</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:40</source>\n    Dependency-Injection\n  </msg>\n  <msg id=\"componentTree\"><source>src/app/components/index/index.component.html:9</source>Component-Tree</msg>\n  <msg id=\"customEvents\"><source>src/app/components/index/index.component.html:10</source>Custom-Events</msg>\n  <msg id=\"angularWrittenInTypeScript\"><source>src/app/components/index/index.component.html:11,14</source>\n    Angular is written in TypeScript, a superset of JavaScript. Learn\n    TypeScript.\n  </msg>\n  <msg id=\"learnHowToBootstrapApp\"><source>src/app/components/index/index.component.html:15,17</source>\n    Learn how to create and bootstrap your first Angular application\n  </msg>\n  <msg id=\"learnUsingTemplates\"><source>src/app/components/index/index.component.html:18,20</source>\n    Learn how to use Angular templates\n  </msg>\n  <msg id=\"learnToProvideDependencies\"><source>src/app/components/index/index.component.html:21,23</source>\n    Learn how to provide dependencies to your code instead of hard-coding them\n  </msg>\n  <msg id=\"learnToStructureAppWithReusableComponents\"><source>src/app/components/index/index.component.html:27,29</source>\n    Learn how to structure your app with reusable components\n  </msg>\n  <msg id=\"learnToBindToEvents\"><source>src/app/components/index/index.component.html:30,32</source>\n    Learn to bind to events.\n  </msg>\n  <msg id=\"2339071718884287683\"><source>src/app/components/index/index.component.html:40</source>Angular Codelab</msg>\n  <msg id=\"4302113860648465389\"><source>src/app/components/index/index.component.html:41,44</source>\n      Welcome to the interactive Angular Codelab. Here you can learn the basics\n      of <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>!\n    </msg>\n  <msg id=\"7759544910570343367\"><source>src/app/components/index/index.component.html:52</source>Learn TypeScript</msg>\n  <msg id=\"3142775397600131493\"><source>src/app/components/index/index.component.html:53</source>Skip if you&apos;re familiar with TypeScript</msg>\n  <msg id=\"4686588615295148276\"><source>src/app/components/index/index.component.html:59</source>Learn Angular</msg>\n  <msg id=\"7394559216825981545\"><source>src/app/components/index/index.component.html:68,70</source>\n      Or click here to see full contents...\n    </msg>\n  <msg id=\"1697699319086615837\"><source>src/app/components/slides/title-slide/title-slide.component.html:6,8</source>\n      Use <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>←<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>→<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> on your keyboard to navigate the slides.\n    </msg>\n  <msg id=\"9018170935953099606\"><source>src/app/components/slides/title-slide/title-slide.component.html:11</source>Prerequisites:</msg>\n  <msg id=\"2332684851324173587\"><source>src/app/components/slides/closing-slide/codelab-closing-slide.component.html:5,10</source>\n    This codelab is written in Angular and\n    <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>available on Github<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>. Please ⭐ if you enjoyed it.\n  </msg>\n  <msg id=\"6930162363603699164\"><source>../../libs/slides/src/lib/arrows/slides-arrows.component.html:12</source>Next slide</msg>\n  <msg id=\"3264452655068017433\"><source>../../libs/feedback/src/lib/feedback-widget/feedback-widget.component.html:41</source>Enter your name</msg>\n  <msg id=\"4040670753951663745\"><source>../../libs/feedback/src/lib/feedback-widget/feedback-widget.component.html:52,53</source>Email is optional and, will not displayed\n      </msg>\n  <msg id=\"4712788926759159307\"><source>../../libs/feedback/src/lib/feedback-widget/feedback-widget.component.html:57</source>Describe your issue or share your ideas</msg>\n  <msg id=\"6672095411961477302\"><source>../../libs/feedback/src/lib/feedback-widget/feedback-widget.component.html:70,72</source>\n          Send\n        </msg>\n  <msg id=\"perfect\"><source>../../libs/feedback/src/lib/feedback-rating/feedback-rating.component.html:2</source>Perfect</msg>\n  <msg id=\"good\"><source>../../libs/feedback/src/lib/feedback-rating/feedback-rating.component.html:3</source>good</msg>\n  <msg id=\"ok\"><source>../../libs/feedback/src/lib/feedback-rating/feedback-rating.component.html:4</source>ok</msg>\n  <msg id=\"hopedForMore\"><source>../../libs/feedback/src/lib/feedback-rating/feedback-rating.component.html:5</source>Hoped for more</msg>\n  <msg id=\"3134509873264839334\"><source>../../libs/feedback/src/lib/feedback-rating/feedback-rating.component.html:12</source>Rate this lesson ...</msg>\n  <msg id=\"7650606661639729179\"><source>src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.component.html:9</source>This Codelab is written in Angular!</msg>\n  <msg id=\"7780216916864532511\"><source>src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.component.html:10,15</source>\n        It&apos;s 100% open-source and is available on\n        <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>\n          Github\n        <ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n      </msg>\n  <msg id=\"7247528943225057900\"><source>src/app/components/buttons-nav-bar/menu-github-widget/menu-github-widget.component.html:16</source>Please ⭐ the repo if you find it useful.</msg>\n  <msg id=\"shorthandFunction\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:2,4</source>\n    Or use shorthand function notation.\n  </msg>\n  <msg id=\"errorNotAPuppy\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:5,7</source>\n    Error: this is clearly not a puppy\n  </msg>\n  <msg id=\"thisIsNumber\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:8</source>This is a number</msg>\n  <msg id=\"useShorthandNotation\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:9,11</source>\n    Or use shorthand function notation.\n  </msg>\n  <msg id=\"calledArrowFunction\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:12,14</source>\n    (Also called arrow function)\n  </msg>\n  <msg id=\"typescriptCanInferNumber\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:15,17</source>\n    Actually TypeScript can infer number here;\n  </msg>\n  <msg id=\"typescriptCanInferString\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:18,20</source>\n    TypeScript can infer it&apos;s a string.\n  </msg>\n  <msg id=\"cantAddNumAndBool\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:21,23</source>\n    Can&apos;t add number and boolean\n  </msg>\n  <msg id=\"cantSliceNum\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:24</source>Can&apos;t slice a number</msg>\n  <msg id=\"canSliceString\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:25</source>But can slice a string!</msg>\n  <msg id=\"works\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:26</source>Works!</msg>\n  <msg id=\"typeDoesSameThing\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:27,29</source>\n    Type[] does the same thing.\n  </msg>\n  <msg id=\"thisIsMethod\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:30</source>This is a method.</msg>\n  <msg id=\"thatsHowRussianDogsTalk\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:31,33</source>\n    That&apos;s how russian dogs talk.\n  </msg>\n  <msg id=\"nowWeCanInstantiate\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:34,36</source>\n    Now we can instantiate (create) it\n  </msg>\n  <msg id=\"andUseItsMethods\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:37</source>And use its methods</msg>\n  <msg id=\"laterWeWillHaveCode\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:38,40</source>\n    Later we&apos;ll have code here\n  </msg>\n  <msg id=\"letsCreateMorePuppies\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:41,43</source>\n    Let&apos;s create more puppies\n  </msg>\n  <msg id=\"varAllowedNotRecommended\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:44,46</source>\n    Var is still allowed but not recommended.\n  </msg>\n  <msg id=\"letInsteadOfVar\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:47,49</source>\n    Let should be used instead of var.\n  </msg>\n  <msg id=\"letUnavailableOutsideIfUnlikeIf\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:53,55</source>\n    Unlike var let is unavailable outside of this if.\n  </msg>\n  <msg id=\"constLikeLet\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:56,58</source>\n    Const is like let, but if you try to change it, TS will give you an error.\n  </msg>\n  <msg id=\"definitelyBoolean\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:59,61</source>\n    okay, definitely a boolean\n  </msg>\n  <msg id=\"createClassCodelab\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:62,64</source>\n    Create a class called &apos;Codelab&apos;\n  </msg>\n  <msg id=\"exportClass\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:65</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:24</source>Export the class</msg>\n  <msg id=\"addConstructor\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:66</source>Add a constructor</msg>\n  <msg id=\"makeConstructorTakeParamGuests\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:70,72</source>\n    Make constructor take a parameter &apos;guests&apos;\n  </msg>\n  <msg id=\"specifyTheTypeForGuests\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:73,76</source>\n    Specify the type for the guests parameter (hint: it&apos;s an array of a type\n    Guest)\n  </msg>\n  <msg id=\"makeParemeterPublic\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:77,80</source>\n    Make the parameter public (note that now you can access it anywhere in the\n    class using this.guests)\n  </msg>\n  <msg id=\"createNewMethodGetGuestsComing\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:84,86</source>\n    Create new method &apos;getGuestsComing&apos;\n  </msg>\n  <msg id=\"specifyTheTypeForB\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:88,91</source>\n    &quot;b&quot; in the code below is highlighted, because TypeScript is missing the\n    type. Specify the type for b.\n  </msg>\n  <msg id=\"typescriptHighlightsErrorFix224\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:95,98</source>\n    With this information TypeScript can highlight the error. Fix it, make 2 + 2\n    = 4 again!\n  </msg>\n  <msg id=\"modifyGetGuestsComingToFilter\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:103,106</source>\n    Modify getGuestsComing to filter the guests array return an array of guests\n    with the &apos;coming&apos; property set to true.\n  </msg>\n  <msg id=\"typescript\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:115</source>TypeScript</msg>\n  <msg id=\"AngularIsWrittenInTypeScript\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:117</source>Angular is written in TypeScript. Learn more about the language basics.</msg>\n  <msg id=\"1425139040251941806\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:119</source>Basic understanding of JavaScript is required.</msg>\n  <msg id=\"6225777299423953966\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:125</source>Why TypeScript</msg>\n  <msg id=\"3450228617967699820\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:126,128</source>\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>JavaScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> is a great language, but there&apos;s space for improvement:\n    </msg>\n  <msg id=\"3337298293457902572\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:130,133</source>\n        JS is not type safe which makes it harder to develop large scale\n        applications\n      </msg>\n  <msg id=\"1358575841391121669\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:134,137</source>\n        New features of the latest versions of JS standards (ES2018, ES2019) are\n        not supported well across all the browsers\n      </msg>\n  <msg id=\"7378420032672625836\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:139,143</source>\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>ES<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> stands for\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>ECMAScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph><ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>, which is the name of the JavaScript language specification (standard)\n    </msg>\n  <msg id=\"4845793289318766506\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:147</source>TypeScript</msg>\n  <msg id=\"3691746292360137570\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:148,151</source>\n      This is why <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>TypeScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> has been created. Since TypeScript can be\n      compiled to JavaScript, it can be used in any modern browser.\n    </msg>\n  <msg id=\"6019046071155114697\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:155</source>TypeScript extends the latest version of JavaScript</msg>\n  <msg id=\"1580375574119219994\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:156,158</source>\n            TypeScript adds new features from the next version of JavaScript\n          </msg>\n  <msg id=\"1603010177589300581\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:159,161</source>\n            On top of it, TypeScript adds an optional type system and decorators\n          </msg>\n  <msg id=\"519638442093250618\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:168,170</source>\n      Decorator looks like @twitter_handles, we&apos;ll learn more about them later\n    </msg>\n  <msg id=\"3895697023415732905\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:180</source><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:200</source>Type System</msg>\n  <msg id=\"8469244833465514706\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:181,184</source>\n      Below we have an <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>add<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> function, and we&apos;re adding 2 and 2. What could\n      go wrong?\n    </msg>\n  <msg id=\"3382055352600412380\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:191,195</source>\n      Turns out it&apos;s possible to pass a string to this function and we get\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>22<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> instead of <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>4<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. Let&apos;s see how TypeScript can help address\n      this issue on the next slide\n    </msg>\n  <msg id=\"7706542074780362578\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:201,205</source>\n      TypeScript uses &quot;<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>:<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&quot; to specify the type information (e.g.\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>n: number<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>). Both <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>a<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>b<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> should be numbers. We\n      specified the type for <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>a<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, now it&apos;s your turn!\n    </msg>\n  <msg id=\"4416420426193040614\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:211</source>The code above is editable!</msg>\n  <msg id=\"8146812459539176062\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:216,217</source>Primitives (strings, numbers, etc...)\n    </msg>\n  <msg id=\"7555895897701490119\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:218</source>Below are more types we can use</msg>\n  <msg id=\"3591838911718818191\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:232</source>Interfaces</msg>\n  <msg id=\"3449159358361800656\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:233,236</source>\n      TypeScript Interfaces allow to specify properties and methods for an\n      object.\n    </msg>\n  <msg id=\"8930981603461909094\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:246,248</source>\n      Here, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>realPuppy<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> is an implementation of the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Puppy<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> Interface.\n    </msg>\n  <msg id=\"3570291272341874994\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:252</source>Arrays</msg>\n  <msg id=\"5672896818220555303\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:253,256</source>\n      Array types are defined as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Array<ph name=\"INTERPOLATION\"><ex>{{ &apos;&lt;&apos; }}</ex>{{ &apos;&lt;&apos; }}</ph>Type<ph name=\"INTERPOLATION_1\"><ex>{{ &apos;&gt;&apos; }}</ex>{{ &apos;&gt;&apos; }}</ph><ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> or\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Type[]<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n    </msg>\n  <msg id=\"5300204482622127378\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:263,266</source>\n      Here, each element in the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>betterCats<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> array is an instance of the\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Cat<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> Interface.\n    </msg>\n  <msg id=\"1956073378030411818\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:271</source>Classes</msg>\n  <msg id=\"4690830357394206486\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:272</source>TypeScript has <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>classes<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, and Angular uses them heavily.</msg>\n  <msg id=\"952111865578275945\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:273,276</source>\n      They are similar to classes in other languages, and are used to group\n      methods and properties together\n    </msg>\n  <msg id=\"6104897002627313660\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:286</source>Constructor</msg>\n  <msg id=\"5150753083587849200\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:287,290</source>\n      There&apos;s a special method on the class called <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>constructor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. It&apos;s run\n      when the class is instantiated and allows the class to take parameters\n    </msg>\n  <msg id=\"6722511841825238135\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:300</source>Access Modifiers</msg>\n  <msg id=\"462788382585371115\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:301,305</source>\n      Constructor parameters marked as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>public<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> (or private, or protected),\n      become class properties accessible as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>this.ParameterName<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> within the\n      class\n    </msg>\n  <msg id=\"4472178753190540128\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:312,314</source>\n      private or protected properties are not visible outside of the class.\n    </msg>\n  <msg id=\"7462301153729425254\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:318</source>Export</msg>\n  <msg id=\"6571723708298379001\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:319,323</source>\n      By the way, did you notice the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>export<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> keyword before class? It is\n      used to share information between files. In the next slide, we&apos;ll show you\n      how to import and use this class in a different file\n    </msg>\n  <msg id=\"1071721880474488785\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:338</source>Import</msg>\n  <msg id=\"5575767639565396335\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:339</source>Now we can use the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Puppy<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> class in the other file</msg>\n  <msg id=\"9170081835282059303\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:347,350</source>\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>import<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>export<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> keywords are not just for classes. They\n      work with variables, functions and other things!\n    </msg>\n  <msg id=\"1012910011980066980\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:354</source>Filter (One last thing)</msg>\n  <msg id=\"687605542005054114\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:355,358</source>\n      &quot;<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>filter<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&quot; is an Array method that allows you to generate a new array\n      keeping only values that satisfy the condition\n    </msg>\n  <msg id=\"5937251202465808296\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:366</source>More</msg>\n  <msg id=\"2776231080049358900\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:367</source>TypeScript supports lots of other cool features such as:</msg>\n  <msg id=\"2778796732744507615\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:374</source>Enums</msg>\n  <msg id=\"554505692155626925\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:382</source>Async / Await</msg>\n  <msg id=\"8077012278759389172\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:390</source>Accessors (Getters / Setters)</msg>\n  <msg id=\"2854346138345342774\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:398</source>Destructuring</msg>\n  <msg id=\"2824004502397491284\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:406</source>Arrow functions</msg>\n  <msg id=\"4818010747810947110\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:409</source>And more!</msg>\n  <msg id=\"425764765304851377\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:411,415</source>\n      We won&apos;t cover them in detail, check out the\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>TypeScript<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n      website!\n    </msg>\n  <msg id=\"9056543421332015840\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:419</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:196</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:304</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:417</source><source>src/app/codelabs/angular/templates/templates.component.html:170</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:278</source><source>src/app/codelabs/angular/router/router.component.html:125</source><source>src/app/codelabs/angular/material/material.component.html:181</source><source>src/app/codelabs/angular/forms/forms.component.html:183</source>Exercise</msg>\n  <msg id=\"1966301836895698534\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:420</source>In the next slide we have a TypeScript exercise</msg>\n  <msg id=\"6106271638521818742\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:421,425</source>\n      Your task is to build a TypeScript class called Codelab which will take a\n      list of guests, and will have a method to output only the ones who are\n      coming.\n    </msg>\n  <msg id=\"2921334658251839102\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:426</source>The result will be as follows:</msg>\n  <msg id=\"4985288594861826441\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:446</source><source>src/app/codelabs/angular/templates/templates.component.html:377</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:303</source><source>src/app/codelabs/angular/component-tree/component-tree.component.html:266</source>Milestone Completed</msg>\n  <msg id=\"790391870463021212\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:449,453</source>\n          Now you should know enough <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>TypeScript<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to start learning\n          <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>! Read more about TypeScript on\n          <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>TypeScript web site<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n        </msg>\n  <msg id=\"7872178699271799911\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:459</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:510</source><source>src/app/codelabs/angular/templates/templates.component.html:382</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:308</source><source>src/app/codelabs/angular/router/router.component.html:168</source><source>src/app/codelabs/angular/material/material.component.html:227</source><source>src/app/codelabs/angular/forms/forms.component.html:224</source>Next:</msg>\n  <msg id=\"2009894380211077290\"><source>src/app/codelabs/angular/typescript/typescript/typescript.component.html:460,462</source>\n            Learn how to create your first Angular app!\n          </msg>\n  <msg id=\"1232468595022253521\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:66,68</source>\n      ES7\n    </msg>\n  <msg id=\"7684186891767163500\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:78,80</source>\n      Decorators\n    </msg>\n  <msg id=\"8826294926629434573\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:90,92</source>\n      Types\n    </msg>\n  <msg id=\"5784427236154138130\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:102,104</source>\n      TypeScript\n    </msg>\n  <msg id=\"643059253899545925\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:114,116</source>\n      Classes\n    </msg>\n  <msg id=\"7034028115313507184\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:126,128</source>\n      Modules\n    </msg>\n  <msg id=\"2396430173482915571\"><source>src/app/codelabs/angular/typescript/typescript/typescript-svg/typescript-svg.component.html:138,140</source>\n      More...\n    </msg>\n  <msg id=\"4201318520171370271\"><source>src/app/components/tests/simple-tests.component.html:27</source>see only next step</msg>\n  <msg id=\"4167729314672427096\"><source>src/app/components/tests/simple-tests.component.html:28</source>see all steps</msg>\n  <msg id=\"componentIsDecorator\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:2,4</source>\n    @Component is an Angular decorator\n  </msg>\n  <msg id=\"noSemicolon\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:5,7</source>\n    No semicolon here (as it attaches itself to the class below\n  </msg>\n  <msg id=\"decoratorGoesAboveEntity\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:8,10</source>\n    The Decorator goes directly above the decorated entity (class in this case)\n  </msg>\n  <msg id=\"componentNameIsClassName\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:11,13</source>\n    Component name is the class name (AppComponent).\n  </msg>\n  <msg id=\"createClassAppComponent\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:14,16</source>\n    Create a class called &apos;AppComponent&apos;\n  </msg>\n  <msg id=\"createClassAppModule\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:17,19</source>\n    Create a class called &apos;AppModule&apos;\n  </msg>\n  <msg id=\"allSetBootstrapApp\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:20,22</source>\n    All set! Bootstrap your application\n  </msg>\n  <msg id=\"addComponentDecorator\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:25,27</source>\n    Add a Component decorator for the class\n  </msg>\n  <msg id=\"addSelectorMyApp\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:28,30</source>\n    Add a selector to the component decorator and set it to &apos;my-app&apos;\n  </msg>\n  <msg id=\"addTemplateHelloMewTube\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:31,33</source>\n    Add a template that contains: h1 with a text &quot;Hello MewTube!&quot;\n  </msg>\n  <msg id=\"addNgModuleDecorator\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:34,36</source>\n    Add a NgModule decorator for the class\n  </msg>\n  <msg id=\"addBrowserModuleToNgModule\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:37,39</source>\n    Add &apos;BrowserModule&apos; to the NgModule decorator imports\n  </msg>\n  <msg id=\"addAppComponentToDeclarations\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:43,45</source>\n    Add &apos;AppComponent&apos; to the &apos;declarations&apos; property of the decorator\n  </msg>\n  <msg id=\"addAppComponentToBootstrap\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:46,48</source>\n    Add &apos;AppComponent&apos; to the &apos;bootstrap&apos; property of the decorator\n  </msg>\n  <msg id=\"CreateYFirstAgApp\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:56</source>Create your first Angular app</msg>\n  <msg id=\"2628877838206351210\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:58</source>You will learn how to create your first Angular component, put it in a module, and bootstrap the app.</msg>\n  <msg id=\"3602849743531844327\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:60</source>Knowing TypeScript basics would help a lot</msg>\n  <msg id=\"3420408458155669913\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:67</source>What is Angular?</msg>\n  <msg id=\"4335494429592099313\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:69,75</source>\n        Angular is a <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>development platform<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> for building mobile and desktop\n        applications. Angular lets you <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>extend HTML&apos;s syntax<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to express\n        your application&apos;s components clearly and succinctly. Angular&apos;s binding\n        and Dependency Injection <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>eliminate much of the code<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> you would\n        otherwise have to write.\n      </msg>\n  <msg id=\"316509725772872372\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:81</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:97</source><source>src/app/codelabs/angular/templates/templates.component.html:129</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:107</source><source>src/app/codelabs/angular/router/router.component.html:39</source><source>src/app/codelabs/angular/router/router.component.html:61</source><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:16</source>Intro</msg>\n  <msg id=\"7127434905431284986\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:82</source>Given an HTML file:</msg>\n  <msg id=\"6161264726933372468\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:88,91</source>\n      Let&apos;s create an Angular app which replaces the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>hello-world<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> HTML\n      element with the app&apos;s contents.\n    </msg>\n  <msg id=\"5463471054765192731\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:92</source>This can be done with 3 simple steps.</msg>\n  <msg id=\"7109785117359301161\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:98</source>The 3 steps are:</msg>\n  <msg id=\"8986953020363470779\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:100</source>Create an Angular component</msg>\n  <msg id=\"7117530673690701168\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:101</source>Create an Angular module</msg>\n  <msg id=\"1813487159288766093\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:102</source>Bootstrap the module</msg>\n  <msg id=\"8428348909593474745\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:108</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:224</source>Step 1</msg>\n  <msg id=\"2019129744675333223\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:109,112</source>\n      Start by creating an Angular <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Component<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. Components in Angular are\n      responsible for the visual part of the app\n    </msg>\n  <msg id=\"3518604211309075388\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:118,121</source>\n      An Angular component is just a class. Properties and behavior can be added\n      inside.\n    </msg>\n  <msg id=\"2088668399944240044\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:126</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:142</source>Decorators</msg>\n  <msg id=\"7834786013480490982\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:134</source>The class is adorned with a <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>@Component<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> decorator</msg>\n  <msg id=\"6123662742212719424\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:135,137</source>\n      Decorators attach <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> specific information to the class.\n    </msg>\n  <msg id=\"8963391977207807015\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:143,146</source>\n      Decorators are a new feature of TypeScript. They attach metadata to a\n      class, function, property or variable\n    </msg>\n  <msg id=\"4042225532935248191\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:153,156</source>\n      TypeScript decorators are inspired by a similar feature in the Python\n      language.\n    </msg>\n  <msg id=\"3540108566782816830\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:161</source>Selector</msg>\n  <msg id=\"901484278635100487\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:162,166</source>\n      Selectors define the location of the component. When Angular renders this\n      component, it&apos;ll find a <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>hello-world<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> HTML element in the document\n      and render the component inside of it\n    </msg>\n  <msg id=\"1334525262704836521\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:179</source>Inline Template</msg>\n  <msg id=\"5776232626408915586\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:180</source>Template defines the HTML code that the component generates</msg>\n  <msg id=\"3490030044563966992\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:188,191</source>\n      If the amount of HTML grows out of hand, it&apos;s possible (and recommended)\n      to use a <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>templateUrl<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> instead and provide a path to the HTML file.\n    </msg>\n  <msg id=\"7639270097778554357\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:197,200</source>\n      In the next slide you&apos;ll create your first <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> component! We&apos;ll\n      do all the wiring for you. The result will look like this:\n    </msg>\n  <msg id=\"61555616227480717\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:216</source>Create first Angular component!</msg>\n  <msg id=\"3943314737845757694\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:222</source><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:242</source>Step 2</msg>\n  <msg id=\"3356116837774924473\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:223</source>Next step is to declare the component in an <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.</msg>\n  <msg id=\"5126304564648715351\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:224,227</source>\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> does not have any visual representation and is used\n      exclusively for grouping Angular building blocks together\n    </msg>\n  <msg id=\"5509161378825547695\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:228,230</source>\n      We will learn more about NgModules in the future milestones\n    </msg>\n  <msg id=\"8988249734928621313\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:235</source>Module Class</msg>\n  <msg id=\"6183779997512008819\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:236</source>Like a component, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> module is just a class</msg>\n  <msg id=\"8027333466268729668\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:249</source>NgModule Decorator</msg>\n  <msg id=\"3985764469731255581\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:250,253</source>\n      Like a component, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> module is adorned with a decorator\n      providing metadata\n    </msg>\n  <msg id=\"1434785076190731280\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:266</source>Browser Module</msg>\n  <msg id=\"2046003391679469154\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:272</source>Declarations</msg>\n  <msg id=\"6207292630730452152\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:273,276</source>\n      The <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Declarations array<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> specifies components belonging to the\n      AppModule\n    </msg>\n  <msg id=\"1101953121986747707\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:288</source>Bootstrap</msg>\n  <msg id=\"6679702569828672754\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:289,292</source>\n      The component passed into the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>bootstrap<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> array will be created and\n      displayed in your <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>index.html<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> file\n    </msg>\n  <msg id=\"5729375766021589223\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:305,309</source>\n      In the next slide you&apos;ll create your first <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> module! We&apos;ll\n      use the component from the previous exercises and do all the wiring for\n      you. The result will look like this:\n    </msg>\n  <msg id=\"4814190538810111436\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:324</source>Create first NgModule.</msg>\n  <msg id=\"7662751436458775011\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:330</source>Bootstrapping</msg>\n  <msg id=\"6827469684284953312\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:331,333</source>\n      We have everything ready, so now it&apos;s time to start (bootstrap) the app!\n    </msg>\n  <msg id=\"5839300755199336558\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:334,337</source>\n      Passing your <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>AppModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>bootstrapModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> method will\n      start up all the components from that module&apos;s bootstrap section\n    </msg>\n  <msg id=\"4399973873640793995\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:344,346</source>\n      For most simple apps, you can just copy/paste the code above &quot;as is&quot;\n    </msg>\n  <msg id=\"699691489139693623\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:350</source>Bootstrapping 1</msg>\n  <msg id=\"6908434431695362158\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:351</source>How does bootstrapping work in Angular?</msg>\n  <msg id=\"6874245697228107216\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:353,356</source>\n      1. Kicks off execution environment. <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>platformBrowserDynamic()<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> tells\n      Angular that we are operating in the browser\n    </msg>\n  <msg id=\"3128495234135543796\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:367,368</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:388,389</source><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:411,412</source>Read more about root module and bootstrapping in Angular\n      </msg>\n  <msg id=\"4470411477201731376\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:373</source>Bootstrapping 2</msg>\n  <msg id=\"7573108776950995216\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:374,377</source>\n      2. Angular initializes the component from the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>bootstrap<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> array in\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>app.module.ts<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>HelloWorldComponent<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> in this case)\n    </msg>\n  <msg id=\"3263507238146950325\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:394</source>Bootstrapping 3</msg>\n  <msg id=\"8154401785955657985\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:395,399</source>\n      3. Angular looks in the document for an element matching the selector\n      defined in <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>HelloWorldComponent<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>&apos;hello-world&apos;<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> in our case)\n      and inserts the component inside that element\n    </msg>\n  <msg id=\"2407260837719515490\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:418,420</source>\n      All set! In the next page you&apos;ll bootstrap your first <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> app!\n    </msg>\n  <msg id=\"1313383644474336301\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:436,439</source>\n          Now that we&apos;ve got both NgModule and the component ready, let&apos;s\n          bootstrap the app!\n        </msg>\n  <msg id=\"7430680760319628492\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:447</source><source>src/app/codelabs/angular/component-tree/component-tree.component.html:201</source>Review</msg>\n  <msg id=\"8145952131430725333\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:448</source>Loading order: index -&gt; main -&gt; app.module -&gt; app.component</msg>\n  <msg id=\"4850683624715159256\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:494,497</source>\n      While Angular is loading, the contents of the element will stay the same\n      (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Loading...<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>) in this case\n    </msg>\n  <msg id=\"4135298275558664404\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:503</source>End of Bootstrap Section</msg>\n  <msg id=\"470651207723290753\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:506</source><source>src/app/codelabs/angular/router/router.component.html:159</source><source>src/app/codelabs/angular/material/material.component.html:214</source><source>src/app/codelabs/angular/forms/forms.component.html:217</source>Well done! This is the end of the milestone!</msg>\n  <msg id=\"5354338296880936637\"><source>src/app/codelabs/angular/create-first-app/create-first-app.component.html:511,513</source>\n            Go to the templates Milestone\n          </msg>\n  <msg id=\"1349735316800599429\"><source>src/app/codelabs/angular/create-first-app/mode/mode.component.html:2,5</source>\n    Because we&apos;re building a browser web app, we need to pass\n    <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>BrowserModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>imports<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> array\n  </msg>\n  <msg id=\"3156349100343034471\"><source>src/app/codelabs/angular/create-first-app/mode/mode.component.html:26</source>With Angular we build mobile apps using NativeScript or Ionic.</msg>\n  <msg id=\"300734632059872629\"><source>src/app/codelabs/angular/create-first-app/mode/mode.component.html:42</source>With Angular you can build VR apps with A-FRAME or WEBGL.</msg>\n  <msg id=\"5369563118314675128\"><source>src/app/codelabs/angular/create-first-app/mode/mode.component.html:57,70</source>\n  <ph name=\"START_TAG_DIV\"><ex>&lt;div&gt;</ex>&lt;div&gt;</ph>\n    Angular is not just for web apps anymore; you can also use it to create\n    native phone apps and even VR scenes.\n  <ph name=\"CLOSE_TAG_DIV\"><ex>&lt;/div&gt;</ex>&lt;/div&gt;</ph>\n  <ph name=\"START_TAG_DIV_1\"><ex>&lt;div&gt;</ex>&lt;div&gt;</ph>\n    <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph><ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n  <ph name=\"CLOSE_TAG_DIV\"><ex>&lt;/div&gt;</ex>&lt;/div&gt;</ph>\n</msg>\n  <msg id=\"thisIsValidHTML\"><source>src/app/codelabs/angular/templates/templates.component.html:2,4</source>\n    This is valid HTML syntax.\n  </msg>\n  <msg id=\"worksOnAttributeSyntax\"><source>src/app/codelabs/angular/templates/templates.component.html:5,7</source>\n    It works on attribute syntax.\n  </msg>\n  <msg id=\"allowsToConditionallyBindClass\"><source>src/app/codelabs/angular/templates/templates.component.html:11,13</source>\n    It allows to conditionally bind a class\n  </msg>\n  <msg id=\"orStyleProps\"><source>src/app/codelabs/angular/templates/templates.component.html:14</source>Or style properties</msg>\n  <msg id=\"worksWithCustomComponents\"><source>src/app/codelabs/angular/templates/templates.component.html:15,17</source>\n    And works with custom components!\n  </msg>\n  <msg id=\"whenUserClicksItCallsSaveUser\"><source>src/app/codelabs/angular/templates/templates.component.html:21,24</source>\n    When user clicks the button, it calls the &quot;saveUser&quot; function on the\n    component instance and passes the underlying event.\n  </msg>\n  <msg id=\"youCanAlsoCreateEventsForCustomComponents\"><source>src/app/codelabs/angular/templates/templates.component.html:28,32</source>\n    You can also create events for custom components. Here we have a depleted\n    event, and it&apos;s going to call the &quot;soundAlarm&quot; function on the component\n    instance when it fires.\n  </msg>\n  <msg id=\"thereAreShortcutEventBindings\"><source>src/app/codelabs/angular/templates/templates.component.html:36,40</source>\n    There are also shortcut event bindings! The submit function on the component\n    instance will be called when the user presses control and enter (this is an\n    Angular feature).\n  </msg>\n  <msg id=\"userNameHasRefToInput\"><source>src/app/codelabs/angular/templates/templates.component.html:41,43</source>\n    userName has a reference to the input element\n  </msg>\n  <msg id=\"tryChangingToTrue\"><source>src/app/codelabs/angular/templates/templates.component.html:44,46</source>\n    Try changing to true!\n  </msg>\n  <msg id=\"needToRepeatPuppiesHere\"><source>src/app/codelabs/angular/templates/templates.component.html:47,49</source>\n    Need to repeat puppies here\n  </msg>\n  <msg id=\"addVideosProperty\"><source>src/app/codelabs/angular/templates/templates.component.html:50,52</source>\n    app.component.ts: Add a &apos;videos&apos; property, set the value as empty array.\n  </msg>\n  <msg id=\"assignFakeVideosToComponent\"><source>src/app/codelabs/angular/templates/templates.component.html:53,56</source>\n    app.component.ts: Inside of the &apos;search&apos; method assign FAKE_VIDEOS, to the\n    component &apos;videos&apos; property.\n  </msg>\n  <msg id=\"addH1HeaderWithATitle\"><source>src/app/codelabs/angular/templates/templates.component.html:57,60</source>\n    app.html: Add an H1 header, display the &apos;title&apos; property of the AppComponent\n    inside\n  </msg>\n  <msg id=\"addSearchMethodOnComponent\"><source>src/app/codelabs/angular/templates/templates.component.html:62,65</source>\n    app.component.ts: Add a &apos;search&apos; method on the component, that takes a\n    &apos;searchString&apos; parameter.\n  </msg>\n  <msg id=\"addClickHandlerToButtonCallSearch\"><source>src/app/codelabs/angular/templates/templates.component.html:69,73</source>\n    app.html: Add a click handler to the button, call &apos;search&apos; method and pass\n    the input value (Actual search functionality will be implemented in the next\n    exercise)\n  </msg>\n  <msg id=\"addMessageNoVideos\"><source>src/app/codelabs/angular/templates/templates.component.html:74,77</source>\n    app.html: Add a message saying &apos;no videos&apos; which is displayed only when the\n    videos array is empty\n  </msg>\n  <msg id=\"bonusDisplayAllVideosByDefault\"><source>src/app/codelabs/angular/templates/templates.component.html:82,85</source>\n    #Bonus app.component.ts: Right now it takes pressing a search button to\n    display the videos. Instead display all videos by default.\n  </msg>\n  <msg id=\"insideSearchMethodFilterFakeVideos\"><source>src/app/codelabs/angular/templates/templates.component.html:89,93</source>\n    app.component.ts: Inside of the &apos;search&apos; method filter FAKE_VIDEOS and only\n    return videos with the title containing searchString. (hint: use .includes\n    or .indexOf string methods)\n  </msg>\n  <msg id=\"alsoDisplayThumbnail\"><source>src/app/codelabs/angular/templates/templates.component.html:94,96</source>\n    app.html: Also display a thumbnail\n  </msg>\n  <msg id=\"IterateWithNgForAndDisplayTitle\"><source>src/app/codelabs/angular/templates/templates.component.html:100,103</source>\n    app.html: Iterate over the videos using &apos;*ngFor&apos;, and display a title for\n    each\n  </msg>\n  <msg id=\"addButtonWithtextSearch\"><source>src/app/codelabs/angular/templates/templates.component.html:105,107</source>\n    app.html: Add a button tag with a text &apos;search&apos;\n  </msg>\n  <msg id=\"addInputWithPlaceholderVideo\"><source>src/app/codelabs/angular/templates/templates.component.html:108,110</source>\n    app.html: Add an input tag with a &apos;placeholder&apos; attribute set to &apos;video&apos;\n  </msg>\n  <msg id=\"6346332284188948979\"><source>src/app/codelabs/angular/templates/templates.component.html:121</source>Learn more about Angular templates!</msg>\n  <msg id=\"1775873765805142503\"><source>src/app/codelabs/angular/templates/templates.component.html:130,133</source>\n      Angular has a very expressive template system, which takes HTML as a base,\n      and extends it with custom elements\n    </msg>\n  <msg id=\"2093245413873276320\"><source>src/app/codelabs/angular/templates/templates.component.html:142</source><source>src/app/codelabs/angular/templates/templates.component.html:158</source>Interpolation</msg>\n  <msg id=\"8908084104333691137\"><source>src/app/codelabs/angular/templates/templates.component.html:143,145</source>\n      Double curlies include the appropriate component property value\n    </msg>\n  <msg id=\"6743006858339549834\"><source>src/app/codelabs/angular/templates/templates.component.html:150,153</source>\n      Backticks <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>` `<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, are magic quotes that allow multi-line strings and\n      text interpolation.\n    </msg>\n  <msg id=\"2708214618841180970\"><source>src/app/codelabs/angular/templates/templates.component.html:159,162</source>\n      Simple expressions are also allowed, you can run a component method (like\n      fullName() below), or calculate <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>323213+34234<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>\n    </msg>\n  <msg id=\"3402523483542521336\"><source>src/app/codelabs/angular/templates/templates.component.html:171,174</source>\n      In the next slide you&apos;ll edit a component template to create a simple\n      header and search form. The result will look like this:\n    </msg>\n  <msg id=\"8721861281513890587\"><source>src/app/codelabs/angular/templates/templates.component.html:193</source>Properties</msg>\n  <msg id=\"8669367464399341938\"><source>src/app/codelabs/angular/templates/templates.component.html:194,197</source>\n      String interpolation <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{ curlies }}</ex>{{ curlies }}</ph><ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> can also be used to pass a value\n      to a child element&apos;s attribute\n    </msg>\n  <msg id=\"7255408982840762838\"><source>src/app/codelabs/angular/templates/templates.component.html:206</source>Property Binding</msg>\n  <msg id=\"1929429019008245822\"><source>src/app/codelabs/angular/templates/templates.component.html:207,209</source>\n      Better option is to use property binding <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>[attribute] = property<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n    </msg>\n  <msg id=\"6385657961263768030\"><source>src/app/codelabs/angular/templates/templates.component.html:214,216</source>\n      You can use arbitrary expressions in the binding.\n    </msg>\n  <msg id=\"2911314034876616874\"><source>src/app/codelabs/angular/templates/templates.component.html:221</source>Data binding extras</msg>\n  <msg id=\"5131679624196947189\"><source>src/app/codelabs/angular/templates/templates.component.html:222,224</source>\n      Angular supports more advanced property bindings than just attribute name\n    </msg>\n  <msg id=\"2009489920751400915\"><source>src/app/codelabs/angular/templates/templates.component.html:233</source>Event binding: (event)</msg>\n  <msg id=\"8465131485233524062\"><source>src/app/codelabs/angular/templates/templates.component.html:234,238</source>\n      For handling user actions we can use event bindings. To do that we wrap\n      the event name in parentheses, and pass an expression performing required\n      action:\n    </msg>\n  <msg id=\"7777498168007367858\"><source>src/app/codelabs/angular/templates/templates.component.html:245,248</source>\n      While parentheses are used for event binding: <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>(event)<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, &quot;on-&quot; can\n      also be used, e.g. <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>on-click<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> is the same as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>(click)<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.\n    </msg>\n  <msg id=\"5362445790127467384\"><source>src/app/codelabs/angular/templates/templates.component.html:252</source><source>src/app/codelabs/angular/templates/templates.component.html:270</source>Event binding shortcuts</msg>\n  <msg id=\"1375939118759231175\"><source>src/app/codelabs/angular/templates/templates.component.html:253,257</source>\n      When we need to access an HTML element or an Angular component\n      from the template, we can mark it with <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>#name<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, and it becomes\n      available as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>name<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> everywhere in the template:\n    </msg>\n  <msg id=\"3944267632594384457\"><source>src/app/codelabs/angular/templates/templates.component.html:264,266</source>\n      We&apos;ll learn a better way to work with inputs in Forms milestone.\n    </msg>\n  <msg id=\"6553987567173031055\"><source>src/app/codelabs/angular/templates/templates.component.html:271,274</source>\n      Angular also provides a shortcut for handling keyboard shortcuts. Try\n      updating the message by pressing Control + Enter in the input.\n    </msg>\n  <msg id=\"387888043502947069\"><source>src/app/codelabs/angular/templates/templates.component.html:285</source>Conditional Display (*ngIf)</msg>\n  <msg id=\"5621752484434623785\"><source>src/app/codelabs/angular/templates/templates.component.html:286,289</source>\n      This conditional expression will add or remove an element from the DOM if\n      it evaluates as a truthy\n    </msg>\n  <msg id=\"5353140049958069641\"><source>src/app/codelabs/angular/templates/templates.component.html:297</source><source>src/app/codelabs/angular/component-tree/component-tree.component.html:244</source>Exercise 2</msg>\n  <msg id=\"3782868128792375360\"><source>src/app/codelabs/angular/templates/templates.component.html:298,302</source>\n      In the next slide you&apos;ll add a click handler to the search button, and\n      display a message for the case where no videos were found. The result will\n      look like this:\n    </msg>\n  <msg id=\"92659757529171106\"><source>src/app/codelabs/angular/templates/templates.component.html:320</source>Repeating elements</msg>\n  <msg id=\"2098931711932592374\"><source>src/app/codelabs/angular/templates/templates.component.html:321,325</source>\n      Let&apos;s say you have an array of puppies, and want to display all of them on\n      the page. Angular has a special syntax for that called <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>*ngFor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>,\n      let&apos;s see how it works on the next slide\n    </msg>\n  <msg id=\"8944028182505149416\"><source>src/app/codelabs/angular/templates/templates.component.html:333</source>Repeating elements (*ngFor)</msg>\n  <msg id=\"2278439158834501962\"><source>src/app/codelabs/angular/templates/templates.component.html:334,337</source>\n      Here <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>*ngFor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> repeats HTML element it&apos;s attached to (li in this case)\n      for every single puppy in the puppies array\n    </msg>\n  <msg id=\"6900873423530266803\"><source>src/app/codelabs/angular/templates/templates.component.html:343,346</source>\n      HTML attributes in <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> are case sensitive:\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"START_STRIKETHROUGH_TEXT\"><ex>&lt;s&gt;</ex>&lt;s&gt;</ph>*ngfor<ph name=\"CLOSE_STRIKETHROUGH_TEXT\"><ex>&lt;/s&gt;</ex>&lt;/s&gt;</ph><ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> won&apos;t work, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>*ngFor<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> will\n    </msg>\n  <msg id=\"6964671906994906253\"><source>src/app/codelabs/angular/templates/templates.component.html:350</source>Exercise 3</msg>\n  <msg id=\"1916497009459167443\"><source>src/app/codelabs/angular/templates/templates.component.html:353,356</source>\n          In the next slide you&apos;ll finally display the videos! The result will\n          look like this:\n        </msg>\n  <msg id=\"2654534150745917262\"><source>src/app/codelabs/angular/templates/templates.component.html:383,385</source>\n            Learn how to use Angular Dependency Injection\n          </msg>\n  <msg id=\"shorthandMakesProfessionAvailable\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:5,7</source>\n    * TypeScript shorthand makes &apos;profession&apos; * available to component instance.\n  </msg>\n  <msg id=\"assumingJobHasPropTitle\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:8,10</source>\n    assuming Job has property &apos;.title&apos;\n  </msg>\n  <msg id=\"addIjectableDecoraterToClass\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:11,13</source>\n    video.service.ts: Add @Injectable() decorator to the class\n  </msg>\n  <msg id=\"addVideoServiceToNgModule\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:15,17</source>\n    app.module.ts: Add VideoService to the NgModule providers property\n  </msg>\n  <msg id=\"getRidOfFakeVideos\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:18,20</source>\n    app.component.ts: Get rid of FAKE_VIDEOS\n  </msg>\n  <msg id=\"injectVideoService\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:21,24</source>\n    app.component.ts: Inject &apos;VideoService&apos; in the component constructor as\n    &apos;videoService&apos;\n  </msg>\n  <msg id=\"updateAppComponentSearchmethod\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:28,31</source>\n    app.component.ts: Update the app component&apos;s search method to use\n    videoService&apos;s search method\n  </msg>\n  <msg id=\"dependencyInjectionLearnMore\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:42</source>Learn more about Angular&apos;s powerful Dependency Injection system</msg>\n  <msg id=\"8221226883715428312\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:50</source>Example of a dependency</msg>\n  <msg id=\"6152129975764793011\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:51,54</source>\n      We display a list of hard-coded videos in our component, but in the real\n      world we&apos;d load them from the server.\n    </msg>\n  <msg id=\"1360085883339715410\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:55,58</source>\n      The code for fetching the data would live in a separate class (service)\n      called VideoService\n    </msg>\n  <msg id=\"239501121574257057\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:59</source>Therefore our component will depend on the VideoService:</msg>\n  <msg id=\"3398399443611989744\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:109,113</source>\n      As our app grows, number of dependencies will increase. Dependencies, in\n      order, will have their own dependencies. Managing all of them manually\n      becomes increasingly harder.\n    </msg>\n  <msg id=\"7439203421419595915\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:114,117</source>\n      To simplify that <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> provides a mechanism called\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Dependency injection<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n    </msg>\n  <msg id=\"6832879550227262389\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:124</source>Comparison</msg>\n  <msg id=\"7427941055850419603\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:133,136</source>\n          Without Dependency Injection, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Profession<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> has to be instantiated\n          in the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Person<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> class\n        </msg>\n  <msg id=\"916298212817351454\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:145,149</source>\n          With Dependency Injection, <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Person<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> class just &quot;requires&quot; an\n          instance of <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Job<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> in the constructor, and Angular takes care of\n          instantiating it\n        </msg>\n  <msg id=\"2250922476634643797\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:155</source>Parameters</msg>\n  <msg id=\"2050435296171660186\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:164,167</source>\n          Without Dependency Injection, you have to figure out all the\n          parameters yourself\n        </msg>\n  <msg id=\"1220299404805905128\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:176,178</source>\n          With Dependency Injection, Angular takes care of it\n        </msg>\n  <msg id=\"8985868511640294928\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:184</source>Testing</msg>\n  <msg id=\"5041678758489152197\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:185,188</source>\n      Also Dependency Injection simplifies testing a lot, because you can just\n      pass mock dependencies as constructor parameters\n    </msg>\n  <msg id=\"2384026219516877038\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:209</source>Example</msg>\n  <msg id=\"6910202098357920279\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:210,214</source>\n      Let&apos;s say we have an existing <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>UnitConverterService<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and we want to\n      start using it in <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>UnitConversionComponent<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. It will take 3 simple\n      steps:\n    </msg>\n  <msg id=\"3957097669887217853\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:216</source>Mark dependency as @Injectable()</msg>\n  <msg id=\"5662947366104784178\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:217</source>Provide in the module</msg>\n  <msg id=\"9143596698887173150\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:218</source>Require in the component</msg>\n  <msg id=\"2585772558422043391\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:225,228</source>\n      Mark the class as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>@Injectable()<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>. This lets Angular know that this\n      class is part of Angular Dependency Injection system\n    </msg>\n  <msg id=\"6496971683817494188\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:234,237</source>\n      If a service class is marked as injectable, it can require other services\n      in its constructor.\n    </msg>\n  <msg id=\"287816816593865864\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:243,245</source>\n      Provide the injectable to the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>providers<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> section of <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n    </msg>\n  <msg id=\"3053323241161491226\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:254,257</source>\n      Now, this service becomes available for every <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Component<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and other\n      service in this <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NgModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.\n    </msg>\n  <msg id=\"5526580419389054630\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:262</source>Step 3</msg>\n  <msg id=\"9193697677313937686\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:263</source>Consume the Injectable in the component</msg>\n  <msg id=\"4224784797203649406\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:271,274</source>\n      Because of the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>private<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> access modifier the service becomes\n      accessible across the class as <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>this.converter<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>.\n    </msg>\n  <msg id=\"8777170680797795530\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:279,282</source>\n      In the next slide you&apos;ll use videoService which has even more cats!!! The\n      result will look like this:\n    </msg>\n  <msg id=\"6756063415709931138\"><source>src/app/codelabs/angular/dependency-injection/dependency-injection.component.html:309,311</source>\n            Learn how to combine components together\n          </msg>\n  <msg id=\"addComponentDecoratorAndSetSelectorToMyVideo\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:5,8</source>\n    video/video.component.ts: Add the &apos;@Component&apos; decorator and set its selector\n    property to &apos;my-video&apos;.\n  </msg>\n  <msg id=\"addVideoComponentToAppModule\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:9,11</source>\n    app.module.ts: Add VideoComponent to the AppModule &apos;declarations&apos;.\n  </msg>\n  <msg id=\"setTemplateUrlToLoadAppropriateFile\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:16,18</source>\n    video/video.component.ts: Set the templateUrl to load the appropriate html file\n  </msg>\n  <msg id=\"addVideoPropertyAndDecorateWithInput\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:22,24</source>\n    video/video.component.ts: Add a video property and decorate it with @Input()\n  </msg>\n  <msg id=\"displayVideoTitle\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:25,27</source>\n    video/video.component.html: Display the video title\n  </msg>\n  <msg id=\"displayVideoThumbnail\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:28,30</source>\n    video/video.component.html: Display the video thumbnail (src)\n  </msg>\n  <msg id=\"displayVideoDescription\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:31,33</source>\n    video/video.component.html: Display the video description\n  </msg>\n  <msg id=\"displayVideoData\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:34,36</source>\n    video/video.component.html: Display the video date\n  </msg>\n  <msg id=\"displayNumberOfVideoViews\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:37,39</source>\n    video/video.component.html: Display the number of video views\n  </msg>\n  <msg id=\"displayNumberOfVideoLikes\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:40,42</source>\n    video/video.component.html: Display the number video likes\n  </msg>\n  <msg id=\"replaceTitleAndThumbnail\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:43,46</source>\n    app.html: Replace existing title and thumbnail with our shiny new my-video\n    component\n  </msg>\n  <msg id=\"useDataBindingToPassVideoToComponent\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:50,53</source>\n    app.html: Use the data binding to pass the video object to the component\n    (don&apos;t forget the square brackets)\n  </msg>\n  <msg id=\"943157291250853394\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:67</source><source>src/app/codelabs/angular/component-tree/component-tree.component.html:76</source>Component Tree</msg>\n  <msg id=\"1106515989755785596\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:69</source>Combine components together</msg>\n  <msg id=\"1166207354981984344\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:77,80</source>\n      So far we have only one component, but as your app grows it will form a\n      tree of components\n    </msg>\n  <msg id=\"4420604777002064279\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:86</source>Parent and Child</msg>\n  <msg id=\"5463254600145635312\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:87,90</source>\n      Any component can render another one by using an HTML element that matches\n      the selector of the other component\n    </msg>\n  <msg id=\"2419502187482209382\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:121</source><source>src/app/codelabs/angular/component-tree/component-tree.component.html:138</source>Passing Data from Parent to Child</msg>\n  <msg id=\"2842394284573918883\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:123,125</source>\n      Parent component passes its data to the child component via properties\n    </msg>\n  <msg id=\"8392567546535132259\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:126,129</source>\n      Change the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>size<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>100<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>color<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>red<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to\n      recreate the Japanese flag.\n    </msg>\n  <msg id=\"6462196081007759452\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:140,143</source>\n      The child class must decorate its properties with a special\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>@Input()<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> decorator\n    </msg>\n  <msg id=\"2816636294709814885\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:148,151</source>\n      This is the first time we&apos;re applying decorators to properties (as opposed\n      to classes).\n    </msg>\n  <msg id=\"7918580779851885096\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:155</source>Exercise 1</msg>\n  <msg id=\"2478337245338174731\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:156,159</source>\n      We already know how to create a component. Let&apos;s move all the\n      video-related information into a new component called VideoComponent.\n    </msg>\n  <msg id=\"7500497445913951281\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:160,162</source>\n      We will bootstrap the component for you; the result will be as follows:\n    </msg>\n  <msg id=\"1902505859733550335\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:165</source>Cute kitten</msg>\n  <msg id=\"3260541536331111879\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:188</source>Parent and Child component</msg>\n  <msg id=\"3013712804500806977\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:189,192</source>\n      Components won&apos;t know about each other unless they&apos;re declared in the same\n      module\n    </msg>\n  <msg id=\"1036270088685658131\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:245</source>In the next exercise you will use the newly created component</msg>\n  <msg id=\"5801908609593051593\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:271</source>Next: </msg>\n  <msg id=\"2606744025024635328\"><source>src/app/codelabs/angular/component-tree/component-tree.component.html:272,274</source>\n            Learn how to set up routing in your Angular app\n          </msg>\n  <msg id=\"UseRouterModule\"><source>src/app/codelabs/angular/router/router.component.html:2,5</source>\n    app.module.ts: Using RouterModule.forRoot provide an empty array to the\n    module\n  </msg>\n  <msg id=\"AddEmptyRoute\"><source>src/app/codelabs/angular/router/router.component.html:6,9</source>\n    app.module.ts: Add a route with an empty (\\&apos;\\&apos;) path to display\n    SearchComponent\n  </msg>\n  <msg id=\"AddUploadRoute\"><source>src/app/codelabs/angular/router/router.component.html:10,12</source>\n    app.module.ts: Add a route with path of &quot;upload&quot; to display UploadComponent\n  </msg>\n  <msg id=\"AddRouterOutlet\"><source>src/app/codelabs/angular/router/router.component.html:13,15</source>\n    app.html: Add router-outlet\n  </msg>\n  <msg id=\"AddSearchMenu\"><source>src/app/codelabs/angular/router/router.component.html:16,18</source>\n    app.html: Add a menu item with a text Search pointing to &quot;/&quot;\n  </msg>\n  <msg id=\"AddUploadMenu\"><source>src/app/codelabs/angular/router/router.component.html:19,21</source>\n    app.html: Add a menu item with a text Upload pointing to &quot;/upload&quot;\n  </msg>\n  <msg id=\"3035675235126347102\"><source>src/app/codelabs/angular/router/router.component.html:32</source>Routing</msg>\n  <msg id=\"5735074005289672847\"><source>src/app/codelabs/angular/router/router.component.html:33</source>Learn how to add routing to your app</msg>\n  <msg id=\"240729475417950372\"><source>src/app/codelabs/angular/router/router.component.html:40,42</source>\n      Router is used to give <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>URLs<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to different parts of your app.\n    </msg>\n  <msg id=\"1931968164617039768\"><source>src/app/codelabs/angular/router/router.component.html:49</source>Kittens</msg>\n  <msg id=\"6707280048767596762\"><source>src/app/codelabs/angular/router/router.component.html:56</source>Puppies</msg>\n  <msg id=\"5809886278086223708\"><source>src/app/codelabs/angular/router/router.component.html:62</source>It takes 3 steps to set up routing in Angular:</msg>\n  <msg id=\"6382596231037789146\"><source>src/app/codelabs/angular/router/router.component.html:64,67</source>\n        Configure the mapping and specify which component to display for which\n        URL\n      </msg>\n  <msg id=\"5711045063225432498\"><source>src/app/codelabs/angular/router/router.component.html:68</source>Create the menu</msg>\n  <msg id=\"5553583971169159914\"><source>src/app/codelabs/angular/router/router.component.html:69</source>Find a place to display selected component</msg>\n  <msg id=\"3008420115644088420\"><source>src/app/codelabs/angular/router/router.component.html:74</source><source>src/app/codelabs/angular/router/router.component.html:86</source>Configuration</msg>\n  <msg id=\"1679994121974369604\"><source>src/app/codelabs/angular/router/router.component.html:75,78</source>\n      Routes are configured by defining an array of mapping between URL path and\n      a component\n    </msg>\n  <msg id=\"1258665563482381976\"><source>src/app/codelabs/angular/router/router.component.html:87</source>Then we have to pass the config to our module.</msg>\n  <msg id=\"7206914066261457043\"><source>src/app/codelabs/angular/router/router.component.html:92,95</source>\n      Note that we&apos;re using <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>RouterModule.forRoot<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> which creates an Angular\n      Module out of our configuration.\n    </msg>\n  <msg id=\"6019360885418718089\"><source>src/app/codelabs/angular/router/router.component.html:99</source>router-outlet</msg>\n  <msg id=\"2601425993761834840\"><source>src/app/codelabs/angular/router/router.component.html:100,103</source>\n      Now we have to find a place where the router would display selected\n      component.\n    </msg>\n  <msg id=\"2385039709831220213\"><source>src/app/codelabs/angular/router/router.component.html:104</source>It can be marked by placing <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>router-outlet tag<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></msg>\n  <msg id=\"2102825898069375693\"><source>src/app/codelabs/angular/router/router.component.html:114</source>Menu</msg>\n  <msg id=\"1472582053378549544\"><source>src/app/codelabs/angular/router/router.component.html:115</source>The last part is creating the menu.</msg>\n  <msg id=\"2583626845709708422\"><source>src/app/codelabs/angular/router/router.component.html:116</source>Use <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>routerLink<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> directive to provide the URL</msg>\n  <msg id=\"7666470893157840853\"><source>src/app/codelabs/angular/router/router.component.html:126,129</source>\n      In the next slide there is an exercise. We&apos;re going to add 2 routes:\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Search<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> and <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Upload<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, and a menu for switching between them.\n    </msg>\n  <msg id=\"6990537880445556268\"><source>src/app/codelabs/angular/router/router.component.html:135,138</source>\n      Note: We have already created empty Upload component and SearchComponent\n      containing search logic.\n    </msg>\n  <msg id=\"802747981858883975\"><source>src/app/codelabs/angular/router/router.component.html:155,156</source>End of The Routing Milestone\n        </msg>\n  <msg id=\"33440573074633014\"><source>src/app/codelabs/angular/router/router.component.html:160,164</source>\n          Check out\n          <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular Router Guide<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> for\n          more fun and advanced techniques.\n        </msg>\n  <msg id=\"2000882412474211848\"><source>src/app/codelabs/angular/router/router.component.html:169,171</source>\n            Learn how to create beautiful UIs with Angular Material\n          </msg>\n  <msg id=\"AddMatModules\"><source>src/app/codelabs/angular/material/material.component.html:3,5</source>\n    app.module.ts: Add MatCardModule and MatToolbarModule, to the imports.\n  </msg>\n  <msg id=\"AddMatToolbar\"><source>src/app/codelabs/angular/material/material.component.html:6,8</source>\n    app.html: Add material toolbar containing the title\n  </msg>\n  <msg id=\"UseMatCard\"><source>src/app/codelabs/angular/material/material.component.html:9,11</source>\n    video/video.component.html: Use material card to display the data\n  </msg>\n  <msg id=\"AddMatCardTitle\"><source>src/app/codelabs/angular/material/material.component.html:12,15</source>\n    video/video.component.html: Add mat-card-title (inside of the mat-card) to display\n    video title\n  </msg>\n  <msg id=\"AddMatCardSubtitle\"><source>src/app/codelabs/angular/material/material.component.html:16,19</source>\n    video/video.component.html: Add mat-card-subtitle (inside of the mat-card) to\n    display video description\n  </msg>\n  <msg id=\"AddMatImage\"><source>src/app/codelabs/angular/material/material.component.html:20,23</source>\n    video/video.component.html: Mark img with mat-card-image attribute (inside of the\n    mat-card) so that it takes full card size\n  </msg>\n  <msg id=\"MoveDataToNewComponent\"><source>src/app/codelabs/angular/material/material.component.html:24,27</source>\n    video/video.component.html: move date/views/likes info inside of mat-card-content\n    (inside of the mat-card)\n  </msg>\n  <msg id=\"4263648592710459003\"><source>src/app/codelabs/angular/material/material.component.html:39</source>Material design</msg>\n  <msg id=\"794755284646120063\"><source>src/app/codelabs/angular/material/material.component.html:40</source>Learn how to use Angular Material</msg>\n  <msg id=\"1590022389491166903\"><source>src/app/codelabs/angular/material/material.component.html:45,49</source>\n      Now let&apos;s use\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular Material<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n      to make our app look beautiful ✨✨\n    </msg>\n  <msg id=\"3632098750723132623\"><source>src/app/codelabs/angular/material/material.component.html:50,54</source>\n      Angular Material provides you with a set of\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Material Design<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n      components for Angular:\n    </msg>\n  <msg id=\"1048302075193478813\"><source>src/app/codelabs/angular/material/material.component.html:58</source>Fast and Consistent</msg>\n  <msg id=\"7436636522347025101\"><source>src/app/codelabs/angular/material/material.component.html:59</source>Versatile</msg>\n  <msg id=\"6362038180167515562\"><source>src/app/codelabs/angular/material/material.component.html:60</source>Accessible</msg>\n  <msg id=\"4824840533916827883\"><source>src/app/codelabs/angular/material/material.component.html:61</source>Optimized for Angular</msg>\n  <msg id=\"332404582323211180\"><source>src/app/codelabs/angular/material/material.component.html:62</source>Look great on mobile</msg>\n  <msg id=\"1384935740236089810\"><source>src/app/codelabs/angular/material/material.component.html:65,72</source>\n      See the list of components\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>here<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n    </msg>\n  <msg id=\"7498942977565054992\"><source>src/app/codelabs/angular/material/material.component.html:76</source>MatToolBar</msg>\n  <msg id=\"7915809409906759185\"><source>src/app/codelabs/angular/material/material.component.html:77</source>Adding a toolbar takes 2 steps:</msg>\n  <msg id=\"5179157556117527268\"><source>src/app/codelabs/angular/material/material.component.html:79</source>Add <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>MatToolbarModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to the imports</msg>\n  <msg id=\"5392852815080322940\"><source>src/app/codelabs/angular/material/material.component.html:80</source>Use the component in the template</msg>\n  <msg id=\"4611890716836134126\"><source>src/app/codelabs/angular/material/material.component.html:87,91</source>\n      Note that Angular animations come in a separate module. We&apos;re including\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>NoopAnimationsModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> here, but could have used\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>BrowserAnimationsModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> instead, to have full-fledged animations.\n    </msg>\n  <msg id=\"5691966639616932851\"><source>src/app/codelabs/angular/material/material.component.html:95</source>Card</msg>\n  <msg id=\"9159121920453591417\"><source>src/app/codelabs/angular/material/material.component.html:96</source>Now let&apos;s add material card.</msg>\n  <msg id=\"1176939237964189014\"><source>src/app/codelabs/angular/material/material.component.html:104</source>Card Header</msg>\n  <msg id=\"7240476994819291465\"><source>src/app/codelabs/angular/material/material.component.html:105</source>Header and an image.</msg>\n  <msg id=\"3795029841604666695\"><source>src/app/codelabs/angular/material/material.component.html:113</source>Buttons</msg>\n  <msg id=\"9206609904661056407\"><source>src/app/codelabs/angular/material/material.component.html:114</source>Adding some actions....</msg>\n  <msg id=\"5230163445973304109\"><source>src/app/codelabs/angular/material/material.component.html:119,122</source>\n      Note that for the button we&apos;re using <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>mat-button<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> attribute instead\n      of a separate tag.\n    </msg>\n  <msg id=\"2798270190074840767\"><source>src/app/codelabs/angular/material/material.component.html:126</source>Themes</msg>\n  <msg id=\"1020036473936546385\"><source>src/app/codelabs/angular/material/material.component.html:127,130</source>\n      All Angular Material components allow to apply themes. Try different\n      themes by clicking the buttons below:\n    </msg>\n  <msg id=\"5274217387047721869\"><source>src/app/codelabs/angular/material/material.component.html:138,140</source>\n        Indigo\n      </msg>\n  <msg id=\"7493644276322780505\"><source>src/app/codelabs/angular/material/material.component.html:147,149</source>\n        Deep purple\n      </msg>\n  <msg id=\"1453230058388265146\"><source>src/app/codelabs/angular/material/material.component.html:156,158</source>\n        Pink\n      </msg>\n  <msg id=\"6699275925990014857\"><source>src/app/codelabs/angular/material/material.component.html:165,167</source>\n        Purple\n      </msg>\n  <msg id=\"938217018662676611\"><source>src/app/codelabs/angular/material/material.component.html:174,177</source>\n      Read more on theming Angular Material\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>in this guide<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n    </msg>\n  <msg id=\"8974626884127165311\"><source>src/app/codelabs/angular/material/material.component.html:182,185</source>\n      In the next slide there is an exercise. We&apos;re going to materialize our\n      application\n    </msg>\n  <msg id=\"943558698651917560\"><source>src/app/codelabs/angular/material/material.component.html:191,193</source>\n      Note: the final app won&apos;t be super beautiful, we&apos;re still working on that.\n    </msg>\n  <msg id=\"606239688044547568\"><source>src/app/codelabs/angular/material/material.component.html:210,211</source>End of The Material Milestone\n        </msg>\n  <msg id=\"5706278102391803377\"><source>src/app/codelabs/angular/material/material.component.html:215,223</source>\n          Check out Angular Material\n          <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>&quot;Getting Started&quot;<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n          Guide\n        </msg>\n  <msg id=\"8060234990603309275\"><source>src/app/codelabs/angular/material/material.component.html:228,230</source>\n            Learn how to create simple forms with Angular\n          </msg>\n  <msg id=\"5839870276585422607\" desc=\"AddFormsModule\"><source>src/app/codelabs/angular/forms/forms.component.html:3,5</source>\n    app.module.ts: Add FormsModule and MatInputModule, to the imports.\n  </msg>\n  <msg id=\"891470929346566427\" desc=\"AddTitle\"><source>src/app/codelabs/angular/forms/forms.component.html:6,9</source>\n    upload/upload.component.html: Add &quot;title&quot; input bound to the title property of the\n    component\n  </msg>\n  <msg id=\"6729408012939811950\" desc=\"AddDescription\"><source>src/app/codelabs/angular/forms/forms.component.html:10,13</source>\n    upload/upload.component.html: Add &quot;description&quot; textarea bound to the description\n    property of the component\n  </msg>\n  <msg id=\"2078785402028999261\"><source>src/app/codelabs/angular/forms/forms.component.html:24</source>Forms</msg>\n  <msg id=\"8668858903892446127\"><source>src/app/codelabs/angular/forms/forms.component.html:25</source>Adding basic forms into your app</msg>\n  <msg id=\"6479000658382583894\"><source>src/app/codelabs/angular/forms/forms.component.html:30</source><source>src/app/codelabs/angular/forms/forms.component.html:41</source>Simple Form</msg>\n  <msg id=\"7762953763922284011\"><source>src/app/codelabs/angular/forms/forms.component.html:31,34</source>\n      We have this simple form, let&apos;s find out how to map input values with the\n      ones from our Angular component!\n    </msg>\n  <msg id=\"6425132401823114131\"><source>src/app/codelabs/angular/forms/forms.component.html:42</source>First we have to add <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>FormsModule<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> to our NgModule.</msg>\n  <msg id=\"6840782180922133192\"><source>src/app/codelabs/angular/forms/forms.component.html:51</source>NgModel</msg>\n  <msg id=\"7747367449350171293\"><source>src/app/codelabs/angular/forms/forms.component.html:52,55</source>\n      Now let&apos;s use ngModel to bind the inputs to the appropriate fields on the\n      component.\n    </msg>\n  <msg id=\"4133557133353776426\"><source>src/app/codelabs/angular/forms/forms.component.html:56</source>Try changing the inputs and see the values updated.</msg>\n  <msg id=\"3770170783025031996\"><source>src/app/codelabs/angular/forms/forms.component.html:60,63</source>\n      [(NgModel)] - <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Banana in the box<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> is a simple mnemonic for the braces\n      order.\n    </msg>\n  <msg id=\"2957163997998056771\"><source>src/app/codelabs/angular/forms/forms.component.html:67</source>Validation</msg>\n  <msg id=\"204452644781750281\"><source>src/app/codelabs/angular/forms/forms.component.html:68,71</source>\n      It&apos;s really easy to add validation for your inputs using predefined\n      Angular directives.\n    </msg>\n  <msg id=\"6063238187884699771\"><source>src/app/codelabs/angular/forms/forms.component.html:72</source>Let&apos;s make username <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>required<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></msg>\n  <msg id=\"1433726886237690907\"><source>src/app/codelabs/angular/forms/forms.component.html:76,79</source>\n      If you clear the input it&apos;ll be marked with an error, however no error\n      will be displayed. We&apos;ll learn how to display it in the next slide\n    </msg>\n  <msg id=\"2567247212086724875\"><source>src/app/codelabs/angular/forms/forms.component.html:83</source>Displaying Validation Errors</msg>\n  <msg id=\"8993640169220425895\"><source>src/app/codelabs/angular/forms/forms.component.html:84</source>Now we let&apos;s display validation error. It takes 2 steps:</msg>\n  <msg id=\"2140417106288915448\"><source>src/app/codelabs/angular/forms/forms.component.html:86,88</source>\n        Get ahold of the input ngModel using <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>#name=&quot;ngModel&quot;<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> binding\n      </msg>\n  <msg id=\"5910204214213293332\"><source>src/app/codelabs/angular/forms/forms.component.html:89</source>Use <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>usernameModel<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>&apos;s <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>errors<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> property.</msg>\n  <msg id=\"4692187312954805852\"><source>src/app/codelabs/angular/forms/forms.component.html:94,96</source>\n      Try clearing the username input and see the error displayed.\n    </msg>\n  <msg id=\"7356419770205292883\"><source>src/app/codelabs/angular/forms/forms.component.html:99</source>Validators</msg>\n  <msg id=\"8486095358633987531\"><source>src/app/codelabs/angular/forms/forms.component.html:100,106</source>\n      Here&apos;s the list of\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>built-in validators<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n      that Angular provides out of the box\n    </msg>\n  <msg id=\"3901733599428143571\"><source>src/app/codelabs/angular/forms/forms.component.html:108</source>min</msg>\n  <msg id=\"5386793486940113646\"><source>src/app/codelabs/angular/forms/forms.component.html:109</source>max</msg>\n  <msg id=\"1555721751742522708\"><source>src/app/codelabs/angular/forms/forms.component.html:110</source>required</msg>\n  <msg id=\"3347261489424376125\"><source>src/app/codelabs/angular/forms/forms.component.html:111</source>requiredTrue</msg>\n  <msg id=\"7315714079098881460\"><source>src/app/codelabs/angular/forms/forms.component.html:112</source>email</msg>\n  <msg id=\"2218960621606808970\"><source>src/app/codelabs/angular/forms/forms.component.html:113</source>minLength</msg>\n  <msg id=\"2060941282153877777\"><source>src/app/codelabs/angular/forms/forms.component.html:114</source>maxLength</msg>\n  <msg id=\"7676249558622794260\"><source>src/app/codelabs/angular/forms/forms.component.html:115</source>pattern</msg>\n  <msg id=\"4722824416758060415\"><source>src/app/codelabs/angular/forms/forms.component.html:117,123</source>\n      It&apos;s also possible to create custom validators, but it&apos;s out of scope for\n      this milestone, you can read more:\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>here<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n    </msg>\n  <msg id=\"4915312620327409019\"><source>src/app/codelabs/angular/forms/forms.component.html:127</source>Error Always Displayed</msg>\n  <msg id=\"6090593566257988703\"><source>src/app/codelabs/angular/forms/forms.component.html:128,131</source>\n      There&apos;s one small issue though, if we don&apos;t have initial values, the error\n      is displayed right away.\n    </msg>\n  <msg id=\"9096582104534626115\"><source>src/app/codelabs/angular/forms/forms.component.html:139</source>Touched &amp; Dirty</msg>\n  <msg id=\"7933306550899658878\"><source>src/app/codelabs/angular/forms/forms.component.html:140,143</source>\n      Luckily we can check if the user interacted with an input using\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>touched<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> property.\n    </msg>\n  <msg id=\"8362373699100533468\"><source>src/app/codelabs/angular/forms/forms.component.html:145,147</source>\n        <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>dirty<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> is true if the user changed the value of the input.\n      </msg>\n  <msg id=\"7424734033590338116\"><source>src/app/codelabs/angular/forms/forms.component.html:148,151</source>\n        <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>touched<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> is true if the user focused on the input, and then blured\n        without changing the value.\n      </msg>\n  <msg id=\"4624575175624080439\"><source>src/app/codelabs/angular/forms/forms.component.html:156,159</source>\n      Try focusing/bluring the <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>username<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> field, or adding some value and\n      then removing to see the error.\n    </msg>\n  <msg id=\"544989820040948372\"><source>src/app/codelabs/angular/forms/forms.component.html:163</source>Material Inputs (Bonus!)</msg>\n  <msg id=\"3876627808167319645\"><source>src/app/codelabs/angular/forms/forms.component.html:164,167</source>\n      Now let&apos;s make our forms beautiful using Material Design inputs! Main\n      building blocks are:\n    </msg>\n  <msg id=\"3286433456748135142\"><source>src/app/codelabs/angular/forms/forms.component.html:169</source><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>mat-form-field<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - Wraps the input</msg>\n  <msg id=\"304466263354781991\"><source>src/app/codelabs/angular/forms/forms.component.html:170</source><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>matInput<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - has to be put on the input</msg>\n  <msg id=\"8297804625326045690\"><source>src/app/codelabs/angular/forms/forms.component.html:171</source><ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>mat-error<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> - Smarter error wrapper</msg>\n  <msg id=\"3440673282637430108\"><source>src/app/codelabs/angular/forms/forms.component.html:177,179</source>\n      Note that we don&apos;t need to <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>#name<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> the input anymore.\n    </msg>\n  <msg id=\"1410328259781563181\"><source>src/app/codelabs/angular/forms/forms.component.html:184,187</source>\n      In the next slide there is an exercise. We&apos;re going to add a form to the\n      upload page.\n    </msg>\n  <msg id=\"2445797033343456600\"><source>src/app/codelabs/angular/forms/forms.component.html:195,198</source>\n      Note: you&apos;d have to manually click on the &quot;upload link&quot; to see the result,\n      we&apos;re working on the fix.\n    </msg>\n  <msg id=\"4295828568066353117\"><source>src/app/codelabs/angular/forms/forms.component.html:214</source>End of The Forms Milestone</msg>\n  <msg id=\"5553423473844264824\"><source>src/app/codelabs/angular/forms/forms.component.html:218,222</source>\n          There are more than one way to handle forms in Angular. While\n          <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Advanced forms<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> milestone is in works, check out\n          <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Angular docs<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n        </msg>\n  <msg id=\"889876683989703032\"><source>src/app/codelabs/angular/forms/forms.component.html:225,228</source>\n            Learn how to start working on your angular app in the Angular-cli\n            Milestone\n          </msg>\n  <msg id=\"2311168139770217773\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:9</source>Angular-cli</msg>\n  <msg id=\"5047002157177956173\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:11</source>Learn how to quickly start working on your Angular app</msg>\n  <msg id=\"9187829672586532965\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:17,20</source>\n      Angular CLI is a command line tool that can be used to quickly get up to\n      speed with running your Angular app.\n    </msg>\n  <msg id=\"4905842152994295720\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:24,26</source>\n        Hi, I&apos;m <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>angular-cli<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>, I&apos;m a command line tool!\n      </msg>\n  <msg id=\"3365331980798848575\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:27</source> It may sound scary, but I&apos;m really easy to use! </msg>\n  <msg id=\"4771765980799553216\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:33</source>node</msg>\n  <msg id=\"1337679769155326866\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:34</source>Before you start, make sure you have node.js on your machine.</msg>\n  <msg id=\"5523986709480171160\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:35</source>Open terminal and type in: <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>node -v<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph></msg>\n  <msg id=\"1982801473038876401\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:37,40</source>\n        If there is an error, follow the\n        <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>NodeJS setup instructions<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph>\n      </msg>\n  <msg id=\"4085083794028560127\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:41,43</source>\n        If the output is a number, you&apos;re good, move to the next slide.\n      </msg>\n  <msg id=\"5129000868542765663\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:51</source>installing</msg>\n  <msg id=\"3925110322481983370\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:52,55</source>\n      Run <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>npm install -g @angular/cli<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph> to install\n      <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>Angular cli<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> on your machine\n    </msg>\n  <msg id=\"111382302678883601\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:81</source>Creating new Angular app</msg>\n  <msg id=\"847815468721324902\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:82,85</source>\n      To create a new Angular app run:\n      <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng new awesome-app<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>, then <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>cd awesome-app<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>\n    </msg>\n  <msg id=\"4986257953238550386\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:107</source>Starting the app</msg>\n  <msg id=\"8193695606609908840\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:108,110</source>\n      Once you&apos;re in the app folder, start the app with <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng serve<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>\n    </msg>\n  <msg id=\"4530312955809743235\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:132,136</source>\n      Once the app is started just open\n      <ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>http://localhost:4200/<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> in your\n      browser\n    </msg>\n  <msg id=\"3483089624374648626\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:140</source>Generating components</msg>\n  <msg id=\"1559754683396073636\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:141,144</source>\n      You can easily generate new components\n      <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng generate component my-component<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>\n    </msg>\n  <msg id=\"2534370177218622487\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:157</source>You can also generate modules, services and pipes</msg>\n  <msg id=\"283640338338989513\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:158,160</source>\n      You can use a shorter version: <ph name=\"START_TAG_CODE\"><ex>&lt;code&gt;</ex>&lt;code&gt;</ph>ng g c my-component<ph name=\"CLOSE_TAG_CODE\"><ex>&lt;/code&gt;</ex>&lt;/code&gt;</ph>\n    </msg>\n  <msg id=\"4707431474993551896\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:167,168</source>End of The Angular-cli Milestone\n        </msg>\n  <msg id=\"5456916239811751709\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:171,175</source>\n          This is <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>the end<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> of the codelab, but it&apos;s just the beginning of\n          your Angular journey. Below are some links that can help you continue\n          learning.\n        </msg>\n  <msg id=\"9154976499052576586\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:179</source>Find features, docs and events listed here</msg>\n  <msg id=\"1769865782711595328\"><source>src/app/codelabs/angular/angular-cli/angular-cli.component.html:183,187</source>\n              makes it easy to create an application that already works, right\n              out of the box and generate new components! It also takes care of\n              the build system for you\n            </msg>\n</messagebundle>\n"
  },
  {
    "path": "apps/codelab/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { environment } from './environments/environment';\nimport { AppModule } from './app/app.module';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n"
  },
  {
    "path": "apps/codelab/src/manifest.webmanifest",
    "content": "{\n  \"name\": \"Codelab\",\n  \"short_name\": \"Codelab\",\n  \"theme_color\": \"#1976d2\",\n  \"background_color\": \"#fafafa\",\n  \"display\": \"standalone\",\n  \"scope\": \"/\",\n  \"start_url\": \"/\",\n  \"icons\": [\n    {\n      \"src\": \"assets/icons/icon-72x72.png\",\n      \"sizes\": \"72x72\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-96x96.png\",\n      \"sizes\": \"96x96\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-128x128.png\",\n      \"sizes\": \"128x128\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-144x144.png\",\n      \"sizes\": \"144x144\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-152x152.png\",\n      \"sizes\": \"152x152\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-384x384.png\",\n      \"sizes\": \"384x384\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"assets/icons/icon-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n  ]\n}"
  },
  {
    "path": "apps/codelab/src/polyfills.ts",
    "content": "import 'fullscreen-api-polyfill';\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\nimport '@angular/localize/init';\n\n// Needed for babel :(\n(window as any).Buffer = {};\n\n(window as any).process = {\n  env: { DEBUG: undefined },\n  argv: {\n    indexOf() {\n      return 0;\n    }\n  },\n  getuid() {\n    return 0;\n  }\n};\n"
  },
  {
    "path": "apps/codelab/src/service-worker.js",
    "content": ""
  },
  {
    "path": "apps/codelab/src/styles.scss",
    "content": "@import '~@angular/material/prebuilt-themes/indigo-pink.css';\n\nbody,\nhtml {\n  margin: 0;\n  padding: 0;\n  height: 100%;\n}\n\n.presentation.size-600 li {\n  font-size: 12px;\n  margin-bottom: 5px;\n}\n\n.space-left {\n  margin-left: 20px;\n}\n\n[row] {\n  flex-direction: row;\n  display: flex;\n}\n\n/* GRID TO USE */\n.col-1 {\n  width: 8.33%;\n}\n\n.col-2 {\n  width: 16.66%;\n}\n\n.col-3 {\n  width: 25%;\n}\n\n.col-4 {\n  width: 33.33%;\n}\n\n.col-5 {\n  width: 41.66%;\n}\n\n.col-6 {\n  width: 50%;\n}\n\n.col-7 {\n  width: 58.33%;\n}\n\n.col-8 {\n  width: 66.66%;\n}\n\n.col-9 {\n  width: 75%;\n}\n\n.col-10 {\n  width: 83.33%;\n}\n\n.col-11 {\n  width: 91.66%;\n}\n\n.col-12 {\n  width: 100%;\n}\n\n.presentation.presentation.presentation [no-padding] .slide {\n  padding: 0;\n}\n\n.browser-frame,\n.runner,\n.browser-frame,\n.frame {\n}\n\n.slide [large-font] {\n  font-size: 30px;\n}\n\n.slide [p20] {\n  padding-top: 20px;\n}\n\n.slide [m20] {\n  margin-top: 20px;\n}\n\n.slide [m40] {\n  margin-top: 40px;\n}\n\n.slide [column-5] {\n  width: 50%;\n  padding: 0 1vw;\n}\n\n.slide [column-4] {\n  width: 40%;\n}\n\n.slide [column-2] {\n  width: 20%;\n}\n\n.slide [column-1] {\n  width: 10%;\n}\n\n.slide [flex] {\n  display: flex;\n}\n\n.slide .browser-frame h1 {\n  font-size: 60px;\n}\n\n.slide .browser-frame h2 {\n  font-size: 20px;\n}\n\n/* TODO(kirjs): Support themes */\n.slide h1 {\n  font-size: 20px;\n}\n\n.centered-vertically {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  justify-content: center;\n}\n\n.popup-message {\n  padding: 5px 5px 0 5px;\n  background: black;\n  color: white;\n  font-size: 20px;\n}\n\n.popup-arrow {\n  width: 0;\n  height: 0;\n  border-left: 0 solid transparent;\n  border-right: 20px solid transparent;\n  border-top: 8px solid black;\n}\n\n.monaco-editor.vs\n  .grayed-out-code.grayed-out-code.grayed-out-code.grayed-out-code {\n}\n\n.monaco-editor.vs .loc.loc.loc.loc {\n  background: yellow;\n}\n\n.monaco-editor.vs\n  .highlighted-code.highlighted-code.highlighted-code.highlighted-code {\n  background: yellow;\n}\n\np {\n  margin: 0;\n  margin-bottom: 10px;\n  padding: 0;\n}\n\n.info:before {\n  content: 'ⓘ';\n  margin-right: 10px;\n}\n\na {\n  color: #a03800;\n  font-weight: 400;\n}\n\n.info {\n  font-weight: 300;\n  margin-top: 20px;\n  background: #d3fffd;\n  padding: 12px;\n  font-size: 30px;\n}\n\n/*  BUTTONS BAR CONTAINER  */\n.btn-bar {\n  z-index: 2;\n  position: fixed;\n  bottom: 1%;\n  right: 4%;\n  display: flex;\n  flex-direction: row;\n}\n\n.exercise {\n  font-size: 30px;\n  padding: 10px;\n  margin-top: 20px;\n  font-weight: 300;\n  border: 1px #ddd solid;\n}\n\n.exercise:before {\n  content: '💡';\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  margin-right: 10px;\n}\n\n.exercise.solved {\n  color: #90dd59;\n}\n\n.exercise.solved:before {\n  content: '✔';\n  background: none;\n}\n\n/* context: https://github.com/Microsoft/monaco-editor/issues/113 */\n.monaco-editor .inputarea {\n  position: fixed !important;\n  top: 0 !important;\n  left: 0 !important;\n}\n\n.preload {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  /*change these sizes to fit into your project*/\n  width: 100px;\n  height: 100px;\n}\n\n.preload div {\n  border: 0;\n  margin: 0;\n  width: 40%;\n  height: 40%;\n  position: absolute;\n  border-radius: 50%;\n  animation: spin 2s ease infinite;\n}\n\n.preload :first-child {\n  background: #19a68c;\n  animation-delay: -1.5s;\n}\n\n.preload :nth-child(2) {\n  background: #f63d3a;\n  animation-delay: -1s;\n}\n\n.preload :nth-child(3) {\n  background: #fda543;\n  animation-delay: -0.5s;\n}\n\n.preload :last-child {\n  background: #193b48;\n}\n\n@keyframes spin {\n  0%,\n  100% {\n    transform: translate(0);\n  }\n  25% {\n    transform: translate(160%);\n  }\n  50% {\n    transform: translate(160%, 160%);\n  }\n  75% {\n    transform: translate(0, 160%);\n  }\n}\n\n.mt-60 {\n  margin-top: 60px;\n}\n"
  },
  {
    "path": "apps/codelab/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/long-stack-trace-zone';\nimport 'zone.js/dist/proxy.js';\nimport 'zone.js/dist/sync-test';\nimport 'zone.js/dist/jasmine-patch';\nimport 'zone.js/dist/async-test';\nimport 'zone.js/dist/fake-async-test';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\n// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.\ndeclare var __karma__: any;\ndeclare var require: any;\n\n// Prevent Karma from running prematurely.\n__karma__.loaded = function() {};\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n// Finally, start Karma to run the tests.\n__karma__.start();\n"
  },
  {
    "path": "apps/codelab/src/typings.d.ts",
    "content": "/* SystemJS module definition */\ndeclare var module: NodeModule;\ndeclare const chai;\ninterface NodeModule {\n  id: string;\n}\n"
  },
  {
    "path": "apps/codelab/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": []\n  },\n  \"files\": [\"./src/main.ts\", \"./src/polyfills.ts\"],\n  \"exclude\": [\"test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "apps/codelab/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"angularCompilerOptions\": {\n    \"enableIvy\": true\n  }\n}\n"
  },
  {
    "path": "apps/codelab/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "apps/codelab/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"linterOptions\": {\n    \"exclude\": [\"src/**/*.json\"]\n  },\n  \"rules\": {}\n}\n"
  },
  {
    "path": "apps/kirjs/browserslist",
    "content": "# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n#\n# For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11"
  },
  {
    "path": "apps/kirjs/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nconst { join } = require('path');\nconst getBaseKarmaConfig = require('../../karma.conf');\n\nmodule.exports = function(config) {\n  const baseConfig = getBaseKarmaConfig();\n  config.set({\n    ...baseConfig,\n    coverageIstanbulReporter: {\n      ...baseConfig.coverageIstanbulReporter,\n      dir: join(__dirname, '../../coverage/apps/kirjs')\n    }\n  });\n};\n"
  },
  {
    "path": "apps/kirjs/src/app/app.component.css",
    "content": ".fire:hover {\n  opacity: 1;\n  cursor: pointer;\n  background: #fff;\n  box-shadow: 0 0 2px #333333;\n}\n\n.fire {\n  opacity: 0.8;\n  position: fixed;\n  right: 10px;\n  top: 10px;\n  background: #ddd;\n  border-radius: 50%;\n  width: 20px;\n  height: 20px;\n  font-size: 12px;\n  text-decoration: none;\n  text-align: center;\n  text-indent: 3px;\n  z-index: 100;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/app.component.html",
    "content": "<!--<a class=\"fire\" href=\"//kirjs.com\">🔥️</a>-->\n<router-outlet></router-outlet>\n"
  },
  {
    "path": "apps/kirjs/src/app/app.component.spec.ts",
    "content": "import { TestBed, async } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\ndescribe('AppComponent', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [AppComponent]\n    }).compileComponents();\n  }));\n  it('should create the app', async(() => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app).toBeTruthy();\n  }));\n  it(`should have as title 'kirjs'`, async(() => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app.title).toEqual('kirjs');\n  }));\n  it('should render title in a h1 tag', async(() => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.debugElement.nativeElement;\n    expect(compiled.querySelector('h1').textContent).toContain(\n      'Welcome to kirjs!'\n    );\n  }));\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/app.component.ts",
    "content": "import { Component, HostListener } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n  selector: 'kirjs-main',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n  title = 'kirjs';\n\n  @HostListener(`window:keydown.meta.'`)\n  HandleLinker() {\n    const key = 'linker';\n    if (localStorage.getItem(key)) {\n      localStorage.removeItem(key);\n      alert(`Linker removed!`);\n    } else {\n      const path = window.location.pathname;\n      localStorage.setItem(key, path);\n      alert(`Linker stored ${path}!`);\n    }\n  }\n\n  constructor(private router: Router) {\n    const path: string = localStorage.getItem('linker');\n    if (path && path !== window.location.pathname) {\n      router.navigate([path]);\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/cv/resume.css",
    "content": "ul {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\nul li {\n  margin: 0;\n  padding: 0;\n}\n\n/*.......| Resume                      |.......................*/\n#resume {\n  max-width: 800px;\n  margin: 0 auto;\n  font-family: verdana, sans-serif;\n}\n#resume #header {\n  width: 250px;\n  float: left;\n}\n#resume #header .title {\n  width: 90px;\n}\n#resume #info {\n  margin-left: 300px;\n}\n#resume h1 {\n  font-size: 1.4em;\n  text-transform: uppercase;\n  margin-top: 30px;\n  margin-bottom: 20px;\n}\n#resume h2 {\n  color: #900;\n  font-size: 1.4em;\n  font-weight: 400;\n  padding-top: 0px;\n  padding-bottom: 10px;\n  margin-bottom: 0;\n}\n#resume h3 {\n  margin: 0;\n  font-size: 0.8em;\n  font-weight: 600;\n}\n#resume h4 {\n  font-size: 0.8em;\n  color: #444;\n  font-weight: 400;\n  padding: 0;\n  margin: 0;\n}\n#resume a {\n  color: #990000;\n}\n#resume .line {\n  font-size: 0.8em;\n  overflow: hidden;\n  padding-top: 12px;\n}\n#resume .title {\n  color: #444;\n  width: 130px;\n  display: block;\n  float: left;\n}\n#resume dl {\n  line-height: 30px;\n}\n#resume dt {\n  width: 190px;\n  float: left;\n}\n#resume .spanstart:after {\n  content: ' - ';\n}\n#resume .date_duration {\n  font-weight: 400;\n}\n#resume .vcard > h1 {\n  font-size: 1.6em;\n  padding: 0;\n  margin: 0;\n  font-weight: 400;\n  padding-bottom: 10px;\n}\n#resume .experience {\n  padding-bottom: 20px;\n}\n#resume .experience:last-child {\n  padding-bottom: 0;\n}\n#resume .experience-header {\n  overflow: hidden;\n}\n#resume .experience-hgroup {\n  float: left;\n}\n#resume .vcalendar li {\n  font-size: 0.8em;\n}\n#resume .description {\n  list-style: circle;\n  color: #666;\n  margin-left: 20px;\n  padding-left: 20px;\n  line-height: 25px;\n}\n#resume .skills {\n  overflow: hidden;\n  margin: 0;\n}\n#resume .skills li {\n  float: left;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/cv/resume.html",
    "content": "<!DOCTYPE html>\n<head>\n  <link rel=\"stylesheet\" href=\"resume.css\" />\n</head>\n<body style=\"background-color: white\">\n  <div id=\"resume\">\n    <div class=\"wrap\">\n      <div class=\"header vcard\" id=\"header\">\n        <h1 class=\"fn n\">\n          <span class=\"given-name\">Kirill</span>\n          <span class=\"family-name\">Cherkashin</span>\n        </h1>\n\n        <div class=\"line\">\n          <a href=\"mailto:kirill@kcherkashin.org\" title=\"email\" class=\"email\"\n            >kirill@kcherkashin.org</a\n          >\n        </div>\n\n        <div class=\"line\" style=\"margin-top:40px\">\n          <span class=\"title\">Languages:</span>\n          <div>\n            <ul class=\"skills\">\n              <li>English (fluent)</li>\n              <li>Russian (native)</li>\n              <li>Spanish (basic)</li>\n            </ul>\n          </div>\n        </div>\n      </div>\n      <!-- Professional experience-->\n      <div id=\"info\">\n        <div class=\"vcalendar\">\n          <div class=\"header\"><h2>Professional experience</h2></div>\n\n          <div class=\"experience vevent\">\n            <div class=\"header experience-header\">\n              <h3 class=\"summary\">\n                <span class=\"position\">Front-End Developer</span>\n                <span class=\"date_duration\">\n                  <span class=\"spanstart\">April 2013</span>\n                  <span class=\"spanend\">April 2015</span>\n                </span>\n              </h3>\n              <h4><span class=\"fn org\">Lab49</span></h4>\n            </div>\n            <div></div>\n            <ul class=\"description\">\n              <li>\n                Designed and contributed to the development of an Angular single\n                page app for generating reports\n              </li>\n              <li>\n                Developed Backbone-based form handling framework, for a CRUD\n                Single Page application\n              </li>\n              <li>\n                Organized and led internal hackathons, debates and presentations\n              </li>\n            </ul>\n          </div>\n\n          <div class=\"experience vevent\">\n            <div class=\"header experience-header\">\n              <div class=\"experience-hgroup\">\n                <h3 class=\"summary\">\n                  <span class=\"position\">System Administrator</span>\n                  <span class=\"date_duration\">\n                    <span class=\"spanstart\">March 2011</span>\n                    <span class=\"spanend\">April 2013</span>\n                  </span>\n                </h3>\n                <h4>\n                  <span class=\"fn org\">International Medical Corps</span>,\n                  <span>Washington DC</span>\n                </h4>\n              </div>\n            </div>\n\n            <ul class=\"description\">\n              <li>Provided IT support for 50 users</li>\n              <li>Created a single page Backbone app, utilizing YouTube API</li>\n              <li>Developed Active Directory management system with C#</li>\n            </ul>\n          </div>\n\n          <div class=\"experience vevent\">\n            <div class=\"header experience-header\">\n              <h3 class=\"summary\">\n                <span class=\"position\">Freelancer</span>\n                <span class=\"date_duration\">\n                  <span class=\"spanstart\">March 2011</span>\n                  <span class=\"spanend\">April 2013</span>\n                </span>\n              </h3>\n              <h4 class=\"fn org\"><span class=\"fn org\">Freelancing</span></h4>\n            </div>\n            <ul class=\"description\">\n              <li>\n                Developed WordPress web sites for CIPE, ALA group, Taxpayers for\n                Common Sense, Rosebar Lounge.\n              </li>\n            </ul>\n          </div>\n        </div>\n\n        <!-- Education-->\n        <div class=\"vcalendar\">\n          <div class=\"header\"><h2>Education</h2></div>\n\n          <div class=\"education vevent\">\n            <div class=\"header experience-header vcard location\">\n              <h3 class=\"summary\">\n                <span class=\"position\"\n                  >Standardization of Technical Devices</span\n                >\n                <span class=\"date_duration\">\n                  <span class=\"spanstart\">2004</span>\n                  <span class=\"spanend\">2011</span>\n                </span>\n              </h3>\n              <h4>\n                <span class=\"fn org\"\n                  >Moscow University of Radio Engineering</span\n                >, <span>Moscow RU</span>\n              </h4>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</body>\n"
  },
  {
    "path": "apps/kirjs/src/app/cv/resume.scss",
    "content": "ul {\n  li {\n    margin: 0;\n    padding: 0;\n  }\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/*.......| Resume                      |.......................*/\n\n#resume {\n  #header {\n    width: 250px;\n    float: left;\n    .title {\n      width: 90px;\n    }\n  }\n\n  #info {\n    margin-left: 300px;\n  }\n  h1 {\n    font-size: 1.4em;\n    text-transform: uppercase;\n    margin-top: 30px;\n    margin-bottom: 20px;\n  }\n  h2 {\n    color: #900;\n    font-size: 1.4em;\n    font-weight: 400;\n    padding-top: 0px;\n    padding-bottom: 10px;\n    margin-bottom: 0;\n  }\n  h3 {\n    margin: 0;\n    font-size: 0.8em;\n    font-weight: 600;\n  }\n  h4 {\n    font-size: 0.8em;\n    color: #444;\n    font-weight: 400;\n    padding: 0;\n    margin: 0;\n  }\n  a {\n    color: #990000;\n  }\n\n  .line {\n    font-size: 0.8em;\n    overflow: hidden;\n    padding-top: 12px;\n  }\n  .title {\n    color: #444;\n    width: 130px;\n    display: block;\n    float: left;\n  }\n  max-width: 800px;\n  margin: 0 auto;\n  font-family: verdana, sans-serif;\n  dl {\n    line-height: 30px;\n  }\n  dt {\n    width: 190px;\n    float: left;\n  }\n  .spanstart:after {\n    content: ' - ';\n  }\n  .date_duration {\n    font-weight: 400;\n  }\n  .vcard > h1 {\n    font-size: 1.6em;\n    padding: 0;\n    margin: 0;\n    font-weight: 400;\n    padding-bottom: 10px;\n  }\n\n  .experience {\n    &:last-child {\n      padding-bottom: 0;\n    }\n    padding-bottom: 20px;\n  }\n  .experience-header {\n    overflow: hidden;\n  }\n  .experience-hgroup {\n    float: left;\n  }\n\n  .vcalendar li {\n    font-size: 0.8em;\n  }\n\n  .description {\n    list-style: circle;\n    color: #666;\n    margin-left: 20px;\n    padding-left: 20px;\n    line-height: 25px;\n  }\n\n  .skills {\n    overflow: hidden;\n    margin: 0;\n    li {\n      float: left;\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/kirjs.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { monacoReady } from '@codelab/code-demos';\n\nimport { AppComponent } from './app.component';\nimport { RouterModule } from '@angular/router';\nimport { environment } from '../../../codelab/src/environments/environment';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { OverlayComponent } from './modules/streaming/overlay/overlay.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MarkdownModule } from 'ngx-markdown';\n\nexport const angularFire = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\nconst routes = [\n  {\n    path: 'binary',\n    loadChildren: () =>\n      import('./modules/binary/binary.module').then(m => m.BinaryModule),\n    name: 'Binary',\n    description: 'Learn about Binary in JS',\n    page: 'bonus',\n    prod: true\n  },\n  {\n    path: 'gomoku',\n    loadChildren: () =>\n      import('./modules/gomoku/gomoku.module').then(m => m.GomokuModule),\n    name: 'Gomoku',\n    description: 'Gomoku',\n    page: 'bonus',\n    prod: true\n  },\n  {\n    path: 'cellular-automation',\n    loadChildren: () =>\n      import(\n        './modules/cellular-automation/cellular-automation-routing.module'\n      ).then(m => m.CellularAutomationRoutingModule),\n    name: 'Image inclusion',\n    description: 'Image inclusion'\n  },\n  {\n    path: 'music',\n    loadChildren: () =>\n      import('./modules/music/music.module').then(m => m.MusicModule),\n    name: 'Music',\n    description: 'Music'\n  },\n  {\n    path: 'webassembly',\n    loadChildren: () =>\n      import('./modules/webassembly/webassembly.module').then(\n        m => m.WebassemblyModule\n      ),\n    name: 'webassembly',\n    description: 'webassembly'\n  },\n  {\n    path: 'svg',\n    loadChildren: () =>\n      import('./modules/svg/svg.module').then(m => m.SvgModule),\n    name: 'Svg + Angular',\n    description: 'SVG '\n  },\n  {\n    path: 'regex',\n    loadChildren: () =>\n      import('./modules/regex/regex.module').then(m => m.RegexModule),\n    name: 'Regex',\n    description: 'Regex '\n  },\n  {\n    path: 'ast',\n    loadChildren: () =>\n      import('./modules/ast/ast.module').then(m => m.AstModule),\n    name: 'Ast + Angular',\n    description: 'SVG '\n  },\n  {\n    path: 'svg-race',\n    loadChildren: () =>\n      import('./modules/svg-race/svg-race.module').then(m => m.SvgRaceModule),\n    name: 'SVG Race',\n    description: 'SVG '\n  },\n  {\n    path: '',\n    loadChildren: () =>\n      import('./modules/home/home.module').then(m => m.HomeModule),\n    name: 'Home',\n    description: 'Home'\n  },\n  {\n    path: 'streaming',\n    loadChildren: () =>\n      import('./modules/streaming/streaming.module').then(\n        m => m.StreamingModule\n      ),\n    name: 'Home',\n    description: 'Home'\n  },\n  {\n    path: 'sync',\n    loadChildren: () =>\n      import('./modules/sync/sync.module').then(m => m.SyncModule),\n    name: 'Sync',\n    description: 'Sync Session'\n  },\n  {\n    path: 'stack',\n    loadChildren: () =>\n      import('./modules/stack/stack.module').then(m => m.StackModule),\n    name: 'Stack Module',\n    description: 'stack'\n  },\n  {\n    path: 'sync',\n    loadChildren: () =>\n      import('./modules/sync/sync.module').then(m => m.SyncModule),\n    name: 'Sync',\n    description: 'Sync Session'\n  },\n  {\n    path: 'test',\n    loadChildren: () =>\n      import('./modules/test/test.module').then(m => m.TestModule),\n    name: 'Home',\n    description: 'Home'\n  },\n  {\n    path: 'qna',\n    loadChildren: () =>\n      import('./modules/qna/qna.module').then(m => m.QnaModule),\n    name: 'Q&A'\n  },\n  {\n    path: 'msk',\n    loadChildren: () =>\n      import('./modules/msk/msk.module').then(m => m.MskModule),\n    name: 'Angular Moscow Meetup'\n  },\n  {\n    path: 'stack',\n    loadChildren: () =>\n      import('./modules/stack/stack-routing.module').then(\n        m => m.StackRoutingModule\n      ),\n    name: 'Stack Module',\n    description: 'stack'\n  }\n];\n\n@NgModule({\n  declarations: [AppComponent, OverlayComponent],\n  imports: [\n    BrowserModule,\n    BrowserAnimationsModule,\n    RouterModule.forRoot(routes),\n    AngularFireAuthModule,\n    AngularFireDatabaseModule,\n    angularFire,\n    MatCardModule,\n    MarkdownModule\n  ],\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useValue: monacoReady,\n      multi: true\n    },\n    {\n      provide: 'ROUTES',\n      useValue: []\n    },\n    {\n      provide: APP_INITIALIZER,\n      useValue: monacoReady,\n      multi: true\n    }\n  ],\n  bootstrap: [AppComponent]\n})\nexport class KirjsModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast-preview-runner/ast-preview-runner.component.css",
    "content": ".error {\n  color: red;\n  font-size: 50px;\n}\n\n:host ::ng-deep .header.header.header.header {\n  font-size: inherit;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast-preview-runner/ast-preview-runner.component.html",
    "content": "<div>\n  <div *ngIf=\"hasError\" class=\"error\">Parsing error</div>\n  <ast-viz (selectNode)=\"selectNode($event)\" [node]=\"ast\"></ast-viz>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast-preview-runner/ast-preview-runner.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { parse } from 'babylon';\n\ndeclare const require;\n\n@Component({\n  selector: 'kirjs-ast-preview-runner',\n  templateUrl: './ast-preview-runner.component.html',\n  styleUrls: ['./ast-preview-runner.component.css']\n})\nexport class AstPreviewRunnerComponent implements OnChanges {\n  ast: any;\n  hasError = false;\n  @Input() program = true;\n  @Input() code = '';\n  @Output() highlight = new EventEmitter();\n\n  update() {\n    this.run();\n  }\n\n  selectNode({ loc }) {\n    this.highlight.emit([\n      loc.start.line,\n      loc.start.column + 1,\n      loc.end.line,\n      loc.end.column + 1\n    ]);\n  }\n\n  run() {\n    this.hasError = false;\n    try {\n      this.ast = parse(this.code);\n      if (this.program) {\n        this.ast = this.ast.program.body;\n      }\n    } catch (e) {\n      this.hasError = true;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.run();\n  }\n\n  constructor() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast-preview-runner/ast-preview-runner.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AstPreviewRunnerComponent } from './ast-preview-runner.component';\nimport { FormsModule } from '@angular/forms';\nimport { AngularAstVizModule } from '@codelab/angular-ast-viz';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, AngularAstVizModule],\n  declarations: [AstPreviewRunnerComponent],\n  exports: [AstPreviewRunnerComponent]\n})\nexport class AstPreviewRunnerModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast.component.css",
    "content": ".bg {\n  background: #fff;\n  opacity: 0.7;\n  padding: 2vw 5vw;\n  margin: 5vw 0;\n  border: 1px solid #000;\n}\n\n#intro h1 {\n  font-size: 9vw;\n  font-weight: 100;\n  font-family: 'Helvetica Neue', sans-serif;\n}\n\na {\n  color: #9c2600;\n}\n\n#intro h2,\n#outro h2 {\n  font-size: 12vw;\n}\n\n#intro h2,\n#outro h1 {\n  font-size: 6vw;\n}\n\n:host /deep/ .slide > div {\n  width: 100%;\n}\n\n:host /deep/ .slide {\n  background: transparent;\n}\n\n#sausage-pre {\n  background: url(pics/sausage-pre.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#not-like-sausage {\n  background: url(pics/sausage2.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#babel-types {\n  background: url(pics/park.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#babel-traverse .bg,\n#babel-transform .bg,\n#renoir .bg {\n  margin: 30vw 0;\n}\n\n#babel-traverse {\n  background: url(pics/girl-reading-1890.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#babel-transform {\n  background: url(pics/doggie.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#debugger-pre {\n  background: url(pics/debugger.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#renoir {\n  background: url(pics/renoir.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#babel-remove-debugger {\n  background: url(pics/cat.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#babel-fit {\n  background: url(pics/the-garden.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#parser {\n  background: url(pics/parser.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#links-5-cool-things {\n  background: url(pics/bg-links.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#panda {\n  background: url(pics/panda.webp) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n.henry-zhu {\n  background: url(pics/patreon.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n  width: 70vw;\n}\n\n.babylon {\n  background: url(pics/babylon.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n  width: 70vw;\n}\n\n.babylon {\n  background: url(pics/babylon.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n  width: 70vw;\n}\n\n.success-complete-disco {\n  margin-top: 20px;\n  width: 500px;\n  height: 300px;\n  background: url(pics/success/disco.webp);\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n.success-complete-husky {\n  margin-top: 20px;\n  width: 500px;\n  height: 300px;\n  background: url(pics/success/happy.webp);\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n.success-complete-dancing {\n  margin-top: 20px;\n  width: 500px;\n  height: 300px;\n  background: url(pics/success/dancing-dog.webp);\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n.github {\n  background: url(pics/github.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n  width: 70vw;\n}\n\n.opencollective {\n  background: url(pics/opencollective.png) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n  width: 70vw;\n}\n\n#eslint {\n  background: url(pics/debugger.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n}\n\n#kirjs {\n  background: url(pics/kirjs.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n}\n\n#intro,\n#outro {\n  background: url(pics/landscape-with-trees-1.jpg) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n}\n\n.bad-tree {\n  background: url(pics/tree.gif) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n}\n\n#venok img {\n  width: 384px;\n  height: 288px;\n  margin: 0 auto;\n}\n\n.ast-explorer-link:hover {\n  font-size: 5vw;\n}\n\n.ast-explorer-link {\n  padding-top: 25px;\n  font-size: 10px;\n}\n\n.description.description.description {\n  margin: 0;\n  margin-top: 20px;\n  padding: 0;\n  font-size: 0;\n}\n\n#debugger-regex /deep/ .solution:hover:before {\n  color: red;\n  font-size: 3vw;\n}\n\n:host /deep/ #debugger-regex .solution {\n}\n\n.ast-preview-helper-list li:hover {\n  color: #444;\n}\n\n.ast-preview-helper-list li {\n  font-size: 20px;\n  text-decoration: dashed;\n  cursor: pointer;\n  color: #999;\n  border-bottom: 1px #ddd dashed;\n}\n\n.ast-preview {\n  font-size: 30px;\n}\n\n.two-button {\n  background: url(pics/button-1.png) no-repeat;\n  background-size: 50% auto;\n  display: inline-block;\n  height: 50vh;\n  font-size: 5vw;\n  border: 0 solid;\n  padding: 0;\n  margin: 0;\n}\n\n.two-button2 {\n  background: url(pics/two-button2.gif) no-repeat;\n  background-size: 50% auto;\n  display: inline-block;\n  height: 50vh;\n  font-size: 5vw;\n  border: 0 solid;\n  padding: 0;\n  margin: 0;\n}\n\n.two-button3 {\n  background: url(pics/two-button3.gif) no-repeat;\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n  font-size: 5vw;\n  border: 0 solid;\n  padding: 0;\n  margin: 0;\n}\n\n.link-number {\n  display: inline-block;\n  font-size: 8vw;\n  border-radius: 50%;\n  width: 10vw;\n  height: 10vw;\n  text-align: center;\n  margin-bottom: 10vh;\n}\n\n.collie.display {\n  background: url(pics/collie.webp) no-repeat;\n}\n\n.collie {\n  background-size: 100% auto;\n  display: inline-block;\n  height: 40vh;\n  font-size: 5vw;\n  width: 50vw;\n}\n\n.btn-bar {\n  line-height: 3vw;\n}\n\n.btn-bar:hover .font-size {\n  display: block;\n  font-size: 4vw;\n}\n\n.btn-bar .font-size {\n  display: none;\n}\n\n.twitter {\n  color: #444;\n  font-size: 3vw;\n  margin: 2vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting kirjs-tracking>\n  <!--<kirjs-new-progress-bar [fontSize]=\"fontSize\" (fontSizeChange)=\"updateFontSize($event)\"></kirjs-new-progress-bar>-->\n  <slide-arrows></slide-arrows>\n\n  <div *slide id=\"intro\" no-padding>\n    <div class=\"bg\">\n      <h1><b>Абстрактные Синтаксические Деревья</b> в JavaScript</h1>\n      <h2>@kirjs</h2>\n    </div>\n  </div>\n\n  <div *slide id=\"kirjs\" no-padding>\n    <div class=\"bg\"><h2>@kirjs</h2></div>\n  </div>\n\n  <div *slide id=\"what-s-ast\">\n    <h1>Абстрактные синтаксические деревья (АСД)</h1>\n    <h2>\n      Это выступление о том как научить код <b>понимать</b> и\n      <b>трансформировать</b> другой код.\n    </h2>\n  </div>\n\n  <div *slide id=\"debugger-pre\" no-padding>\n    <div class=\"bg\">\n      <h1>Начнем сразу с примера</h1>\n      <h2>Как определить что из файла забыли вырезать <b>console.log</b></h2>\n    </div>\n  </div>\n\n  <div no-padding *slide id=\"two-buttons\">\n    <div class=\"bg two-button\"></div>\n    <div class=\"bg two-button2\"></div>\n  </div>\n\n  <div *slide id=\"console-log-regex\" no-padding>\n    <kirjs-test-set [files]=\"code.findConsoleLog\" [fontSize]=\"fontSize\">\n      <div class=\"success-complete-dancing\"></div>\n    </kirjs-test-set>\n  </div>\n\n  <div no-padding *slide id=\"two-buttons-push\">\n    <div class=\"bg two-button3\"></div>\n  </div>\n\n  <div *slide id=\"sausage-pre\" no-padding></div>\n\n  <div *slide id=\"not-like-sausage\" no-padding></div>\n\n  <div *slide id=\"parser\" no-padding></div>\n\n  <div *slide id=\"parser-code\">\n    <h2>Парсим с помощью babylon:</h2>\n    <code-demo-editor\n      class=\"editor\"\n      language=\"javascript\"\n      [lineNumbers]=\"false\"\n      [(ngModel)]=\"code.parser\"\n      [fontSize]=\"fontSize * 1.5\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide id=\"babylon-update\">\n    <h2>19 Мая <b>babylon</b> был переименован в <b>@babel/parser</b></h2>\n    <br />\n    <br />\n    <div class=\"babylon\"></div>\n  </div>\n\n  <div *slide id=\"consle-log-ast-again\">\n    <h1>Пример Абстрактного Синтаксического Дерева:</h1>\n\n    <div style=\"display: flex;\">\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLog\"\n        type=\"javascript\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLogAst\"\n        type=\"JSON\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"scary-tree\" no-padding><div class=\"bad-tree\"></div></div>\n\n  <div *slide id=\"console-log-ast-highlight-body\">\n    <div style=\"display: flex;\">\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLog\"\n        type=\"javascript\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n\n      <!--// TODO(kirjs): [slidesBabelHighlightMatch]=\"matchTreePartsBody\"-->\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLogAstJs\"\n        type=\"JSON\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"console-log-ast-just-body\">\n    <div style=\"display: flex;\">\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLog\"\n        type=\"javascript\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLogBodyAstCode\"\n        type=\"JSON\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"panda\" no-padding></div>\n\n  <div *slide id=\"console-log-ast-just-body-highlight-loc\">\n    <div style=\"display: flex;\">\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLog\"\n        type=\"javascript\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n\n      <!--// TODO(kirjs): [babelHighlightMatch]=\"matchTreePartsLoc\"-->\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLogBodyAstCode\"\n        type=\"JSON\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"console-log-ast-no-loc\">\n    <div style=\"display: flex;\">\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLog\"\n        type=\"javascript\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLogNoLocCode\"\n        type=\"JSON\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"console-log-structure\" no-padding>\n    <div style=\"display: flex;height: 200px;flex-shrink: 0\">\n      <code-demo-editor\n        [minLines]=\"1\"\n        [autoSize]=\"false\"\n        class=\"editor\"\n        [(ngModel)]=\"code.astPreview\"\n        [fontSize]=\"fontSize * 2\"\n        [lineNumbers]=\"false\"\n        style=\"width: 70%;\"\n      ></code-demo-editor>\n      <div class=\"ast-preview-helper-list\">\n        <ul>\n          <li (click)=\"code.astPreview = 'log'\">log</li>\n          <li (click)=\"code.astPreview = 'console.log'\">console.log</li>\n          <li (click)=\"code.astPreview = 'log()'\">log()</li>\n          <li (click)=\"code.astPreview = 'console.log()'\">console.log()</li>\n          <li (click)=\"code.astPreview = 'console.log(1)'\">console.log(1)</li>\n          <li (click)=\"code.astPreview = 'console.log(1,a.b)'\">\n            console.log(1, a.b)\n          </li>\n          <li (click)=\"code.astPreview = 'hi;\\n123;\\n/lol/;\\ntrue;\\nnull'\">\n            All literals\n          </li>\n        </ul>\n      </div>\n    </div>\n    <kirjs-ast-preview-runner\n      (highlight)=\"asthighlight = $event\"\n      #astPreview\n      [code]=\"code.astPreview\"\n      class=\"ast-preview\"\n    ></kirjs-ast-preview-runner>\n    <div\n      class=\"collie ast-preview\"\n      [class.display]=\"displayCallee\"\n      (click)=\"displayCallee = !displayCallee\"\n    ></div>\n  </div>\n\n  <div *slide id=\"console-log-ast-no-loc2\">\n    <div style=\"display: flex;\">\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLog\"\n        type=\"javascript\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n\n      <code-demo-editor\n        style=\"width: 50%\"\n        [(ngModel)]=\"code.consoleLogNoLocCode\"\n        type=\"JSON\"\n        lineNumbers=\"on\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"babel-traverse\" no-padding>\n    <div class=\"bg\">Обход AST с помощью <b>babel-traverse</b></div>\n  </div>\n\n  <div *slide id=\"console-log-babel-traverse\" no-padding>\n    <kirjs-test-set\n      [files]=\"code.traverseConsoleLogBabel\"\n      [fontSize]=\"fontSize\"\n      [showAst]=\"true\"\n    >\n      <div class=\"success-complete-husky\"></div>\n    </kirjs-test-set>\n  </div>\n\n  <div *slide id=\"babel-types\" no-padding>\n    <div class=\"bg\">Упрощаем работу с AST с помощью <b>babel-types</b></div>\n  </div>\n\n  <div *slide id=\"babel-types-identifier\" no-padding>\n    <code-demo-editor\n      class=\"editor\"\n      language=\"javascript\"\n      [lineNumbers]=\"false\"\n      [(ngModel)]=\"code.types.identifier\"\n      [fontSize]=\"fontSize * 1.5\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide id=\"babel-types-name\" no-padding>\n    <code-demo-editor\n      class=\"editor\"\n      language=\"javascript\"\n      [lineNumbers]=\"false\"\n      [(ngModel)]=\"code.types.name\"\n      [fontSize]=\"fontSize * 1.5\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide id=\"console-log-babel-traverse1\" no-padding>\n    <kirjs-test-set\n      [files]=\"code.traverseConsoleLogBabel2\"\n      [fontSize]=\"fontSize\"\n    >\n      <div class=\"success-complete-husky\"></div>\n    </kirjs-test-set>\n  </div>\n\n  <div *slide id=\"babel-transform\" no-padding>\n    <div class=\"bg\">Трансформируем АСД с помощью <b>babel-traverse</b></div>\n  </div>\n\n  <div *slide id=\"console-log-babel-transform\" no-padding>\n    <kirjs-test-set [files]=\"code.removeConsoleLogBabel\" [fontSize]=\"fontSize\">\n      <div class=\"success-complete-disco\"></div>\n    </kirjs-test-set>\n  </div>\n\n  <div *slide id=\"fond-debugger\" no-padding>\n    <div class=\"bg\">Давайте найдем в коде <b>debugger</b></div>\n  </div>\n\n  <div *slide id=\"debugger-structure2\" no-padding>\n    <div style=\"height: 200px;flex-shrink: 0; display: flex;\">\n      <code-demo-editor\n        class=\"editor\"\n        [(ngModel)]=\"code.astPreviewDebugger\"\n        [fontSize]=\"fontSize\"\n        style=\"width: 70%;\"\n      ></code-demo-editor>\n      <div\n        class=\"ast-preview-helper-list\"\n        style=\"font-size: 2vw;padding: 20px;\"\n      >\n        <a href=\"http://astexplorer.net/\">astexplorer.net</a>\n      </div>\n    </div>\n    <kirjs-ast-preview-runner\n      #astPreview\n      [code]=\"code.astPreviewDebugger\"\n      class=\"ast-preview\"\n    ></kirjs-ast-preview-runner>\n  </div>\n\n  <div *slide id=\"eslint\" no-padding>\n    <div class=\"bg\">\n      Давайте напишем плагин для <b>ESLint</b> (на\n      <a href=\"http://astexplorer.net\">AstExplorer</a>)\n    </div>\n  </div>\n\n  <div *slide id=\"why-break\">\n    <h1>Где еще полезны АСД?</h1>\n    <ul>\n      <li>Больше контроля надо кодом, проще рефакторинг, codemods</li>\n      <li>Меньше споров про оформление кода</li>\n      <li>Создание игровых проэктов</li>\n      <li>Лучшее понимание JavaScript</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"ast-links\">\n    <div class=\"bg\">\n      <h2>\n        Когда вы увидите эти 5 ссылок про <b>Babel</b> вы не поверите своим\n        глаза...\n      </h2>\n    </div>\n  </div>\n\n  <div *slide id=\"ast-links-1\">\n    <b class=\"link-number\">1</b>\n    <h2>\n      Все трансформации Babel используют этот API.\n      <a href=\"https://github.com/babel/babel/tree/master/packages\"\n        >плагины и пресеты\n      </a>\n    </h2>\n  </div>\n  <div *slide id=\"ast-links-2\">\n    <b class=\"link-number\">2</b>\n    <h2>\n      Часть процесса добавления новой функциональности в EcmaScript - создание\n      плагина для Babel.\n    </h2>\n    <h2>\n      <a\n        href=\"https://github.com/babel/babel/tree/master/packages/babel-plugin-proposal-logical-assignment-operators\"\n      >\n        например logical-assignment-operator</a\n      >\n    </h2>\n  </div>\n\n  <div *slide id=\"ast-links-3\">\n    <b class=\"link-number\">3</b>\n    <h2>Babel Generator теряет форматирование при гегенерации кода.</h2>\n    <h2>\n      <a href=\"https://www.npmjs.com/package/recast\">Recast</a> и\n      <a href=\"https://www.npmjs.com/package/babel-codemod\">Babel CodeMod</a>\n      решают это проблему.\n    </h2>\n  </div>\n\n  <div *slide id=\"ast-links-4\">\n    <b class=\"link-number\">4</b>\n    <h2>\n      Оргомная подборка информации про Babel в репозитории\n      <a href=\"https://github.com/babel/awesome-babel\">Awesome Babel</a>\n    </h2>\n  </div>\n\n  <div *slide id=\"ast-links-5\">\n    <b class=\"link-number\">5</b>\n    <h2>\n      Babel - проект с открытыми исходниками, над ним трудится команда\n      волонтеров и им не помешала бы помощь :)\n    </h2>\n  </div>\n\n  <div *slide id=\"ast-links-5-1\">\n    <b class=\"link-number\">5</b>\n    <h2><a href=\"https://www.patreon.com/henryzhu\">patreon.com/henryzhu</a></h2>\n    <br />\n    <br />\n    <div class=\"henry-zhu\"></div>\n  </div>\n\n  <div *slide id=\"ast-links-5-2\">\n    <b class=\"link-number\">5</b>\n    <h2><a href=\"opencollective.com/babel\">opencollective.com/babel</a></h2>\n    <br />\n    <br />\n    <div class=\"opencollective\"></div>\n  </div>\n\n  <div *slide id=\"ast-links-5-3\">\n    <b class=\"link-number\">5</b>\n    <h2>\n      <a href=\"github.com/babel/babel/issues\">github.com/babel/babel/issues</a>\n    </h2>\n    <br />\n    <br />\n    <div class=\"github\"></div>\n  </div>\n\n  <div *slide id=\"renoir\" no-padding>\n    <div class=\"bg\">\n      <h2>\n        Эта презентация:\n        <a href=\"https://codelab.fun/ast/intro\"\n          >https://codelab.fun/ast/intro</a\n        >\n      </h2>\n      <h2>\n        Картинки: <a href=\"https://twitter.com/artist_renoir\">@artist_renoir</a>\n      </h2>\n      <h2>Мой твиттер: <a href=\"https://twitter.com/kirjs\">@kirjs</a></h2>\n    </div>\n  </div>\n\n  <div *slide id=\"outro\" no-padding>\n    <div class=\"bg\"><h1>Thank you!</h1></div>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast.component.ts",
    "content": "import { Component } from '@angular/core';\n\nimport { parse } from 'babylon';\nimport {\n  findHighlightsObjectProp,\n  isBody,\n  isLoc,\n  isType,\n  processCode,\n  removeDoubleWhiteLines,\n  removeLoc\n} from './parse-hello-world-ast';\nimport { exercise } from '../../../../../codelab/src/app/shared/helpers/helpers';\n\ndeclare const require;\n\nconst helloWorld = require('./samples/hello-world.json');\n\nfunction jsify(program) {\n  return 'const ast = ' + JSON.stringify(program, null, '  ');\n}\n\nconst helloWorldCodePre = jsify(helloWorld);\n\nconst angularCodeBefore = `import {\n  Component\n} from '@angular/core';\n\n@Component({\n  selector: 'amazing-component',\n  template: './app.html',\n})\nexport class SimpleEditorComponent implements ControlValueAccessor {\n}`;\nconst angularCodeAfter = `import {\n  Component,\n  forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'amazing-component',\n  template: './app.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => SimpleEditorComponent),\n      multi: true\n    }\n  ],\n})\nexport class SimpleEditorComponent implements ControlValueAccessor {\n  registerOnTouched(fn: any): void {\n  }\n\n  registerOnChange(onChange: (code: string) => void): void {\n    this.change.subscribe(onChange)\n  }\n\n  writeValue(value: string): void {\n    console.log(value)\n  }\n}`;\n\nconst consoleLog = `console.log('hello')`;\nconst consoleLogAst = parse(consoleLog);\nconst consoleLogCode = JSON.stringify(consoleLogAst, null, '  ');\nconst consoleLogBodyAst = consoleLogAst.program.body;\nconst consoleLogBodyAstCode = JSON.stringify(consoleLogBodyAst, null, '  ');\nconst consoleLogNoLocCode = removeDoubleWhiteLines(\n  processCode(consoleLogBodyAstCode, { remove: [removeLoc] })\n);\n\n@Component({\n  selector: 'kirjs-ast',\n  templateUrl: './ast.component.html',\n  styleUrls: ['./ast.component.css']\n})\nexport class AstComponent {\n  fontSize = 28;\n\n  displayCallee = false;\n  code = {\n    parser: `import { parse } from 'babylon';\nparse(\"console.log('🐶🐶🐶')\");`,\n    astPreview: 'log',\n    astPreviewDebugger: 'console.log();\\ndebugger\\n123',\n    types: {\n      identifier: `\n// Before\npath.node.property.type === 'Identifier'\n\n// with babel types\nimport {isIdentifier} from 'babel-types';\nisIdentifier(path.node.property)`,\n      name: `\n// Before\npath.node.property.type === 'Identifier'\npath.node.property.name === 'log'\n\n// with babel types\nimport {isIdentifier} from 'babel-types';\nisIdentifier(path.node.property, {name: log})`\n    },\n    astHello: 'hello(console.log)',\n    matches: {\n      loc: /\"loc\": \\{[\\s\\S]*?\\{[\\s\\S]*?\\}[\\s\\S]*?\\{[\\s\\S]*?\\}[\\s\\S]*?\\},/\n    },\n    astExampleFull: processCode(helloWorldCodePre, { remove: [] }),\n    astExample: removeDoubleWhiteLines(\n      processCode(helloWorldCodePre, { remove: [removeLoc] })\n    ),\n    astExampleNoBody: removeDoubleWhiteLines(\n      processCode(jsify(helloWorld.program.body), { remove: [removeLoc] })\n    ),\n    consoleLog: consoleLog,\n    consoleLogAst: consoleLogCode,\n    consoleLogAstJs: 'const ast = ' + consoleLogCode,\n    consoleLogBodyAstCode,\n    consoleLogNoLocCode,\n    angularCodeBefore,\n    angularCodeAfter,\n    angularMatchesAfter: [/a/],\n    findConsoleLog: [\n      exercise(\n        'find-console-log',\n        require('!!raw-loader!./samples/find-console-log/find-console-log.js'),\n        require('!!raw-loader!./samples/find-console-log/find-console-log-regex.solved.js')\n      ),\n      exercise(\n        'find-console-log.test',\n        require('!!raw-loader!./samples/find-console-log/find-console-log.test.js')\n      )\n    ],\n    findDebuggerBabel: [\n      exercise(\n        'find-debugger-babel',\n        require('!!raw-loader!./samples/find-debugger/find-debugger-babel.ts'),\n        require('!!raw-loader!./samples/find-debugger/find-debugger-babel.solved.ts')\n      ),\n      exercise(\n        'find-debugger.test',\n        require('!!raw-loader!./samples/find-debugger/find-debugger.test.js')\n      )\n    ],\n    traverseConsoleLogBabel: [\n      exercise(\n        'traverse-console-log-babel',\n        require('!!raw-loader!./samples/find-console-log/traverse-console-log-babel.ts'),\n        require('!!raw-loader!./samples/find-console-log/traverse-console-log-babel.solved.ts')\n      ),\n      exercise(\n        'find-console-log.test',\n        require('!!raw-loader!./samples/find-console-log/find-console-log.test.js')\n      )\n    ],\n    traverseConsoleLogBabel2: [\n      exercise(\n        'traverse-console-log-babel',\n        require('!!raw-loader!./samples/find-console-log/traverse-console-log-babel.solved.ts'),\n        require('!!raw-loader!./samples/find-console-log/traverse-console-log-babel.solved2.ts')\n      ),\n      exercise(\n        'find-console-log.test',\n        require('!!raw-loader!./samples/find-console-log/find-console-log.test.js')\n      )\n    ],\n    removeConsoleLogBabel: [\n      exercise(\n        'remove-console-log',\n        require('!!raw-loader!./samples/find-console-log/remove-console-log.ts'),\n        require('!!raw-loader!./samples/find-console-log/remove-console-log.solved.ts')\n      ),\n      exercise(\n        'remove-console-log.test',\n        require('!!raw-loader!./samples/find-console-log/remove-console-log.test.js')\n      )\n    ],\n    findfIt: [\n      exercise(\n        'find-fit',\n        require('!!raw-loader!./samples/find-fit/find-fit.js'),\n        require('!!raw-loader!./samples/find-fit/find-fit.solved.js')\n      ),\n      exercise(\n        'find-fit.test',\n        require('!!raw-loader!./samples/find-fit/find-fit.test.js')\n      )\n    ],\n    itLines: [\n      exercise(\n        'it-lines',\n        require('!!raw-loader!./samples/it-lines/it-lines.js'),\n        require('!!raw-loader!./samples/it-lines/it-lines.solved.js')\n      ),\n      exercise(\n        'it-lines.test',\n        require('!!raw-loader!./samples/it-lines/it-lines.test.js')\n      )\n    ],\n    decToBin: require('!!raw-loader!./samples/dec-to-bin.js'),\n    decToBinFixed: require('!!raw-loader!./samples/dec-to-bin-with-semicolons.js')\n  };\n\n  constructor() {}\n\n  matchTreePartsLoc(code) {\n    return findHighlightsObjectProp(code, [isLoc]);\n  }\n\n  matchTreePartsBody(code) {\n    return findHighlightsObjectProp(code, [isBody]);\n  }\n\n  matchTreePartsType(code) {\n    return findHighlightsObjectProp(code, [isType]);\n  }\n\n  updateFontSize(diff) {\n    this.fontSize += diff;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/ast.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { AngularSlidesToPdfModule } from '@codelab/angular-slides-to-pdf';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { AstPreviewRunnerModule } from './ast-preview-runner/ast-preview-runner.module';\nimport { NewProgressBarModule } from './new-progress-bar/new-progress-bar.module';\nimport { AstComponent } from './ast.component';\nimport { DebuggerComponent } from './debugger/debugger.component';\nimport { TestSetComponent } from './test-set/test-set.component';\nimport { SizePickerModule } from './size-picker/size-picker.module';\nimport { BabelTestRunnerComponent } from './test-set/babel-test-runner/babel-test-runner.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(AstComponent));\n\n@NgModule({\n  imports: [\n    routes,\n    CommonModule,\n    AstPreviewRunnerModule,\n\n    SlidesModule,\n    BrowserWindowModule,\n    FeedbackModule,\n    CodeDemoModule,\n    FormsModule,\n    SizePickerModule,\n    MatCardModule,\n    NewProgressBarModule,\n    AngularSlidesToPdfModule\n  ],\n  declarations: [\n    AstComponent,\n    BabelTestRunnerComponent,\n    DebuggerComponent,\n    TestSetComponent\n  ],\n  exports: [AstComponent]\n})\nexport class AstModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/babel-highlight/babel-highlight-match.directive.ts",
    "content": "import { AfterViewInit, Directive, Input, NgModule } from '@angular/core';\nimport { CodeDemoEditorComponent } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.component';\n\n// TODO(kirjs): Uncommit\n@Directive({\n  // tslint:disable-next-line:all TODO: Fix linter warnings on the selector and delete this comment.\n  selector: '[slidesBabelHighlightMatch]'\n})\nexport class BabelHighlightDirective implements AfterViewInit {\n  // tslint:disable-next-line:all TODO: Fix linter warnings on the next line and delete this comment.\n  @Input('slidesBabelHighlightMatch') callback;\n\n  constructor(private editorComponent: CodeDemoEditorComponent) {}\n\n  ngAfterViewInit(): void {\n    if (this.callback) {\n      const matches = this.callback(this.editorComponent.code) || [];\n\n      const decorations = matches.map(match => {\n        return {\n          range: new this.editorComponent.monacoConfigService.monaco.Range(\n            ...match.loc\n          ),\n          options: { inlineClassName: match.className }\n        };\n      });\n\n      this.editorComponent.editor.deltaDecorations([], decorations);\n    }\n  }\n}\n\n@NgModule({\n  declarations: [BabelHighlightDirective]\n})\nexport class MockaADASDASDASDASDASDModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/debugger/debugger.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/debugger/debugger.component.html",
    "content": "<code-demo-editor\n  [(ngModel)]=\"code\"\n  style=\"height: 200px;flex-shrink: 0\"\n  [fontSize]=\"fontSize\"\n></code-demo-editor>\n<h2>\n  <button style=\"margin-left: 100px;font-size: 2vw\" (click)=\"run()\">\n    RUN!\n  </button>\n</h2>\n<div>\n  (Example from <a href=\"https://github.com/denysdovhan/wtfjs\"> wtfjs</a>)\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/debugger/debugger.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { DebuggerComponent } from './debugger.component';\n\ndescribe('DebuggerComponent', () => {\n  let component: DebuggerComponent;\n  let fixture: ComponentFixture<DebuggerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [DebuggerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(DebuggerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/debugger/debugger.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\ndeclare const require;\nconst code = require('!!raw-loader!./debugger.ts');\n\n@Component({\n  selector: 'kirjs-debugger-sample',\n  templateUrl: './debugger.component.html',\n  styleUrls: ['./debugger.component.css']\n})\nexport class DebuggerComponent implements OnInit {\n  @Input() fontSize = 20;\n  code = code;\n\n  constructor() {}\n\n  run() {\n    eval(this.code + ';weird()');\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/debugger/debugger.ts",
    "content": "function weird() {\n  parseInt('Infinity', 10);\n  parseInt('Infinity', 18);\n  parseInt('Infinity', 19);\n  parseInt('Infinity', 23);\n  parseInt('Infinity', 24);\n  parseInt('Infinity', 29);\n  parseInt('Infinity', 30);\n  parseInt('Infinity', 34);\n  parseInt('Infinity', 35);\n  parseInt('Infinity', 36);\n  parseInt('Infinity', 37);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/new-progress-bar/new-progress-bar.component.css",
    "content": ".progress-bar {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100vw;\n  z-index: 100;\n  background-color: #fff;\n  border-top: 1px solid #000;\n  padding: 0.5vw;\n  opacity: 0.3;\n}\n\n.progress-bar:hover .font-size {\n  visibility: visible;\n}\n\n.progress-bar:hover {\n  opacity: 1;\n}\n\n.font-size {\n  visibility: hidden;\n}\n\n.slide-block.completed-slide {\n  background: #ddd;\n}\n\n.slide-block.completed-slide {\n  background: #000;\n}\n\n.slide-block:hover {\n  opacity: 1;\n  cursor: pointer;\n}\n\n.slide-block.current-slide {\n  background: lime;\n}\n\n.slide-block {\n  margin-top: 0.1vw;\n  opacity: 0.7;\n  width: 0.5vw;\n  height: 0.5vw;\n  border: 1px solid #000;\n  border-radius: 50%;\n  margin-right: 0.3vw;\n}\n\n.handle {\n  font-family: 'Helvetica Neue', sans-serif;\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  color: #444444;\n  font-size: 3vw;\n  z-index: 101;\n  padding: 0.5vw;\n  padding-right: 2vw;\n  text-shadow: 0px 3px 20px #fff, 0px -3px 20px #fff, -3px 0px 20px #fff,\n    3px 0px 20px #fff;\n  text-decoration: none;\n}\n\nkirjs-size-picker {\n  margin-right: 200px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/new-progress-bar/new-progress-bar.component.html",
    "content": "<div\n  class=\"progress-bar\"\n  *ngIf=\"slides.length\"\n  style=\"justify-content: space-between;display: flex;\"\n>\n  <span style=\"margin-right: 2vw;\">{{ title }}</span>\n  <span class=\"font-size\">\n    <kirjs-size-picker\n      (sizeChange)=\"fontSizeChange.emit($event)\"\n      [size]=\"fontSize\"\n    ></kirjs-size-picker>\n  </span>\n  <div class=\"points-container\" #progressBarDiv style=\"display: flex;\">\n    <div *ngFor=\"let slide of slides; let i = index\" (click)=\"goToSlide(i)\">\n      <div\n        class=\"slide-block\"\n        [class.completed-slide]=\"i < activeSlideIndex\"\n        [class.current-slide]=\"i === activeSlideIndex\"\n      ></div>\n    </div>\n  </div>\n\n  <span></span>\n</div>\n<a href=\"https://twitter.com/kirjs\" class=\"handle\">sli.do/armadajs | @kirjs</a>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/new-progress-bar/new-progress-bar.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\nimport { SlidesDeckComponent } from '@ng360/slides';\n\n@Component({\n  selector: 'kirjs-new-progress-bar',\n  templateUrl: './new-progress-bar.component.html',\n  styleUrls: ['./new-progress-bar.component.css']\n})\nexport class NewProgressBarComponent implements AfterViewInit {\n  @Input() fontSize = 28;\n  @Input() title = 'JavaScript AST';\n  @Output() fontSizeChange = new EventEmitter();\n  slides = [];\n  activeSlideIndex = 0;\n  tempSlideId = 0;\n\n  constructor(public deck: SlidesDeckComponent) {}\n\n  ngAfterViewInit() {\n    // Change detection complains if updating it right away.\n    requestAnimationFrame(() => {\n      this.slides = this.deck.slides;\n      this.activeSlideIndex = this.deck.activeSlideIndex;\n    });\n\n    this.deck.slideChange.subscribe(index => {\n      this.activeSlideIndex = index;\n    });\n  }\n\n  previewSlide(index) {\n    this.tempSlideId = this.activeSlideIndex;\n    this.deck.goToSlide(index);\n  }\n\n  goToSlide(index) {\n    this.deck.goToSlide(index);\n    this.tempSlideId = this.activeSlideIndex;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/new-progress-bar/new-progress-bar.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { NewProgressBarComponent } from './new-progress-bar.component';\nimport { CommonModule } from '@angular/common';\nimport { SizePickerModule } from '../size-picker/size-picker.module';\n\n@NgModule({\n  imports: [CommonModule, SizePickerModule],\n  declarations: [NewProgressBarComponent],\n  exports: [NewProgressBarComponent]\n})\nexport class NewProgressBarModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/parse-hello-world-ast.ts",
    "content": "import { parse } from 'babylon';\nimport generate from '@babel/generator';\nimport babel_traverse from '@babel/traverse';\n\nexport function isLoc(node) {\n  return (\n    node.key.value === 'loc' ||\n    node.key.value === 'start' ||\n    node.key.value === 'end' ||\n    node.key.value === 'extra'\n  );\n}\n\nexport function isType(node) {\n  return node.key.value === 'type';\n}\n\nexport function isBody(node) {\n  return node.key.value === 'body';\n}\n\nexport function removeLoc(path) {\n  if (isLoc(path.node)) {\n    path.remove();\n  }\n}\n\nexport function removeExtra(path) {\n  if (isLoc(path.node)) {\n    path.remove();\n  }\n}\n\nexport function locToMonacoLoc(loc, className) {\n  return {\n    loc: [\n      loc.start.line,\n      loc.start.column + 1,\n      loc.end.line,\n      loc.end.column + 1\n    ],\n    className\n  };\n}\nexport function parseCode(code) {\n  return parse(code);\n}\n\nexport function processCode(code, { remove = [] }: any) {\n  const ast = parse(code, {\n    sourceType: 'module',\n    plugins: ['decorators']\n  });\n\n  babel_traverse(ast, {\n    ObjectProperty(path) {\n      remove.forEach(callback => callback(path));\n    }\n  });\n\n  return generate(ast, {}).code;\n}\n\nexport function findHighlightsObjectProp(code: string, matchers: Array<any>) {\n  const ast = parse(code, {\n    sourceType: 'module',\n    plugins: ['decorators']\n  });\n\n  const highlights = [];\n\n  babel_traverse(ast, {\n    ObjectProperty({ node }) {\n      if (matchers.some(matcher => matcher(node))) {\n        highlights.push(locToMonacoLoc(node.loc, 'loc'));\n      }\n    }\n  });\n  return highlights;\n}\n\nexport function findHighlightsAll(code: string, matcher) {\n  const ast = parse(code, {\n    sourceType: 'module',\n    plugins: ['decorators']\n  });\n\n  const highlights = [];\n\n  babel_traverse(ast, {\n    enter({ node }) {\n      const className = matcher(node);\n      if (className) {\n        highlights.push(locToMonacoLoc(node.loc, className));\n      }\n    }\n  });\n  return highlights;\n}\n\nexport function removeDoubleWhiteLines(code) {\n  return code.replace(/\\n\\n/gi, '\\n');\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/dec-to-bin-with-semicolons.js",
    "content": "function bin6BitsToDec(bin) {\n  switch (bin) {\n    case '000000':\n      return 0;\n    case '000001':\n      return 1;\n    case '000010':\n      return 2;\n    case '000011':\n      return 3;\n    case '000100':\n      return 4;\n    case '000101':\n      return 5;\n    case '000110':\n      return 6;\n    case '000111':\n      return 7;\n    case '001000':\n      return 8;\n    case '001001':\n      return 9;\n    case '001010':\n      return 10;\n    case '001011':\n      return 11;\n    case '001100':\n      return 12;\n    case '001101':\n      return 13;\n    case '001110':\n      return 14;\n    case '001111':\n      return 15;\n    case '010000':\n      return 16;\n    case '010001':\n      return 17;\n    case '010010':\n      return 18;\n    case '010011':\n      return 19;\n    case '010100':\n      return 20;\n    case '010101':\n      return 21;\n    case '010110':\n      return 22;\n    case '010111':\n      return 23;\n    case '011000':\n      return 24;\n    case '011001':\n      return 25;\n    case '011010':\n      return 26;\n    case '011011':\n      return 27;\n    case '011100':\n      return 28;\n    case '011101':\n      return 29;\n    case '011110':\n      return 30;\n    case '011111':\n      return 31;\n    case '100000':\n      return 32;\n    case '100001':\n      return 33;\n    case '100010':\n      return 34;\n    case '100011':\n      return 35;\n    case '100100':\n      return 36;\n    case '100101':\n      return 37;\n    case '100110':\n      return 38;\n    case '100111':\n      return 39;\n    case '101000':\n      return 40;\n    case '101001':\n      return 41;\n    case '101010':\n      return 42;\n    case '101011':\n      return 43;\n    case '101100':\n      return 44;\n    case '101101':\n      return 45;\n    case '101110':\n      return 46;\n    case '101111':\n      return 47;\n    case '110000':\n      return 48;\n    case '110001':\n      return 49;\n    case '110010':\n      return 50;\n    case '110011':\n      return 51;\n    case '110100':\n      return 52;\n    case '110101':\n      return 53;\n    case '110110':\n      return 54;\n    case '110111':\n      return 55;\n    case '111000':\n      return 56;\n    case '111001':\n      return 57;\n    case '111010':\n      return 58;\n    case '111011':\n      return 59;\n    case '111100':\n      return 60;\n    case '111101':\n      return 61;\n    case '111110':\n      return 62;\n    case '111111':\n      return 63;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/dec-to-bin.js",
    "content": "function bin6BitsToDec(bin) {\n  switch (bin) {\n    case '000000':\n      return 0;\n    case '000001':\n      return 1;\n    case '000010':\n      return 2;\n    case '000011':\n      return 3;\n    case '000100':\n      return 4;\n    case '000101':\n      return 5;\n    case '000110':\n      return 6;\n    case '000111':\n      return 7;\n    case '001000':\n      return 8;\n    case '001001':\n      return 9;\n    case '001010':\n      return 10;\n    case '001011':\n      return 11;\n    case '001100':\n      return 12;\n    case '001101':\n      return 13;\n    case '001110':\n      return 14;\n    case '001111':\n      return 15;\n    case '010000':\n      return 16;\n    case '010001':\n      return 17;\n    case '010010':\n      return 18;\n    case '010011':\n      return 19;\n    case '010100':\n      return 20;\n    case '010101':\n      return 21;\n    case '010110':\n      return 22;\n    case '010111':\n      return 23;\n    case '011000':\n      return 24;\n    case '011001':\n      return 25;\n    case '011010':\n      return 26;\n    case '011011':\n      return 27;\n    case '011100':\n      return 28;\n    case '011101':\n      return 29;\n    case '011110':\n      return 30;\n    case '011111':\n      return 31;\n    case '100000':\n      return 32;\n    case '100001':\n      return 33;\n    case '100010':\n      return 34;\n    case '100011':\n      return 35;\n    case '100100':\n      return 36;\n    case '100101':\n      return 37;\n    case '100110':\n      return 38;\n    case '100111':\n      return 39;\n    case '101000':\n      return 40;\n    case '101001':\n      return 41;\n    case '101010':\n      return 42;\n    case '101011':\n      return 43;\n    case '101100':\n      return 44;\n    case '101101':\n      return 45;\n    case '101110':\n      return 46;\n    case '101111':\n      return 47;\n    case '110000':\n      return 48;\n    case '110001':\n      return 49;\n    case '110010':\n      return 50;\n    case '110011':\n      return 51;\n    case '110100':\n      return 52;\n    case '110101':\n      return 53;\n    case '110110':\n      return 54;\n    case '110111':\n      return 55;\n    case '111000':\n      return 56;\n    case '111001':\n      return 57;\n    case '111010':\n      return 58;\n    case '111011':\n      return 59;\n    case '111100':\n      return 60;\n    case '111101':\n      return 61;\n    case '111110':\n      return 62;\n    case '111111':\n      return 63;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/eslint/eslint.js",
    "content": "function findFit(code, { babylon, babelTraverse, babelGenerator, log }) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast);\n\n  log(babelGenerator(ast).code);\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/eslint/eslint.test.js",
    "content": "function testThings(findDebugger, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      title: `describe('test', ()=>{\n  fit('test', ()=>{\n    expect(true).toBe(true);\n  })      \n})`,\n      test(func, args) {\n        let result = func(this.title, args);\n        return result && result.includes && !result.includes('fit');\n      }\n    },\n    {\n      title: `describe('test', ()=>{\n  fit('fits?', ()=>{    \n    let fit = true;\n    expect(fit).toBe(true);    \n  })      \n})`,\n      test(func, args) {\n        let result = func(this.title, args);\n        return (\n          result &&\n          result.includes &&\n          !result.includes('fit(') &&\n          result.includes('let fit')\n        );\n      }\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n        let pass = test.test(findDebugger, args);\n        results.push({ title: test.title, pass: pass });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({ title: test.title, pass: false });\n      }\n    }\n  }\n\n  callback(results);\n}\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/find-console-log-babel.solved.ts",
    "content": "// tslint:ignore\nfunction findConsoleLogSolved(code, { babylon, babelTraverse, log }) {\n  return babylon\n    .parse(code)\n    .program.body.some(node => node.type === 'ConsoleLogStatement');\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/find-console-log-babel.ts",
    "content": "function findConsoleLogBabel(code, { babylon, babelTraverse, log }) {\n  // Find debugger!!\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/find-console-log-regex.solved.js",
    "content": "function findConsoleLog(code) {\n  return code\n    .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*?\"|`[\\s\\S]*`|\\/\\*[\\s\\S]*\\*\\//)\n    .match(/\\bconsole\\s*.log\\(/);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/find-console-log.js",
    "content": "function findConsoleLog(code) {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/find-console-log.test.js",
    "content": "function testThings(findConsoleLog, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      code: `console.log('🐶🐶🐶')`,\n      expected: true\n    },\n    {\n      code: `lolconsole.log()`,\n      expected: false\n    },\n    {\n      code: `// don't use console.log();`,\n      expected: false\n    },\n    {\n      code: `'console.log()'`,\n      expected: false\n    },\n    {\n      code: `'hi'; console.log(123); 'bye'`,\n      expected: true\n    },\n    {\n      code: `console\n      .log()`,\n      expected: true\n    },\n    {\n      code: `'Fake //'; console.log(123); `,\n      expected: true\n    },\n    {\n      code: `\"console.log(123)\"`,\n      expected: false\n    },\n    {\n      code: `\\`\n       console.log(123)\\``,\n      expected: false\n    },\n    {\n      code: `' \\\\' console.log(123)'`,\n      expected: false\n    },\n    {\n      code: `console.lol()`,\n      expected: false\n    },\n    {\n      code: `\"hello\".log()`,\n      expected: false\n    },\n    {\n      code: `/* \\` \n       */ console.log(123); \\`\n        \\` + ''`,\n      expected: true\n    },\n    {\n      code: `function hello() {\n   console.log(123);\n }`,\n      expected: true\n    },\n    {\n      code: `console.log({\n        hello: 123\n      })`,\n      expected: true\n    },\n    {\n      code: `console.log`,\n      expected: false\n    },\n    {\n      code: `hello(console.log)`,\n      expected: false\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n\n        const result = !!findConsoleLog(test.code, args);\n        const pass = result === test.expected;\n\n        results.push({\n          code: test.code,\n          expected: test.expected,\n          result,\n          pass\n        });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({ code: test.code, pass: false });\n      }\n    }\n  }\n\n  callback(results);\n}\n\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/remove-console-log.solved.ts",
    "content": "function removeConsoleLogSolved(\n  code,\n  { babelGenerator, babylon, babelTraverse, types }\n) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast, {\n    MemberExpression(path) {\n      if (\n        types.isIdentifier(path.node.object, { name: 'console' }) &&\n        types.isIdentifier(path.node.property, { name: 'log' }) &&\n        types.isCallExpression(path.parent) &&\n        path.parentKey === 'callee'\n      ) {\n        path.parentPath.remove();\n      }\n    }\n  });\n\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/remove-console-log.test.js",
    "content": "function testThings(findConsoleLog, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      code: `console.log('🐶🐶🐶')`,\n      expected: ''\n    },\n    {\n      code: `lolconsole.log();`,\n      expected: 'lolconsole.log();'\n    },\n    {\n      code: `console.lol();`,\n      expected: `console.lol();`\n    },\n    {\n      code: `// don't use console.log();`,\n      expected: `// don't use console.log();`\n    },\n    {\n      code: `'console.log()';`,\n      expected: `'console.log()';`\n    },\n    {\n      code: `'hi'; console.log(123); 'bye';`,\n      expected: `'hi';\\n'bye';`\n    },\n    {\n      code: `console\n      .log()`,\n      expected: ``\n    },\n    {\n      code: `\"console.log(123)\";`,\n      expected: `\"console.log(123)\";`\n    },\n    {\n      code: `\\`\n       console.log(1234)\\`;`,\n      expected: `\\`\n       console.log(1234)\\`;`\n    },\n    {\n      code: `' \\\\' console.log(123)';`,\n      expected: `' \\\\' console.log(123)';`\n    },\n    {\n      code: `/* \\` \n       */ console.log(123); \\`\n        \\` + '';`,\n      expected: `\\`\n        \\` + ''; /* \\` \n                       */`\n    },\n    {\n      code: `hello(console.log);`,\n      expected: `hello(console.log);`\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n\n        let result = false;\n\n        let error;\n        try {\n          result = findConsoleLog(test.code, args);\n        } catch (e) {\n          error = e;\n        }\n\n        const pass = result === test.expected;\n\n        results.push({\n          code: test.code,\n          expected: test.expected,\n          result,\n          pass,\n          error\n        });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({ code: test.code, pass: false });\n      }\n    }\n  }\n\n  callback(results);\n}\n\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/remove-console-log.ts",
    "content": "function removeConsoleLog(\n  code,\n  { babelGenerator, babylon, babelTraverse, types }\n) {\n  const ast = babylon.parse(code);\n  let hasConsoleLog = false;\n  babelTraverse(ast, {\n    MemberExpression(path) {\n      if (\n        types.isIdentifier(path.node.object, { name: 'console' }) &&\n        types.isIdentifier(path.node.property, { name: 'log' }) &&\n        types.isCallExpression(path.parent) &&\n        path.parentKey === 'callee'\n      ) {\n        hasConsoleLog = true;\n      }\n    }\n  });\n\n  return hasConsoleLog;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/traverse-console-log-babel.solved.ts",
    "content": "function traverseConsoleLogSolved(\n  code,\n  { babylon, babelTraverse, types, log }\n) {\n  const ast = babylon.parse(code);\n  let hasConsoleLog = false;\n  babelTraverse(ast, {\n    MemberExpression(path) {\n      if (\n        path.node.property.type === 'Identifier' &&\n        path.node.property.name === 'log' &&\n        path.node.object.type === 'Identifier' &&\n        path.node.object.name === 'console' &&\n        path.parent.type === 'CallExpression' &&\n        path.key === 'callee'\n      ) {\n        hasConsoleLog = true;\n      }\n    }\n  });\n\n  return hasConsoleLog;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/traverse-console-log-babel.solved2.ts",
    "content": "function traverseConsoleLogSolved2(code, { babylon, babelTraverse, types }) {\n  const ast = babylon.parse(code);\n  let hasConsoleLog = false;\n  babelTraverse(ast, {\n    MemberExpression(path) {\n      if (\n        types.isIdentifier(path.node.object, { name: 'console' }) &&\n        types.isIdentifier(path.node.property, { name: 'log' }) &&\n        types.isCallExpression(path.parent) &&\n        path.parentKey === 'callee'\n      ) {\n        hasConsoleLog = true;\n      }\n    }\n  });\n\n  return hasConsoleLog;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-console-log/traverse-console-log-babel.ts",
    "content": "function traverseConsoleLog(code, { babylon, babelTraverse, log }) {\n  const ast = babylon.parse(code);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/find-debugger-babel.solved.ts",
    "content": "// tslint:ignore\nfunction findDebuggerSolved(code, { babylon, babelTraverse, log }) {\n  return babylon\n    .parse(code)\n    .program.body.some(node => node.type === 'DebuggerStatement');\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/find-debugger-babel.ts",
    "content": "function findDebuggerBabel(code, { babylon, babelTraverse, log }) {\n  // Find debugger!!\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/find-debugger-regex.solved.js",
    "content": "function findDebugger(code) {\n  return code\n    .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*?\"|`[\\s\\S]*`|\\/\\*[\\s\\S]*\\*\\//)\n    .match(/\\bdebugger\\b/);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/find-debugger.js",
    "content": "function findDebugger(code) {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/find-debugger.test.js",
    "content": "function testThings(findDebugger, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      title: `debugger`,\n      shouldPass: true,\n      test(func, args) {\n        return !!func(this.title, args);\n      }\n    },\n    {\n      title: `debuggerStart()`,\n      shouldPass: false,\n      test(func, args) {\n        return !func(this.title, args);\n      }\n    },\n    {\n      title: `//debugger\nconsole.log('hi');`,\n      shouldPass: false,\n      test(func, args) {\n        return !func(this.title, args);\n      }\n    },\n    {\n      title: `'debugger'`,\n      shouldPass: false,\n      test(func, args) {\n        return !func(this.title, args);\n      }\n    },\n    {\n      title: `'hi'; debugger; 'bye'`,\n      shouldPass: true,\n      test(func, args) {\n        return func(this.title, args);\n      }\n    },\n    {\n      title: `'Fake //'; debugger; `,\n      shouldPass: true,\n      test(func, args) {\n        return func(this.title, args);\n      }\n    },\n    {\n      title: `\"debugger\"`,\n      shouldPass: false,\n      test(func, args) {\n        return !func(this.title, args);\n      }\n    },\n    {\n      title: `\\`\n       debugger\\``,\n      shouldPass: false,\n      test(func, args) {\n        return !func(this.title, args);\n      }\n    },\n    {\n      title: `' \\\\' debugger'`,\n      test(func, args) {\n        return !func(this.title, args);\n      },\n      shouldPass: false\n    },\n    {\n      title: `/* \\` \n       */ debugger; \\`\n        \\` + ''`,\n      test(func, args) {\n        return func(this.title, args);\n      }\n    },\n    {\n      title: `function hello(){ debugger; }\n      \n      \n      class Rectangle {\n  constructor(height, width) {\n    this.height = height;\n    this.width = width;\n  }\n}\n`,\n      test(func, args) {\n        return func(this.title, args);\n      }\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n        let pass = test.test(findDebugger, args);\n        results.push({\n          shouldPass: test.shouldPass,\n          title: test.title,\n          pass: pass\n        });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({\n          shouldPass: test.shouldPass,\n          title: test.title,\n          pass: false\n        });\n      }\n    }\n  }\n\n  callback(results);\n}\n\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/hint.js",
    "content": "debugger;\n\nfunction hello() {\n  debugger;\n}\n\n// There\nfunction hello3() {\n  return 'debugger in a string';\n}\n\n// There is no debugger\nfunction hello2() {}\n\n// there's no debugger\nfunction hello3() {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/remove-debugger.solved.ts",
    "content": "function removeDebuggerSolved(\n  code,\n  { babylon, babelTraverse, babelGenerator, log }\n) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast, {\n    DebuggerStatement: node => {\n      node.remove();\n    }\n  });\n\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/remove-debugger.test.js",
    "content": "function testThings(findDebugger, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      title: `debugger`,\n      test(func, args) {\n        return '' === func(this.title, args);\n      }\n    },\n    {\n      title: `debuggerStart();`,\n      test(func, args) {\n        return this.title === func(this.title, args);\n      }\n    },\n    {\n      title: `//debugger\nconsole.log('hi');`,\n      test(func, args) {\n        return this.title === func(this.title, args);\n      }\n    },\n    {\n      title: `'debugger';`,\n      test(func, args) {\n        return this.title === func(this.title, args);\n      }\n    },\n    {\n      title: `'hi'; debugger; 'bye';`,\n      test(func, args) {\n        return (\n          `'hi';\n'bye';` === func(this.title, args)\n        );\n      }\n    },\n    {\n      title: `'Fake //'; debugger; `,\n      test(func, args) {\n        return `'Fake //';` === func(this.title, args);\n      }\n    },\n    {\n      title: `\"debugger\";`,\n      test(func, args) {\n        return this.title === func(this.title, args);\n      }\n    },\n    {\n      title: `\\`\n       debugger\\`;`,\n      test(func, args) {\n        return this.title === func(this.title, args);\n      }\n    },\n    {\n      title: `' \\\\' debugger';`,\n      test(func, args) {\n        return this.title === func(this.title, args);\n      }\n    },\n    {\n      title: `/* \\` \n       */ debugger; \\`\n        \\` + '';`,\n      test(func, args) {\n        return !func(this.title, args).includes('debugger');\n      }\n    },\n    {\n      title: `function hello(){ debugger; }`,\n      test(func, args) {\n        return `function hello() {}` === func(this.title, args);\n      }\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n        let pass = test.test(findDebugger, args);\n        results.push({ title: test.title, pass: pass });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({ title: test.title, pass: false });\n      }\n    }\n  }\n\n  callback(results);\n}\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/remove-debugger.ts",
    "content": "function removeDebugger(code, { babylon, babelTraverse, babelGenerator, log }) {\n  const ast = babylon.parse(code);\n\n  let hasDebugger = false;\n  babelTraverse(ast, {\n    DebuggerStatement: node => {\n      hasDebugger = true;\n    }\n  });\n\n  return hasDebugger;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/traverse-debugger-babel.solved.ts",
    "content": "function traverseDebuggerSolved(code, { babylon, babelTraverse, log }) {\n  const ast = babylon.parse(code);\n\n  let hasCode = false;\n  babelTraverse(ast, {\n    DebuggerStatement: () => {\n      hasCode = true;\n    }\n  });\n  return hasCode;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-debugger/traverse-debugger-babel.ts",
    "content": "function traverseDebugger(code, { babylon, babelTraverse, log }) {\n  const ast = babylon.parse(code);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-fit/find-fit.js",
    "content": "function findFit(code, { babylon, babelTraverse, babelGenerator, log }) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast);\n\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-fit/find-fit.solved.js",
    "content": "function findFit(code, { babylon, babelTraverse, babelGenerator, log }) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast, {\n    Identifier: ({ node, parentPath }) => {\n      if (node.name === 'fit' && parentPath.isCallExpression()) {\n        node.name = 'it';\n      }\n    }\n  });\n\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/find-fit/find-fit.test.js",
    "content": "function testThings(findDebugger, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      title: `describe('test', ()=>{\n  fit('test', ()=>{\n    expect(true).toBe(true);\n  })      \n})`,\n      test(func, args) {\n        let result = func(this.title, args);\n        return result && result.includes && !result.includes('fit');\n      }\n    },\n    {\n      title: `describe('test', ()=>{\n  fit('fits?', ()=>{    \n    let fit = true;\n    expect(fit).toBe(true);    \n  })      \n})`,\n      test(func, args) {\n        let result = func(this.title, args);\n        return (\n          result &&\n          result.includes &&\n          !result.includes('fit(') &&\n          result.includes('let fit')\n        );\n      }\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n        let pass = test.test(findDebugger, args);\n        results.push({ title: test.title, pass: pass });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({ title: test.title, pass: false });\n      }\n    }\n  }\n\n  callback(results);\n}\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/hello-world.json",
    "content": "{\n  \"type\": \"File\",\n  \"start\": 0,\n  \"end\": 8,\n  \"loc\": {\n    \"start\": {\n      \"line\": 1,\n      \"column\": 0\n    },\n    \"end\": {\n      \"line\": 1,\n      \"column\": 8\n    }\n  },\n  \"program\": {\n    \"type\": \"Program\",\n    \"start\": 0,\n    \"end\": 8,\n    \"loc\": {\n      \"start\": {\n        \"line\": 1,\n        \"column\": 0\n      },\n      \"end\": {\n        \"line\": 1,\n        \"column\": 8\n      }\n    },\n    \"sourceType\": \"script\",\n    \"body\": [\n      {\n        \"type\": \"DebuggerStatement\",\n        \"start\": 0,\n        \"end\": 8,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 8\n          }\n        }\n      }\n    ],\n    \"directives\": []\n  },\n  \"comments\": [],\n  \"tokens\": [\n    {\n      \"type\": {\n        \"label\": \"debugger\",\n        \"keyword\": \"debugger\",\n        \"beforeExpr\": false,\n        \"startsExpr\": false,\n        \"rightAssociative\": false,\n        \"isLoop\": false,\n        \"isAssign\": false,\n        \"prefix\": false,\n        \"postfix\": false,\n        \"binop\": null,\n        \"updateContext\": null\n      },\n      \"value\": \"debugger\",\n      \"start\": 0,\n      \"end\": 8,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 0\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 8\n        }\n      }\n    },\n    {\n      \"type\": {\n        \"label\": \"eof\",\n        \"beforeExpr\": false,\n        \"startsExpr\": false,\n        \"rightAssociative\": false,\n        \"isLoop\": false,\n        \"isAssign\": false,\n        \"prefix\": false,\n        \"postfix\": false,\n        \"binop\": null,\n        \"updateContext\": null\n      },\n      \"start\": 8,\n      \"end\": 8,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 8\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 8\n        }\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/it-lines/it-lines.js",
    "content": "function addItByLine(\n  code,\n  line,\n  { babylon, babelTraverse, babelGenerator, log }\n) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast, {\n    Identifier: ({ node, parentPath }) => {\n      if (node.name === 'fit' && parentPath.isCallExpression()) {\n        node.name = 'it';\n      }\n    }\n  });\n\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/it-lines/it-lines.solved.js",
    "content": "function addItByLine(\n  code,\n  line,\n  { babylon, babelTraverse, babelGenerator, log }\n) {\n  const ast = babylon.parse(code);\n\n  babelTraverse(ast, {\n    Identifier: ({ node, parentPath }) => {\n      if (node.name === 'it' && parentPath.isCallExpression()) {\n        if (node.loc.start.line === line) {\n          node.name = 'fit';\n        }\n      }\n    }\n  });\n\n  return babelGenerator(ast).code;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/it-lines/it-lines.test.js",
    "content": "function testThings(findDebugger, callback, args) {\n  const log = args.log;\n  const tests = [\n    {\n      title: `// Line 3\ndescribe('test', ()=>{\nit('test', ()=>{\n    expect(true).toBe(true);\n  })      \n})`,\n      test(func, args) {\n        let result = func(this.title, 3, args);\n        return result && result.includes && result.includes('fit');\n      }\n    },\n\n    {\n      title: `// Line 22\ndescribe('test', ()=>{\n  it('test', ()=>{\n    expect(true).toBe(true);\n  })      \n})`,\n      test(func, args) {\n        let result = func(this.title, 1, args);\n        return result && result.includes && !result.includes('fit');\n      }\n    }\n  ];\n\n  let results = [];\n  let failed = false;\n  for (let i in tests) {\n    if (tests.hasOwnProperty(i)) {\n      let test = tests[i];\n      if (!failed) {\n        const logs = [];\n        args.log = value => {\n          logs.push(value);\n        };\n        let pass = test.test(findDebugger, args);\n        results.push({ title: test.title, pass: pass });\n        if (!pass) {\n          failed = true;\n          logs.map(log);\n        }\n      } else {\n        results.push({ title: test.title, pass: false });\n      }\n    }\n  }\n\n  callback(results);\n}\n/**\n\n return code\n .replace(/\\/\\/.*|'.*?[^\\\\]'|\".*\"|`[\\s\\S]+`/)\n .match(/\\bdebugger\\b/)\n */\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/samples/tricky.js",
    "content": "debugger;\ndebuggerStart();\n//debugger\nconsole.log('hi');\nconsole.log('debugger');\n`'hi'; debugger; 'bye'`;\nlet x = 'Fake //';\n('debugger');\n`\n       debugger\\`\n       ' \\\\' debugger'\n       `;\n/* \\`\n */\ndebugger;\n`\n    \\` + ''`;\nfunction hello() {\n  debugger;\n}\n\nconsole.log(\n  1,\n  function hello() {\n    console.log(function hi() {\n      console.log(123);\n    });\n  },\n  3,\n  4,\n  5,\n  6\n);\n\ncall(1, 2, 3, 4, 5, 5);\ndescribe('test', () => {\n  fit('test', () => {\n    expect(true).toBe(true);\n  });\n});\n\ndescribe('test', () => {\n  fit('fits?', () => {\n    let fit = true;\n    expect(fit).toBe(true);\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/size-picker/size-picker.component.css",
    "content": ".button:hover {\n  background: #444444;\n  color: white;\n}\n\n.button {\n  border: 1px solid #000;\n  border-radius: 50%;\n  height: 1vw;\n  width: 1vw;\n  cursor: pointer;\n  display: inline-block;\n  text-align: center;\n  line-height: 1vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/size-picker/size-picker.component.html",
    "content": "<span class=\"button\" (click)=\"sizeChange.emit(-step)\">-</span> {{ size }}\n<span class=\"button\" (click)=\"sizeChange.emit(+step)\">+</span>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/size-picker/size-picker.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SizePickerComponent } from './size-picker.component';\n\ndescribe('SizePickerComponent', () => {\n  let component: SizePickerComponent;\n  let fixture: ComponentFixture<SizePickerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SizePickerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SizePickerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/size-picker/size-picker.component.ts",
    "content": "import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-size-picker',\n  templateUrl: './size-picker.component.html',\n  styleUrls: ['./size-picker.component.css']\n})\nexport class SizePickerComponent {\n  @Input() size = 28;\n  @Input() step = 2;\n  @Output() sizeChange = new EventEmitter();\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/size-picker/size-picker.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { SizePickerComponent } from './size-picker.component';\n\n@NgModule({\n  declarations: [SizePickerComponent],\n  exports: [SizePickerComponent]\n})\nexport class SizePickerModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/babel-test-runner/babel-test-runner.component.css",
    "content": ":host {\n  height: 100%;\n  display: flex;\n}\n\n.runner {\n  display: none;\n}\n\n.test {\n  margin-bottom: 5px;\n  background: #ff9a86;\n  padding: 5px 10px;\n  font-size: 3vw;\n}\n\n.test.pass {\n  background: #b2ff37;\n}\n\n.mini {\n  font-size: 30%;\n  display: block;\n}\n\npre {\n  margin: 0;\n}\n\n.test.future.future {\n  background: #e8e8e8;\n  color: #ddd;\n}\n\n.wrapper {\n  display: flex;\n  height: 100%;\n}\n\n.test-point:hover {\n  border: 3px black solid;\n}\n\n.test-point {\n  width: 32px;\n  height: 32px;\n  border-radius: 50%;\n  display: inline-block;\n  margin-left: 5px;\n  background: #999999;\n}\n\n.test-point.pass {\n  background: #b2ff37;\n  border: 1px solid #444444;\n}\n\n.test-point.current {\n  background: #ff9a86;\n  border: 1px solid #444444;\n}\n\ncode.failing {\n  color: #ff4e3d;\n}\n\ncode {\n  font-size: 3vw;\n  margin-top: 4px;\n  display: block;\n  margin-bottom: 24px;\n}\n\nmat-card {\n  width: 100%;\n  height: 100%;\n}\n\n.label {\n  color: #444;\n  font-size: 1.5vw;\n}\n\n.summary .label {\n  margin-bottom: 12px;\n}\n\n.summary {\n  padding-bottom: 24px;\n}\n\n.results {\n  padding-top: 24px;\n}\n\n.ast-full {\n  background: #ffffff;\n  position: fixed;\n  left: 0;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  padding: 20px;\n}\n\nkirjs-size-picker {\n  margin-left: 20px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/babel-test-runner/babel-test-runner.component.html",
    "content": "<div *ngIf=\"logs.length\">\n  <div *ngFor=\"let log of logs\">\n    <pre>{{ log | json }}</pre>\n    <hr />\n  </div>\n</div>\n\n<mat-card>\n  <div class=\"summary\">\n    <div class=\"label\">Running {{ tests.length }} tests.</div>\n    <div>\n      <div\n        *ngFor=\"let test of tests; let i = index\"\n        [class.pass]=\"test.pass\"\n        [class.test-point]=\"true\"\n        [class.compeleted]=\"i < firstFailingIndex()\"\n        [class.current]=\"test === firstFailing\"\n        [class.future]=\"i > firstFailingIndex()\"\n        (mouseenter)=\"displayedTest = test\"\n        (mouseout)=\"displayedTest = null\"\n      ></div>\n    </div>\n  </div>\n  <hr />\n  <div class=\"results\" *ngIf=\"displayedTest || firstFailing as test\">\n    <ng-container *ngIf=\"test.error\">\n      <div class=\"label\">For the code:</div>\n      <code class=\"failing\">{{ test.error }}</code>\n    </ng-container>\n    <ng-container *ngIf=\"!test.error\">\n      <div class=\"label\">For the code:</div>\n      <pre><code>{{test.code.trim()}}</code></pre>\n      <div class=\"label\">Expected:</div>\n      <code> {{ test.expected | json }} </code>\n      <div class=\"label\">Actual:</div>\n      <code class=\"failing\"> {{ test.result | json }} </code>\n    </ng-container>\n    <ng-container *ngIf=\"showAst\">\n      <div class=\"label\">AST:</div>\n      <div class=\"ast\" (click)=\"showFull = true\">\n        <kirjs-ast-preview-runner\n          [code]=\"test.code.trim()\"\n        ></kirjs-ast-preview-runner>\n      </div>\n\n      <div class=\"ast-full\" *ngIf=\"showFull\">\n        <span style=\"float: right\" (click)=\"showFull = false\">╳</span>\n        <pre><code>{{test.code.trim()}}</code></pre>\n        <kirjs-size-picker\n          (sizeChange)=\"scale = scale + $event\"\n          [step]=\"1\"\n          [size]=\"scale\"\n        ></kirjs-size-picker>\n        <kirjs-ast-preview-runner\n          [style.zoom]=\"scale / 10\"\n          [code]=\"test.code.trim()\"\n        ></kirjs-ast-preview-runner>\n      </div>\n    </ng-container>\n  </div>\n\n  <div *ngIf=\"!firstFailing\"><ng-content></ng-content></div>\n</mat-card>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/babel-test-runner/babel-test-runner.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\nimport * as babylon from 'babylon';\nimport * as types from 'babel-types';\nimport babelTraverse from '@babel/traverse';\nimport babelGenerator from '@babel/generator';\nimport { TestInfo } from '../../../../../../../codelab/src/app/shared/interfaces/test-info';\n\ndeclare const require;\n\n@Component({\n  selector: 'kirjs-babel-test-runner',\n  templateUrl: './babel-test-runner.component.html',\n  styleUrls: ['./babel-test-runner.component.css']\n})\nexport class BabelTestRunnerComponent {\n  tests: Array<TestInfo> = [];\n  logs = [];\n  @Input() files: any[];\n  @Input() showAst = false;\n  scale = 10;\n  showFull = false;\n  firstFailing: TestInfo;\n  displayedTest: TestInfo;\n\n  run(files: Array<any>) {\n    this.logs = [];\n    const args = {\n      babylon,\n      babelTraverse,\n      babelGenerator,\n      types,\n      log: value => {\n        this.logs.push(value);\n      }\n    };\n    const callback = result => {\n      if (result) {\n        this.tests = result;\n        this.firstFailing = this.tests.find(test => !test.pass);\n      }\n    };\n\n    try {\n      // tslint:disable\n      const func = eval('(' + files[0].code + ')');\n      eval('(' + files[1].code + ')')(func, callback, args);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  firstFailingIndex() {\n    const firstFailing = this.tests.findIndex(i => !i.pass);\n    return firstFailing === -1 ? this.tests.length : firstFailing;\n  }\n\n  runTests() {\n    this.run(this.files);\n  }\n\n  ngOnInit() {\n    this.runTests();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/test-set.component.css",
    "content": ".show-solution .icon {\n  visibility: hidden;\n}\n\n.show-solution:hover .icon {\n  visibility: visible;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/test-set.component.html",
    "content": "<div style=\"display: flex;\">\n  <code-demo-editor\n    [(ngModel)]=\"files[0].code\"\n    (ngModelChange)=\"runner.runTests()\"\n    [lineNumbers]=\"false\"\n    [fontSize]=\"fontSize\"\n    language=\"javascript\"\n    style=\"height: 100vh;width: 55vw;\"\n  ></code-demo-editor>\n  <div\n    (click)=\"files[0].code = files[0].solution; runner.runTests()\"\n    class=\"show-solution\"\n  >\n    <div class=\"icon\">🙀</div>\n  </div>\n  <kirjs-babel-test-runner\n    #runner\n    class=\"tests\"\n    [showAst]=\"showAst\"\n    [files]=\"files\"\n  >\n    <ng-content></ng-content>\n  </kirjs-babel-test-runner>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/test-set.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TestSetComponent } from './test-set.component';\n\ndescribe('TestSetComponent', () => {\n  let component: TestSetComponent;\n  let fixture: ComponentFixture<TestSetComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TestSetComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TestSetComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/ast/test-set/test-set.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-test-set',\n  templateUrl: './test-set.component.html',\n  styleUrls: ['./test-set.component.css']\n})\nexport class TestSetComponent {\n  @Input() files = [];\n  @Input() fontSize = 30;\n  @Input() showAst = false;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/angular-flags/angular-flags.component.css",
    "content": ".flags {\n  font-size: 2vw;\n  white-space: pre-wrap;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/angular-flags/angular-flags.component.html",
    "content": "<div class=\"flags\" style=\"display: flex;\">\n  <div>\n    <div *ngFor=\"let flag of flags; let i = index\">\n      <input\n        type=\"checkbox\"\n        [checked]=\"flag.checked\"\n        #c\n        (click)=\"handleClick(c.checked, flag.value)\"\n      />\n      {{ flag.name }} = {{ flag.value }}\n    </div>\n  </div>\n  <div>\n    <h2>{{ number }}</h2>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/angular-flags/angular-flags.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { AngularFlagsComponent } from './angular-flags.component';\n\ndescribe('AngularFlagsComponent', () => {\n  let component: AngularFlagsComponent;\n  let fixture: ComponentFixture<AngularFlagsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [AngularFlagsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(AngularFlagsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/angular-flags/angular-flags.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-angular-flags',\n  templateUrl: './angular-flags.component.html',\n  styleUrls: ['./angular-flags.component.css']\n})\nexport class AngularFlagsComponent implements OnInit {\n  number = 124;\n  flags = [\n    { checked: false, name: 'None', value: 0 },\n    { checked: false, name: 'TypeElement', value: 1 },\n    { checked: false, name: 'TypeText', value: 2 },\n    { checked: false, name: 'ProjectedTemplate', value: 4 },\n    { checked: false, name: 'CatRenderNode', value: 3 },\n    { checked: false, name: 'TypeNgContent', value: 8 },\n    { checked: false, name: 'TypePipe', value: 16 },\n    { checked: false, name: 'TypePureArray', value: 32 },\n    { checked: false, name: 'TypePureObject', value: 64 },\n    { checked: false, name: 'TypePurePipe', value: 128 },\n    { checked: false, name: 'CatPureExpression', value: 224 },\n    { checked: false, name: 'TypeValueProvider', value: 256 },\n    { checked: false, name: 'TypeClassProvider', value: 512 },\n    { checked: false, name: 'TypeFactoryProvider', value: 1024 },\n    { checked: false, name: 'TypeUseExistingProvider', value: 2048 },\n    { checked: false, name: 'LazyProvider', value: 4096 },\n    { checked: false, name: 'PrivateProvider', value: 8192 },\n    { checked: false, name: 'TypeDirective', value: 16384 },\n    { checked: false, name: 'Component', value: 32768 },\n    { checked: false, name: 'CatProviderNoDirective', value: 3840 },\n    { checked: false, name: 'CatProvider', value: 20224 },\n    { checked: false, name: 'OnInit', value: 65536 },\n    { checked: false, name: 'OnDestroy', value: 131072 },\n    { checked: false, name: 'DoCheck', value: 262144 },\n    { checked: false, name: 'OnChanges', value: 524288 },\n    { checked: false, name: 'AfterContentInit', value: 1048576 },\n    { checked: false, name: 'AfterContentChecked', value: 2097152 },\n    { checked: false, name: 'AfterViewInit', value: 4194304 },\n    { checked: false, name: 'AfterViewChecked', value: 8388608 },\n    { checked: false, name: 'EmbeddedViews', value: 16777216 },\n    { checked: false, name: 'ComponentView', value: 33554432 },\n    { checked: false, name: 'TypeContentQuery', value: 67108864 },\n    { checked: false, name: 'TypeViewQuery', value: 134217728 },\n    { checked: false, name: 'StaticQuery', value: 268435456 },\n    { checked: false, name: 'DynamicQuery', value: 536870912 },\n    { checked: false, name: 'TypeModuleProvider', value: 1073741824 },\n    { checked: false, name: 'CatQuery', value: 201326592 },\n    { checked: false, name: 'Types', value: 201347067 }\n  ];\n\n  checked: string[];\n\n  constructor() {\n    this.syncCheckBoxes();\n  }\n\n  syncCheckBoxes() {\n    this.flags.forEach(f => (f.checked = !!(this.number & f.value)));\n  }\n\n  ngOnInit() {}\n\n  handleClick(checked: boolean, value: number) {\n    this.number = this.number | value;\n    this.syncCheckBoxes();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/ascii/ascii.component.css",
    "content": ".parent {\n  display: grid;\n  grid-template-columns: repeat(12, 1fr);\n}\n\n.item {\n  background: #fff;\n  border-right: 1px #444 dotted;\n  border-bottom: 1px #444 dotted;\n  padding: 0.5vw;\n  display: flex;\n  justify-content: space-between;\n}\n\n.key {\n  vertical-align: top;\n  font-size: 2vw;\n  color: #666;\n}\n\n.value {\n  font-size: 3.5vw;\n}\n\nselect {\n  border: 1px #444 solid;\n  background: #ffffff;\n  font-size: 3vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/ascii/ascii.component.html",
    "content": "<h2>\n  Display character table for:\n  <select [(ngModel)]=\"encoding\">\n    <option *ngFor=\"let e of encodings\" [ngValue]=\"e\">{{ e.key }}</option>\n  </select>\n</h2>\n\n<div class=\"parent\">\n  <ng-container class=\"item\" *ngFor=\"let item of encoding.value\">\n    <div class=\"item\">\n      <span class=\"key\">{{ item.key }}</span>\n      <span class=\"value\">{{ item.value }}</span>\n    </div>\n  </ng-container>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/ascii/ascii.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { AsciiComponent } from './ascii.component';\n\ndescribe('AsciiComponent', () => {\n  let component: AsciiComponent;\n  let fixture: ComponentFixture<AsciiComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [AsciiComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(AsciiComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/ascii/ascii.component.ts",
    "content": "import {\n  Component,\n  Input,\n  OnChanges,\n  OnInit,\n  SimpleChanges\n} from '@angular/core';\n\nfunction encode(from: number, to: number, encoding: string) {\n  return new TextDecoder(encoding)\n    .decode(new Uint8Array(to - from).map((a, i) => i + from).buffer as any)\n    .split('')\n    .map((value, i) => ({\n      key: i + from,\n      value\n    }));\n}\n\nconst layouts = {};\n\n@Component({\n  selector: 'kirjs-ascii',\n  templateUrl: './ascii.component.html',\n  styleUrls: ['./ascii.component.css']\n})\nexport class AsciiComponent implements OnChanges {\n  @Input() param: string;\n\n  encodings = [\n    {\n      key: 'ascii',\n      value: encode(33, 128, 'ascii')\n    },\n    {\n      key: 'ascii - Page 2',\n      value: encode(128, 255, 'ascii')\n    },\n    {\n      key: 'windows-1251',\n      value: encode(128, 255, 'windows-1251')\n    },\n    {\n      key: 'KOI8-R',\n      value: encode(128, 255, 'KOI8-R')\n    },\n    {\n      key: 'utf-8',\n      value: encode(1000, 1255, 'utf-16')\n    }\n  ];\n\n  encoding = this.encodings[0];\n\n  constructor() {\n    // d = new TextDecoder('windows-125').decode(new Uint8Array(255).map((a,i)=>i).buffer)\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('param' in changes) {\n      this.encoding = this.encodings.find(a => a.key === this.param);\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-flat/binary-flat.component.css",
    "content": ".wrapper {\n  word-break: break-all;\n  padding: 40px;\n}\n\n.binary {\n  letter-spacing: 2vw;\n}\n\n.item,\n.detail-item {\n  font-size: 3vw;\n}\n\n.item-1 {\n  background: #eee;\n}\n\n.detail-item {\n  padding: 20px;\n}\n\n.detail {\n  width: 60%;\n  word-break: break-all;\n}\n\n.field-header {\n  font-size: 2vw;\n}\n\n.raw-value {\n  width: 40%;\n  font-size: 2vw;\n  word-break: break-all;\n  padding-right: 1vw;\n  margin-right: 1vw;\n  border-right: 1px #444 solid;\n}\n\nbutton {\n  display: block;\n  width: 100%;\n  background: #e51400;\n  color: #fff;\n  padding: 1vw;\n  font-size: 4vw;\n}\n\nh3 {\n  font-size: 2vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-flat/binary-flat.component.html",
    "content": "<div class=\"wrapper\">\n  <ng-container *ngFor=\"let item of structure; let i = index\">\n    <span *ngIf=\"detailIndex <= i\" class=\"item item-{{ i % 2 }} binary\">{{\n      item.rawValue\n    }}</span>\n    <div\n      [style.margin-left.vw]=\"item.nesting * 1\"\n      *ngIf=\"detailIndex > i\"\n      class=\"detail-item item-{{ i % 2 }}\"\n      style=\"display: flex\"\n    >\n      <div\n        class=\"raw-value\"\n        contenteditable=\"true\"\n        (keydown.enter)=\"update($event, item)\"\n      >\n        {{ item.rawValue }}\n      </div>\n      <div class=\"detail\">\n        <div class=\"field-header\">\n          <div style=\"float: right\">{{ item.type }}</div>\n          <div>{{ item.name }}</div>\n        </div>\n        <h3>{{ item.value }}</h3>\n      </div>\n    </div>\n    <button\n      (click)=\"detailIndex = detailIndex + 1\"\n      *ngIf=\"detailIndex - 1 === i\"\n    >\n      Next\n    </button>\n  </ng-container>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-flat/binary-flat.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryFlatComponent } from './binary-flat.component';\n\ndescribe('BinaryFlatComponent', () => {\n  let component: BinaryFlatComponent;\n  let fixture: ComponentFixture<BinaryFlatComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryFlatComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryFlatComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-flat/binary-flat.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { BinaryParser } from '../parser/binary-parser';\nimport { StringBinaryReader } from '../parser/readers/string-reader';\nimport { BinaryParentComponent } from '../binary-view/binary-parent/binary-parent.component';\n\nexport function flatten(\n  structure: any[],\n  nesting = 0,\n  parent = null,\n  path = []\n) {\n  return structure.reduce((result, item) => {\n    if (item.type === 'object' || item.type === 'array') {\n      item.data = false;\n      item.nesting = nesting;\n      item.className = 'tbd';\n      result = result\n        .concat(item)\n        .concat(\n          flatten(\n            item.value,\n            nesting + 1,\n            item,\n            item.name ? [...path, item.name] : [...path]\n          )\n        );\n    } else {\n      item.data = true;\n      item.nesting = nesting;\n      item.parent = parent || item;\n      item.root = item.parent.root || item.parent;\n      item.path = path;\n      item.className = path.map(p => 'parent-' + p).join(' ');\n      result.push(item);\n    }\n    return result;\n  }, []);\n}\n\n@Component({\n  selector: 'kirjs-binary-flat',\n  templateUrl: './binary-flat.component.html',\n  styleUrls: ['./binary-flat.component.css']\n})\nexport class BinaryFlatComponent implements OnChanges {\n  @Input() parser: BinaryParser;\n  @Input() binary: string;\n  @Output() updateBinary = new EventEmitter();\n\n  detailIndex = 30;\n  structure: { start: number };\n\n  constructor(private readonly root: BinaryParentComponent) {}\n\n  update(event, item) {\n    this.root.update(item, event.target.textContent);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('binary' in changes) {\n      this.structure = flatten(\n        this.parser.readOrdered(new StringBinaryReader(this.binary)).value\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-gif/binary-gif.component.css",
    "content": "img {\n  image-rendering: pixelated !important;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-gif/binary-gif.component.html",
    "content": "<img [src]=\"gif\" style=\"width:100%\" />\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-gif/binary-gif.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryGifComponent } from './binary-gif.component';\n\ndescribe('BinaryGifComponent', () => {\n  let component: BinaryGifComponent;\n  let fixture: ComponentFixture<BinaryGifComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryGifComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryGifComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-gif/binary-gif.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-binary-gif',\n  templateUrl: './binary-gif.component.html',\n  styleUrls: ['./binary-gif.component.css']\n})\nexport class BinaryGifComponent {\n  gif: string;\n\n  @Input()\n  set binary(binary: string) {\n    const binaries = binary.match(/.{8}/g);\n    const recombined = new Uint8Array(binaries.map(a => parseInt(a, 2)));\n    const b64encoded = btoa(\n      Array.from(recombined)\n        .map(a => String.fromCharCode(a))\n        .join('')\n    );\n    this.gif = 'data:image/gif;base64,' + b64encoded;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-display/binary-display.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-display/binary-display.component.html",
    "content": "<div *ngFor=\"let bin of binaries\">{{ bin }}</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-display/binary-display.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryDisplayComponent } from './binary-display.component';\n\ndescribe('BinaryDisplayComponent', () => {\n  let component: BinaryDisplayComponent;\n  let fixture: ComponentFixture<BinaryDisplayComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryDisplayComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryDisplayComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-display/binary-display.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-binary-display',\n  templateUrl: './binary-display.component.html',\n  styleUrls: ['./binary-display.component.css']\n})\nexport class BinaryDisplayComponent {\n  binaries = [];\n\n  @Input() set binary(binary: string) {\n    this.binaries = binary.match(/.{8}/g);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-inline.component.css",
    "content": ".wrapper {\n  display: grid;\n  grid-template-columns: 200px 100px 100%;\n  font-size: 20px;\n}\n\n.bin-block {\n  word-break: break-all;\n}\n\n[name='section-type'] {\n  font-size: 30px;\n  font-weight: 300;\n}\n\n.cell {\n  padding: 10px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-inline.component.html",
    "content": "<div class=\"wrapper\">\n  <ng-container *ngFor=\"let item of structure; let i = index\">\n    <ng-container *ngIf=\"item.data\">\n      <div\n        class=\"{{ item.type }} {{ item.className }} bin-block cell\"\n        [attr.name]=\"item.name\"\n        contenteditable=\"true\"\n      >\n        <kirjs-binary-display [binary]=\"item.rawValue\"></kirjs-binary-display>\n      </div>\n\n      <div\n        class=\"{{ item.type }} {{ item.className }} value cell\"\n        style=\"display: inline;\"\n        [attr.name]=\"item.name\"\n        contenteditable=\"true\"\n      >\n        {{ item.displayValue || item.value }}\n      </div>\n      <div class=\"cell\" [attr.name]=\"item.name\">\n        <div class=\"meta\">\n          <div>\n            {{ item.name }}\n          </div>\n          <div *ngIf=\"item.description\">\n            <span class=\"label\">description:</span\n            ><span>{{ item.description }}</span>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n  </ng-container>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-inline.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryInlineComponent } from './binary-inline.component';\n\ndescribe('BinaryInlineComponent', () => {\n  let component: BinaryInlineComponent;\n  let fixture: ComponentFixture<BinaryInlineComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryInlineComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryInlineComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-inline.component.ts",
    "content": "import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { flatten } from '../binary-flat/binary-flat.component';\nimport { StringBinaryReader } from '../parser/readers/string-reader';\nimport { BinaryParser } from '../parser/binary-parser';\n\n@Component({\n  selector: 'kirjs-binary-inline',\n  templateUrl: './binary-inline.component.html',\n  styleUrls: ['./binary-inline.component.css']\n})\nexport class BinaryInlineComponent implements OnChanges {\n  @Input() filterClassName = /./;\n  @Input() parser: BinaryParser;\n  @Input() binary: string;\n\n  structure: any[];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('binary' in changes) {\n      try {\n        this.structure = flatten(\n          this.parser.readOrdered(new StringBinaryReader(this.binary)).value\n        ).filter(a => a.className.match(this.filterClassName));\n      } catch (e) {\n        console.log(e);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-inline/binary-inline.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BinaryInlineComponent } from './binary-inline.component';\nimport { BinaryDisplayComponent } from './binary-display/binary-display.component';\n\n@NgModule({\n  declarations: [BinaryInlineComponent, BinaryDisplayComponent],\n  exports: [BinaryInlineComponent],\n  imports: [CommonModule]\n})\nexport class BinaryInlineModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-parser-demo/binary-parser-demo.component.css",
    "content": ".error::before {\n  color: #e51400;\n  content: '🙀';\n}\n\n.error {\n  color: #e51400;\n  border: 1px #e51400 solid;\n  border-radius: 12px;\n  font-size: 3vw;\n  padding: 2vw;\n  display: block;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-parser-demo/binary-parser-demo.component.html",
    "content": "<div style=\"display: flex;\">\n  <div>\n    <div style=\"display: flex;padding: 0 1vw\">\n      <div\n        style=\"padding: 1vw;\"\n        *ngFor=\"let helper of helpers; let i = index\"\n        class=\"helper\"\n        (click)=\"code = helper\"\n      >\n        {{ i }}\n      </div>\n    </div>\n    <code-demo-editor\n      [fontSize]=\"40\"\n      [lineNumbers]=\"false\"\n      [(ngModel)]=\"code\"\n      style=\"width:50vw; height: 100vh;flex: none\"\n      language=\"javascript\"\n      (ngModelChange)=\"generateCode()\"\n    ></code-demo-editor>\n  </div>\n  <div>\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binary = $event; generateCode()\"\n      [mini]=\"true\"\n      [showPopups]=\"true\"\n      [preview]=\"false\"\n      [binary]=\"binary\"\n      [filterClassName]=\"filterClassName\"\n      [highlightedMap]=\"{\n        boolean: true,\n        number: true,\n        hex: true,\n        string: true\n      }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n    <code class=\"output error\" *ngIf=\"error\">{{ error }}</code>\n    <code-demo-editor\n      [fontSize]=\"40\"\n      language=\"json\"\n      [lineNumbers]=\"false\"\n      [(ngModel)]=\"result\"\n      style=\"width:50vw; height: 100vh;flex: none\"\n    ></code-demo-editor>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-parser-demo/binary-parser-demo.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryParserDemoComponent } from './binary-parser-demo.component';\n\ndescribe('BinaryParserDemoComponent', () => {\n  let component: BinaryParserDemoComponent;\n  let fixture: ComponentFixture<BinaryParserDemoComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryParserDemoComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryParserDemoComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-parser-demo/binary-parser-demo.component.ts",
    "content": "import { Component, EventEmitter, Input, OnInit } from '@angular/core';\nimport { Parser } from 'binary-parser';\nimport { Buffer } from 'buffer';\nimport { bin2hex } from '../shared';\n\n(window as any).Buffer = Buffer;\n\n@Component({\n  selector: 'kirjs-binary-parser-demo',\n  templateUrl: './binary-parser-demo.component.html',\n  styleUrls: ['./binary-parser-demo.component.css']\n})\nexport class BinaryParserDemoComponent implements OnInit {\n  @Input() helpers;\n  code = '';\n\n  @Input() filterClassName = /./;\n  result = '';\n  @Input() binary = '';\n  error = '';\n  onCodeChange = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {\n    this.code = this.helpers[0];\n    this.generateCode();\n  }\n\n  generateCode() {\n    this.onCodeChange.emit(this.code);\n    this.error = '';\n    try {\n      const parser = new Function(\n        'Parser',\n        'const parser = ' + this.code + '; return parser;'\n      )(Parser);\n      this.result = JSON.stringify(\n        parser.parse(Buffer.from(bin2hex(this.binary), 'hex')),\n        null,\n        '  '\n      );\n    } catch (e) {\n      this.error = e.message;\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-plain/binary-plain.component.css",
    "content": ".wrapper {\n  display: flex;\n  flex-direction: column;\n}\n\nbutton {\n  font-size: inherit;\n}\n\n.legend {\n  width: 200px;\n  font-size: 2vw;\n  padding: 3vw 0;\n  display: flex;\n}\n\n.legend .item {\n  margin-right: 10px;\n  background: #dddddd;\n  border-radius: 4px;\n  padding: 0.5vw 1vw;\n}\n\n.enums .enums {\n  background: #ff3302;\n  color: black;\n}\n\n.string .string {\n  background: #ffaf00;\n  color: black;\n}\n\n.const .const {\n  background: #aaaaaa;\n  color: black;\n}\n\n.number .number {\n  background: #00ff51;\n  color: black;\n}\n\n.hex .color,\n.hex .hex {\n  background: #00a4ff;\n  color: black;\n}\n\n.boolean .boolean {\n  background: #f600ff;\n  color: black;\n}\n\n.binary {\n  white-space: normal;\n  font-size: 3vw;\n  word-break: break-all;\n  padding-right: 3vw;\n}\n\n.spacing .binary {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.spacing .bin-block {\n  margin-right: 4vw;\n  white-space: nowrap;\n}\n\n.groups .parent-palette {\n  background: #00ff51;\n}\n\n.groups .parent-header {\n  background: #ffaf00;\n}\n\n.groups .parent-extensions {\n  background: #00a4ff;\n}\n\n.spacing {\n  line-height: 50px;\n}\n\n.mini .legend {\n  font-size: 1.2vw;\n  padding: 0;\n}\n\n.mini .legend .item {\n  padding: 0.2vw;\n  height: 2vw;\n}\n\n.mini input[type='checkbox'] {\n  zoom: 2 !important;\n}\n\n.mini .spacing {\n  line-height: 2vw;\n}\n\n.item-header:first-child {\n  margin-top: 0;\n}\n\n.item-header {\n  width: 100%;\n  font-size: 5vw;\n  display: block;\n  margin-bottom: 2vw;\n  margin-top: 4vw;\n}\n\n.selected {\n  width: 100%;\n  border: 1px #ddd solid;\n  padding: 1vw;\n}\n\n.label {\n  display: inline-block;\n  width: 24vw;\n  flex-shrink: 0;\n}\n\n.meta {\n  margin-top: 2vw;\n  margin-bottom: 1vw;\n}\n\n.selected .bin-block {\n  font-size: 4vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-plain/binary-plain.component.html",
    "content": "<div\n  class=\"wrapper\"\n  [class.groups]=\"highlightGroups\"\n  [class.mini]=\"mini\"\n  [class.spacing]=\"spacing\"\n>\n  <div [class]=\"highlighted\">\n    <div class=\"legend\">\n      <button\n        class=\"item {{ type }}\"\n        (click)=\"highlightedMap[type] = !highlightedMap[type]\"\n        *ngFor=\"let type of types\"\n      >\n        {{ type }}\n      </button>\n      <label style=\"display: flex;margin-left: 3vw;\">\n        <span class=\"spacing\">Spacing</span>\n        <input style=\"zoom:3\" type=\"checkbox\" [(ngModel)]=\"spacing\" />\n      </label>\n    </div>\n\n    <div class=\"binary\">\n      <ng-container *ngFor=\"let item of structure; let i = index\">\n        <div\n          *ngIf=\"!item.data && item.nesting === 1 && spacing\"\n          class=\"item-header\"\n        >\n          {{ item.name }}\n        </div>\n        <span\n          *ngIf=\"item.data\"\n          class=\"{{ item.type }} {{ item.className }} bin-block\"\n          style=\"display: inline;\"\n          (click)=\"show[i] = !show[i]\"\n          [attr.name]=\"item.name\"\n          (keydown.enter)=\"update(item, $event.target.innerText)\"\n          contenteditable=\"true\"\n          >{{ item.rawValue }}\n          <!--          TODO(kirjs): This is hack, remove-->\n          <span *ngIf=\"item.name === 'section-type'\">\n            - {{ hackHack[item.value] }}</span\n          >\n        </span>\n\n        <div\n          [class.selected]=\"show[i]\"\n          *ngIf=\"item.data && show[i]\"\n          style=\"display: inline;word-break: break-all\"\n        >\n          <div style=\"display: flex;justify-content: space-between;\">\n            <div\n              class=\"{{ item.type }} {{ item.className }} bin-block\"\n              (click)=\"show[i] = true\"\n              [attr.name]=\"item.name\"\n              (keydown.enter)=\"update(item, $event.target.innerText)\"\n              contenteditable=\"true\"\n            >\n              {{ item.rawValue }}\n            </div>\n            <button\n              style=\"border: 0 solid;\n              line-height: 2vw;cursor: pointer;\"\n              (click)=\"show[i] = false\"\n              *ngIf=\"show[i]\"\n            >\n              &times;\n            </button>\n          </div>\n          <div *ngIf=\"show[i]\" class=\"meta\">\n            <div>\n              <span class=\"label\">value:</span><span>{{ item.value }}</span>\n            </div>\n            <div>\n              <span class=\"label\">name:</span><span>{{ item.name }}</span>\n            </div>\n            <div style=\"display: flex;\">\n              <span class=\"label\">description:</span\n              ><span>{{ item.description }}</span>\n            </div>\n          </div>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-plain/binary-plain.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryPlainComponent } from './binary-plain.component';\n\ndescribe('BinaryPlainComponent', () => {\n  let component: BinaryPlainComponent;\n  let fixture: ComponentFixture<BinaryPlainComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryPlainComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryPlainComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-plain/binary-plain.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output\n} from '@angular/core';\nimport { BinaryParser } from '../parser/binary-parser';\nimport { StringBinaryReader } from '../parser/readers/string-reader';\nimport { flatten } from '../binary-flat/binary-flat.component';\n\n@Component({\n  selector: 'kirjs-binary-plain',\n  templateUrl: './binary-plain.component.html',\n  styleUrls: ['./binary-plain.component.css']\n})\nexport class BinaryPlainComponent implements OnChanges {\n  @Output() updateChunk = new EventEmitter();\n  @Input() parser: BinaryParser;\n  @Input() highlightGroups = false;\n  @Input() filterClassName = /./;\n  @Input() mini = false;\n  @Input() showPopups = false;\n  hackHack = {\n    0x01: 'Types',\n    0x02: 'Import',\n    0x03: 'Function',\n    0x05: 'Table',\n    0x07: 'Export',\n    0x08: 'Start',\n    0x0a: 'Code'\n  };\n  show = [];\n  types = ['boolean', 'number', 'hex', 'string', 'const', 'enums'];\n  @Input()\n  spacing = false;\n  @Input()\n  highlightedMap = this.types.reduce((r, v) => {\n    r[v] = false;\n    return r;\n  }, {});\n  structure: any[];\n  @Input() binary: string;\n\n  get highlighted() {\n    return Object.keys(this.highlightedMap)\n      .filter(key => this.highlightedMap[key])\n      .join(' ');\n  }\n\n  ngOnChanges() {\n    if (this.binary && this.parser) {\n      try {\n        this.structure = flatten(\n          this.parser.readOrdered(new StringBinaryReader(this.binary)).value\n        ).filter(a => a.className.match(this.filterClassName));\n      } catch (e) {\n        console.log(e);\n      }\n    }\n  }\n\n  update(chunk: any, value: any) {\n    this.updateChunk.emit({ chunk, value });\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/array/array.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/array/array.component.html",
    "content": "<span\n  class=\"block\"\n  [class.show-meta]=\"showMeta\"\n  *ngFor=\"let item of data.value; trackBy: trackBy\"\n>\n  <span class=\"name\">{{ item.name }}</span>\n  <kirjs-block\n    [showMeta]=\"showMeta\"\n    [class]=\"item.name\"\n    [data]=\"item\"\n  ></kirjs-block>\n</span>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/array/array.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ArrayComponent } from './array.component';\n\ndescribe('ArrayComponent', () => {\n  let component: ArrayComponent;\n  let fixture: ComponentFixture<ArrayComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ArrayComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ArrayComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/array/array.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-array',\n  templateUrl: './array.component.html',\n  styleUrls: ['./array.component.css']\n})\nexport class ArrayComponent implements OnInit {\n  @Input() data;\n  @Input() showMeta: boolean;\n\n  constructor() {}\n\n  trackBy(i, data) {\n    return data.index;\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/binary-parent/binary-parent.component.html",
    "content": "<!--<kirjs-block *ngIf=\"type==='structure'\" class=\"one-line\" class=\"kirjs-block\" [showMeta]=\"showMeta\"-->\n<!--[data]=\"structure\"></kirjs-block>-->\n<!--<binary-flat *ngIf=\"type==='flat'\" (updateBinary)=\"updateBinary($event)\" [parser]=\"parser\"-->\n<!--[binary]=\"binary\"></binary-flat>-->\n<!--<ng-content></ng-content>-->\n<!--&lt;!&ndash;<kirjs-inline-root [data]=\"structure\"></kirjs-inline-root>&ndash;&gt;-->\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/binary-parent/binary-parent.component.scss",
    "content": ":host ::ng-deep {\n  .block {\n    display: block;\n    font-size: 30px;\n    margin-left: 40px;\n  }\n\n  .name {\n    width: 200px;\n  }\n\n  kirjs-object .block > .name {\n    display: block;\n  }\n}\n\n.block {\n  margin-left: 0;\n  font-size: 40px;\n}\n\n:host ::ng-deep {\n  input {\n    background: transparent;\n    font-size: inherit;\n    border: 0 solid;\n    font-family: Monaco, 'Lucida Console', monospace;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/binary-parent/binary-parent.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BinaryParentComponent } from './binary-parent.component';\n\ndescribe('BinaryParentComponent', () => {\n  let component: BinaryParentComponent;\n  let fixture: ComponentFixture<BinaryParentComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BinaryParentComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BinaryParentComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/binary-parent/binary-parent.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { BinaryParser } from '../../parser/binary-parser';\nimport { StringBinaryReader } from '../../parser/readers/string-reader';\n\n@Component({\n  selector: 'kirjs-binary-parent',\n  templateUrl: './binary-parent.component.html',\n  styleUrls: ['./binary-parent.component.scss']\n})\nexport class BinaryParentComponent implements OnInit, OnChanges {\n  @Input() showMeta = true;\n  @Input() parser: BinaryParser;\n  @Input() binary: string;\n  @Input() type = 'structure';\n  @Input() spacing = false;\n\n  @Output() updateBinary = new EventEmitter();\n  structure: any;\n\n  constructor() {}\n\n  ngOnInit() {\n    this.regenerate();\n  }\n\n  ngOnChanges() {\n    this.regenerate();\n  }\n\n  regenerate() {\n    this.structure = this.parser.readOrdered(\n      new StringBinaryReader(this.binary)\n    );\n  }\n\n  update(chunk, value) {\n    const len = chunk.end - chunk.start;\n    value = value.padEnd(len, 0).slice(0, len);\n    this.binary =\n      this.binary.slice(0, chunk.start) + value + this.binary.substr(chunk.end);\n    this.updateBinary.emit(this.binary);\n    this.regenerate();\n  }\n\n  updatePart(chunk, value) {\n    const len = chunk.end - chunk.start;\n    value = value.padEnd(len, 0).slice(0, len);\n\n    this.binary =\n      this.binary.slice(0, chunk.start) + value + this.binary.substr(chunk.end);\n    //\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/binary-view.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BlockComponent } from './block/block.component';\nimport { ObjectComponent } from './object/object.component';\nimport { BitsComponent } from './bits/bits.component';\nimport { StringComponent } from './string/string.component';\nimport { NumberComponent } from './number/number.component';\nimport { ArrayComponent } from './array/array.component';\nimport { ColorComponent } from './color/color.component';\nimport { BinaryParentComponent } from './binary-parent/binary-parent.component';\nimport { HexComponent } from './hex/hex.component';\nimport { InlineComponent } from './inline/inline.component';\nimport { InlineRootComponent } from './inline-root/inline-root.component';\nimport { BinaryFlatComponent } from '../binary-flat/binary-flat.component';\nimport { BinaryPlainComponent } from '../binary-plain/binary-plain.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  imports: [CommonModule, FormsModule],\n  declarations: [\n    BlockComponent,\n    ObjectComponent,\n    BitsComponent,\n    StringComponent,\n    NumberComponent,\n    ArrayComponent,\n    ColorComponent,\n    BinaryParentComponent,\n    BinaryFlatComponent,\n    HexComponent,\n    InlineComponent,\n    InlineRootComponent,\n    BinaryPlainComponent\n  ],\n  exports: [\n    BinaryFlatComponent,\n    BinaryPlainComponent,\n    BlockComponent,\n    ObjectComponent,\n    BitsComponent,\n    StringComponent,\n    NumberComponent,\n    ArrayComponent,\n    ColorComponent,\n    BinaryParentComponent,\n    HexComponent\n  ],\n  entryComponents: [\n    BinaryFlatComponent,\n    BlockComponent,\n    ObjectComponent,\n    BitsComponent,\n    StringComponent,\n    NumberComponent,\n    ArrayComponent,\n    ColorComponent,\n    HexComponent,\n    BinaryPlainComponent\n  ]\n})\nexport class BinaryViewModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/bits/bits.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/bits/bits.component.html",
    "content": "<input AutoSizeInput [value]=\"data.rawValue\" />\n\n<input\n  AutoSizeInput\n  type=\"checkbox\"\n  *ngIf=\"data.rawValue.length === 1 && showMeta\"\n  [checked]=\"!!+data.rawValue\"\n  (change)=\"update(i.checked)\"\n  #i\n/>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/bits/bits.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BitsComponent } from './bits.component';\n\ndescribe('BitsComponent', () => {\n  let component: BitsComponent;\n  let fixture: ComponentFixture<BitsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BitsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BitsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/bits/bits.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport { BinaryParentComponent } from '../binary-parent/binary-parent.component';\n\n@Component({\n  selector: 'kirjs-bits',\n  templateUrl: './bits.component.html',\n  styleUrls: ['./bits.component.css']\n})\nexport class BitsComponent {\n  @Input() data;\n  @Input() showMeta = false;\n\n  constructor(private readonly root: BinaryParentComponent) {}\n\n  update(value) {\n    this.root.update(this.data, Number(value).toString());\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/block/block.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/block/block.component.html",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/block/block.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BlockComponent } from './block.component';\n\ndescribe('BlockComponent', () => {\n  let component: BlockComponent;\n  let fixture: ComponentFixture<BlockComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BlockComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BlockComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/block/block.component.ts",
    "content": "import {\n  ChangeDetectorRef,\n  Component,\n  ComponentFactoryResolver,\n  Input,\n  OnChanges,\n  OnInit,\n  ViewContainerRef\n} from '@angular/core';\nimport { ObjectComponent } from '../object/object.component';\nimport { BitsComponent } from '../bits/bits.component';\nimport { StringComponent } from '../string/string.component';\nimport { NumberComponent } from '../number/number.component';\nimport { ArrayComponent } from '../array/array.component';\nimport { ColorComponent } from '../color/color.component';\nimport { HexComponent } from '../hex/hex.component';\n\nconst componentMap = {\n  object: ObjectComponent,\n  bits: BitsComponent,\n  string: StringComponent,\n  number: NumberComponent,\n  array: ArrayComponent,\n  color: ColorComponent,\n  hex: HexComponent\n};\n\n@Component({\n  selector: 'kirjs-block',\n  templateUrl: './block.component.html',\n  styleUrls: ['./block.component.css']\n})\nexport class BlockComponent implements OnInit, OnChanges {\n  @Input() data: any;\n  @Input() showMeta: boolean;\n  private componentRef: any;\n\n  constructor(\n    private vcr: ViewContainerRef,\n    private readonly cdr: ChangeDetectorRef,\n    private componentFactoryResolver: ComponentFactoryResolver\n  ) {}\n\n  ngOnChanges(changes) {\n    if (this.componentRef && changes.showMeta) {\n      this.componentRef.instance.showMeta = changes.showMeta.currentValue;\n    }\n\n    if (this.componentRef && changes.data) {\n      this.componentRef.instance.data = changes.data.currentValue;\n    }\n    this.cdr.detectChanges();\n  }\n\n  ngOnInit() {\n    if (!componentMap[this.data.type]) {\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n\n    const cf = this.componentFactoryResolver.resolveComponentFactory(\n      componentMap[this.data.type]\n    );\n    this.vcr.clear();\n    this.componentRef = this.vcr.createComponent(cf) as any;\n    this.componentRef.instance.data = this.data;\n    this.componentRef.instance.showMeta = this.showMeta;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/color/color.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/color/color.component.html",
    "content": "<input\n  AutoSizeInput\n  (change)=\"updateBinary(b.value)\"\n  [value]=\"data.rawValue\"\n  #b\n/>\n<input type=\"color\" [value]=\"'#' + color\" (change)=\"update(i.value)\" #i />\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/color/color.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ColorComponent } from './color.component';\n\ndescribe('ColorComponent', () => {\n  let component: ColorComponent;\n  let fixture: ComponentFixture<ColorComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ColorComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ColorComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/color/color.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { BinaryParentComponent } from '../binary-parent/binary-parent.component';\n\n@Component({\n  selector: 'kirjs-color',\n  templateUrl: './color.component.html',\n  styleUrls: ['./color.component.css']\n})\nexport class ColorComponent implements OnInit {\n  color: string;\n\n  constructor(private readonly root: BinaryParentComponent) {}\n\n  private _data: any;\n\n  get data() {\n    return this._data;\n  }\n\n  @Input()\n  set data(data) {\n    this._data = data;\n    this.color = data.value.toString(16).padStart(6, 0);\n  }\n\n  update(value) {\n    const val = (parseInt(value.slice(1), 16).toString(2) as any).padStart(\n      24,\n      0\n    );\n    this.root.update(this._data, val);\n  }\n\n  updateBinary(binary) {\n    this.root.update(this.data, binary);\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/hex/hex.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/hex/hex.component.html",
    "content": "<span>{{ data.rawValue }}</span> <input [value]=\"data.value\" />\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/hex/hex.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { HexComponent } from './hex.component';\n\ndescribe('HexComponent', () => {\n  let component: HexComponent;\n  let fixture: ComponentFixture<HexComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [HexComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(HexComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/hex/hex.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-hex',\n  templateUrl: './hex.component.html',\n  styleUrls: ['./hex.component.css']\n})\nexport class HexComponent implements OnInit {\n  @Input() data;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline/inline.component.css",
    "content": "span {\n  font-size: 50px;\n  word-wrap: break-word;\n}\n\n.header {\n  background: #52ff93;\n}\n\n.palette {\n  background: #ffb71a;\n}\n\n.extensions {\n  background: #61e9ff;\n}\n\n.item:hover {\n  box-shadow: 0px 0px 4px 4px #444;\n  cursor: pointer;\n}\n\ninput {\n  background: transparent;\n  border: 0 solid;\n  font-size: inherit;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline/inline.component.html",
    "content": "<ng-container *ngIf=\"isArray\">\n  <span *ngFor=\"let v of value\" [class]=\"v.name\">\n    <kirjs-inline [data]=\"v\"></kirjs-inline>\n  </span>\n</ng-container>\n<input\n  class=\"item\"\n  [style.width.px]=\"data.rawValue ? data.rawValue.length * 28 + 12 : 10\"\n  (focus)=\"display(data)\"\n  *ngIf=\"!isArray\"\n  [value]=\"data.rawValue\"\n  (keyup)=\"updateValue(i.value)\"\n  #i\n/>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline/inline.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { InlineComponent } from './inline.component';\n\ndescribe('InlineComponent', () => {\n  let component: InlineComponent;\n  let fixture: ComponentFixture<InlineComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [InlineComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(InlineComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline/inline.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { InlineRootComponent } from '../inline-root/inline-root.component';\nimport { BinaryParentComponent } from '../binary-parent/binary-parent.component';\n\n@Component({\n  selector: 'kirjs-inline',\n  templateUrl: './inline.component.html',\n  styleUrls: ['./inline.component.css']\n})\nexport class InlineComponent implements OnInit {\n  isArray: boolean;\n  private value: any;\n\n  constructor(\n    private readonly root: InlineRootComponent,\n    private readonly binaryRoot: BinaryParentComponent\n  ) {}\n\n  private _data: any;\n\n  get data() {\n    return this._data;\n  }\n\n  @Input()\n  set data(data) {\n    this._data = data;\n    this.value = data.value;\n    this.isArray = Array.isArray(data.value);\n  }\n\n  updateValue(value) {\n    this.binaryRoot.update(this.data, value);\n  }\n\n  ngOnInit() {}\n\n  display() {\n    this.root.display(this.data);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline-root/inline-root.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline-root/inline-root.component.html",
    "content": "<ng-container *ngIf=\"displayData\">\n  {{ displayData | json }}\n  <!--<h2>{{displayData.type}}</h2>-->\n  <h2>{{ displayData.name }}</h2>\n  <!--<input [value]=\"displayData.rawValue\">-->\n  <!--<kirjs-block [showMeta]=\"true\" [class]=\"item.name\" [data]=\"displayData\"></kirjs-block>-->\n  <h1>{{ displayData.value }}</h1>\n</ng-container>\n<kirjs-inline [data]=\"data\"></kirjs-inline>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline-root/inline-root.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { InlineRootComponent } from './inline-root.component';\n\ndescribe('InlineRootComponent', () => {\n  let component: InlineRootComponent;\n  let fixture: ComponentFixture<InlineRootComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [InlineRootComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(InlineRootComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/inline-root/inline-root.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-inline-root',\n  templateUrl: './inline-root.component.html',\n  styleUrls: ['./inline-root.component.css']\n})\nexport class InlineRootComponent implements OnInit {\n  @Input() data: any;\n\n  displayData: any;\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  display(displayData: any) {\n    this.displayData = displayData;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/number/number.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/number/number.component.html",
    "content": "<input\n  AutoSizeInput\n  (change)=\"updateBinary(b.value)\"\n  [value]=\"data.rawValue\"\n  #b\n/>\n<input\n  AutoSizeInput\n  *ngIf=\"showMeta\"\n  [value]=\"data.value\"\n  (change)=\"update(i.value)\"\n  #i\n/>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/number/number.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { NumberComponent } from './number.component';\n\ndescribe('NumberComponent', () => {\n  let component: NumberComponent;\n  let fixture: ComponentFixture<NumberComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [NumberComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(NumberComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/number/number.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { BinaryParentComponent } from '../binary-parent/binary-parent.component';\n\n@Component({\n  selector: 'kirjs-number',\n  templateUrl: './number.component.html',\n  styleUrls: ['./number.component.css']\n})\nexport class NumberComponent implements OnInit {\n  @Input() data: any;\n  @Input() showMeta = false;\n\n  constructor(private readonly root: BinaryParentComponent) {}\n\n  update(value) {\n    const val = (Number(value).toString(2) as any).padStart(\n      this.data.length,\n      0\n    );\n    this.root.update(this.data, val.slice(8) + val.slice(0, 8));\n  }\n\n  updateBinary(binary) {\n    this.root.update(this.data, binary);\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/object/object.component.css",
    "content": ".show-meta {\n  padding: 4px;\n  margin-right: 4px;\n  margin-top: 4px;\n  border: 1px #ddd solid;\n  border-radius: 10px;\n  font-size: 2vw;\n}\n\n.name {\n  display: none;\n}\n\n.show-meta .name {\n  display: inline-block;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/object/object.component.html",
    "content": "<span\n  class=\"block\"\n  [class.show-meta]=\"showMeta\"\n  *ngFor=\"let item of data.value; trackBy: trackBy\"\n>\n  <span class=\"name\">{{ item.name }}</span>\n  <kirjs-block\n    [showMeta]=\"showMeta\"\n    [class]=\"item.name\"\n    [data]=\"item\"\n  ></kirjs-block>\n</span>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/object/object.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ObjectComponent } from './object.component';\n\ndescribe('ObjectComponent', () => {\n  let component: ObjectComponent;\n  let fixture: ComponentFixture<ObjectComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ObjectComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ObjectComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/object/object.component.ts",
    "content": "import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-object',\n  templateUrl: './object.component.html',\n  styleUrls: ['./object.component.css']\n})\nexport class ObjectComponent implements OnInit {\n  @Input() data: any;\n  @Input() showMeta = true;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit() {}\n\n  trackBy(i, data) {\n    return data.name;\n  }\n\n  init() {\n    this.cdr.detectChanges();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/string/string.component.css",
    "content": ":host {\n  word-break: break-all;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/string/string.component.html",
    "content": "<input\n  AutoSizeInput\n  (change)=\"updateBinary(b.value)\"\n  [value]=\"data.rawValue\"\n  #b\n/>\n<input\n  AutoSizeInput\n  *ngIf=\"showMeta\"\n  [value]=\"data.value\"\n  (change)=\"update(i.value)\"\n  #i\n/>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/string/string.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StringComponent } from './string.component';\n\ndescribe('StringComponent', () => {\n  let component: StringComponent;\n  let fixture: ComponentFixture<StringComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StringComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StringComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary-view/string/string.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { BinaryParentComponent } from '../binary-parent/binary-parent.component';\n\n@Component({\n  selector: 'kirjs-string',\n  templateUrl: './string.component.html',\n  styleUrls: ['./string.component.css']\n})\nexport class StringComponent implements OnInit {\n  get data() {\n    return this._data;\n  }\n\n  @Input()\n  set data(data) {\n    this._data = data;\n  }\n\n  @Input() showMeta = false;\n\n  _data: any;\n\n  constructor(private readonly root: BinaryParentComponent) {}\n\n  updateBinary(binary) {\n    this.root.update(this.data, binary);\n  }\n\n  update(value) {\n    const val = value\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n\n    this.root.update(this.data, val);\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary.component.html",
    "content": "<slide-deck slideShortcuts class=\"binary-presentation\" slidesRouting>\n  <slide-arrows></slide-arrows>\n  <!--<kirjs-new-progress-bar [fontSize]=\"fontSize\"-->\n  <!--title=\"Binary ❤️ JavaScript\"-->\n  <!--(fontSizeChange)=\"fontSize = fontSize + $event\"></kirjs-new-progress-bar>-->\n  <!--<feedback-widget></feedback-widget>-->\n\n  <div *slide id=\"intro\" bg intro no-padding>\n    <h1 i18n>@kirjs</h1>\n    <h2 i18n>️JavaScript ❤️ Binary</h2>\n    <h3>kirjs.com/binary/0</h3>\n  </div>\n\n  <div *slide id=\"font-size\" bg style=\"padding: 4vw\">\n    <h2 i18n=\"@@fontSize\">\n      If you can't read the numbers below, move closer or go to\n      <b>kirjs.com/binary/0</b>\n    </h2>\n    <div style=\"font-size: 3vw;word-break: break-all\">\n      {{ binaryLittleGif.substr(0, 200) }}\n    </div>\n  </div>\n\n  <div *slide id=\"binary-abstraction\" bg>\n    <h2 i18n>Binary is hidden behind many layers of abstraction</h2>\n  </div>\n\n  <div *slide id=\"overview-2\">\n    <h1 i18n>In this talk:</h1>\n    <ul>\n      <li i18n>Binary in files (images, video, other media, zip)</li>\n      <li i18n>Binary for data transfer (instead of JSON)</li>\n      <li i18n>Javascript using binary in memory</li>\n    </ul>\n  </div>\n\n  <!--<div *slide id=\"binary-message\" bg vc message>-->\n  <!--</div>-->\n\n  <div *slide id=\"gif-internals\" bg vc gif>\n    <h1 i18n>Let's see what's inside of <b>gif</b></h1>\n  </div>\n\n  <div *slide id=\"binary-file-upload\">\n    <input type=\"file\" />\n    <hr />\n    <code-demo-editor\n      [lineNumbers]=\"false\"\n      [fontSize]=\"40\"\n      [(ngModel)]=\"code.fileHandler\"\n      [codeDemoHighlight]=\"code.fileHandlerHighlight\"\n      language=\"javascript\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide id=\"binary-file-value-2\" vertical-split>\n    <code style=\"font-size: 2vw;font-weight: 300;word-break: break-word\">\n      {{ chikinGif }}\n    </code>\n    <kirjs-binary-gif [binary]=\"binaryChikinGif\"></kirjs-binary-gif>\n  </div>\n\n  <div *slide id=\"binary-file-string-value\" vertical-split>\n    <code\n      style=\"font-size: 10vw;font-weight: 300;word-break: break-word\"\n      contenteditable=\"true\"\n      (input)=\"setLittleGifBinary($event.target.innerText)\"\n    >\n      {{ littleGif }}\n    </code>\n    <kirjs-binary-gif [binary]=\"binaryLittleGif\"></kirjs-binary-gif>\n  </div>\n\n  <div *slide id=\"binary-file-upload-buffer\">\n    <code-demo-editor\n      [lineNumbers]=\"false\"\n      [fontSize]=\"40\"\n      [(ngModel)]=\"code.fileHandlerBinary\"\n      language=\"javascript\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide id=\"binary-file-value\" vertical-split>\n    <code style=\"font-size: 3vw; font-weight: 300;word-break: break-word\">\n      {{ binaryLittleGif }}\n    </code>\n    <kirjs-binary-gif [binary]=\"binaryLittleGif\"></kirjs-binary-gif>\n  </div>\n\n  <div *slide id=\"schema\" binary-schema>\n    <h2 i18n>Binary data makes no sense without a schema</h2>\n    <table>\n      <tr>\n        <td i18n style=\"width: 30%\">Binary data</td>\n        <td i18n>\n          01001110 01101111 01110110 01101001 00100000 01110011 01100001\n          01100100\n        </td>\n      </tr>\n      <tr>\n        <td colspan=\"2\" style=\"text-align: center;\">+</td>\n      </tr>\n      <tr>\n        <td i18n>Schema</td>\n        <td i18n>Lol, what's this?</td>\n      </tr>\n      <tr>\n        <td colspan=\"2\" style=\"text-align: center;\">=</td>\n      </tr>\n      <tr>\n        <td colspan=\"2\" style=\"text-align: center;\">\n          Numbers? Picture? Archive? Text?\n        </td>\n      </tr>\n    </table>\n  </div>\n\n  <div *slide id=\"schema-2\" binary-schema>\n    <h2 i18n>Binary data makes no sense without a schema</h2>\n    <table>\n      <tr>\n        <td i18n style=\"width: 30%\">Binary data</td>\n        <td i18n>\n          01001110 01101111 01110110 01101001 00100000 01110011 01100001\n          01100100\n        </td>\n      </tr>\n      <tr>\n        <td colspan=\"2\" style=\"text-align: center;\">+</td>\n      </tr>\n      <tr>\n        <td i18n>Schema</td>\n        <td><b i18n>This is UTF-8 string!</b></td>\n      </tr>\n      <tr>\n        <td colspan=\"2\" style=\"text-align: center;\">=</td>\n      </tr>\n      <tr>\n        <td colspan=\"2\" style=\"text-align: center;\">Novi Sad</td>\n      </tr>\n    </table>\n  </div>\n\n  <div *slide id=\"gif-standard\" vc>\n    <pre style=\"text-align: center;font-size: 2vw;\">\nGRAPHICS INTERCHANGE FORMAT(sm)\n\n<a href=\"https://www.w3.org/Graphics/GIF/spec-gif89a.txt\">Version 89a</a>\n\n(c)1987,1988,1989,1990\n\nCopyright\nCompuServe Incorporated\nColumbus, Ohio\n      </pre>\n  </div>\n\n  <div *slide id=\"gif-unspaced\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [binary]=\"binaryLittleGif\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-spaced\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [binary]=\"binaryLittleGif\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-spaced-sections\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [binary]=\"binaryLittleGif\"\n      [spacing]=\"true\"\n      [highlightGroups]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-structure\" vc>\n    <h2 i18n>Header</h2>\n    <ul class=\"text parent-header\">\n      <li i18n>Contains size, global pallets specs, transparency.</li>\n    </ul>\n    <h2 i18n>Palette (Optional, size defined )</h2>\n    <ul class=\"text  parent-palette\">\n      <li i18n>Contains indexed colors</li>\n    </ul>\n    <h2 i18n>Extensions (Optional)</h2>\n    <div class=\"text  parent-extensions\">\n      <ul style=\"margin: 0;\">\n        <li i18n i18n>Actual image data</li>\n        <li i18n i18n>Image Control</li>\n        <li i18n i18n>Animation Control</li>\n        <li i18n i18n>Comments</li>\n      </ul>\n    </div>\n  </div>\n\n  <kirjs-color-indexing *slide id=\"color-indexing\"></kirjs-color-indexing>\n\n  <div *slide id=\"gif-spaced-sections-2\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [binary]=\"binaryLittleGif\"\n      [spacing]=\"true\"\n      [highlightGroups]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-boolean\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{ boolean: true }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-number\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{ boolean: true, number: true }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"bin-dec\"><kirjs-bindec param=\"uint8\"></kirjs-bindec></div>\n\n  <div *slide id=\"convert-bin-to-dec\">\n    <h2 i18n>Convert binary to decimal with JavaScript</h2>\n    <code-demo-realtime-eval\n      code=\"parseInt('01010101', 2)\"\n    ></code-demo-realtime-eval>\n  </div>\n\n  <div *slide id=\"convert-dec-to-bin\">\n    <h2 i18n>Convert decimal to binary</h2>\n    <code-demo-realtime-eval\n      code=\"(1212).toString(2)\"\n    ></code-demo-realtime-eval>\n  </div>\n\n  <div *slide id=\"gif-spaced-bin-dec\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{ boolean: true, number: true }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-spaced-hex\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{ boolean: true, number: true, hex: true }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"bin-hex-explained\"><kirjs-hexdec></kirjs-hexdec></div>\n  <div *slide id=\"bin-hex\">\n    <h2 i18n>Convert binary to hexadecimal with JavaScript</h2>\n    <code-demo-realtime-eval\n      code=\"parseInt('01010101', 2).toString(16)\"\n    ></code-demo-realtime-eval>\n  </div>\n\n  <div *slide id=\"hex-bin\">\n    <h2 i18n>Convert hexadecimal to binary with JavaScript</h2>\n    <code-demo-realtime-eval\n      code=\"parseInt('FEFEFE', 16).toString(2)\"\n    ></code-demo-realtime-eval>\n  </div>\n\n  <div *slide id=\"gif-spaced-bin-hex\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{ boolean: true, number: true, hex: true }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"gif-spaced-string\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{\n        boolean: true,\n        number: true,\n        hex: true,\n        string: true\n      }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"ascii\"><kirjs-ascii></kirjs-ascii></div>\n\n  <div *slide id=\"ascii-2\">\n    <kirjs-ascii param=\"ascii - Page 2\"></kirjs-ascii>\n  </div>\n\n  <div *slide id=\"windows-1251\">\n    <kirjs-ascii param=\"windows-1251\"></kirjs-ascii>\n  </div>\n\n  <div *slide id=\"pelmen\" pelmen><h1 i18n>ПЕЛЬМЕНЬ</h1></div>\n\n  <div *slide id=\"pelmen2\" pelmen>\n    <h1 i18n>ПЕЛЬМЕНЬ</h1>\n    <h1 i18n>ПЕЉМЕЊ</h1>\n  </div>\n\n  <div *slide id=\"KOI8-R\"><kirjs-ascii param=\"KOI8-R\"></kirjs-ascii></div>\n  <div *slide id=\"boxes\">\n    <pre style=\"font-size: 3vw;font-family: monospace; line-height: 1.8vw;\">\n┌─┬┐  ╔═╦╗  ╓─╥╖  ╒═╤╕\n│ ││  ║ ║║  ║ ║║  │ ││\n├─┼┤  ╠═╬╣  ╟─╫╢  ╞═╪╡\n└─┴┘  ╚═╩╝  ╙─╨╜  ╘═╧╛\n┌───────────────────┐\n│  ╔═══╗            │\n│  ╚═╦═╝            │\n╞═╤══╩══╤═══════════╡\n│ ├──┬──┤           │\n│ └──┴──┘           │\n└───────────────────┘\n    </pre>\n  </div>\n\n  <div *slide id=\"krakoziabry\" bg krakoziabry></div>\n\n  <div *slide id=\"utf-8\"><kirjs-ascii param=\"utf-8\"></kirjs-ascii></div>\n\n  <div *slide id=\"str-to-charcode\">\n    <h2 i18n>Get charcode from string</h2>\n    <code-demo-realtime-eval\n      code=\"'lol'.charCodeAt(0)\"\n    ></code-demo-realtime-eval>\n  </div>\n\n  <div *slide id=\"charcode-to-str\">\n    <h2 i18n>Get letter from charcode</h2>\n    <code-demo-realtime-eval\n      code=\"String.fromCharCode(118)\"\n    ></code-demo-realtime-eval>\n  </div>\n\n  <!--<div *slide id=\"binary-message-2\" bg vc message>-->\n  <!--</div>-->\n  <!--<div *slide id=\"binary-message-decoded\" vertical-split>-->\n  <!--<div>-->\n  <!--<code-demo-editor language=\"javascript\" [fontSize]=\"40\" [(ngModel)]=\"code.message\"-->\n  <!--(ngModelChange)=\"evalMessage()\"></code-demo-editor>-->\n  <!--</div>-->\n  <!--<div style=\"font-size: 5vw; word-wrap: break-word\">{{evaledMessage}}</div>-->\n  <!--</div>-->\n\n  <div *slide id=\"gif-string-2\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryLittleGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryLittleGif\"\n      [highlightedMap]=\"{\n        boolean: true,\n        number: true,\n        hex: true,\n        string: true\n      }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <div *slide id=\"chikin\">\n    <kirjs-fake-gif\n      (binaryUpdate)=\"binaryChikinGif = $event\"\n      [showPopups]=\"true\"\n      [binary]=\"binaryChikinGif\"\n      [highlightedMap]=\"{\n        boolean: true,\n        number: true,\n        hex: true,\n        string: true\n      }\"\n      [spacing]=\"true\"\n    ></kirjs-fake-gif>\n  </div>\n\n  <!--<div *slide id=\"charcode-to-str\">-->\n  <!--<code-demo-realtime-eval code=\"String.fromCharCode(1034)\"></code-demo-realtime-eval>-->\n  <!--</div>-->\n\n  <div *slide id=\"parsing-binary\" bg vc gif>\n    <h1 i18n>Parsing binary(with <b>binary-parser</b>)</h1>\n  </div>\n\n  <div *slide id=\"binary-parser-header\">\n    <kirjs-binary-parser-demo\n      [filterClassName]=\"binaryParserHeaderMatch\"\n      [helpers]=\"binaryParserHeaderHelpers\"\n      [binary]=\"binaryLittleGif\"\n    ></kirjs-binary-parser-demo>\n  </div>\n\n  <div *slide id=\"endianness\" bg endianness></div>\n  <div *slide id=\"binary-parser-palette\">\n    <kirjs-binary-parser-demo\n      [helpers]=\"binaryParserPaletteHelpers\"\n      [filterClassName]=\"binaryParserPaletteMatch\"\n      [binary]=\"binaryLittleGif\"\n    ></kirjs-binary-parser-demo>\n  </div>\n\n  <div *slide id=\"facts\">\n    <h2 i18n>Gif facts</h2>\n    <ul>\n      <li i18n>Image size: 1х1 to 65535х65535</li>\n      <li i18n>Colors: 2 - 256</li>\n      <li i18n>True color gifs are possible</li>\n      <li i18n>Max number of animation frames - unlimited</li>\n      <li i18n>Animation delay 1/100 - 655 seconds</li>\n      <li i18n>There's a plain text extension</li>\n      <li i18n>24 pages + 12 pages appendix in gif89 standard</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"files\">\n    <h2 i18n>File header constants</h2>\n    <ul>\n      <li i18n>Gif - GIF87a (or GIF89a)</li>\n      <li i18n>Jpeg - begin with ‘FF D8‘ and end with ‘FF D9'</li>\n      <li i18n>Java class - CAFEBABE</li>\n      <li i18n>ZIP files begin with ‘PK‘ (50 4B)</li>\n      <li i18n>PDF files start with ‘%PDF‘ (25 50 44 46)</li>\n      <li i18n>\n        PNG image files begin with “\\211 P N G \\r \\n 32 \\n” (89 50 4E 47 0D 0A\n        1A 0A)\n      </li>\n      <li i18n>HTTP2 - PRI * HTTP/2.0\\r\\n\\r\\nSM\\r\\n\\r\\n</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"kaitai\" bg kaitai>\n    <h1 i18n>Big library of binary formats</h1>\n    <h2 i18n>https://formats.kaitai.io/</h2>\n  </div>\n\n  <div *slide id=\"binary-json\" bg vc json>\n    <h1 i18n>Can we use <b>binary</b> instead of <b>JSON</b>?</h1>\n  </div>\n\n  <div *slide id=\"json\"><kirjs-json></kirjs-json></div>\n\n  <div *slide id=\"json-1\"><kirjs-json [code]=\"code.jsonOne\"></kirjs-json></div>\n\n  <div *slide id=\"compare-size\">\n    <h1 i18n>Serialized Size</h1>\n    <div style=\"display: flex;\" class=\"compare-serialization\">\n      <div class=\"compare-json\">\n        <h2 i18n>JSON</h2>\n        <ul>\n          <li i18n class=\"compare-value\">Bigger</li>\n        </ul>\n      </div>\n\n      <div>\n        <h2 i18n>Binary</h2>\n        <ul>\n          <li i18n class=\"compare-value\">Smaller</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"compare-speed\">\n    <h1 i18n>Serialization speed</h1>\n    <div style=\"display: flex;\" class=\"compare-serialization\">\n      <div class=\"compare-json\">\n        <h2 i18n>JSON</h2>\n        <ul>\n          <li i18n class=\"compare-value\">Slower</li>\n        </ul>\n      </div>\n\n      <div>\n        <h2 i18n>Binary</h2>\n        <ul>\n          <li i18n class=\"compare-value\">Faster</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"compare-debugging\">\n    <h1 i18n>Debugging</h1>\n    <div style=\"display: flex;\" class=\"compare-serialization\">\n      <div class=\"compare-json\">\n        <h2 i18n>JSON</h2>\n\n        <ul>\n          <li i18n class=\"compare-value\">Easy to understand</li>\n          <li i18n class=\"compare-value\">Human readable</li>\n        </ul>\n      </div>\n\n      <div>\n        <h2 i18n>Binary</h2>\n        <ul>\n          <li i18n class=\"compare-value\">Requires special tooling</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"compare-tooling\">\n    <h1 i18n>Tooling</h1>\n    <div style=\"display: flex;\" class=\"compare-serialization\">\n      <div class=\"compare-json\">\n        <h2 i18n>JSON</h2>\n        <ul>\n          <li i18n class=\"compare-value\">For JS works out of the box</li>\n        </ul>\n      </div>\n\n      <div>\n        <h2 i18n>Binary</h2>\n        <ul>\n          <li i18n class=\"compare-value\">Requires special tooling</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"compare-schema\">\n    <h1 i18n>Schema</h1>\n    <div style=\"display: flex;\" class=\"compare-serialization\">\n      <div class=\"compare-json\">\n        <h2 i18n>JSON</h2>\n        <ul>\n          <li i18n>No schema</li>\n        </ul>\n      </div>\n\n      <div>\n        <h2 i18n>Binary</h2>\n        <ul>\n          <li i18n>Needs a schema</li>\n          <li i18n>Comes with type checking</li>\n          <li i18n>Comes with validation</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"compare-examples\">\n    <h2 i18n>Existing solutions</h2>\n    <ul>\n      <li i18n>\n        <a href=\"https://developers.google.com/protocol-buffers/\"\n          >Protocol buffers</a\n        >\n        (Google)\n      </li>\n      <li i18n>\n        <a href=\"https://google.github.io/flatbuffers/\">Flatbuffers</a> (Google)\n      </li>\n      <li i18n>\n        <a href=\"https://thrift.apache.org/\">Thrift</a> (Apache/Facebook)\n      </li>\n    </ul>\n  </div>\n\n  <div *slide id=\"binary-memory\" bg vc>\n    <h1 i18n>Thought experiment</h1>\n    <h2 i18n>Memory management in JavaScript</h2>\n  </div>\n\n  <div *slide id=\"binary-memory-1\">\n    <h2 i18n>Let's see how memory works in typed arrays</h2>\n    <kirjs-memory></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-2\">\n    <kirjs-memory\n      [param]=\"1\"\n      code=\"Boolean[] b = new Boolean[5];\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-3\">\n    <kirjs-memory\n      [param]=\"2\"\n      code=\"Boolean[] b = new Boolean[5];\nSystem.out.println(b[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-4\">\n    <kirjs-memory [param]=\"3\" code=\"Uint8[] b = new Uint8[5];\"></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-5\">\n    <kirjs-memory\n      [param]=\"4\"\n      code=\"Uint8[] b = new Uint8[5];\nSystem.out.println(b[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-6\">\n    <kirjs-memory\n      [param]=\"5\"\n      code=\"a = [true, false, true, false, true];\nconsole.log(a[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-7\">\n    <kirjs-memory\n      [param]=\"6\"\n      code=\"a = [true, 3, true, false, true];\nconsole.log(a[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-8\">\n    <kirjs-memory\n      [param]=\"7\"\n      code=\"a = [true, 3, true, false, true];\nconsole.log(a[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-9\">\n    <kirjs-memory\n      [param]=\"8\"\n      code=\"a = [true, 3, true, false, true];\nconsole.log(a[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-10\">\n    <kirjs-memory\n      [param]=\"9\"\n      code=\"a = [true, 3, true, false, true];\na[1] = false;\nconsole.log(a[3]);\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-memory-11\">\n    <kirjs-memory\n      [param]=\"4\"\n      code=\"cons a = new Uint8Array(5);\nconsole.log(a[1])\"\n    ></kirjs-memory>\n  </div>\n\n  <div *slide id=\"binary-operations\">\n    <code-demo-editor\n      [lineNumbers]=\"false\"\n      [fontSize]=\"50\"\n      language=\"javascript\"\n      [(ngModel)]=\"code.simpleBinaryOperations\"\n    ></code-demo-editor>\n  </div>\n\n  <div *slide id=\"angular-flags\">\n    <h2 i18n>Angular Component Flags (bitmask)</h2>\n    <kirjs-angular-flags></kirjs-angular-flags>\n  </div>\n\n  <div *slide id=\"react-flags\">\n    <h2 i18n>ReactDOM Flags (bitmask)</h2>\n    <code-demo-editor fontSize=\"40\" [ngModel]=\"reactBitmask\">\n    </code-demo-editor>\n  </div>\n\n  <div *slide id=\"bitwise-to-read\" bg>\n    <kirjs-to-read title=\"Hacker's delight \" author=\"Henry S. Warren\">\n      <div class=\"book\"></div>\n    </kirjs-to-read>\n  </div>\n\n  <div *slide id=\"the-end\">\n    <h1 i18n>The end:</h1>\n    <ul>\n      <li i18n>Binary in files (images, video, other media, zip)</li>\n      <li i18n>Binary for data transfer (instead of JSON)</li>\n      <li i18n>Javascript using binary in memory</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"outro\" bg intro>\n    <h1 i18n>@kirjs</h1>\n    <h2 i18n>Binary ❤️ JavaScript</h2>\n    <h2 i18n>kirjs.com/binary/0</h2>\n    <h3 i18n>Thanks @andrey_sitnik, @_bmsdave, @NisamProgramer for review</h3>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary.component.scss",
    "content": "h1 {\n  font-size: 5vw;\n}\n\n::ng-deep feedback-widget {\n  position: absolute;\n  right: 0;\n  bottom: 140px;\n  display: block;\n  width: 32px;\n  height: 32px;\n  z-index: 100;\n\n  .feedback-button {\n    width: 24px;\n    height: 24px;\n  }\n}\n\n#font-size b {\n  font-size: 10vw;\n  margin-bottom: 6vw;\n  display: block;\n}\n\n:host {\n  .binary-presentation ::ng-deep {\n    .slide [intro] {\n      background: url(pics/kirjs.webp);\n      background-size: 100vh !important;\n      padding-left: 3vw;\n      h2 {\n        font-size: 3vw;\n      }\n      h1,\n      h2,\n      h3 {\n        text-align: left;\n        margin-left: 100vh;\n        margin-bottom: 2vw;\n      }\n\n      h3 {\n        font-size: 3vw;\n      }\n    }\n\n    .slide [json] {\n      background: url(pics/p2.jpg);\n    }\n\n    .slide [krakoziabry] {\n      background: url(pics/krakoziabry.jpg);\n      background-size: cover;\n    }\n\n    .slide [endianness] {\n      background: url(pics/endianness.png);\n      background-size: 80vw !important;\n    }\n\n    .slide [pelmen] {\n      background: url(pics/pelmeni.jpg);\n      background-size: cover;\n\n      h1 {\n        font-size: 10vw;\n        text-shadow: 0 0 1vw #ffffff;\n      }\n    }\n\n    .slide [kaitai] {\n      background: url(pics/kaitai.png);\n      background-size: 400px 400px !important;\n      background-color: #fff;\n\n      h1 {\n        font-size: 3vw;\n      }\n      h2 {\n        text-align: center;\n        font-size: 2vw;\n      }\n    }\n\n    .slide [gif] {\n      background: url(pics/zoom.gif);\n    }\n\n    .slide #binary-abstraction {\n      background: url(pics/binary-abstraction.jpg);\n    }\n\n    .slide [message],\n    [gif] .slide {\n      background: url(pics/gdg-binary.jpg);\n    }\n\n    .slide [gif-bg],\n    [gif-bg] .slide {\n      background: url(pics/little.gif);\n    }\n    .slide [bg],\n    [bg] .slide {\n      background-repeat: no-repeat;\n      background-size: cover;\n    }\n\n    .slide [vs] {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .slide h1 {\n      font-size: 5vw;\n      color: #444;\n      text-align: center;\n    }\n\n    h2 {\n      font-size: 4vw;\n      margin-bottom: 2vw;\n    }\n\n    [bg] h1 {\n      margin-top: 40px;\n      font-size: 10vw;\n      text-shadow: 0 3px 20px #fff, 0 -3px 20px #fff, -3px 0 20px #fff,\n        3px 0 20px #fff;\n    }\n\n    [bg] h2 {\n      font-size: 6vw;\n      text-shadow: 0 3px 20px #fff, 0 -3px 20px #fff, -3px 0 20px #fff,\n        3px 0 20px #fff;\n    }\n\n    td {\n      font-size: 2vw;\n      font-weight: 300;\n      padding: 1vw;\n    }\n  }\n\n  [bg] h1 b,\n  [bg] h2 b {\n    background: transparent;\n    font-weight: bold;\n  }\n}\n\n.compare-json {\n  width: 50%;\n}\n\n.compare-serialization {\n  padding: 0 20vw;\n}\n\n#gif-structure {\n  .text,\n  li {\n    font-size: 3vw;\n  }\n  h2 {\n    margin-bottom: 1vw;\n  }\n\n  .text {\n    margin-bottom: 2vw;\n  }\n}\n\n[binary-schema] {\n  table {\n    width: 100%;\n  }\n  td {\n    font-size: 4vw;\n    font-weight: 400;\n  }\n}\n\n#gif-structure {\n  .parent-palette {\n    background: #00ff51;\n  }\n\n  .parent-header {\n    background: #ffaf00;\n  }\n\n  .parent-extensions {\n    background: #00a4ff;\n  }\n}\n\n#bitwise-to-read .book {\n  background-image: url(./pics/hackers-delight.jpeg);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { strToBin } from './parser/utils';\n\ndeclare const require;\n\nconst littleGif = require('!binary-loader!./pics/little.gif');\nconst chikinGif = require('!binary-loader!./pics/chikin.gif');\n\n@Component({\n  selector: 'kirjs-binary',\n  templateUrl: './binary.component.html',\n  styleUrls: ['./binary.component.scss']\n})\nexport class BinaryComponent {\n  fontSize = 30;\n\n  binaryLittleGif = strToBin(littleGif);\n  binaryChikinGif = strToBin(chikinGif);\n\n  code = {\n    message: `['01001011', '01001111',\n '01010100', '01001100',\n '01001001', '01001110',\n '00100000', '00111110',\n '00100000', '01001010',\n '01000001', '01010110',\n '01000001'\n]\n\n\n\n\n\n\n// .map(\n//   a => String.fromCharCode(\n//   parseInt(a, 2)))\n//   .join('');\n`,\n    simpleBinaryOperations: `let i = 7; // 7 = 1 + 2 + 4\n!!(i & 1) // true\n!!(i & 2) // true\n!!(i & 4) // true\n\ni = i & ~2; // 5 = 1 + 4 (Not 2)\n\n!!(i & 1) // true\n!!(i & 2) // false\n!!(i & 4) // true\n\ni = i | 2  // 7 = 1 + 2 + 4\n\n!!(i & 1) // true\n!!(i & 2) // true\n!!(i & 4) // true\n\n\n`,\n    jsonBasic: `{\n  \"name\": \"Sarah\",\n  \"test\": true,\n  \"something\": 1212\n}`,\n    jsonOne: `{\n  \"str\": \"1\",\n  \"number\": 1,\n  \"bool\": true\n}`,\n    inputFile: '<input id = \"\" type=\"file\">',\n    fileHandlerHighlight: { match: /read/, className: 'highlighted-code' },\n    fileHandler: `const input = document.getElementById('file');\ninput.addEventListener('change', (e) => {\n  const reader = new FileReader();\n\n  reader.onloadend = (e) => {\n    console.log(e.target.result);\n  };\n\n  reader.readAsString(input.files[0]);\n});\n`,\n    fileHandlerBinary: `const input = document.getElementById('file');\ninput.addEventListener('change', (e) => {\n  const reader = new FileReader();\n\n  reader.onloadend = (e) => {\n    console.log(e.target.result);\n  };\n\n  reader.readAsArrayBuffer(input.files[0]);\n});`\n  };\n\n  littleGif = littleGif;\n  chikinGif = chikinGif;\n\n  binaryParserHeaderMatch = /parent-header/;\n  binaryParserHeaderHelpers = [\n    `new Parser();`,\n    `new Parser()\n      .string('gif', {length: 3})\n    `,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n    `,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16('width')\n    `,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n    `,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n    `,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n      .bit1('globalPalette')\n    `,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n      .bit1('globalPalette')\n      .bit3('resolution')\n      .bit1('paletteSorted')\n      .bit3('paletteSize')\n      .uint8('background')\n      .uint8('ratio')\n    `\n  ];\n\n  reactBitmask = `// Don't change these two values. They're used by React Dev Tools.\nvar NoEffect = /*              */0;\nvar PerformedWork = /*         */1;\n\n// You can change the rest (and add more).\nvar Placement = /*             */2;\nvar Update = /*                */4;\nvar PlacementAndUpdate = /*    */6;\nvar Deletion = /*              */8;\nvar ContentReset = /*          */16;\nvar Callback = /*              */32;\nvar DidCapture = /*            */64;\nvar Ref = /*                   */128;\nvar Snapshot = /*              */256;\nvar Passive = /*               */512;\n\n// Passive & Update & Callback & Ref & Snapshot\nvar LifecycleEffectMask = /*   */932;\n\n// Union of all host effects\nvar HostEffectMask = /*        */1023;\n\nvar Incomplete = /*            */1024;\nvar ShouldCapture = /*         */2048;`;\n\n  binaryParserPaletteMatch = /parent-palette/;\n  binaryParserPaletteHelpers = [\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n      .bit1('globalPalette')\n      .bit3('resolution')\n      .bit1('paletteSorted')\n      .bit3('paletteSize')\n      .uint8('background')\n      .uint8('ratio')`,\n\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n      .bit1('globalPalette')\n      .bit3('resolution')\n      .bit1('paletteSorted')\n      .bit3('paletteSize')\n      .uint8('background')\n      .uint8('ratio')\n      .array('palette', {\n        type: new Parser().bit24('color'),\n        length: 4\n        }\n      )`,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n      .bit1('globalPalette')\n      .bit3('resolution')\n      .bit1('paletteSorted')\n      .bit3('paletteSize')\n      .uint8('background')\n      .uint8('ratio')\n      .array('palette', {\n        type: new Parser().bit24('color'),\n        length: (result) =>\n            2 ** (result.paletteSize + 1)\n        }\n      )`,\n    `new Parser()\n      .string('gif', {length: 3})\n      .string('version', {length: 3})\n      .uint16le('width')\n      .uint16le('height')\n      .bit1('globalPalette')\n      .bit3('resolution')\n      .bit1('paletteSorted')\n      .bit3('paletteSize')\n      .uint8('background')\n      .uint8('ratio')\n      .array('palette', {\n        type: new Parser()\n          .uint8('r')\n          .uint8('g')\n          .uint8('b'),\n        length: (result) =>\n            2 ** (result.paletteSize + 1)\n        }\n      )`\n  ];\n\n  //\n  // `file.byteLength`,\n  // `String.fromCharCode(...new Uint8Array(file))`,\n  //   // `// Let's test how many arguments we can apply\n  //   // String.fromCharCode(...Array.from(new Array(100)))`,\n  //   // `String.fromCharCode(...Array.from(new Array(10000)))`,\n  //   // `String.fromCharCode(...Array.from(new Array(100000)))`,\n  //   // `String.fromCharCode(...Array.from(new Array(1000000)))`,\n  //   // `String.fromCharCode(...Array.from(new Array(125307)))`,\n  //   // `\n  //   // // read more:\n  //   https://stackoverflow.com/questions/22747068/is-there-a-max-number-of-arguments-javascript-functions-can-accept\n  //   // String.fromCharCode(...Array.from(new Array(125306)))`,\n  // `String.fromCharCode(...new Uint8Array(file))`,\n  // `Array.from(new Uint8Array(file)).map(a=>a.toString(2).padStart(8, 0)).join('')`,\n\n  // <input id=\"file\" type=\"file\">\n  //   document.getElementById('file').addEventListener('change', (e)=>{\n  //   const reader = new FileReader();\n  //\n  //   reader.onloadend = (e) => {\n  //     file = e.target.result;\n  //     console.log(file);\n  //   };\n  //\n  //   reader.readAsArrayBuffer(e.target.files[0]);\n  // })\n\n  // gif = {\n  //   width: \"4\",\n  //   height: \"4\",\n  //   image: [\n  //     '#f00', '#f00', '#f00', '#f00',\n  //     '#f90', '#f0f', '#f00', '#f00',\n  //     '#f90', '#f0f', '#f00', '#f00',\n  //     '#f90', '#f0f', '#f00', '#f00',\n  //   ]\n  // }\n\n  commands = [\n    `\\`\n\n\n\n\n\n        @kirjs\n        Binary ❤️ JavaScript\n\n\n\n\n    \\``,\n    `<input id=\"file\" type=\"file\">`,\n    `\n    document.getElementById('file').addEventListener('change', (e)=>{\n      const reader = new FileReader();\n\n      reader.onloadend = (e) => {\n        file = e.target.result;\n        console.log(file);\n      };\n\n      reader.readAsArrayBuffer(e.target.files[0]);\n    })`,\n\n    `file.byteLength`,\n    `String.fromCharCode(...new Uint8Array(file))`,\n    // `// Let's test how many arguments we can apply\n    //  String.fromCharCode(...Array.from(new Array(100)))`,\n    // `String.fromCharCode(...Array.from(new Array(10000)))`,\n    // `String.fromCharCode(...Array.from(new Array(100000)))`,\n    // `String.fromCharCode(...Array.from(new Array(1000000)))`,\n    // `String.fromCharCode(...Array.from(new Array(125307)))`,\n    // `\n    // // read more: https://stackoverflow.com/questions/22747068/is-there-a-max-number-of-arguments-javascript-functions-can-accept\n    // String.fromCharCode(...Array.from(new Array(125306)))`,\n    `String.fromCharCode(...new Uint8Array(file))`,\n    `Array.from(new Uint8Array(file)).map(a=>a.toString(2).padStart(8, 0)).join('')`,\n\n    `explain('message', 'basic')`,\n    `explain('message', 'bytes')`,\n    `explain('bindec', 'uint8')`,\n    `parseInt('01010101', 2)`,\n    `explain('bindec', 'int8')`,\n    `explain('message', 'uint8')`,\n    `explain('ascii')`,\n    `explain('message', 'string')`,\n\n    `explain('compare')`,\n    `explain('json')`,\n    `explain('gif')`,\n    `\n     // Let's reinvent gif with JSON:\n\n\n     gif = {\n        width: \"4\",\n        height: \"4\",\n        image: [\n        '#f00', '#f00', '#f00', '#f00',\n        '#f90', '#f0f', '#f00', '#f00',\n        '#f90', '#f0f', '#f00', '#f00',\n        '#f90', '#f0f', '#f00', '#f00',\n        ]\n     }\n\n    `,\n    `\n     // Let's index the colors\n\n\n     gif = {\n        width: \"4\",\n        height: \"4\",\n        colors: ['#f00', '#f90',  '#f0f'],\n        image: [\n          0, 0, 0, 0,\n          1, 2, 0, 0,\n          1, 2, 0, 0,\n          1, 0 ,2 , 0\n        ]\n     }\n\n    `,\n    `JSON.stringify(gif)`,\n    `JSON.stringify(gif).length`,\n\n    `\"010010010111010000100000011010010111001100100000011000110110111101101101011011010110111101101110001\"\n\n\n    `,\n\n    `explain('gif')`,\n\n    `// How to read binary data?`\n  ];\n  private evaledMessage: string;\n\n  evalMessage() {\n    this.evaledMessage = eval(this.code.message);\n  }\n\n  setLittleGifBinary(value: string) {\n    this.littleGif = value;\n    this.binaryLittleGif = strToBin(value);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/binary.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { ConsoleModule } from '@codelab/console';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { SharedPipeModule } from '@codelab/utils/src/lib/pipes/pipes.module';\nimport { BinaryComponent } from './binary.component';\nimport { FakeGifComponent } from './fake-gif/fake-gif.component';\nimport { GifPaletteComponent } from './gif-palette/gif-palette.component';\nimport { BinaryViewModule } from './binary-view/binary-view.module';\nimport { MidiComponent } from './midi/midi.component';\nimport { AsciiComponent } from './ascii/ascii.component';\nimport { BindecComponent } from './bindec/bindec.component';\nimport { MessageComponent } from './message/message.component';\nimport { JsonComponent } from './json/json.component';\nimport { CompareComponent } from './compare/compare.component';\nimport { HtmlPostComponent } from './html-post/html-post.component';\nimport { NewProgressBarModule } from '../ast/new-progress-bar/new-progress-bar.module';\nimport { BinaryGifComponent } from './binary-gif/binary-gif.component';\nimport { BitComponent } from './bit/bit.component';\nimport { MemoryComponent } from './memory/memory.component';\nimport { BinaryParserDemoComponent } from './binary-parser-demo/binary-parser-demo.component';\nimport { HexdecComponent } from './hexdec/hexdec.component';\nimport { AngularFlagsComponent } from './angular-flags/angular-flags.component';\nimport { ColorIndexingComponent } from './color-indexing/color-indexing.component';\nimport { BitwiseComponent } from './bitwise/bitwise.component';\nimport { ToReadComponent } from './to-read/to-read.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(BinaryComponent));\n\n@NgModule({\n  imports: [\n    routes,\n    FormsModule,\n    CommonModule,\n    BinaryViewModule,\n    CodeDemoModule,\n    MatAutocompleteModule,\n    SharedPipeModule,\n    ConsoleModule,\n\n    NewProgressBarModule,\n    MatSelectModule,\n    SlidesModule,\n    FeedbackModule\n  ],\n  declarations: [\n    BinaryComponent,\n    FakeGifComponent,\n    GifPaletteComponent,\n    MidiComponent,\n    AsciiComponent,\n    BindecComponent,\n    MessageComponent,\n    JsonComponent,\n    CompareComponent,\n    HtmlPostComponent,\n    BinaryGifComponent,\n    BitComponent,\n    MemoryComponent,\n    BinaryParserDemoComponent,\n    HexdecComponent,\n    AngularFlagsComponent,\n    ColorIndexingComponent,\n    BitwiseComponent,\n    ToReadComponent\n  ],\n  entryComponents: [\n    FakeGifComponent,\n    MidiComponent,\n    AsciiComponent,\n    BindecComponent,\n    MessageComponent,\n    JsonComponent,\n    HtmlPostComponent,\n    CompareComponent\n  ],\n  exports: [BinaryComponent]\n})\nexport class BinaryModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bindec/bindec.component.css",
    "content": ".powers {\n  display: flex;\n  font-size: 5vw;\n  justify-content: center;\n}\n\n.power {\n  width: 12.5%;\n  border: 1px #ddd dotted;\n  text-align: center;\n  cursor: pointer;\n}\n\n.power:hover {\n  box-shadow: 0 0 12px 6px #999;\n  background: #eeeeee;\n}\n\n.power input {\n  zoom: 4;\n}\n\n.dec {\n  font-size: 3vw;\n  color: #444;\n}\n.bin {\n  font-size: 10vw;\n}\n.number {\n  width: 100%;\n  text-align: center;\n  font-size: 16vw;\n  padding: 2vw;\n}\n\n.link:hover {\n  color: #90cd79;\n}\n.link {\n  border-bottom: 1px #999 dotted;\n  margin-right: 20px;\n  cursor: pointer;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bindec/bindec.component.html",
    "content": "<div class=\"powers\">\n  <label *ngIf=\"displaySign\" class=\"power\">\n    <div class=\"dec\">{{ sign ? '-' : '+' }}</div>\n    <div><input type=\"checkbox\" [(ngModel)]=\"sign\" /></div>\n    <div class=\"bin\">{{ sign ? '1' : '0' }}</div>\n  </label>\n  <label *ngFor=\"let v of digits; let i = index\" class=\"power\">\n    <div class=\"dec\">{{ getBaseValue(i) }}</div>\n    <div>\n      <input type=\"checkbox\" [checked]=\"v\" (ngModelChange)=\"result[i] = v\" />\n    </div>\n    <div class=\"bin\">{{ v ? '1' : '0' }}</div>\n  </label>\n</div>\n<input type=\"text\" class=\"number\" [value]=\"convertedValue\" />\n<div style=\"display: flex;margin-top: 10px;\">\n  <div class=\"link\" (click)=\"digits = [0]\">1</div>\n  <div class=\"link\" (click)=\"digits = [0, 0]\">2</div>\n  <div class=\"link\" (click)=\"digits = [0, 0, 0, 0]\">4</div>\n  <div class=\"link\" (click)=\"digits = [0, 0, 0, 0, 0, 0, 0, 0]\">8</div>\n  <div class=\"link\" (click)=\"digits.unshift(0)\">Add one</div>\n  <div class=\"link\" (click)=\"digits.shift()\">Remove one</div>\n  <div class=\"link\" (click)=\"displaySign = true\">Add sign</div>\n  <div class=\"link\" (click)=\"displaySign = false; sign = false\">\n    Remove sign\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bindec/bindec.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BindecComponent } from './bindec.component';\n\ndescribe('BindecComponent', () => {\n  let component: BindecComponent;\n  let fixture: ComponentFixture<BindecComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BindecComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BindecComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bindec/bindec.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-bindec',\n  templateUrl: './bindec.component.html',\n  styleUrls: ['./bindec.component.css']\n})\nexport class BindecComponent implements OnInit {\n  digits = [0];\n  result = [0];\n  displaySign = false;\n  sign = false;\n\n  constructor() {}\n\n  get size() {\n    return this.digits.length;\n  }\n\n  get convertedValue() {\n    return (\n      (this.sign ? -1 : 1) *\n      this.result.reduce(\n        (result, value, index) => result + value * this.getBaseValue(index),\n        0\n      )\n    );\n  }\n\n  getBaseValue(i: number) {\n    return 2 ** (this.size - i - 1);\n  }\n\n  update(value) {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bit/bit.component.css",
    "content": ".bits {\n  display: flex;\n  margin-bottom: 4vw;\n}\n\n.size-16 .bit {\n  font-size: 5vw;\n}\n\n.size-24 .bit {\n  font-size: 4vw;\n}\n.size-32 .bit {\n  font-size: 2.5vw;\n}\n\n.bit {\n  font-size: 10vw;\n  margin-left: 1vw;\n  color: #444;\n  border-bottom: 0.2vw #888 solid;\n}\n\n.label {\n  color: #999;\n  border: none;\n  margin-right: 2vw;\n}\n\n:host ::ng-deep .content.content.content table td {\n  font-size: 4vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bit/bit.component.html",
    "content": "<div class=\"bits size-{{ bitValue.length }}\" style=\"display: flex;\">\n  <div class=\"bit label\">{{ bitValue.length }} bits:</div>\n  <div class=\"bit\" *ngFor=\"let value of bitValue\">{{ value }}</div>\n</div>\n\n<div class=\"content\"><ng-content></ng-content></div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bit/bit.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BitComponent } from './bit.component';\n\ndescribe('BitComponent', () => {\n  let component: BitComponent;\n  let fixture: ComponentFixture<BitComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BitComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BitComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bit/bit.component.ts",
    "content": "import { Component, Input, OnDestroy, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-bit',\n  templateUrl: './bit.component.html',\n  styleUrls: ['./bit.component.css']\n})\nexport class BitComponent implements OnInit, OnDestroy {\n  bits = 7;\n  @Input() param = 1;\n\n  bitValue: number[] = [];\n\n  private interval = setInterval(() => {\n    this.generate();\n  }, 500);\n\n  generate() {\n    this.bitValue = Array.from({ length: this.param }).map(a =>\n      Math.round(Math.random())\n    );\n  }\n\n  ngOnDestroy() {\n    clearInterval(this.interval);\n  }\n\n  ngOnInit() {\n    this.generate();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bitwise/bitwise.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bitwise/bitwise.component.html",
    "content": "<p>bitwise works!</p>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bitwise/bitwise.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BitwiseComponent } from './bitwise.component';\n\ndescribe('BitwiseComponent', () => {\n  let component: BitwiseComponent;\n  let fixture: ComponentFixture<BitwiseComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BitwiseComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BitwiseComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/bitwise/bitwise.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-bitwise',\n  templateUrl: './bitwise.component.html',\n  styleUrls: ['./bitwise.component.css']\n})\nexport class BitwiseComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/color-indexing/color-indexing.component.css",
    "content": ".cell {\n  width: 8vw;\n  height: 8vw;\n  text-align: center;\n  font-size: 3vw !important;\n  vertical-align: middle;\n  line-height: 8vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/color-indexing/color-indexing.component.html",
    "content": "<div vertical-split style=\"padding: 2vw;\">\n  <div>\n    <h2 i18n>Unindexed image</h2>\n    <table>\n      <tr *ngFor=\"let row of noIndexing; let r = index\">\n        <td\n          *ngFor=\"let cell of row; let c = index\"\n          [style.background]=\"cell\"\n          class=\"cell\"\n          contenteditable=\"true\"\n          (keydown.control.enter)=\"\n            noIndexing[r][c] = $event.target.innerText.trim(); generate()\n          \"\n        >\n          {{ cell }}\n        </td>\n      </tr>\n    </table>\n  </div>\n  <div>\n    <h2 i18n>Color table (Palette)</h2>\n    <div style=\"display: flex;flex-wrap: wrap\">\n      <div\n        *ngFor=\"let color of colorTable\"\n        [style.background]=\"color.color\"\n        class=\"cell\"\n      >\n        {{ color.index }}\n      </div>\n    </div>\n    <h2 i18n>Indexed image</h2>\n    <table>\n      <tr *ngFor=\"let row of noIndexing\">\n        <td *ngFor=\"let cell of row\" [style.background]=\"cell\" class=\"cell\">\n          {{ hash[cell] }}\n        </td>\n      </tr>\n    </table>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/color-indexing/color-indexing.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ColorIndexingComponent } from './color-indexing.component';\n\ndescribe('ColorIndexingComponent', () => {\n  let component: ColorIndexingComponent;\n  let fixture: ComponentFixture<ColorIndexingComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ColorIndexingComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ColorIndexingComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/color-indexing/color-indexing.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\ninterface TableItem {\n  color: string;\n  index: number;\n}\n\ninterface ColorTableHash {\n  [key: string]: number;\n}\n\n@Component({\n  selector: 'kirjs-color-indexing',\n  templateUrl: './color-indexing.component.html',\n  styleUrls: ['./color-indexing.component.css']\n})\nexport class ColorIndexingComponent implements OnInit {\n  noIndexing = [\n    ['#ff0000', '#ff0000', '#ff0000'],\n    ['#fff000', '#ff0000', '#fff000'],\n    ['#ff0000', '#ff0000', '#ff0000']\n  ];\n\n  colorTable: TableItem[];\n  hash: ColorTableHash;\n\n  constructor() {\n    this.generate();\n  }\n\n  index() {\n    const index = this.noIndexing.reduce((colors, row) => {\n      return row.reduce((colors, cell) => {\n        colors[cell] = true;\n        return colors;\n      }, colors);\n    }, {});\n    return Object.keys(index).map((color, index) => ({ color, index }));\n  }\n\n  generate() {\n    this.colorTable = this.index();\n    this.hash = this.colorTable.reduce(\n      (hash: ColorTableHash, value: TableItem): ColorTableHash => {\n        hash[value.color] = value.index;\n        return hash;\n      },\n      {}\n    );\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/compare/compare.component.css",
    "content": ".slide {\n  flex: 0 0 100vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/compare/compare.component.html",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/compare/compare.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { CompareComponent } from './compare.component';\n\ndescribe('CompareComponent', () => {\n  let component: CompareComponent;\n  let fixture: ComponentFixture<CompareComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [CompareComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(CompareComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/compare/compare.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-compare',\n  templateUrl: './compare.component.html',\n  styleUrls: ['./compare.component.css']\n})\nexport class CompareComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/fake-gif/fake-gif.component.css",
    "content": "* {\n  font-family: Monaco, 'Lucida Console', monospace;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/fake-gif/fake-gif.component.html",
    "content": "<div style=\"position: fixed; right: 0; top: 0;width: 250px;\" *ngIf=\"preview\">\n  <kirjs-binary-gif [binary]=\"binary\"></kirjs-binary-gif>\n  <input type=\"file\" (change)=\"upload(file)\" #file />\n</div>\n\n<div #translations style=\"display: none\">\n  <div i18n id=\"headerConst\">This is always \"GIF\"</div>\n  <div i18n id=\"version\">This is always \"87a\" or \"89a\"</div>\n  <div i18n id=\"width\">Width of the image</div>\n  <div i18n id=\"height\">Height of the image</div>\n\n  <div i18n id=\"globalPalette\">Whether global palette is present</div>\n  <div i18n id=\"resolution\">Number of bits per primary color available</div>\n  <div i18n id=\"isPaletteSorted\">Whether the palette is sorted</div>\n  <div i18n id=\"paletteSize\">\n    Specifies number of colors in the palette proportional a power of two. e.g.\n  </div>\n  <div i18n id=\"background\">\n    If present specifies index of a color in the global color table that would\n    be transparent\n  </div>\n  <div i18n id=\"ratio\">Ratio of the pixel</div>\n\n  <div i18n id=\"reservedBits\">Reserved bits</div>\n  <div i18n id=\"disposalMethod\">\n    Disposal Method - Indicates the way in which the graphic is to be treated\n    after being displayed. Values : 0 - No disposal specified. The decoder is\n    not required to take any action. 1 - Do not dispose. The graphic is to be\n    left in place. 2 - Restore to background color. The area used by the graphic\n    must be restored to the background color. 3 - Restore to previous. The\n    decoder is required to restore the area overwritten by the graphic with what\n    was there prior to rendering the graphic. 4-7 - To be defined.\n  </div>\n  <div i18n id=\"UI\">\n    Not used, the initial intention was to allow user interactions\n  </div>\n  <div i18n id=\"isTransparent\">\n    Whether the frame should have a transparent color\n  </div>\n  <div i18n id=\"delay\">Animation delay for next image</div>\n  <div i18n id=\"transparentColor\">Optional transparent color index</div>\n  <div i18n id=\"left\">Horizontal shift in pixels</div>\n  <div i18n id=\"top\">Vertical shift in pixels</div>\n  <div i18n id=\"imageWidth\">Width of the image</div>\n  <div i18n id=\"imageHeight\">Height of the image</div>\n  <div i18n id=\"localPalette\">Whether the image has local palette</div>\n  <div i18n id=\"isImageInterlacingEnabld\">\n    Indicates if the image is interlaced.\n  </div>\n  <div i18n id=\"isLocalPaletteSorted\">Whether local palette is sorted</div>\n  <div i18n id=\"localPaletteSize\">Bucket of sizes of local palette.</div>\n\n  <div i18n id=\"netscapeLoopingExtensionId\">\n    Identifies the Netscape Looping Extension. This field contains the fixed\n    value 0x01\n  </div>\n  <div i18n id=\"extensionSize\">Size of the extension block in bytes</div>\n  <div i18n id=\"loops\">Number of animation loops</div>\n  <div i18n id=\"graphicBlock\">This is the actual image encoded with LZW</div>\n</div>\n\n<div>\n  <div style=\"margin-right: 220px;\">\n    <kirjs-binary-plain\n      (updateChunk)=\"updateChunk($event)\"\n      [parser]=\"parser\"\n      [binary]=\"binary\"\n      [spacing]=\"spacing\"\n      [mini]=\"mini\"\n      [showPopups]=\"showPopups\"\n      [filterClassName]=\"filterClassName\"\n      [highlightGroups]=\"highlightGroups\"\n      [highlightedMap]=\"highlightedMap\"\n    ></kirjs-binary-plain>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/fake-gif/fake-gif.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { FakeGifComponent } from './fake-gif.component';\n\ndescribe('FakeGifComponent', () => {\n  let component: FakeGifComponent;\n  let fixture: ComponentFixture<FakeGifComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [FakeGifComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FakeGifComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/fake-gif/fake-gif.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { BinaryParser } from '../parser/binary-parser';\nimport { gifParser } from './gif-parser';\nimport { extractMessages } from '@codelab/utils/src/lib/i18n/i18n-tools';\n\ninterface Chunk {\n  name: string;\n  size: number;\n  value: string;\n  start?: number;\n}\n\n@Component({\n  selector: 'kirjs-fake-gif',\n  templateUrl: './fake-gif.component.html',\n  styleUrls: ['./fake-gif.component.css']\n})\nexport class FakeGifComponent implements AfterViewInit {\n  t: { [key: string]: string };\n  @Input()\n  spacing = false;\n  showMeta = true;\n  @Input() binary: string;\n  @Input() highlightedMap: Record<string, boolean> = {};\n  @Input() highlightGroups = false;\n  @Input() preview = true;\n  @Input() filterClassName = /./;\n  @Input() mini = false;\n  @Input() showPopups = false;\n  @Output() binaryUpdate = new EventEmitter();\n  gif: string;\n  parser: BinaryParser;\n\n  @ViewChild('translations', { static: false }) translation;\n\n  constructor() {}\n\n  upload(file) {\n    const reader = new FileReader();\n\n    reader.onloadend = (e: any) => {\n      const result = new Uint8Array(e.target.result);\n      const binaries = Array.from(result)\n        .map(a => a.toString(2))\n        .map(a => (a as any).padStart(8, 0));\n      this.binary = binaries.join('');\n    };\n\n    reader.readAsArrayBuffer(file.files[0]);\n  }\n\n  update(chunk, value) {\n    const len = chunk.end - chunk.start;\n    value = value.padEnd(len, 0).slice(0, len);\n    this.binary =\n      this.binary.slice(0, chunk.start) + value + this.binary.substr(chunk.end);\n    this.binaryUpdate.emit(this.binary);\n  }\n\n  ngAfterViewInit() {\n    requestAnimationFrame(() => {\n      this.t = extractMessages(this.translation);\n      this.parser = new BinaryParser().block('gif', gifParser(this.t));\n    });\n  }\n\n  updateChunk({ chunk, value }) {\n    this.update(chunk, value);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/fake-gif/gif-parser.ts",
    "content": "import { BinaryParser } from '../parser/binary-parser';\nimport { lzw } from './gif';\n\nexport function gifParser(t: { [key: string]: string }) {\n  const header = new BinaryParser()\n    .string('headerConst', { length: 3, description: t.headerConst })\n    .string('version', { length: 3, description: t.version })\n    .uInt16('width', { description: t.width })\n    .uInt16('height', { description: t.height })\n    .boolean('globalPalette', { description: t.globalPalette })\n    .bit3('resolution', { type: 'number', description: t.resolution })\n    .boolean('isPaletteSorted', { description: t.isPaletteSorted })\n    .bit3('paletteSize', { type: 'number', description: t.paletteSize })\n    .uInt8('background', { description: t.background })\n    .uInt8('Ratio', { description: t.ratio });\n\n  const commentParser = new BinaryParser()\n    .string('comment', { readUntil: '00000000' })\n    .hex('end', { length: 2 });\n\n  const palette = new BinaryParser().array('palette', {\n    parser: new BinaryParser().hex('color', {\n      length: 6,\n      type: 'color'\n    }),\n    length(data) {\n      const paletteSize = data\n        .find(d => d.name === '_parent')\n        .value.find(d => d.name === 'header')\n        .value.find(d => d.name === 'paletteSize').value;\n      const size = parseInt(paletteSize, 2);\n      return 2 ** (size + 1);\n    }\n  });\n\n  const netscapeParser = new BinaryParser()\n    .uInt8('extensionSize', { description: t.extensionSize })\n    .constBits('00000001', { description: t.netscapeLoopingExtensionId })\n    .uInt16('loops', { description: t.loops })\n    .constBits('00000000', { description: '' });\n\n  const xmpParser = new BinaryParser()\n    .string('data', {\n      readUntil: '00000000'\n    })\n    .hex('end', { length: 4 });\n\n  const extensionParser = new BinaryParser()\n    .hex('0b', { length: 2 })\n    .string('type', { length: 8 })\n    .string('code', { length: 3 })\n    .choice('data', {\n      key: 'type',\n      values: {\n        NETSCAPE: netscapeParser,\n        'XMP Data': xmpParser\n      }\n    });\n\n  const graphicControlParser = new BinaryParser()\n    .hex('const', { length: 2 })\n    .constBits('000', { description: t.reservedBits })\n    .bit3('disposalMethod', { type: 'enums', description: t.disposalMethod })\n    .boolean('UI', { description: t.UI })\n    .boolean('isTransparent', { description: t.isTransparent })\n    .uInt16('delay', { description: t.delay })\n    .uInt8('transparentColor', { description: t.transparentColor })\n    .constBits('00000000');\n\n  const exclamationMarkParser = new BinaryParser()\n    .hex('subtype', { length: 2 })\n    .choice('extension', {\n      key: 'subtype',\n      values: {\n        f9: graphicControlParser,\n        ff: extensionParser,\n        fe: commentParser\n      }\n    });\n\n  const imageDescriptorParser = new BinaryParser()\n    .uInt16('left', { description: t.left })\n    .uInt16('top', { description: t.top })\n    .uInt16('imageWidth', { description: t.imageWidth })\n    .uInt16('imageHeight', { description: t.imageHeight })\n    .boolean('localPalette', { description: t.localPalette })\n    .boolean('isImageInterlacingEnabld', {\n      description: t.isImageInterlacingEnabld\n    })\n    .boolean('isLocalPaletteSorted', { description: t.isLocalPaletteSorted })\n    .constBits('00', { description: t.reservedBits })\n    .bit3('localPaletteSize', {\n      type: 'enums',\n      description: t.localPaletteSize\n    })\n    .uInt8('colorDepth')\n    .uInt8('blockSize')\n    .bit('graphicBlock', {\n      description: t.graphicBlock,\n      length: fields => {\n        return (\n          (Object as any).values(fields).find(a => a.name === 'blockSize')\n            .value * 8\n        );\n      },\n      converter(bits) {\n        return lzw(\n          2,\n          bits.match(/.{8}/g).map(a => parseInt(a, 2)),\n          4\n        );\n      }\n    })\n    .constBits('00000000');\n\n  const body = new BinaryParser()\n    .string('marker', { length: 1 })\n    .choice('extension', {\n      key: 'marker',\n      values: {\n        '!': exclamationMarkParser,\n        ';': new BinaryParser(),\n        ',': imageDescriptorParser\n      }\n    });\n\n  return new BinaryParser()\n    .block('header', header)\n    .block('palette', palette)\n    .array('extensions', { parser: body, length: 200 });\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/fake-gif/gif.ts",
    "content": "export function lzw(minCodeSize, data, pixelCount) {\n  const MAX_STACK_SIZE = 4096;\n  const nullCode = -1;\n\n  const npix = pixelCount;\n  let available,\n    clear,\n    code_mask,\n    code_size,\n    end_of_information,\n    in_code,\n    old_code,\n    bits,\n    code,\n    i,\n    datum,\n    data_size,\n    first,\n    top,\n    bi,\n    pi;\n\n  const dstPixels = new Array(pixelCount);\n  const prefix = new Array(MAX_STACK_SIZE);\n  const suffix = new Array(MAX_STACK_SIZE);\n  const pixelStack = new Array(MAX_STACK_SIZE + 1);\n\n  // Initialize GIF data stream decoder.\n  data_size = minCodeSize;\n  clear = 1 << data_size;\n  end_of_information = clear + 1;\n  available = clear + 2;\n  old_code = nullCode;\n  code_size = data_size + 1;\n  code_mask = (1 << code_size) - 1;\n  for (code = 0; code < clear; code++) {\n    prefix[code] = 0;\n    suffix[code] = code;\n  }\n\n  // Decode GIF pixel stream.\n  datum = bits = first = top = pi = bi = 0;\n\n  for (i = 0; i < npix; ) {\n    if (top === 0) {\n      if (bits < code_size) {\n        // get the next byte\n        datum += data[bi] << bits;\n\n        bits += 8;\n        bi++;\n        continue;\n      }\n      // Get the next code.\n      code = datum & code_mask;\n      datum >>= code_size;\n      bits -= code_size;\n      // Interpret the code\n      if (code > available || code === end_of_information) {\n        break;\n      }\n\n      if (code === clear) {\n        // Reset decoder.\n        code_size = data_size + 1;\n        code_mask = (1 << code_size) - 1;\n        available = clear + 2;\n        old_code = nullCode;\n        continue;\n      }\n      if (old_code === nullCode) {\n        pixelStack[top++] = suffix[code];\n        old_code = code;\n        first = code;\n        continue;\n      }\n      in_code = code;\n      if (code === available) {\n        pixelStack[top++] = first;\n        code = old_code;\n      }\n      while (code > clear) {\n        pixelStack[top++] = suffix[code];\n        code = prefix[code];\n      }\n\n      first = suffix[code] & 0xff;\n      pixelStack[top++] = first;\n\n      // add a new string to the table, but only if space is available\n      // if not, just continue with current table until a clear code is found\n      // (deferred clear code implementation as per GIF spec)\n      if (available < MAX_STACK_SIZE) {\n        prefix[available] = old_code;\n        suffix[available] = first;\n        available++;\n        if ((available & code_mask) === 0 && available < MAX_STACK_SIZE) {\n          code_size++;\n          code_mask += available;\n        }\n      }\n      old_code = in_code;\n    }\n    // Pop a pixel off the pixel stack.\n    top--;\n    dstPixels[pi++] = pixelStack[top];\n    i++;\n  }\n\n  for (i = pi; i < npix; i++) {\n    dstPixels[i] = 0; // clear missing pixels\n  }\n\n  return dstPixels;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/gif-palette/gif-palette.component.css",
    "content": "* {\n  font-family: Monaco, 'Lucida Console', monospace;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/gif-palette/gif-palette.component.html",
    "content": "<div *ngFor=\"let color of colors\">\n  <input [value]=\"color[0]\" (change)=\"color[0] = c0.value; serialize()\" #c0 />\n  <input [value]=\"color[1]\" (change)=\"color[1] = c1.value; serialize()\" #c1 />\n  <input [value]=\"color[2]\" (change)=\"color[2] = c2.value; serialize()\" #c2 />\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/gif-palette/gif-palette.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { GifPaletteComponent } from './gif-palette.component';\n\ndescribe('GifPaletteComponent', () => {\n  let component: GifPaletteComponent;\n  let fixture: ComponentFixture<GifPaletteComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [GifPaletteComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(GifPaletteComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/gif-palette/gif-palette.component.ts",
    "content": "import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\ninterface Chunk {\n  name: string;\n  size: number;\n  value: string;\n  start?: number;\n}\n\n@Component({\n  selector: 'kirjs-gif-palette',\n  templateUrl: './gif-palette.component.html',\n  styleUrls: ['./gif-palette.component.css']\n})\nexport class GifPaletteComponent implements OnInit {\n  @Output() change = new EventEmitter<string>();\n\n  colors: number[][];\n\n  private _value = '';\n\n  get value() {\n    return this._value;\n  }\n\n  @Input()\n  set value(val: string) {\n    this._value = val;\n    this.colors = Array.from(val.match(/.{24}/g)).map(a =>\n      Array.from(a.match(/.{8}/g)).map(str => parseInt(str, 2))\n    );\n  }\n\n  serialize() {\n    this._value = this.colors\n      .map(c =>\n        c\n          .map(p => ((+p).toString(2) as any).padStart(8, 0).slice(0, 8))\n          .join('')\n      )\n      .join('');\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/hexdec/hexdec.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/hexdec/hexdec.component.html",
    "content": "<h2>Converting bin to hex</h2>\n<div style=\"display: grid; grid-template-columns:25% 25% 25% 25% \">\n  <div *ngFor=\"let n of numbers\" style=\"padding: 2vw;\">\n    <div class=\"hex\" style=\"font-size: 5vw;\">{{ n.hex }}</div>\n    <div class=\"bin\" style=\"font-size:3.5vw;color: #666;\">{{ n.bin }}</div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/hexdec/hexdec.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { HexdecComponent } from './hexdec.component';\n\ndescribe('HexdecComponent', () => {\n  let component: HexdecComponent;\n  let fixture: ComponentFixture<HexdecComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [HexdecComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(HexdecComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/hexdec/hexdec.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-hexdec',\n  templateUrl: './hexdec.component.html',\n  styleUrls: ['./hexdec.component.css']\n})\nexport class HexdecComponent implements OnInit {\n  numbers = new Array(16).fill(0).map((a, i) => ({\n    bin: i.toString(2).padStart(4, '0'),\n    hex: i.toString(16)\n  }));\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/html-post/html-post.component.css",
    "content": ":host {\n  padding: 2vw;\n  display: block;\n  zoom: 3;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/html-post/html-post.component.html",
    "content": "<div [innerHTML]=\"html\"></div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/html-post/html-post.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { HtmlPostComponent } from './html-post.component';\n\ndescribe('HtmlPostComponent', () => {\n  let component: HtmlPostComponent;\n  let fixture: ComponentFixture<HtmlPostComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [HtmlPostComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(HtmlPostComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/html-post/html-post.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n  selector: 'kirjs-html-post',\n  templateUrl: './html-post.component.html',\n  styleUrls: ['./html-post.component.css']\n})\nexport class HtmlPostComponent {\n  html: SafeHtml;\n\n  constructor(private sanitizer: DomSanitizer) {\n    this.html = sanitizer.bypassSecurityTrustHtml('');\n  }\n\n  @Input()\n  set param(html: string) {\n    this.html = this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/json/json.component.html",
    "content": "<div style=\"display: flex;\" class=\"wrapper\">\n  <div\n    class=\"code\"\n    style=\"flex: 0 0 36vw; display: flex;flex-direction: column\"\n  >\n    <h2 i18n>\n      Data as JSON (<b>{{ codeLength }} bytes</b>)\n    </h2>\n    <code-demo-editor\n      style=\"\"\n      (codeDemoLineChange)=\"handleLineChange($event)\"\n      [(ngModel)]=\"code\"\n      [fontSize]=\"40\"\n      [lineNumbers]=\"false\"\n      [codeDemoHighlight]=\"match\"\n    ></code-demo-editor>\n  </div>\n  <div\n    class=\"binary\"\n    style=\"flex: 0 0 60vw; display: flex;flex-direction: column\"\n  >\n    <h2 i18n>\n      Binary data (<b>{{ binariesLength }} bytes</b>)\n    </h2>\n    <div *ngIf=\"error\" style=\"padding: 3vw;\">{{ error }}</div>\n    <div>\n      <span\n        (click)=\"index = i\"\n        *ngFor=\"let item of binaries; let i = index\"\n        [class.selected]=\"i === index\"\n      >\n        <span class=\"value highlight-{{ i }}\">{{ item.binary }}</span>\n        <span class=\"detail\">\n          {{ item.type }}\n          <span\n            *ngIf=\"item.type === 'string'\"\n            style=\"display: flex;flex-wrap: wrap\"\n          >\n            <span\n              *ngFor=\"let l of item.display\"\n              style=\"display: flex; flex-direction: column\"\n            >\n              <span class=\"letter\" style=\"text-align: center;\"\n                >{{ l.value }}&nbsp;</span\n              >\n              <span class=\"bin highlight-{{ i }}\">{{ l.bin }}</span>\n            </span>\n          </span>\n          <span\n            *ngIf=\"item.type === 'number'\"\n            style=\"display: flex; flex-direction: column\"\n          >\n            <span class=\"letter\" style=\"text-align: center;\">{{\n              item.value\n            }}</span>\n            <span class=\"bin highlight-{{ i }}\">{{ item.binary }}</span>\n          </span>\n          <span\n            *ngIf=\"item.type === 'boolean'\"\n            style=\"display: flex; flex-direction: column\"\n          >\n            <span class=\"letter\" style=\"text-align: center;\">{{\n              item.value\n            }}</span>\n            <span class=\"bin highlight-{{ i }}\">{{ item.binary }}</span>\n          </span>\n        </span>\n      </span>\n    </div>\n    <h2 style=\"margin-top: 2vw;\" i18n>\n      Schema (<b>{{ schemaLength }} bytes</b>)\n    </h2>\n\n    <div\n      (click)=\"index = i\"\n      *ngFor=\"let item of schema; let i = index\"\n      class=\"bin {{ item.className }}\"\n    >\n      <ng-container *ngIf=\"item.className\">&nbsp;&nbsp;</ng-container\n      >{{ item.value }}\n    </div>\n  </div>\n</div>\n\n<div (click)=\"index = index + 1\">Next</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/json/json.component.scss",
    "content": ".wrapper {\n  font-size: 3vw;\n  word-break: break-all;\n}\n\n.code {\n  white-space: pre-wrap;\n  font-size: 2vw;\n  margin-right: 2vw;\n  margin-left: 1vw;\n}\n\n.binary .selected {\n  display: block;\n  box-shadow: 0 0 4px 1px #444;\n  background: #eee;\n  font-size: 3vw;\n}\n\n.code .selected {\n  color: #444;\n  font-size: 3vw;\n  box-shadow: 0 0 4px 1px #444;\n  background: #eee;\n}\n\n.detail {\n  display: none;\n}\n\n.selected .detail {\n  display: block;\n}\n\n.selected .value {\n  display: none;\n}\n\n:host ::ng-deep {\n  .highlight-0 {\n    background: rgba(255, 124, 0, 0.47);\n  }\n\n  .highlight-1 {\n    background: rgba(255, 239, 0, 0.47);\n  }\n\n  .highlight-2 {\n    background: #00ff29;\n  }\n\n  .highlight-3 {\n    background: #00ffe7;\n  }\n\n  .highlight-4 {\n    background: rgba(0, 177, 255, 0.46);\n  }\n\n  .highlight-5 {\n    background: rgba(185, 0, 255, 0.29);\n  }\n\n  .highlight-6 {\n    background: rgba(255, 0, 89, 0.47);\n  }\n\n  .highlight-7 {\n    background: rgba(255, 115, 0, 0.4);\n  }\n}\n\nh2 {\n  font-size: 3vw !important;\n}\n\n.error::before {\n  color: #e51400;\n  content: '🙀';\n}\n\n.error {\n  color: #e51400;\n  border: 1px #e51400 solid;\n  border-radius: 12px;\n  font-size: 3vw;\n  padding: 2vw;\n  display: block;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/json/json.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { JsonComponent } from './json.component';\n\ndescribe('JsonComponent', () => {\n  let component: JsonComponent;\n  let fixture: ComponentFixture<JsonComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [JsonComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(JsonComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/json/json.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\nfunction strToBin(s: string) {\n  return Array.from(new TextEncoder().encode(s))\n    .map(a => a.toString(2).padStart(8, '0'))\n    .join('');\n}\n\n@Component({\n  selector: 'kirjs-json',\n  templateUrl: './json.component.html',\n  styleUrls: ['./json.component.scss']\n})\nexport class JsonComponent implements OnInit {\n  @Input() code = `{\n  \"name\": \"Sarah\",\n  \"test\": true,\n  \"something\": 1212\n}`;\n\n  match = [];\n\n  index = 0;\n  binaries: any[];\n  binariesLength: number;\n  codeLength: number;\n  schema: { value: string }[] = [];\n  schemaLength: number;\n  error: string;\n\n  constructor() {}\n\n  handleLineChange({ value: code, lineNumber }) {\n    this.binaries = [\n      {\n        binary: '',\n        comment: `we don't need to encode curly braces :)`\n      }\n    ];\n\n    let val;\n    try {\n      val = JSON.parse(code);\n      this.error = '';\n    } catch (e) {\n      this.error = e.message;\n      return;\n    }\n\n    this.binaries = this.binaries.concat(\n      Object.keys(val).map(key => {\n        const value = val[key];\n        const data: any = {};\n\n        data.key = key;\n        data.key = key;\n        if (typeof value === 'boolean') {\n          data.binary = Number(value);\n          data.type = 'boolean';\n          data.comment = 'just one bit!';\n        } else if (typeof value === 'number') {\n          data.binary = value\n            .toString(2)\n            .padStart(Math.ceil(Math.log2(value + 1) / 8) * 8, '0');\n          data.type = 'number';\n          data.comment = 'Number';\n        } else if (typeof value === 'string') {\n          data.binary = strToBin(value) + '0000000000000000';\n          data.display = value\n            .split('')\n            .map(value => ({\n              value,\n              bin: (value.charCodeAt(0).toString(2) as any).padStart(8, 0)\n            }))\n            .concat({ value: 'Separator', bin: '000000000000000000' });\n          data.type = 'string';\n          data.comment = 'String!';\n        }\n        data.value = value;\n\n        return data;\n      })\n    );\n\n    this.schema = [\n      {\n        value: 'message {',\n        className: ''\n      }\n    ]\n      .concat(\n        this.binaries.slice(1).map((b, i) => ({\n          value: `    ${b.type} ${b.key} = ${i};`,\n          className: 'highlight-' + i\n        }))\n      )\n      .concat({\n        value: '}',\n        className: ''\n      });\n\n    this.schemaLength = this.schema.map(s => s.value).join('').length;\n    this.match = code\n      .split('\\n')\n      .map((a, i) => ({ match: a.trim(), className: `highlight-${i}` }));\n    this.index = lineNumber - 1;\n    this.codeLength = code.replace(/\\s/g, '').length;\n    this.binariesLength = Math.ceil(\n      this.binaries\n        .map(a => a.binary.toString().length)\n        .reduce((a, b) => a + b, 0) / 8\n    );\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/memory/memory.component.css",
    "content": ".memory {\n  display: flex;\n  flex-wrap: wrap;\n  width: 100%;\n  flex-shrink: 0;\n}\n\n.cell {\n  font-size: 1vw;\n  color: #999;\n  width: 5.7vw;\n  box-sizing: border-box;\n\n  margin-right: 0.3vw;\n  height: 6vw;\n  background: #ddd;\n  margin-bottom: 0.5vw;\n  padding: 0.5vw;\n  border: 1px #999 solid;\n}\n\n.value {\n  font-size: 3vw;\n}\n\n.index {\n  font-size: 1.5vw;\n  vertical-align: top;\n  padding: 0.2vw;\n  color: #444;\n  width: 2vw;\n  display: inline-block;\n}\n\n.cell.cell-empty {\n  background: #ffffff;\n}\n\n.cell.cell-boolean {\n  background: #444444;\n  color: #bbb;\n}\n\n.cell.selected2.selected2.selected2,\n.cell.cell-selected2 {\n  background: #ff9900;\n  color: #444;\n}\n\n.cell.cell-number.selected,\n.cell.cell-selected.cell-selected.cell-selected {\n  background: #ffff00;\n  color: #444;\n}\n\n.cell.cell-number-end-highlight,\n.cell.cell-number-highlight {\n  background: #ff0;\n  color: #444;\n}\n\n.cell.cell-cell-number-end,\n.cell.cell-number {\n  background: #444444;\n  color: #bbb;\n}\n\n.cell.cell-cell-number-end .index,\n.cell.cell-number .index {\n  color: #999;\n}\n\n.cell.cell-number.cell-selected,\n.cell.cell-number-highlight,\n.cell.cell-number {\n  width: 6vw;\n  margin-right: 0;\n  border-right: 0;\n  border-left-style: dotted;\n}\n\n.number.number {\n  background: #9f0;\n  color: black;\n}\n\n.bool.bool {\n  background: #f90;\n  color: black;\n}\n\n.link.link {\n  background: #00c8ff;\n  color: black;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/memory/memory.component.html",
    "content": "<div style=\"\">\n  <code-demo-editor\n    minLines=\"1\"\n    language=\"java\"\n    style=\"height: 120px; margin-bottom: 2vw;\"\n    [fontSize]=\"40\"\n    [lineNumbers]=\"false\"\n    [(ngModel)]=\"code\"\n  ></code-demo-editor>\n  <div class=\"memory\">\n    <div\n      *ngFor=\"let cell of memory; let i = index\"\n      class=\"cell cell-{{ cell.type }}\"\n    >\n      <span class=\"index\">{{ i }}</span>\n      <span class=\"value\">{{ cell.value }}</span>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/memory/memory.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MemoryComponent } from './memory.component';\n\ndescribe('MemoryComponent', () => {\n  let component: MemoryComponent;\n  let fixture: ComponentFixture<MemoryComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MemoryComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MemoryComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/memory/memory.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-memory',\n  templateUrl: './memory.component.html',\n  styleUrls: ['./memory.component.css']\n})\nexport class MemoryComponent implements OnInit {\n  @Input() param = 0;\n  @Input() code = '';\n  start = 0;\n\n  memory = Array.from({ length: 64 }).fill({\n    value: 0,\n    type: 'empty'\n  }) as any;\n\n  constructor() {}\n\n  allocValues(values, classes = []) {\n    let i = 0;\n    for (let x = 0; x < values.length; x++) {\n      const v = values[x];\n      for (let y = 0; y < v.length; y++) {\n        this.memory[i] = {\n          value: v[y],\n          type:\n            (y === v.length - 1 ? 'cell-number-end' : 'number') +\n            ' ' +\n            (classes[x] || '')\n        };\n\n        i++;\n      }\n    }\n  }\n\n  highlightBoolean(i: number) {\n    this.memory[i].type =\n      (this.memory[i].type || '') + ' selected cell-selected';\n  }\n\n  highlightShouldBe(i: number) {\n    this.memory[i].type = (this.memory[i].type || '') + ' selected2';\n  }\n\n  highlightNumber(i: number) {\n    for (let y = 0; y < 8; y++) {\n      this.memory[i * 8 + y] = {\n        value: Math.round(Math.random()),\n        type: y === 7 ? 'number-end-highlight' : 'number-highlight'\n      };\n    }\n  }\n\n  ngOnInit() {\n    if (this.param === 0) {\n      return;\n    }\n\n    if (this.param === 1) {\n      this.allocValues('00000'.split(''));\n    }\n\n    if (this.param === 2) {\n      this.allocValues('00000'.split(''));\n      this.highlightBoolean(3);\n    }\n\n    if (this.param === 3) {\n      this.allocValues([\n        '00000000',\n        '00000000',\n        '00000000',\n        '00000000',\n        '00000000'\n      ]);\n    }\n\n    if (this.param === 4) {\n      this.allocValues([\n        '00000000',\n        '00000000',\n        '00000000',\n        '00000000',\n        '00000000'\n      ]);\n      this.highlightNumber(3);\n    }\n\n    if (this.param === 5) {\n      this.allocValues('10101'.split(''));\n      this.highlightBoolean(3);\n    }\n\n    const bools = '10101'.split('');\n    const num = '00000011';\n    bools[1] = num;\n\n    if (this.param === 6) {\n      this.allocValues(bools);\n      this.highlightBoolean(3);\n      this.highlightShouldBe(10);\n    }\n\n    if (this.param === 7) {\n      const typedArray = [\n        '001',\n        '1',\n        '010',\n        num,\n        '001',\n        '0',\n        '001',\n        '0',\n        '001',\n        '1',\n        '000'\n      ];\n      this.allocValues(typedArray, [\n        ' bool',\n        '',\n        ' number',\n        '',\n        ' bool',\n        '',\n        ' bool',\n        ' cell-selected ',\n        ' bool'\n      ]);\n    }\n\n    const typedArray = [\n      '011110',\n      '010010',\n      '101101',\n      '110001',\n      '110101',\n      '001',\n      '1',\n      '010',\n      num,\n      '001',\n      '0',\n      '001',\n      '0',\n      '001',\n      '1'\n    ];\n    if (this.param === 8) {\n      this.allocValues(typedArray, [\n        ' link',\n        ' link',\n        ' link',\n        ' link',\n        ' link',\n        ' bool',\n        '',\n        ' number',\n        '',\n        ' bool',\n        '',\n        ' bool',\n        '',\n        ' bool'\n      ]);\n    }\n\n    if (this.param === 9) {\n      const typedArrayWidhBool = [...typedArray, '001', '0'];\n\n      typedArrayWidhBool[1] = '111001';\n\n      this.allocValues(typedArrayWidhBool, [\n        ' link',\n        ' link',\n        ' link',\n        ' link highlight',\n        ' link',\n        ' bool',\n        '',\n        ' bool',\n        '',\n        ' bool',\n        '',\n        ' bool',\n        '',\n        ' bool',\n        '',\n        ' bool'\n      ]);\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/message/message.component.css",
    "content": ".blocks {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.block {\n  font-size: 1.5vw;\n  color: #444;\n}\n\n.basic .block {\n  padding: 0;\n  font-size: 3vw;\n}\n\n.bytes .block {\n  font-size: 3vw;\n}\n\n.human {\n  font-size: 4vw;\n}\n\n.block {\n  padding: 1vw;\n  text-align: center;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/message/message.component.html",
    "content": "<!--<div>-->\n<!--<span (click)=\"setDisplay('basic')\">basic</span>-->\n<!--<span (click)=\"setDisplay('bytes')\">bytes</span>-->\n<!--<span (click)=\"setDisplay('hex')\">hex</span>-->\n<!--<span (click)=\"setDisplay('boolean')\">boolean</span>-->\n<!--<span (click)=\"setDisplay('uint8')\">uint8</span>-->\n<!--<span (click)=\"setDisplay('uint8')\">int8</span>-->\n<!--<span (click)=\"setDisplay('uint16')\">uint16</span>-->\n<!--<span (click)=\"setDisplay('uint32')\">uint32</span>-->\n<!--<span (click)=\"setDisplay('uint17')\">uint17</span>-->\n<!--<span (click)=\"setDisplay('string')\">string</span>-->\n<!--</div>-->\n<div [class]=\"display + ' blocks'\">\n  <div\n    [class]=\"block.className\"\n    [class.block]=\"true\"\n    *ngFor=\"let block of blocks\"\n  >\n    <div class=\"bin\">{{ block.bin }}</div>\n    <div class=\"human\">{{ block.human }}</div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/message/message.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MessageComponent } from './message.component';\n\ndescribe('MessageComponent', () => {\n  let component: MessageComponent;\n  let fixture: ComponentFixture<MessageComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MessageComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MessageComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/message/message.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\nfunction toByte(message) {\n  return Array.from(message.match(/.{8}/gi)).map(bin => ({\n    className: 'basic',\n    bin\n  }));\n}\n\nconst transforms = {\n  basic: toByte,\n  bytes: toByte,\n  boolean(message) {\n    return message.split('').map(bin => {\n      return {\n        className: 'basic',\n        bin,\n        human: (!!Number(bin)).toString()\n      };\n    });\n  },\n  uint16(message) {\n    return Array.from(message.match(/.{16}/gi)).map(bin => ({\n      className: 'basic',\n      bin,\n      human: parseInt(bin as string, 2)\n    }));\n  },\n  uint17(message) {\n    return Array.from(message.match(/.{17}/gi)).map(bin => ({\n      className: 'basic',\n      bin,\n      human: parseInt(bin as string, 2)\n    }));\n  },\n  uint32(message) {\n    return Array.from(message.match(/.{32}/gi)).map(bin => ({\n      className: 'basic',\n      bin,\n      human: parseInt(bin as string, 2)\n    }));\n  },\n  hex(message) {\n    return Array.from(message.match(/.{8}/gi)).map((bin: string) => ({\n      className: 'basic',\n      bin,\n      human: parseInt(bin, 2).toString(16)\n    }));\n  },\n  uint8(message) {\n    return Array.from(message.match(/.{8}/gi)).map(bin => ({\n      className: 'basic',\n      bin,\n      human: parseInt(bin as string, 2)\n    }));\n  },\n  int8(message) {\n    return Array.from(message.match(/.{8}/gi)).map(bin => {\n      const sign = !!(Number(bin) & 128) ? 1 : -1;\n      return {\n        className: 'basic',\n        bin,\n        human: sign * (Number(bin) & 127)\n      };\n    });\n  },\n  string(message) {\n    return Array.from(message.match(/.{8}/gi)).map((bin: string) => ({\n      className: 'basic',\n      bin,\n      human: String.fromCharCode(parseInt(bin, 2))\n    }));\n  }\n};\n\n@Component({\n  selector: 'kirjs-message',\n  templateUrl: './message.component.html',\n  styleUrls: ['./message.component.css']\n})\nexport class MessageComponent implements OnInit {\n  message =\n    '0100111001100101011101100110010101110010001000000110011101101111011011100110111001100001001000000110011' +\n    '101101001011101100110010100100000011110010110111101110101001000000111010101110000001000000100111001100101011101' +\n    '100110010101110010001000000110011101101111011011100110111001100001001000000110110001100101011101000010000001111' +\n    '00101101111011101010010000001100100011011110111011101101110';\n\n  mode = 1;\n  display = 'boolean';\n\n  blocks = transforms[this.display](this.message);\n\n  constructor() {}\n\n  @Input()\n  set param(value: string) {\n    this.setDisplay(value);\n  }\n\n  setDisplay(value: string) {\n    this.display = value;\n    this.blocks = transforms[this.display](this.message);\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/midi/midi.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/midi/midi.component.html",
    "content": "<input type=\"file\" (change)=\"upload(file)\" #file />\n<label> meta <input type=\"checkbox\" [(ngModel)]=\"showMeta\" /> </label>\n<kirjs-binary-parent\n  (updateBinary)=\"updateBinary($event)\"\n  [parser]=\"parser\"\n  [binary]=\"binary\"\n  [showMeta]=\"showMeta\"\n></kirjs-binary-parent>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/midi/midi.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MidiComponent } from './midi.component';\n\ndescribe('MidiComponent', () => {\n  let component: MidiComponent;\n  let fixture: ComponentFixture<MidiComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MidiComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MidiComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/midi/midi.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport { BinaryParser } from '../parser/binary-parser';\nimport { BinaryReaderResult } from '../parser/readers/abstract-reader';\nimport { StringBinaryReader } from '../parser/readers/string-reader';\nimport { StringParser } from '../parser/parsers/string-parser';\n\n@Component({\n  selector: 'kirjs-midi',\n  templateUrl: './midi.component.html',\n  styleUrls: ['./midi.component.css']\n})\nexport class MidiComponent implements OnInit {\n  showMeta = true;\n  binary: string;\n  parser: BinaryParser;\n  s: BinaryReaderResult;\n\n  constructor() {}\n\n  updateBinary(e: Event) {}\n\n  ngOnInit() {\n    this.binary = localStorage.getItem('midi');\n\n    const header = new BinaryParser()\n      .string('headerConst', { length: 4 })\n      .uInt32('6')\n      .uInt16('Single multi-channel track')\n      .uInt16('Number of tracs')\n      .uInt16('Time-code-based time');\n\n    const timeSignatureParser = new BinaryParser()\n      .uInt8('upper')\n      .uInt8('lower')\n      .uInt8('clocks')\n      .uInt8('something');\n\n    const theEnd = new BinaryParser().uInt8('00');\n\n    const metaParser = new BinaryParser()\n      .uInt8('subtype')\n      .uInt8('length')\n      .choice('value', {\n        parser(data) {\n          const type = (Object as any)\n            .values(data)\n            .find(l => l.name === 'subtype').rawValue;\n          const length = (Object as any)\n            .values(data)\n            .find(l => l.name === 'length').value;\n          const parsers = {\n            '00000011': new StringParser({ length }),\n            '00000010': new StringParser({ length }),\n            '01011000': timeSignatureParser,\n            // tempo\n            '01010001': new BinaryParser().uInt24('value'),\n            '00101111': theEnd\n          };\n\n          if (parsers[type]) {\n            return parsers[type];\n          }\n\n          // tslint:disable-next-line:no-debugger\n          debugger;\n        }\n      });\n\n    const noteSwitch = new BinaryParser()\n      .uInt8('note number')\n      .uInt8('velocity');\n\n    const instrumentChannel = new BinaryParser().uInt8('instrument');\n    const track = new BinaryParser()\n      .varuint7('delta')\n      .uInt8('type')\n      .choice('typeData', {\n        parser: data => {\n          const type = (Object as any).values(data).find(l => l.name === 'type')\n            .rawValue;\n          const parsers = {\n            '11111111': metaParser,\n            '11000000': instrumentChannel,\n            '10010000': noteSwitch,\n            '10000000': noteSwitch\n          };\n\n          if (parsers[type]) {\n            return parsers[type];\n          }\n\n          // tslint:disable-next-line:no-debugger\n          debugger;\n        }\n      });\n\n    const tracks = new BinaryParser()\n      .string('headerConst', { length: 4 })\n      .uInt32('tracklen')\n      .array('tracks', { parser: track, length: 12 });\n\n    this.parser = new BinaryParser()\n      .block('header', header)\n      .block('block', tracks);\n    this.s = this.parser.readOrdered(new StringBinaryReader(this.binary));\n  }\n\n  upload(file) {\n    const reader = new FileReader();\n\n    reader.onloadend = (e: ProgressEvent) => {\n      const result = new Uint8Array((e.target as any).result);\n      const binaries = Array.from(result)\n        .map(a => a.toString(2))\n        .map(a => (a as any).padStart(8, 0));\n      this.binary = binaries.join('');\n      localStorage.setItem('midi', this.binary);\n    };\n\n    reader.readAsArrayBuffer(file.files[0]);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/binary-parser.spec.ts",
    "content": "import { StringBinaryReader } from './readers/string-reader';\nimport { BinaryParser } from './binary-parser';\n\ndescribe('BinaryParser', () => {\n  beforeEach(() => {\n    const s = 'Universal Serial Bus'\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n    this.reader = new StringBinaryReader(s);\n  });\n\n  describe('BinaryParser', () => {\n    it('allows shortcuts', () => {\n      const parser = new BinaryParser()\n        .string('u', { length: 3 })\n        .bit1('a')\n        .bit1('b');\n\n      expect(parser.read(this.reader, {}).value).toEqual({\n        a: '0',\n        b: '1',\n        u: 'Uni'\n      });\n    });\n\n    it('allows nesting', () => {\n      const header = new BinaryParser().bit1('a').bit1('b');\n\n      const parser = new BinaryParser()\n        .block('header', header)\n        .bit1('c')\n        .bit1('d');\n\n      expect(parser.read(this.reader).value).toEqual({\n        header: { a: '0', b: '1' },\n        c: '0',\n        d: '1'\n      });\n    });\n\n    it('tracks position', () => {\n      const header = new BinaryParser().bit1('a').bit1('b');\n\n      const parser = new BinaryParser()\n        .block('header', header)\n        .bit1('c')\n        .bit1('d');\n\n      const result = parser.readOrdered(this.reader).value;\n\n      expect(result).toEqual([\n        {\n          start: 0,\n          end: 2,\n          length: 2,\n          name: 'header',\n          value: [\n            {\n              start: 0,\n              end: 1,\n              length: 1,\n              name: 'a',\n              value: '0',\n              rawValue: '0',\n              type: 'bits'\n            },\n            {\n              start: 1,\n              end: 2,\n              length: 1,\n              name: 'b',\n              value: '1',\n              rawValue: '1',\n              type: 'bits'\n            }\n          ],\n          rawValue: '01',\n          type: 'object'\n        },\n        {\n          start: 2,\n          end: 3,\n          length: 1,\n          name: 'c',\n          value: '0',\n          rawValue: '0',\n          type: 'bits'\n        },\n        {\n          start: 3,\n          end: 4,\n          length: 1,\n          name: 'd',\n          value: '1',\n          rawValue: '1',\n          type: 'bits'\n        }\n      ]);\n    });\n\n    it('allows uint16', () => {\n      const parser = new BinaryParser().uInt16('u');\n      expect(parser.read(this.reader).value).toEqual({ u: 28245 });\n    });\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/binary-parser.ts",
    "content": "import { BinaryObjectParser } from './parsers/object-parser';\nimport { StringParser, StringParserConfig } from './parsers/string-parser';\nimport { BinaryChoiceParser } from './parsers/choice-parser';\nimport { BinaryArrayParser } from './parsers/array-parser';\nimport { BitParser } from './parsers/bit-parser';\nimport { VarUintParser, VarUintParserConfig } from './parsers/var-uint-parser';\nimport { BinaryReader } from './readers/abstract-reader';\nimport { beToLe32 } from './parsers/common';\n\nexport interface BaseConfig {\n  description?: string;\n  length?: number;\n  type?: string;\n  converter?: (a: string) => number;\n  enum?: { [key: string]: string };\n}\n\nexport class BinaryParser {\n  type = 'object';\n  private parser: BinaryObjectParser;\n\n  constructor() {\n    this.parser = new BinaryObjectParser();\n  }\n\n  string(name: string, config: StringParserConfig) {\n    this.parser.addStep(name, new StringParser(config));\n    return this;\n  }\n\n  varuint7(name: string, config: Partial<VarUintParserConfig> = {}) {\n    this.parser.addStep(name, new VarUintParser(config));\n    return this;\n  }\n\n  varuint31(name: string, config: Partial<VarUintParserConfig> = {}) {\n    this.parser.addStep(\n      name,\n      new VarUintParser({\n        ...config,\n        size: 31\n      })\n    );\n    return this;\n  }\n\n  choice(name: string, config: any) {\n    this.parser.addStep(name, new BinaryChoiceParser({ ...config }));\n    return this;\n  }\n\n  array(name: string, config: any) {\n    this.parser.addStep(name, new BinaryArrayParser({ ...config }));\n    return this;\n  }\n\n  bit(name: string, config: any) {\n    this.parser.addStep(name, new BitParser({ ...config }));\n    return this;\n  }\n\n  block(name: string, parser) {\n    this.parser.addStep(name, parser);\n    return this;\n  }\n\n  constBits(value, config?: Partial<BaseConfig>) {\n    return this.bit('const', {\n      length: value.length,\n      type: 'const',\n      ...config\n    });\n  }\n\n  boolean(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 1, type: 'boolean', ...config });\n  }\n\n  bit1(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 1, ...config });\n  }\n\n  bit2(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 2, ...config });\n  }\n\n  bit3(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 3, ...config });\n  }\n\n  bit8(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 8, ...config });\n  }\n\n  bit32(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 32, ...config });\n  }\n  bit24(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 24, ...config });\n  }\n\n  object(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, { length: 1, ...config });\n  }\n\n  uInt16(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, {\n      type: 'number',\n      length: 16,\n      converter: a => {\n        return parseInt(a.slice(8) + a.slice(0, 8), 2);\n      },\n      ...config\n    });\n  }\n\n  uInt24(name: string, config: any = {}) {\n    return this.bit(name, {\n      type: 'number',\n      length: 24,\n      converter: a => {\n        return parseInt(a, 2);\n      },\n      ...config\n    });\n  }\n\n  uInt32(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, {\n      type: 'number',\n      length: 32,\n      converter: a => {\n        return parseInt(a, 2);\n      },\n      ...config\n    });\n  }\n\n  uInt32le(name: string, config?: Partial<BaseConfig>) {\n    return this.uInt32(name, {\n      converter: a => {\n        return beToLe32(parseInt(a, 2));\n      },\n      ...config\n    });\n  }\n\n  uInt8(name: string, config?: Partial<BaseConfig>) {\n    return this.bit(name, {\n      type: 'number',\n      subtype: 'uint8',\n      length: 8,\n      converter: a => {\n        return parseInt(a, 2);\n      },\n      ...config\n    });\n  }\n\n  hex(name: string, config?: Partial<BaseConfig>) {\n    if (typeof config.length === 'function') {\n      // tslint:disable-next-line:no-debugger\n      debugger;\n      // TODO\n    }\n\n    return this.bit(name, {\n      type: 'hex',\n      converter: data => {\n        return Array.from(data.match(/.{4}/g))\n          .map(a => parseInt(a.toString(), 2))\n          .map(a => a.toString(16))\n          .join('');\n      },\n      ...config,\n      length: config.length * 4\n    });\n  }\n\n  read(reader, data: any = {}) {\n    return this.parser.read(reader, data);\n  }\n\n  readOrdered(reader: BinaryReader, data: any = [], start = 0) {\n    const v = this.parser.readOrdered(reader, data, start);\n\n    return {\n      start: start,\n      ...v\n    };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/abstract-parser.ts",
    "content": "import { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\n\nexport abstract class AbstractBinaryParser {\n  type: string;\n\n  abstract read(\n    reader: BinaryReader,\n    data: BinaryReaderResult\n  ): BinaryReaderResult;\n\n  abstract readOrdered(\n    reader: BinaryReader,\n    data: any[],\n    start: number\n  ): BinaryReaderResult;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/array-parser.spec.ts",
    "content": "import { StringParser } from './string-parser';\nimport { BinaryArrayParser } from './array-parser';\nimport { StringBinaryReader } from '../readers/string-reader';\n\ndescribe('array parser', () => {\n  beforeEach(() => {\n    const s = 'Universal Serial Bus'\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n    this.reader = new StringBinaryReader(s);\n  });\n\n  it('can read one letter', () => {\n    const parser = new BinaryArrayParser({\n      length: 2,\n      parser: new StringParser({ length: 2 })\n    });\n    expect(parser.read(this.reader).value).toEqual(['Un', 'iv']);\n  });\n\n  it('can read one letter', () => {\n    const parser = new BinaryArrayParser({\n      parser: new StringParser({ length: 2 })\n    });\n    expect(parser.read(this.reader).value).toEqual([\n      'Un',\n      'iv',\n      'er',\n      'sa',\n      'l ',\n      'Se',\n      'ri',\n      'al',\n      ' B',\n      'us'\n    ]);\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/array-parser.ts",
    "content": "import { AbstractBinaryParser } from './abstract-parser';\nimport { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\nimport { resolveFunctionOrvalue, resolveLengthOrdered } from '../utils';\n\nexport class BinaryArrayParser extends AbstractBinaryParser {\n  type = 'array';\n\n  constructor(private config) {\n    super();\n  }\n\n  read(\n    reader: BinaryReader,\n    data: BinaryReaderResult = {}\n  ): BinaryReaderResult {\n    let len = resolveFunctionOrvalue(this.config.length, data) || Infinity;\n    let raw = '';\n    const value = [];\n\n    while (len > 0 && reader.hasMore()) {\n      const result = this.config.parser.read(reader, data);\n      raw += result.raw;\n      value.push(result.value);\n      len--;\n    }\n\n    return { value, raw };\n  }\n\n  readOrdered(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    start = 0\n  ): BinaryReaderResult {\n    let numberOfElements = resolveLengthOrdered(this.config.length, data);\n    if (numberOfElements === undefined) {\n      numberOfElements = Infinity;\n    }\n\n    let rawValue = '';\n    const value = [];\n\n    let len = 0;\n    let index = 0;\n\n    while (numberOfElements > 0 && reader.hasMore()) {\n      index++;\n      const result = this.config.parser.readOrdered(reader, data, start + len);\n      rawValue += result.rawValue;\n\n      const length = result.rawValue.length;\n      value.push({\n        start: start + len,\n        end: start + len + length,\n        length,\n        index,\n        type: this.config.parser.type,\n        value: result.value,\n        rawValue: result.rawValue\n      });\n      len += length;\n      numberOfElements--;\n    }\n\n    return {\n      name: this.config.name,\n      start,\n      length: len,\n      end: start + len,\n      value,\n      rawValue,\n      type: this.type\n    };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/bit-parser.spec.ts",
    "content": "import { StringBinaryReader } from '../readers/string-reader';\nimport { BitParser } from './bit-parser';\n\ndescribe('BinaryParser', () => {\n  beforeEach(() => {\n    const s = 'Universal Serial Bus'\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n    this.reader = new StringBinaryReader(s);\n  });\n\n  describe('bit parser', () => {\n    it('can read 3 bit bit', () => {\n      const parser = new BitParser({ length: 3 });\n      const results = parser.read(this.reader);\n      expect(results.value).toBe('010');\n      expect(results.rawValue).toBe('010');\n    });\n\n    it('takes a length function', () => {\n      const parser = new BitParser({ length: () => 3 });\n\n      const result = parser.read(this.reader);\n      expect(result.value).toBe('010');\n      expect(result.rawValue).toBe('010');\n    });\n\n    it('takes a length function which can use existing data', () => {\n      const parser = new BitParser({ length: data => data.len });\n      const result = parser.read(this.reader, { len: 3 });\n      expect(result.value).toBe('010');\n      expect(result.rawValue).toBe('010');\n    });\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/bit-parser.ts",
    "content": "import { AbstractBinaryParser } from './abstract-parser';\nimport { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\nimport {\n  resolveByKey,\n  resolveFunctionKeyOrValue,\n  resolveOrderedByKey\n} from '../utils';\n\nexport class BitParser extends AbstractBinaryParser {\n  type = 'bits';\n\n  constructor(private config) {\n    super();\n    this.type = config.type || this.type;\n  }\n\n  readWithLength(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    len: number\n  ) {\n    const rawValue = reader.read(len);\n    const converter = this.config.converter || (a => a);\n    return { value: converter(rawValue), rawValue };\n  }\n\n  read(\n    reader: BinaryReader,\n    data: BinaryReaderResult = {}\n  ): BinaryReaderResult {\n    const len = resolveFunctionKeyOrValue(\n      this.config.length,\n      data,\n      resolveByKey\n    );\n    return this.readWithLength(reader, data, len);\n  }\n\n  readOrdered(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    start = 0\n  ): BinaryReaderResult {\n    if (start === 0) {\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n\n    const len = resolveFunctionKeyOrValue(\n      this.config.length,\n      data,\n      resolveOrderedByKey\n    );\n    const result = this.readWithLength(reader, data, len);\n    const length = result.rawValue.length;\n    const end = start + length;\n\n    return {\n      displayValue:\n        (this.config && this.config.enum && this.config.enum[result.value]) ||\n        result.value,\n      start,\n      length,\n      end,\n      ...result,\n      type: this.type,\n      description: this.config && this.config.description,\n      unconverter: this.config.unconverter\n    };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/choice-parser.spec.ts",
    "content": "import { StringBinaryReader } from '../readers/string-reader';\nimport { BitParser } from './bit-parser';\nimport { BinaryChoiceParser } from './choice-parser';\nimport { StringParser } from './string-parser';\n\ndescribe('BinaryParser', () => {\n  beforeEach(() => {\n    const s = 'Universal Serial Bus'\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n    this.reader = new StringBinaryReader(s);\n  });\n\n  describe('choice parser', () => {\n    it('can read one letter', () => {\n      const parser = new BinaryChoiceParser({\n        key: ({ p }) => p,\n        values: {\n          '1': new BitParser({ length: 8 }),\n          '2': new StringParser({ length: 2 })\n        }\n      });\n      expect(parser.read(this.reader, { p: '1' }).value).toEqual('01010101');\n      expect(parser.read(this.reader, { p: '2' }).value).toEqual('ni');\n    });\n\n    it('can read one letter', () => {\n      const parser = new BinaryChoiceParser({\n        key: ({ p }) => p,\n        values: {\n          '1': new BitParser({ length: 8 }),\n          '2': new StringParser({ length: 2 })\n        }\n      });\n      expect(parser.readOrdered(this.reader, { p: '1' }).value).toEqual(\n        '01010101'\n      );\n      expect(parser.readOrdered(this.reader, { p: '2' }).value).toEqual('ni');\n    });\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/choice-parser.ts",
    "content": "import { AbstractBinaryParser } from './abstract-parser';\nimport { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\nimport { resolveByKey, resolveOrderedByKey } from '../utils';\n\nexport class BinaryChoiceParser extends AbstractBinaryParser {\n  constructor(private config) {\n    super();\n  }\n\n  get type() {\n    return 'bich';\n  }\n\n  read(\n    reader: BinaryReader,\n    data: BinaryReaderResult = []\n  ): BinaryReaderResult {\n    return this.getParser(data, resolveByKey).read(reader, data);\n  }\n\n  getParser(data, resolver) {\n    let parser: AbstractBinaryParser;\n\n    if (this.config.key) {\n      const keyValue = resolver(this.config.key, data);\n      parser = this.config.values[keyValue];\n    }\n\n    if (this.config.parser) {\n      parser = this.config.parser(data);\n    }\n\n    if (!parser) {\n      // tslint:disable-next-line:no-debugger\n      debugger;\n    }\n\n    return parser;\n  }\n\n  readOrdered(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    start = 0\n  ): BinaryReaderResult {\n    const parser = this.getParser(data, resolveOrderedByKey);\n    const { value, rawValue, description } = parser.readOrdered(\n      reader,\n      data,\n      start\n    );\n    return { start, value, rawValue, type: parser.type, description };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/common.ts",
    "content": "export interface ParserConfig {\n  description?: string;\n}\n\nexport enum Endianness {\n  BIG = 1,\n  LITTLE\n}\n\nexport interface BinaryParserConfig {\n  endianness: Endianness.BIG;\n}\n\nexport const defaultConfig: BinaryParserConfig = {\n  endianness: Endianness.BIG\n};\n\nexport function beToLe32(val) {\n  return (\n    ((val & 0xff) << 24) |\n    ((val & 0xff00) << 8) |\n    ((val >> 8) & 0xff00) |\n    ((val >> 24) & 0xff)\n  );\n}\n\nexport interface ReadResult {\n  parent: ReadResult | null;\n  results: ReadResult[];\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/debugger-parser.ts",
    "content": "import { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\n\nexport abstract class DebuggerParser {\n  type = 'debugger';\n\n  read(reader: BinaryReader, data: BinaryReaderResult) {\n    // tslint:disable-next-line:no-debugger\n    debugger;\n  }\n\n  readOrdered(reader: BinaryReader, data: BinaryReaderResult) {\n    // tslint:disable-next-line:no-debugger\n    debugger;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/first-bit-parser.spec.ts",
    "content": "import { StringBinaryReader } from '../readers/string-reader';\nimport { VarUintParser } from './var-uint-parser';\n\nfdescribe('FirstBitParse', () => {\n  it('can read 1 byte', () => {\n    const reader = new StringBinaryReader('0111111111111111');\n    const result = new VarUintParser().read(reader);\n    expect(result.rawValue).toEqual('01111111');\n  });\n  it('can read 1 byte', () => {\n    const reader = new StringBinaryReader('11111111');\n    const result = new VarUintParser().read(reader);\n    expect(result.rawValue).toEqual('11111111');\n  });\n\n  it('can read 2 bytes', () => {\n    const reader = new StringBinaryReader('1111111101111111111');\n    const result = new VarUintParser().read(reader);\n    expect(result.rawValue).toEqual('1111111101111111');\n  });\n\n  it('can read 3 bytes', () => {\n    const reader = new StringBinaryReader('111111111111111101111111111');\n    const result = new VarUintParser().read(reader);\n    expect(result.rawValue).toEqual('111111111111111101111111');\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/object-parser.spec.ts",
    "content": "import { StringBinaryReader } from '../readers/string-reader';\nimport { BinaryObjectParser } from './object-parser';\nimport { BitParser } from './bit-parser';\n\ndescribe('BinaryParser', () => {\n  beforeEach(() => {\n    const s = 'Universal Serial Bus'\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n    this.reader = new StringBinaryReader(s);\n  });\n\n  describe('BinaryObjectParser', () => {\n    it('can read simple bits', () => {\n      const parser = new BinaryObjectParser();\n      parser.addStep('a', new BitParser({ length: 1 }));\n      parser.addStep('b', new BitParser({ length: 2 }));\n      parser.addStep('c', new BitParser({ length: 1 }));\n\n      const result = parser.read(this.reader);\n      expect(result.value).toEqual({\n        a: '0',\n        b: '10',\n        c: '1'\n      });\n    });\n\n    it('can read nested objects', () => {\n      const parser = new BinaryObjectParser();\n      parser.addStep('a', new BitParser({ length: 1 }));\n\n      const innerParser = new BinaryObjectParser();\n      innerParser.addStep('a', new BitParser({ length: 1 }));\n      innerParser.addStep('b', new BitParser({ length: 1 }));\n      parser.addStep('inner', innerParser);\n      parser.addStep('b', new BitParser({ length: 1 }));\n      const result = parser.read(this.reader);\n      expect(result.value).toEqual({\n        a: '0',\n        inner: {\n          a: '1',\n          b: '0'\n        },\n        b: '1'\n      });\n    });\n\n    it('can read nested objects', () => {\n      const parser = new BinaryObjectParser();\n      parser.addStep('a', new BitParser({ length: 1 }));\n\n      const innerParser = new BinaryObjectParser();\n      innerParser.addStep('a', new BitParser({ length: 1 }));\n      innerParser.addStep('b', new BitParser({ length: 1 }));\n      parser.addStep('inner', innerParser);\n      parser.addStep('b', new BitParser({ length: 1 }));\n      const result = parser.readOrdered(this.reader);\n\n      expect(result.value).toEqual([\n        {\n          name: 'a',\n          value: '0',\n          rawValue: '0',\n          type: 'bits'\n        },\n        {\n          name: 'inner',\n          value: [\n            {\n              name: 'a',\n              value: '1',\n              rawValue: '1',\n              type: 'bits'\n            },\n            {\n              name: 'b',\n              value: '0',\n              rawValue: '0',\n              type: 'bits'\n            }\n          ],\n          rawValue: '10',\n          type: 'object'\n        },\n        {\n          name: 'b',\n          value: '1',\n          rawValue: '1',\n          type: 'bits'\n        }\n      ]);\n    });\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/object-parser.ts",
    "content": "import { AbstractBinaryParser } from './abstract-parser';\nimport { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\n\nexport class BinaryObjectParser extends AbstractBinaryParser {\n  type = 'object';\n\n  steps: {\n    name: string;\n    description?: string;\n    parser: AbstractBinaryParser;\n  }[] = [];\n\n  addStep(name: string, parser: AbstractBinaryParser) {\n    this.steps.push({ name, parser });\n  }\n\n  read(\n    reader: BinaryReader,\n    data: BinaryReaderResult = {}\n  ): BinaryReaderResult {\n    let raw = '';\n    const val = this.steps.reduce((result, step) => {\n      const { value, rawValue } = step.parser.read(reader, result);\n      result[step.name] = value;\n      raw += rawValue;\n      return result;\n    }, {});\n\n    return { value: val, rawValue: raw };\n  }\n\n  readOrdered(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    start = 0\n  ): BinaryReaderResult {\n    let raw = '';\n    let len = 0;\n\n    const value = this.steps.reduce((result, step) => {\n      const {\n        value,\n        rawValue,\n        type,\n        description,\n        displayValue\n      } = step.parser.readOrdered(\n        reader,\n        [...result, { name: '_parent', value: data }],\n        start + len\n      );\n      raw += rawValue;\n      if (!type) {\n        // tslint:disable-next-line:no-debugger\n        debugger;\n      }\n\n      len += rawValue.length;\n      result.push({\n        start: start + len - rawValue.length,\n        end: start + len,\n        length: rawValue.length,\n        name: step.name,\n        description,\n        value,\n        displayValue,\n        rawValue,\n        type\n      });\n\n      return result;\n    }, []);\n\n    return {\n      start,\n      length: len,\n      end: start + len,\n      value,\n      rawValue: raw,\n      type: 'object'\n    };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/string-parser.spec.ts",
    "content": "import { BinaryParser } from '../binary-parser';\nimport { StringParser } from './string-parser';\nimport { StringBinaryReader } from '../readers/string-reader';\n\ndescribe('BinaryParser', () => {\n  beforeEach(() => {\n    const s = 'Universal Serial Bus'\n      .split('')\n      .map(a => a.charCodeAt(0))\n      .map(a => a.toString(2))\n      .map(a => (a as any).padStart(8, 0))\n      .join('');\n    this.reader = new StringBinaryReader(s);\n  });\n\n  fdescribe('string parser', () => {\n    it('can read one letter', () => {\n      const parser = new StringParser({ length: 1 });\n      expect(parser.read(this.reader).value).toBe('U');\n    });\n\n    it('can read 3 letttes', () => {\n      const parser = new StringParser({ length: 3 });\n      expect(parser.read(this.reader).value).toBe('Uni');\n    });\n\n    describe('readuntil', () => {\n      const s = 'lollol'\n        .split('')\n        .map(a => a.charCodeAt(0))\n        .map(a => a.toString(2))\n        .map(a => (a as any).padStart(8, 0))\n        .join('');\n\n      const s2 = 'ogogog'\n        .split('')\n        .map(a => a.charCodeAt(0))\n        .map(a => a.toString(2))\n        .map(a => (a as any).padStart(8, 0))\n        .join('');\n\n      it('can read until 00', () => {\n        this.reader = new StringBinaryReader(s + '00000000' + s2);\n        const parser = new StringParser({ readUntil: '00000000' });\n        const binaryReaderResult = parser.readOrdered(this.reader);\n        expect(binaryReaderResult.value).toBe('lollol');\n      });\n\n      it('Reads the whole thing if no 00', () => {\n        this.reader = new StringBinaryReader(s + '01010101' + s2);\n        const parser = new StringParser({ readUntil: '00000000' });\n        const binaryReaderResult = parser.readOrdered(this.reader);\n        expect(binaryReaderResult.value).toBe('lollolUogogog');\n      });\n    });\n\n    it('can read ordered 3 letttes', () => {\n      const parser = new StringParser({ length: 3 });\n      const binaryReaderResult = parser.readOrdered(this.reader);\n      expect(binaryReaderResult.value).toBe('Uni');\n      expect(binaryReaderResult.start).toBe(0);\n      expect(binaryReaderResult.end).toBe(24);\n      expect(binaryReaderResult.length).toBe(24);\n    });\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/string-parser.ts",
    "content": "import { AbstractBinaryParser } from './abstract-parser';\nimport { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\nimport {\n  resolveFunctionKeyOrValue,\n  resolveFunctionOrvalue,\n  resolveLengthOrdered\n} from '../utils';\nimport { ParserConfig } from './common';\n\nfunction bytesToChar(a) {\n  return String.fromCharCode(parseInt(a, 2));\n}\n\nexport interface StringParserConfig extends ParserConfig {\n  length?: number | Function | string;\n  readUntil?: string;\n}\n\nexport class StringParser extends AbstractBinaryParser {\n  type = 'string';\n\n  constructor(private config: StringParserConfig) {\n    super();\n  }\n\n  read(\n    reader: BinaryReader,\n    data: BinaryReaderResult = {},\n    start = 0\n  ): BinaryReaderResult {\n    if (this.config.readUntil) {\n      let value = '';\n      let rawValue = '';\n\n      while (\n        reader.peak(this.config.readUntil.length) !== this.config.readUntil &&\n        reader.peak(this.config.readUntil.length) > 0\n      ) {\n        const letter = reader.read(8);\n        value += bytesToChar(letter);\n        rawValue += letter;\n      }\n\n      return { value, rawValue };\n    } else {\n      const len = resolveLengthOrdered(this.config.length, data) * 8;\n      const rawValue = reader.read(len);\n      const value = rawValue\n        .match(/.{8}/g)\n        .map(bytesToChar)\n        .join('');\n      return { value, rawValue };\n    }\n  }\n\n  readOrdered(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    start = 0\n  ): BinaryReaderResult {\n    const result = this.read(reader, data);\n    const length = start + result.rawValue.length;\n    const end = start + length;\n    return {\n      ...result,\n      type: this.type,\n      description: this.config.description,\n      start,\n      end,\n      length\n    };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/parsers/var-uint-parser.ts",
    "content": "import { AbstractBinaryParser } from './abstract-parser';\nimport { BinaryReader, BinaryReaderResult } from '../readers/abstract-reader';\nimport { BaseConfig } from '../binary-parser';\n\nexport interface VarUintParserConfig extends BaseConfig {\n  size?: number;\n}\n\nexport const defaultVarUintParserConfig = {\n  size: 7\n};\n\nexport class VarUintParser extends AbstractBinaryParser {\n  type = 'bits';\n\n  constructor(\n    private config: VarUintParserConfig = defaultVarUintParserConfig\n  ) {\n    super();\n    this.type = config.type || this.type;\n  }\n\n  static converter(n: string) {\n    return parseInt(n, 2);\n  }\n\n  read(\n    reader: BinaryReader,\n    data: BinaryReaderResult = {}\n  ): BinaryReaderResult {\n    let hasNext = true;\n    let value = '';\n    let rawValue = '';\n    const size = this.config.size || 7;\n\n    let i = 100;\n    while (hasNext) {\n      const firstBit = reader.read(1);\n      hasNext = !!+firstBit;\n      rawValue += firstBit;\n      const result = reader.read(size);\n      value += result;\n      rawValue += result;\n      if (i-- < 1) {\n        // tslint:disable-next-line:no-debugger\n        debugger;\n      }\n    }\n\n    const converter = this.config.converter || VarUintParser.converter;\n    return { value: converter(rawValue), rawValue };\n  }\n\n  readOrdered(\n    reader: BinaryReader,\n    data: BinaryReaderResult = [],\n    start = 0\n  ): BinaryReaderResult {\n    return { ...this.read(reader, data), type: this.type };\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/readers/abstract-reader.ts",
    "content": "export type BinaryReaderResult = any;\n\nexport abstract class BinaryReader {\n  abstract read(bits: number);\n  abstract peak(bits: number);\n\n  abstract hasMore(): boolean;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/readers/string-reader.ts",
    "content": "import { BinaryReader, BinaryReaderResult } from './abstract-reader';\n\nexport class StringBinaryReader implements BinaryReader {\n  private index = 0;\n\n  constructor(private s: string) {}\n\n  hasMore() {\n    return this.index < this.s.length;\n  }\n\n  peak(bits: number): BinaryReaderResult {\n    return this.s.slice(this.index, this.index + bits);\n  }\n\n  read(bits: number): BinaryReaderResult {\n    this.index += bits;\n    const result = this.s.slice(this.index - bits, this.index);\n    return result;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/parser/utils.ts",
    "content": "export function resolveLengthOrdered(functionOrValue, data) {\n  if (typeof functionOrValue === 'string') {\n    return resolveOrderedByKey(functionOrValue, data);\n  }\n  return typeof functionOrValue === 'function'\n    ? functionOrValue(data)\n    : functionOrValue;\n}\n\nexport function resolveFunctionOrvalue(functionOrValue, arg) {\n  return typeof functionOrValue === 'function'\n    ? functionOrValue(arg)\n    : functionOrValue;\n}\n\nexport function resolveFunctionKeyOrValue(val, data, resolve) {\n  if (typeof val === 'string') {\n    return resolve(val, data);\n  }\n\n  if (typeof val === 'function') {\n    return val(data, resolve);\n  }\n\n  return val;\n}\n\nexport function resolveOrderedByKey(key: string, data: any[]) {\n  return Object.values(data).find(a => a.name === key).value;\n}\n\nexport function resolveByKey(key: string, data: any) {\n  return data[key];\n}\n\nexport function strToBin(str) {\n  return str\n    .split('')\n    .map(a => a.charCodeAt(0))\n    .map(a => a.toString(2).padStart(8, 0))\n    .join('');\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/shared.ts",
    "content": "export function bin2hex(bin: string) {\n  return bin\n    .match(/.{8}/gi)\n    .map(a => (parseInt(a, 2).toString(16) as any).padStart(2, 0))\n    .join('');\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/to-read/to-read.component.css",
    "content": "h2 {\n  font-size: 5vw !important;\n  line-height: 5vw !important;\n}\n\nh3 {\n  font-size: 3vw;\n  color: #444;\n}\n\n:host ::ng-deep .book {\n  width: 40vw;\n  height: 100vw;\n  background-repeat: no-repeat;\n  background-size: 40vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/to-read/to-read.component.html",
    "content": "<div style=\"display: flex;\">\n  <div><ng-content></ng-content></div>\n  <div style=\"margin-left: 2vw;\">\n    <h2>{{ title }}</h2>\n    <h3>{{ author }}</h3>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/to-read/to-read.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ToReadComponent } from './to-read.component';\n\ndescribe('ToReadComponent', () => {\n  let component: ToReadComponent;\n  let fixture: ComponentFixture<ToReadComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ToReadComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ToReadComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/binary/to-read/to-read.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-to-read',\n  templateUrl: './to-read.component.html',\n  styleUrls: ['./to-read.component.css']\n})\nexport class ToReadComponent implements OnInit {\n  @Input() author: string;\n  @Input() title: string;\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/board/board.component.css",
    "content": ".cell {\n  border: 1px #888 solid;\n  margin-left: -1px;\n  margin-top: -5px;\n}\n\n.cell.cell-x {\n  border: none;\n}\n.cell-1 {\n  background: black;\n}\n\n.board,\n.cell {\n  display: inline-block;\n}\n\n.line {\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/board/board.component.html",
    "content": "<div class=\"board\">\n  <div *ngFor=\"let line of pattern\" style=\"display: flex;\">\n    <div\n      *ngFor=\"let cell of line\"\n      class=\"cell cell-{{ cell }}\"\n      [style.height.px]=\"cellHeight\"\n      [style.width.px]=\"cellWidth\"\n    ></div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/board/board.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BoardComponent } from './board.component';\n\ndescribe('BoardComponent', () => {\n  let component: BoardComponent;\n  let fixture: ComponentFixture<BoardComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BoardComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BoardComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should be created', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/board/board.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-board',\n  templateUrl: './board.component.html',\n  styleUrls: ['./board.component.css']\n})\nexport class BoardComponent implements OnInit {\n  @Input() pattern;\n  @Input() cellHeight = 50;\n  @Input() cellWidth = 50;\n  @Input() transform;\n  @Input() playing = false;\n  @Input() delay = 500;\n\n  constructor() {}\n\n  public play() {\n    this.playing = true;\n  }\n\n  runTransform() {\n    if (this.playing) {\n      this.pattern = this.transform(this.pattern);\n    }\n    setTimeout(() => {\n      this.runTransform();\n    }, this.delay);\n  }\n\n  ngOnInit() {\n    if (this.transform) {\n      this.runTransform();\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/cellular-automation-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SlidesRoutes } from '@ng360/slides';\n\nimport { CellularAutomationComponent } from './cellular-automation.component';\nimport { CellularAutomationModule } from './cellular-automation.module';\n\nconst routes = RouterModule.forChild(\n  SlidesRoutes.get(CellularAutomationComponent)\n);\n\n@NgModule({\n  imports: [routes, CellularAutomationModule],\n  declarations: [],\n  exports: []\n})\nexport class CellularAutomationRoutingModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/cellular-automation.component.css",
    "content": "h2 {\n  font-weight: 800;\n}\n\npre {\n  font-size: 24px;\n}\n\n.empty-slide {\n  width: 400px;\n  height: 250px;\n  border: 1px solid #000;\n  margin-left: 300px;\n  margin-top: 10px;\n  -webkit-box-shadow: 10px 10px 5px 0px rgba(181, 172, 181, 1);\n  -moz-box-shadow: 10px 10px 5px 0px rgba(181, 172, 181, 1);\n  box-shadow: 10px 10px 5px 0px rgba(181, 172, 181, 1);\n}\n\n.html-elements {\n  font-size: 28px;\n  margin-top: 20px;\n  margin-left: 24px;\n}\n\n.kirjs {\n  width: 800px;\n  height: 300px;\n\n  background: url(intro/kirjs.png) no-repeat;\n  background-size: 100%;\n  margin: 0 auto;\n}\n\n.rules {\n  display: flex;\n}\n\n.play:hover {\n  background-color: #d6510f;\n}\n\n.play {\n  font-size: 14px;\n  padding: 5px;\n  text-align: center;\n  cursor: pointer;\n  margin-left: 20px;\n  margin-top: 10px;\n  background-color: #000000;\n  color: #ffffee;\n  height: 30px;\n  width: 30px;\n}\n\n.grid-header {\n  margin-top: 20px;\n  display: flex;\n}\n\n.img-wolfram {\n  width: 400px;\n  height: 400px;\n  background: url('intro/wolfram.jpg');\n}\n\n.img-moore {\n  width: 400px;\n  height: 400px;\n  background: url('intro/moore.jpg') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-neuman {\n  width: 400px;\n  height: 400px;\n  background: url('intro/JohnvonNeumann.gif') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-conway {\n  width: 600px;\n  height: 400px;\n  background: url('intro/Conway_.jpg') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.neighborhood {\n  display: flex;\n}\n\n.img-gun {\n  width: 800px;\n  height: 600px;\n  background: url('intro/Gosperglidergun.gif') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-turing {\n  width: 800px;\n  height: 800px;\n  background: url('intro/turing.gif') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-mp {\n  width: 800px;\n  height: 800px;\n  background: url('intro/metapixel.png') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-30 {\n  width: 800px;\n  height: 800px;\n  background: url('intro/30.png') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-30-2 {\n  width: 800px;\n  height: 800px;\n  background: url('intro/30-2.png') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-gosper {\n  width: 800px;\n  height: 800px;\n  background: url('intro/Bill_Gosper_2006.jpg') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-cave {\n  width: 800px;\n  height: 800px;\n  background: url('intro/maze.png') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n.img-nks {\n  width: 800px;\n  height: 800px;\n  background: url('intro/nks.jpg') no-repeat;\n  background-size: 100%;\n  margin-right: 50px;\n}\n\n:host /deep/ .slide {\n  display: block;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/cellular-automation.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting kirjs-tracking>\n  <div style=\"position: absolute; right: 1vw; bottom: 1vh\">\n    <feedback-widget></feedback-widget>\n  </div>\n\n  <!--<kirjs-progress-bar></kirjs-progress-bar>-->\n  <slide-arrows></slide-arrows>\n\n  <!--  INTRO -->\n  <div *slide id=\"intro\"><div class=\"kirjs\"></div></div>\n\n  <div *slide id=\"set-of-cells\">\n    <h1>Grid</h1>\n    <kirjs-board\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 0, 0, 0, 0, 0]]\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"cells-with-state\">\n    <h1>Rules</h1>\n    <div class=\"rules\">\n      <div class=\"rule\" style=\"margin-right: 50px;\">\n        <kirjs-board [pattern]=\"[[0]]\"></kirjs-board>\n        <div class=\"arrow\" style=\"text-align: center;\">⇩</div>\n        <kirjs-board [pattern]=\"[[1]]\"></kirjs-board>\n      </div>\n      <div class=\"rule\">\n        <kirjs-board [pattern]=\"[[1]]\"></kirjs-board>\n        <div class=\"arrow\" style=\"text-align: center;\">⇩</div>\n        <kirjs-board [pattern]=\"[[0]]\"></kirjs-board>\n      </div>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 1, 0, 0, 0, 0]]\"\n      [transform]=\"examples.intro.inverse\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"more-rules\">\n    <h1>Rules</h1>\n    <div class=\"rules\">\n      <kirjs-rule3 [rule]=\"16\" [arrow]=\"true\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 1, 0, 0, 0, 0]]\"\n      [transform]=\"examples.intro.inPlace16\"\n      [delay]=\"150\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"more-rules-90\">\n    <h1>Rules</h1>\n    <div class=\"rules\">\n      <kirjs-rule3 [rule]=\"30\" [arrow]=\"true\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 1, 0, 0, 0, 0]]\"\n      [transform]=\"examples.intro.inPlace90\"\n      [delay]=\"150\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"two-d-90\">\n    <h1>Rule 90</h1>\n    <div class=\"rules\">\n      <kirjs-rule3 [rule]=\"90\" [arrow]=\"true\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"[\n        [\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          1,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0\n        ]\n      ]\"\n      [transform]=\"examples.intro.twoD90\"\n      [delay]=\"50\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"two-d-30\">\n    <h1>Stephen Wolfram (Rule 30)</h1>\n    <div class=\"img-wolfram\"></div>\n    <div class=\"rules\">\n      <kirjs-rule3 [rule]=\"30\" [arrow]=\"true\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"[\n        [\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          1,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0\n        ]\n      ]\"\n      [transform]=\"examples.intro.twoD30\"\n      [delay]=\"50\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"two-d-110\">\n    <div class=\"rules\">\n      <kirjs-rule3 [rule]=\"110\" [arrow]=\"true\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"[\n        [\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          1,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0\n        ]\n      ]\"\n      [transform]=\"examples.intro.twoD110\"\n      [delay]=\"50\"\n    ></kirjs-board>\n  </div>\n  <div *slide id=\"two-d-random\">\n    <div class=\"rules\">\n      <kirjs-rule3 [rule]=\"examples.intro.rand\" [arrow]=\"true\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"[\n        [\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          1,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0,\n          0\n        ]\n      ]\"\n      [transform]=\"examples.intro.twoDRand\"\n      [delay]=\"50\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"nks\">\n    <h1>New kind of science</h1>\n    <div class=\"img-nks\"></div>\n  </div>\n  <div *slide id=\"cam\">\n    <h1>cambridge</h1>\n    <div class=\"img-30\"></div>\n    <div class=\"img-30-2\"></div>\n  </div>\n\n  <div *slide id=\"need-more-rules\">\n    <h1>Cellular Automata 2D!</h1>\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPattern\"\n      [transform]=\"examples.life.random\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-neighborhoods\">\n    <h1>Neighborhoods</h1>\n    <div>\n      <div class=\"neighborhood\">\n        <div class=\"img-moore\"></div>\n        <div>\n          <h1>Edward F. Moore</h1>\n          <kirjs-rule\n            [before]=\"[\n              [0, 0, 0],\n              [0, 1, 0],\n              [0, 0, 0]\n            ]\"\n          ></kirjs-rule>\n        </div>\n      </div>\n      <div class=\"neighborhood\">\n        <div class=\"img-neuman\"></div>\n        <div>\n          <h1>John von Neumann</h1>\n          <kirjs-rule\n            [before]=\"[\n              ['x', 0, 'x'],\n              [0, 1, 0],\n              ['x', 0, 'x']\n            ]\"\n          ></kirjs-rule>\n        </div>\n        <div>\n          <h1>Extended</h1>\n          <kirjs-rule\n            [before]=\"[\n              ['x', 'x', 0, 'x', 'x'],\n              ['x', 'x', 0, 'x', 'x'],\n              [0, 0, 1, 0, 0],\n              ['x', 'x', 0, 'x', 'x'],\n              ['x', 'x', 0, 'x', 'x']\n            ]\"\n          ></kirjs-rule>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div *slide id=\"2d\">\n    <div class=\"rules\"><kirjs-rule8></kirjs-rule8></div>\n  </div>\n\n  <div *slide id=\"2d-random\">\n    <h1 class=\"grid-header\">\n      Random Rules: Survive: {{ examples.life.randomRules.survive }} Born:\n      {{ examples.life.randomRules.born }}\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPattern\"\n      [transform]=\"examples.life.random\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-labyrynth\">\n    <h1 class=\"grid-header\">\n      Survive: {{ examples.life.labyrynthRules.survive }} Born:\n      {{ examples.life.labyrynthRules.born }}\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPatternSparce\"\n      [transform]=\"examples.life.labyrynth\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n  <div *slide id=\"2d-labyrynth4\">\n    <h1 class=\"grid-header\">\n      Survive: {{ examples.life.labRules4.survive }} Born:\n      {{ examples.life.labRules4.born }}\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPatternSparce\"\n      [transform]=\"examples.life.labyrynth4\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-labyrynth5\">\n    <h1 class=\"grid-header\">\n      Survive: {{ examples.life.labRules5.survive }} Born:\n      {{ examples.life.labRules5.born }}\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPatternSparce\"\n      [transform]=\"examples.life.labyrynth5\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-labyrynth6\">\n    <h1 class=\"grid-header\">\n      Survive: {{ examples.life.labRules6.survive }} Born:\n      {{ examples.life.labRules6.born }}\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPatternSparce\"\n      [transform]=\"examples.life.labyrynth6\"\n      [delay]=\"260\"\n    ></kirjs-board>\n  </div>\n  <div *slide id=\"2d-cave\">\n    <h1 class=\"grid-header\">Random cave generation</h1>\n\n    <div class=\"img-cave\"></div>\n  </div>\n\n  <div *slide id=\"game-of-life\">\n    <div class=\"img-conway\"></div>\n    <h1 class=\"grid-header\">\n      game of life: Survive: {{ examples.life.gameOfLifeRules.survive }} Born:\n      {{ examples.life.gameOfLifeRules.born }}\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.randomPattern\"\n      [transform]=\"examples.life.gameOfLife\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-life-still-life\">\n    <h1 class=\"grid-header\">\n      Still life\n\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.stillLife\"\n      [transform]=\"examples.life.gameOfLife\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-life-oscilator\">\n    <h1 class=\"grid-header\">\n      What's that?\n\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.oscilator\"\n      [transform]=\"examples.life.gameOfLife\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n  <div *slide id=\"2d-life-oscilator-2\">\n    <h1 class=\"grid-header\">\n      What's that?\n      <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [pattern]=\"examples.life.pattern.oscilatorClock\"\n      [transform]=\"examples.life.gameOfLife\"\n      [delay]=\"250\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"2d-life-oscilator-2\">\n    <div>\n      <h1 class=\"grid-header\">List of oscilators</h1>\n      <kirjs-oscilators></kirjs-oscilators>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-space-ships\">\n    <div>\n      <h1 class=\"grid-header\">\n        Space ships - glider (by Richard K. Guy)\n        <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n          {{ board1.playing ? '❚❚' : '▶' }}\n        </div>\n      </h1>\n\n      <kirjs-board\n        #board1\n        [cellHeight]=\"20\"\n        [cellWidth]=\"20\"\n        [pattern]=\"examples.life.pattern.glider\"\n        [transform]=\"examples.life.gameOfLife\"\n        [delay]=\"50\"\n      ></kirjs-board>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-space-ships-copperhead\">\n    <div>\n      <h1 class=\"grid-header\">\n        Copperhead (2016)\n        <div class=\"play\" (click)=\"board1.playing = !board1.playing\">\n          {{ board1.playing ? '❚❚' : '▶' }}\n        </div>\n      </h1>\n\n      <kirjs-board\n        #board1\n        [cellHeight]=\"20\"\n        [cellWidth]=\"20\"\n        [pattern]=\"examples.life.pattern.copperhead\"\n        [transform]=\"examples.life.gameOfLife\"\n        [delay]=\"50\"\n      ></kirjs-board>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-guns\">\n    <div>\n      <h1 class=\"grid-header\">Guns - Gosper Gun ($50)</h1>\n      <div class=\"img-gosper\"></div>\n      <div class=\"img-gun\"></div>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-glider-synthesis\">\n    <div>\n      <h1 class=\"grid-header\">Synthesis</h1>\n      <iframe\n        width=\"800\"\n        height=\"500\"\n        src=\"https://www.youtube.com/embed/j4p75EdGd-Q\"\n        frameborder=\"0\"\n        allowfullscreen\n      ></iframe>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-mp\">\n    <div>\n      <h1 class=\"grid-header\">Metapixel (Guess The Size)</h1>\n      <div class=\"img-mp\"></div>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-mp-answer\">\n    <div>\n      <h1 class=\"grid-header\">Metapixel (2048x2048)</h1>\n      <div class=\"img-mp\"></div>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-mp-video\">\n    <div>\n      <h1 class=\"grid-header\">Life in life</h1>\n      <iframe\n        width=\"560\"\n        height=\"315\"\n        src=\"https://www.youtube.com/embed/xP5-iIeKXE8\"\n        frameborder=\"0\"\n        allowfullscreen\n      ></iframe>\n    </div>\n  </div>\n\n  <div *slide id=\"2d-life-turing machine\">\n    <div>\n      <h1 class=\"grid-header\">Turing Machine</h1>\n      <div class=\"img-turing\"></div>\n    </div>\n  </div>\n\n  <div *slide id=\"demos\"><h1>Bunch of demos</h1></div>\n\n  <div *slide id=\"demos-3d\">\n    <h1>3d</h1>\n    <iframe\n      width=\"560\"\n      height=\"315\"\n      src=\"https://www.youtube.com/embed/iiEQg-SHY1g\"\n      frameborder=\"0\"\n      allowfullscreen\n    ></iframe>\n  </div>\n\n  <div *slide id=\"demos-3d\">\n    <h1>Art</h1>\n    <a href=\"http://rainbowsmoke.hu/gallery\">http://rainbowsmoke.hu/gallery</a>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/cellular-automation.component.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction inPlace(rule) {\n  const map = (256 + rule)\n    .toString(2)\n    .substr(1)\n    .split('')\n    .map(Number)\n    .reduce((a, v, i) => {\n      a[(15 - i).toString(2).substr(1)] = v;\n      return a;\n    }, {});\n\n  function transformRow(row) {\n    const result = [];\n    for (let i = 0; i < row.length; i++) {\n      const a1 = row[(row.length + i - 1) % row.length].toString();\n      const a2 = row[i].toString();\n      const a3 = row[(i + 1) % row.length].toString();\n      result[i] = [map[a1 + a2 + a3]];\n    }\n    return result;\n  }\n\n  return function(grid) {\n    return grid.map(transformRow);\n  };\n}\n\nfunction transform2d(rule) {\n  const survive = rule.survive.reduce((a, v) => {\n    a[v] = true;\n    return a;\n  }, {});\n  const born = rule.born.reduce((a, v) => {\n    a[v] = true;\n    return a;\n  }, {});\n\n  return function(grid) {\n    return grid.map((row, y) => {\n      return row.map((cell, x) => {\n        const px = (row.length + x - 1) % row.length;\n        const nx = (x + 1) % row.length;\n        const py = (grid.length + y - 1) % grid.length;\n        const ny = (y + 1) % grid.length;\n\n        const score =\n          grid[py][px] +\n          grid[py][x] +\n          grid[py][nx] +\n          grid[y][px] +\n          grid[y][nx] +\n          grid[ny][px] +\n          grid[ny][x] +\n          grid[ny][nx];\n\n        if ((cell === 0 && born[score]) || (cell === 1 && survive[score])) {\n          return 1;\n        }\n\n        return 0;\n      });\n    });\n  };\n}\n\nfunction appendTransform(rule) {\n  const transform = inPlace(rule);\n  return function(grid) {\n    const lastRow = grid[grid.length - 1];\n    grid.push(transform([lastRow])[0]);\n    return grid;\n  };\n}\n\nconst rand = Math.floor(Math.random() * 255);\n\nconst randomRules = new Array(8).fill(0).reduce(\n  (a, v, i) => {\n    if (Math.random() < 0.3) {\n      a.survive.push(i);\n    }\n    if (Math.random() < 0.3) {\n      a.born.push(i);\n    }\n    return a;\n  },\n  { survive: [], born: [] }\n);\n\nconst gameOfLifeRules = { survive: [2, 3], born: [3] };\nconst gameOfLife = transform2d(gameOfLifeRules);\nconst randomPattern = new Array(30)\n  .fill(0)\n  .map(() => new Array(60).fill(0).map(() => (Math.random() < 0.3 ? 1 : 0)));\nconst randomPatternSparce = new Array(30)\n  .fill(0)\n  .map(() => new Array(60).fill(0).map(() => (Math.random() < 0.04 ? 1 : 0)));\n\nconst labyrynthRules = { survive: [0, 1, 2, 3], born: [1] };\n\nconst labRules4 = { survive: [0, 1, 2, 3, 4], born: [1] };\nconst labRules5 = { survive: [0, 1, 2, 3, 4, 5], born: [1] };\nconst labRules6 = { survive: [0, 1, 2, 3, 4, 5, 6], born: [1] };\n\n@Component({\n  selector: 'kirjs-cellular-automation',\n  templateUrl: './cellular-automation.component.html',\n  styleUrls: ['./cellular-automation.component.css']\n})\nexport class CellularAutomationComponent {\n  examples = {\n    intro: {\n      inverse(pattern) {\n        return pattern.map(line => line.map(cell => (cell + 1) % 2));\n      },\n      rand,\n      inPlace16: inPlace(16),\n      inPlace90: inPlace(90),\n      twoD18: appendTransform(18),\n      twoD30: appendTransform(30),\n      twoD90: appendTransform(90),\n      twoD110: appendTransform(110),\n      twoDRand: appendTransform(rand),\n\n      pattern: [\n        [0, 0, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 1, 0, 0, 0, 0]\n      ]\n    },\n    life: {\n      randomRules,\n      random: transform2d(randomRules),\n      gameOfLifeRules,\n      gameOfLife,\n      labyrynthRules: labyrynthRules,\n      labyrynth: transform2d(labyrynthRules),\n      labRules4,\n      labyrynth4: transform2d(labRules4),\n      labRules5,\n      labyrynth5: transform2d(labRules5),\n      labRules6,\n      labyrynth6: transform2d(labRules6),\n      pattern: {\n        randomPattern,\n        randomPatternSparce,\n        stillLife: [\n          [0, 0, 0, 0],\n          [0, 1, 1, 0],\n          [0, 1, 1, 0],\n          [0, 0, 0, 0]\n        ],\n        oscilator: [\n          [0, 0, 0, 0, 0],\n          [0, 0, 1, 0, 0],\n          [0, 0, 1, 0, 0],\n          [0, 0, 1, 0, 0],\n          [0, 0, 0, 0, 0]\n        ],\n        oscilatorClock: [\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n          [0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0],\n          [0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0],\n          [0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0],\n          [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0],\n          [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n        ],\n\n        glider: [\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n        ],\n\n        copperhead: [\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            0,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            1,\n            1,\n            0,\n            1,\n            1,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            1,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            1,\n            0,\n            1,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            1,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            1,\n            0,\n            1,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            1,\n            1,\n            0,\n            1,\n            1,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            0,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ],\n          [\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n          ]\n        ]\n      }\n    }\n  };\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/cellular-automation.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\n\nimport { CellularAutomationComponent } from './cellular-automation.component';\nimport { BoardComponent } from './board/board.component';\nimport { Rule3Component } from './rule3/rule3.component';\nimport { RuleComponent } from './rule/rule.component';\nimport { Rule8Component } from './rule8/rule8.component';\nimport { OscilatorsComponent } from './oscilators/oscilators.component';\nimport { Rule4Component } from './rule3/rule4/rule4.component';\n\n@NgModule({\n  imports: [SlidesModule, FeedbackModule, CommonModule],\n  declarations: [\n    CellularAutomationComponent,\n    BoardComponent,\n    Rule3Component,\n    RuleComponent,\n    Rule8Component,\n    OscilatorsComponent,\n    Rule4Component\n  ],\n  exports: [\n    CellularAutomationComponent,\n    CellularAutomationComponent,\n    BoardComponent,\n    Rule3Component,\n    RuleComponent,\n    Rule8Component,\n    OscilatorsComponent,\n    BoardComponent,\n    Rule4Component\n  ]\n})\nexport class CellularAutomationModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/oscilators/oscilators.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/oscilators/oscilators.component.html",
    "content": "<table class=\"wikitable\" style=\"margin-left:auto;margin-right:auto;\">\n  <tbody>\n    <tr>\n      <th>Period</th>\n      <th>First discovered</th>\n      <th>Discoverer</th>\n      <th>Year of discovery</th>\n      <th style=\"background-color:white;border-top-color:white;\">\n        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n      </th>\n      <th>Smallest known</th>\n      <th>Minimum # of cells</th>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_2\"\n          title=\"Category:Oscillators with period 2\"\n          >2</a\n        >\n      </th>\n      <td><a href=\"/wiki/Blinker\" title=\"Blinker\">blinker</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_John_Conway\"\n          title=\"Category:Patterns found by John Conway\"\n          >John Conway</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1970\"\n          title=\"Category:Patterns found in 1970\"\n          >1970</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/Blinker\" title=\"Blinker\">blinker</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_3_cells\"\n          title=\"Category:Patterns with 3 cells\"\n          >3</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_3\"\n          title=\"Category:Oscillators with period 3\"\n          >3</a\n        >\n      </th>\n      <td><a href=\"/wiki/Pulsar\" title=\"Pulsar\">pulsar</a></td>\n      <td>John Conway</td>\n      <td>1970</td>\n      <td></td>\n      <td><a href=\"/wiki/Caterer\" title=\"Caterer\">caterer</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_12_cells\"\n          title=\"Category:Patterns with 12 cells\"\n          >12</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_4\"\n          title=\"Category:Oscillators with period 4\"\n          >4</a\n        >\n      </th>\n      <td><a href=\"/wiki/Pinwheel\" title=\"Pinwheel\">pinwheel</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Simon_Norton\"\n          title=\"Category:Patterns found by Simon Norton\"\n          >Simon Norton</a\n        >\n      </td>\n      <td>1970</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Mazing\" title=\"Mazing\">mazing</a>,\n        <a href=\"/wiki/Mold\" title=\"Mold\">mold</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_12_cells\"\n          title=\"Category:Patterns with 12 cells\"\n          >12</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_5\"\n          title=\"Category:Oscillators with period 5\"\n          >5</a\n        >\n      </th>\n      <td><a href=\"/wiki/Octagon_2\" title=\"Octagon 2\">octagon 2</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Sol_Goodman\"\n          title=\"Category:Patterns found by Sol Goodman\"\n          >Sol Goodman</a\n        >,\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Arthur_Taber\"\n          title=\"Category:Patterns found by Arthur Taber\"\n          >Arthur Taber</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1971\"\n          title=\"Category:Patterns found in 1971\"\n          >1971</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Pseudo-barberpole\" title=\"Pseudo-barberpole\"\n          >pseudo-barberpole</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_15_cells\"\n          title=\"Category:Patterns with 15 cells\"\n          >15</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_6\"\n          title=\"Category:Oscillators with period 6\"\n          >6</a\n        >\n      </th>\n      <td><a href=\"/wiki/$rats\" title=\"$rats\">$rats</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_David_Buckingham\"\n          title=\"Category:Patterns found by David Buckingham\"\n          >David Buckingham</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1972\"\n          title=\"Category:Patterns found in 1972\"\n          >1972</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/Unix\" title=\"Unix\">unix</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_16_cells\"\n          title=\"Category:Patterns with 16 cells\"\n          >16</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_7\"\n          title=\"Category:Oscillators with period 7\"\n          >7</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Burloaferimeter\" title=\"Burloaferimeter\"\n          >burloaferimeter</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>1972</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/28P7.1\" title=\"28P7.1\">28P7.1</a>,\n        <a href=\"/wiki/28P7.2\" title=\"28P7.2\">28P7.2</a>,\n        <a href=\"/wiki/Burloaferimeter\" title=\"Burloaferimeter\"\n          >burloaferimeter</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_28_cells\"\n          title=\"Category:Patterns with 28 cells\"\n          >28</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_8\"\n          title=\"Category:Oscillators with period 8\"\n          >8</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Figure_eight\" title=\"Figure eight\">figure eight</a>\n      </td>\n      <td>Simon Norton</td>\n      <td>1970</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Figure_eight\" title=\"Figure eight\">figure eight</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_12_cells\"\n          title=\"Category:Patterns with 12 cells\"\n          >12</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_9\"\n          title=\"Category:Oscillators with period 9\"\n          >9</a\n        >\n      </th>\n      <td><a href=\"/wiki/Worker_bee\" title=\"Worker bee\">worker bee</a></td>\n      <td>David Buckingham</td>\n      <td>1972</td>\n      <td></td>\n      <td><a href=\"/wiki/29P9\" title=\"29P9\">29P9</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_29_cells\"\n          title=\"Category:Patterns with 29 cells\"\n          >29</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_10\"\n          title=\"Category:Oscillators with period 10\"\n          >10</a\n        >\n      </th>\n      <td><a href=\"/wiki/42P10.1\" title=\"42P10.1\">42P10.1</a></td>\n      <td>David Buckingham</td>\n      <td>\n        ≤<a\n          href=\"/wiki/Category:Patterns_found_in_1976\"\n          title=\"Category:Patterns found in 1976\"\n          >1976</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/24P10\" title=\"24P10\">24P10</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_24_cells\"\n          title=\"Category:Patterns with 24 cells\"\n          >24</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_11\"\n          title=\"Category:Oscillators with period 11\"\n          >11</a\n        >\n      </th>\n      <td><a href=\"/wiki/38P11.1\" title=\"38P11.1\">38P11.1</a></td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1977\"\n          title=\"Category:Patterns found in 1977\"\n          >1977</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/Rattlesnake\" title=\"Rattlesnake\">rattlesnake</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_33_cells\"\n          title=\"Category:Patterns with 33 cells\"\n          >33</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_12\"\n          title=\"Category:Oscillators with period 12\"\n          >12</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Dinner_table\" title=\"Dinner table\">dinner table</a>\n      </td>\n      <td>\n        <a href=\"/wiki/Robert_Wainwright\" title=\"Robert Wainwright\"\n          >Robert Wainwright</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1972\"\n          title=\"Category:Patterns found in 1972\"\n          >1972</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Dinner_table\" title=\"Dinner table\">dinner table</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_33_cells\"\n          title=\"Category:Patterns with 33 cells\"\n          >33</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_13\"\n          title=\"Category:Oscillators with period 13\"\n          >13</a\n        >\n      </th>\n      <td><a href=\"/wiki/65P13.1\" title=\"65P13.1\">65P13.1</a></td>\n      <td>David Buckingham</td>\n      <td>1976</td>\n      <td></td>\n      <td><a href=\"/wiki/34P13\" title=\"34P13\">34P13</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_34_cells\"\n          title=\"Category:Patterns with 34 cells\"\n          >34</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_14\"\n          title=\"Category:Oscillators with period 14\"\n          >14</a\n        >\n      </th>\n      <td><a href=\"/wiki/Tumbler\" title=\"Tumbler\">tumbler</a></td>\n      <td>George Collins, Jr.</td>\n      <td>1970</td>\n      <td></td>\n      <td><a href=\"/wiki/Tumbler\" title=\"Tumbler\">tumbler</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_16_cells\"\n          title=\"Category:Patterns with 16 cells\"\n          >16</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_15\"\n          title=\"Category:Oscillators with period 15\"\n          >15</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Pentadecathlon\" title=\"Pentadecathlon\">pentadecathlon</a>\n      </td>\n      <td>John Conway</td>\n      <td>1970</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Pentadecathlon\" title=\"Pentadecathlon\">pentadecathlon</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_12_cells\"\n          title=\"Category:Patterns with 12 cells\"\n          >12</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_16\"\n          title=\"Category:Oscillators with period 16\"\n          >16</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Two_pre-L_hasslers\" title=\"Two pre-L hasslers\"\n          >two pre-L hasslers</a\n        >\n      </td>\n      <td>Robert Wainwright</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1983\"\n          title=\"Category:Patterns found in 1983\"\n          >1983</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/Achim%27s_p16\" title=\"Achim's p16\">Achim's p16</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_32_cells\"\n          title=\"Category:Patterns with 32 cells\"\n          >32</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_17\"\n          title=\"Category:Oscillators with period 17\"\n          >17</a\n        >\n      </th>\n      <td><a href=\"/wiki/54P17.1\" title=\"54P17.1\">54P17.1</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Dean_Hickerson\"\n          title=\"Category:Patterns found by Dean Hickerson\"\n          >Dean Hickerson</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1997\"\n          title=\"Category:Patterns found in 1997\"\n          >1997</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Honey_thieves\" title=\"Honey thieves\">Honey thieves</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_36_cells\"\n          title=\"Category:Patterns with 36 cells\"\n          >36</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_18\"\n          title=\"Category:Oscillators with period 18\"\n          >18</a\n        >\n      </th>\n      <td><a href=\"/wiki/117P18\" title=\"117P18\">117P18</a></td>\n      <td>David Buckingham</td>\n      <td>\n        ≤<a\n          href=\"/wiki/Category:Patterns_found_in_1991\"\n          title=\"Category:Patterns found in 1991\"\n          >1991</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/43P18\" title=\"43P18\">43P18</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_43_cells\"\n          title=\"Category:Patterns with 43 cells\"\n          >43</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th class=\"red_td\">19</th>\n      <td class=\"red_td\" colspan=\"6\"><i>None found</i></td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_20\"\n          title=\"Category:Oscillators with period 20\"\n          >20</a\n        >\n      </th>\n      <td><a href=\"/wiki/145P20\" title=\"145P20\">145P20</a></td>\n      <td><a href=\"/wiki/Noam_Elkies\" title=\"Noam Elkies\">Noam Elkies</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1995\"\n          title=\"Category:Patterns found in 1995\"\n          >1995</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Mold_on_fumarole\" title=\"Mold on fumarole\"\n          >mold on fumarole</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_30_cells\"\n          title=\"Category:Patterns with 30 cells\"\n          >30</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_21\"\n          title=\"Category:Oscillators with period 21\"\n          >21</a\n        >\n      </th>\n      <td><a href=\"/wiki/124P21\" title=\"124P21\">124P21</a></td>\n      <td>Robert Wainwright</td>\n      <td>1995</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Caterer_on_42P7.1\" title=\"Caterer on 42P7.1\"\n          >caterer on 42P7.1</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_54_cells\"\n          title=\"Category:Patterns with 54 cells\"\n          >54</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_22\"\n          title=\"Category:Oscillators with period 22\"\n          >22</a\n        >\n      </th>\n      <td><a href=\"/wiki/168P22.1\" title=\"168P22.1\">168P22.1</a></td>\n      <td>Noam Elkies</td>\n      <td>1997</td>\n      <td></td>\n      <td><a href=\"/wiki/36P22\" title=\"36P22\">36P22</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_36_cells\"\n          title=\"Category:Patterns with 36 cells\"\n          >36</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th class=\"red_td\">23</th>\n      <td class=\"red_td\" colspan=\"6\"><i>None found</i></td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_24\"\n          title=\"Category:Oscillators with period 24\"\n          >24</a\n        >\n      </th>\n      <td><a href=\"/wiki/186P24\" title=\"186P24\">186P24</a></td>\n      <td><a href=\"/wiki/Bill_Gosper\" title=\"Bill Gosper\">Bill Gosper</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1994\"\n          title=\"Category:Patterns found in 1994\"\n          >1994</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Caterer_on_figure_eight\" title=\"Caterer on figure eight\"\n          >caterer on figure eight</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_24_cells\"\n          title=\"Category:Patterns with 24 cells\"\n          >24</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_25\"\n          title=\"Category:Oscillators with period 25\"\n          >25</a\n        >\n      </th>\n      <td><a href=\"/wiki/134P25\" title=\"134P25\">134P25</a></td>\n      <td>Noam Elkies</td>\n      <td>1994</td>\n      <td></td>\n      <td>\n        <a\n          href=\"/w/index.php?title=P25_honey_farm_hassler&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"P25 honey farm hassler (page does not exist)\"\n          >p25 honey farm hassler</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_88_cells\"\n          title=\"Category:Patterns with 88 cells\"\n          >88</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_26\"\n          title=\"Category:Oscillators with period 26\"\n          >26</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_26\" title=\"Pre-pulsar shuttle 26\"\n          >pre-pulsar shuttle 26</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>1983</td>\n      <td></td>\n      <td><a href=\"/wiki/87P26\" title=\"87P26\">87P26</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_87_cells\"\n          title=\"Category:Patterns with 87 cells\"\n          >87</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_27\"\n          title=\"Category:Oscillators with period 27\"\n          >27</a\n        >\n      </th>\n      <td><a href=\"/wiki/123P27.1\" title=\"123P27.1\">123P27.1</a></td>\n      <td>Noam Elkies</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_2002\"\n          title=\"Category:Patterns found in 2002\"\n          >2002</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/56P27\" title=\"56P27\">56P27</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_56_cells\"\n          title=\"Category:Patterns with 56 cells\"\n          >56</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_28\"\n          title=\"Category:Oscillators with period 28\"\n          >28</a\n        >\n      </th>\n      <td><a href=\"/wiki/Newshuttle\" title=\"Newshuttle\">Newshuttle</a></td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1973\"\n          title=\"Category:Patterns found in 1973\"\n          >1973</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_28\" title=\"Pre-pulsar shuttle 28\"\n          >pre-pulsar shuttle 28</a\n        >,\n        <a href=\"/wiki/Mold_on_41P7.2\" title=\"Mold on 41P7.2\">mold on 41P7.2</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_53_cells\"\n          title=\"Category:Patterns with 53 cells\"\n          >53</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_29\"\n          title=\"Category:Oscillators with period 29\"\n          >29</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_29\" title=\"Pre-pulsar shuttle 29\"\n          >pre-pulsar shuttle 29</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1980\"\n          title=\"Category:Patterns found in 1980\"\n          >1980</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_29\" title=\"Pre-pulsar shuttle 29\"\n          >pre-pulsar shuttle 29</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_54_cells\"\n          title=\"Category:Patterns with 54 cells\"\n          >54</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_30\"\n          title=\"Category:Oscillators with period 30\"\n          >30</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Queen_bee_shuttle\" title=\"Queen bee shuttle\"\n          >queen bee shuttle</a\n        >\n      </td>\n      <td>Bill Gosper</td>\n      <td>1970</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Queen_bee_shuttle\" title=\"Queen bee shuttle\"\n          >queen bee shuttle</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_20_cells\"\n          title=\"Category:Patterns with 20 cells\"\n          >20</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_31\"\n          title=\"Category:Oscillators with period 31\"\n          >31</a\n        >\n      </th>\n      <td><a href=\"/wiki/48P31\" title=\"48P31\">48P31</a></td>\n      <td>\n        <a\n          href=\"/w/index.php?title=Matthias_Merzenich&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Matthias Merzenich (page does not exist)\"\n          >Matthias Merzenich</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_2010\"\n          title=\"Category:Patterns found in 2010\"\n          >2010</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/48P31\" title=\"48P31\">48P31</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_48_cells\"\n          title=\"Category:Patterns with 48 cells\"\n          >48</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_32\"\n          title=\"Category:Oscillators with period 32\"\n          >32</a\n        >\n      </th>\n      <td><a href=\"/wiki/Gourmet\" title=\"Gourmet\">gourmet</a></td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1978\"\n          title=\"Category:Patterns found in 1978\"\n          >1978</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/Gourmet\" title=\"Gourmet\">gourmet</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_66_cells\"\n          title=\"Category:Patterns with 66 cells\"\n          >66</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_33\"\n          title=\"Category:Oscillators with period 33\"\n          >33</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/258P3_on_Achim%27s_p11\" title=\"258P3 on Achim's p11\"\n          >258P3 on Achim's p11</a\n        >\n      </td>\n      <td>\n        Noam Elkies,\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Achim_Flammenkamp\"\n          title=\"Category:Patterns found by Achim Flammenkamp\"\n          >Achim Flammenkamp</a\n        >\n      </td>\n      <td>1997</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Caterer_on_rattlesnake\" title=\"Caterer on rattlesnake\"\n          >caterer on rattlesnake</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_46_cells\"\n          title=\"Category:Patterns with 46 cells\"\n          >46</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th class=\"red_td\">34</th>\n      <td class=\"red_td\" colspan=\"6\"><i>No non-trivial examples found</i></td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_35\"\n          title=\"Category:Oscillators with period 35\"\n          >35</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P35_beehive_hassler\" title=\"P35 beehive hassler\"\n          >P35 beehive hassler</a\n        >\n      </td>\n      <td>Dean Hickerson</td>\n      <td>1995</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/P35_honey_farm_hassler\" title=\"P35 honey farm hassler\"\n          >p35 honey farm hassler</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_44_cells\"\n          title=\"Category:Patterns with 44 cells\"\n          >44</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_36\"\n          title=\"Category:Oscillators with period 36\"\n          >36</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P36_toad_hassler\" title=\"P36 toad hassler\"\n          >P36 toad hassler</a\n        >\n      </td>\n      <td>Robert Wainwright</td>\n      <td>1984</td>\n      <td></td>\n      <td><a href=\"/wiki/22P36\" title=\"22P36\">22P36</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_22_cells\"\n          title=\"Category:Patterns with 22 cells\"\n          >22</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_37\"\n          title=\"Category:Oscillators with period 37\"\n          >37</a\n        >\n      </th>\n      <td><a href=\"/wiki/124P37\" title=\"124P37\">124P37</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Nicolay_Beluchenko\"\n          title=\"Category:Patterns found by Nicolay Beluchenko\"\n          >Nicolay Beluchenko</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_2009\"\n          title=\"Category:Patterns found in 2009\"\n          >2009</a\n        >\n      </td>\n      <td></td>\n      <td><a href=\"/wiki/124P37\" title=\"124P37\">124P37</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_124_cells\"\n          title=\"Category:Patterns with 124 cells\"\n          >124</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th class=\"red_td\">38</th>\n      <td class=\"red_td\" colspan=\"6\"><i>None found</i></td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_39\"\n          title=\"Category:Oscillators with period 39\"\n          >39</a\n        >\n      </th>\n      <td><a href=\"/wiki/134P39.1\" title=\"134P39.1\">134P39.1</a></td>\n      <td>David Buckingham, Noam Elkies</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_2000\"\n          title=\"Category:Patterns found in 2000\"\n          >2000</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Caterer_on_34P13\" title=\"Caterer on 34P13\"\n          >caterer on 34P13</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_46_cells\"\n          title=\"Category:Patterns with 46 cells\"\n          >46</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_40\"\n          title=\"Category:Oscillators with period 40\"\n          >40</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P40_B-heptomino_shuttle\" title=\"P40 B-heptomino shuttle\"\n          >P40 B-heptomino shuttle</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>≤1991</td>\n      <td></td>\n      <td><a href=\"/wiki/26P40\" title=\"26P40\">26P40</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_26_cells\"\n          title=\"Category:Patterns with 26 cells\"\n          >26</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th class=\"red_td\">41</th>\n      <td class=\"red_td\" colspan=\"6\"><i>None found</i></td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_42\"\n          title=\"Category:Oscillators with period 42\"\n          >42</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P42_glider_shuttle\" title=\"P42 glider shuttle\"\n          >P42 glider shuttle</a\n        >\n      </td>\n      <td>Noam Elkies</td>\n      <td>1994</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Unix_on_41P7.2\" title=\"Unix on 41P7.2\">unix on 41P7.2</a>\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_57_cells\"\n          title=\"Category:Patterns with 57 cells\"\n          >57</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_43\"\n          title=\"Category:Oscillators with period 43\"\n          >43</a\n        >\n      </th>\n      <td>\n        <a\n          href=\"/wiki/P43_glider_loop\"\n          title=\"P43 glider loop\"\n          class=\"mw-redirect\"\n          >P43 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/w/index.php?title=Mike_Playle&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Mike Playle (page does not exist)\"\n          >Mike Playle</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_2013\"\n          title=\"Category:Patterns found in 2013\"\n          >2013</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/P43_glider_loop\"\n          title=\"P43 glider loop\"\n          class=\"mw-redirect\"\n          >P43 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_228_cells\"\n          title=\"Category:Patterns with 228 cells\"\n          >228</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_44\"\n          title=\"Category:Oscillators with period 44\"\n          >44</a\n        >\n      </th>\n      <td>\n        <a\n          href=\"/wiki/P44_pi-heptomino_hassler\"\n          title=\"P44 pi-heptomino hassler\"\n          >P44 pi-heptomino hassler</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>1992</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Mold_on_rattlesnake\" title=\"Mold on rattlesnake\"\n          >mold on rattlesnake</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_45_cells\"\n          title=\"Category:Patterns with 45 cells\"\n          >45</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_45\"\n          title=\"Category:Oscillators with period 45\"\n          >45</a\n        >\n      </th>\n      <td>\n        <a\n          href=\"/wiki/Pentadecathlon_on_snacker\"\n          title=\"Pentadecathlon on snacker\"\n          >pentadecathlon on snacker</a\n        >\n      </td>\n      <td>&nbsp;?</td>\n      <td>≤1995</td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/Pentadecathlon_on_thumb_1\"\n          title=\"Pentadecathlon on thumb 1\"\n          >pentadecathlon on thumb 1</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_48_cells\"\n          title=\"Category:Patterns with 48 cells\"\n          >48</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_46\"\n          title=\"Category:Oscillators with period 46\"\n          >46</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Twin_bees_shuttle\" title=\"Twin bees shuttle\"\n          >twin bees shuttle</a\n        >\n      </td>\n      <td>Bill Gosper</td>\n      <td>1971</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Twin_bees_shuttle\" title=\"Twin bees shuttle\"\n          >twin bees shuttle</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_28_cells\"\n          title=\"Category:Patterns with 28 cells\"\n          >28</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_47\"\n          title=\"Category:Oscillators with period 47\"\n          >47</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_47\" title=\"Pre-pulsar shuttle 47\"\n          >pre-pulsar shuttle 47</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1982\"\n          title=\"Category:Patterns found in 1982\"\n          >1982</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_47\" title=\"Pre-pulsar shuttle 47\"\n          >pre-pulsar shuttle 47</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_84_cells\"\n          title=\"Category:Patterns with 84 cells\"\n          >84</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_48\"\n          title=\"Category:Oscillators with period 48\"\n          >48</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P48_toad_hassler\" title=\"P48 toad hassler\"\n          >P48 toad hassler</a\n        >\n      </td>\n      <td>Bill Gosper</td>\n      <td>1994</td>\n      <td></td>\n      <td><a href=\"/wiki/65P48\" title=\"65P48\">65P48</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_65_cells\"\n          title=\"Category:Patterns with 65 cells\"\n          >65</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_49\"\n          title=\"Category:Oscillators with period 49\"\n          >49</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P49_glider_shuttle\" title=\"P49 glider shuttle\"\n          >p49 glider shuttle</a\n        >\n      </td>\n      <td>Noam Elkies</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1999\"\n          title=\"Category:Patterns found in 1999\"\n          >1999</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/P49_glider_loop\"\n          title=\"P49 glider loop\"\n          class=\"mw-redirect\"\n          >p49 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_228_cells\"\n          title=\"Category:Patterns with 228 cells\"\n          >228</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_50\"\n          title=\"Category:Oscillators with period 50\"\n          >50</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P50_glider_shuttle\" title=\"P50 glider shuttle\"\n          >P50 glider shuttle</a\n        >\n      </td>\n      <td>Dean Hickerson</td>\n      <td>1992</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/P50_traffic_jam\" title=\"P50 traffic jam\"\n          >P50 traffic jam</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_92_cells\"\n          title=\"Category:Patterns with 92 cells\"\n          >92</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_51\"\n          title=\"Category:Oscillators with period 51\"\n          >51</a\n        >\n      </th>\n      <td><a href=\"/wiki/112P51\" title=\"112P51\">112P51</a></td>\n      <td>Nicolay Beluchenko</td>\n      <td>2009</td>\n      <td></td>\n      <td><a href=\"/wiki/92P51\" title=\"92P51\">92P51</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_92_cells\"\n          title=\"Category:Patterns with 92 cells\"\n          >92</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_52\"\n          title=\"Category:Oscillators with period 52\"\n          >52</a\n        >\n      </th>\n      <td><a href=\"/wiki/35P52\" title=\"35P52\">35P52</a></td>\n      <td>David Buckingham</td>\n      <td>1977</td>\n      <td></td>\n      <td><a href=\"/wiki/35P52\" title=\"35P52\">35P52</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_35_cells\"\n          title=\"Category:Patterns with 35 cells\"\n          >35</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_53&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 53 (page does not exist)\"\n          >53</a\n        >\n      </th>\n      <td>\n        <a\n          href=\"/wiki/P53_glider_loop\"\n          title=\"P53 glider loop\"\n          class=\"mw-redirect\"\n          >P53 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/w/index.php?title=Mike_Playle&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Mike Playle (page does not exist)\"\n          >Mike Playle</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_2013\"\n          title=\"Category:Patterns found in 2013\"\n          >2013</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/P53_glider_loop\"\n          title=\"P53 glider loop\"\n          class=\"mw-redirect\"\n          >P53 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_228_cells\"\n          title=\"Category:Patterns with 228 cells\"\n          >228</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_54\"\n          title=\"Category:Oscillators with period 54\"\n          >54</a\n        >\n      </th>\n      <td><a href=\"/wiki/P54_shuttle\" title=\"P54 shuttle\">P54 shuttle</a></td>\n      <td>David Buckingham</td>\n      <td>1974</td>\n      <td></td>\n      <td><a href=\"/wiki/P54_shuttle\" title=\"P54 shuttle\">P54 shuttle</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_48_cells\"\n          title=\"Category:Patterns with 48 cells\"\n          >48</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_55\"\n          title=\"Category:Oscillators with period 55\"\n          >55</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_hassler_55\" title=\"Pre-pulsar hassler 55\"\n          >pre-pulsar hassler 55</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1986\"\n          title=\"Category:Patterns found in 1986\"\n          >1986</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/Pseudo-barberpole_on_rattlesnake\"\n          title=\"Pseudo-barberpole on rattlesnake\"\n          >pseudo-barberpole on rattlesnake</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_49_cells\"\n          title=\"Category:Patterns with 49 cells\"\n          >49</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_56\"\n          title=\"Category:Oscillators with period 56\"\n          >56</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P56_B-heptomino_shuttle\" title=\"P56 B-heptomino shuttle\"\n          >P56 B-heptomino shuttle</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>≤1991</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/P56_B-heptomino_shuttle\" title=\"P56 B-heptomino shuttle\"\n          >P56 B-heptomino shuttle</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_45_cells\"\n          title=\"Category:Patterns with 45 cells\"\n          >45</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_57\"\n          title=\"Category:Oscillators with period 57\"\n          >57</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P57_Herschel_loop_1\" title=\"P57 Herschel loop 1\"\n          >P57 Herschel loop 1</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_by_Dietrich_Leithner\"\n          title=\"Category:Patterns found by Dietrich Leithner\"\n          >Dietrich Leithner</a\n        >\n      </td>\n      <td>1997</td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/P57_glider_loop\"\n          title=\"P57 glider loop\"\n          class=\"mw-redirect\"\n          >P57 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_228_cells\"\n          title=\"Category:Patterns with 228 cells\"\n          >228</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_58\"\n          title=\"Category:Oscillators with period 58\"\n          >58</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P58_toadsucker\" title=\"P58 toadsucker\">P58 toadsucker</a>\n      </td>\n      <td>Bill Gosper</td>\n      <td>1994</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Pre-pulsar_shuttle_58\" title=\"Pre-pulsar shuttle 58\"\n          >pre-pulsar shuttle 58</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_104_cells\"\n          title=\"Category:Patterns with 104 cells\"\n          >104</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_59\"\n          title=\"Category:Oscillators with period 59\"\n          >59</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P59_Herschel_loop_1\" title=\"P59 Herschel loop 1\"\n          >P59 Herschel loop 1</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>1997</td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/P59_glider_loop\"\n          title=\"P59 glider loop\"\n          class=\"mw-redirect\"\n          >P59 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_228_cells\"\n          title=\"Category:Patterns with 228 cells\"\n          >228</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_60\"\n          title=\"Category:Oscillators with period 60\"\n          >60</a\n        >\n      </th>\n      <td>\n        <a\n          href=\"/w/index.php?title=P60_glider_shuttle&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"P60 glider shuttle (page does not exist)\"\n          >P60 glider shuttle</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>≤ 1971</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Mold_on_pentadecathlon\" title=\"Mold on pentadecathlon\"\n          >mold on pentadecathlon</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_24_cells\"\n          title=\"Category:Patterns with 24 cells\"\n          >24</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_61\"\n          title=\"Category:Oscillators with period 61\"\n          >61</a\n        >\n      </th>\n      <td>\n        <a href=\"/wiki/P61_Herschel_loop_1\" title=\"P61 Herschel loop 1\"\n          >P61 Herschel loop 1</a\n        >\n      </td>\n      <td>David Buckingham</td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_found_in_1996\"\n          title=\"Category:Patterns found in 1996\"\n          >1996</a\n        >\n      </td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/P61_glider_loop\"\n          title=\"P61 glider loop\"\n          class=\"mw-redirect\"\n          >P61 glider loop</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_228_cells\"\n          title=\"Category:Patterns with 228 cells\"\n          >228</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_62\"\n          title=\"Category:Oscillators with period 62\"\n          >62</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/110P62\" title=\"110P62\">110P62</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_110_cells\"\n          title=\"Category:Patterns with 110 cells\"\n          >110</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_63\"\n          title=\"Category:Oscillators with period 63\"\n          >63</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Snacker_on_38P7.2\" title=\"Snacker on 38P7.2\"\n          >snacker on 38P7.2</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_78_cells\"\n          title=\"Category:Patterns with 78 cells\"\n          >78</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_64\"\n          title=\"Category:Oscillators with period 64\"\n          >64</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Merzenich%27s_p64\" title=\"Merzenich's p64\"\n          >Merzenich's p64</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_34_cells\"\n          title=\"Category:Patterns with 34 cells\"\n          >34</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_65\"\n          title=\"Category:Oscillators with period 65\"\n          >65</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Fumarole_on_34P13\" title=\"Fumarole on 34P13\"\n          >fumarole on 34P13</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_52_cells\"\n          title=\"Category:Patterns with 52 cells\"\n          >52</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_66\"\n          title=\"Category:Oscillators with period 66\"\n          >66</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Caterer_on_36P22\" title=\"Caterer on 36P22\"\n          >caterer on 36P22</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_48_cells\"\n          title=\"Category:Patterns with 48 cells\"\n          >48</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_67&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 67 (page does not exist)\"\n          >67</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_68&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 68 (page does not exist)\"\n          >68</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_69&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 69 (page does not exist)\"\n          >69</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_70\"\n          title=\"Category:Oscillators with period 70\"\n          >70</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/78P70\" title=\"78P70\">78P70</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_78_cells\"\n          title=\"Category:Patterns with 78 cells\"\n          >78</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_71&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 71 (page does not exist)\"\n          >71</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_72\"\n          title=\"Category:Oscillators with period 72\"\n          >72</a\n        >\n      </th>\n      <td><a href=\"/wiki/47P72\" title=\"47P72\">47P72</a></td>\n      <td>Robert Wainwright</td>\n      <td>1990</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Figure_eight_on_22P36\" title=\"Figure eight on 22P36\"\n          >figure eight on 22P36</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_36_cells\"\n          title=\"Category:Patterns with 36 cells\"\n          >36</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_73&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 73 (page does not exist)\"\n          >73</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_74&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 74 (page does not exist)\"\n          >74</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_75\"\n          title=\"Category:Oscillators with period 75\"\n          >75</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/6_bits\" title=\"6 bits\">6 bits</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_49_cells\"\n          title=\"Category:Patterns with 49 cells\"\n          >49</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_76&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 76 (page does not exist)\"\n          >76</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_77\"\n          title=\"Category:Oscillators with period 77\"\n          >77</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/77P77\" title=\"77P77\">77P77</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_77_cells\"\n          title=\"Category:Patterns with 77 cells\"\n          >77</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_78\"\n          title=\"Category:Oscillators with period 78\"\n          >78</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/126P78.1\" title=\"126P78.1\">126P78.1</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_126_cells\"\n          title=\"Category:Patterns with 126 cells\"\n          >126</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_79&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 79 (page does not exist)\"\n          >79</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_80\"\n          title=\"Category:Oscillators with period 80\"\n          >80</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/122P80.1\" title=\"122P80.1\">122P80.1</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_122_cells\"\n          title=\"Category:Patterns with 122 cells\"\n          >122</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_81&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 81 (page does not exist)\"\n          >81</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_82&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 82 (page does not exist)\"\n          >82</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_83&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 83 (page does not exist)\"\n          >83</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_84\"\n          title=\"Category:Oscillators with period 84\"\n          >84</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/114P84\" title=\"114P84\">114P84</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_84_cells\"\n          title=\"Category:Patterns with 84 cells\"\n          >84</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_85&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 85 (page does not exist)\"\n          >85</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_86&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 86 (page does not exist)\"\n          >86</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_87\"\n          title=\"Category:Oscillators with period 87\"\n          >87</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td><a href=\"/wiki/84P87\" title=\"84P87\">84P87</a></td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_84_cells\"\n          title=\"Category:Patterns with 84 cells\"\n          >84</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_88\"\n          title=\"Category:Oscillators with period 88\"\n          >88</a\n        >\n      </th>\n      <td>\n        <a\n          href=\"/wiki/P44_pi-heptomino_hassler#Image_gallery\"\n          title=\"P44 pi-heptomino hassler\"\n          >P88 pi-heptomino hassler</a\n        >\n      </td>\n      <td>Dean Hickerson</td>\n      <td>1994</td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/Figure_eight_on_rattlesnake\"\n          title=\"Figure eight on rattlesnake\"\n          >figure eight on rattlesnake</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_45_cells\"\n          title=\"Category:Patterns with 45 cells\"\n          >45</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_89&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 89 (page does not exist)\"\n          >89</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_90\"\n          title=\"Category:Oscillators with period 90\"\n          >90</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Fumarole_on_43P18\" title=\"Fumarole on 43P18\"\n          >fumarole on 43P18</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_61_cells\"\n          title=\"Category:Patterns with 61 cells\"\n          >61</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/w/index.php?title=Category:Oscillators_with_period_91&amp;action=edit&amp;redlink=1\"\n          class=\"new\"\n          title=\"Category:Oscillators with period 91 (page does not exist)\"\n          >91</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_92\"\n          title=\"Category:Oscillators with period 92\"\n          >92</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a\n          href=\"/wiki/Twin_bees_shuttles_hassling_blinker\"\n          title=\"Twin bees shuttles hassling blinker\"\n          >twin bees shuttles hassling blinker</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_61_cells\"\n          title=\"Category:Patterns with 61 cells\"\n          >61</a\n        >\n      </td>\n    </tr>\n    <tr>\n      <th>\n        <a\n          href=\"/wiki/Category:Oscillators_with_period_93\"\n          title=\"Category:Oscillators with period 93\"\n          >93</a\n        >\n      </th>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td>&nbsp;?</td>\n      <td></td>\n      <td>\n        <a href=\"/wiki/Caterer_on_48P31\" title=\"Caterer on 48P31\"\n          >caterer on 48P31</a\n        >\n      </td>\n      <td>\n        <a\n          href=\"/wiki/Category:Patterns_with_60_cells\"\n          title=\"Category:Patterns with 60 cells\"\n          >60</a\n        >\n      </td>\n    </tr>\n  </tbody>\n</table>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/oscilators/oscilators.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { OscilatorsComponent } from './oscilators.component';\n\ndescribe('OscilatorsComponent', () => {\n  let component: OscilatorsComponent;\n  let fixture: ComponentFixture<OscilatorsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [OscilatorsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(OscilatorsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should be created', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/oscilators/oscilators.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-oscilators',\n  templateUrl: './oscilators.component.html',\n  styleUrls: ['./oscilators.component.css']\n})\nexport class OscilatorsComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule/rule.component.css",
    "content": ":host {\n  margin: 10px 0;\n}\n\n.rule {\n  margin-left: 10px;\n}\n\n.arrow {\n  font-size: 18px;\n  text-align: center;\n  padding: 5px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule/rule.component.html",
    "content": "<kirjs-board [pattern]=\"before\"></kirjs-board>\n<div class=\"arrow\" *ngIf=\"arrow\">⇩</div>\n<kirjs-board [pattern]=\"after\"></kirjs-board>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule/rule.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RuleComponent } from './rule.component';\nimport { BoardComponent } from '../board/board.component';\n\ndescribe('RuleComponent', () => {\n  let component: RuleComponent;\n  let fixture: ComponentFixture<RuleComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RuleComponent, BoardComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RuleComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should be created', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule/rule.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-rule',\n  templateUrl: './rule.component.html',\n  styleUrls: ['./rule.component.css']\n})\nexport class RuleComponent implements OnInit {\n  @Input() before = [];\n  @Input() after = [];\n  @Input() arrow = false;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule3.component.css",
    "content": ".rule {\n  display: flex;\n  width: 100%;\n  justify-content: space-between;\n}\n\n.index {\n  text-align: center;\n  font-size: 50px;\n  flex: 1;\n  margin-left: -20px;\n}\n\nkirjs-rule {\n  margin-right: 20px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule3.component.html",
    "content": "<div class=\"rule\">\n  <kirjs-rule\n    *ngFor=\"let v of before; let i = index\"\n    [before]=\"[before[i]]\"\n    [after]=\"[after[i]]\"\n    [arrow]=\"arrow\"\n  ></kirjs-rule>\n</div>\n<div class=\"rule\" *ngIf=\"indexes\">\n  <div *ngFor=\"let v of after; let i = index\" class=\"index\">\n    {{ v[1] }}\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule3.component.ts",
    "content": "import { Component, Input, OnChanges, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-rule3',\n  templateUrl: './rule3.component.html',\n  styleUrls: ['./rule3.component.css']\n})\nexport class Rule3Component implements OnInit, OnChanges {\n  after: Array<Array<string | number>>;\n  before: Array<Array<string | number>>;\n\n  @Input() rule = 0;\n  @Input() indexes = false;\n  @Input() arrow = false;\n\n  constructor() {}\n\n  ngOnChanges() {\n    this.after = (256 + this.rule)\n      .toString(2)\n      .substr(1)\n      .split('')\n      .map(Number)\n      .map(a => ['x', a, 'x']);\n    // tslint:disable\n    this.before = this.after\n      .map((v, i) =>\n        (8 + i)\n          .toString(2)\n          .substr(1)\n          .split('')\n      )\n      .reverse();\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule4/rule4.component.css",
    "content": ".wrapper {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.rule {\n  margin-left: 10px;\n  margin-top: 10px;\n}\n\n.cell {\n  width: 20px;\n  height: 20px;\n  border: 1px #ddd solid;\n}\n\n.after {\n  margin-left: 20px;\n}\n\n.active {\n  background: lime;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule4/rule4.component.html",
    "content": "<div class=\"wrapper\">\n  <div class=\"rule\" *ngFor=\"let row of before; let in = index\">\n    <div style=\"display: flex;\">\n      <div class=\"cell\" *ngFor=\"let i of row\" [class.active]=\"i == 1\"></div>\n    </div>\n    <div class=\"cell after\" [class.active]=\"after[in]\"></div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule4/rule4.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { Rule4Component } from './rule4.component';\n\ndescribe('Rule4Component', () => {\n  let component: Rule4Component;\n  let fixture: ComponentFixture<Rule4Component>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [Rule4Component]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(Rule4Component);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule3/rule4/rule4.component.ts",
    "content": "import { Component, Input, OnChanges } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-rule4',\n  templateUrl: './rule4.component.html',\n  styleUrls: ['./rule4.component.css']\n})\nexport class Rule4Component implements OnChanges {\n  @Input() test;\n  before: string[][];\n  after: number[];\n\n  ngOnChanges() {\n    this.after = this.test.table.map(a => (a === 'enable' ? 1 : 0));\n\n    this.before = new Array(8)\n      .fill(0)\n      .map((v, i) =>\n        (8 + i)\n          .toString(2)\n          .substr(1)\n          .split('')\n      )\n      .reverse();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule8/rule8.component.css",
    "content": ":host {\n  width: 100%;\n}\n\nkirjs-rule {\n  margin-right: 20px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  float: left;\n  margin-bottom: 20px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule8/rule8.component.html",
    "content": "<kirjs-rule\n  *ngFor=\"let v of before; let i = index\"\n  [before]=\"before[i]\"\n  [after]=\"after[i]\"\n  [arrow]=\"arrow\"\n></kirjs-rule>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/cellular-automation/rule8/rule8.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-rule8',\n  templateUrl: './rule8.component.html',\n  styleUrls: ['./rule8.component.css']\n})\nexport class Rule8Component implements OnInit {\n  after: Array<Array<Array<string | number>>>;\n  before: Array<Array<Array<string | number>>>;\n\n  @Input() rule = 0;\n  @Input() arrow = false;\n\n  constructor() {}\n\n  ngOnInit() {\n    const numbers = new Array(1024).fill(0, 0, 1024);\n    this.after = numbers.map(a => [[Math.round(Math.random())]]);\n    this.before = numbers.map((v, i) => {\n      const arr = (1024 + i).toString(2).substr(1);\n      return [\n        arr.substr(0, 3).split(''),\n        arr.substr(3, 3).split(''),\n        arr.substr(6, 3).split('')\n      ];\n    });\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/board/board.component.html",
    "content": "<!--{{game.getPosition()}}-->\n\n<kirjs-tools #tools [game]=\"game\" [highlights]=\"highlights\"></kirjs-tools>\n<!--<div (click)=\"log()\">log</div>-->\n\n<div class=\"board theme-{{ theme }}\">\n  <div *ngFor=\"let line of game.getPosition(); let x = index\" class=\"column\">\n    <div\n      *ngFor=\"let cell of line; let y = index\"\n      (click)=\"tools.selectedTool.action([x, y], game, highlights)\"\n      class=\"cell cell-{{ cell }} {{ this.highlights.get([x, y]) }}\"\n    ></div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/board/board.component.scss",
    "content": ".column {\n  display: flex;\n  flex-grow: 1;\n  flex-basis: 0;\n}\n\nkirjs-tools {\n  display: none;\n}\n\n.board {\n  width: 100%;\n  height: 100%;\n  border-left: 1px #999 solid;\n  border-top: 1px #999 solid;\n  display: flex;\n  flex-direction: column;\n}\n\n.cell {\n  &.highlight-yellow {\n    background: #ff0;\n  }\n  &.highlight-orange {\n    background: #ffb900;\n  }\n\n  &.highlight-transparent {\n    opacity: 0.4;\n  }\n\n  flex-grow: 1;\n  flex-basis: 0;\n  border-right: 1px #999 solid;\n  border-bottom: 1px #999 solid;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n}\n\n.theme-print {\n  .cell-1:before {\n    content: 'x';\n    color: #c53a00;\n  }\n\n  .cell-2:before {\n    content: 'o';\n    color: #666;\n  }\n  .cell-1:before,\n  .cell-2:before {\n    font-size: 12px;\n  }\n}\n\n.theme-gomoku {\n  .cell-1:before {\n    content: '⚫';\n  }\n\n  .cell-2:before {\n    content: '🔴';\n  }\n  .cell-3:before {\n    content: '⚫';\n    opacity: 0.5;\n  }\n\n  .cell-4:before {\n    content: '🔴';\n    opacity: 0.5;\n  }\n  .cell-1:before,\n  .cell-2:before {\n    font-size: 28px;\n  }\n}\n\n.theme-xo {\n  .cell-1:before {\n    content: '×';\n    color: red;\n  }\n\n  .cell-2:before {\n    content: '⚬';\n    color: blue;\n  }\n\n  .cell-1:before,\n  .cell-2:before {\n    font-size: 200px;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/board/board.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BoardComponent } from './board.component';\nimport { ToolsComponent } from '../tools/tools.component';\n\ndescribe('BoardComponent', () => {\n  let component: BoardComponent;\n  let fixture: ComponentFixture<BoardComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BoardComponent, ToolsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BoardComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/board/board.component.ts",
    "content": "import { Component, HostListener, Input } from '@angular/core';\nimport { Gomoku } from 'gomoku-tools';\nimport { Highlights } from '../highlights';\n\n@Component({\n  selector: 'kirjs-board',\n  templateUrl: './board.component.html',\n  styleUrls: ['./board.component.scss']\n})\nexport class BoardComponent {\n  @Input() theme = 'gomoku';\n  @Input() game = new Gomoku().moveTo(\n    'H8',\n    'I8',\n    'H9',\n    'H7',\n    'J9',\n    'I9',\n    'I10',\n    'H11',\n    'J11',\n    'K12',\n    'J10',\n    'J12',\n    'G10',\n    'H10',\n    'G8',\n    'F7',\n    'G9',\n    'G7',\n    'I7',\n    'J6',\n    'H12'\n  );\n  @Input() highlights = new Highlights();\n  @Input() showTools = true;\n\n  @HostListener('window:keydown.H', ['$event.target'])\n  @HostListener('window:keydown.J', ['$event.target'])\n  back() {\n    this.game.back();\n  }\n\n  @HostListener('window:keydown.T', ['$event.target'])\n  @HostListener('window:keydown.K', ['$event.target'])\n  forward() {\n    this.game.forward();\n  }\n\n  constructor() {}\n\n  log() {\n    console.log(this.game.getHistory());\n    console.log(this.game.getHistory().length);\n    console.log(this.highlights.highlights);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/board/board.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BoardComponent } from './board.component';\nimport { CommonModule } from '@angular/common';\nimport { ToolsComponent } from '../tools/tools.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [BoardComponent, ToolsComponent],\n  exports: [BoardComponent]\n})\nexport class GomokuBoardModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/gomoku.component.css",
    "content": "#intro,\n#outro {\n  /*  background: url(./browser/landscape-with-trees-1.jpg) no-repeat; */\n  background-size: 100% auto;\n  display: inline-block;\n  height: 100vh;\n}\n\ninput[type='checkbox'] {\n  transform: scale(2);\n}\n\n.hb,\ncake {\n  width: 100vw;\n  height: 200px;\n  background-position: center center;\n  background-color: white;\n  background-image: url('print/hb.jpg');\n  background-size: 300px;\n  background-repeat: no-repeat;\n}\nkirjs-board {\n  width: 500px;\n  height: 500px;\n}\n\n:host ::ng-deep [title][blue] .slide {\n  background: #0079ff;\n}\n\n:host ::ng-deep [title] .slide {\n  align-items: center;\n  background: #ff6e00;\n  color: white;\n  display: flex;\n  height: 100vh;\n  justify-content: center;\n  text-align: center;\n  width: 100%;\n}\n\nh1 {\n  font-size: 100px;\n}\n\ntr:first-child td {\n  background: #ff6e00;\n}\n\ntd,\nth {\n  font-size: 40px;\n  padding: 20px;\n}\n\nb {\n  background: transparent;\n  color: black;\n  text-decoration: underline dotted;\n}\n\na {\n  color: #444;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/gomoku.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting kirjs-tracking>\n  <!--(21) [\"H8\", \"I8\", \"H9\", \"H7\", \"J9\", \"I9\", \"I10\", \"h21\", \"J11\", \"K12\", \"J10\", \"J12\", \"G10\", \"h20\", \"G8\", \"F7\", \"G9\", \"G7\", \"I7\", \"J6\", \"h22\"]0: \"H8\"1: \"I8\"2: \"H9\"3: \"H7\"4: \"J9\"5: \"I9\"6: \"I10\"7: \"h21\"8: \"J11\"9: \"K12\"10: \"J10\"11: \"J12\"12: \"G10\"13: \"h20\"14: \"G8\"15: \"F7\"16: \"G9\"17: \"G7\"18: \"I7\"19: \"J6\"20: \"h22\"length: 21__proto__: Array(0)-->\n  <!--(30) [\"H8\", \"I8\", \"I9\", \"H9\", \"J10\", \"G7\", \"h20\", \"G10\", \"J7\", \"G8\", \"G11\", \"J8\", \"I10\", \"G6\", \"G9\", \"G5\", \"G4\", \"H7\", \"J9\", \"I6\", \"J5\", \"H6\", \"K10\", \"L10\", \"J6\", \"I7\", \"F4\", \"I5\", \"I4\", \"J4\"]0: \"H8\"1: \"I8\"2: \"I9\"3: \"H9\"4: \"J10\"5: \"G7\"6: \"h20\"7: \"G10\"8: \"J7\"9: \"G8\"10: \"G11\"11: \"J8\"12: \"I10\"13: \"G6\"14: \"G9\"15: \"G5\"16: \"G4\"17: \"H7\"18: \"J9\"19: \"I6\"20: \"J5\"21: \"H6\"22: \"K10\"23: \"L10\"24: \"J6\"25: \"I7\"26: \"F4\"27: \"I5\"28: \"I4\"29: \"J4\"length: 30__proto__: Array(0)-->\n\n  <slide-arrows></slide-arrows>\n\n  <div *slide no-padding title>\n    <h1>Gomoku</h1>\n    <div class=\"hb\"></div>\n    <h2>by @kirjs</h2>\n  </div>\n\n  <div *slide>\n    <h2>Plan</h2>\n    <ol>\n      <li>What's gomoku?</li>\n      <li>Rules</li>\n      <li>Why Gomoku?</li>\n      <li>Gomoku and Computers</li>\n      <li>Sample game</li>\n    </ol>\n  </div>\n\n  <!--\n    Rules\n  -->\n\n  <div *slide title>\n    <h1>Gomoku</h1>\n    <h2><b>Abstract</b> <b>strategy</b> <b>board</b> game</h2>\n    <h2>coming from ancient asia (China & Japan)</h2>\n  </div>\n\n  <div *slide>\n    <h2>tic-tac-toe</h2>\n    <kirjs-board center theme=\"xo\" [game]=\"games.ticTacToe\"></kirjs-board>\n  </div>\n\n  <div *slide>\n    <h2>Gomoku</h2>\n    <kirjs-board [game]=\"games.wonGame\"></kirjs-board>\n  </div>\n\n  <div *slide title><h1>Rules</h1></div>\n\n  <div *slide>\n    <h2>Rule 1: Black puts a stone first</h2>\n    <kirjs-board [game]=\"games.start\"></kirjs-board>\n  </div>\n\n  <div *slide>\n    <h2>\n      Rule 2: Players alternate, putting a stone of their color on an empty cell\n    </h2>\n    <kirjs-board [game]=\"games.start2\"></kirjs-board>\n  </div>\n\n  <div *slide>\n    <h2>Rule 3: The first player to get 5 in a row wins</h2>\n    <kirjs-board [game]=\"games.start5\"></kirjs-board>\n  </div>\n\n  <div *slide>\n    <h2>Sample game</h2>\n    <div style=\"display: flex;\">\n      <kirjs-board [game]=\"games.sample\"></kirjs-board>\n      <div>\n        <h2>Winning plan:</h2>\n        <ul>\n          <li><input type=\"checkbox\" /> Open 3 attack</li>\n          <li><input type=\"checkbox\" /> Open 4 attack</li>\n          <li><input type=\"checkbox\" /> Victory on continuous 4s</li>\n          <li><input type=\"checkbox\" /> A fork</li>\n          <li><input type=\"checkbox\" /> ????</li>\n          <li><input type=\"checkbox\" /> Profit</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n  <!--\n    Why gomoku?\n  -->\n\n  <div *slide title>\n    <h1>8 Reasons to play <b>Gomoku</b></h1>\n  </div>\n\n  <div *slide>\n    <h2>1. Brain massage</h2>\n    <ul>\n      <li>Lots of memorization</li>\n      <li>Patterns recognition</li>\n      <li>Problem solving</li>\n      <li>A lot of gomoku playes became successful at poker</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>2. Transferable life skills</h2>\n    <ul>\n      <li>Learn to win/lose</li>\n      <li>Opportunities to learn from mistakes</li>\n      <li>The skill is directly proportional to the amount of work put in</li>\n      <li>Strategical/Tacting thinking</li>\n      <li>Understanding consequences / thinking ahead</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>3. Social Aspect</h2>\n    <ul>\n      <li>Cross cultures/ages/accessible to everyone</li>\n      <li>Play people from different countries</li>\n      <li>Play in Tournaments or online</li>\n      <li>Play solo or in a team.</li>\n      <li>Hopefully soon play in real life :)</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>4. Quantifiable</h2>\n    <ul>\n      <li>All stats are out there</li>\n      <li>Learning curve - plateaus and accelerations.</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>5. Easy to start</h2>\n    <ul>\n      <li>Can play with pen and paper</li>\n      <li>Play online</li>\n      <li>A bunch of android apps</li>\n      <li>Very simple rules</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>6.Not very popular in the US</h2>\n    <ul>\n      <li>Very few people are playing</li>\n      <li>Not much has been done</li>\n      <li>Not much learning materials/tutorials/videos in english</li>\n    </ul>\n  </div>\n\n  <div *slide>\n    <h2>7. Lots of space for technical solutions</h2>\n    <ul>\n      <li>No good database of games</li>\n      <li>Existing online playing platforms not perfect</li>\n    </ul>\n  </div>\n  <div *slide><h2>8. It's Fun!</h2></div>\n\n  <div *slide title><h1>Gomoku and Computers 🤖</h1></div>\n\n  <div *slide>\n    <h2>Complexity</h2>\n    <table>\n      <tr>\n        <th>Game</th>\n        <th>Space/State<br />as log to base 10</th>\n        <th>Game Tree<br />as log to base 10</th>\n        <th>Branching Factor</th>\n      </tr>\n      <tr>\n        <td>Gomoku</td>\n        <td>105</td>\n        <td>70</td>\n        <td>210</td>\n      </tr>\n      <tr>\n        <td>Chess</td>\n        <td>47</td>\n        <td>123</td>\n        <td>35</td>\n      </tr>\n      <tr>\n        <td>Go</td>\n        <td>170</td>\n        <td>360</td>\n        <td>250</td>\n      </tr>\n      <tr>\n        <td>Draughts (8x8)</td>\n        <td>20</td>\n        <td>20</td>\n        <td>2.8</td>\n      </tr>\n      <tr>\n        <td>Tic-Tac-Toe</td>\n        <td>3</td>\n        <td>5</td>\n        <td>4</td>\n      </tr>\n    </table>\n\n    <a href=\"https://en.wikipedia.org/wiki/Game_complexity\"\n      >More on wikipedia</a\n    >\n  </div>\n\n  <div *slide title blue>\n    <h1>In the initial rules ⚫️ always started in the center</h1>\n  </div>\n\n  <div *slide title blue>\n    <h1>\n      In 1994 Victor Ellis proved that this way ⚫️ always win.\n      <a\n        href=\"http://digitalarchive.maastrichtuniversity.nl/fedora/get/guid:36b5cf0a-cf06-4602-afdb-1af04d65c23b/ASSET1\"\n      >\n        📄\n      </a>\n    </h1>\n  </div>\n\n  <div *slide title blue>\n    <h1>\n      Since then more advanced opening rules have been used, which haven't yet\n      been solved.\n    </h1>\n  </div>\n\n  <div *slide title blue>\n    <h1>One of them is swap2</h1>\n    <div class=\"cake\"></div>\n    <h2>(Using divide and choose)</h2>\n  </div>\n\n  <div *slide>\n    <h2>Black is stronger</h2>\n    <kirjs-board [game]=\"games.swap23\"></kirjs-board>\n  </div>\n\n  <div *slide>\n    <h2>A draw?</h2>\n    <kirjs-board [game]=\"games.swap26\"></kirjs-board>\n  </div>\n\n  <div *slide>\n    <h2>White surewin</h2>\n    <kirjs-board [game]=\"games.swap25\"></kirjs-board>\n  </div>\n\n  <div *slide title blue>\n    <h1>Swap2 opening hasn't been solved by a computer</h1>\n  </div>\n\n  <div *slide title blue>\n    <h1>\n      <a href=\"https://gomocup.org\">Gomocup</a> is a yearly gomoku AI\n      tournament.\n    </h1>\n  </div>\n\n  <div *slide title><h1>Now let's look at a real game</h1></div>\n\n  <div *slide>\n    <h2>Very Advanced - Defend from 4s</h2>\n    <kirjs-board [game]=\"games.defendFrom4s\"></kirjs-board>\n  </div>\n\n  <div *slide><h1>How to start playing</h1></div>\n  <div *slide>\n    <h2>How to start playing</h2>\n    <ul>\n      <li>Online: <a href=\"https://www.playok.com/en/gomoku/\">playok</a></li>\n      <li>Meetup: <a href=\"https://meetup.com/gomoku\">meetup.com/gomoku</a></li>\n      <li>Here: I have brought pens and papers.</li>\n      <li>\n        Bonus:\n        <a href=\"http://kizu.ru/en/blog/counters-and-stones/\"\n          >Gomoku in pure CSS</a\n        >\n      </li>\n      <li>Follow: <a href=\"thttps://twitter.com/kirjs\">@kirjs</a></li>\n    </ul>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/gomoku.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { parse } from 'babylon';\nimport { TicTacToe, Gomoku } from 'gomoku-tools';\nimport utils from 'gomoku-tools/src/tools/utils';\n\ndeclare const require;\n\nconst json = require('./renlib/moves.json');\n\nclass Node {\n  p: string;\n  down: boolean;\n  depth = 0;\n  parent: Node;\n  children: Node[] = [];\n\n  constructor(public position: [number, number]) {\n    this.p = position.join(',');\n  }\n\n  addChild(node: Node) {\n    this.children.push(node);\n    node.parent = this;\n    node.depth = this.depth + 1;\n  }\n}\n\nlet i = 0;\n\nfunction buildTree(moves, index, parentNode) {\n  i++;\n  const move = moves[index];\n  let node = new Node(move.move);\n  node.down = !!move.down;\n\n  parentNode.addChild(node);\n\n  if (index + 1 < moves.length) {\n    if (move.down) {\n      node.down = true;\n    }\n\n    if (move.right) {\n      while (node && !node.down) {\n        if (!node) {\n          throw new Error('Weird');\n        }\n\n        node = node.parent;\n      }\n      node = node.parent;\n    }\n    return buildTree(moves, index + 1, node);\n  }\n}\n\nconst parent = new Node([2, 2]);\n\nbuildTree(json.moves, 0, parent);\nconsole.log(i);\n\nclass RenlibGame {\n  private current: Node;\n  parent;\n\n  constructor(private start) {\n    this.current = start;\n  }\n\n  back() {\n    if (this.current.parent) {\n      this.current = this.current.parent;\n    }\n  }\n\n  moveTo(point) {\n    let child = this.current.children.find(\n      ({ position }) => position[0] === point[0] && position[1] === point[1]\n    );\n\n    if (!child) {\n      child = new Node(point);\n      this.current.children.push(child);\n    }\n    this.current = child;\n  }\n\n  forward() {}\n\n  getPosition() {\n    let node = this.current;\n\n    const game = [node.position];\n    while ((node = node.parent)) {\n      game.push(node.position);\n    }\n\n    const putStones = (stones, move, index) => {\n      stones[move[0]][move[1]] = (index % 2) + 1;\n      return stones;\n    };\n    const position = game\n      .reverse()\n      .reduce(putStones, utils.generateEmptyPosition(15, 15));\n\n    this.current.children\n      .map(n => n.position)\n      .reduce((stones, move) => {\n        stones[move[0]][move[1]] = (game.length % 2) + 1 + 2;\n        return stones;\n      }, position);\n\n    console.log(position);\n    return position;\n  }\n}\n\n@Component({\n  selector: 'kirjs-gomoku',\n  templateUrl: './gomoku.component.html',\n  styleUrls: ['./gomoku.component.css']\n})\nexport class GomokuComponent {\n  fontSize = 18;\n\n  games = {\n    renlib: new RenlibGame(parent),\n    ticTacToe: new TicTacToe().moveTo('B2', 'A2', 'A1', 'C3', 'B1', 'B3', 'C1'),\n    empty: new Gomoku().moveTo(),\n    start: new Gomoku().moveTo('H8'),\n    start2: new Gomoku().moveTo('H8', 'H7'),\n    swap2: new Gomoku().moveTo('H8', 'E7', 'G8'), // Sure win\n    swap23: new Gomoku().moveTo('H8', 'E7', 'F10'), // Draw\n    swap24: new Gomoku().moveTo('H8', 'H13', 'M10'), // White surewin H11, 10 horizontal\n    swap25: new Gomoku().moveTo('C3', 'L7', 'F8'), // White surewin\n    swap26: new Gomoku().moveTo('H8', 'J8', 'M8'), // Central Draw\n    start5: new Gomoku()\n      .moveTo('H8', 'H7', 'I8', 'I7', 'J8', 'J7', 'K8', 'K7', 'L8')\n      .jumpToMove(2),\n    sample: new Gomoku()\n      .moveTo('H8', 'I7', 'H7', 'H6', 'G8', 'I8', 'H9', 'I6')\n      .jumpToMove(2),\n    start52: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J8',\n      'K8',\n      'J9',\n      'J7',\n      'G8',\n      'F8',\n      'G7',\n      'K7',\n      'L7',\n      'I6',\n      'L9',\n      'K5',\n      'K9',\n      'H5',\n      'G4',\n      'K4',\n      'K6',\n      'J5',\n      'L3',\n      'I5',\n      'L5',\n      'G5'\n    ),\n    fork33: new Gomoku().moveTo('H8', 'H7', 'I8', 'I7', 'J7', 'I6', 'J6', 'H6'),\n    fork43: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J7',\n      'I6',\n      'J6',\n      'H6',\n      'G8',\n      'F8'\n    ),\n    fork44: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J7',\n      'I6',\n      'J6',\n      'H6',\n      'G8',\n      'F8',\n      'J5',\n      'J4'\n    ),\n    wonGame: new Gomoku().moveTo(\n      'H8',\n      'I10',\n      'I11',\n      'H10',\n      'J10',\n      'I9',\n      'J8',\n      'J9',\n      'K9',\n      'L8',\n      'G9',\n      'I7',\n      'I6',\n      'I8',\n      'G8',\n      'L7',\n      'K8',\n      'L9',\n      'L10',\n      'J7',\n      'K7',\n      'L5',\n      'L6',\n      'K6',\n      'M4',\n      'H9'\n    ),\n    openThree: new Gomoku().moveTo('H8', 'H7', 'I8', 'I7', 'J8'),\n    old: new Gomoku().moveTo(\n      'h8',\n      'i8',\n      'h7',\n      'h9',\n      'j7',\n      'i7',\n      'i6',\n      'j5',\n      'h5',\n      'g4',\n      'h6',\n      'h4',\n      'f6',\n      'g6',\n      'g7',\n      'e5',\n      'f8',\n      'e9',\n      'f9',\n      'f7',\n      'g8',\n      'e10',\n      'j10',\n      'i9',\n      'j9',\n      'i10',\n      'i11',\n      'j8',\n      'e8',\n      'd8',\n      'h11',\n      'g10',\n      'h10',\n      'j12',\n      'k9',\n      'f11',\n      'e12',\n      'l8',\n      'k11',\n      'k8',\n      'm8',\n      'g11',\n      'h12',\n      'g13',\n      'g12',\n      'f12',\n      'e11',\n      'f4',\n      'i4',\n      'c7',\n      'f10',\n      'd6',\n      'g9',\n      'g3'\n    ),\n    moreFours: new Gomoku().moveTo(\n      'C14',\n      'C12',\n      'D14',\n      'D12',\n      'E14',\n      'F12',\n      'G14',\n      'G12',\n      'C10',\n      'B10',\n      'E10',\n      'O1',\n      'F10',\n      'N1',\n      'G10',\n      'H10'\n    ),\n    openThreeSpaced: new Gomoku().moveTo('H8', 'H7', 'I8', 'I7', 'K8'),\n    closedFour: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J8',\n      'K8',\n      'J9',\n      'J7',\n      'G8'\n    ),\n    closedBrokenFour: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J8',\n      'K8',\n      'J9',\n      'J7',\n      'F8'\n    ),\n    findWin: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J8',\n      'K8',\n      'J9',\n      'J7',\n      'G8',\n      'F8',\n      'G7',\n      'K7',\n      'L7',\n      'I6',\n      'L9'\n    ),\n    defendFrom4s: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J8',\n      'K8',\n      'J9',\n      'J7',\n      'G8',\n      'F8',\n      'G7',\n      'K7',\n      'L7',\n      'I6',\n      'L9',\n      'K5',\n      'K6',\n      'H5',\n      'G4',\n      'I5',\n      'J5',\n      'I4',\n      'I3'\n    ),\n    defendFrom4sSolved: new Gomoku().moveTo(\n      'H8',\n      'H7',\n      'I8',\n      'I7',\n      'J8',\n      'K8',\n      'J9',\n      'J7',\n      'G8',\n      'F8',\n      'G7',\n      'K7',\n      'L7',\n      'I6',\n      'L9',\n      'K5',\n      'K6',\n      'H5',\n      'G4',\n      'I5',\n      'J5',\n      'I4',\n      'I3',\n      'J6',\n      'N9',\n      'M8',\n      'K9',\n      'M9',\n      'L8',\n      'H4',\n      'G3',\n      'H6',\n      'H3',\n      'G6',\n      'F6'\n    ),\n    many4s: new Gomoku()\n      .moveTo(\n        'h8',\n        'i9',\n        'j9',\n        'j8',\n        'h11',\n        'h10',\n        'g11',\n        'i11',\n        'i10',\n        'g12',\n        'g9',\n        'f10',\n        'g8',\n        'g10',\n        'e10',\n        'f9',\n        'f7',\n        'h9',\n        'f11',\n        'e8',\n        'd7',\n        'e6',\n        'g5',\n        'g7',\n        'e5',\n        'f4',\n        'd8',\n        'd9',\n        'd5',\n        'c5',\n        'h5',\n        'f5',\n        'f3',\n        'g4',\n        'h4',\n        'h3',\n        'i2',\n        'i3',\n        'j3',\n        'j5',\n        'k4',\n        'l5',\n        'e7',\n        'f6',\n        'b7',\n        'c7',\n        'e4',\n        'c6',\n        'g2',\n        'h1',\n        'i4',\n        'g6',\n        'd6',\n        'd4',\n        'h6',\n        'h7',\n        'k2',\n        'l1',\n        'j2',\n        'h2',\n        'l2',\n        'm2',\n        'j4',\n        'l4',\n        'k3'\n      )\n      .jumpToMove(39)\n  };\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/gomoku.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { GomokuComponent } from './gomoku.component';\nimport { GomokuBoardModule } from './board/board.module';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(GomokuComponent));\n\n@NgModule({\n  imports: [\n    routes,\n\n    BrowserWindowModule,\n    FeedbackModule,\n    CommonModule,\n    GomokuBoardModule,\n    SlidesModule\n  ],\n  declarations: [GomokuComponent],\n  exports: [GomokuComponent]\n})\nexport class GomokuModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/highlights.spec.ts",
    "content": "import { Highlights } from './highlights';\n\ndescribe('highlights', () => {\n  beforeEach(() => {\n    this.highlights = new Highlights();\n  });\n\n  it('gets empty value if there are no highlightss set', () => {\n    expect(this.highlights.get([0, 0])).toBe('');\n  });\n\n  it('Toggles single value', () => {\n    this.highlights.toggle([1, 2], 'pirojok');\n    expect(this.highlights.get([1, 2])).toBe('pirojok');\n    expect(this.highlights.get([5, 5])).toBe('');\n    this.highlights.toggle([1, 2], 'pirojok');\n    expect(this.highlights.get([1, 2])).toBe('');\n  });\n\n  it('Toggles multiple values', () => {\n    this.highlights.toggle([1, 2], 'a');\n    this.highlights.toggle([1, 2], 'b');\n    expect(this.highlights.get([1, 2])).toBe('a b');\n    this.highlights.toggle([1, 2], 'c');\n    expect(this.highlights.get([1, 2])).toBe('a b c');\n    this.highlights.toggle([1, 2], 'b');\n    expect(this.highlights.get([1, 2])).toBe('a c');\n  });\n\n  it('Allows chaning', () => {\n    expect(this.highlights.toggle([1, 2], 'a').get([1, 2])).toBe('a');\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/highlights.ts",
    "content": "export class Highlights {\n  history = [];\n  historyIndex = 0;\n\n  constructor(public highlights = []) {}\n\n  redo() {\n    if (this.historyIndex < this.history.length) {\n      this.historyIndex++;\n      const change = this.history[this.historyIndex];\n      this.highlights[change.point[0]][change.point[1]] = change.newValue;\n    }\n  }\n\n  undo() {\n    if (this.historyIndex > 0) {\n      this.historyIndex--;\n      const change = this.history[this.historyIndex];\n      this.highlights[change.point[0]][change.point[1]] = change.oldValue;\n    }\n  }\n\n  toggle([x, y], type) {\n    this.highlights[x] = this.highlights[x] || [];\n    this.highlights[x][y] = this.highlights[x][y] || [];\n    const oldValue = [...this.highlights[x][y]];\n    let newValue;\n    if (this.highlights[x][y].includes(type)) {\n      newValue = this.highlights[x][y] = this.highlights[x][y].filter(\n        a => a !== type\n      );\n    } else {\n      this.highlights[x][y].push(type);\n      newValue = this.highlights[x][y];\n    }\n\n    this.history = this.history.slice(0, this.historyIndex);\n    this.history.push({\n      point: [x, y],\n      oldValue,\n      newValue\n    });\n\n    this.historyIndex++;\n\n    return this;\n  }\n\n  get([x, y]) {\n    return (\n      (this.highlights[x] &&\n        this.highlights[x][y] &&\n        this.highlights[x][y].join(' ')) ||\n      ''\n    );\n  }\n\n  clear(point?) {\n    const [x, y] = point;\n    if (point) {\n      this.highlights[x] = this.highlights[x] || [];\n      this.highlights[x][y] = [];\n    } else {\n      this.highlights = [];\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/renlib/moves.json",
    "content": "{\n  \"header\": { \"open\": 255, \"type\": \"RenLib\", \"major\": 3, \"minor\": 0 },\n  \"moves\": [\n    {\n      \"move\": [7, 7],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [6, 7],\n      \"down\": 1,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [5, 7],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [4, 7],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [3, 7],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [2, 7],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [1, 7],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [0, 7],\n      \"down\": 0,\n      \"right\": 1,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [6, 8],\n      \"down\": 1,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [5, 9],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [4, 8],\n      \"down\": 1,\n      \"right\": 1,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [4, 10],\n      \"down\": 0,\n      \"right\": 0,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [3, 11],\n      \"down\": 0,\n      \"right\": 1,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    },\n    {\n      \"move\": [7, 8],\n      \"down\": 0,\n      \"right\": 1,\n      \"hz4\": 0,\n      \"mark\": 0,\n      \"hasComment\": 0,\n      \"hz2\": 0,\n      \"hz1\": 0,\n      \"extension\": 0,\n      \"comment\": {}\n    }\n  ]\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/renlib/parse.js",
    "content": "// Module import\nconst fs = require('fs');\nconst Parser = require('binary-parser').Parser;\n\nconst readComment = Parser.start()\n  .array('comment', {\n    type: 'uint8',\n    readUntil: function(a, b) {\n      return b.readUInt16LE() === 0 || b.length < 3;\n    },\n    formatter: function(a) {\n      return a\n        .map(v => String.fromCharCode(parseInt(v, 10).toString(10)))\n        .join('');\n    }\n  })\n  .skip(2);\n\nconst readMove = Parser.start()\n  .uint8('move', {\n    formatter: flag => [(flag % 16) - 1, Math.ceil(flag / 16) - 1]\n  })\n  .bit1('down') // 128  Has Siblings\n  .bit1('right') // 64 Has a child node, into the subtree\n  .bit1('hz4')\n  .bit1('mark')\n  .bit1('hasComment')\n  .bit1('hz2')\n  .bit1('hz1')\n  .bit1('extension')\n  .choice('comment', {\n    tag: 'hasComment',\n    choices: {\n      0: Parser.start(),\n      1: readComment\n    }\n  });\n\nconst header = Parser.start()\n  .endianess('little')\n  .uint8('open', { assert: 255 })\n  .string('type', {\n    length: 6,\n    assert: 'RenLib'\n  })\n  .uint8('open', { assert: 255 })\n  .int8('major', { assert: 3 })\n  .int8('minor')\n  .skip(10);\n\np = new Parser()\n  .nest('header', {\n    type: header\n  })\n  .array('moves', {\n    type: readMove,\n    readUntil: 'eof'\n  });\n\nrequire('fs').readFile('ss.lib', function(err, data) {\n  const v = p.parse(data);\n  console.log(JSON.stringify(v));\n  fs.writeFileSync('moves.json', JSON.stringify(v), 'UTF-8');\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/tools/tools.component.css",
    "content": ".tools {\n  display: flex;\n}\n\n.tool.selected {\n  outline: 1px #888 solid;\n  background: #eeeeee;\n}\n\n.tool {\n  outline: 1px #ddd solid;\n  width: 30px;\n  height: 30px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.tool-next:before {\n  content: '?';\n}\n\n.tool-clear:before {\n  content: 'X';\n}\n\n.tool-undo:before {\n  content: '⎌';\n}\n\n.tool-redo {\n  content: '⎌';\n  transform: scale(-1, 1);\n}\n\n.tool-red-maybe:before {\n  content: '🔴';\n  opacity: 0.5;\n}\n\n.tool-highlight:before {\n  content: '▩';\n}\n\n.tool-black-maybe:before {\n  content: '⚫';\n  opacity: 0.5;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/tools/tools.component.html",
    "content": "<div class=\"tools\">\n  <div\n    *ngFor=\"let tool of tools\"\n    class=\"tool tool-{{ tool.name }}\"\n    [class.selected]=\"selectedTool.name === tool.name\"\n    (click)=\"handle(tool)\"\n  ></div>\n</div>\n{{ selectedTool | json }}?\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/tools/tools.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ToolsComponent } from './tools.component';\n\ndescribe('ToolsComponent', () => {\n  let component: ToolsComponent;\n  let fixture: ComponentFixture<ToolsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ToolsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ToolsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku/tools/tools.component.ts",
    "content": "import { Component, HostListener, Input, OnInit } from '@angular/core';\nimport { Highlights } from '../highlights';\n\n@Component({\n  selector: 'kirjs-tools',\n  templateUrl: './tools.component.html',\n  styleUrls: ['./tools.component.css']\n})\nexport class ToolsComponent implements OnInit {\n  @Input() game;\n  @Input() highlights;\n\n  tools = [\n    {\n      name: 'next',\n      action: function(point, game) {\n        game.moveTo(point);\n      },\n      init: function() {\n        return this;\n      }\n    },\n    {\n      name: 'red-maybe',\n      action: function(point, game, highlights) {\n        highlights.toggle(point, 'highlight-transparent cell-2');\n      },\n      init: function() {\n        return this;\n      }\n    },\n    {\n      name: 'black-maybe',\n      action: function(point, game, highlights) {\n        highlights.toggle(point, 'highlight-transparent cell-1');\n      },\n      init: function() {\n        return this;\n      }\n    },\n    {\n      name: 'highlight',\n      action: function(point, game, highlights) {\n        highlights.toggle(point, 'highlight-yellow');\n      },\n      init: function() {\n        return this;\n      }\n    },\n    {\n      name: 'highlight2',\n      action: function(point, game, highlights: Highlights) {\n        highlights.toggle(point, 'highlight-orange');\n      },\n      init: function() {\n        return this;\n      }\n    },\n    {\n      name: 'clear',\n      action: function(point, game, highlights) {\n        highlights.clear(point);\n      },\n      init: function() {\n        return this;\n      }\n    },\n    {\n      name: 'clear-all',\n      init: function(game, highlights: Highlights) {\n        highlights.clear();\n      }\n    },\n    {\n      name: 'undo',\n      init: function(game, highlights: Highlights) {\n        highlights.undo();\n      }\n    },\n    {\n      name: 'redo',\n      init: function(game, highlights: Highlights) {\n        highlights.redo();\n      }\n    }\n  ];\n  selectedTool: any;\n\n  @HostListener('window:keydown', ['$event.keyCode'])\n  shortcut(a: number) {\n    if (a >= 48 && a <= 57) {\n      this.handle(this.tools[a - 49]);\n    }\n  }\n\n  handle(tool) {\n    const selected = tool.init(this.game, this.highlights);\n\n    if (selected) {\n      this.selectedTool = tool;\n    }\n  }\n\n  constructor() {\n    this.selectedTool = this.tools[0];\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/gomoku-print.component.css",
    "content": "#intro,\n#outro {\n  /*  background: url(./browser/landscape-with-trees-1.jpg) no-repeat; */\n  background-size: 100% auto;\n  display: inline-block;\n}\n\nh1 {\n  font-size: 20px;\n}\nh2 {\n  font-size: 20px;\n}\n\n.hb {\n  width: 200px;\n  height: 200px;\n  background: url('hb.jpg');\n  background-size: 200px;\n  background-repeat: no-repeat;\n}\n\n.header p {\n  font-size: 14px;\n}\n\nb {\n  background: #fff;\n  color: #000;\n  font-size: 14px;\n  font-weight: bold;\n}\n\nli {\n  font-size: 12px;\n}\n\n@media print {\n  @page {\n    size: A4 landscape;\n  }\n}\n\n.front {\n  display: flex;\n  width: 1024px;\n  height: 768px;\n}\n\n.main-board {\n  width: 360px;\n  height: 360px;\n  display: block;\n  margin: 0 auto;\n}\n\n.left,\n.right {\n  width: 512px;\n  box-sizing: border-box;\n  padding: 20px;\n}\n\n.board84 {\n  display: block;\n  width: 120px;\n  height: 60px;\n}\n\n.explanation {\n  display: flex;\n  margin-bottom: 20px;\n}\n\n.explanation .text p {\n  text-align: right;\n  padding-right: 20px;\n  font-size: 12px;\n  margin-bottom: 2px;\n}\n\n.explanation .text {\n  flex: 1;\n  font-size: 12px;\n}\n\n.back {\n  margin: 0 auto;\n  width: 1024px;\n  padding: 0 60px;\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.mini-board {\n  display: block;\n  width: 400px;\n  height: 400px;\n  margin-right: 30px;\n  margin-bottom: 20px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/gomoku-print.component.html",
    "content": "<div class=\"front\">\n  <div class=\"left\">\n    <h1>Hi, I'm Gomoku!</h1>\n    <div style=\"display: flex\">\n      <div class=\"header\">\n        <p>I'm an awesome board game coming from ancient Asia!</p>\n        <b>My Rules are super simple:</b>\n        <ol>\n          <li>First player puts <x></x> in a cell on the board below</li>\n          <li>Second player puts <o></o></li>\n          <li>\n            Players go in turns until someone puts 5 items in a row on the board\n            (that person wins!)\n          </li>\n          <li>Putting more than 5 items in a row is not a win</li>\n        </ol>\n      </div>\n      <div><img width=\"200\" src=\"assets/images/hb.jpg\" /></div>\n    </div>\n\n    <kirjs-board\n      class=\"main-board\"\n      [showTools]=\"false\"\n      [game]=\"game\"\n    ></kirjs-board>\n  </div>\n  <div class=\"right\">\n    <h2>Some gomoku hints:</h2>\n    <p>When playing try to create one of the patterns below:</p>\n\n    <div class=\"explanation\">\n      <div class=\"text\">\n        <p><x></x>’s have an “Open 3” attack.</p>\n        <p>if <o></o>’s don’t block it from either side, they lose.</p>\n      </div>\n      <kirjs-board\n        theme=\"print\"\n        class=\"board84\"\n        [showTools]=\"false\"\n        [game]=\"examples.open3\"\n      ></kirjs-board>\n    </div>\n\n    <div class=\"explanation\">\n      <div class=\"text\">\n        <p>This is also an “Open 3” .</p>\n        <p>Now there are 3 places where it can (and should) be blocked.</p>\n      </div>\n      <kirjs-board\n        theme=\"print\"\n        class=\"board84\"\n        [showTools]=\"false\"\n        [game]=\"examples.open32\"\n      ></kirjs-board>\n    </div>\n\n    <div class=\"explanation\">\n      <div class=\"text\">\n        <p>Here <o></o>’s have “Open 3”, but X’s went with “Open 4” attack</p>\n        <p>It’s even stronger and must be blocked asap!</p>\n      </div>\n      <kirjs-board\n        theme=\"print\"\n        class=\"board84\"\n        [showTools]=\"false\"\n        [game]=\"examples.close4\"\n      ></kirjs-board>\n    </div>\n\n    <div class=\"explanation\">\n      <div class=\"text\">\n        <p>And here <x></x> has a “3 by 4 fork”. They will win this game!!</p>\n        <p><o></o>’s can’t block both attacks, and will lose.</p>\n        <p>(despite having an “Open 3” attack)</p>\n      </div>\n      <kirjs-board\n        theme=\"print\"\n        class=\"board84\"\n        [showTools]=\"false\"\n        [game]=\"examples.fork\"\n      ></kirjs-board>\n    </div>\n\n    Enjoy!\n  </div>\n</div>\n<div class=\"back\">\n  <kirjs-board\n    class=\"mini-board\"\n    [showTools]=\"false\"\n    [game]=\"game\"\n  ></kirjs-board>\n  <kirjs-board\n    class=\"mini-board\"\n    [showTools]=\"false\"\n    [game]=\"game\"\n  ></kirjs-board>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/gomoku-print.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { parse } from 'babylon';\nimport { TicTacToe, Gomoku } from 'gomoku-tools';\n\ndeclare const require;\n\n@Component({\n  selector: 'kirjs-gomoku',\n  templateUrl: './gomoku-print.component.html',\n  styleUrls: ['./gomoku-print.component.css']\n})\nexport class GomokuPrintComponent {\n  fontSize = 18;\n\n  game = new Gomoku().moveTo();\n  examples = {\n    open3: new Gomoku({ cellsX: 8, cellsY: 4 }).moveTo(\n      'C3',\n      'C2',\n      'D3',\n      'D2',\n      'E3'\n    ),\n    open32: new Gomoku({ cellsX: 8, cellsY: 4 }).moveTo(\n      'C3',\n      'C2',\n      'D3',\n      'D2',\n      'F3'\n    ),\n    close4: new Gomoku({ cellsX: 8, cellsY: 4 }).moveTo(\n      'C3',\n      'C2',\n      'D3',\n      'D2',\n      'F3',\n      'E2',\n      'E3',\n      'B3'\n    ),\n    fork: new Gomoku({ cellsX: 8, cellsY: 5 }).moveTo(\n      'C3',\n      'C2',\n      'D3',\n      'D2',\n      'F3',\n      'E2',\n      'E3',\n      'B3',\n      'F4',\n      'E4',\n      'F2'\n    )\n  };\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/gomoku-print.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { GomokuPrintComponent } from './gomoku-print.component';\nimport { GomokuBoardModule } from '../gomoku/board/board.module';\nimport { XComponent } from './x/x.component';\nimport { OComponent } from './o/o.component';\n\n@NgModule({\n  imports: [\n    RouterModule.forChild([{ path: `**`, component: GomokuPrintComponent }]),\n    GomokuBoardModule\n  ],\n  declarations: [GomokuPrintComponent, XComponent, OComponent],\n  exports: [GomokuPrintComponent]\n})\nexport class GomokuPrintModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/o/o.component.css",
    "content": ":host {\n  color: #444;\n  font-size: 18px;\n  font-weight: bold;\n  line-height: 14px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/o/o.component.html",
    "content": "o\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/o/o.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { OComponent } from './o.component';\n\ndescribe('OComponent', () => {\n  let component: OComponent;\n  let fixture: ComponentFixture<OComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [OComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(OComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/o/o.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line\n  selector: 'o',\n  templateUrl: './o.component.html',\n  styleUrls: ['./o.component.css']\n})\nexport class OComponent {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/x/x.component.css",
    "content": ":host {\n  color: #c53a00;\n  font-size: 18px;\n  font-weight: bold;\n  line-height: 14px;\n  vertical-align: middle;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/x/x.component.html",
    "content": "&times;\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/x/x.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { XComponent } from './x.component';\n\ndescribe('XComponent', () => {\n  let component: XComponent;\n  let fixture: ComponentFixture<XComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [XComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(XComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/gomoku-print/x/x.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line\n  selector: 'x',\n  templateUrl: './x.component.html',\n  styleUrls: ['./x.component.css']\n})\nexport class XComponent {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/home.component.css",
    "content": ".wrapper {\n  font-family: 'Helvetica Neue', sans-serif;\n  font-weight: 300;\n  border-top: 10vw black solid;\n  border-bottom: 10vw black solid;\n  box-sizing: border-box;\n}\n\nkirjs-polaroid {\n  display: block;\n  margin-left: 30px;\n}\n\n.picture.fb {\n  background: url(pics/fb.png);\n  background-size: cover;\n}\n\n.picture.lastfm {\n  background: url(pics/lastfm.png);\n  background-size: cover;\n}\n\n.picture.binary {\n  background: url(pics/binary.png);\n  background-size: cover;\n}\n\n.picture.kirjs {\n  background: url(pics/kirjs.jpg);\n  background-size: cover;\n}\n\na {\n  text-decoration: none;\n  color: #444;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/home.component.html",
    "content": "<div\n  class=\"wrapper\"\n  style=\"width: 100%;height: 100%;display: flex;align-items: center;justify-content: center\"\n>\n  <!--<svg style=\"width: 400px; height: 400px;\">-->\n  <!--<defs>-->\n  <!--<clipPath id=\"cut-off-bottom\">-->\n  <!--<rect x=\"0\" y=\"0\" width=\"400\" height=\"200\"/>-->\n  <!--</clipPath>-->\n  <!--<clipPath id=\"cut-off-top\">-->\n  <!--<rect x=\"0\" y=\"300\" width=\"400\" height=\"100\"/>-->\n  <!--</clipPath>-->\n  <!--<pattern id=\"image\" x=\"0\" y=\"0\" patternUnits=\"userSpaceOnUse\" height=\"400\" width=\"400\">-->\n  <!--<image x=\"0\" y=\"0\"-->\n  <!--xlink:href=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gKgSUNDX1BST0ZJTEUAAQEAAAKQbGNtcwQwAABtbnRyUkdCIFhZWiAH4QAFAB4AEgARADBhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAADhjcHJ0AAABQAAAAE53dHB0AAABkAAAABRjaGFkAAABpAAAACxyWFlaAAAB0AAAABRiWFlaAAAB5AAAABRnWFlaAAAB+AAAABRyVFJDAAACDAAAACBnVFJDAAACLAAAACBiVFJDAAACTAAAACBjaHJtAAACbAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABwAAAAcAHMAUgBHAEIAIABiAHUAaQBsAHQALQBpAG4AAG1sdWMAAAAAAAAAAQAAAAxlblVTAAAAMgAAABwATgBvACAAYwBvAHAAeQByAGkAZwBoAHQALAAgAHUAcwBlACAAZgByAGUAZQBsAHkAAAAAWFlaIAAAAAAAAPbWAAEAAAAA0y1zZjMyAAAAAAABDEoAAAXj///zKgAAB5sAAP2H///7ov///aMAAAPYAADAlFhZWiAAAAAAAABvlAAAOO4AAAOQWFlaIAAAAAAAACSdAAAPgwAAtr5YWVogAAAAAAAAYqUAALeQAAAY3nBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltwYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW2Nocm0AAAAAAAMAAAAAo9cAAFR7AABMzQAAmZoAACZmAAAPXP/bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/CABEIAZABkAMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAADBAECBQYABwj/xAAbAQACAwEBAQAAAAAAAAAAAAABAgADBAUGB//aAAwDAQACEAMQAAAB4/1yGAhuZEBaK8iHj1ElpY8jp1DCMmXkG9K0kbYRdrdplVyqyxRyCKjCRl/LaBhXY1ar1ZeoCKx6snr1pZSxFWSoix5kvSJV6mGdLPSS9Nq8s+Kph0RE50OVtT4sUTOvJ4tzSLh0vQ4wtpcjJ86OQRJgRi4riCXismk1nnU6LaTinyCnNpbpaOf6rR1eVl5Sv9L6H450MX6TbH3GqjxaMik1O9bJA3dYrfzANr+U2LQikhgHSy3olGpU1UcFGKxvgzSjHQwvtoaEhPWmEQHakZo9YcGWPVpBm+bXBRC0IGSggTYXycOu3TTYer0bff5nRZNrHiHav5pyX3r5268b9W+PfS2p6u9baMQ6sUYL1sFgxcNwb2g4NCTcH1vVBki94D1Hau2sWsjfBGE2N2ZpxBuTRMo1JYl2BFquxJnj0BEZefu5ImaM4wRqt5qnHGNqu8/T4LlWj6Z0Px/oaNP0cmbysndC4npovyfSd5Bl+3vcT3Ovmji47KwjJCmSTaE1w+MYuvZWJSlQbXEQreK0rsvIvBvhJkmNeZ53MZk2WstyDTYz24T2qQGlGKmKZe2nBy4dVVWRU1hLOFjQzK79lyvR0azZP0DkEt75cvQoeC6zRYeng+M+i/Nw/TfQ+M7PXzhLnFZVW0XVgmmIbWJIbxKekvAylZvWwMBMIitovJ+e2Fz3VnYVJI6wgxDqu4rwmsxnNgt2EQzwGRGZebsqq2fLsrPnON1nN1X7fccDu59na/L+sx5Zudzl9EHQ381daq/MvqnCBo+l850W7l+oebKVZvQQZqHUzPjNF/MSQrZgYNLzII6GqQE8GM/OhFyupyqkMaOiUR9vKYh2m8VkNuHyXAXooYEFHyhsVDdRk5bmPpvBV2KauJqZtnTY6HQq/ddFhbbpK7Aa1z+NxWC30fQXLu5p4nwC42hK3jVvBewfWIe4rstqWqJWPDhnwfAnuC8n5yIOzg01tJcg7yXIO0jjCBodd7F0A+s4i0rOlXZkGtoXhy+B+p84p+V6IYz6GC2rm1/S+g+TdYp67yeyafiW9k9ppq6m3p0ZL+8UAcMDSylbCk9FD2VlvXzKTwvMlqTMIwsiggtCSfm6RS0YKsUE0hsYewLyMFTLJpO5mir7GnjPK+2VNoFkybzIMZxQ4/zv69wdN3NMiNg6L3X4/wBDrIdCpdmD511vvaKD2z7A611HUlRkEyjm9TBmDeEla3Za+jzrF60KnhexW9wxJ+cfW8xm47iXmlpCWFaQhAkBdfy2A22zkvw7ellaMjriLhjfqZ9Tt/OdDSo04TWttZdXJd/j7JV+8X1YMqkP0vmMnu8EeyrA1R+srOEniKWvRW970W1+sO7p4RIIHYtoBesIT850ON5W1fAk9WwN7huCeaFkudU0mjo5mmj6WrpbXJ04ptKMVmevuTz7+Wd08rWXjuUypW97aavXir1knQz+jSOCzzbRKt0Zk2bzukyAW6lqk31ZwgMANDQyOk194i5R2Igfhq357GUbEPpiCxKSrnp7whjKHhY0J6Xma2N1LS4Osmom+Kq2mHriI9CLju45CrX1pMvX6GKsxbOPZmnzgu7fOcU6+D0xPNtHFoRot6xnq2vagFXle1TWS021etShhPBtIagqFSArRX+DjOvDW4WleozCKzalzPbOf2/M2b9gs+S6Z2kroGtPFDfX0dBU0Z2L1GwaQ2zdfPxnV851trZcn9iUHJ9nlJfrDN7TkD446WH6Zob0+ggZBXRrerLii7qHXogI1+lWS+YzI5ASkV9Yat8NEehinj1kpb3obXHo1vtdGo55HutnzNTGzKtDoNKFs2yrbPlHSaJBX0U7LWAbt4h7Oa3aIownSDEBobUT8C3KtNFJKxMxWbUr4EBc57Peatq3UzavjMpDewu9nXqytprbaARwcYLhvh9YlpFCDkpWTAn6RxnznZXaYe52lRo9swTKXDtD2Jk13N1urx29jHTs4+hVQ6Vc19Jm0mN+d/O0s7oUFaSNcE7hJwdRbUvZVMx5l8AyldmLp8R0uHq7JVj6Ode1L2VznaNt6c9XTV72StqMFU7sCqt+DyObQSkXBnvM7rMPRyo0fn+S76WX5v33EuuZ6Moxfnuvyvejj+EzobatmuZp2O7wO7yZ2JcjSWlooSac+nnEzO9RqydJVFb08TTe9LWV3kdmUaT3LU6OWczkdHb+paHG9Xh5bAYU259BvOb7VRMrWDdTkmkOjNfLYWrf4fcN7Ibo0+pzbXtVB3JrV4PvOQYct73rK+22vnE15zuot9HOMuivh6CZDe52y2/l6WOdLrc3tc5NQob6s3s3Q5zrJ2ybC9NUWrfJZN62eufe8wHlbA9LOVtPeycjXrKcvb846/iZG3uz5TllGhcN789czYVtpyQtZ5X4U9n9Yx6TTHp4OmuY9FCWLq45OHjlX3YLXpe2i7CxDNM+fq1WZm1izwuv0T+Pv4CzpQxjV0gy6M8cL3fE32/QQTWzHNq2qa162sSZiWWphTvUlfe61fqWoyV+VfVgrZ8z6jj0eb1vrLvI9PZnbj3r83PZG7zVtfyXq8Hsa9Bep4Lp8+nqczXVRPnXPK225YJE20EmDGWPdqFTQG2ZlHhXidXodPhtjBb3LvNbnMGudNnRnLg73D2Tqn+O7G+mbUmuFsIjpb3vWLA7r6CWwCdqm3gSQb3rWVj+efQkVs4Xvuf6LmdVqIroyV5noudtT4t1PE6bDtNbmHcu36Do5WmqfHsL658g15C3HeyqzC5DNJ7KcDOHz5YSubN5HS0dbJFiv6DpOd2OY2z7BT7vnulw2I9384nTzGUt0tfB3vK+x9MV896JiR2tr8i5lu5/An0GUhwM2VnkdYJ5bouIzbeh2Mx7NqLSiVtSqNa6snxIooend6Xi9nPt7btOI6TNo0vjv2LjLKvm5Q32YzXCYg7Clw2qXMYkqDy/M6TjyOzjt0dTn9rl2WztPJ9H5XYmGPf/AC6WYz8m9vp+U6vzfq5j3vKevodNuGubo5nWzN2Cx2ckXvQGlZHXZhJob3M7TzY720gxCltpz1ir68fx2Ilkvo5hq7Ox775B22Tf9DQKSt/h1Op5PdgKRez1tkVZVyGBZLIuLW5fQqdLQzvo6mPvc14ynkfReX3mYQ9r879MTt5p+q5Pq/He8mYnyfshTdKp38fZxO3ks4ifrZmqR5TC7GAtmL12buc7sXy2Me/MTzeVr563l7NPj/ol0m1JBa1sI9dv13pPjX0vJvP8d+7cg9XzS3o14StKGBuQRqb9ERWOR0gMU0ajotqX51hs3QzPS+W3ZUZ+gfLy11FadAup5PqvKeuJNLeQ9nbJ1E67Huf0sjpVEezdHsZyx6ZA877QydHRLPOW116pHRvyZfN7nOmpItW3X47as313mtg0z6ylnoeZYqv+2X4Lv8uz53yf1r5tfmQKG2jKwwmxTfq3Wb4/TZKkKouu4TgOyJJDfzO9nnH+747VGnKsz1XM7/B7rNgTxO4apK2JiXXvZdRlMXeyPoeSW428Fiu9FFLc049QSnrsuNiv4yzRcShW+R+j2ui1qyrXsOysS4rgv/TPlPQU6fp/NbEZtXzkHW4l9SxVHKnIqjNLuyN1CHaqlmscPh6qnf0MFnnPvyg1jDLSBFXVUdHppYvjbl6Yym5hvd4e+x6XFgK9DmUadLnjY1tLz67WjAQV8qBJNaEd9WLh/wD/xAAtEAACAgICAgEDAwQDAQEAAAABAgADBBEQEgUhMRMgIhQyQQYjMDMVJDRCJf/aAAgBAQABBQITU1CJqEQwQRTE4WBo8+JXB8iKIB7lm+DFEVZWk+nOkAmveoOPcEHBg4Amp0nSFYVhE6wTU6zrOkZYRNQRYk37E/kmExIpincE3NxtS6zrEYvKogla+iJqEQDjcRZ153yBAJqa41CIRNQCagE1OsdJ9OFJqaggg4c6it7ThPlZv3kZRR2y8nWC97M9+MtLZ2PYPHZCPTU4KiamuHOoPcX7f5HA+4iERYsAgWahWFYVjrNTU1BxYYkDQGU+5vqPIXGpHyPzxclHR/1E/RZTSzFupmBkNVYfI/p7cHNqvUTUIhGyBAZvnU6wDgQHk8HhYkWLNcahWOk+nOkZYI0YQeuEinQut6LVrIybV73+I8b2lGJUkCjTY9TjzPgyk8k26PEXlHwieP46wiCbgPG4ORwIOTwsWIYh+zrOsKzrCsKxhP5PzAdG7IdJda7Tx4UJiV6fxw0qxTA0I3P6owV+j4j1keLyERoODG4HAEE1yfvEEWIYvGpqdYVnWMssX04g+X+WHq06VnLuNs9anvjj3gxPc6ztWgXJoaZtYtovUU52bd1y8F/qU+4eDwsHyvA43Cfs3NwGCCCLFiwQCampqFZYvqxYf3NG+Mv/AEoesqs91yrI6N/yWWhwvMEpiXfqMPPx3uOHhWJMYWpPO0dci4tZkf0tkd64YTwfkaghMBg4POvtEEUxDFiwQcampqMJcksHuEerE2v7T2MrH9ul/pTx31MjL8rjGnL8Ew/QeSoZrfF4mSuRi13KP6kXqM6gUn+mE1Z/DQzU1Op3F4H3EQ8qYIpitEeK8DRTAfsMdZdX76TrGWZqat/+qF2cfx7Macdqq/J7a7wlX08b0IoXj+oR/wBDyDf2v6V6tjR+RCYBNa53zubh5EEEEEWAxGiNFMBg4MYSxYR76TrPLaGSolJ1PFXevKZn6fFuuuaeByswmpM39ZabcS6m6u6rzY7YOdWz5X9LW1q0I9dZrjXscGa53B9qwQGAwGKYDFaI0UxTBy0YRq4EMKzySLCPxp/ZgMVt8m23o+ibcN0I+roC6u5Matqc3yS9sYh5i+PqVlXQ4Pz8zUAmues6wrAJqamprgQQGbgMBgMRorRWitAZvjrOhmtS39Tu3ENkzE/Ov1O2sfJ6ZGLhBRdjLXB+S9RCP7mZfVUf1YfMx++hBCIVmpqCDgcng/YIIOBwDA0VoGitFaK0X3Bxr06w+4RPLN/3Ft2//wApYyTAZS2J6gPpjGn9S5f1vIeFxrKshfgQTfB+RNzc3F5PBPHabm4IOBzuCAxTEaIYpimCCMJ9L8mr9eVq65ufWK2obdbrMa0pZhZSlBYOv1J7sbJqa3yuCWtZBpeRD88MYsH2HgzUXkfYOAZuK0UyoxPcURYN8anWeRwzfPI4l2M2L/oHudPyod1mHZYy1KSyL6yrDT5TwuI1CCGLAJqajcfyg53NzfJ4HAMB+zfG4pimVtKzFPuAxfc1Dx5Cq6ym3FsxCsXUqXZwKWlSan8WePD+WT43BByTGmvQHG4T/gHAgg43xubimIRK9RDEeVPNRDFMZZqCf1D+Wf0MrUzxar9SpAAOMlP7w9AtsoxlJPB4EsMWGD7B6jGbm/tH274WL6NZiGI0pimJE41HIQZjNkZyVQ4x0KysxH70jjJfrka3OsWuKJ8Q8CH3AJr7NTU6zUUTX+NYIh1EMqifFcEQ8ZGYtMyb3zLFxgUNXQ01hkXH1KF6gcOht8oq6r0IBAJY3sTXswAwzfBgb7BNQ8H7hBysWJKohlR3BW+mDogrLK+P7+l/cxwrD6bxAwnzBPfGCDG4G4YykxS20+dztG9zUJjGKYDN8DgzUMP2GDgTRmosrmOvezxyYzJqanTZ1OsvrBTHsFthUTX2ORsDQ5POoVabiQfLiagE1ys3Gm+DyIBNam4rTtBMek2vi4+EqeOw6K7kT6fkP/r7HmV2pysewXY/2WP/APoH4+7+Yy7nwC3sTX27m4TDweRxvgRYMHKEwcZqM1qzTm46/RNvzqHgmD3DPKqe3gT2xiPsy21mWH8f8JG4a9GEzc3O03CYfgtD74J4QbmtQwc+MIrvrt7qWWxWftFMuP8AZrfskY6CibgUsuXjh6/Bt0y7x9nkD/fY7/yMPUJhhb2HnafI6zeuG4rYLGO/spqa1qKqVrxh1qUAxNa7dQ/ujGsdKxYpRfbbnzKf9RXtL1/T+YPx719P301LsZWzOs6jfSONfb/C/HNqkRNs9p9+9qYDyYY0P2gTFqZVqXrKj1vLCu1fVzk9k0Menr9MaLEAzsItg3SylSQJ5NfrVUN9Sl/xYt+RYaceu07mdjCd/YZU20T44BnzL06M01O2oh3B6n8cH7QZjIbJjtqhS6y11R7Su0sK1Y35TPJ/R02fVIsErJiAT1BN8Yf41Xj1K/bt8Qfbv2fjDbaIfX8c3r3rJm9Rxs1fiHO52Im/vw6PrPSnaYp+m9PetyVvrrW1aDtplN9DCOQLsSjI61V2amO8VoIIIJj/ALrP2TG9vb6SD7mPWI4q8iG0KWJX7MupYygwJuahXQ6wL9h4pqa1sVK7Mb9OGP6S6fS2rhUiAi3QbJ85f/b+v9JUQtKrDvHV5XfWsSxmi7g4rOnaN6Pj/dOQfUH2mW/kuRYUauzePT+zgcdfVlfXj+RNajHX21Vm18LGVK8yj8cLyNdhH1KGDdird6itgGWVoycnIayynbPufrPpyqx3bFYkVmLBBwjdhmN1r8b/AOLIP5/dY3QZG/p+RuFsrv8A/wA/Bbtj8W3CsVMTBGEtXqU98M0tPsHlFLN4/HAiLoXfHkB1twfLZGPMLKxM5OhgQq3mc2y5mBWC8iVfVYV0mLdRSa87KaY1926nJiwQSg+vJn/q4o64zHZ4H2N8eWtNFK4udlMA1LeNu61o2w7hR07FDqA8WKCOnSMYWje+NwTDo6jGTrxd8eTHsTsVbxvnLkHkPKYzYkT4txpWCFNZaAVJEyK1mNkEyltxD6HDHq2Ywej9uPx/A+wiLX9byUdEceSxFx4uQa8PFz2vtqsBH8qYOHXYYaLTXPjsfsaU9pB8XfGem4ysCtZ5Erle95P9vIA3PoOTVi2yofTldkx3DQcWe0S0NmWH3D8fwPsMxE6jixVdAqqnm/HthW4GbK7QwRoObVj+pc+hMSv6tmNXpVSKOHmSm5airHfseBFiNqZf50IWSUHKtH6XNMpwbZ+mdBV2inhvgb/5h/mGfxwOR+3kxwHTy/jnwLcHNlV4MqfcHDTKJVrDx4+v6a42iqrOks9Sx/WRaFW+42tyIsBlQ7VqTA+ji+QyVlOZexrscqkXhvjbL5dX71/4AYG4PNiq6eY8ZZhNjZhWePyPqBGghnkV3X1JmKva2v8AZg3+qD2gWZg6pflgC+5rTqCDhROk6+6d9nHWyr6ZK4lEpq6ytIgiwQzMNVcwGqON/gJgPG+DwwBHmPB6nhAxWreoPctGxYum8eBPpjbVtU+Bf2FZDDPqLYuyTyIBKxNQD2qneSNXaJLBu2OudKBliVExTBx/UmR9LH/pS6zIw+QfsM3BNztNwcGZlv08bx1YStONy19I57NjP1NOV6Z+px0Uyg+p57E/SeQg5UyqbGl1sMZke7TMQbezKImNY7xD1AdVX9UpU5dk8lSM6rxVX/G4f6u2U5Ds/A5MLaYNuFpuCLDx5WzvkY4/FIzQnUyLezueKbJjv9RMO9qbcdwyj487i/qsGA8iVmCMIku9QoewYIgG5hKAFIaZx1jeKO/Hc49RtYdBk8r7EM3ttGDcUexx2lr9K8cm22mdtQepk29E+Ix4RtNVZ1YKMivx1zJK22rTzWN+mzxBN8VmBp2ifu8g35Vep22aV7N2UGplMytNX4g/9Diio2tfaAuP/t5Q6Yw/FfoCBZrgmbnmrv7eImhXAJawm/rWWTfNTbGHd0ajrYMVvTfH9S0fUxORBwrxWln5WFtmsSg9FqbtKyJZ/o8P/wCKUVNa19oVZR/t5f0fkfwPncXjsITPk5Fn1/IY6/jWJYdC5+50FSya5U6IM8bk9TjNufxegsruRqrt8AzcBg4vbUoSfEV13WqypTMr/V4j/wANNZsa6xVXij/bzb+2g7Uxz+at7V52hg+c2z6GNgod0r6+JlWyoerSY59/xzW2ih0fGZJIofcsE/qPH6X8gwfEBlSfUs9KFO5URKxth6F2+nh//JbaoTmr/ZyfYoOnl3+0QcH4E8u/1Hw6hpRoZFgRaVN9jehY8LQN9qNMW41vg5AdEbsvkcYX0X1vTbwIDNz/AOUHRfZYH1Up3jr1G5cf7Xh//NB7nVoJWfy+zI3Xah7LnPrJraJNxjLLBTVQC71L6sfqHZ8nIqqWmrMHqz9rNE+PtRpgZZpbCyFsU6K+YwFyVKlWg4ET51uIAI37qF6zvEMu/wBfhv8AR1lBKWM4IKU6T93885a7XCfaZw3l1wfAnYTLuN1mKnr4GfkTxmN+nrdpmN+BbtOv5IPuET3PG5ZqsxbQyXj15vG9wTcEq/erahftKh1BbrO7SlzLn/teBUvjdq4GrnaqWFWFe9/ZYOyYzdL8sf3lgeF5luSlNXuldDMu6L46ntYXELbnkGIitE9n0B9wgM8PmRW7rkpsZ2P9C6Din9/wa+ujcY9kFsqZmN/b6eEmbXK8XLeLgWGf8dZB4+YmEKLgZuK0PGTtLsk9rJsxn6LTtrKkl7hFPa62s6U8eRJ+p8msECwkD7wdSpup8XlfUqcbXNpWxb8N0K0wCsSv56hY93Yq+oWiJ2NKhJY/umyVWxXnedoGiGaMYlWpcMPg+QX8Qpuo6WCLRczZGN0mJ17LoDNs29Q6heLG0MjVpCAMx6jt2/wCKdTxt/SzFuJXIX1asuGuDaKRZYzsrQaMpq7E9aw9kHs0gQNK3Ji+4BwralZ7DITa0P1b5F6968A9bZX265idp+m2tuQakrb3TqBhGYAZNn4Gz0jMYZT8/wD/xAA2EQACAgEDAgMFBgQHAAAAAAAAAQIRAxASIQQxICJBBQYTMDIjNVGBkcEUFmFxM0JSodHh8P/aAAgBAwEBPwH5CZuN5ZYmWS0ZYpEZUbjcVZt+XFEYIcGvQa4LJS0vWyMixP5aiQhfAko9iTZ9SJwuG4bL1vWxMv5K7iMfApbjY5Hw9pLgyRqWlaUJVqil8uETY/xHLazdtH2M7uei0odadiy/FRQkURjaMY026RKEo8UTW9c9yEbiZ6btC8Fl/LS0hLkh/QvkytsibuKJLSuNGV8peBGB1IcL5RLG2SqJKW0aFE2jVm0a+Ukdhl6YX5iDoy5aROVk5NsSsrTtyI2j+WtIwcnSIYnjmrG9plknEZKKOw3ZsZ3Y6Q2/AvDWkVudH8PT5FighZKJvet69D4u4bGRluk2bhaT4LHXjQxMxYHL6iWOCXlJvtr0zt0S8s3HTBDc3/YxLjVsZODXK8cUvXXpMO6W5lUUSx7kKJVi6hwkdVLzrIvVG9HT54wlYpJCknq1pkj6lj0XghDe6RCO1Vp25FG1Y4jSJ9PzZmXkS/AhUlZk4dGxG1LRIyQptC0nCtY6pN9jp8KhEtFnfRkojMquJgZJXloaHpBGXBwmSVMYydx0jKtErMOLYrNzibkzcLIu3qWcruPklEkjp4fbJEOcrloyjBHczHLHJbbOqw7JsjG+5OI47uBqiK0wYq8z0l2N1Eupl6COlzc7WNCJoYo0969DEqQx6b2osqhdc/h7JK2eXLG4jiNE42Y1Zhhul4MuTdwtKMbp2JnI2/UZiVxkQ7aPSRRtMOZ4mRlHIrRlhR6jW1nTx8uidMy5nPjSitMb8qEyRJEHVi7aNaNcaMZinKMvKZdMi4MOSuBSJGWFPRFjML+zWvvJnn03Rb8bp2Q9udbGe74j/Uftfr+qy1jk1forPd7NlyQyLLLdT0oX0sckSenR4rlu/AyclE57mJmOY0ZI3HwwW2KI6e9/3f8AmY8UsslCC5MuWPSweHE+fV/sv/cnug/scn91pJep1E2lWiEzFHZjJPkzS2qtYSoxzvjTItrrSLsq3QueRae933f+aJ5YdND4WJ3J93+y09z/APCyflolcDNDcj4bRsMGNzmkZZFqK3MlLe78GOdCluRkhvQxGH69EtPe/wC7/wA0KCvlmTpUvpf+6/5Pc53HL+X76YnUjJHa6NptMWL4cbHyZZb3RtSK0WmOdCfqdRi/zLTE/MtLFI9s9C+v6f4KP5R6z/VH9P8Ao/lHqpL64/oexPYs/Zinule4aEZ12kNmHFudsyTvgy5dvlR8SzcXonrin6H9GPBBckIqxzFbF5RO9KGiL5pmSO1kfPir8DKqXBhn9nyTltHz3FwKSZuo/8QANBEAAgIBBAEBBgQFBAMAAAAAAAECAxEEEBIhMQUGEyAiQVEwMkLBFBVhcYEWIzM0Q5Gx/9oACAECAQE/AfjY0cTiYMD2WyMDiSRjaMjl+GxyYmtsEVslszBKJx/EbG8EnlkUjwxP5sCRjfBjbA0Y+N7MZLscTkkcsi7IPK2b3bzuzP4cmhS+mDiY5CKl8vwZEeNsGPizs9skyHgxkT4meyrP1Hs9sbY/Cb2ksEhdIiyQo/UQzJ5EZ/GZbHKOePJ73BHMmRjyEORyF0chb4+NvZGNrV0TjkhVlkI4ILoY2I89D8nLAvwk952RrWZMlfGytyX0F8xBNMRPUe6xnwRsjP8AKxHNGeKI5Yhby+HO05KCyyfqy/TEn6jqJ+OicHPts0Un81EvDI1SrfTFZb9yLnJ4ya6v3VUIHflEbpweUyOti/KK7I2eDB2JfgYNVro1x+R9j1Vj/NLJDvd/LNMtg3FWffZz4Si/6nqU8zUd0iuXF5Rp9VGzp+fje/qOqjXDh9yT76ORXZxWRyM48H8sjbWmn2aWnnRKmXlM/hZfpJ6CyWCzT2TlyJ6eyC5PdMTNFqM/JLfI/gsmoRyy+cpt5JR7RxwfTIpfcTZT6pxhxaPT7nO6Tf1NVKdVjivBonKUHOR/EWfcd05LDezfRVPKQxSwaW/3sO/OyG928Gq1bnNqXWCyyORz6wimHOxIjplFPPgup49iePJFmjnwtiz1SHiRB+70Wf6f/RPZFjwibcVkg8xQjRwny5IjhjGntkus5FumhqFiRfpLKfzLK+4n2aPTNR5SROt+WSrj+lFtEoPLISyQZrn73Sc0a2XDTxhshMty+h6ZqCyRlh8Cil2P+hXhLApcWJkntdZ9BkfJjJ/LKXJS21VXWUc/uy/3cvBHp4Is0lynW6Wa23nZ/bZbaSlTtWfptd6VC23nnCOLpfEUhMgyfRZLih7Irhjt72R5JoshyLVZHyeWRNO8Xo1GPePjsttC/mZk5FlSsRKEoPBXLZfMi59kkSRXUobZM7XR+ZoupeO5jSiyLFX7yyMS+HCxrZPbSz42pffZCJRTXZDavyWRySQiqXJfAi6P+68kq1N5ZqPzdHs1poX3v3iyj+W6bHUF/wCh6HS1QzOKf90j1+quDrdccZPAmVZd0EhRYltqbMRwV7QhgwTiZ7K5Yl8GSx82y14XRdDB7J/87JzjCPKRCDvl7yzx9F+7PahfNX/nat+Uem1KUnP7bMaLHmRFdFUcvO8lknHaEuSzsxvCyTlx+VE+i94PZTq9kYSvlzs8Lwv3e3tT5r/z+2zfGxHp1nFtHNHIsnxjkgsiWekRXFYM7yiOPFlcuL3u6iN47JywiSb7Z7K/9hj8EbPue1f/AI/8/sJl6zA9PnyeRSORZPm8CWCCwjJnZ7SjkksFE/0va78jJJLs922+ydXR6RqIaOfvJEvajRL7n+q9Gvoz1r1mv1Diq1jApDX0PTX8/ESLJ8Vgrj9SEMnAx8U4j6I2tl0usCq+5LEext2E60kWVZJRwReCUcxyiqfOJS/d3JleG+y2OZ9CWRDMHHJ//8QAQRAAAQMBBgMFBgMFBgcAAAAAAQACESEDEBIgMUEiUWETMDJQcQRCUoGRoSMzQBRicoOxBTVzkqLRNGOCssHw8f/aAAgBAQAGPwL9VHl8AE+ikeXQsAhu4J3UMc6CaQgX8eyABhw2UYSP3gdFBtMRbvCofK+E8ZKl4xclgADH6jlKIawtJOoWIgmVxNIVP9lwhwnUPQ2PlFFL7WPknF7jhbWqwgyptSvCtAocwGV23smm7FZnCMQoearxMPiai3EXAeEnWPJ+ixOPon4zV7TC65u1YPVAO+a/Z3mCfCTv5POKgUXCFW+XPaPUqlo36pzdaIOZSsKyDTRzQgZnyUoqRdw6qlPkvxaFYhupe6IU9rRYXEkK3wjYPH/v1Vm74An2R28lhHFeMLMTim2FvZhjHN17OUWCC0GhCYByTXYos94VpjtHdnMtIeZjlCi0hwVlax0KhvgfxApzhphr5QAg6glVevRATqoeqAXOPJwXZ/AaTqE928wfJiG7XSqrE2rjotZJNUyx2nVPdbe0NfYO93DosTZfYnbcIPYZTxzVPE4A+tE9j2V2dy8mqKzJU3WY+IwiX+EHCFwDtEG/s2BVsyiG8Q0IIT2g8Lm4kWxMpltHG2WFMtGy14bEjfyXgFlHMynOc7G/mi0UgqExw8THSsTTU8UIYmH5IFjVVt2Lom9q8MB0JWD2ZjXsxkundVDR6HyeGt0+6EiERdOXsW+Gz4fmgXU5LTyWbg944TqhhKbO4vbK1u6L2sxQvfHyT2M904m+UERQiFFrXkdkL9bpN1sXzwuIAG9VjeOMj6eUlli1rp+JdlaROtL6LRVut7S0JgPlo2Q8qaOVmLwHZJ5jyrE4ho5lOtSDB8PpdKDgmk632dn8QKkVHlEBptHcgm9qMGE0bKECo1VRChEKL7ONLMSgOWWpVP11FUQp3XEVRDE2uxXZ77grVaBVC0vdaO9809L6LW6Iy0/UBoBJPJcNmMQ1mt8nJhf+YyoN2+RrN3mPIg1q4mG0I8RKNtZHhI4UdIeM4tBQploN8vs46+QtJsoDtJVkHbiiLgMVm7xBFoM2Z4h0THcnZ5VpZnYzlYeX6Se8bbObiDVZ2hGoohLat+ya/car+id6JruYulYnXYgoKfZ8wpyBD0/U0yw0LsgBQarsvhqFT6crvROI5JjSFjBopOm13RBVTLTRrzc7RRiU8ui7SfDtfv3dNFhCgHv2R4UZ2/ooHLRNd7poq7rCE2aTRQ7ULkquvAmqqpZ4m1CY/wCISndVK0u5990yUVe65N5oObo3hcCu1bxN3TLRp4Z+ih7eB9CsL+It8LlLuX0XDrErFMVWFpWwzYPhKm4dxVFEbhHPp3laN5oMAjaFDvyrUR6FPY10P5bFQ9uBx32QsnwSzRMb7w+69ofpw0TSDIwQVhmqw7ql2mQhG5x5UR7iqLPdtKtRVcvab7ql89xDU2zEC0bqP/Ki0ljvdtAuLCcVcQ3QtC3ibQjqqDhdsU5hJginRWVo3qCm+zD1csDdHKdFDRKm1/DHVQxpK5LW8XFOf8Tz3Mc1rxWFp9lJPvRnkXwc+EIABY2UeNCF2XtMMfpi2K/D0+E6FTZUd71m5YbQFr2f0TbVsPw6xyTfah4cJJ6p1o/xOWIqJosNiK81No+VQUVcod0TndFZfwz3GLZOw/JC3Ai0bw2g5p0HSCPkgb+p0Ck693AyhjvxrL4XbL8M8Y906hDFxR9Qi6xdTlyR9nbGFrq7KXAqGi7iMLhHaO+yphaFxZXNkiCnVlWY/dCJ7jCz5J1sz2V+nFIjEnWTwWTqHbJrbqrGdcpz11OaWmCg32pvat+L3kXWD5tTQUgi/HZj1CouNyqFwWNVVgWmTFzoU9m8Jo6dyJ8NkJ+d0OaHeoQtrBuFu4Gyfb4HPDNYRdaGvLl3mMj0U5pOmaPdcJCovCV4KLSvVbZCEAdJr3Vo7d7ryxwkHVYGtAbyX7RYD8An/KoJ7il0bZ5K6ZmP+EqWr8JwXFKrKmiHDkIG9e6GUteA5poQV2tlJsDofh6KCVrli8TmLiYC6Z3M5i6WktKw4sXqocwD5qoZl4RxGg9UDIO1O/LHtDmmhBXbWMusP+31VTlxcrh0ui8qpVdOXcBOHVRa0VLVQXBw9VutchxQBqSgLKmGh4cP2/QQRIKd7R7FoKmz/wBlQXyq6It5KeZVFjahdaBprhMKvdFarhcVwlDE8KpyWrASHEDCeVQra0trR1paG2qT6D9C93SiAGXEoQlYtisbL3YR+HacTe41VEZVFiOgUMIC4nkqqklYrOoVI+ieDhFoRAdyRsW2zbQl+KcPRbfRAGM7u4bYDRtTfAuwDTfJgKwP0vcAPxLPib3QJWqi7ERc7CdkP4zk6blNFnMTnJ653Pdo0SnWrtXGb+t3XJKkarA+97R4HcTe5a1SV0ugCYXhIRHRR/zHXxtuV2Vl4dzzTPXJF8ZxYD39fS+t2P3W6ZwVF3bDxWf9O5k3yKqYWIaonov5jroGm5XY2Xh3PO5vrkBuPcPPuigyQFhGWVIUEqbnMdo4QnWbtWmO4wqVCG6xsdhWoRhde0coC7Ky8O553t9e9fabxT1yYRqVj+mfoqIAlVUoe0AUfQ+vcYjoqXQ4KG3FfzHLs7Hw7nnkb65S24jMywG3E7IeXvf7I07iDcCLnWZ3Rs3iCMxUXQchTv8AEN/hNw9cuMKVGUvdtoi91S6pvFmzfRCzb/8Abio7jVAg3Y2UtB91BEEZ6qApJvKtP8Rfl/dAxh5lf8RT0X5v2QzQiemX93a/A1Yn/mu16dO86oAoVu7do/iz+KPRVMnqpWtxVsRs9eD7r8v/AFL8v/UhgbhQ3ykKF65OyBq7X0U3Qu3tKx4b47uVgcbjSQv3TpmxHTZUEKTfCIsbd1kHawuP+0Lb6r+8PaP8y/vD2k/9Sr7X7Sf5i7TtrZ/RzpGaU08234ipdutLuQUCgvaOfeY2ofe4scKf0XAcQ+64itAvCFjtKDlzu0m+uuTfucSYWmrV4V4cI5lAYpoji30uwBc+eQHl3og6qDl4WhzuZUuWi3uoQtb6ArTPFxCdZ3SOaCxDVEHVEnxHITd0v//EACcQAQACAgICAgEFAQEBAAAAAAEAESExEEFRYXGBkSChscHR8OHx/9oACAEBAAE/IRwpfA8I5gzxwR5lxTJHbiXCl3KDg2oYOA1mUl7MPhLTBDG2BJTCFI4oNMyge/0AzCYIyCU8THEjrA37gzNoZRx4V8OMHBVDg6jJLeNMuERrgYRdoLOyYXiUGh6nwl9QS8wwnDuJHEVEcwwmpdRmpUxcBJFcL+Xmm/6AvmsrdRrCMGLMdcKGMw+4Nx1ky7bCuSIAprIy0jMt+6Lha6LhmQ8x7DWf7hVqvpolRKPckHZfiO4W5G4a3DiLiMdQIQLYcQhrhJXKuZvKfGWymXsrYcO8LMhG4VEtMQYKxODMEnYm9EUzCqsaiNMaa+4g2BtGu6jlqytIUue2kAisXzDCbo+3+CUO39On4ZV4pEykr1MXBzAmfqfL9NhuG4IctoszeC+DG8zRFxNOCkNcCWFU3FmbxLRIvoTBAnLv5irfDjFE7UHqoTQHHZcfT9qOxe1k30hv/KXcWWtMPIysDTbs/wBgh6NtWGmXiFMIXUpJhHLHAPCzCyBBGgmEVxccy+DeC4hKgRt1PjHh68dPUzQLgsanaS7SimFmx1YHuJVAi8Jkh21acsrF3LMIITCE9xdOmUEY6PiWTA9R4gCY4YmUwmbj88K7IIXgTXC4Mud7ncw6leOHEhCBCDit5tHBFVnTMRltZZLsToFgwq9VAAW636geZLAdogVBVd4g4U80RSn/ABC/DYQw0WoeTcHxcnTv8/8AsRQIwp37gWiY6jlvDOBiFEUsieC8wZeOWmPMeI5nAy/MyjjHiZcQWCqwZim40zlpnqJcKvvuVv3tjBkjR5jb/gnMgJcezyMQADXlxBv2JuNgHtdTHg+1u/8AIz+qhfFRmOa18dS6iKgzbBBBuZs6SK8LgepTAzCHUvMxfDj4iim8rwrgwzj1N1EcjIuaspl8XXpEwneploxUYpdWTDJ4Zcz0kqsrqlvHm5tfg7GYPPaDdZKbXHQjuZgxZirzHT9D1D6k/Vv/AGdAX8PJFzlfyTfALYQHtY4BAo3F2lwW4XuUQ4CBMEErMCZI+KpIMHjw8Q8VDL7nhRtjxL1HC6uWBgVtPE8BwsNzVQ39gvqUYn1U12TDHUcKxpEtAr3At/PlWRUIK396f5j5hwPY9j9dyn6qD8RankcfMWsTPRLWoEUSgg3wXMOBCxHcuaQw8axErZ7Zh3PbwKbgm6FUrgtE9ER3XZ8scbZhDxLyO2AwUqPuarJkykNDeYCGIdg0+PuBh/8ACEEEGEsoUyfMeVVOex/yUcrYd+j6mOpfBO1RJ2XDmHzBZjcHElJNJlwsV4Eef1YJVLuOyODHUNkslmYSVmMMO3XdKoVovUdw8TFKXMzUfUQfoBiJ4AMNzrUrogI5rCV+ZagtPm6/NTceUD3WImnHMnv/AGNaC+E78zE9+oHCqG9Jaa6g1zAqVBT15V948RIYii4Cc36Gvbxm8nZGzMDiKwqWI8NlfiDtKNUoH0QQrJIV2RxuX8jaWlhmzQu535KwgughAQnkKINztBLDxRHqWgErolo/73MRMrGWZQcVzcHqGcMp4mJSYl+uIcLJXCiigxQc8DHH75Xx+7kATKfHMaHTTUM6oCZgKGcVGFo7zMnUYoA4lk/tuAB+I2Jj3EaqOopAv79t/gmwti2pfFB8RVFGKuCvTi0OOc0/QccSsKQtDgfIgvUFFPZHvkXJfxx46W1XcN0uAs4RdDmZA9k+nBjDdYgrNHctxln88fErZeupgFV3iQ/nxv8AaLpdHsLySoN4iUwjcHA6xzu3jcvi0S4MRy4EGKDLgxFQZkhLTPx0EYloYph5k9oWYzj4TIynWWm7fnuG79lkFCd0cKtM0OqDxxJqnCAODuv9gHxl4Xcuy8E8kZPWUDhzHbAmZhLS03HEGYcb5AYMvheYRk4NEqS5iZxAukOpVEQ3gqYYuHwcLPi4TE1wlVLAauKQJgXtHhUVpod5H+wBR4lSO2GyVLozH6gViIK9RolJRDMYKsLHMXEaqdxS4uClwgf0EhziYhuY51Q9dSjkcxhlk7CWvg/Ik/dYS0mdkHVwdRAcJqxDRmogRlamBxYLSYMRYluDqam4rTLcvLMuWxIHIYQ4XPKOqyBMPAndzDEMUK4tAnaYgAAlE6YJe6gqiZo2RzGmYeBS0/7Mn9xqKkLE7IZ4JVKXEthXLNXMCG1SmeUxLlDCERjXgqRCo8GGbhDgnXBXPKjpubGYztHZwQl2T5qHr94KbLjBjd+Y6hb4G/7xKSyLczLlPxKPlfezvvqWRWFSiMyhzHwI1NBKItcDiW7SKojhAQINxncEpUwJcOeR4uKIhwo8zeI4EADMGGBTj4XLuyu4gEjXqIKkLCpGkXgI7gRRh+Y3n6CIqxv1MIHzqChaxASmz+CeHuMyQGntOwzLJoh3Y94YREa3FM77mXiYuO4zWuQfo0hgML4Zg1BXLEvWY2D0DZm0Ko5hjR1FXdZlS3kpUAxNiapP5CeZe1Cvf5QPcr2wgvCKCIdRMyiATeVK/HG9jMuYTMV7lAvUtWou4XiEdxIKzwT3N+TxtLJgxBSjuC8yqyvDPcTm1S/x1FCNa3XmIsBewdkc1rEqp1xqFRqFuyTqaU+klQ4JVcwfzjpvr9DKqG4QGYO0x4JrRLCKmKjUJhgjSXR1GCPAlowcePhuHL9wL/EpzpIpHj6/MX7vzC90L/j+4dplLlHzA7FQARgrpnjkj7P/ACIKPPU9nj+Z1e+DhlRIEGEIVAthg1MkYZeGrgDR5iZZkl3wmG004zAYIwPmIT01/ctmsx0qUsOv3IBQNm/hNe+ZBE6Hgb2o1aPU8SPcgRENKYl0u0/E0n75dRMW+pQ+D9ZHkJVYinA5VtGqFiLVTCm4wTEPAA7cRIQhXvZej5hvyh783LjTQdJA1N4tW4f1bgkO8j3L/HkXi00f98T0dvh8Rmr6Ih3qZdEGg8wEI1qU1gL+8MNqquIgepoiMNn4nQttm6R+rbYYuUyt7lSFt6gM3gTD98Bw6m7cIy6nUZvZ+0W8MrUF7GYtzoMwF1wM54C5h1C4cEV6iIWxbDJG9/Kj700ggY3L1HcCqWMcqzOPUpfm76l5aqb/ABClNnruNlhXREANkYDzK4adQC0BApHaQQen9kwwYEWhwhEKlb7mM1l3F5EMuyW7p+pdsE8TxArg41fjisV6iGyPA0M6mXGlqC7Yq4XamBSW8Eq7DO8x4JKiS6nkIlaU7jEzLqE2MpA66dekiXAYP8JUWBw+fMZNZ+QhApgTflDCwCbJVYL+CCVD5SLQEv3nyWUnQRFSzVsIbOqB8bJgcBS+5SzLz+kyxSP2kz/sJd801HcxMksCsmSV4qoXCB+YjuC/Ex7JagWupkS48MWLcXIR37eIeTA+Jjv3AwxTzZAu180y+Z3To9f/ACAMO99IoOW3zbUGIFLwwmxqiDibW0gXYNZWE4XMTWIv45FXkFwXBnoVNu9v9RxDFD9CXuAFQB2zCiq417Pz/MWn5ZZ9xlwxB40nweYEXfitQF8QJhngQyi8F8MESV21t8Txhq0pWBNHmnY+/M2iLBrXmXIKKT07gF2CLoz3GGL1nKglTo+HueTl+rogl+Im64bYkPJ35gi89jP4n3m/MCNQltPAlh9zKiH4UZ5g/hr+pinlncUIcrEIy0KlQaZh74/yD2wWjk1CCPifZLlOO4FXDMZEqwfbg4Yd+18ceC+zu7BCOtj/AIVCiwtv+I8QU1/SfrzLJs0p+6pQsuvNLc06vVDH31FMtL+J6r1MnV29xRrHab3oIDe1RtWuIq4+BdYgGdmBJAKu/wAjLgeDggwZfB2tN+pnHlL+U/EGagOT/PL/ACD7aEIWXODyQDtftFLCN6pmZdSkzHeBfALcyho+/PFbfiXPhmrJjsHpgPHux/F5+oaB6H+7uAYUZ7L4gs2VqyZ+fzcyQPcsq0wWQEuC+/SL/QBEhTNq/tHyAWpb9P8AzFMnKswNYH8U92PByd8C/ImXMZuHoH5dwpNiKlRUnZGBd+Jf1l0eYrY0x65kMoSXC3g+eDaDCMmiUVPNDE6gzjN46gS0ciNJKIn1wP8AYOPEVe3C1tbXtmdXJ4hp0P8A6zCJftjWWvBqb2r1GK+Y5gYCY9LoxngJTk0/sP8Avc9qQ+Sv6uL5Op+0Y6uGjyYaiHcxINn/AAlZzmU1yU1MqPvruPJKUyumAWFoaENUy+EpeODwDCblIMGJ9GQdUtcUbI98SgVGOmLo9S4oumMBmsK+NeZ7Cap5S6+0xi8HsqkI98CD4SNVhQ/zLqeMR4DXmTuaRmdl+jBLlwER6D3DlCVUxUtO2g7+PjxL0msNzNHfBqd0IJjFLjmtdwwAgHU88bCGzgGOMO5oSuhLuGpvHmXCDzFf0/8AEyxjuA34dxbir9zAuPmYEtIyfliJ4hc3wdXH5TNPTmO52hpCHBjriVepmDFmDtGgsSZpp7F5f7LAiNEipFcILIg8tXAoH7hAoM7fmCzCTUKTBmEQFIJ4j1IECEtLDmNLZ8R8z5nmJ8TkowhB+z9xk0JS8NfE03cJthcYj70IvCs6Wbjng1D9NBKNMvg5nUB0NBhIjsLvv1/1KQhS0ywjj0TGDP8AGJsrUybWTAirZDbWkgURgV7jq9SzQ6uOoIEBKl0LQQKiEFF6wm+vYiC6fln4IEBRkHzDP7TXfAWQhkemr4ADK2kEYGBqaH4XY/fJCHLKJ7Jc2l8PmJjApEsSCcHY9Hn/ADLraeXUqN1BitAUi1hlVdoAv4Zl0wk3BOyERM8Rp1P7lRslmEIb4WS+YdRnWGFRzO0Gb5VKMZfuGoevZHcsdVMWj8Qns4kuDaBpQxUewR33V/HN8A86TLfTMW5pHKFnh1N4WPu4PK4IHnU1lYthJIrgl5kXPnOoyCzDAZk4Ybjhg2TQD/0z6ZfIeBwSnctFkjOmO5kvElTFIdN8kH/AIll+vUPJL9zEUeZQsX1dT/UxSWpeDK9Rl16GmBX7TzMn/ovjlZg44UoPiogi96lVmvL3mKn/AJPqVAmJLIVN4nhVngDTiWHvuB3hqXLfCBk4c0f/AKJ9nNfqG4okeIlalqwzAirxEja/EBGM8tTpVJ991MkCHtv/ACfoppg/RNbAGe+W4+B4jQu47CBX3BNOLZvEYPArid3pQ4CYMbipbtBWsrr2x8srK+WBxVeO4xBgRKPczfqETMGVZr8M9fmKKECMUxEhYusSuRMQ6LlCNl16lN+EIMqQEdRqatNZEhtEf9B45prA2aJpmIHI74czIptNsqKyyupmi7uaMRodmIOZV/BKSuocRrsYmdbRUurExfPzGXhiU3z8iRRLwzzhGLeplFOGW/tuEGEpwuIFSuVfUQMV3HmKT4bIPczfxAGAH7y46P8Ak+ONAB9E6KuB+OYwjvil0MYGsodTgpVSjEKVCgcr9ZKNJhnw0bZW1Ejq78wZq5hyxiXhqlDie4NbYSGbwRMxHpgrUtQgZVL+eJMF1NbvuK5XMavlIUH9lS4XPY6iHNHqXpGK8yn/AFdTXwNviax8h+wTzCME4XxBKaQoFjniUTMWkzthT5tR9pWIYRZnxBj298RIscDkiVdpTKl4D1DAK4vwj4KPpcXB4gZQSpU26Mxm7EXDZmVimKPyCEDKPTD1Rr4WbB1/lBf8x/QdN6Qcs741ZfkZUcYuEhKllYg7cf8A3GOoTqnTCgpbi465R0f2Y6FANTbM93DrfJLlfggtGMAEKhnVuw+Hpiil0weN5UMMpeA7xCGFtjUTAz5iD2QrO469Pc2J1Fj/AOccBVAr6n/yIBu2oRZ4TvkgCOHZBHzll5BMEVk2iamcimHl8RZrUKBLmZJbfD2vqZ7A2u15g5j6npSixLoxmX+gia76gW8JYY4lxgWP6Rk5FI8zUBBp7I6YIYXBfkdQe6l6KBPMyl2jF+OfvEPJfUkSlxZeJTHJ4kFxL4n92R2gw4S02TN9kfwAjt8QkKvEdrWIHR9f9ygdTGeNlVvo3NL0fX4SjUy3WZYqpQ1lo0QYcHJQYLEVMrlqSeVtH++HUHFFYgvIPzG6vCKBuNK1Assr5jcNmdKZzWJqw/phgzfM9tMYsZwRWRy3dwDMq5eZcOAQl0+2oF3sECN1KIjMDQUvHaG/BiZZNQkG+ofbGHvz9SpiUo6F3DNsJrgUCuCECEIqcTqblVZZqACZxDAhMJHYPO+FBqO8d1HshNI8FbZfoId8kfFVK5ZHfup5gjKXbuMXf9AmSb5d9KbX8yoExBtQ98vDumaXCklWfMrDomRxM2Ya5qNQPDMVdseps/Ueff8ACQAOgoiSdWsyFow0TYqhB5IMuDBli4orSMBHdYT47zLQf7vhHiX44rzV6mk+7MHUcdE/ADtAZlA0EfwoiaCMFXAMCDw1A6q55L/EN8IeWZl5Y3ljLPwTOteZQ7iQ67UOAIjfiJKuvzMy9wltEqOde4lQpX4SwTMfcN4JjjJ28zxqZmfYiLF46go7qWepf6CDLiiqyLrEWkuWWKVl1iTxoNu4V8gH+oqZVmCK5J25qYH8SYvD4j1QwLd34lVNDXxFClA7CT3Z8TXUvDmHH5aPnO5dbBpupZjvEceCFYmFczaph/MsSUYmgDG4F3e716io3LMvEOoyhEQ8Q7EjcGqn/9oADAMBAAIAAwAAABBkFSLI0ISkzTLubXT0Gt+kf+DmftLRDrNqdHw0QwhSm13ZqC7T35sJXm/lAWaxaRgo9JFcE5r0AsTwTLOd2DV6V6R7DPudrX3e2o3WUcmcHViM4dJX3kcqqqSx9qF3k3hptUBzE6+pxIhRT1v3twLGhKw8lbd/LWAD+VQDDZauWQUybIraPNNV5UjS7hbHuq+JQHHvJ55kpxyxs0DlCPNGg96uc8lP5Y5QjJIiqfi3i+znRPs2ILnmKw0OzEIAps1lmIgeRHQGn0izd5XclUwENMgIeWO0Rkv5Gqs6pCVzS0yV/Wib7ibtHLk3l/aE6vzl07K+87B0S5QMo30LVo7XR+muxgvLdpPXmAyHrgIRgwdHkXZYPv22hlF7Jkp+UPm5ieDXDTLr8hyOUwJIkgDYySDOE0S0pDMrPI+x6GliMR0Xg9SOC/1I+XBAKez139mvHPguGZpUk24etPP/AOYcZMgwevq4C3uuxfuJGoiX9icuYrVSJhQxzzvxgophyQWKnzZPp0i2y3oqTI2CdsaLPpItbTx/wRMwzlwzBB8MDchfnvNvm00SkLaEHKmtwl1FccRTNjuAzOQLgVMBfDZU9YteVyy69tkO4w0jZs7LYgMyFQuMc//EACgRAQEBAAICAQMFAAIDAAAAAAEAESExEEFRYaGxIHGBkfDR4TDB8f/aAAgBAwEBPxCz9Q4+Igrawt5ieZDLiUmHUJuDPADInCcc/wDhG1tuXq0aG3JTvFxcbRlybsb5GLhh058E+GFtti4derCQTIPq0XO5sHq1mDsNi3Y4tS2zysPjPJi3iR3gWFzjerC0ZZQ9xMHgmXLqftLxZsf0THn34NGHAJnqy1dWinu7A9/Ny3AmQeGBxAl6Rzx4btFtp4LPBXiYGnxetsqyly+8Poj7wA3OPPu6QvqBtfccMibsv6R5hjlgijLDD1ZRg8pwzQrNXmdI3JAMZgJzNYxdQ+CyyyyHPDGHLNu8sbCBNbD9YCzWkQONtYiTYJfOeS37hOFh5ImzOJZx2SuzLJBZyS85scGLjbly2DgvXM+SyyCH5k3qCcQY5YZ1jrul2mwU+YefOH33/q3PMnSd9yRy9XVmT4T9ALG1Ik4DtlZObFNvTJA7I4chemw+r/e/tYCRnNn1gji1skbLb44siASPUkzpwPvcIY/77zOn4y1YMNYURxEP9P2lgK/L8WSfA+D6vAHPvwx3B4Yx748LgcEGJeC6zsl7bk1lOdDC9YD/AOm4uZ4vhhslMLct24JHq9AicurLl42JhgBHqTnb5J217lOdkcQuTCF9vzEK7kEJD1aNJdlG/ezwQerRpNsPKmDm3hyvcB7njxdgLQ4LKSHORtQuBLVfp/FxQktkHqT3+j9/h/qNYQExgmJCrB4IsINHbHMI5/uQcf8AyHwSBzC5NgzxYeDlPtv5U/dlgTM0O4ERxjmyI9LCt63PxZtSvG3fGTDmSGwx14tD6S5tf6bewIPu4djKHZy/q5D55ul2vpOG7eP9/E6aWbgHtfX/ADcfrmzLns+nZDcbeiOC3Z4Obd6Lu4WPMC31mGTO2S+kUGz14PcNJ+c/G0517PB7VGzr+rHUamPd2lwjg8aerrBOt9LV6g534HKPRs91JsnjRvxKNwubAvl6nsHxcVe5Y2xsbdF7s4llylha4Q4ZZpKm4DT+YIkD0rH6OJxE0HAUH3X923qst3fXp+LN4nDkARtOQrhZbD6/K5siFwdEg8RPD1El/HeBszqTeWyn0hvd6mnD421BdFpifB/4z5fw71D/ABn/AFHDdXygZ9u/1CpLHmdeLC3tkcXG+3x3M+bDqOHG1/BlACDWupc8RdxTIQOP8nx8vv8AaZ6P1/BktI+LKfi9Bn5XrJ7hDCUJZXcZFvEqi2O7njsgnFsio2xerms+I86eTg/j/mT0k96H4UwvhpLiX3Okd8niW7tuXZ/gEg4tdeA2ZKiJwWXx+7UuKhbJ1bMuTNR/qDebHMS/z6WZbx0IGb8/vLmy6SBPkIPU3oi6iI+yX0LlzG/XjCHbPixdRieiY4QdBwWzhCAcp1OWIUhKcv6bCKKTQCPm5rvPqStmuRegjS//xAAnEQEAAgIBAgUFAQEAAAAAAAABABEhMUEQYVGBkbHBIHGh0fDh8f/aAAgBAgEBPxDrUYk3BC4iugARwxMITecQ3KTJctiyC1EIdF9UlTUYkTxnZNBxFYuF3TKpiUQOiFREpUwRhMws6nWoxjLcEtLFsYjcGi9Su/phlV9ElykGZ/Q9DoZpMMwcIpmCxYmBcXiVLNdAZdbgaQIlS0tf1ESJEsqbu4DcNaUinMVRePCXuogbixqC7Yxa8xrKZevX0XCL6FqPGaypZJualqjUxhkoYgiFREKniiXGAlfTUpIsQiXNqOnMdxMMZKkUeImNmYghGHrcuXLlzcZcS5qZnQTTAMCZJ1ERED0naJylAmcANxnij0t+imUuZYaY06EXh5XMpcE1DCkQQLwwYtmxAuMGJdyxu66X1uXFj2niS7jK5g7xrqFv5jNWdowYmcyS/ioDdkIOYaYCzmWIQivoJBjHVxL6Nxa+DMBeb7sORH2H7uL2l8WGsYcezKGxXgwHP1gJO3G3mCFxfxfqwA2VP+tEJ1PrGrVwwgWqJKjEWX0YDzER6G1a51GW0Oy/xNoeMqmLbRAmO4Y9H8m/zCdhg+mYBHB79EiXFDAk4290K6E4i9GhiHSpMu1cEqb/AAirmQThJQVBQwgfn2lhso+R88xv5fejNpW+0TxrP4Rz31xE6rL/AM9pSXEq5QTNKcyvfnh+IlQamUH0KnwR28T7yhHSe3zLKUmCwx+D9wXAhaYh5IUZ95tdN+Z/j+IwdWs9/e4y3YwGs3+Zdi8aWhgQLSzu66Gh8jDctiog9QFsxJND573uMXN78tfplmgbr9ReD2+uZywNk5Sma23Q++leuJS+X8wO5t/POZoMUsU3AwN36/6Ux1OcRTgYN9+0q2TslaXEBbFVGpXbJp5JdPYHz/ecssHlB+c+3H99pe0EKJc+P+xZV6wdIgjPFSh+H5hh8h6B+6gRvQOBzj1+IBhKb/Zft2l+jUsnCIYjWEFL6vBitmMcEWkpG0NPlEAqo355EVVB6RAmT97lrkojC79n9Msw1geW/wAw2zWEZhjL9fmXeGeUYPH9QuBVTNLJS06iY1u4rZcbeI55JfTuKSngL7lwuqB2r5nNctL4uK+SPJWW1DcMJQXb5msPHKo7l4Etwy8RULNKchLTEyG2DKR8MMwS9WWZcPPErdj9ukpXKHlzER4g9IhKdkCplHG7xmbLiyJsS0mk2uzozUU3LmVHwahHBgi4ADhL8MynBPiCz7YiysbUPtAqkLVB4bJe0uLg2Rd+QZlWV5ZbxEq8yhmXEOdxtENTCK84ZXTe5gY6SxG0qVzNfwIySg5hwKGz+L8Dj76qbt8I5J5LGLsUee/aKDMzEoJfhKLRO0g9FEryROZUxUFEtFxKnJzBTMTC4fJMMlTZP4vwON71MJgy2OnE7j5ixknbDWHVsRyDoDcSXkbsTHOmCJEGO2oNlth2+McYGvtsuJIjp6D+oKH0DJGyUHZKDMVFpalSZLmXWVqMVRYcZRLToDZ4TQJluU5hFSY1H6T8/wBxXY/93YuyL5azdfqDdMsFcxh9ntHrMwDbOdEdsCbZgRK56JEl4l5iWdkCqJjysQLyYsyYswSpsHIIHKKo8c6nZO7r74mCm1TiVAqDgivEWRon/8QAJhABAAICAgICAgMBAQEAAAAAAQARITFBUWFxgZGhsRDB0fDh8f/aAAgBAQABPxBsHiG2OYYiTHgrEtL4h9S90UcZuMZOIkRuNtCQNxFgMcqmJoyrRzqLGYdKvqXzozQZDmYhS+perVcIgAyg0VEppLivqcN81MQFDcrilPzLLuagAm44vULaOBMQKzuYQKYxFyGCVIAYCDKONyjeAasjYEBNTYoqUFg+ITgZhMVU+MSiMsWjELKAhqG6RVOIycZiufMWtRziLGpaupeYbMPqFgXmVXXUDRjTnMMl8EITu9S4W1MVbKuGWWrcygOR3UuBYvIpVu8VZLZimKb+ZmGT8SxQKuaxMVAEHUCyNWsoItJQQC1M1uIXqBSqh0MuaNwHLllbG5gvMKiAuZipI1wRtsl5QlQ2QNiksCQGVXAUhjo8QDs4nAJd0PqNRGeVmM6jcxuE5NTApjaiN3EDGJYlZUluJVArEZm1iyGI6rJzKa0QmzIdaoPmXqWEobRfj7xLlAmQFrCm7xVy/SnhApFdWRyYFVLvrNfmPmsMmXhTusPmLQF5yHzKWS2XBCpcpuAU3KplZVVhB4xGwNSxmsQrtKG+YnbuUZWpjiPuYe4NllCYm64nUu2Yi0BLsalaEfEK7nPmoESuEqZAlLEsSoqISsyQvaEEH3FNLqcpIFRbuPHFsIhxKxcEYL1HK+nzCQBCoFmXv0RqRyB0Lu/zBArACjNnC9OHVwwbAOpDT7Aj4qKOYlN3ywG5a2VXERRTIj6c/eIc1TTTWdgPzHbUxhXrQvjfiPDTkgs1Ka6COR6eUhjgBKgdSvMVMQaVIAWMC5tAKQ+YFtSw+JUA6grE8U5e4DxKXELuLCWQ7BuUtQBVEAiJK9BB7TAmIsS0QWQi9pFA03HgDFxUZsjDDRBt1HSZqPVw76gGy8h0GLWPm1IIDl1dAVzFhEcodHVSsCQJVZ8wIOAUH7SsaOgEF+FUckFdWjeOXv6jBNNG3gqqrSVf4iPB2UOV8DYxwptNlgXlES+Sr7igJc3BMAOZfo/EoLbl9LEqBdxHK0QAe9QZrohnc2zL4ioRguALuAAuNDRErRBGDcA3M1XMBLKWRWbmPBGWIRoygBE3Gh3CYmbdCbhQBEsuArxLVWvMbKlvDxMg4MjfrmML8ytPJCDLZZbFZR2lX5ggGwq2ygtdCNAydQpZEKIgEsdkAWiqn2K88xY3lrb5fuEAQcIDGfgMXxAKrgKgA8ytjcFEv4hkvmAtKsYxMp1cYHAQ0K1EVnEoaqWQrbhVzMGMkEOWORUUFmFV0uO0BRWI1bmMtgxdMvWqZoK/EezEfAm9UuYoiLXMRl5lw5briXSIylIdQzAeFFtsQoLdWvF1+4LFDG3PUcQqHTwIREKTFQmWAF4hIIXqVLyOYAJ4oD7YMsOLBL9yxGL2cRfqZwNhnRRFOLWY56J4WZ5oQrbGgxEHhEYDSEdVE5YhZVzFGiBuBqqglGVVFwQ2wagZdkJAdSmVyp3iVy6mPMWu5e3GYryY6iM1VuYLGKuAUxDAUjoCZGJ1kozu4rQX1MTJZGsfcvDWSIUv5jMZXAeYyTALbZmF4BG22/8A5AMPJvlj8FMJduLeCCWWNoCHjMX2wSNW9VOx4q5icqwEoeeJbVnSaFxd7Jvs5rB0LHWGZOrZPo/BLKV4HULj4PxF7Jq+LZf0z9xStupnJXq6Y1lgoqq7jKxfuIwNwQOCWVkaNu5VwmIhtNRN5qJGKBEHEwAhBtzEvnUO8MvIBWJeMVGQBhoXCKiKMkLamtstNTDmBbhUK0GsxS1UAi4xHJd1+oyAXUd4zasc1FHaK05lCcotQoIIuW6JclwWA7l2RjqRQDEtKgr5EHzSA+3PGm67YJ0AniwSeU5LjCNa1fMUi1S0y2XYWTh4Y7kZYV5FW458XUApTX4ooH4a+amGIdFWZWvRY/JAHAct2GqmaEgxWo+xlXOfcySzxBNGnJGMNIFKEagaVlhAeXEaruAPURUAuW3ZBDBNgZmzCT74il75g7Io7xLhcuAsuBc80uygMAwxBjwjpVRKgjXbfEpPKKKMqBUNG2DqzBxbiXmpAfU8i1CgoWG1cENYnkJXxwfiN92u6FX769RCGYl3cCAAzXEusdAL+4CwKxKhKdLKrg8iIK8trYel0rGiVzYaV6O0F58OKgcomoGdxoYS7bcwAbGJcsthmx7ZWsCzazcUmTWpbQdRAFMCKyzMNVbmQuUMEzQu5kCYq7hprMsMGIZxiIBcIC4uNy7Fu4NdwAXVS0uVCDcYsQVoZuVdbhQ2+oF+iuZ9/WvhgHgcRNBZ1uBlPot1PnyRHMWc3Z8V8RRIdUd3LMYrMNa8g9rGQjgNr0vfj6hvT2bE2JwnUHeg5BpVfNTB+wlB/o+mY6TsJxY920umKi2I6puVVR0W5ZCLIwVx6ljyoWQ36iVqhML7GD2yvW+4dxYUs4jpeZdGWV+YowVBVxhj0XGmrcGoolXC0sQTJddxRu8ygSsIYJSQ0OYiGRLmQo2QrjDHexwwQsA2Xp8PiEa05Y2LeG+Vr0ERDgOWIwDd1dRcQNb2rUFGrNwar8t/iWLoS85XmF2BQn573AmFQ2mfhI1jsKFOmfiUXbMKAsvsC3mr7lWBX7tSwrkafiCGiREbQOMiL6uaZb7wFh8riAkAV0jVTxDFw1vTLlYB3C4tmLkl1pR1D4DG+KYrLXzGl2uFeVIBQYlDmCrDMXDiZ73DpRCu+4CMAxeYHMHKyE8xSgeYhWZWgxjM2zALL9OIcIrgbIzVF2MDmJZKjCUtMVPTn5h8dmOCtLHYfEE0Mp1V37z93NOxoeCCEoY+lfqIq0aDoVPcDxNU1UX4hpFCxXzmXJlc5jSAhkhga+Aiv9zE7oAE2/MuoMh0AQUCuuEs1brXus5DH3GQLOglolKgGnMb2iFtSgpF+ZZ3zEmpYMxFYgXPFFbGqrgGCGIEZmCJc749qj+5gMyit7itQ6C4+I7CORCHFxxcDpIgqKIRHfRkeSPCAQCjD3Mc1y2R++IXCUstxALjPuXBHw69QEJVa0TGAiAU+cSkS7pZIABi5uqY3M/22d1onYoSjFiw3YcmHeH3LggrSsmFDoZmm3MahMOY6LMkpaMwVijcdQyjZZYsLmTGxjqswuTUTHMwnie6NLmSklWXTLDmKErCN2R/JmV5bRgbxLUzmOgFMqG4YLlUKmwMDGb8y0VhPBrmNKSi4Z6lFAfkMwEIr5MVvzn8QwcRT6qUpakbRgtHVMHgqvfOo3G4AhmkuXUWr3C6IKfPxC2pbTS9D65ii2fqrSezIfB3FSWgM5lQGo0oIb3M9sdgXEsYsQaLXNxygYmZzEgE2GHSLjeZgzLmZTlmbkPDBcCHeWovsgVhVuUlswQIzYYBMrMbNTKNylRzAh2SpxbKV1L+IqWJ8RFKLIUYuxVz0C11uMygYqHGRA6amxrE8UxRXSRGUpOA4lOPCqpDoiq4bU/symDbTXBAZ0vcEkYjpZ97vPVQM9QHtsH6/MoClMC4iNLBc5QAshIrau4sjepZl2ED4GAFiligxwih5hsnYzFKgyGKWDDCBgmSQrebmRzM4LDTExbhpmCuhqFQyrmpiZ9RcZlVLRZzUVxGwZICwQIeF+xjA1KGIRrCx1t/EKYCyqu8CXWMVuPWuUUBXCu3DmbEDjJhhIeK5gbkALu8/wDEwG18PEK0CPZXDqBVHuzjiiC2VAv1KMMlpINu4LQZikVZAKHCQ8leSGqlf3GV7TAAqYKWY1FncSrjouFgzcekIDa4lmS2l1CrHEVnMVitKZQVxCrdzJiZILRDDMATLiVlvlUZYF47g1rLBUSwRZtYuAcfpwwSPqUQlzY2yhy41R9TWFg+RfhlTAsCgYWWLLa8kqZKOtQVUSipUFIM1pMRBJqiWglqZhUv5irl5xcdzZDeOJfLWZakwSmDIgTsmbmEaGpZ8JbFW1ddxLWLeJb3AGYtwSo5iZxUocy0WnxCeYyzMfmHKAS7gSgnmUjd3DOCCXJnEWUhYbhURZvSMUVBQsiLuhg+jsAHy/qY2PgUFFijq1HmCA6TcOZa6iRAl44jUCnLuZpRUWNoBzWAAWqBo78Qk4bMCFieIykzOKgEWrgGW6Yocxu1RPJE4/JOYTXqI2x4gbBELVQuYqAdRmOZmvli3HjcxtsoXNBMFGeIoKjUNGZoMt3UbrcCoSbJiWtxVBHYZmzQlVmuKgBfxCYrfiVBB2ENG4WkCu1r0XAajNVBZIRtylcR2ZYKwk4GkU1w/QjuHFlSvwU1qEgAtun7JTaAYxNSO4YLaq4E0PnOPEMBsqKJiUB8Tyk2As6iEWnDA1Pgjhae4doOtTiQcwMnEc0NksrEs+LlxLuZWJi2TKslcFQK49SoVQsFoubjmhmVplW1cCZquVZCj4gpmAiF7mi4a5cwKLE0pohHfEYRv1F2PSoCS2rc/ULi64hc+oSFpS6D1AOqcIHPmNaAAP8At6SZkdA8uHNXedamTPo4S9hvpJaI7YMsAEJ5jgBQrW0XbEh2nfDA8d/MYqdbfxRzJ3BLa2YCJTkLiYNFzcouZNDBC3EFwQYTawDsJsgPOJxPhGa5IFHUJJjGXcunUvkgLsgEpgjZLbw1ChuDipoDUTiY2G4vSJ0QqWyE0zGxUFLhUTN/Lnzo7eCWLJwUuHL56gBRKwYjsJ4srTeYRSFwSq3MEl9TBu9ibHuLCAwtEdH8Jp6maCXkTH6lisUJRlCY5zcuLgeI2v0MAugFHUBv5hIQ0EDroib7Jg1uK2AURix8LqUVQOEgG7VMC1bJLNiXEAaAm1QmCjBHEC8YgA5RSy10lDaoniZ2dSxBs3MqMJguJRBQDTqKNiNCHabuUlFbOD/WUSwpCd0Gh9wuChat8jMYfTRwl/KN/EauobicsZ57lcOZWOI9HmyBIu5T/cOvT4YFuFH0kYwMVDDNpzgF56J/c8AKbzDX8Xt8xoR2w1SscQQGULac3CwUAIuJauYI0x7VIZHESi2fJKdMqPsYezNY+5uMGXiXMKYYDfc/JzOQYgqUu6qIHcVoRS0Bm4hjTAZd2smWrC7QzjuC/wDJgtj1GPpENLydg7JppkRwOTfUZuzBQru4gvphqrLaO4vkHMrZupo02SylNz4wfv8AKYmkaSBWYYl1GQEv38IZVZxPUr+BubUwztl1JsgXfcoU8zLMcIElwKjkZWg+UoqEoLKuOc2whoYXAInLMexzwRRAl8t4ilETn3EEEeTcNpVpl9S5RqU0Y+bFdhCyCTBWMrHt8Rm9Omwyw9OiOeUUNJjD+YefODVK7ahIw21VlsgXgIkHnZ+Ymg/epctu3mFGFYjrWmzqIxgJSKint9TIZFJMQjQdrs/CwRFvEPXUN0zZ4gKiooHLxKw3jB5qOpqXiOZWqgYlK9Ro+2XquZeJZsvxLA77CULxmBLbbQhsUGXPfcsl2RgZZyVsK5zHLbGUtxeZSwsd8XBV4DxBq4gYxiHFQLp7XEaioQt7y6W/UU7LALRsfDHPCm++EeTz9y5QTMqarkOuzjZKCjq3B5T9J6mctDRWwykyt2xuwSk+RBRLqF4GleRxUtdWrwvmLFqPEbNwMX3D1JZXxAu1nYlc7MqwP+hiCCpiyy4WIRGhxfFQNBtrgRpGIENhcQOWg1C1nmt16goUVTYH53BbApFhZELVigAtltWoMXNzshqOk9Ew3AmQLutQrrzG6u5i0bFery6gbKDRfW4ihjDTzOSPzAxadwDJtBOER05qW2GJaqjcIFYSQWEEjXDhmazXuEffU0CmaaAFiuLaih8QasDnPiGGHKmROu9EuaTkwa4z03XZGowNfD7OfZHJVuNiM48Mo8i3ATivVxEUFbVjQP1FjbzVz2eFjkBydvcy9AxbuavA5hQYN8TzupYuU17aZo+osKgV+QzaH6VxJ4AI6YfVjloeoqkXGHxBoFkZKiiwSUjgy5kBWOIZKKNErOph6ncVe1CZ9/UaJXKo6jp5jaxlg1XPMDgCiqZkNZXf2Q8jDEuro7mbbVsuOUHxGhfyi8mGZEK5TTBnUNNSmqgBiXFQ76PMdIblLz0dsRzUDVayOHL9So5HEVCD9rcAvwNvPa8eHUy+aOFcT+4OlM5uYfNVBsClYU38RmExTWG4b6Hr1bWRCLSIoPmAkNOMr5gwaG7Y3j1KlZWYFCIat1KuGCZ2bbd+CrT4gI+GmOpfWi16IEzguN09xYhKxDcDWNw1YOojduNhlQvpT+o3gUmwl+kBaoZWSoOW43tIzfjJmIBg3jY+4ICxfA+IeAdxWQxUpBygSc3Nq7lbjVajC+IVUZmhzOBQhWaYF/8AEukXBKRyY8/uHmqhFhaf9IMxo2R1jwwKWJLPVYf3BaatxbGAvyvxLzBA+lsfOLJf3Ra7ADz2Xp6jD62uDXiAAYFecHH4hlWs0HG9y9sGEQWEOn/IjgfuDVUURifjbdefmARoouW1BjsIvZsPX5S13sr7mUz/AAK4eobhcIUIZAM6IfHJx2q7xl6i7rfNxmO0FBfieDEYO4Fxz7ijSEqzTvwxIYt2aAvvmHEtdiZJPVx0w0LlPm4AYsjRvzBtlkqZsxOInWmXGP8AfEBJRDAIAc3z5ueiZOxYHgfcKerBNyrnvFxPjlqQDDwlalYBJG1igmkYORW0BRnrGGWedaNDRPfHDk3M6drurP2b+pQigX5HMxABCmKxNbKAKvUJbRHJ9bQYUm3y7iUonCT/AAgiQMx61L5aMHNFOM/cBb5bTwZ/yUR5Qi7d+j+DGvtGg8Qai7UeCKG5cbXMoosMY3ZaI52k8Jb4meJ7hnP9QzHIt3LJlLlxAFUVdHcRggncBz306hPkpCM1mEfOOotSq6hqUHmCe4rJc3gyoKYbBDChy1le2CDG2VIeYGwbPCmM3s+cQIaS2HfZLm0sDKlL/lEoZY5s4S2dy9i1218uN2bPkhmV4rf8g1bcMs6j8A8BiXfAowBNI4EATDFnPjqHUi0luf8AYdMADRLoVnRUpA4qDw77i1LHYHhq68ywCkZwi5ZaoG6R1FBLyiv5ZRLj90ZcZq3MELpUHuIBXi8O/USJo3HR/wBxGhHOhxonZH+7ZLkDh+SS+Q2ueNxlD5gLfczKak5f+HLLXDuAx4EtMw3sG+IyRz1COLO2J1ywE58RaGRYKVDNqWvMDNW+juYWObVtdwgAaoJmLi4JIGW+mXDB5T4m89NnqUehHxxfR5jMaCLRdHB4ZoCJqK87ZLjEgo1E6rw78wrBPAo/MwhHFocNcC6olzzg3DAU40T1zMbWCiGP3GnA7bNkMDPfCj0XnuZlN4jmI4QKec2PLCZnnQVZ4DqYd/BsGNa8n8jmVmBIWi5dCCFJEWoWLcZsLPWJR1VaT6wv1gVgWnHWPnmPWsBL5Cn9QiApyupnySg2uiJqtJwOiYQ4/qPm0TiWkR1jxKlai4XqUKG4woFZctu5k3C/2NI7VoDmYCNar0dQOU8fEQammaLG4gRkYHOOq23I7E1Fb0wUD54+dPmVTytgbesBfLmpduQqmV7YCjFMosYcwMg4On+QfntOCW9npQUC+Ru/MAfaL5lMq8ZWO3aCMEXOsxu+XcdGouOPoL/JZBOpbO9Wv0heb/XFzzmEsu5M8QKzDZcF1YSpg8R2ZyZYrBfy/EzslatiB+AFTrJqGESvNJoOB1jmu4aKRFW9ZeDt4I6QK+MD/eYDA2SphLOfUeVUuoSH0x0DMcUMwQpaWEosDuFLWMho7lJsMQCmcS4OSHAcjHn+kfWpeJUtLbz6IAKKGAhpV1DaLfiZRIQkabxGCQOvSuh9/uUdm8BcLbwFQIao1eEYUdsgH6qHMUlUEQl0D4ZlScRtGPmXQ0qB6eGL29GXVPy/cTx59N/mPM2kBDC5cz3DFI7RUDvOV2Yn6F+YE23K3vEf2XVCDEaIc2yun8xF2qV7t58vjqyKhMZYCA45g4Xj3DBXMGZZZhphfeIgFBuEQENoS/EOy1Hz8Q3FlQbAqVl7fuDA3GZeoZX9xJTOVLhp/i/9houK/KNI71VHZCJvOfS/k+0TEAcDiVhOsFnu4LStqZ89Rp8tqf8AkOBsFtx1Qrngw609iLynKeOoezb4OmL+sSgrpHzHQ9zQcRYo+Jo2ZqZEFM3RFFFVxN1F9RA7xHT1HLxopbYWxJyj+ZQ7f1y052dDNcsKBnzAPO4QBh+oVKRnIcmlS4QDtLYDcYqGW+X+Qza4KDI1GF09yllArmOLYGINsfKpv/u+Za4mep5QLIMBKMYgMujv+Bj81AlgKsO54j2khdgqB3+5VD2FgwkYpblhOQeiof8AXL1XB4qHO9TvccwAzNUwoUR76Xe2yUeSxhw3hm9wOEL1AzcN9RutxSqZU3xFuVWa4lGrYg1K7McIjzX2xWxgf+d2deDrlpp22sh2wlW9yqyMsMwbszN7nzXb/GLn2EGkv5qtH3GAO5IItKkuV4t4sZXllu+ZVvSR9TkFMA5fRL03QnB5e2YioJt/gYIVFGCOBqU451Lmop0yt6l00OT8MOympFzWLNEPUCruSu7gAFiroyuW7rTPmogwL8xiBcBRgFh7kUAoAAKrVQv5h28oXkgB0HmD4hKRyvzObuXia2RgFbI3RqLS4vy9y62sVGG4ZThHGcPJbEdj1MVEV2oyo/v8PEugJ3UvUFMtRqUhmIiK6PEfmDQnDN2Cgezic7AXgP8A1lWkb+IUFVsJSAGxxULKCmLrMZtae6sqWDL3fHifCI43HAFzDomal8CXPAlayY9DPULwB2ez/wAhQGHUGsuUKtFjG/uIXNcbVQxbbXDGv8gg2PvcWeYrMx2x6ykkabN+JlXhMFOVBqlGqmSAwUyViZotkaude4MIi6IBE71EHhLuEcASob3mIb8R5N6jKKEmhUfbBSlC3uGxjmAGmOIFLxDmAXcdYDMHcRW4V+0J2hBYTgGlcn1KGRuDzCRNH3BFuvUpKWHDAL+cfhICFWfuOObqVVUFXNRC2/0iaVN3i4sj4gQO5uP4iS5PuUXK3XJ/uaMqhFn7gVrOzQukv8wKC5I/uChhb6QTYLYyNQjVB4Zdb1CGqUbwVVcxuBsQDtOl/ctL+hqY1ZNE5iF/Mvcp/gruYOZyFZHzBFY8JDYWECKF9TRKhnMQFkypwGE+aa+5h8DfzLaq6LlBtNS4NNvamYqZxt66PbH925jEqkbuVbaDSX9sKs6hq4uTplB7dLABrOIOSI4ZUP8As5CDzKAcTNEEujqIYWIAJj5tlE2ZrIPVw5iFC+P/ALOVJi062s4yyxorsvH6itTctnHcOGxtav6jEWVYviEKNG/l/BC0s4lBkNpoeZc1NFYRhSO33AwypslrdWRaIFnxLI4IvwEELEeY6aabZ2DDSiF+YHE6XA029S3txfAXLM1nyOvjBKkHmOCLRR3MzlGmLOQonJgI2l7L2jcd1LzzL87YhtRTe4GkF04mXnEXkhkSklQDTzCun+ETI9WPqWFXKSuJghmJgVF6lqlp9xxSGYUw1uCpyr5YLcuRXbAgqqy07lU4VCgtPzBfOF4jXDIsL/vMaxq2EfJ9QhciiPUxdk+snn+CvKsAI34sG3/kpvNd/JMFmDZDRjJZnUwRbM/Qy4YOX3G7BiAOojFQQHlNSiWrUAWC28aNif219SzWAXUwHJZiVGI0wgamzcLxxLtFP01M5ojmG+4qOGV4t7zs4Y9VdTmMg1XCTnxQW7iAXfiHulmsrVb00/cxI2ruO8Q0o3UFF8kEnNy+CuJTN7l50z14OI7BdquIuhxjPqbGA1Ygm5ZZnI58x6V4JukqKCq69ReXlm4Jo2DQlsEwc7/yFxK+P9BNn3HOSNI7hQeSanhhXbwhsl3Ky5hyDmMyVEgCnURU+Ora/LbMKC3ccFhndRUWgG5dWmCG14jHmOdLcsPmKuo2udQb3v8AjHij+ICvLZ0xQ5VEF5gHOJcimsS7k9jNFMzvkXNOH5KfmEiQbqbUu1FHOYhphqDCrQ7I3CaUuiFQVjKMkIlAlNkTaiUbJjkRblFZFmUWITQul74kTzh9COXowe3/AJCEdJ/xZM37M2m0NS5g59+UC8uHDFXAqxi7LggQBrcVAMdzNKIgOIOGK82D8m/iKcKxlgEqsXmLLgaiAqcB0eYoKtl/lv8AqTcLvhj61fNwYLE2y4TwlrPYRaFzYjUuUwqzqHwscY+oxTai/EQ0Gw4ND8n6llQMc+4ThmMMVg1KnNkfEIZRtKjeTAdRcis3xDjkdAYfMzfqctJxcQHBrFYYpXosO9xjhhY+JSpKWxSf5Lhj+CQ0fsIjxZl1tcXm4BYVRzg8Q9Qr61x95iOSpmD6gBA2mp4D9zNA4cTI5MAdrB+C35IWa4A7hm71uGE2dwgHY1WaD/8AA+IaujAoA6IaBbz9TJZS9Mv7yepUDLmYN3BHEeiXw8S/eX+JiE2Q5jpd9w+aNFo/49Sh+Af36hJiDxWIyil5li0PEwIpzaj7QvBgz5ZlHDiXAXgyZEeLMEJp8P4zATLgAuGIim9NeJ5kfqjem/U8IwFspLaTm8AQ0LPMKBn+yDTuXmCVye44kBb/ANoKrKaiXNCE+JaFLlIxsAw+ogLygb2FtD5lqbVe3+oYjBQmJkyYMoaIaFmLaV9J/hLSA3vDa8v4wSzqOwQ3Zo5szKCBbzU3LTbNpY4nMFv+GI3ySw7PI5CUkSDurYlIaMwYDNeCcvPTHmkEyJxC5d5zE4xTlqV3ZFiJhoPMOj0Uf5CpQdKZldQWG2swpAPZ/JESSFin9wiyq0+o16g/wRlMmgvB6JmOfOReOYjelVUt9PxGlftWbi/6uYgqeZREJ3BvRLH0mrw+IrqK4zmES0CnxCC/CmEFO4IzFRUGSvEQVVrx9vL+oac2bcblvVWOdTL0wcitqju9SxFGtxtPVy8voiBRZHoKm1S9VBIP7G5fKDi5kzcUrJmZrVHM26gbvOOZTsaGzuVc21a4IijxJ3HBhiJcxagb6/q/EFuKitxXWZh9yo3eSWvoeEMruLD4lJoqRseJihtPeKaQXA68RBtXIH5hjmyhzh/yOWClO1LUr2oFZS2vUB+4f5HFW3KplCYKY6zBBpOU8xs67h3ivUvtg0DZi5Zmsjz5mY6S/Ff1DNFHmAau2YTUYX6C56Hnj5hNi0ArwYgCkOEwwoqmllUxNZr/AOyjy+IfILCzIQylO5YhAbYHS9y3GEqDEygHmASVupUOCal9LR2QlR4LsT05K9Q44qyxHcCdbGddezULIFkMbndAk9xgivGSC6R0X/CMeRaDP5gdS8nEsj8RBlh+mUsjA1Ba6DjRgU7rFwBcd/5EGAk8A/qbbqAf0TCKBmg/ghwuVZo5pgrjLwRAHCOoipTDgf1Ess1CD1teo77C7423FYLHuIUTnMvkCUNr1LsgXe6OpapwC6yjsBZa7xUJW2nvv9vEGYMJ1AhVqNtgEJo6HqJoDUCqOnmKBQvNP8EXiZoDuFWoEcYq8kp1BwmpNj1KxC1rpFBs3ZhO/KCsLi8Hs19TApOn+w6ldI/tAsgm1DElqh/lHB5hgwMHAdVL3F+W1IqoHFTXxWziaRXIzKApe/1D0WA0WJMJTUy6QUqzd0BmPjDtTmXQjQQ7oOmDhaeEhTdZcJKFlbAlRWmd7hVIvZuXtvvtZNeSVJoGgkEL20UBbrBtiKgwdcqV8e8ygJ2jwIG/AKzDVa0B3XL4IoLYvlX/AHEdoqhm4iRvBCfAQCrZTwRzcs3MEBGUtlx4m0GDCI5nZAQHmE/mO4HUMCMesCa6YmGC9R1QuypnrluUwUmNE1aB60+W4tFrVYuL8qiyIeaqWwWOV6iaUhxnLuVHy+44Ga9ssQEVtGFoZGbUS3003cbzVFUQ63KbMRz+VNxrGglkJ05rmEiGGqltV8HMoCXiK0K6TUxcC8kLesXiFVoS3JsqsXvccNV2N5FfGYvgey8X4YBTMG0UFar6dI1jZAAG4sSAdxNgockZCxW3EyBQ7dxEHZCUFTfU/9k=\"></image>-->\n  <!--</pattern>-->\n  <!--</defs>-->\n  <!--<circle [attr.r]=\"200\" [attr.cx]=\"200\" [attr.cy]=\"200\"-->\n  <!--fill=\"black\"></circle>-->\n  <!--<circle clip-path=\"url(#cut-off-bottom)\" filter=\"url(#pictureFilter)\" [attr.r]=\"200\" [attr.cx]=\"200\" [attr.cy]=\"200\"-->\n  <!--fill=\"url(#image)\"></circle>-->\n  <!--<text font-family=\"sans-serif\" fill=\"white\" x=\"200\" y=\"270\" text-anchor=\"middle\" text-decoration=\"underline\"-->\n  <!--font-size=\"60\">-->\n  <!--<a href=\"https://twitter.com/kirjs\" fill=\"white\">🔥kirjs</a></text>-->\n  <!--<circle clip-path=\"url(#cut-off-top)\" filter=\"url(#pictureFilter)\" [attr.r]=\"200\" [attr.cx]=\"200\" [attr.cy]=\"200\"-->\n  <!--fill=\"url(#image)\"></circle>-->\n  <!--</svg>-->\n\n  <kirjs-polaroid>\n    <div class=\"picture kirjs\"></div>\n    <div class=\"text\">Hi, I'm Kirill, I live in NYC</div>\n  </kirjs-polaroid>\n\n  <a href=\"https://firebase.com\" target=\"_blank\">\n    <kirjs-polaroid>\n      <div class=\"picture fb\"></div>\n      <div class=\"text\">I work for Firebase.</div>\n    </kirjs-polaroid>\n  </a>\n\n  <a href=\"https://last.fm/user/vavan\" target=\"_blank\">\n    <kirjs-polaroid>\n      <div class=\"picture lastfm\"></div>\n      <div class=\"text\">\n        I enjoy music. Last.fm logged all the music I listened starting with\n        2005.\n      </div>\n    </kirjs-polaroid>\n  </a>\n\n  <a href=\"/binary/0\">\n    <kirjs-polaroid>\n      <div class=\"picture binary\"></div>\n      <div class=\"text\">Upcoming \"Binary ❤️ JS\" Presentation</div>\n    </kirjs-polaroid>\n  </a>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/home.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { HomeComponent } from './home.component';\n\ndescribe('HomeComponent', () => {\n  let component: HomeComponent;\n  let fixture: ComponentFixture<HomeComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [HomeComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(HomeComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/home.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-home',\n  templateUrl: './home.component.html',\n  styleUrls: ['./home.component.css']\n})\nexport class HomeComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/home.module.spec.ts",
    "content": "import { HomeModule } from './home.module';\n\ndescribe('HomeModule', () => {\n  let homeModule: HomeModule;\n\n  beforeEach(() => {\n    homeModule = new HomeModule();\n  });\n\n  it('should create an instance', () => {\n    expect(homeModule).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/home.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HomeComponent } from './home.component';\nimport { RouterModule } from '@angular/router';\nimport { PolaroidComponent } from './polaroid/polaroid.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule.forChild([\n      {\n        path: '',\n        component: HomeComponent\n      }\n    ])\n  ],\n  declarations: [HomeComponent, PolaroidComponent],\n  entryComponents: [HomeComponent]\n})\nexport class HomeModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/polaroid/polaroid.component.css",
    "content": "::ng-deep .picture {\n  width: 200px;\n  height: 200px;\n  background-size: cover;\n  box-shadow: 0 0 10px #444 inset;\n  border-radius: 50%;\n}\n\n.frame-outer {\n  width: 240px;\n  height: 400px;\n  background: #fff;\n  padding: 20px;\n  box-sizing: border-box;\n}\n\n.text {\n  margin-top: 20px;\n  background: white;\n  padding: 20px;\n  font-size: 1.3vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/polaroid/polaroid.component.html",
    "content": "<div class=\"frame-outer\">\n  <div class=\"picture\"><ng-content select=\".picture\"></ng-content></div>\n  <div class=\"text\"><ng-content select=\".text\"></ng-content></div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/polaroid/polaroid.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PolaroidComponent } from './polaroid.component';\n\ndescribe('PolaroidComponent', () => {\n  let component: PolaroidComponent;\n  let fixture: ComponentFixture<PolaroidComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [PolaroidComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PolaroidComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/home/polaroid/polaroid.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-polaroid',\n  templateUrl: './polaroid.component.html',\n  styleUrls: ['./polaroid.component.css']\n})\nexport class PolaroidComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/msk/msk.component.css",
    "content": ".pic {\n  width: 100%;\n  height: 100%;\n\n  background-repeat: no-repeat;\n  background-size: contain;\n}\n\n.awesome {\n  background-image: url(./pics/awesome.png);\n}\n\n.default {\n  background-image: url(./pics/default.png);\n}\n\n.ivy {\n  background-image: url(./pics/ivy.png);\n}\n\n.differential-loading {\n  background-image: url(./pics/differential-loading.png);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/msk/msk.component.html",
    "content": "<slide-deck slidesRouting slides-tracking>\n  <div *isPresenting slideShortcuts></div>\n  <div *isAdmin slideShortcuts></div>\n\n  <codelab-sync-button></codelab-sync-button>\n\n  <div *slide id=\"start\">\n    <h1 style=\"font-size: 60px;\">What's new in the Angular World</h1>\n    <h2>by @kirjs</h2>\n  </div>\n\n  <div *slide id=\"registration\">\n    <codelab-registration></codelab-registration>\n  </div>\n\n  <div *slide id=\"poll-0\">\n    <codelab-poll [poll]=\"polls[0]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"poll-1\">\n    <codelab-poll [poll]=\"polls[1]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"poll-2\">\n    <codelab-poll [poll]=\"polls[2]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"poll-3\">\n    <codelab-poll [poll]=\"polls[3]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"quiz-1\">\n    <codelab-poll [poll]=\"polls[4]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"awesome\">\n    <h1>ng make-this-awesome</h1>\n    <div class=\"pic awesome\"></div>\n  </div>\n\n  <div *slide id=\"ng-deploy\">\n    <h1>ng deploy</h1>\n    <h2>\n      Now you can deploy your angular-cli app to multiple cloud providers using\n      ng deploy command\n    </h2>\n    <code>\n      <pre style=\"font-size: 2vw;\">\nng add @angular/fire@next\nng deploy\n    </pre\n      >\n    </code>\n    <h2>Now you can deploy</h2>\n    <ul>\n      <li>Firebase</li>\n      <li>Netlify</li>\n      <li>Azure</li>\n      <li>Github</li>\n      <li>And more...</li>\n    </ul>\n  </div>\n  <div *slide id=\"differential-loading\">\n    <h1>Differential loading</h1>\n    <div class=\"pic differential-loading\"></div>\n    <div style=\"background: #444;color: #fff; padding: 20px;\">\n      <h2>✨ Juan's tip ✨</h2>\n      <h2>https://browserl.ist/</h2>\n    </div>\n  </div>\n\n  <div *slide id=\"default-app\">\n    <h1>New default app</h1>\n    <div class=\"pic default\"></div>\n  </div>\n\n  <div *slide id=\"quiz-2\">\n    <codelab-poll [poll]=\"polls[5]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"ivy\">\n    <h1>Angular ivy</h1>\n    <div class=\"pic ivy\"></div>\n  </div>\n\n  <div *slide id=\"quiz-3\">\n    <codelab-poll [poll]=\"polls[6]\"></codelab-poll>\n  </div>\n\n  <div *slide id=\"material\">\n    <h1>cdk-experimental clipboard service + directive</h1>\n    <div class=\"pic ivy\"></div>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/msk/msk.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MskComponent } from './msk.component';\n\ndescribe('MskComponent', () => {\n  let component: MskComponent;\n  let fixture: ComponentFixture<MskComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MskComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MskComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/msk/msk.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-msk',\n  templateUrl: './msk.component.html',\n  styleUrls: ['./msk.component.css']\n})\nexport class MskComponent implements OnInit {\n  polls = [\n    {\n      key: 'favorite',\n      type: 'choice',\n      question: 'Which framework do you use most at work?',\n      options: [\n        'Angular',\n        'AngularJS',\n        'React',\n        'Vue',\n        'Svelte',\n        'jQuery',\n        'Something else'\n      ]\n    },\n    {\n      key: 'skill',\n      type: 'choice',\n      question: 'How well do you know angular?',\n      options: [\n        'Not at all',\n        'Somewhat',\n        'I can use it',\n        'Good',\n        'Really good',\n        \"I'm Minko Fluin\"\n      ]\n    },\n    {\n      key: 'build-dev',\n      type: 'choice',\n      question:\n        'how long does it take to rebuild your app in dev mode (and see the result via local dev server) - the total turnaround time',\n      options: [\n        '< 1 second',\n        '1 - 5 seconds',\n        '5 - 10 seconds',\n        '10 - 30 seconds',\n        '30 - 60 seconds',\n        '1-10 minutes',\n        'More than 10 minutes'\n      ]\n    },\n    {\n      key: 'build-prod',\n      type: 'choice',\n      question:\n        'how long does it take to create a production build of your app',\n      options: [\n        '< 1 second',\n        '1 - 5 seconds',\n        '5 - 10 seconds',\n        '10 - 30 seconds',\n        '30 - 60 seconds',\n        '1-10 minutes',\n        'More than 10 minutes'\n      ]\n    },\n    {\n      key: 'cli',\n      type: 'choice',\n      question: 'Which feature is NOT in CLI 8.3.0-next.2 ',\n      answer: 'New command ng make-this-awesome',\n      options: [\n        'Redesigned default app',\n        'New command ng make-this-awesome',\n        'Faster builds with enabled differential loading',\n        'New command ng deploy'\n      ]\n    },\n    {\n      key: 'tomorrow',\n      type: 'choice',\n      question: 'What is being released today?',\n      answer: 'CLI 9.0.0-next.0 with Ivy by default',\n      options: [\n        'CLI 9.0.0-next.0 with Ivy by default',\n        'RxJS 8',\n        'React 16.12',\n        'Angular XS'\n      ]\n    },\n    {\n      key: 'material',\n      type: 'choice',\n      question:\n        'Which feature was added to Angular CDK library 8.1.3 \"gelatin-key\" (2019-08-14)?',\n      answer: '',\n      options: [\n        'Windows 95 theme support',\n        'Drag and drop',\n        'New material-fox component',\n        'New Clipboard service + directive'\n      ]\n    }\n  ];\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/msk/msk.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { RouterModule } from '@angular/router';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\nimport { SyncButtonModule } from '@codelab/utils/src/lib/sync/sync-button/sync-button.module';\nimport { QuestionsModule } from '@codelab/utils/src/lib/sync/components/questions/questions.module';\nimport { SyncModule } from '@codelab/utils/src/lib/sync/sync.module';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { SyncRegistrationModule } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.module';\nimport { SyncPollModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll.module';\nimport { MskComponent } from './msk.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(MskComponent));\n\n@NgModule({\n  providers: [\n    SyncDataService,\n    SyncSessionService,\n    SyncDbService,\n    SyncPollService,\n    SyncRegistrationService\n  ],\n  declarations: [MskComponent],\n  imports: [\n    CommonModule,\n    SlidesModule,\n    routes,\n    QuestionsModule,\n    SyncModule,\n    AngularFireAuthModule,\n    AngularFireDatabaseModule,\n    SyncButtonModule,\n    SyncDirectivesModule,\n    SyncRegistrationModule,\n    SyncPollModule\n  ]\n})\nexport class MskModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/music/music.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/music/music.component.html",
    "content": "<p>music works!</p>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/music/music.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MusicComponent } from './music.component';\n\ndescribe('MusicComponent', () => {\n  let component: MusicComponent;\n  let fixture: ComponentFixture<MusicComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MusicComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MusicComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/music/music.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-music',\n  templateUrl: './music.component.html',\n  styleUrls: ['./music.component.css']\n})\nexport class MusicComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/music/music.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MusicComponent } from './music.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [MusicComponent]\n})\nexport class MusicModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/qna/qna.component.css",
    "content": ":host ::ng-deep {\n  display: block;\n  padding: 40px;\n  position: relative;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/qna/qna.component.html",
    "content": "<codelab-sync-button></codelab-sync-button>\n<codelab-questions></codelab-questions>\n<codelab-registration *isAdmin></codelab-registration>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/qna/qna.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { QnaComponent } from './qna.component';\n\ndescribe('QnaComponent', () => {\n  let component: QnaComponent;\n  let fixture: ComponentFixture<QnaComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QnaComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QnaComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/qna/qna.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-qna',\n  templateUrl: './qna.component.html',\n  styleUrls: ['./qna.component.css']\n})\nexport class QnaComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/qna/qna.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { SlidesModule } from '@ng360/slides';\nimport { QuestionsModule } from '@codelab/utils/src/lib/sync/components/questions/questions.module';\nimport { SyncModule } from '@codelab/utils/src/lib/sync/sync.module';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { SyncButtonModule } from '@codelab/utils/src/lib/sync/sync-button/sync-button.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { SyncRegistrationModule } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.module';\nimport { QnaComponent } from './qna.component';\n\nconst routes = RouterModule.forChild([{ path: '', component: QnaComponent }]);\n\n@NgModule({\n  declarations: [QnaComponent],\n  providers: [\n    SyncDataService,\n    SyncSessionService,\n    SyncDbService,\n    SyncPollService,\n    SyncRegistrationService\n  ],\n  imports: [\n    CommonModule,\n    SlidesModule,\n    routes,\n    QuestionsModule,\n    SyncModule,\n    AngularFireAuthModule,\n    AngularFireDatabaseModule,\n    SyncButtonModule,\n    SyncDirectivesModule,\n    SyncRegistrationModule\n  ]\n})\nexport class QnaModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/index.ts",
    "content": "export * from './live.module';\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live-mock/index.ts",
    "content": "export * from './live-mock.module';\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live-mock/live-mock.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live-mock/live-mock.component.html",
    "content": "<form [formGroup]=\"form\">\n  <select formControlName=\"status\">\n    <option value=\"presenter\">Presenter</option>\n    <option value=\"viewer\">Viewer</option>\n  </select>\n\n  <input formControlName=\"user\" />\n\n  <pre>{{ data | json }}</pre>\n</form>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live-mock/live-mock.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LiveMockComponent } from './live-mock.component';\n\ndescribe('LiveMockComponent', () => {\n  let component: LiveMockComponent;\n  let fixture: ComponentFixture<LiveMockComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [LiveMockComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LiveMockComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live-mock/live-mock.component.ts",
    "content": "import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { LiveService, LiveInfo } from '../live.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FormBuilder, FormGroup } from '@angular/forms';\n\n@Component({\n  selector: 'kirjs-live-mock-component',\n  templateUrl: './live-mock.component.html',\n  styleUrls: ['./live-mock.component.css']\n})\nexport class LiveMockComponent implements OnInit, OnDestroy {\n  data: LiveInfo;\n\n  form: FormGroup = this.fb.group({\n    user: this.fb.control(''),\n    status: this.fb.control('')\n  });\n\n  private onDestroy: Subject<null> = new Subject<null>();\n\n  constructor(private service: LiveService, private fb: FormBuilder) {}\n\n  ngOnInit() {\n    this.form.valueChanges.subscribe(data => {\n      this.service.storeLiveInfo(data);\n    });\n\n    this.service.liveInfo.pipe(takeUntil(this.onDestroy)).subscribe(data => {\n      this.data = data;\n      this.form.patchValue(data, { emitEvent: false });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.onDestroy.next(null);\n    this.onDestroy.complete();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live-mock/live-mock.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { LiveMockComponent } from './live-mock.component';\n\n@NgModule({\n  imports: [CommonModule, ReactiveFormsModule],\n  declarations: [LiveMockComponent],\n  exports: [LiveMockComponent]\n})\nexport class LiveMockModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live.module.ts",
    "content": "import { NgModule } from '@angular/core';\n\nimport { LiveMockModule } from './live-mock';\nimport { PollModule } from './poll';\n\n@NgModule({\n  exports: [LiveMockModule, PollModule]\n})\nexport class LiveModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { LiveService } from './live.service';\n\ndescribe('LiveService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: LiveService = TestBed.inject(LiveService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/live.service.ts",
    "content": "import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport interface LiveInfo {\n  // Login service\n  user: string;\n  // Global\n  sessionId: string;\n\n  //\n  status: 'presenter' | 'viewer'; // in the future 'admin';\n  // e.g. regex\n  presentationId: string;\n  // slide id\n  slide: string;\n}\n\ntype AllData<T = any> = Record<string, T>;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LiveService<T = any> implements OnDestroy {\n  private liveInfoSubject: BehaviorSubject<LiveInfo> = new BehaviorSubject<\n    LiveInfo\n  >({\n    user: 'code',\n    sessionId: 'test',\n    status: 'presenter', // 'viewer'\n    presentationId: 'regex',\n    slide: 'config'\n  } as LiveInfo);\n  liveInfo: Observable<LiveInfo> = this.liveInfoSubject.asObservable();\n  private allDataSubject: BehaviorSubject<AllData<T>> = new BehaviorSubject<\n    AllData<T>\n  >({} as AllData<T>);\n  allData = this.allDataSubject.asObservable();\n  myData = combineLatest([this.allData, this.liveInfo]).pipe(\n    map(([allData, { user }]) => {\n      return allData[user];\n    })\n  );\n\n  constructor() {}\n\n  storeLiveInfo(data: LiveInfo): void {\n    const liveInfo = this.liveInfoSubject.getValue();\n    this.liveInfoSubject.next({ ...liveInfo, ...data });\n  }\n\n  // Viewer\n  storeMyData(data: T): void {\n    // firebase.store\n    const liveInfo = this.liveInfoSubject.getValue();\n    const allData = this.allDataSubject.getValue();\n    const value = { ...allData, [liveInfo.user]: data };\n\n    this.allDataSubject.next(value);\n  }\n\n  ngOnDestroy() {\n    if (this.allDataSubject) {\n      this.allDataSubject.complete();\n      this.allDataSubject = null;\n    }\n    if (this.liveInfoSubject) {\n      this.liveInfoSubject.complete();\n      this.liveInfoSubject = null;\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/poll/index.ts",
    "content": "export * from './poll.module';\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/poll/poll.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/poll/poll.component.html",
    "content": "<ng-container *ngIf=\"service.liveInfo | async as data\">\n  <ng-container *ngIf=\"data.status === 'viewer'\">\n    <ng-container *ngIf=\"!(service.myData | async)\">\n      2\n      <ul *ngTemplateOutlet=\"answers\"></ul>\n    </ng-container>\n\n    <ng-container *ngIf=\"service.myData | async\">\n      {{ service.allData | async | json }} 3\n      <ul *ngTemplateOutlet=\"answers\"></ul>\n    </ng-container>\n  </ng-container>\n  <ng-container *ngIf=\"data.status === 'presenter'\">\n    Results are here!!!\n  </ng-container>\n</ng-container>\n\n<!--*ngIf=\"showResult then result\"-->\n<!--*ngIf=\"showAnswers then answers\"-->\n\n<!--<ng-container [ngSwitch]=\"(service.liveInfo | async)?.status\">-->\n<!--<ng-container *ngSwitchCase=\"'presenter'\">-->\n<!--<ng-container *ngTemplateOutlet=\"result\"></ng-container>-->\n<!--<ng-container *ngTemplateOutlet=\"answers\"></ng-container>-->\n\n<!--</ng-container>-->\n<!--<ng-container *ngSwitchCase=\"'viewer'\">-->\n<!--<ng-container *ngTemplateOutlet=\"result\"></ng-container>-->\n<!--</ng-container>-->\n<!--</ng-container>-->\n\n<!--<live-info viewer=\"viewer\" presenter=\"presenter\"></live-info>-->\n\n<ng-template #answers let-data>\n  // results myDAta\n  <ng-content></ng-content>\n</ng-template>\n\n<!--<ng-template #presenter>-->\n<!--// Result-->\n<!--</ng-template>-->\n\n<!--<live-info>-->\n<!--<my-custom-viewer *viewer=\"let data\" [data]=\"data\"></my-custom-viewer>-->\n<!--<ng-container *presenter=\"let data\"></ng-container>-->\n<!--</live-info>-->\n\n<!--<kirjs-live>-->\n<!--<kirjs-live-config>-->\n<!--&lt;!&ndash;Poll&ndash;&gt;-->\n<!--&lt;!&ndash;Yes | No&ndash;&gt;-->\n<!--</kirjs-live-config>-->\n<!--<kirjs-live-viewer>-->\n<!--...-->\n<!--</kirjs-live-viewer>-->\n<!--</kirjs-live>-->\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/poll/poll.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PollComponent } from './poll.component';\n\ndescribe('SyncPollComponent', () => {\n  let component: PollComponent;\n  let fixture: ComponentFixture<PollComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [PollComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PollComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/poll/poll.component.ts",
    "content": "import { Component, Injectable, Input, OnInit } from '@angular/core';\nimport { LiveService } from '../live.service';\n\n@Component({\n  selector: 'kirjs-poll',\n  templateUrl: './poll.component.html',\n  styleUrls: ['./poll.component.css']\n})\nexport class PollComponent {\n  @Input() question: string;\n  constructor(readonly service: LiveService) {}\n}\n\n@Component({\n  selector: 'kirjs-poll-answer',\n  template: `\n    <li (click)=\"service.storeMyData(value)\"><ng-content></ng-content></li>\n  `,\n  styleUrls: ['./poll.component.css']\n})\nexport class SlidesAnswerComponent implements OnInit {\n  @Input() value: string;\n  constructor(readonly service: LiveService) {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/live/poll/poll.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PollComponent, SlidesAnswerComponent } from './poll.component';\n\n@NgModule({\n  declarations: [PollComponent, SlidesAnswerComponent],\n  exports: [PollComponent, SlidesAnswerComponent],\n  imports: [CommonModule]\n})\nexport class PollModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/regex.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/regex.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting kirjs-tracking>\n  <div *slide id=\"start\"><h1>Hello</h1></div>\n\n  <div *slide id=\"list\">\n    <ul>\n      <li>a</li>\n      <li>b</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"poll\">\n    <kirjs-live-mock-component></kirjs-live-mock-component>\n\n    <kirjs-poll question=\"Yes or no?\">\n      <kirjs-poll-answer value=\"Yes\">Yes</kirjs-poll-answer>\n      <kirjs-poll-answer value=\"No\">No</kirjs-poll-answer>\n    </kirjs-poll>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/regex.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RegexComponent } from './regex.component';\n\ndescribe('RegexComponent', () => {\n  let component: RegexComponent;\n  let fixture: ComponentFixture<RegexComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RegexComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RegexComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/regex.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-regex',\n  templateUrl: './regex.component.html',\n  styleUrls: ['./regex.component.css']\n})\nexport class RegexComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/regex/regex.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { RegexComponent } from './regex.component';\nimport { LiveModule } from './live';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(RegexComponent));\n\n@NgModule({\n  declarations: [RegexComponent],\n  imports: [routes, CommonModule, SlidesModule, LiveModule]\n})\nexport class RegexModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/simple-stack/simple-stack.component.css",
    "content": ":host {\n  white-space: nowrap;\n  border: 3px #666 dotted;\n  border-top-left-radius: 5px;\n  border-bottom-left-radius: 5px;\n  border-right: 0;\n  padding-left: 10px;\n  padding-right: 40px;\n  height: 46px;\n  position: relative;\n}\n\n:host:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 46px;\n  right: 80px;\n  background: white;\n  opacity: 0.7;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/simple-stack/simple-stack.component.html",
    "content": "{{ value }}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/simple-stack/simple-stack.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SimpleStackComponent } from './simple-stack.component';\n\ndescribe('SimpleStackComponent', () => {\n  let component: SimpleStackComponent;\n  let fixture: ComponentFixture<SimpleStackComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SimpleStackComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SimpleStackComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/simple-stack/simple-stack.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'slides-simple-stack',\n  templateUrl: './simple-stack.component.html',\n  styleUrls: ['./simple-stack.component.css']\n})\nexport class SimpleStackComponent implements OnInit {\n  @Input() value: string;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function/stack-function.component.css",
    "content": ":host {\n  white-space: nowrap;\n}\n.grid {\n  display: grid;\n  grid-template-columns: 1fr 80px 1fr;\n}\n\n.arrow {\n  text-align: center;\n}\n\n:host.disabled {\n  opacity: 0.4;\n  background: #eee;\n}\n\n.inputs {\n  justify-self: end;\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function/stack-function.component.html",
    "content": "<div *ngIf=\"func.name\" class=\"name\">\n  {{ func.name }}\n</div>\n<div class=\"grid\" *ngIf=\"!func.name\">\n  <span class=\"inputs\">({{ func.inputs }})</span>\n  <span class=\"arrow\">=></span>\n  <span>{{ func.outputs }}</span>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function/stack-function.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StackFunctionComponent } from './stack-function.component';\n\ndescribe('StackFunctionComponent', () => {\n  let component: StackFunctionComponent;\n  let fixture: ComponentFixture<StackFunctionComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StackFunctionComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StackFunctionComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function/stack-function.component.ts",
    "content": "import { Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { StackFunction } from '../stack-game.component';\n\n@Component({\n  selector: 'slides-stack-function',\n  templateUrl: './stack-function.component.html',\n  styleUrls: ['./stack-function.component.css']\n})\nexport class StackFunctionComponent implements OnInit {\n  @Input() func: StackFunction;\n\n  @HostBinding('class.disabled')\n  @Input()\n  disabled = false;\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function-button/stack-function-button.component.css",
    "content": "button {\n  font-size: inherit;\n  cursor: pointer;\n  background: #ffffff;\n  border: 1px #ddd solid;\n  border-radius: 10px;\n  padding: 10px;\n  margin: 0 10px;\n}\n\nbutton:hover {\n  background: #eee;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function-button/stack-function-button.component.html",
    "content": "<button>\n  <slides-stack-function\n    [disabled]=\"disabled\"\n    [func]=\"func\"\n  ></slides-stack-function>\n</button>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function-button/stack-function-button.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StackFunctionButtonComponent } from './stack-function-button.component';\n\ndescribe('StackFunctionButtonComponent', () => {\n  let component: StackFunctionButtonComponent;\n  let fixture: ComponentFixture<StackFunctionButtonComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StackFunctionButtonComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StackFunctionButtonComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-function-button/stack-function-button.component.ts",
    "content": "import { Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { StackFunction } from '../stack-game.component';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-stack-function-button',\n  templateUrl: './stack-function-button.component.html',\n  styleUrls: ['./stack-function-button.component.css']\n})\nexport class StackFunctionButtonComponent {\n  @Input() func: StackFunction;\n  @Input() disabled = false;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-game.component.css",
    "content": ".buttons {\n  margin: 20px 0 40px;\n  text-align: center;\n}\n\n.complete {\n  text-align: center;\n}\n\n.stack {\n  margin-left: 30px;\n}\n\n.item {\n  white-space: nowrap;\n  margin-bottom: 10px;\n  height: 55px;\n  display: block;\n  line-height: 55px;\n}\n\n.initial {\n  color: #666;\n  text-align: right;\n}\n\n.function-usage {\n  text-align: right;\n}\n\n.history {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n}\n\n.next {\n  background: #dddddd;\n  text-align: center;\n  border-radius: 5px;\n}\n\n.remove-button {\n  margin-right: 10px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-game.component.html",
    "content": "<div class=\"buttons\" *ngIf=\"!isComplete\">\n  <slides-stack-function-button\n    *ngFor=\"let func of level.functions\"\n    (click)=\"canAddFunction(stack, func) && addFunction(func)\"\n    [disabled]=\"!canAddFunction(stack, func)\"\n    [func]=\"func\"\n  >\n  </slides-stack-function-button>\n</div>\n\n<div class=\"complete\" *ngIf=\"isComplete\">\n  ✨💖 Success! ✨💖\n</div>\n\n<div class=\"history\">\n  <div class=\"functions\">\n    <div class=\"item initial\">Initial stack:</div>\n    <div\n      *ngFor=\"let func of functions; let last = last\"\n      style=\"display: flex;justify-content: flex-end\"\n    >\n      <span (click)=\"removeFunction()\" class=\"remove-button\" *ngIf=\"last\"\n        >ⓧ</span\n      >\n      <slides-stack-function [func]=\"func\" class=\"item\"></slides-stack-function>\n    </div>\n  </div>\n\n  <div class=\"stack\">\n    <div class=\"item\">\n      <slides-simple-stack [value]=\"level.inputs\"></slides-simple-stack>\n    </div>\n    <div *ngFor=\"let stack of history\" class=\"item\">\n      <slides-simple-stack [value]=\"stack\"></slides-simple-stack>\n    </div>\n  </div>\n</div>\n<hr />\n\n<div class=\"history \">\n  <div class=\"item initial\">Expected:</div>\n  <div class=\"item stack\">\n    <slides-simple-stack [value]=\"level.outputs\"></slides-simple-stack>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-game.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StackGameComponent } from './stack-game.component';\n\ndescribe('StackGameComponent', () => {\n  let component: StackGameComponent;\n  let fixture: ComponentFixture<StackGameComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StackGameComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StackGameComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-game/stack-game.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\nexport interface StackFunction {\n  inputs: string;\n  outputs: string;\n  name?: string;\n}\n\nexport interface Level {\n  functions: StackFunction[];\n  inputs: string;\n  outputs: string;\n}\n\nconst ANY_CHAR = '＊';\n\n@Component({\n  selector: 'slides-stack-game',\n  templateUrl: './stack-game.component.html',\n  styleUrls: ['./stack-game.component.css']\n})\nexport class StackGameComponent implements OnInit {\n  isComplete = false;\n\n  @Input() level: Level = {\n    functions: [\n      {\n        inputs: '',\n        outputs: '🍏',\n        name: 'push 🍏'\n      },\n      {\n        inputs: '🍏🍏',\n        outputs: '🍋'\n      },\n      {\n        inputs: '🍋🍋',\n        outputs: '🍒'\n      },\n      {\n        inputs: '＊',\n        outputs: '',\n        name: 'pop'\n      }\n    ],\n    inputs: '🍏',\n    outputs: '🍒'\n  };\n\n  functions = [];\n  stack = '';\n  history: string[];\n\n  canAddFunction(stack: string, func) {\n    return stack.match(new RegExp(func.inputs.replace(ANY_CHAR, '.') + '$'));\n  }\n\n  calcStack() {\n    let stack = this.level.inputs.replace(ANY_CHAR, '🍏');\n    const history = [];\n    for (const func of this.functions) {\n      stack =\n        stack.slice(\n          0,\n          stack.length - func.inputs.replace(ANY_CHAR, '🍏').length\n        ) + func.outputs;\n      history.push(stack);\n    }\n    this.history = history;\n    this.stack = stack;\n    if (this.stack === this.level.outputs) {\n      this.isComplete = true;\n    }\n  }\n\n  addFunction(func: StackFunction) {\n    this.functions.push(func);\n    this.calcStack();\n  }\n\n  removeFunction() {\n    this.functions.pop();\n    this.calcStack();\n  }\n\n  ngOnInit() {\n    this.stack = this.level.inputs;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SlidesRoutes } from '@ng360/slides';\nimport { StackComponent } from './stack.component';\nimport { StackModule } from './stack.module';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(StackComponent));\n\n@NgModule({\n  imports: [StackModule, routes]\n})\nexport class StackRoutingModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-test/stack-test.component.html",
    "content": "<p>\n  Test time! those two companies have \"stack\" in their name, but only one of\n  them actually has stack as their logo. which one?\n</p>\n\n<div class=\"wrapper\">\n  <button class=\"company\" mat-raised-button>\n    <div class=\"name\">StackOverflow.com</div>\n    <div class=\"logo\">\n      <div class=\"so\"></div>\n    </div>\n  </button>\n  <div class=\"gap\"></div>\n  <button class=\"company\" mat-raised-button>\n    <div class=\"name\">StackBlitz.com</div>\n    <div class=\"logo\">\n      <div class=\"sb\"></div>\n    </div>\n  </button>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-test/stack-test.component.scss",
    "content": ".wrapper {\n  display: flex;\n\n  .company {\n    text-align: center;\n    flex: 1;\n\n    .name {\n      font-size: 40px;\n      font-weight: 300;\n      margin: 20px 0;\n    }\n\n    .logo {\n      height: 150px;\n\n      > div {\n        background-size: cover;\n        margin: 20px auto;\n      }\n      .sb {\n        width: 80px;\n        height: 120px;\n        background-image: url('./assets/sb-icon.svg');\n      }\n\n      .so {\n        width: 150px;\n        height: 150px;\n        background-image: url('./assets/so-icon.svg');\n      }\n    }\n  }\n\n  .gap {\n    flex: 0.2;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-test/stack-test.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StackTestComponent } from './stack-test.component';\n\ndescribe('StackTestComponent', () => {\n  let component: StackTestComponent;\n  let fixture: ComponentFixture<StackTestComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StackTestComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StackTestComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack-test/stack-test.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-stack-test',\n  templateUrl: './stack-test.component.html',\n  styleUrls: ['./stack-test.component.scss']\n})\nexport class StackTestComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack.component.css",
    "content": ":host ::ng-deep .slide.slide > div {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 40px;\n  padding: 0 20vw;\n}\n\n::ng-deep {\n  font-weight: 300;\n}\n\n.button-wrapper {\n  margin: 20px 0;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <div *slide id=\"start\">\n    <p>\n      <b>Stack</b> is a data structure, serving as a collection. Here's a stack\n      of fruit:\n    </p>\n\n    <slides-simple-stack value=\"🍏🍏🍏🍏🍏🍓\"></slides-simple-stack>\n\n    <p>All operations are possible only with the last element of the stack.</p>\n  </div>\n\n  <div *slide id=\"pop\">\n    <p>First operation is called <b>pop</b>, it removes the last element.</p>\n    <slides-stack-game [level]=\"levels.pop\"></slides-stack-game>\n  </div>\n\n  <div *slide id=\"push\">\n    <p>\n      The other operation is <b>push</b>. It adds an element on top of the\n      stack.\n    </p>\n    <slides-stack-game [level]=\"levels.push\"></slides-stack-game>\n  </div>\n\n  <div *slide id=\"peek\">\n    <p>\n      Some implementations also have a <b>peek</b> operation. It tells you what\n      top element on the stack is. You can try it below:\n    </p>\n    <slides-simple-stack value=\"🍏🍋\"></slides-simple-stack>\n    <div class=\"button-wrapper\">\n      <slides-stack-function-button\n        (click)=\"itIsALemon = true\"\n        [func]=\"{ name: 'peek' }\"\n      ></slides-stack-function-button>\n    </div>\n    <div *ngIf=\"itIsALemon\">Congrats! It is a 🍋</div>\n  </div>\n\n  <div *slide id=\"practice\">\n    <p>Let's practice!</p>\n    <p>\n      Use the commands you know already to get a stack of:\n      <slides-simple-stack value=\"🍓🍋\"></slides-simple-stack>\n    </p>\n    <slides-stack-game [level]=\"levels.together\"></slides-stack-game>\n  </div>\n\n  <div *slide id=\"test\">\n    <slides-stack-test></slides-stack-test>\n  </div>\n\n  <div *slide id=\"congrats\">\n    <h2>Congrats! Now you are a stack expert!</h2>\n    <p>\n      But why are stacks important? And how can I use them in a language like\n      asm\n    </p>\n  </div>\n\n  <div *slide id=\"stack-machines\">\n    <p>Let's learn stack machine.</p>\n    <p>\n      This is one of the fundamental principles used in JVM Java Byte Code,\n      WebAssembly byte code\n    </p>\n  </div>\n\n  <div *slide id=\"instructions\">\n    <p>\n      Stack machine offers various intructions that can pop and then push\n      multiple element on the stack\n    </p>\n    <p>\n      For example (🌲🍏)=>🍍 takes two elements from the stack (Pine and Apple)\n      and pushes a 🍍 back\n    </p>\n  </div>\n\n  <div *slide id=\"lemonade\">\n    <p>Now use the instructions below to prepare a lemonade drink:</p>\n    <slides-stack-game [level]=\"levels.lemonade\"></slides-stack-game>\n  </div>\n\n  <div *slide id=\"lol\">\n    <p>Produce a dog</p>\n    <slides-stack-game [level]=\"levels.level1\"></slides-stack-game>\n  </div>\n\n  <div *slide id=\"list\">\n    <slides-stack-game></slides-stack-game>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StackComponent } from './stack.component';\n\ndescribe('StackComponent', () => {\n  let component: StackComponent;\n  let fixture: ComponentFixture<StackComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StackComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StackComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport { Level } from './stack-game/stack-game.component';\n\n@Component({\n  selector: 'kirjs-stack',\n  templateUrl: './stack.component.html',\n  styleUrls: ['./stack.component.css']\n})\nexport class StackComponent implements OnInit {\n  itIsALemon = false;\n\n  levels: Record<string, Level> = {\n    push: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '🍏',\n          name: 'push 🍏'\n        },\n        {\n          inputs: '',\n          outputs: '🍋',\n          name: 'push 🍋'\n        }\n      ],\n      inputs: '',\n      outputs: '🍏🍋🍏'\n    },\n\n    pop: {\n      functions: [\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        }\n      ],\n      inputs: '🍏🍏🍏🍏🍏',\n      outputs: '🍏'\n    },\n\n    together: {\n      functions: [\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        },\n        {\n          inputs: '',\n          outputs: '🍓',\n          name: 'push 🍓'\n        },\n        {\n          inputs: '',\n          outputs: '🍋',\n          name: 'push 🍋'\n        }\n      ],\n      inputs: '🍏🍏',\n      outputs: '🍓🍋'\n    },\n\n    lemonade: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '💦'\n        },\n        {\n          inputs: '',\n          outputs: '🍋'\n        },\n        {\n          inputs: '',\n          outputs: '🍒'\n        },\n        {\n          inputs: '🍒💦🍋',\n          outputs: '🍹'\n        }\n      ],\n      inputs: '',\n      outputs: '🍹'\n    },\n    level1: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '🍏🍏'\n        },\n        {\n          inputs: '',\n          outputs: '🍋'\n        },\n        {\n          inputs: '🍋🍋',\n          outputs: '🍒'\n        },\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        }\n      ],\n      inputs: '🍏',\n      outputs: '🍒'\n    },\n    level2: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '🍏',\n          name: 'push 🍏'\n        },\n        {\n          inputs: '🍏🍏',\n          outputs: '🍋'\n        },\n        {\n          inputs: '🍋🍋',\n          outputs: '🍒'\n        },\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        }\n      ],\n      inputs: '🍏',\n      outputs: '🍒'\n    }\n  };\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/stack/stack.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule } from '@ng360/slides';\nimport { StackComponent } from './stack.component';\nimport { StackGameComponent } from './stack-game/stack-game.component';\nimport { SimpleStackComponent } from './simple-stack/simple-stack.component';\nimport { StackTestComponent } from './stack-test/stack-test.component';\nimport { StackFunctionComponent } from './stack-game/stack-function/stack-function.component';\nimport { StackFunctionButtonComponent } from './stack-game/stack-function-button/stack-function-button.component';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n  declarations: [\n    StackComponent,\n    StackGameComponent,\n    SimpleStackComponent,\n    StackTestComponent,\n    StackFunctionComponent,\n    StackFunctionButtonComponent\n  ],\n  exports: [\n    StackComponent,\n    StackGameComponent,\n    SimpleStackComponent,\n    StackTestComponent,\n    StackFunctionComponent,\n    StackFunctionButtonComponent\n  ],\n  imports: [CommonModule, SlidesModule, MatButtonModule]\n})\nexport class StackModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/streaming/common.ts",
    "content": "import { InjectionToken } from '@angular/core';\n\nexport const FLAME_LINK = new InjectionToken('FLAME_LINK');\n\ninterface Guest {\n  name: string;\n  twitter: string;\n  avatar: string;\n}\nexport interface StreamSession {\n  name: string;\n  guests: Guest[];\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/streaming/overlay/overlay.component.html",
    "content": "<ng-container *ngIf=\"data$ | async as config\">\n  <mat-card\n    *ngIf=\"layout === 'vertical'\"\n    style=\"width: 240px;position: absolute;right: 10px;top: 10px;bottom: 10px\"\n  >\n    <h1>{{ config.header }}</h1>\n    <p>{{ config.subHeader }}</p>\n    <div [innerHTML]=\"config.description\"></div>\n    <div style=\"display:flex;text-align: center; margin-top: 8px;\">\n      <div *ngFor=\"let guest of config.guests\" style=\"width: 120px;\">\n        <img\n          [src]=\"guest.avatar\"\n          style=\"width: 90px;border-radius: 50%;height: 90px;\"\n          [alt]=\"guest.name\"\n        />\n        <div\n          style=\"font-size: 20px;font-weight: 400;height: 32px;line-height: 32px;\"\n        >\n          {{ guest.name }}\n        </div>\n        <div>@{{ guest.twitter }}</div>\n      </div>\n    </div>\n    <h2>Chat</h2>\n  </mat-card>\n\n  <div\n    *ngIf=\"layout === 'horizontal'\"\n    style=\"width: 240px;position: absolute;left: 10px;top: 10px;bottom: 10px; display:flex;\"\n  >\n    <h2 style=\"margin-right: 20px;\">\n      @kirjs\n    </h2>\n    <div *ngFor=\"let guest of config.guests\" style=\"display:flex;\">\n      <ng-container *ngIf=\"guest.name !== 'kirjs'\">\n        <img\n          [src]=\"guest.avatar\"\n          style=\"width: 35px;border-radius: 50%;height: 35px;\"\n          [alt]=\"guest.name\"\n        />\n        <div>@{{ guest.twitter }}</div>\n      </ng-container>\n    </div>\n  </div>\n</ng-container>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/streaming/overlay/overlay.component.scss",
    "content": ":host {\n  border: 1px #ddd solid;\n  width: 1650px;\n  height: 1050px;\n  display: block;\n  font-family: 'Helvetica Neue', sans-serif;\n  position: relative;\n}\n\n.circle {\n  position: absolute;\n  right: 20px;\n  bottom: 20px;\n  height: 240px;\n  width: 240px;\n  border-radius: 50%;\n}\n\n:host ::ng-deep {\n  h2 {\n    margin-bottom: 0;\n    font-family: 'Helvetica Neue', sans-serif;\n    font-weight: 300;\n  }\n\n  p {\n    margin-top: 8px;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/streaming/overlay/overlay.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { OverlayComponent } from './overlay.component';\n\ndescribe('OverlayComponent', () => {\n  let component: OverlayComponent;\n  let fixture: ComponentFixture<OverlayComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [OverlayComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(OverlayComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/streaming/overlay/overlay.component.ts",
    "content": "import { Component, Inject, OnInit } from '@angular/core';\nimport { FLAME_LINK, StreamSession } from '../common';\nimport { interval, Observable } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\n@Component({\n  selector: 'slides-overlay',\n  templateUrl: './overlay.component.html',\n  styleUrls: ['./overlay.component.scss']\n})\nexport class OverlayComponent implements OnInit {\n  readonly layout = 'horizontal';\n  data$: Observable<StreamSession> = interval(5000).pipe(\n    startWith(0),\n    switchMap(() => {\n      return this.flameLink.content.get({\n        schemaKey: 'currentSession',\n        populate: true\n      });\n    }),\n    map((a: any) => a.session)\n  );\n\n  constructor(@Inject(FLAME_LINK) private flameLink: any) {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/streaming/streaming.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { OverlayComponent } from './overlay/overlay.component';\n\nimport firebase from 'firebase/app';\n// Add additional services that you want to use\nimport 'firebase/auth';\nimport 'firebase/firestore';\nimport flamelink from 'flamelink/app';\n// Add additional modules that you want to use\nimport 'flamelink/content';\nimport 'flamelink/storage';\nimport { FLAME_LINK } from './common';\nimport { MarkdownModule } from 'ngx-markdown';\n\nconst firebaseConfig = {\n  apiKey: 'AIzaSyC_Zyq9Ve1SrbenuN0iDlDd4hQvTIlruP8',\n  authDomain: 'kirjs-c884f.firebaseapp.com',\n  databaseURL: 'https://kirjs-c884f.firebaseio.com',\n  projectId: 'kirjs-c884f',\n  storageBucket: 'kirjs-c884f.appspot.com',\n  messagingSenderId: '651206687896',\n  appId: '1:651206687896:web:3df45fa9e636bb5882a4ed',\n  measurementId: 'G-3B7YEC4QG7'\n};\n\nconst firebaseApp = firebase.initializeApp(firebaseConfig);\n\nconst app = flamelink({\n  firebaseApp,\n  env: 'production', // optional, defaults to `production`\n  locale: 'en-US', // optional, defaults to `en-US`\n  dbType: 'cf' // optional, defaults to `rtdb` - can be 'rtdb' or 'cf' (Realtime DB vs Cloud Firestore)\n});\n\n@NgModule({\n  declarations: [],\n  providers: [\n    {\n      provide: FLAME_LINK,\n      useValue: app\n    }\n  ],\n  imports: [\n    RouterModule.forChild([\n      {\n        path: '',\n        component: OverlayComponent\n      }\n    ]),\n    CommonModule,\n    MarkdownModule\n  ]\n})\nexport class StreamingModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n// Just an empty component to make everything compile\n@Component({\n  selector: 'kirjs-app',\n  template: ''\n})\nexport class AppComponent {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/attr/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <rect\n        x=\"100\"\n        width=\"200\"\n        y=\"100\"\n        height=\"200\"\n        fill=\"pink\"\n        stroke=\"black\"\n        stroke-width=\"20\"\n      ></rect>\n    </svg>\n  `\n})\nexport class AppComponent {\n  y = 200;\n\n  constructor() {\n    window.setInterval(() => {\n      this.y = Math.random() * 300;\n    }, 200);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/bs.module.ts",
    "content": "import { AppComponent as A1 } from './sub.component';\nimport { AppComponent as A2 } from './attr/app.component';\nimport { AppComponent as A3 } from './chart/app.component';\nimport { AppComponent as A4 } from './svg/app.component';\nimport { AppComponent as A5 } from './chart4/app.component.solved';\nimport { AppComponent as A6 } from './chart2/app.component.solved';\nimport { Component, Input, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'kirjs-ticks',\n  template: ''\n})\nexport class FakeTicksComponent {\n  @Input() data: any;\n}\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [A1, A2, A3, A4, A5, A6, FakeTicksComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction generateData() {\n  return Array.from(new Array(10)).map(index =>\n    Math.round(Math.random() * 300)\n  );\n}\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <g\n        *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n        [style.transform]=\"\n          'translate(' + barSpace * i + 'px, ' + (320 - item) + 'px)'\n        \"\n      >\n        <rect\n          [attr.width]=\"barWidth\"\n          [attr.height]=\"item\"\n          fill=\"pink\"\n          stroke=\"black\"\n          stroke-width=\"4\"\n        ></rect>\n\n        <text [attr.x]=\"barWidth / 2\" y=\"-10\">{{ item }}</text>\n      </g>\n    </svg>\n  `\n})\nexport class AppComponent {\n  barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n\n  data = generateData();\n\n  constructor() {\n    window.setInterval(() => {\n      this.data = generateData();\n    }, 1000);\n  }\n\n  getIndex(a, b) {\n    return a;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart2/app.component.solved.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction generateData() {\n  return Array.from(new Array(10)).map(index => ({\n    index,\n    value: Math.round(Math.random() * 300)\n  }));\n}\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <g\n        *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n        [style.transform]=\"\n          'translate(' + barSpace * i + 'px, ' + (320 - item.value) + 'px)'\n        \"\n      >\n        <rect\n          [attr.width]=\"barWidth\"\n          [attr.height]=\"item.value\"\n          fill=\"pink\"\n          stroke=\"black\"\n          stroke-width=\"4\"\n        ></rect>\n\n        <text [attr.x]=\"barWidth / 2\" y=\"-10\">{{ item.value }}</text>\n      </g>\n      <!--<g kirjs-ticks style=\"transform: translate(0, 350px);\" [data]=\"data\"></g>-->\n    </svg>\n  `\n})\nexport class AppComponent {\n  barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n  data = generateData();\n\n  constructor() {\n    window.setInterval(() => {\n      this.data = generateData();\n    }, 1000);\n  }\n\n  getIndex(a, b) {\n    return a;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart2/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction generateData() {\n  return Array.from(new Array(10)).map(index => ({\n    index,\n    value: Math.round(Math.random() * 300)\n  }));\n}\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <g\n        *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n        [style.transform]=\"\n          'translate(' + barSpace * i + 'px, ' + (320 - item.value) + 'px)'\n        \"\n      >\n        <rect\n          [attr.width]=\"barWidth\"\n          [attr.height]=\"item.value\"\n          fill=\"pink\"\n          stroke=\"black\"\n          stroke-width=\"4\"\n        ></rect>\n\n        <text [attr.x]=\"barWidth / 2\" y=\"-10\">{{ item.value }}</text>\n      </g>\n    </svg>\n  `\n})\nexport class AppComponent {\n  barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n  data = generateData();\n\n  constructor() {\n    window.setInterval(() => {\n      this.data = generateData();\n    }, 1000);\n  }\n\n  getIndex(a, b) {\n    return a;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart2/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { TicksComponent } from './ticks.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent, TicksComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart2/ticks.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-ticks',\n  template: `\n    <svg:text\n      *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n      [attr.x]=\"barSpace * (i + 0.3)\"\n      style=\"text-anchor: center\"\n      fill=\"black\"\n    >\n      {{ i }}\n    </svg:text>\n  `\n})\nexport class TicksComponent {\n  @Input() data;\n  @Input() barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n\n  getIndex(i: number) {\n    return i;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart3/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction generateData() {\n  return Array.from(new Array(10)).map(index => ({\n    index,\n    value: Math.round(Math.random() * 300)\n  }));\n}\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <g\n        *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n        [style.transform]=\"\n          'translate(' + barSpace * i + 'px, ' + (320 - item.value) + 'px)'\n        \"\n      >\n        <rect\n          [attr.width]=\"barWidth\"\n          [attr.height]=\"item.value\"\n          fill=\"pink\"\n          stroke=\"black\"\n          stroke-width=\"4\"\n        ></rect>\n\n        <text [attr.x]=\"barWidth / 2\" y=\"-10\">{{ item.value }}</text>\n      </g>\n    </svg>\n  `\n})\nexport class AppComponent {\n  barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n  data = generateData();\n\n  constructor() {\n    window.setInterval(() => {\n      this.data = generateData();\n    }, 1000);\n  }\n\n  getIndex(a, b) {\n    return a;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart3/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { TicksComponent } from './ticks.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent, TicksComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart3/ticks.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-ticks',\n  template: `\n    <svg:text\n      *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n      [attr.x]=\"barSpace * (i + 0.3)\"\n      style=\"text-anchor: center\"\n      fill=\"black\"\n    >\n      {{ i }}\n    </svg:text>\n  `\n})\nexport class TicksComponent {\n  @Input() data;\n  @Input() barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n\n  getIndex(i: number) {\n    return i;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart4/app.component.solved.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction generateData() {\n  return Array.from(new Array(10)).map(index => ({\n    index,\n    value: Math.round(Math.random() * 300)\n  }));\n}\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <g\n        *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n        [style.transform]=\"\n          'translate(' + barSpace * i + 'px, ' + (320 - item.value) + 'px)'\n        \"\n      >\n        <rect\n          [attr.width]=\"barWidth\"\n          [attr.height]=\"item.value\"\n          fill=\"pink\"\n          stroke=\"black\"\n          stroke-width=\"4\"\n        ></rect>\n\n        <text [attr.x]=\"barWidth / 2\" y=\"-10\">{{ item.value }}</text>\n      </g>\n      <!--<g kirjs-ticks style=\"transform: translate(0, 350px);a:1\" [data]=\"data\"></g>-->\n    </svg>\n  `\n})\nexport class AppComponent {\n  barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n  data = generateData();\n\n  constructor() {\n    window.setInterval(() => {\n      this.data = generateData();\n    }, 1000);\n  }\n\n  getIndex(a, b) {\n    return a;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart4/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\nfunction generateData() {\n  return Array.from(new Array(10)).map(index => ({\n    index,\n    value: Math.round(Math.random() * 300)\n  }));\n}\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <g\n        *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n        [style.transform]=\"\n          'translate(' + barSpace * i + 'px, ' + (320 - item.value) + 'px)'\n        \"\n      >\n        <rect\n          [attr.width]=\"barWidth\"\n          [attr.height]=\"item.value\"\n          fill=\"pink\"\n          stroke=\"black\"\n          stroke-width=\"4\"\n        ></rect>\n\n        <text [attr.x]=\"barWidth / 2\" y=\"-10\">{{ item.value }}</text>\n      </g>\n      <!--<g kirjs-ticks style=\"transform: translate(0, 350px)\" [data]=\"data\"></g>-->\n    </svg>\n  `\n})\nexport class AppComponent {\n  barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n  data = generateData();\n\n  constructor() {\n    window.setInterval(() => {\n      this.data = generateData();\n    }, 1000);\n  }\n\n  getIndex(a, b) {\n    return a;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart4/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\nimport { TicksComponent } from './ticks.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent, TicksComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/chart4/ticks.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-ticks',\n  template: `\n    <svg:text\n      *ngFor=\"let item of data; let i = index; trackBy: getIndex\"\n      [attr.x]=\"barSpace * (i + 0.3)\"\n      style=\"text-anchor: center\"\n      fill=\"black\"\n    >\n      {{ i }}\n    </svg:text>\n  `\n})\nexport class TicksComponent {\n  @Input() data;\n  @Input() barWidth = 30;\n  padding = 10;\n  barSpace = this.padding + this.barWidth;\n\n  getIndex(i: number) {\n    return i;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <body>\n    <kirjs-app></kirjs-app>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/style.css",
    "content": "svg,\nbody,\nhtml {\n  width: 100%;\n  height: 100%;\n}\n\ntext {\n  font-family: sans-serif;\n  text-anchor: middle;\n}\n\nrect,\ntext,\ng {\n  transition: 1s;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/sub.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg>\n      <rect\n        x=\"100\"\n        width=\"200\"\n        y=\"100\"\n        height=\"200\"\n        fill=\"pink\"\n        stroke=\"black\"\n        stroke-width=\"20\"\n      ></rect>\n    </svg>\n  `\n})\nexport class AppComponent {\n  y = 200;\n\n  constructor() {\n    window.setInterval(() => {\n      this.y = Math.random() * 300;\n    }, 200);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/samples/svg/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-app',\n  template: `\n    <svg></svg>\n  `\n})\nexport class AppComponent {\n  y = 200;\n\n  constructor() {\n    window.setInterval(() => {\n      this.y = Math.random() * 300;\n    }, 200);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-demo/svg-demo.component.css",
    "content": ":host {\n  height: 100%;\n  display: block;\n}\n\n:host ::ng-deep svg {\n  width: 100%;\n  height: 100%;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-demo/svg-demo.component.html",
    "content": "<div style=\"height: 100%;display: flex;\">\n  <div style=\"flex: 1; height: 100%\">\n    <code-demo-editor\n      [(ngModel)]=\"code\"\n      [lineNumbers]=\"false\"\n      fontSize=\"30\"\n    ></code-demo-editor>\n  </div>\n  <div style=\"height: 100%;flex: 1\">\n    <div style=\"height: 100%;\" [innerHTML]=\"code | safeHtml\"></div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-demo/svg-demo.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SvgDemoComponent } from './svg-demo.component';\n\ndescribe('SvgDemoComponent', () => {\n  let component: SvgDemoComponent;\n  let fixture: ComponentFixture<SvgDemoComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SvgDemoComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SvgDemoComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-demo/svg-demo.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-svg-demo',\n  templateUrl: './svg-demo.component.html',\n  styleUrls: ['./svg-demo.component.css']\n})\nexport class SvgDemoComponent implements OnInit {\n  code: string;\n\n  @Input() fontSize;\n  @Input('code')\n  set codeInput(value) {\n    this.code = '<svg>\\n' + value + '\\n</svg>';\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-playground/svg-playground.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-playground/svg-playground.component.html",
    "content": "<p>svg-playground works!</p>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-playground/svg-playground.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SvgPlaygroundComponent } from './svg-playground.component';\n\ndescribe('RaceComponent', () => {\n  let component: SvgPlaygroundComponent;\n  let fixture: ComponentFixture<SvgPlaygroundComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SvgPlaygroundComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SvgPlaygroundComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-playground/svg-playground.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-svg-playground',\n  templateUrl: './svg-playground.component.html',\n  styleUrls: ['./svg-playground.component.css']\n})\nexport class SvgPlaygroundComponent implements OnInit {\n  @Input() code: string;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together/svg-together.component.css",
    "content": ":host {\n  height: 100%;\n  display: block;\n}\n\n:host ::ng-deep svg {\n  width: 100%;\n  height: 100%;\n}\n\ncode-demo-editor {\n  height: 500px;\n  width: 100%;\n  display: inline-block;\n  border: 1px solid #000;\n}\n\n::ng-deep svg {\n  width: 500px;\n  height: 500px;\n  border: 1px solid #999999;\n  min-height: 500px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together/svg-together.component.html",
    "content": "<!--<div style=\"display: flex;\">-->\n<!--  <div [style.height]=\"'100%'\" style=\"flex: 1\">-->\n<!--    <div>-->\n<!--      <button-->\n<!--        mat-button-->\n<!--        (click)=\"code = helper.code\"-->\n<!--        *ngFor=\"let helper of helpers\"-->\n<!--      >-->\n<!--        {{ helper.label }}-->\n<!--      </button>-->\n<!--      <button (click)=\"submit()\" mat-raised-button color=\"primary\">-->\n<!--        Submit-->\n<!--      </button>-->\n<!--    </div>-->\n<!--    <code-demo-editor-->\n<!--      [(ngModel)]=\"code\"-->\n<!--      [lineNumbers]=\"false\"-->\n<!--      fontSize=\"30\"-->\n<!--    ></code-demo-editor>-->\n<!--  </div>-->\n<!--  <div style=\"height: 500px; width: 500px; flex-shrink: 0;flex-grow: 0\">-->\n<!--    <div style=\"height: 100%;\" [innerHTML]=\"allCode | safeHtml\"></div>-->\n<!--    <div-->\n<!--      style=\"height: 100%;margin-top: -500px\"-->\n<!--      [innerHTML]=\"code | safeHtml\"-->\n<!--    ></div>-->\n<!--  </div>-->\n<!--</div>-->\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together/svg-together.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SvgTogetherComponent } from './svg-together.component';\n\ndescribe('SvgTogetherComponent', () => {\n  let component: SvgTogetherComponent;\n  let fixture: ComponentFixture<SvgTogetherComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SvgTogetherComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SvgTogetherComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together/svg-together.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { AngularFireDatabase, AngularFireList } from '@angular/fire/database';\n\n@Component({\n  selector: 'kirjs-svg-together',\n  templateUrl: './svg-together.component.html',\n  styleUrls: ['./svg-together.component.css']\n})\nexport class SvgTogetherComponent implements OnInit {\n  code = '';\n  angularFireList: AngularFireList<any>;\n  @Input() fontSize;\n  allCode = 'TBD';\n  helpers = [\n    {\n      label: '⭕️',\n      code: `<svg>\n<circle cx=\"200\"\n  opacity=\"0.5\"\n  cy=\"200\"\n  r=\"30\"\n  fill=\"#ff0000\"\n  stroke=\"black\"\n  stroke-width=\"2\">\n</circle>\n</svg>`\n    },\n    {\n      label: '⬭',\n      code: `<svg>\n <ellipse cx=\"130\"\n        cy=\"175\"\n        opacity=\"0.3\"\n        rx=\"40\"\n        ry=\"20\"\n        fill=\"#ff0000\"\n        stroke=\"black\"\n        stroke-width=\"2\"/>\n</svg>`\n    },\n    {\n      label: '▭',\n      code: `<svg>\n<rect x=\"100\"\n  width=\"20\"\n  opacity=\"0.3\"\n  y=\"100\"\n  height=\"20\"\n  fill=\"#ff0000\"\n  stroke=\"black\"\n  stroke-width=\"2\">\n</rect>\n</svg>`\n    },\n    {\n      label: '_',\n      code: `<svg>\n<line x1=\"10\"\n  opacity=\"0.3\"\n  x2=\"30\"\n  y1=\"30\"\n  y2=\"10\"\n  stroke=\"#ff0000\"\n  stroke-width=\"2\">\n</line>\n</svg>`\n    },\n    {\n      label: 't',\n      code: `<svg>\n<text x=20\n  y=\"40\"\n  opacity=\"0.3\"\n  font-size=\"40\"\n  fill=\"#ff0000\"\n  stroke=\"black\"\n  stroke-width=10>\nLOL❤\n</text>\n</svg>`\n    },\n    {\n      label: '☆',\n      code: `<svg>\n<polygon points=\"20,10 250,190 160,310 40,20\"\n  fill=\"#ff0000\"\n  opacity=\"0.3\"\n  stroke=\"black\"\n  stroke-width=\"2\"/>\n</svg>`\n    },\n    {\n      label: '⌇',\n      code: `<svg>\n<path d=\"M 40 20 L 20 20, 55 130 Z\"\n    fill=\"#ff0000\"\n    opacity=\"0.3\"\n    stroke=\"black\"\n    stroke-width=1\n    />\n</svg>`\n    }\n  ];\n\n  constructor(af: AngularFireDatabase) {\n    this.angularFireList = af.list('/svg-together');\n    this.angularFireList.snapshotChanges().subscribe(a => {\n      this.allCode =\n        '<svg>' + a.map(a => a.payload.val()).join('\\n') + '</svg>';\n    });\n    this.reset();\n  }\n\n  @Input('code')\n  set codeInput(value) {\n    this.code = '<svg>\\n' + value + '\\n</svg>';\n  }\n\n  submit() {\n    const code = this.code.replace(/<svg>\\s+/, '').replace('</svg>', '');\n    this.angularFireList.push(code);\n    this.reset();\n  }\n\n  reset() {\n    this.code = `<svg>\n  <!--Write your code here-->\n</svg>`;\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together-result/svg-together-result.component.css",
    "content": ":host {\n  height: 100%;\n  display: block;\n}\n\n:host ::ng-deep svg {\n  width: 100%;\n  height: 100%;\n}\n\ncode-demo-editor {\n  height: 500px;\n  width: 100%;\n  display: inline-block;\n  border: 1px solid #000;\n}\n\n::ng-deep svg {\n  width: 500px;\n  height: 500px;\n  border: 1px solid #999999;\n  min-height: 500px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together-result/svg-together-result.component.html",
    "content": "<div>\n  <div\n    style=\"width: 95vh;\n\n  margin: 0 auto;position: absolute;top:0;left: 50%;margin-left:-48vh;\nbackground: white;\nfont-size: 5vh;text-align: center;padding: 1vh;\"\n  >\n    https://codelab.fun/svg/draw\n  </div>\n  <div\n    style=\"height: 95vh; width: 95vh; margin: 5vh auto\"\n    [innerHTML]=\"allCode | safeHtml\"\n  ></div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together-result/svg-together-result.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SvgTogetherResultComponent } from './svg-together-result.component';\n\ndescribe('SvgTogetherResultComponent', () => {\n  let component: SvgTogetherResultComponent;\n  let fixture: ComponentFixture<SvgTogetherResultComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SvgTogetherResultComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SvgTogetherResultComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg-together-result/svg-together-result.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { AngularFireDatabase, AngularFireList } from '@angular/fire/database';\n\n@Component({\n  selector: 'kirjs-svg-together-result',\n  templateUrl: './svg-together-result.component.html',\n  styleUrls: ['./svg-together-result.component.css']\n})\nexport class SvgTogetherResultComponent implements OnInit {\n  code = '';\n  angularFireList: AngularFireList<any>;\n  @Input() fontSize;\n  allCode = 'TBD';\n\n  constructor(af: AngularFireDatabase) {\n    this.angularFireList = af.list('/svg-together');\n    this.angularFireList.snapshotChanges().subscribe(a => {\n      this.allCode =\n        '<svg viewBox=\"0 0 500 500\">' +\n        a.map(a => a.payload.val()).join('\\n') +\n        '</svg>';\n    });\n  }\n\n  @Input('code')\n  set codeInput(value) {\n    this.code = '<svg>\\n' + value + '\\n</svg>';\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg.component.css",
    "content": ":host ::ng-deep .monaco-editor .view-overlays .current-line {\n  display: none;\n}\n\n:host ::ng-deep .decorationsOverviewRuler {\n  display: none;\n}\n\n:host ::ng-deep .scrollbar.vertical {\n  display: none;\n}\n\n.timer {\n  position: fixed;\n  left: 20px;\n  bottom: 20px;\n}\n\n.bg {\n  width: 100%;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n.intro {\n  background-image: url(pics/1.jpg);\n}\n\n.kirjs {\n  background-image: url(pics/ava.gif);\n}\n\n.svg-60 {\n  background-image: url(pics/2.jpg);\n}\n\n.example {\n  background-image: url(pics/3.jpg);\n}\n\n.the-end {\n  background-image: url(pics/4.jpg);\n}\n\n.dog {\n  background-image: url(pics/5.gif);\n}\n\n.bg.intro h2 {\n  background: #000;\n  color: white;\n  margin-top: 50vh;\n  padding: 50px;\n  font-size: 10vh;\n  opacity: 0.7;\n}\n\n.bg.kirjs h2 {\n  background: #000;\n  color: white;\n  margin-top: 50vh;\n  padding: 10px;\n  font-size: 10vh;\n  opacity: 0.7;\n}\n\n.bg h2 {\n  background: #fff;\n  color: black;\n  margin-top: 50vh;\n  padding: 50px;\n  font-size: 10vh;\n  opacity: 0.7;\n}\n\n.btn-bar {\n  line-height: 3vw;\n}\n\n.btn-bar:hover .font-size {\n  display: block;\n  font-size: 4vw;\n}\n\n.btn-bar .font-size {\n  display: none;\n}\n\n.twitter {\n  color: #444;\n  font-size: 3vw;\n  margin: 2vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg.component.html",
    "content": "<slide-deck kirjs-tracking slidesRouting slideShortcuts>\n  <slide-arrows></slide-arrows>\n\n  <!--<kirjs-new-progress-bar title=\"Angular ❤️ SVG\" [fontSize]=\"fontSize\"-->\n  <!--(fontSizeChange)=\"fontSize =fontSize+ $event\"></kirjs-new-progress-bar>-->\n\n  <!--  INTRO -->\n  <div no-padding *slide id=\"intro\">\n    <div class=\"bg intro\">\n      <h2>\n        Angular ❤️ SVG <br />\n        @kirjs\n      </h2>\n    </div>\n  </div>\n\n  <div no-padding *slide id=\"kirjs\">\n    <div class=\"bg kirjs\">\n      <ul>\n        <li>I read 📖📖📖</li>\n        <li>@kirjs</li>\n      </ul>\n    </div>\n  </div>\n\n  <div *slide id=\"why-svg\">\n    <h1>What is SVG?</h1>\n    <ul>\n      <li>Scalable Vector Graphic Format</li>\n      <li>Can be edited with a text editor!</li>\n      <li>Every object is just an XML tag</li>\n      <li>Works with CSS</li>\n      <li>Plays well with angular templates!</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"angular-gif\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.gifang\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"angular-intro\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.angular\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <!--  INTRO -->\n  <div no-padding *slide id=\"svg-in-60\">\n    <div class=\"bg svg-60\"><h2>SVG in 5 minutes</h2></div>\n  </div>\n\n  <div *slide id=\"svg-circle\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.circle\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-ellipse\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.ellipse\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-rect\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.rect\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-line\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.line\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-text\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.text\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-linewrap\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.linewrap\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-foreign-object\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.foreignObject\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-polygon\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.polygon\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-path\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.path\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-group\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.group\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"cool-stuff\"><h2>Some cool stuff</h2></div>\n\n  <div *slide id=\"svg-clip\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.clip\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-path-2\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.path\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-clip2\">\n    <kirjs-svg-demo [fontSize]=\"fontSize\" [code]=\"code.clip2\"></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"svg-textPath\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.textPath\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"completed\">\n    <h2>Now you're an SVG expert!</h2>\n    <h2>However SVG has a couple of edge cases</h2>\n  </div>\n\n  <div *slide id=\"completed2\" no-padding>\n    <div class=\"bg dog\">\n      <h2>Sign up for my 80 hour workshop \"Wait, SVG, LOL, Really?\"</h2>\n    </div>\n  </div>\n\n  <div *slide id=\"examples\" no-padding>\n    <div class=\"bg example\"><h2>Let's check out some examples:</h2></div>\n  </div>\n\n  <div *slide id=\"angular\">\n    <kirjs-svg-demo\n      [fontSize]=\"fontSize\"\n      [code]=\"code.angular\"\n    ></kirjs-svg-demo>\n  </div>\n\n  <div *slide id=\"examples-hc\">\n    <h2><a href=\"https://www.highcharts.com/demo\">Highcharts</a></h2>\n  </div>\n\n  <div *slide id=\"svg-attrs\" no-padding>\n    <h1>SVG attributes binding</h1>\n    <code-demo\n      [(ngModel)]=\"code.componentAttrs\"\n      file=\"app.component.ts\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"attr-vs-prop-2\">\n    <h1>LOL, but why?</h1>\n    <div style=\"height: 100%;\">\n      <code-demo-editor\n        fontSize=\"40\"\n        [lineNumbers]=\"false\"\n        [(ngModel)]=\"code.attrVsProp\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"svg-chart\" no-padding>\n    <h1>Let's create a simple barchart</h1>\n    <code-demo\n      [(ngModel)]=\"code.basicChart\"\n      file=\"app.component.ts\"\n    ></code-demo>\n  </div>\n\n  <div *slide id=\"svg-chart-2\" no-padding>\n    <h1>Custom SVG Elements</h1>\n\n    <code-demo\n      [(ngModel)]=\"code.chart2\"\n      [solutions]=\"code.chart2Solutions\"\n      file=\"app.component.ts\"\n    ></code-demo>\n  </div>\n\n  <!--<div *slide id=\"svg-chart3\" no-padding>-->\n  <!--<h1>Foreign object</h1>-->\n\n  <!--<kirjs-exercise [files]=\"code.chart3\">-->\n  <!--<div class=\"description\"></div>-->\n  <!--<kirjs-new-editors [fontSize]=\"fontSize\" class=\"editor\">-->\n  <!--</kirjs-new-editors>-->\n  <!--<kirjs-angular-preview-runner class=\"description\"></kirjs-angular-preview-runner>-->\n  <!--</kirjs-exercise>-->\n  <!--</div>-->\n\n  <div *slide id=\"attr-vs-prop-3\">\n    <h1>But why?</h1>\n    <div style=\"height: 100%;\">\n      <code-demo-editor\n        fontSize=\"40\"\n        [lineNumbers]=\"false\"\n        [(ngModel)]=\"code.createElement\"\n      ></code-demo-editor>\n    </div>\n  </div>\n\n  <div *slide id=\"links\">\n    <h2>Links</h2>\n    <ul>\n      <li>\n        <a href=\"https://www.youtube.com/watch?v=ADXX4fmWHbo\"\n          >SVG Can do that? (eng)</a\n        >\n      </li>\n      <li>\n        <a href=\"https://swimlane.github.io/ngx-charts/bar-vertical\"\n          >NGX Charts</a\n        >\n      </li>\n      <li><a href=\"https://codelab.fun/svg/0\">https://codelab.fun/svg/0</a></li>\n    </ul>\n  </div>\n\n  <!--<div *slide id=\"draw\">-->\n  <!--<kirjs-svg-together [fontSize]=\"fontSize\"></kirjs-svg-together>-->\n  <!--</div>-->\n\n  <!--<div *slide id=\"svg-together-result\" no-padding=\"\">-->\n  <!--<kirjs-svg-together-result [fontSize]=\"fontSize\"></kirjs-svg-together-result>-->\n  <!--</div>-->\n\n  <div *slide id=\"links-2\" no-padding>\n    <div class=\"bg the-end\"><h2>@kirjs</h2></div>\n  </div>\n\n  <div class=\"timer\" no-padding><kirjs-timer></kirjs-timer></div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/svg.module.ts",
    "content": "import { NgModule } from '@angular/core';\n\nimport { RouterModule } from '@angular/router';\nimport { SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { SvgComponent } from './svg.component';\n\nimport { FormsModule } from '@angular/forms';\nimport { SvgDemoComponent } from './svg-demo/svg-demo.component';\nimport { SvgPlaygroundComponent } from './svg-playground/svg-playground.component';\n\nimport { TimerComponent } from './timer/timer.component';\nimport { CommonModule } from '@angular/common';\nimport { SvgTogetherComponent } from './svg-together/svg-together.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { SharedPipeModule } from '@codelab/utils/src/lib/pipes/pipes.module';\nimport { SlidesModule } from '@ng360/slides';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { SvgTogetherResultComponent } from './svg-together-result/svg-together-result.component';\nimport { NewProgressBarModule } from '../ast/new-progress-bar/new-progress-bar.module';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(SvgComponent));\n\n@NgModule({\n  imports: [\n    routes,\n    CommonModule,\n    FeedbackModule,\n    FormsModule,\n    MatButtonModule,\n    NewProgressBarModule,\n    SharedPipeModule,\n    SlidesModule,\n    CodeDemoModule\n  ],\n  declarations: [\n    SvgComponent,\n    SvgTogetherComponent,\n    SvgTogetherResultComponent,\n    SvgDemoComponent,\n    SvgPlaygroundComponent,\n    TimerComponent\n  ],\n  exports: [SvgComponent]\n})\nexport class SvgModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/timer/timer.component.css",
    "content": ".timer-running {\n  color: #444;\n  font-size: 3vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/timer/timer.component.html",
    "content": "<div *ngIf=\"time == 0\" (click)=\"reset()\">▶️</div>\n<div *ngIf=\"time > 0\" class=\"timer-running\">{{ time }}️</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/timer/timer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TimerComponent } from './timer.component';\n\ndescribe('TimerComponent', () => {\n  let component: TimerComponent;\n  let fixture: ComponentFixture<TimerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TimerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TimerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg/timer/timer.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-timer',\n  templateUrl: './timer.component.html',\n  styleUrls: ['./timer.component.css']\n})\nexport class TimerComponent implements OnInit {\n  time = 0;\n\n  reset() {\n    this.time = 180;\n  }\n\n  constructor() {\n    window.setInterval(() => {\n      if (this.time > 0) {\n        this.time--;\n      }\n    }, 1000);\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/finish/finish.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/finish/finish.component.html",
    "content": "<svg:g\n  [style.transform]=\"'translate(' + position.x + 'px,' + position.y + 'px)'\"\n>\n  <svg:g\n    style=\"transform-origin: 10px -10px; \"\n    [style.transform]=\"'rotate(90deg)'\"\n  >\n    <path\n      style=\"stroke:white; stroke-width: 10px\"\n      [attr.d]=\"'m 0 2.5 h 40'\"\n    ></path>\n    <path\n      style=\"stroke-dasharray: 5px 5px; stroke:red; stroke-width: 5px\"\n      [attr.d]=\"'m 0 0  h 40'\"\n    ></path>\n    <path\n      style=\"stroke-dasharray: 5px 5px; stroke:red; stroke-width: 5px\"\n      [attr.d]=\"'m 5 5 h 35'\"\n    ></path>\n  </svg:g>\n</svg:g>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/finish/finish.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { FinishComponent } from './finish.component';\n\ndescribe('FinishComponent', () => {\n  let component: FinishComponent;\n  let fixture: ComponentFixture<FinishComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [FinishComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FinishComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/finish/finish.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: '[kirjs-finish]',\n  templateUrl: './finish.component.html',\n  styleUrls: ['./finish.component.css']\n})\nexport class FinishComponent implements OnInit {\n  @Input() position = { x: 0, y: 0 };\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/little-car/little-car.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/little-car/little-car.component.html",
    "content": "<svg:g\n  style=\"transition: 1.5s\"\n  [style.transform]=\"'translate(' + position.x + 'px, ' + position.y + 'px)'\"\n>\n  <svg:g [style.transform]=\"'translate(-13px, -10px)'\">\n    <svg:g\n      style=\" transform-origin: 13px 15px\"\n      [style.transform]=\"'rotate(' + position.angle + 'deg)'\"\n    >\n      <g style=\"transform: scale(0.05)\">\n        <path\n          [attr.fill]=\"darkColor\"\n          d=\"M324 366l74-29a17 17 0 0 0 10-15v-22l-85 34v34zm-136 0V332l-85-34v22a17 17 0 0 0 10 15l74 29z\"\n        ></path>\n        <path\n          [attr.fill]=\"lightColor\"\n          d=\"M193 484l29 12a85 85 0 0 0 67 0l29-12c33-14 54-48 51-85l-11-142 12-146c2-34-15-67-46-83l-6-3a137 137 0 0 0-122 0l-6 3c-31 15-49 48-46 83l12 146-11 142c-3 36 17 70 51 85z\"\n        ></path>\n        <path\n          [attr.fill]=\"darkColor\"\n          d=\"M142 391c48 63 129 91 206 71a85 85 0 0 1-29 21l-29 12a85 85 0 0 1-67 0l-29-12c-33-14-54-48-51-85l.596-7z\"\n        ></path>\n        <path\n          fill=\"#23aec8\"\n          d=\"M322 365l2-1a17 17 0 0 0 7-15l-7-74H187l-7 74a17 17 0 0 0 7 15l2 1c40 26 92 26 132 0z\"\n        ></path>\n        <path\n          fill=\"#1967a3\"\n          d=\"M320 365c-39 25-91 25-130-.785l-2-1a17 17 0 0 1-7-15l5-57a196 196 0 0 0 134 75z\"\n        ></path>\n        <path\n          fill=\"#23aec8\"\n          d=\"M324 153H187l-6-39a17 17 0 0 1 8-17l16-9a102 102 0 0 1 99 0l16 9a17 17 0 0 1 8 17l-6 39z\"\n        ></path>\n        <path\n          fill=\"#1967a3\"\n          d=\"M189 96l8-4a280 280 0 0 0 117 61H187l-6-39a17 17 0 0 1 8-17z\"\n        ></path>\n        <path\n          fill=\"#555160\"\n          d=\"M339 405l-34 51-14-9 34-51zm-119 41l-14 9-34-51 14-9z\"\n        ></path>\n        <path\n          d=\"M332 264H180l-8 82a25 25 0 0 0 11 23l2 1c42 28 98 28 141 0l2-1a25 25 0 0 0 11-23l-8-82zm-12 92l-2 1c-37 24-85 24-122 0l-2-1a8 8 0 0 1-3-7l6-67H316l6 67a8 8 0 0 1-3 7zM180 162h151l7-46a25 25 0 0 0-12-26l-16-9a110 110 0 0 0-107 0l-16 9a25 25 0 0 0-12 26l7 46zm13-58l16-9a93 93 0 0 1 91 0l16 9a8 8 0 0 1 4 8l-5 32H194l-5-32a8 8 0 0 1 4-8zm26 343l-14 9-34-51 14-9zm119-41l-34 51-14-9 34-51z\"\n        ></path>\n      </g>\n    </svg:g>\n  </svg:g>\n</svg:g>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/little-car/little-car.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LittleCarComponent } from './little-car.component';\n\ndescribe('LittleCarComponent', () => {\n  let component: LittleCarComponent;\n  let fixture: ComponentFixture<LittleCarComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [LittleCarComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LittleCarComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/little-car/little-car.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: '[kirjs-little-car]',\n  templateUrl: './little-car.component.html',\n  styleUrls: ['./little-car.component.css']\n})\nexport class LittleCarComponent {\n  @Input() position = { x: 0, y: 0, angle: 0 };\n  lightColor = '#ffbc05';\n  darkColor = '#e38100';\n\n  @Input()\n  set color(color: string) {\n    this.lightColor = color;\n    this.darkColor = '#444';\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/player/player.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/player/player.component.html",
    "content": "<svg:path\n  #guess\n  style=\"stroke-width: 2px; fill:transparent;\"\n  [attr.d]=\"d\"\n  [style.stroke]=\"color\"\n></svg:path>\n<svg:g kirjs-little-car [color]=\"color\" [position]=\"carPosition\"></svg:g>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/player/player.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PlayerComponent } from './player.component';\n\ndescribe('PlayerComponent', () => {\n  let component: PlayerComponent;\n  let fixture: ComponentFixture<PlayerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [PlayerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PlayerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/player/player.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: '[kirjs-player]',\n  templateUrl: './player.component.html',\n  styleUrls: ['./player.component.css']\n})\nexport class PlayerComponent implements OnInit, AfterViewInit, OnChanges {\n  @ViewChild('guess', { static: true }) guess: ElementRef;\n  @Input() path;\n  @Input() d = '';\n  @Input() color = '#ffffff';\n  @Output() scoreChanged = new EventEmitter<number>();\n  points = [];\n  carPosition = { x: 50, y: 50, angle: 0 };\n  pathLength = 0;\n  startPosition = { x: 0, y: 0 };\n  trackWidth = 20;\n  score = 0;\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.d) {\n      this.calculateScore();\n    }\n  }\n\n  calculateScore() {\n    requestAnimationFrame(() => {\n      this.calculateCarPosition();\n      this.score = 0;\n      const guess = this.guess.nativeElement;\n\n      for (let i = 0; i < this.points.length; i++) {\n        const point = this.points[i];\n\n        const { distance } = closestPoint(guess, point);\n\n        if (distance < this.trackWidth) {\n          this.score++;\n        } else {\n          this.pathLength = ((i - 3) / 100) * this.path.getTotalLength();\n          this.scoreChanged.emit(this.score);\n          return;\n        }\n      }\n      this.scoreChanged.emit(this.score);\n    });\n  }\n\n  ngAfterViewInit() {\n    requestAnimationFrame(() => {\n      const path = this.path;\n      const l = path.getTotalLength();\n\n      for (let i = 0; i < l; i += l / 100) {\n        this.points.push(path.getPointAtLength(i));\n      }\n\n      this.startPosition = path.getPointAtLength(0);\n    });\n  }\n\n  calculateCarPosition() {\n    const guess = this.guess.nativeElement;\n    const totalLength = guess.getTotalLength();\n    this.carPosition = guess.getPointAtLength(totalLength);\n    if (totalLength > 1) {\n      const carPosition = guess.getPointAtLength(totalLength - 1);\n      const dx = this.carPosition.x - carPosition.x;\n      const dy = this.carPosition.y - carPosition.y;\n      this.carPosition.angle = (Math.atan2(-dx, dy) * 180) / Math.PI;\n    }\n  }\n\n  ngOnInit() {}\n}\n\nfunction closestPoint(pathNode, point) {\n  const pathLength = pathNode.getTotalLength();\n  let precision = 8,\n    best,\n    bestLength,\n    bestDistance = Infinity;\n\n  // linear scan for coarse approximation\n  for (\n    let scan, scanLength = 0, scanDistance;\n    scanLength <= pathLength;\n    scanLength += precision\n  ) {\n    if (\n      (scanDistance = distance2(\n        (scan = pathNode.getPointAtLength(scanLength))\n      )) < bestDistance\n    ) {\n      (best = scan), (bestLength = scanLength), (bestDistance = scanDistance);\n    }\n  }\n\n  // binary search for precise estimate\n  precision /= 2;\n  while (precision > 0.5) {\n    let before, after, beforeLength, afterLength, beforeDistance, afterDistance;\n    if (\n      (beforeLength = bestLength - precision) >= 0 &&\n      (beforeDistance = distance2(\n        (before = pathNode.getPointAtLength(beforeLength))\n      )) < bestDistance\n    ) {\n      (best = before),\n        (bestLength = beforeLength),\n        (bestDistance = beforeDistance);\n    } else if (\n      (afterLength = bestLength + precision) <= pathLength &&\n      (afterDistance = distance2(\n        (after = pathNode.getPointAtLength(afterLength))\n      )) < bestDistance\n    ) {\n      (best = after),\n        (bestLength = afterLength),\n        (bestDistance = afterDistance);\n    } else {\n      precision /= 2;\n    }\n  }\n\n  best = [best.x, best.y];\n  best.distance = Math.sqrt(bestDistance);\n  return best;\n\n  function distance2(p) {\n    const dx = p.x - point.x,\n      dy = p.y - point.y;\n    return dx * dx + dy * dy;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/race/race.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/race/race.component.html",
    "content": "<div style=\"height: 100%;display: flex;\">\n  <div [style.height]=\"'100%'\" style=\"flex: 1\">\n    <code-demo-editor\n      style=\"width: 100%; height: 500px\"\n      [(ngModel)]=\"d\"\n      (ngModelChange)=\"updateCurrentPlayer()\"\n      [lineNumbers]=\"false\"\n      [fontSize]=\"'30'\"\n    ></code-demo-editor>\n  </div>\n  <div style=\"height: 100%;flex: 1\">\n    <!--https://www.flaticon.com/free-icon/car_809998#term=car%20top&page=1&position=5-->\n\n    <div>\n      <h1>Progress</h1>\n      <div *ngFor=\"let car of cars\" style=\"display: flex;margin-bottom: 10px\">\n        <div style=\"width: 200px\">{{ car.name }}</div>\n        <div style=\"width: 200px; background: #ddd\">\n          <div\n            [style.background]=\"car.color\"\n            style=\"height: 20px; border: 1px #444 solid\"\n            [style.width.%]=\"car.score\"\n          ></div>\n        </div>\n      </div>\n    </div>\n\n    <svg style=\"width: 500px; height: 500px\">\n      <filter id=\"blur\">\n        <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"5\" />\n      </filter>\n\n      <!--Track Border -->\n      <path\n        style=\"stroke: #444;  fill:transparent;\"\n        [attr.d]=\"track\"\n        [style.stroke-width]=\"trackWidth * 2 + 2\"\n      ></path>\n\n      <!--Track -->\n      <path\n        #path\n        style=\"stroke: #666;  fill:transparent;\"\n        [attr.d]=\"track\"\n        [style.stroke-width]=\"trackWidth * 2\"\n      ></path>\n\n      <!--    TODO(kirjs):  [style.stroke-dasharray]=\"this.pathLength + ' 10000'\"-->\n\n      <path\n        style=\"stroke: #999; fill:transparent;\"\n        [style.stroke-width]=\"trackWidth * 2\"\n        [attr.d]=\"track\"\n      ></path>\n      <path\n        style=\"stroke: #ddd; stroke-dasharray: 4px 6px;stroke-width: 2px; fill:transparent;\"\n        [attr.d]=\"track\"\n      ></path>\n\n      <!--<circle r=20 fill=\"#ddd\" *ngFor=\"let point of points\" [attr.cx]=\"point.x\" [attr.cy]=\"point.y\"></circle>-->\n\n      <g\n        *ngFor=\"let car of cars\"\n        kirjs-player\n        [color]=\"car.color\"\n        (scoreChanged)=\"setScore(car.name, $event)\"\n        [path]=\"path\"\n        [d]=\"car.d\"\n      ></g>\n      <g kirjs-finish [position]=\"finishPosition\"></g>\n    </svg>\n    <!--<div style=\"height: 100%;\" [innerHTML]=\"code|safeHtml\"></div>-->\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/race/race.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RaceComponent } from './race.component';\n\ndescribe('RaceComponent', () => {\n  let component: RaceComponent;\n  let fixture: ComponentFixture<RaceComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RaceComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RaceComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/race/race.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  ViewChild\n} from '@angular/core';\n\n@Component({\n  selector: 'kirjs-race',\n  templateUrl: './race.component.html',\n  styleUrls: ['./race.component.css']\n})\nexport class RaceComponent implements AfterViewInit {\n  @Input() code: string;\n  d = 'M50 450 v -5';\n  cars = [\n    {\n      name: 'cheburek',\n      color: '#fd6b00',\n      d: this.d,\n      score: 0\n    },\n    {\n      name: 'banana',\n      color: '#fde200',\n      d: 'M50 450 v 5 l -10 -300',\n      score: 0\n    },\n    {\n      name: 'ololo',\n      color: '#bdfd00',\n      d: 'M50 450 v -5 h 10v-300',\n      score: 0\n    }\n  ];\n  @Input() track: string;\n  @ViewChild('path', { static: false }) path: ElementRef;\n  name = 'cheburek';\n  scores = {};\n  trackWidth = 20;\n  finishPosition = { x: 0, y: 0 };\n\n  updateCurrentPlayer() {\n    const c = this.cars.find(car => car.name === this.name);\n    if (c) {\n      c.d = this.d;\n    }\n  }\n\n  ngAfterViewInit() {\n    const path = this.path.nativeElement;\n    this.finishPosition = path.getPointAtLength(path.getTotalLength());\n  }\n\n  setScore(name: string, score: number) {\n    const c = this.cars.find(car => name === car.name);\n    if (c) {\n      c.score = score;\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/svg-race.component.css",
    "content": ":host ::ng-deep .monaco-editor .view-overlays .current-line {\n  display: none;\n}\n\n:host ::ng-deep .decorationsOverviewRuler {\n  display: none;\n}\n\n:host ::ng-deep .scrollbar.vertical {\n  display: none;\n}\n\n.timer {\n  position: fixed;\n  left: 20px;\n  bottom: 20px;\n}\n\n.btn-bar {\n  line-height: 3vw;\n}\n\n.btn-bar:hover .font-size {\n  display: block;\n  font-size: 4vw;\n}\n\n.btn-bar .font-size {\n  display: none;\n}\n\n.twitter {\n  color: #444;\n  font-size: 3vw;\n  margin: 2vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/svg-race.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting kirjs-tracking>\n  <!--  <codelab-sync-button></codelab-sync-button>-->\n\n  <!--  INTRO -->\n  <div *slide no-padding id=\"intro\">\n    <div class=\"bg intro\">\n      <h2>\n        Angular ❤️ SVG\n        <br />\n        @kirjs\n      </h2>\n    </div>\n  </div>\n\n  <div *slide id=\"playground\">\n    <codelab-sync-playground></codelab-sync-playground>\n  </div>\n\n  <div *slide id=\"sync\">\n    <h1>Anybody will see this info!</h1>\n    <h2 *isPresenting>Only presenter sees this</h2>\n    <h2 *isViewing>Only viewer sees this</h2>\n  </div>\n\n  <div *slide id=\"user\">\n    <h1>We can take user input</h1>\n\n    <div *isViewing>\n      <input [(ngModel)]=\"input\" syncViewerValue=\"name\" />\n    </div>\n    <div *isPresenting syncAllUserValues=\"name\" #values=\"allViewerValues\">\n      <div *ngFor=\"let item of values.values\">\n        {{ item.value }}\n      </div>\n    </div>\n  </div>\n\n  <div *slide id=\"why-svg\">\n    <div *isPresenting>\n      <h1>You are a presenter</h1>\n    </div>\n    <div *isViewing>\n      <h1>You are a viewer</h1>\n    </div>\n\n    <h1>What is SVG?</h1>\n    <ul>\n      <li>Scalable Vector Graphic Format</li>\n      <li>Every object is just an XML tag</li>\n      <li>Also works with CSS</li>\n    </ul>\n  </div>\n\n  <div *slide id=\"tbd\">\n    <h1>LOL</h1>\n    <input [(ngModel)]=\"input2\" syncPresenterValue=\"other\" />\n  </div>\n\n  <div *slide id=\"race\">\n    <h1>Race</h1>\n    <kirjs-race [track]=\"'M50 450 v -400 h 400 v 400 h-300'\"></kirjs-race>\n  </div>\n\n  <div *slide id=\"race2\">\n    <h1>Race</h1>\n    <kirjs-race [track]=\"tracks.advanced\"></kirjs-race>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/svg-race.component.ts",
    "content": "import { Component } from '@angular/core';\nimport {\n  bootstrap,\n  builder,\n  exercise,\n  stylesheet\n} from '../../../../../codelab/src/app/shared/helpers/helpers';\n\ndeclare const require;\n\n@Component({\n  selector: 'kirjs-svg-race',\n  templateUrl: './svg-race.component.html',\n  styleUrls: ['./svg-race.component.css']\n})\nexport class SvgRaceComponent {\n  fontSize = 20;\n\n  tracks = {\n    advanced: `M50 450 Q -50 -60 300 50\nQ 380 75 400 150\nQ 450 350 300 150\nQ 250 50 150 120\nQ 50 250 150 320\nQ 250 420 450 320\n\n`\n  };\n  input = 'hi';\n  input2: any;\n\n  constructor() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/svg-race.module.ts",
    "content": "import { NgModule, Pipe, PipeTransform } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\n\nimport { FeedbackModule } from '@codelab/feedback';\nimport { SyncModule } from '@codelab/utils/src/lib/sync/sync.module';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { TimerComponent } from './timer/timer.component';\nimport { RaceComponent } from './race/race.component';\nimport { LittleCarComponent } from './little-car/little-car.component';\nimport { FinishComponent } from './finish/finish.component';\nimport { PlayerComponent } from './player/player.component';\nimport { SvgRaceComponent } from './svg-race.component';\nimport { ButtonsNavBarModule } from '../../../../../codelab/src/app/components/buttons-nav-bar/buttons-nav-bar.module';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(SvgRaceComponent));\n\n@Pipe({ name: 'safeHtml' })\nexport class SafeHtml implements PipeTransform {\n  constructor(private readonly sanitizer: DomSanitizer) {}\n\n  transform(html) {\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n}\n\n@NgModule({\n  imports: [\n    routes,\n    CommonModule,\n    SlidesModule,\n    ButtonsNavBarModule,\n    FeedbackModule,\n    CodeDemoModule,\n    FormsModule,\n    MatButtonModule,\n    SyncModule,\n    ReactiveFormsModule\n  ],\n  declarations: [\n    RaceComponent,\n    SafeHtml,\n    SvgRaceComponent,\n    TimerComponent,\n    LittleCarComponent,\n    FinishComponent,\n    PlayerComponent\n  ],\n  exports: [SvgRaceComponent]\n})\nexport class SvgRaceModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/timer/timer.component.css",
    "content": ".timer-running {\n  color: #444;\n  font-size: 3vw;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/timer/timer.component.html",
    "content": "<div *ngIf=\"time == 0\" (click)=\"reset()\">▶️</div>\n<div *ngIf=\"time > 0\" class=\"timer-running\">{{ time }}️</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/timer/timer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TimerComponent } from './timer.component';\n\ndescribe('TimerComponent', () => {\n  let component: TimerComponent;\n  let fixture: ComponentFixture<TimerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TimerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TimerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/svg-race/timer/timer.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-timer',\n  templateUrl: './timer.component.html',\n  styleUrls: ['./timer.component.css']\n})\nexport class TimerComponent implements OnInit {\n  time = 0;\n\n  reset() {\n    this.time = 180;\n  }\n\n  constructor() {\n    window.setInterval(() => {\n      if (this.time > 0) {\n        this.time--;\n      }\n    }, 1000);\n  }\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/sync/sync.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/sync/sync.component.html",
    "content": "<codelab-sync-playground></codelab-sync-playground>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/sync/sync.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncComponent } from './sync.component';\n\ndescribe('SyncComponent', () => {\n  let component: SyncComponent;\n  let fixture: ComponentFixture<SyncComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/sync/sync.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-sync',\n  templateUrl: './sync.component.html',\n  styleUrls: ['./sync.component.css']\n})\nexport class SyncComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/sync/sync.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { RouterModule } from '@angular/router';\nimport { SyncModule as SyncLibModule } from '@codelab/utils/src/lib/sync/sync.module';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { SyncSessionsComponent } from '@codelab/utils/src/lib/sync/components/sync-sessions/sync-sessions.component';\nimport { SyncComponent } from './sync.component';\n\nconst routes = RouterModule.forChild([\n  { path: 'sessions', component: SyncSessionsComponent },\n  ...SlidesRoutes.get(SyncComponent)\n]);\n\n@NgModule({\n  declarations: [SyncComponent],\n  imports: [\n    CommonModule,\n    SlidesModule,\n    routes,\n    SyncLibModule,\n    AngularFireAuthModule\n  ]\n})\nexport class SyncModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/test/test.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/test/test.component.html",
    "content": "<p>test works!</p>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/test/test.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TestComponent } from './test.component';\n\ndescribe('TestComponent', () => {\n  let component: TestComponent;\n  let fixture: ComponentFixture<TestComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TestComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TestComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/test/test.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'kirjs-test',\n  templateUrl: './test.component.html',\n  styleUrls: ['./test.component.css']\n})\nexport class TestComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/test/test.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { SlidesRoutes } from '@ng360/slides';\nimport { TestComponent } from './test.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(TestComponent));\n\n@NgModule({\n  imports: [CommonModule, routes],\n  declarations: [TestComponent],\n  entryComponents: [TestComponent]\n})\nexport class TestModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/ca.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SingleCellComponent } from './single-cell/single-cell.component';\nimport { SingleGridComponent } from './single-grid/single-grid.component';\n\n@NgModule({\n  declarations: [SingleCellComponent, SingleGridComponent],\n  exports: [SingleCellComponent, SingleGridComponent],\n  imports: [CommonModule]\n})\nexport class CaModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-cell/single-cell.component.css",
    "content": ":host {\n  display: flex;\n  height: 100%;\n  width: 100%;\n  align-items: center;\n  justify-content: space-around;\n}\n\n.cell {\n  width: 10vh;\n  height: 10vh;\n  border: 4px #444 solid;\n  animation: toColor 5s infinite linear, size 5s linear;\n}\n\n@keyframes size {\n  0% {\n    width: 60vh;\n    height: 60vh;\n  }\n  100% {\n    width: 10vh;\n    height: 10vh;\n  }\n}\n\n@keyframes toColor {\n  0% {\n    background: #000;\n  }\n  45% {\n    background: #000;\n  }\n  50% {\n    background: #fff;\n  }\n  95% {\n    background: #fff;\n  }\n  100% {\n    background: #000;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-cell/single-cell.component.html",
    "content": "<div class=\"cell\"></div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-cell/single-cell.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SingleCellComponent } from './single-cell.component';\n\ndescribe('SingleCellComponent', () => {\n  let component: SingleCellComponent;\n  let fixture: ComponentFixture<SingleCellComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SingleCellComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SingleCellComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-cell/single-cell.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'slides-single-cell',\n  templateUrl: './single-cell.component.html',\n  styleUrls: ['./single-cell.component.css']\n})\nexport class SingleCellComponent implements OnInit {\n  @Input() single = true;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-grid/single-grid.component.css",
    "content": ":host {\n  display: flex;\n  height: 100%;\n  width: 100%;\n  align-items: center;\n  justify-content: center;\n}\n\n.cell {\n  width: 10vh;\n  height: 10vh;\n  animation: toColor 4s linear infinite;\n  /*animation: size 15s linear;*/\n}\n\n.row {\n  display: flex;\n}\n\n.central {\n  animation: none;\n  background: #000;\n}\n\n@keyframes size {\n  0% {\n    width: 60vh;\n    height: 60vh;\n  }\n  100% {\n    width: 10vh;\n    height: 10vh;\n  }\n}\n\n@keyframes toColor {\n  0% {\n    background: #000;\n  }\n  45% {\n    background: #000;\n  }\n  50% {\n    background: #fff;\n  }\n  95% {\n    background: #fff;\n  }\n  100% {\n    background: #000;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-grid/single-grid.component.html",
    "content": "<div class=\"grid\">\n  <div class=\"row\" *ngFor=\"let i of f\">\n    <div\n      class=\"cell\"\n      *ngFor=\"let o of f\"\n      [class.central]=\"i === 4 && o === 4\"\n      [style.animation-delay.s]=\"randomDelays[i][o]\"\n    ></div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-grid/single-grid.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SingleGridComponent } from './single-grid.component';\n\ndescribe('SingleGridComponent', () => {\n  let component: SingleGridComponent;\n  let fixture: ComponentFixture<SingleGridComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SingleGridComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SingleGridComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/ca/single-grid/single-grid.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'slides-single-grid',\n  templateUrl: './single-grid.component.html',\n  styleUrls: ['./single-grid.component.css']\n})\nexport class SingleGridComponent implements OnInit {\n  readonly f = [...new Array(9)].map((a, i) => i);\n  readonly randomDelays = this.f.map(a => this.f.map(b => Math.random() * 5));\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/full-screen-runner/full-screen-runner.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/full-screen-runner/full-screen-runner.component.html",
    "content": "<mat-form-field>\n  <input\n    type=\"number\"\n    matInput\n    placeholder=\"Title\"\n    required\n    [(ngModel)]=\"cellSize\"\n    (ngModelChange)=\"prepare()\"\n  />\n</mat-form-field>\n<mat-form-field>\n  <input\n    type=\"number\"\n    matInput\n    placeholder=\"Width\"\n    required\n    [(ngModel)]=\"width\"\n    (ngModelChange)=\"prepare()\"\n  />\n</mat-form-field>\n<mat-form-field>\n  <input\n    type=\"number\"\n    matInput\n    placeholder=\"height\"\n    required\n    [(ngModel)]=\"height\"\n    (ngModelChange)=\"prepare()\"\n  />\n</mat-form-field>\n<mat-form-field>\n  <input\n    type=\"number\"\n    matInput\n    placeholder=\"rowSize\"\n    required\n    [(ngModel)]=\"rowSize\"\n    (ngModelChange)=\"prepare()\"\n  />\n</mat-form-field>\n<mat-form-field>\n  <input\n    type=\"number\"\n    matInput\n    placeholder=\"rule\"\n    required\n    [(ngModel)]=\"rule\"\n    (ngModelChange)=\"prepare()\"\n  />\n</mat-form-field>\n<mat-form-field>\n  <input\n    type=\"number\"\n    matInput\n    placeholder=\"steps\"\n    required\n    [(ngModel)]=\"steps\"\n    (ngModelChange)=\"prepare()\"\n  />\n</mat-form-field>\n\n<span>\n  90, 110, 184, 30\n</span>\n\n<kirjs-rule3 [arrow]=\"true\" [rule]=\"rule\"></kirjs-rule3>\n\n<kirjs-webassembly-runner\n  [width]=\"width\"\n  [height]=\"height\"\n  class=\"runner\"\n  [webAssemblyCode]=\"wat\"\n  [jsCode]=\"js\"\n></kirjs-webassembly-runner>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/full-screen-runner/full-screen-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { FullScreenRunnerComponent } from './full-screen-runner.component';\n\ndescribe('FullScreenRunnerComponent', () => {\n  let component: FullScreenRunnerComponent;\n  let fixture: ComponentFixture<FullScreenRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [FullScreenRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FullScreenRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/full-screen-runner/full-screen-runner.component.ts",
    "content": "import { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { extractExpressionByMatch } from '../utils';\n\n@Component({\n  selector: 'slides-full-screen-runner',\n  templateUrl: './full-screen-runner.component.html',\n  styleUrls: ['./full-screen-runner.component.css']\n})\nexport class FullScreenRunnerComponent implements OnInit, OnChanges {\n  @Input() code: any;\n  cellSize = 10;\n  wat: string;\n  js: string;\n  width = 2000;\n  height = 1800;\n  rowSize = 100;\n  rule = 1;\n  steps = 100;\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  ngOnChanges() {\n    this.prepare();\n  }\n\n  prepare() {\n    const expected = (256 + this.rule)\n      .toString(2)\n      .substr(1)\n      .split('')\n      .map(Number)\n      .reverse()\n      .map(n => (n ? '  $enable' : '  $disable'))\n      .join('\\n');\n\n    this.wat = this.code.wat;\n    this.js = this.code.js;\n    this.js = this.js.replace(/size = \\d+/, 'size = ' + this.cellSize);\n    this.js = this.js.replace(/steps: \\d+/, 'steps: ' + this.steps);\n    this.js = this.js.replace(/rowSize: \\d+/, 'rowSize: ' + this.rowSize);\n    const elem = extractExpressionByMatch(/\\(elem/, this.wat);\n    const newElem = `(elem (i32.const 0)\n  ${expected}\n  )`;\n\n    this.wat = this.wat.replace(elem, newElem);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/full-screen-runner/full-screen-runner.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FullScreenRunnerComponent } from './full-screen-runner.component';\nimport { WebassemblyRunnerModule } from '../webassembly-playground/webassembly-runner/webassembly-runner.module';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { CellularAutomationModule } from '../../cellular-automation/cellular-automation.module';\n\n@NgModule({\n  declarations: [FullScreenRunnerComponent],\n  exports: [FullScreenRunnerComponent],\n  imports: [\n    CommonModule,\n    WebassemblyRunnerModule,\n    MatInputModule,\n    FormsModule,\n    CellularAutomationModule\n  ]\n})\nexport class FullScreenRunnerModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/monaco-wat.ts",
    "content": "/* Copyright 2018 Mozilla Foundation\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the 'Software'), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\ndeclare const monaco;\n\nconst languages = monaco.languages;\n\nconst CompletionItemKind = languages.CompletionItemKind;\nconst CompletionItemInsertTextRule = languages.CompletionItemInsertTextRule;\ntype CompletionItem = typeof languages.CompletionItem;\n\ntype IModel = any;\ntype IPosition = any;\ntype IRichLanguageConfiguration = any;\n\nlet completionItems: CompletionItem[] = null;\n\nexport function getWatCompletionItems() {\n  const keyword = CompletionItemKind.Keyword;\n  if (completionItems) {\n    return completionItems;\n  }\n  return (completionItems = [\n    { label: 'module', documentation: '', kind: keyword, insertText: 'module' },\n\n    {\n      label: 'func',\n      documentation: 'function declaration',\n      kind: keyword,\n      insertText: 'func'\n    },\n    {\n      label: 'param',\n      documentation: 'parameter',\n      kind: keyword,\n      insertText: { value: 'param ${1:identifier} ${2:type}' } as any\n    },\n\n    {\n      label: 'i32',\n      documentation: '32-bit integer',\n      kind: keyword,\n      insertText: 'i32'\n    },\n    {\n      label: 'i64',\n      documentation: '64-bit integer',\n      kind: keyword,\n      insertText: 'i64'\n    },\n    {\n      label: 'f32',\n      documentation: '32-bit floating point',\n      kind: keyword,\n      insertText: 'f32'\n    },\n    {\n      label: 'f64',\n      documentation: '64-bit floating point',\n      kind: keyword,\n      insertText: 'f64'\n    },\n    {\n      label: 'anyfunc',\n      documentation: 'function reference',\n      kind: keyword,\n      insertText: 'anyfunc'\n    },\n\n    {\n      label: 'i32.load8_s',\n      documentation: 'load 1 byte and sign-extend i8 to i32',\n      kind: keyword,\n      insertText: 'i32.load8_s'\n    },\n    {\n      label: 'i32.load8_u',\n      documentation: 'load 1 byte and zero-extend i8 to i32',\n      kind: keyword,\n      insertText: 'i32.load8_u'\n    },\n    {\n      label: 'i32.load16_s',\n      documentation: 'load 2 bytes and sign-extend i16 to i32',\n      kind: keyword,\n      insertText: 'i32.load16_s'\n    },\n    {\n      label: 'i32.load16_u',\n      documentation: 'load 2 bytes and zero-extend i16 to i32',\n      kind: keyword,\n      insertText: 'i32.load16_u'\n    },\n    {\n      label: 'i32.load',\n      documentation: 'load 4 bytes as i32',\n      kind: keyword,\n      insertText: 'i32.load'\n    },\n    {\n      label: 'i64.load8_s',\n      documentation: 'load 1 byte and sign-extend i8 to i64',\n      kind: keyword,\n      insertText: 'i64.load8_s'\n    },\n    {\n      label: 'i64.load8_u',\n      documentation: 'load 1 byte and zero-extend i8 to i64',\n      kind: keyword,\n      insertText: 'i64.load8_u'\n    },\n    {\n      label: 'i64.load16_s',\n      documentation: 'load 2 bytes and sign-extend i16 to i64',\n      kind: keyword,\n      insertText: 'i64.load16_s'\n    },\n    {\n      label: 'i64.load16_u',\n      documentation: 'load 2 bytes and zero-extend i16 to i64',\n      kind: keyword,\n      insertText: 'i64.load16_u'\n    },\n    {\n      label: 'i64.load32_s',\n      documentation: 'load 4 bytes and sign-extend i32 to i64',\n      kind: keyword,\n      insertText: 'i64.load32_s'\n    },\n    {\n      label: 'i64.load32_u',\n      documentation: 'load 4 bytes and zero-extend i32 to i64',\n      kind: keyword,\n      insertText: 'i64.load32_u'\n    },\n    {\n      label: 'i64.load',\n      documentation: 'load 8 bytes as i64',\n      kind: keyword,\n      insertText: 'i64.load'\n    },\n    {\n      label: 'f32.load',\n      documentation: 'load 4 bytes as f32',\n      kind: keyword,\n      insertText: 'f32.load'\n    },\n    {\n      label: 'f64.load',\n      documentation: 'load 8 bytes as f64',\n      kind: keyword,\n      insertText: 'f64.load'\n    },\n\n    {\n      label: 'i32.store8',\n      documentation: 'wrap i32 to i8 and store 1 byte',\n      kind: keyword,\n      insertText: 'i32.store8'\n    },\n    {\n      label: 'i32.store16',\n      documentation: 'wrap i32 to i16 and store 2 bytes',\n      kind: keyword,\n      insertText: 'i32.store16'\n    },\n    {\n      label: 'i32.store',\n      documentation: '(no conversion) store 4 bytes',\n      kind: keyword,\n      insertText: 'i32.store'\n    },\n    {\n      label: 'i64.store8',\n      documentation: 'wrap i64 to i8 and store 1 byte',\n      kind: keyword,\n      insertText: 'i64.store8'\n    },\n    {\n      label: 'i64.store16',\n      documentation: 'wrap i64 to i16 and store 2 bytes',\n      kind: keyword,\n      insertText: 'i64.store16'\n    },\n    {\n      label: 'i64.store32',\n      documentation: 'wrap i64 to i32 and store 4 bytes',\n      kind: keyword,\n      insertText: 'i64.store32'\n    },\n    {\n      label: 'i64.store',\n      documentation: '(no conversion) store 8 bytes',\n      kind: keyword,\n      insertText: 'i64.store'\n    },\n    {\n      label: 'f32.store',\n      documentation: '(no conversion) store 4 bytes',\n      kind: keyword,\n      insertText: 'f32.store'\n    },\n    {\n      label: 'f64.store',\n      documentation: '(no conversion) store 8 bytes',\n      kind: keyword,\n      insertText: 'f64.store'\n    },\n\n    {\n      label: 'get_local',\n      documentation: 'read the current value of a local variable',\n      kind: keyword,\n      insertText: 'get_local'\n    },\n    {\n      label: 'set_local',\n      documentation: 'set the current value of a local variable',\n      kind: keyword,\n      insertText: 'set_local'\n    },\n    {\n      label: 'tee_local',\n      documentation: 'like `set_local`, but also returns the set value',\n      kind: keyword,\n      insertText: 'tee_local'\n    },\n\n    {\n      label: 'get_global',\n      documentation: 'get the current value of a global variable',\n      kind: keyword,\n      insertText: 'get_global'\n    },\n    {\n      label: 'set_global',\n      documentation: 'set the current value of a global variable',\n      kind: keyword,\n      insertText: 'set_global'\n    },\n\n    {\n      label: 'nop',\n      documentation: 'no operation, no effect',\n      kind: keyword,\n      insertText: 'nop'\n    },\n    {\n      label: 'block',\n      documentation:\n        'the beginning of a block construct, a sequence of instructions with a label at the end',\n      kind: keyword,\n      insertText: 'block'\n    },\n    {\n      label: 'loop',\n      documentation:\n        'a block with a label at the beginning which may be used to form loops',\n      kind: keyword,\n      insertText: 'loop'\n    },\n    {\n      label: 'if',\n      documentation:\n        'the beginning of an if construct with an implicit *then* block',\n      kind: keyword,\n      insertText: 'if'\n    },\n    {\n      label: 'else',\n      documentation: 'marks the else block of an if',\n      kind: keyword,\n      insertText: 'else'\n    },\n    {\n      label: 'br',\n      documentation: 'branch to a given label in an enclosing construct',\n      kind: keyword,\n      insertText: 'br'\n    },\n    {\n      label: 'br_if',\n      documentation:\n        'conditionally branch to a given label in an enclosing construct',\n      kind: keyword,\n      insertText: 'br_if'\n    },\n    {\n      label: 'br_table',\n      documentation:\n        'a jump table which jumps to a label in an enclosing construct',\n      kind: keyword,\n      insertText: 'br_table'\n    },\n    {\n      label: 'return',\n      documentation: 'return zero or more values from this function',\n      kind: keyword,\n      insertText: 'return'\n    },\n    {\n      label: 'end',\n      documentation:\n        'an instruction that marks the end of a block, loop, if, or function',\n      kind: keyword,\n      insertText: 'end'\n    },\n\n    {\n      label: 'call',\n      documentation: 'call function directly',\n      kind: keyword,\n      insertText: 'call'\n    },\n    {\n      label: 'call_indirect',\n      documentation: 'call function indirectly',\n      kind: keyword,\n      insertText: 'call_indirect'\n    },\n\n    {\n      label: 'i64.const',\n      documentation: 'produce the value of an i64 immediate',\n      kind: keyword,\n      insertText: { value: 'i64.const ${1:constant}' }\n    },\n    {\n      label: 'i32.const',\n      documentation: 'produce the value of an i32 immediate',\n      kind: keyword,\n      insertText: { value: 'i32.const ${1:constant}' }\n    },\n    {\n      label: 'f32.const',\n      documentation: 'produce the value of an f32 immediate',\n      kind: keyword,\n      insertText: { value: 'f32.const ${1:constant}' }\n    },\n    {\n      label: 'f64.const',\n      documentation: 'produce the value of an f64 immediate',\n      kind: keyword,\n      insertText: { value: 'f64.const ${1:constant}' }\n    },\n\n    {\n      label: 'i32.add',\n      documentation: 'sign-agnostic addition',\n      kind: keyword,\n      insertText: 'i32.add'\n    },\n    {\n      label: 'i32.sub',\n      documentation: 'sign-agnostic subtraction',\n      kind: keyword,\n      insertText: 'i32.sub'\n    },\n    {\n      label: 'i32.mul',\n      documentation: 'sign-agnostic multiplication (lower 32-bits)',\n      kind: keyword,\n      insertText: 'i32.mul'\n    },\n    {\n      label: 'i32.div_s',\n      documentation: 'signed division (result is truncated toward zero)',\n      kind: keyword,\n      insertText: 'i32.div_s'\n    },\n    {\n      label: 'i32.div_u',\n      documentation:\n        'unsigned division (result is [floored](https://en.wikipedia.org/wiki/Floor_and_ceiling_functions))',\n      kind: keyword,\n      insertText: 'i32.div_u'\n    },\n    {\n      label: 'i32.rem_s',\n      documentation: 'signed remainder (result has the sign of the dividend)',\n      kind: keyword,\n      insertText: 'i32.rem_s'\n    },\n    {\n      label: 'i32.rem_u',\n      documentation: 'unsigned remainder',\n      kind: keyword,\n      insertText: 'i32.rem_u'\n    },\n    {\n      label: 'i32.and',\n      documentation: 'sign-agnostic bitwise and',\n      kind: keyword,\n      insertText: 'i32.and'\n    },\n    {\n      label: 'i32.or',\n      documentation: 'sign-agnostic bitwise inclusive or',\n      kind: keyword,\n      insertText: 'i32.or'\n    },\n    {\n      label: 'i32.xor',\n      documentation: 'sign-agnostic bitwise exclusive or',\n      kind: keyword,\n      insertText: 'i32.xor'\n    },\n    {\n      label: 'i32.shl',\n      documentation: 'sign-agnostic shift left',\n      kind: keyword,\n      insertText: 'i32.shl'\n    },\n    {\n      label: 'i32.shr_u',\n      documentation: 'zero-replicating (logical) shift right',\n      kind: keyword,\n      insertText: 'i32.shr_u'\n    },\n    {\n      label: 'i32.shr_s',\n      documentation: 'sign-replicating (arithmetic) shift right',\n      kind: keyword,\n      insertText: 'i32.shr_s'\n    },\n    {\n      label: 'i32.rotl',\n      documentation: 'sign-agnostic rotate left',\n      kind: keyword,\n      insertText: 'i32.rotl'\n    },\n    {\n      label: 'i32.rotr',\n      documentation: 'sign-agnostic rotate right',\n      kind: keyword,\n      insertText: 'i32.rotr'\n    },\n    {\n      label: 'i32.eq',\n      documentation: 'sign-agnostic compare equal',\n      kind: keyword,\n      insertText: 'i32.eq'\n    },\n    {\n      label: 'i32.ne',\n      documentation: 'sign-agnostic compare unequal',\n      kind: keyword,\n      insertText: 'i32.ne'\n    },\n    {\n      label: 'i32.lt_s',\n      documentation: 'signed less than',\n      kind: keyword,\n      insertText: 'i32.lt_s'\n    },\n    {\n      label: 'i32.le_s',\n      documentation: 'signed less than or equal',\n      kind: keyword,\n      insertText: 'i32.le_s'\n    },\n    {\n      label: 'i32.lt_u',\n      documentation: 'unsigned less than',\n      kind: keyword,\n      insertText: 'i32.lt_u'\n    },\n    {\n      label: 'i32.le_u',\n      documentation: 'unsigned less than or equal',\n      kind: keyword,\n      insertText: 'i32.le_u'\n    },\n    {\n      label: 'i32.gt_s',\n      documentation: 'signed greater than',\n      kind: keyword,\n      insertText: 'i32.gt_s'\n    },\n    {\n      label: 'i32.ge_s',\n      documentation: 'signed greater than or equal',\n      kind: keyword,\n      insertText: 'i32.ge_s'\n    },\n    {\n      label: 'i32.gt_u',\n      documentation: 'unsigned greater than',\n      kind: keyword,\n      insertText: 'i32.gt_u'\n    },\n    {\n      label: 'i32.ge_u',\n      documentation: 'unsigned greater than or equal',\n      kind: keyword,\n      insertText: 'i32.ge_u'\n    },\n    {\n      label: 'i32.clz',\n      documentation:\n        'sign-agnostic count leading zero bits (All zero bits are considered leading if the value is zero)',\n      kind: keyword,\n      insertText: 'i32.clz'\n    },\n    {\n      label: 'i32.ctz',\n      documentation:\n        'sign-agnostic count trailing zero bits (All zero bits are considered trailing if the value is zero)',\n      kind: keyword,\n      insertText: 'i32.ctz'\n    },\n    {\n      label: 'i32.popcnt',\n      documentation: 'sign-agnostic count number of one bits',\n      kind: keyword,\n      insertText: 'i32.popcnt'\n    },\n    {\n      label: 'i32.eqz',\n      documentation:\n        'compare equal to zero (return 1 if operand is zero, 0 otherwise)',\n      kind: keyword,\n      insertText: 'i32.eqz'\n    },\n\n    {\n      label: 'f32.add',\n      documentation: 'addition',\n      kind: keyword,\n      insertText: 'f32.add'\n    },\n    {\n      label: 'f32.sub',\n      documentation: 'subtraction',\n      kind: keyword,\n      insertText: 'f32.sub'\n    },\n    {\n      label: 'f32.mul',\n      documentation: 'multiplication',\n      kind: keyword,\n      insertText: 'f32.mul'\n    },\n    {\n      label: 'f32.div',\n      documentation: 'division',\n      kind: keyword,\n      insertText: 'f32.div'\n    },\n    {\n      label: 'f32.abs',\n      documentation: 'absolute value',\n      kind: keyword,\n      insertText: 'f32.abs'\n    },\n    {\n      label: 'f32.neg',\n      documentation: 'negation',\n      kind: keyword,\n      insertText: 'f32.neg'\n    },\n    {\n      label: 'f32.copysign',\n      documentation: 'copysign',\n      kind: keyword,\n      insertText: 'f32.copysign'\n    },\n    {\n      label: 'f32.ceil',\n      documentation: 'ceiling operator',\n      kind: keyword,\n      insertText: 'f32.ceil'\n    },\n    {\n      label: 'f32.floor',\n      documentation: 'floor operator',\n      kind: keyword,\n      insertText: 'f32.floor'\n    },\n    {\n      label: 'f32.trunc',\n      documentation: 'round to nearest integer towards zero',\n      kind: keyword,\n      insertText: 'f32.trunc'\n    },\n    {\n      label: 'f32.nearest',\n      documentation: 'round to nearest integer, ties to even',\n      kind: keyword,\n      insertText: 'f32.nearest'\n    },\n    {\n      label: 'f32.eq',\n      documentation: 'compare ordered and equal',\n      kind: keyword,\n      insertText: 'f32.eq'\n    },\n    {\n      label: 'f32.ne',\n      documentation: 'compare unordered or unequal',\n      kind: keyword,\n      insertText: 'f32.ne'\n    },\n    {\n      label: 'f32.lt',\n      documentation: 'compare ordered and less than',\n      kind: keyword,\n      insertText: 'f32.lt'\n    },\n    {\n      label: 'f32.le',\n      documentation: 'compare ordered and less than or equal',\n      kind: keyword,\n      insertText: 'f32.le'\n    },\n    {\n      label: 'f32.gt',\n      documentation: 'compare ordered and greater than',\n      kind: keyword,\n      insertText: 'f32.gt'\n    },\n    {\n      label: 'f32.ge',\n      documentation: 'compare ordered and greater than or equal',\n      kind: keyword,\n      insertText: 'f32.ge'\n    },\n    {\n      label: 'f32.sqrt',\n      documentation: 'square root',\n      kind: keyword,\n      insertText: 'f32.sqrt'\n    },\n    {\n      label: 'f32.min',\n      documentation:\n        'minimum (binary operator); if either operand is NaN, returns NaN',\n      kind: keyword,\n      insertText: 'f32.min'\n    },\n    {\n      label: 'f32.max',\n      documentation:\n        'maximum (binary operator); if either operand is NaN, returns NaN',\n      kind: keyword,\n      insertText: 'f32.max'\n    },\n\n    {\n      label: 'f64.add',\n      documentation: 'addition',\n      kind: keyword,\n      insertText: 'f64.add'\n    },\n    {\n      label: 'f64.sub',\n      documentation: 'subtraction',\n      kind: keyword,\n      insertText: 'f64.sub'\n    },\n    {\n      label: 'f64.mul',\n      documentation: 'multiplication',\n      kind: keyword,\n      insertText: 'f64.mul'\n    },\n    {\n      label: 'f64.div',\n      documentation: 'division',\n      kind: keyword,\n      insertText: 'f64.div'\n    },\n    {\n      label: 'f64.abs',\n      documentation: 'absolute value',\n      kind: keyword,\n      insertText: 'f64.abs'\n    },\n    {\n      label: 'f64.neg',\n      documentation: 'negation',\n      kind: keyword,\n      insertText: 'f64.neg'\n    },\n    {\n      label: 'f64.copysign',\n      documentation: 'copysign',\n      kind: keyword,\n      insertText: 'f64.copysign'\n    },\n    {\n      label: 'f64.ceil',\n      documentation: 'ceiling operator',\n      kind: keyword,\n      insertText: 'f64.ceil'\n    },\n    {\n      label: 'f64.floor',\n      documentation: 'floor operator',\n      kind: keyword,\n      insertText: 'f64.floor'\n    },\n    {\n      label: 'f64.trunc',\n      documentation: 'round to nearest integer towards zero',\n      kind: keyword,\n      insertText: 'f64.trunc'\n    },\n    {\n      label: 'f64.nearest',\n      documentation: 'round to nearest integer, ties to even',\n      kind: keyword,\n      insertText: 'f64.nearest'\n    },\n    {\n      label: 'f64.eq',\n      documentation: 'compare ordered and equal',\n      kind: keyword,\n      insertText: 'f64.eq'\n    },\n    {\n      label: 'f64.ne',\n      documentation: 'compare unordered or unequal',\n      kind: keyword,\n      insertText: 'f64.ne'\n    },\n    {\n      label: 'f64.lt',\n      documentation: 'compare ordered and less than',\n      kind: keyword,\n      insertText: 'f64.lt'\n    },\n    {\n      label: 'f64.le',\n      documentation: 'compare ordered and less than or equal',\n      kind: keyword,\n      insertText: 'f64.le'\n    },\n    {\n      label: 'f64.gt',\n      documentation: 'compare ordered and greater than',\n      kind: keyword,\n      insertText: 'f64.gt'\n    },\n    {\n      label: 'f64.ge',\n      documentation: 'compare ordered and greater than or equal',\n      kind: keyword,\n      insertText: 'f64.ge'\n    },\n    {\n      label: 'f64.sqrt',\n      documentation: 'square root',\n      kind: keyword,\n      insertText: 'f64.sqrt'\n    },\n    {\n      label: 'f64.min',\n      documentation:\n        'minimum (binary operator); if either operand is NaN, returns NaN',\n      kind: keyword,\n      insertText: 'f64.min'\n    },\n    {\n      label: 'f64.max',\n      documentation:\n        'maximum (binary operator); if either operand is NaN, returns NaN',\n      kind: keyword,\n      insertText: 'f64.max'\n    },\n\n    {\n      label: 'i32.wrap/i64',\n      documentation: 'wrap a 64-bit integer to a 32-bit integer',\n      kind: keyword,\n      insertText: 'i32.wrap/i64'\n    },\n    {\n      label: 'i32.trunc_s/f32',\n      documentation: 'truncate a 32-bit float to a signed 32-bit integer',\n      kind: keyword,\n      insertText: 'i32.trunc_s/f32'\n    },\n    {\n      label: 'i32.trunc_s/f64',\n      documentation: 'truncate a 64-bit float to a signed 32-bit integer',\n      kind: keyword,\n      insertText: 'i32.trunc_s/f64'\n    },\n    {\n      label: 'i32.trunc_u/f32',\n      documentation: 'truncate a 32-bit float to an unsigned 32-bit integer',\n      kind: keyword,\n      insertText: 'i32.trunc_u/f32'\n    },\n    {\n      label: 'i32.trunc_u/f64',\n      documentation: 'truncate a 64-bit float to an unsigned 32-bit integer',\n      kind: keyword,\n      insertText: 'i32.trunc_u/f64'\n    },\n    {\n      label: 'i32.reinterpret/f32',\n      documentation:\n        'reinterpret the bits of a 32-bit float as a 32-bit integer',\n      kind: keyword,\n      insertText: 'i32.reinterpret/f32'\n    },\n    {\n      label: 'i64.extend_s/i32',\n      documentation: 'extend a signed 32-bit integer to a 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.extend_s/i32'\n    },\n    {\n      label: 'i64.extend_u/i32',\n      documentation: 'extend an unsigned 32-bit integer to a 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.extend_u/i32'\n    },\n    {\n      label: 'i64.trunc_s/f32',\n      documentation: 'truncate a 32-bit float to a signed 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.trunc_s/f32'\n    },\n    {\n      label: 'i64.trunc_s/f64',\n      documentation: 'truncate a 64-bit float to a signed 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.trunc_s/f64'\n    },\n    {\n      label: 'i64.trunc_u/f32',\n      documentation: 'truncate a 32-bit float to an unsigned 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.trunc_u/f32'\n    },\n    {\n      label: 'i64.trunc_u/f64',\n      documentation: 'truncate a 64-bit float to an unsigned 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.trunc_u/f64'\n    },\n    {\n      label: 'i64.reinterpret/f64',\n      documentation:\n        'reinterpret the bits of a 64-bit float as a 64-bit integer',\n      kind: keyword,\n      insertText: 'i64.reinterpret/f64'\n    },\n    {\n      label: 'f32.demote/f64',\n      documentation: 'demote a 64-bit float to a 32-bit float',\n      kind: keyword,\n      insertText: 'f32.demote/f64'\n    },\n    {\n      label: 'f32.convert_s/i32',\n      documentation: 'convert a signed 32-bit integer to a 32-bit float',\n      kind: keyword,\n      insertText: 'f32.convert_s/i32'\n    },\n    {\n      label: 'f32.convert_s/i64',\n      documentation: 'convert a signed 64-bit integer to a 32-bit float',\n      kind: keyword,\n      insertText: 'f32.convert_s/i64'\n    },\n    {\n      label: 'f32.convert_u/i32',\n      documentation: 'convert an unsigned 32-bit integer to a 32-bit float',\n      kind: keyword,\n      insertText: 'f32.convert_u/i32'\n    },\n    {\n      label: 'f32.convert_u/i64',\n      documentation: 'convert an unsigned 64-bit integer to a 32-bit float',\n      kind: keyword,\n      insertText: 'f32.convert_u/i64'\n    },\n    {\n      label: 'f32.reinterpret/i32',\n      documentation:\n        'reinterpret the bits of a 32-bit integer as a 32-bit float',\n      kind: keyword,\n      insertText: 'f32.reinterpret/i32'\n    },\n    {\n      label: 'f64.promote/f32',\n      documentation: 'promote a 32-bit float to a 64-bit float',\n      kind: keyword,\n      insertText: 'f64.promote/f32'\n    },\n    {\n      label: 'f64.convert_s/i32',\n      documentation: 'convert a signed 32-bit integer to a 64-bit float',\n      kind: keyword,\n      insertText: 'f64.convert_s/i32'\n    },\n    {\n      label: 'f64.convert_s/i64',\n      documentation: 'convert a signed 64-bit integer to a 64-bit float',\n      kind: keyword,\n      insertText: 'f64.convert_s/i64'\n    },\n    {\n      label: 'f64.convert_u/i32',\n      documentation: 'convert an unsigned 32-bit integer to a 64-bit float',\n      kind: keyword,\n      insertText: 'f64.convert_u/i32'\n    },\n    {\n      label: 'f64.convert_u/i64',\n      documentation: 'convert an unsigned 64-bit integer to a 64-bit float',\n      kind: keyword,\n      insertText: 'f64.convert_u/i64'\n    },\n    {\n      label: 'f64.reinterpret/i64',\n      documentation:\n        'reinterpret the bits of a 64-bit integer as a 64-bit float',\n      kind: keyword,\n      insertText: 'f64.reinterpret/i64'\n    },\n\n    {\n      label: 'current_memory',\n      documentation: 'current memory size in 64k pages',\n      kind: keyword,\n      insertText: 'current_memory'\n    },\n    {\n      label: 'grow_memory',\n      documentation: 'grow memory size by the specified amount of 64k pages',\n      kind: keyword,\n      insertText: 'grow_memory'\n    }\n  ]);\n}\n\nconst LanguageConfiguration: IRichLanguageConfiguration = {\n  // the default separators except `@$`\n  wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\'\\,\\.\\<\\>\\/\\?\\s]+)/g,\n  comments: {\n    lineComment: ';;'\n  },\n  brackets: [\n    ['{', '}'],\n    ['[', ']'],\n    ['(', ')']\n  ],\n  autoClosingPairs: [\n    { open: '{', close: '}' },\n    { open: '[', close: ']' },\n    { open: '(', close: ')' },\n    { open: \"'\", close: \"'\" },\n    { open: \"'\", close: \"'\" }\n  ],\n  surroundingPairs: [\n    { open: '{', close: '}' },\n    { open: '[', close: ']' },\n    { open: '(', close: ')' },\n    { open: \"'\", close: \"'\" },\n    { open: \"'\", close: \"'\" },\n    { open: '<', close: '>' }\n  ]\n};\n\nconst MonarchDefinitions = {\n  // Set defaultToken to invalid to see what you do not tokenize yet\n  // defaultToken: 'invalid',\n\n  keywords: [\n    'module',\n    'table',\n    'memory',\n    'export',\n    'import',\n    'func',\n    'result',\n    'offset',\n    'anyfunc',\n    'type',\n    'data',\n    'start',\n    'element',\n    'global',\n    'local',\n    'mut',\n    'param',\n    'result',\n\n    'i32.load8_s',\n    'i32.load8_u',\n    'i32.load16_s',\n    'i32.load16_u',\n    'i32.load',\n    'i64.load8_s',\n    'i64.load8_u',\n    'i64.load16_s',\n    'i64.load16_u',\n    'i64.load32_s',\n    'i64.load32_u',\n    'i64.load',\n    'f32.load',\n    'f64.load',\n\n    'i32.store8',\n    'i32.store16',\n    'i32.store',\n    'i64.store8',\n    'i64.store16',\n    'i64.store32',\n    'i64.store',\n    'f32.store',\n    'f64.store',\n\n    'i32.const',\n    'i64.const',\n    'f32.const',\n    'f64.const',\n\n    'i32.add',\n    'i32.sub',\n    'i32.mul',\n    'i32.div_s',\n    'i32.div_u',\n    'i32.rem_s',\n    'i32.rem_u',\n    'i32.and',\n    'i32.or',\n    'i32.xor',\n    'i32.shl',\n    'i32.shr_u',\n    'i32.shr_s',\n    'i32.rotl',\n    'i32.rotr',\n    'i32.eq',\n    'i32.ne',\n    'i32.lt_s',\n    'i32.le_s',\n    'i32.lt_u',\n    'i32.le_u',\n    'i32.gt_s',\n    'i32.ge_s',\n    'i32.gt_u',\n    'i32.ge_u',\n    'i32.clz',\n    'i32.ctz',\n    'i32.popcnt',\n    'i32.eqz',\n\n    'f32.add',\n    'f32.sub',\n    'f32.mul',\n    'f32.div',\n    'f32.abs',\n    'f32.neg',\n    'f32.copysign',\n    'f32.ceil',\n    'f32.floor',\n    'f32.trunc',\n    'f32.nearest',\n    'f32.eq',\n    'f32.ne',\n    'f32.lt',\n    'f32.le',\n    'f32.gt',\n    'f32.ge',\n    'f32.sqrt',\n    'f32.min',\n    'f32.max',\n\n    'f64.add',\n    'f64.sub',\n    'f64.mul',\n    'f64.div',\n    'f64.abs',\n    'f64.neg',\n    'f64.copysign',\n    'f64.ceil',\n    'f64.floor',\n    'f64.trunc',\n    'f64.nearest',\n    'f64.eq',\n    'f64.ne',\n    'f64.lt',\n    'f64.le',\n    'f64.gt',\n    'f64.ge',\n    'f64.sqrt',\n    'f64.min',\n    'f64.max',\n\n    'i32.wrap/i64',\n    'i32.trunc_s/f32',\n    'i32.trunc_s/f64',\n    'i32.trunc_u/f32',\n    'i32.trunc_u/f64',\n    'i32.reinterpret/f32',\n    'i64.extend_s/i32',\n    'i64.extend_u/i32',\n    'i64.trunc_s/f32',\n    'i64.trunc_s/f64',\n    'i64.trunc_u/f32',\n    'i64.trunc_u/f64',\n    'i64.reinterpret/f64',\n    'f32.demote/f64',\n    'f32.convert_s/i32',\n    'f32.convert_s/i64',\n    'f32.convert_u/i32',\n    'f32.convert_u/i64',\n    'f32.reinterpret/i32',\n    'f64.promote/f32',\n    'f64.convert_s/i32',\n    'f64.convert_s/i64',\n    'f64.convert_u/i32',\n    'f64.convert_u/i64',\n    'f64.reinterpret/i64',\n\n    'local.get',\n    'local.set',\n    'local.tee',\n    'global.get',\n    'global.set',\n    'global.tee',\n    'get_local',\n    'set_local',\n    'tee_local',\n    'get_global',\n    'set_global',\n\n    'current_memory',\n    'grow_memory'\n  ],\n\n  typeKeywords: ['i32', 'i64', 'f32', 'f64', 'anyfunc'],\n\n  operators: [] as any,\n\n  brackets: [\n    ['(', ')', 'bracket.parenthesis'],\n    ['{', '}', 'bracket.curly'],\n    ['[', ']', 'bracket.square']\n  ],\n\n  // we include these common regular expressions\n  symbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\n  // C# style strings\n  escapes: /\\\\(?:[abfnrtv\\\\'']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n  // The main tokenizer for our languages\n  tokenizer: {\n    root: [\n      // identifiers and keywords\n      [\n        /[a-z_$][\\w$\\.]*/,\n        {\n          cases: {\n            '@keywords': 'keyword',\n            '@typeKeywords': 'type',\n            '@default': 'type.identifier'\n          }\n        }\n      ],\n\n      // numbers\n      [/\\d+/, 'number'],\n\n      // strings\n      [/'/, { token: 'string.quote', bracket: '@open', next: '@string' }],\n\n      [/[{}()\\[\\]]/, '@brackets']\n    ] as any,\n\n    comment: [\n      [/[^\\/*]+/, 'comment'],\n      [/\\/\\*/, 'comment', '@push'], // nested comment\n      ['\\\\*/', 'comment', '@pop'],\n      [/[\\/*]/, 'comment'],\n      [/;;/, 'comment']\n    ],\n\n    string: [\n      [/[^\\\\']+/, 'string'],\n      [/@escapes/, 'string.escape'],\n      [/\\\\./, 'string.escape.invalid'],\n      [/'/, { token: 'string.quote', bracket: '@close', next: '@pop' }]\n    ],\n\n    whitespace: [\n      [/[ \\t\\r\\n]+/, 'white'],\n      [/\\/\\*/, 'comment', '@comment'],\n      [/\\/\\/.*$/, 'comment'],\n      [/;;/, 'comment']\n    ]\n  }\n};\n\nexport function watWordAt(s: string, i: number) {\n  const l = s.slice(0, i + 1).search(/[A-Za-z0-9_\\.\\/]+$/);\n  const r = s.slice(i).search(/[^A-Za-z0-9_\\.\\/]/);\n  if (r < 0) {\n    return { index: l, word: s.slice(l) };\n  }\n  return { index: l, word: s.slice(l, r + i) };\n}\n\nexport const Wat = {\n  MonarchDefinitions,\n  LanguageConfiguration,\n  CompletionItemProvider: {\n    provideCompletionItems: function(model: IModel, position: IPosition) {\n      return getWatCompletionItems();\n    }\n  },\n  HoverProvider: {\n    provideHover: function(model: IModel, position: IPosition) {\n      const lineContent = model.getLineContent(position.lineNumber);\n      const { index, word } = watWordAt(lineContent, position.column - 1);\n      if (!word) {\n        return;\n      }\n      const watCompletionItems = getWatCompletionItems() as any;\n      const predicate = x => x.label === word;\n      const item = watCompletionItems.find(predicate);\n      if (!item) {\n        return;\n      }\n      return {\n        range: new monaco.Range(\n          position.lineNumber,\n          index + 1,\n          position.lineNumber,\n          index + 1 + word.length\n        ),\n        contents: [\n          '**DETAILS**',\n          { language: 'html', value: item.documentation }\n        ]\n      };\n    }\n  }\n};\n\nmonaco.languages.onLanguage('wat', () => {\n  monaco.languages.setMonarchTokensProvider(\n    'wat',\n    Wat.MonarchDefinitions as any\n  );\n  monaco.languages.setLanguageConfiguration('wat', Wat.LanguageConfiguration);\n  monaco.languages.registerCompletionItemProvider(\n    'wat',\n    Wat.CompletionItemProvider\n  );\n  monaco.languages.registerHoverProvider('wat', Wat.HoverProvider as any);\n});\nmonaco.languages.register({\n  id: 'wat'\n});\n\nmonaco.languages.registerCompletionItemProvider(\n  'wat',\n  {\n    provideCompletionItems: function() {\n      return {\n        suggestions: [\n          {\n            label: 'const',\n            kind: monaco.languages.CompletionItemKind.Function,\n            documentation: 'i32',\n            insertText: 'i32.const ${1:value}',\n            insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet\n          },\n          {\n            label: 'function',\n            kind: monaco.languages.CompletionItemKind.Keyword,\n            documentation: 'i32',\n            insertText: '(func $${1:name} ${2:params} (result i32)\\n  ${3}\\n)',\n            insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet\n          },\n          {\n            label: 'add',\n            kind: monaco.languages.CompletionItemKind.Keyword,\n            documentation: 'i32',\n            insertText: 'i32.add',\n            insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet\n          },\n          {\n            label: 'param',\n            kind: monaco.languages.CompletionItemKind.Keyword,\n            documentation: 'i32',\n            insertText: '(param $${1:name} i32) ',\n            insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet\n          },\n          {\n            label: 'local.get',\n            kind: monaco.languages.CompletionItemKind.Keyword,\n            documentation: 'i32',\n            insertText: 'local.get $${1:name}',\n            insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet\n          },\n          {\n            label: 'global.get',\n            kind: monaco.languages.CompletionItemKind.Keyword,\n            documentation: 'i32',\n            insertText: 'global.get $${1:name}',\n            insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet\n          }\n        ]\n      };\n    }\n  },\n  '('\n);\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/samples/answer.wat",
    "content": "(module\n  (import \"config\" \"rowSize\" (global $rowSize i32))\n  (memory 1)\n  (export \"memory\" (memory 0))\n\n  (table 8 anyfunc)\n\n  (func $enable (result i32)\n    (i32.const 1)\n  )\n\n  (func $disable (result i32)\n    (i32.const 0)\n  )\n\n  (elem (i32.const 0)\n    $enable ;; 000\n    $enable ;; 001\n    $enable ;; 010\n    $enable ;; 011\n    $enable ;; 100\n    $enable ;; 101\n    $enable ;; 110\n    $enable ;; 111\n  )\n\n  (type $return_i32 (func (result i32)))\n\n\n  (global $step (export \"step\") (mut i32) (i32.const 1))\n\n\n\n\n  (func $rotate (param $x i32) (result i32)\n    local.get $x\n    global.get $rowSize\n    i32.add\n\n    global.get $rowSize\n\n    i32.rem_s\n  )\n\n  (func $getIndex (param $x i32) (param $y i32) (result i32)\n      local.get $x\n\n      local.get $y\n      global.get $rowSize\n      i32.mul\n\n      i32.add\n  )\n\n  (func $loadCell (param $x i32) (param $y i32) (result i32)\n        (local.get $x)\n        call $rotate\n\n        (local.get $y)\n\n        call $getIndex\n        i32.const 4\n        i32.mul\n\n        i32.load\n    )\n\n  (func $storeCell (param $x i32) (param $value i32)\n         local.get $x\n         global.get $step\n         call $getIndex\n\n         i32.const 4\n         i32.mul\n\n         local.get $value\n\n         i32.store\n  )\n\n\n\n  (func $shift (param $a i32) (param $b i32) (param $c i32)  (result i32)\n    local.get $a\n    (i32.const 4)\n    i32.mul\n\n    local.get $b\n    (i32.const 2)\n    i32.mul\n\n    local.get $c\n\n    i32.add\n    i32.add\n  )\n\n\n\n  (func $loadPreviousCell (param $x i32) (result i32)\n    local.get $x\n\n    global.get $step\n    (i32.const 1)\n    i32.sub\n\n    call $loadCell\n  )\n\n\n\n  (func $getCellScore (param $x i32)  (result i32)\n    local.get $x\n    i32.const 1\n    i32.sub\n    call $loadPreviousCell\n\n    local.get $x\n    call $loadPreviousCell\n\n    local.get $x\n    i32.const 1\n    i32.add\n    call $loadPreviousCell\n\n    call $shift\n  )\n\n\n\n  (func $evolveCell (param $x i32)\n    local.get $x\n\n\n    local.get $x\n    call $getCellScore\n    call_indirect (type $return_i32)\n\n    call $storeCell\n  )\n\n\n\n  (func $evolveRow (local $i i32)\n    block\n    loop\n      local.get $i\n      call $evolveCell\n\n      local.get $i\n      (i32.const 1)\n      i32.add\n      local.tee $i\n\n      global.get $rowSize\n      i32.eq\n\n      br_if 1\n      br 0\n    end\n    end\n  )\n\n\n\n  (func $evolve (export \"evolve\") (param $steps i32) (local $i i32)\n   block\n    loop\n      call $evolveRow\n      global.get $step\n      i32.const 1\n      i32.add\n      global.set $step\n\n      local.get $i\n      (i32.const 1)\n      i32.add\n      tee_local $i\n\n\n      local.get $steps\n      i32.eq\n\n      br_if 1\n      br 0\n    end\n    end\n\n  )\n)\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/samples/base.js",
    "content": "const size = 80;\n\nconst config = {\n  rowSize: 5,\n  steps: 100,\n  log: console.log\n};\n\nfunction drawOnCanvas(canvas, arr) {\n  const context = canvas.getContext('2d');\n\n  for (let i = 0; i < arr.length; i++) {\n    const x = i % config.rowSize;\n    const y = Math.floor(i / config.rowSize);\n\n    context.fillStyle = arr[i] ? 'lime' : '#444';\n\n    context.fillRect(x * size, y * size, size - 1, size - 1);\n  }\n}\n\nasync function run(code, canvas) {\n  const result = await WebAssembly.instantiate(code, { config });\n\n  let memory = new Uint32Array(result.instance.exports.memory.buffer);\n  memory[Math.round(config.rowSize / 2)] = 1;\n\n  const r = result.instance.exports.evolve(config.steps);\n  drawOnCanvas(canvas, memory);\n  return r;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/samples/base.wat",
    "content": "(module\n\n)\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/samples/old.wat",
    "content": " (module\n (import \"config\" \"rowSize\" (global $rowSize i32))\n (import \"config\" \"log\" (func $log (param i32)))\n (type $return_i32 (func (result i32)))\n (memory 1)\n (export \"memory\" (memory 0))\n\n (table 8 funcref)\n (elem (i32.const 0)\n    $remove ;; 000\n    $remove ;; 001\n    $create ;; 010\n    $create ;; 011\n    $create ;; 100\n    $create ;; 101\n    $remove ;; 110\n    $remove ;; 111\n )\n\n  (func $create (result i32)\n    i32.const 1)\n  (func $remove (result i32)\n    i32.const 0)\n\n  (global $step (export \"step\") (mut i32) (i32.const 1))\n\n  (func $getIndex (param $x i32) (param $y i32) (result i32)\n    (i32.mul\n        (i32.const 4)\n        (i32.add\n            (local.get $x)\n            (i32.mul\n                (local.get $y)\n                (global.get $rowSize))))\n  )\n\n  (func $getCurrentIndex (param $x i32) (result i32)\n    (call $getIndex (local.get $x) (global.get $step))\n  )\n\n (func $getPreviousIndex (param $x i32) (result i32)\n    (call $getIndex\n        (local.get $x)\n        (i32.sub\n            (global.get $step)\n            (i32.const 1)))\n  )\n\n  (func $rotate (param $x i32) (result i32)\n    (i32.rem_s\n        (i32.add\n            (global.get $rowSize)\n            (local.get $x))\n        (global.get $rowSize)\n    )\n  )\n\n  (func $shift (param $a i32) (param $b i32) (param $c i32) (result i32)\n       (local.get $c)\n\n       (local.get $b)\n       (i32.const 1)\n       i32.shl\n       i32.add\n\n       (local.get $a)\n       (i32.const 2)\n       i32.shl\n       i32.add\n  )\n\n  (func $calcNextState (param $x i32) (result i32)\n    local.get $x\n    call $getCellScore\n    call_indirect (type $return_i32)\n  )\n\n  (func $getCellScore (param $x i32) (result i32) (local $a i32)\n    local.get $x\n    i32.const 1\n    i32.sub\n    call $rotate\n    call $getPreviousIndex\n    i32.load\n\n\n    local.get $x\n    call $rotate\n    call $getPreviousIndex\n    i32.load\n\n    local.get $x\n    i32.const 1\n    i32.add\n    call $rotate\n    call $getPreviousIndex\n    i32.load\n\n    call $shift\n  )\n\n\n\n  (func $evolve (param $steps i32) (local $index i32)\n    block\n    loop\n          (call $evolveSingle)\n\n          ;; $index++\n          local.get $index\n          i32.const 1\n          i32.add\n          local.tee $index\n\n          (br_if 1 (i32.eq (local.get $steps) (local.get $index)))\n          drop\n          br 0\n        end\n      end\n  )\n\n  (func $evolveSingle (result i32) (local $index i32)\n      block\n        loop\n          ;; color up the cell\n          local.get $index\n          call $getCurrentIndex\n          local.get $index\n          call $calcNextState\n\n          i32.store\n\n          ;; $index++\n          local.get $index\n          i32.const 1\n          i32.add\n          local.tee $index\n\n          (br_if 1 (i32.eq (global.get $rowSize) (local.get $index)))\n          drop\n          br 0\n        end\n      end\n\n      global.get $step\n      i32.const 1\n      i32.add\n      global.set $step\n\n      local.get $index\n    )\n  (export \"evolve\" (func $evolve))\n)\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/add-tests.ts",
    "content": "export const addTests = [\n  {\n    args: [0, 0],\n    output: 0\n  },\n  {\n    args: [1, 0],\n    output: 1\n  },\n  {\n    args: [1, 1],\n    output: 2\n  },\n  {\n    args: [17, 25],\n    output: 42\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/common.ts",
    "content": "export const red = '#ff3f00';\nexport const defaultRowSize = 5;\n\nexport function colorMatchesExpected(a, i, c, test) {\n  return test.actualMemory[i] === test.expectedMemory[i] ? '#ddd' : red;\n}\n\nexport function outputCoordinates(config) {\n  return [\n    {\n      y: -1,\n      x: config.args[0],\n      color: 'yellow',\n      text: config.args[0]\n    },\n\n    {\n      x: -1,\n      y: config.args[1],\n      color: 'yellow',\n      text: config.args[1]\n    },\n\n    {\n      x: config.args[0],\n      y: config.args[1],\n      color: 'lime',\n      text: config.output\n    }\n  ];\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/disable-tests.ts",
    "content": "export const disableTests = [\n  {\n    args: [],\n    output: 0\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/enable-tests.ts",
    "content": "export const enableTests = [\n  {\n    args: [],\n    output: 1\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/evolve-cell.ts",
    "content": "import { colorMatchesExpected } from './common';\n\nconst rowSize = 3;\n\nconst viz = {\n  type: 'evolve',\n  rowSize,\n  text: a => a,\n  memory: test => test.actualMemory,\n  color: colorMatchesExpected\n};\n\nexport const evolveCellTests = [\n  {\n    args: [0],\n    memory: [0, 0, 0, 0, 0, 0],\n    table: [\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable'\n    ],\n    expectedMemory: [0, 0, 0, 1, 0, 0],\n    imports: { config: { step: 1, rowSize: 3 } },\n    viz: {\n      ...viz,\n      rule: 0\n    }\n  },\n  {\n    args: [2],\n    memory: [0, 0, 0, 0, 0, 0],\n    table: [\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable'\n    ],\n    expectedMemory: [0, 0, 0, 0, 0, 1],\n    imports: { config: { step: 1, rowSize: 3 } },\n    viz\n  },\n  {\n    args: [2],\n    memory: [1, 1, 1, 1, 1, 1],\n    table: [\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable'\n    ],\n    expectedMemory: [1, 1, 1, 1, 1, 0],\n    imports: { config: { step: 1, rowSize: 3 } },\n    viz\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/evolve-row.ts",
    "content": "import { colorMatchesExpected } from './common';\n\nconst rowSize = 3;\n\nconst viz = {\n  type: 'evolve',\n  rowSize,\n  text: a => a,\n  memory: test => test.actualMemory,\n  color: colorMatchesExpected\n};\n\nexport const evolveRowTests = [\n  {\n    args: [],\n    memory: [0, 0, 0, 0, 0, 0],\n    table: [\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable'\n    ],\n    expectedMemory: [0, 0, 0, 1, 1, 1],\n    imports: { config: { step: 1, rowSize: 3 } },\n    viz\n  },\n  {\n    args: [2],\n    memory: [1, 1, 1, 1, 1, 1],\n    table: [\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable',\n      'disable'\n    ],\n    expectedMemory: [1, 1, 1, 0, 0, 0],\n    imports: { config: { step: 1, rowSize: 3 } },\n    viz\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/evolve.ts",
    "content": "import { colorMatchesExpected, defaultRowSize } from './common';\n\nconst viz = {\n  type: 'evolve',\n  rowSize: defaultRowSize,\n  text: a => a,\n  memory: test => test.actualMemory,\n  color: colorMatchesExpected\n};\n\nexport const evolveTests = [\n  {\n    args: [1],\n    memory: [0, 0, 0, 1, 0],\n    table: [\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable',\n      'enable'\n    ],\n    expectedMemory: [0, 0, 0, 1, 0, 1, 1, 1, 1, 1],\n    imports: { config: { step: 1, rowSize: defaultRowSize } },\n    viz\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/get-cell-score.ts",
    "content": "export const getCellScoreTests = [\n  {\n    args: [1],\n    memory: [0, 0, 1],\n    output: 0b001,\n    imports: { config: { rowSize: 3, step: 1 } }\n  },\n  {\n    args: [2],\n    memory: [1, 0, 0],\n    output: 0b001,\n    imports: { config: { rowSize: 3, step: 1 } }\n  },\n  {\n    args: [1],\n    memory: [1, 1, 0],\n    output: 0b110,\n    imports: { config: { rowSize: 3, step: 1 } }\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/get-index.ts",
    "content": "import { outputCoordinates } from './common';\n\nconst rowSize = 5;\n\nconst viz = {\n  rowSize,\n  text: (a, i) => i,\n  extras: outputCoordinates\n};\nexport const getIndex = [\n  {\n    args: [0, 0],\n    imports: { config: { rowSize: rowSize } },\n    output: 0,\n    viz\n  },\n  {\n    args: [1, 0],\n    imports: { config: { rowSize: rowSize } },\n    output: 1,\n    viz\n  },\n  {\n    args: [0, 1],\n    imports: { config: { rowSize: rowSize } },\n    output: rowSize,\n    viz\n  },\n  {\n    args: [0, 1],\n    imports: { config: { rowSize: 4 } },\n    output: 4,\n    viz\n  },\n  {\n    args: [3, 3],\n    imports: { config: { rowSize: 4 } },\n    output: 15,\n    viz\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/load-cell.ts",
    "content": "const rowSize = 2;\n\nexport const memoryRepViz = {\n  rowSize: rowSize * 4,\n  text: (a, i, c, test) => {\n    return i % 4 === 0 ? test.memory[i / 4] : '';\n  },\n  color: (a, i, o, test) => {\n    const c = (test.args[1] * rowSize + test.args[0]) * 4;\n    if (i >= c && i < c + 4) {\n      return 'lime';\n    }\n    return Math.floor((i / 4) % 2) === 0 ? '#ddd' : '#999';\n  }\n};\n\nexport const loadCellTests = [\n  {\n    args: [0, 0],\n    memory: [0, 0, 0],\n    output: 0,\n    imports: { config: { rowSize } },\n    viz: memoryRepViz\n  },\n  {\n    args: [0, 0],\n    memory: [1, 0, 0],\n    output: 1,\n    imports: { config: { rowSize } },\n    viz: memoryRepViz\n  },\n  {\n    args: [1, 0],\n    memory: [1, 1, 0, 0],\n    output: 1,\n    imports: { config: { rowSize } },\n    viz: memoryRepViz\n  },\n  {\n    args: [0, 1],\n    memory: [1, 0, 1, 0],\n    viz: memoryRepViz,\n    output: 1,\n    imports: { config: { rowSize } }\n  },\n  {\n    args: [1, 1],\n    memory: [1, 0, 0, 0],\n    output: 0,\n    viz: memoryRepViz,\n    imports: { config: { rowSize } }\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/load-previous-cell.ts",
    "content": "export const loadPreviousCellTests = [\n  {\n    args: [0],\n    memory: [0, 0, 0],\n    output: 0,\n    imports: { config: { step: 1, rowSize: 3 } }\n  },\n  {\n    args: [0],\n    memory: [1, 0, 0],\n    output: 1,\n    imports: { config: { step: 1, rowSize: 3 } }\n  },\n  {\n    args: [2],\n    memory: [1, 0, 1],\n    output: 1,\n    imports: { config: { step: 1, rowSize: 3 } }\n  },\n  {\n    args: [2],\n    memory: [1, 0, 1, 1, 0, 1],\n    output: 1,\n    imports: { config: { step: 2, rowSize: 3 } }\n  },\n  {\n    args: [2],\n    memory: [1, 0, 1, 1, 0, 0],\n    output: 0,\n    imports: { config: { step: 2, rowSize: 3 } }\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/rotate.ts",
    "content": "const rowSize = 5;\nconst longFowSize = 4;\nconst yellow = {\n  color: 'yellow',\n  text: 'Y'\n};\n\nconst lime = {\n  color: 'lime',\n  text: 'G'\n};\n\nconst red = {\n  color: 'red',\n  text: 'R'\n};\n\nexport const rotate = [\n  {\n    args: [0, rowSize],\n    imports: { config: { rowSize } },\n    output: 0,\n    viz: {\n      rowSize,\n      extras: [\n        {\n          ...lime,\n          x: 0,\n          y: 0\n        },\n        {\n          ...yellow,\n          x: 0,\n          y: 1\n        }\n      ]\n    }\n  },\n  {\n    args: [rowSize, rowSize],\n    imports: { config: { rowSize } },\n    output: 0,\n    viz: {\n      rowSize,\n      extras: [\n        {\n          ...red,\n          x: rowSize,\n          y: 0\n        },\n        {\n          ...lime,\n          x: 0,\n          y: 0\n        },\n        {\n          ...lime,\n          x: rowSize - 2,\n          y: 0\n        },\n        {\n          ...lime,\n          x: rowSize - 1,\n          y: 0\n        },\n        {\n          ...yellow,\n          x: rowSize - 1,\n          y: 1\n        }\n      ]\n    }\n  },\n  {\n    args: [-1, rowSize],\n    imports: { config: { rowSize } },\n    output: 4,\n    viz: {\n      rowSize,\n      extras: [\n        {\n          ...red,\n          x: -1,\n          y: 0\n        },\n        {\n          ...lime,\n          x: 0,\n          y: 0\n        },\n        {\n          ...lime,\n          x: 1,\n          y: 0\n        },\n        {\n          ...lime,\n          x: rowSize - 1,\n          y: 0\n        },\n        {\n          ...yellow,\n          x: 0,\n          y: 1\n        }\n      ]\n    }\n  },\n\n  {\n    args: [longFowSize, longFowSize],\n    imports: { config: { rowSize: longFowSize } },\n    output: 0,\n    viz: {\n      rowSize: longFowSize,\n      extras: [\n        {\n          ...red,\n          x: longFowSize,\n          y: 0\n        },\n        {\n          ...lime,\n          x: 0,\n          y: 0\n        },\n        {\n          ...lime,\n          x: longFowSize - 2,\n          y: 0\n        },\n        {\n          ...lime,\n          x: longFowSize - 1,\n          y: 0\n        },\n        {\n          ...yellow,\n          x: longFowSize - 1,\n          y: 1\n        }\n      ]\n    }\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/shift-tests.ts",
    "content": "const viz = {\n  type: 'shift'\n};\n\nexport const shiftTests = [\n  {\n    args: [0, 0, 0],\n    output: 0,\n    viz\n  },\n  {\n    args: [0, 0, 1],\n    output: 0b1,\n    viz\n  },\n  {\n    args: [0, 1, 0],\n    output: 0b10,\n    viz\n  },\n  {\n    args: [1, 0, 0],\n    output: 0b100,\n    viz\n  },\n  {\n    args: [1, 1, 1],\n    output: 0b111,\n    viz\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/tests/store-cell-tests.ts",
    "content": "import { memoryRepViz } from './load-cell';\n\nexport const storeCellTests = [\n  {\n    args: [1, 1],\n    imports: { config: { rowSize: 3, step: 0 } },\n    memory: [0, 1, 0],\n    expectedMemory: [0, 1, 0],\n    viz: memoryRepViz\n  },\n  {\n    args: [1, 0],\n    imports: { config: { rowSize: 3, step: 0 } },\n    memory: [0, 1, 0],\n    expectedMemory: [0, 0, 0],\n    viz: memoryRepViz\n  }\n];\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/utils.spec.ts",
    "content": "import { extractFunction } from './utils';\n\ndescribe('SyncComponent', () => {\n  it('should create', () => {\n    expect(\n      extractFunction(\n        'getIndex',\n        ` (export \"memory\" (memory 0))\n  (global $step (export \"step\") (mut i32) (i32.const 1))\n\n  (func $getIndex (param $x i32) (param $y i32) (result i32)\n    (i32.mul\n        (i32.const 4)\n        (i32.add\n            (local.get $x)\n            (i32.mul\n                (local.get $y)\n                (global.get $rowSize))))\n  )\n`\n      )\n    ).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/utils.ts",
    "content": "import {\n  BaseBlock,\n  CodeHelperBlock\n} from './webassembly-playground/monaco-directives/common';\n\nexport function extractFunction(name, code) {\n  return extractExpressionByMatch(\n    new RegExp('\\\\(func \\\\$' + name + '\\\\b'),\n    code\n  );\n}\n\nexport function prepareTableCode(code) {\n  const elements = extractExpressionByMatch(/\\(elem/, code);\n  if (!elements) {\n    // tslint:disable-next-line:no-debugger\n    debugger;\n  }\n  const functions = [\n    ...new Set([...elements.matchAll(/\\$(\\w+)\\b/g)].map(a => a[1]))\n  ]\n    .map(name => extractFunction(name, code))\n    .join('\\n');\n\n  const tableDef = extractExpressionByMatch(/\\(table/, code);\n  return `\n  ;; table\n  ${tableDef}\n\n  ;; elem\n  ${elements}\n\n  ;; table functions\n  ${functions}\n`;\n}\n\nexport function extractTypeCode(code) {\n  // TODO(kirjs): This would only extract one type, at some point there can be more\n  const type = extractExpressionByMatch(/\\(type/, code);\n\n  return `\n  ;; types (we only extract one ATM)\n  ${type}\n`;\n}\n\nconst matchTypeRegex = /^\\(\\s*([\\w.]+)\\b/;\nconst funcNameRegex = /func\\s*\\$(\\w+)/;\n\nfunction getName(code) {\n  if (getType(code) === 'func') {\n    const match = code.match(funcNameRegex);\n    return match ? match[1] : undefined;\n  }\n\n  return undefined;\n}\n\nfunction getType(code) {\n  const t = code.match(matchTypeRegex);\n  return t && t[1];\n}\n\nexport function serializeBlocks(blocks: CodeHelperBlock[]) {\n  return blocks.map(b => b.type + (b.name ? `(${b.name})` : '')).join('/');\n}\n\nexport function populateBlocks(blocks: BaseBlock[]): CodeHelperBlock[] {\n  return blocks.map((b: any) => {\n    const type = getType(b.code) || 'module';\n\n    return {\n      name: getName(b.code),\n      type,\n      ...b\n    };\n  });\n}\n\nexport function extractBlocks(\n  textBefore,\n  textAfter,\n  prependLeft = '',\n  prependRight = ''\n) {\n  const before = findPrevNonMatchingClosingBrace(textBefore);\n  const after = findNextNonMatchingClosingBrace(textAfter);\n\n  if (before && after) {\n    const next = extractBlocks(\n      textBefore.slice(0, -before.length - 1),\n      textAfter.slice(after.length),\n      before + prependLeft,\n      prependRight + after\n    );\n\n    return [\n      {\n        before,\n        after,\n        code: before + prependLeft + prependRight + after\n      },\n      ...next\n    ];\n  }\n\n  return [];\n}\n\nexport function findNextNonMatchingClosingBrace(code: string) {\n  return findMatchingBrace(code, 0, 1, 1);\n}\n\nexport function findPrevNonMatchingClosingBrace(code: string) {\n  return findMatchingBrace(code, code.length - 1, -1, -1, -1);\n}\n\nfunction findMatchingBrace(\n  code: string,\n  startIndex = 0,\n  shift = 1,\n  braces = 0,\n  /*This is a hack, need proper fix*/ resultShift = 0\n) {\n  let i = startIndex;\n  while (code[i]) {\n    const c = code[i];\n\n    if (c === '(') {\n      braces++;\n    }\n    if (c === ')') {\n      braces--;\n    }\n\n    i += shift;\n\n    if (braces === 0) {\n      return code.substring(startIndex, i - resultShift);\n    }\n  }\n}\n\nexport function extractExpressionByMatch(regex, code) {\n  const match = regex.exec(code);\n  if (match) {\n    let i = match.index;\n    let braces = 0;\n    while (true) {\n      const c = code[i];\n\n      if (!c) {\n        return null;\n      }\n\n      if (c === '(') {\n        braces++;\n      }\n      if (c === ')') {\n        braces--;\n      }\n\n      i++;\n\n      if (braces === 0) {\n        return code.substring(match.index, i);\n      }\n    }\n  }\n}\n\nexport function extractGlobalAccess(code) {\n  const match = /(?:get_global|global\\.get)\\s+\\$(\\w+)*/g;\n  return [...new Set([...code.matchAll(match)].map(a => a[1]))];\n}\n\nexport function extractGlobals(code, allCode) {\n  return extractGlobalAccess(code);\n}\n\nexport function hasMemoryCalls(code) {\n  return /i32\\.(store|load)\\s+/g.test(code);\n}\n\nexport function hasTypeCalls(code) {\n  return /type \\$/g.test(code);\n}\n\nexport function hasTableCalls(code, config) {\n  return /(call_indirect)\\s+/g.test(code);\n}\n\nfunction unique(arr) {\n  return [...new Set(arr)];\n}\n\nexport function populateTestCode(\n  code: string,\n  test,\n  allCode: string,\n  table: string\n) {\n  if (test.table) {\n    const funcs = unique(test.table)\n      .map(name => extractFunction(name, allCode))\n      .join('\\n\\n');\n    const elements = test.table.map(e => '    $' + e).join('\\n');\n    table = `\n(table ${test.table.length} funcref)\n(elem (i32.const 0)\n${elements}\n)\n\n${funcs}\n\n`;\n  }\n\n  const regExp = /;;{table}/;\n  if (table) {\n    code = code.replace(regExp, table);\n  }\n  return code;\n}\n\nexport function extractFunctionWithDependencies(\n  name,\n  code: string,\n  dependencies: string[]\n) {\n  return extractFunctionDependencyNames(name, code, dependencies)\n    .map(name => extractFunction(name, code))\n    .join('\\n\\n');\n}\n\nexport function hasGlobal(name, code) {\n  return /global\\s+/g.test(code);\n}\n\nexport function extractFunctionDependencyNames(\n  name,\n  code: string,\n  dependencies: string[]\n) {\n  const funcCode = extractFunction(name, code);\n  const match = /(?:\\bcall)\\s+\\$(\\w+)*/g;\n  if (!funcCode) {\n    return [];\n  }\n  const functions = [\n    ...new Set([...funcCode.matchAll(match)].map(a => a[1]))\n  ].filter(d => !dependencies.includes(d));\n  const nestedDeps = functions.flatMap(f =>\n    extractFunctionDependencyNames(f, code, [...dependencies, ...functions])\n  );\n  return [...new Set([...dependencies, ...nestedDeps, ...functions])];\n}\n\nfunction getMemoryCode(hasMemory: boolean) {\n  return hasMemory\n    ? `\n  (memory 1)\n  (export \"memory\" (memory 0))\n  `\n    : '';\n}\n\nexport function generateWatTestCode({\n  code,\n  globals,\n  name,\n  hasMemory,\n  types\n}: any) {\n  const globalsCode = globals\n    .map(\n      global =>\n        `(global  \\$${global} (export \"${global}\") (mut i32) (i32.const 0))`\n    )\n    .join('\\n');\n  const memoryCode = getMemoryCode(hasMemory);\n\n  const funcExport = code.match(`export \"${name}\"`)\n    ? ''\n    : `(export \"${name}\" (func $${name}))`;\n\n  return `(module\n  ${funcExport}\n  ${types}\n  ${globalsCode}\n  ;;{table}\n  ${memoryCode}\n  ${code}\n)`;\n}\n\nexport function extractAllFunctions(code) {\n  const match = /func\\s+\\$(\\w+)*/g;\n  return [...new Set([...code.matchAll(match)].map(a => a[1]))];\n}\n\nexport function extractAnswers(code) {\n  const functions = extractAllFunctions(code).map(name => [\n    name,\n    extractFunction(name, code)\n  ]);\n  return new Map(functions as any);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/wasm-binary/wasm-binary.component.css",
    "content": "::ng-deep [name='section-type'] {\n  display: block;\n  flex-basis: 100%;\n  background: #444 !important;\n  border-radius: 4px;\n  margin-top: 8px;\n  margin-bottom: 4px;\n  padding: 8px 16px;\n  color: white !important;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/wasm-binary/wasm-binary.component.html",
    "content": "<kirjs-binary-plain\n  [highlightedMap]=\"{ boolean: true, number: true, hex: true, string: true }\"\n  [parser]=\"parser\"\n  [binary]=\"binary\"\n  [spacing]=\"true\"\n></kirjs-binary-plain>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/wasm-binary/wasm-binary.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WasmBinaryComponent } from './wasm-binary.component';\n\ndescribe('WasmBinaryComponent', () => {\n  let component: WasmBinaryComponent;\n  let fixture: ComponentFixture<WasmBinaryComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WasmBinaryComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WasmBinaryComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/wasm-binary/wasm-binary.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { wasmParser } from './wasm-parser';\nimport { strToBin } from '../../binary/parser/utils';\n\ndeclare const require;\n// if the extention is .wasm, webpack is being stupid.\nconst wasm = require('!binary-loader!./test._wasm');\n\n@Component({\n  selector: 'kirjs-wasm-binary',\n  templateUrl: './wasm-binary.component.html',\n  styleUrls: ['./wasm-binary.component.css']\n})\nexport class WasmBinaryComponent {\n  readonly binary = strToBin(wasm);\n  readonly parser = wasmParser();\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/wasm-binary/wasm-parser.ts",
    "content": "import { BinaryParser } from '../../binary/parser/binary-parser';\n\nconst funcTypes = {\n  0x7f: 'i32',\n  0x7e: 'i64',\n  0x7d: 'f32',\n  0x7c: 'f64',\n  0x70: 'anyfunc',\n  0x60: 'func',\n  0x40: 'empty_block'\n};\n\nconst valueTypes = {\n  0x7f: 'i32',\n  0x7e: 'i64',\n  0x7d: 'f32',\n  0x7c: 'f64'\n};\n\nexport function wasmParser() {\n  const funcParamTypeParser = new BinaryParser().uInt8('type', {\n    enum: valueTypes\n  });\n\n  const funcTypeParser = new BinaryParser()\n    .uInt8('type', { enum: funcTypes })\n    .uInt8('paramCount')\n    .array('params', {\n      parser: funcParamTypeParser,\n      length: 'paramCount'\n    })\n    .uInt8('returnCount')\n    .array('returns', {\n      parser: funcParamTypeParser,\n      length: 'returnCount'\n    });\n\n  const fieldParser = new BinaryParser()\n    .varuint7('len')\n    .string('name', { length: 'len' });\n\n  const kindParser = new BinaryParser().uInt8('kind').choice('declaration', {\n    key: 'kind',\n    values: {\n      0: new BinaryParser().varuint7('function'),\n      2: new BinaryParser().varuint7('memory-tbd')\n    }\n  });\n\n  const exportItemParser = new BinaryParser()\n    .block('field', fieldParser)\n    .block('kind', kindParser);\n\n  const localEntryParser = new BinaryParser()\n    .varuint7('local_count')\n    .uInt8('value_type');\n\n  const codeBodyParser = new BinaryParser()\n    .varuint7('function_body_type_body_size')\n    .block('local', localEntryParser)\n    .block('local', localEntryParser)\n    .block('local', localEntryParser)\n    .block('local', localEntryParser);\n\n  const sectionParsers = {\n    type: new BinaryParser().uInt8('count').array('params', {\n      length: 'count',\n      parser: funcTypeParser\n    }),\n\n    import: new BinaryParser()\n      .uInt8('count')\n      .varuint7('moduleLen')\n      .string('module', { length: 'moduleLen' })\n      .block('field', fieldParser)\n      .block('kind', kindParser),\n\n    function: new BinaryParser().bit32('TBD'),\n\n    table: new BinaryParser().bit24('TBD'),\n\n    export: new BinaryParser().varuint7('count').array('items', {\n      length: 'count',\n      parser: exportItemParser\n    }),\n\n    start: new BinaryParser().varuint7('index'),\n\n    code: new BinaryParser()\n      .varuint7('number_of_functions')\n      .block('lol', codeBodyParser)\n  };\n\n  const sectionParser = new BinaryParser()\n    .uInt8('section-type', {\n      enum: {\n        0x01: 'Types',\n        0x02: 'Import',\n        0x03: 'Function',\n        0x05: 'Table',\n        0x07: 'Export',\n        0x08: 'Start',\n        0x0a: 'Code'\n      }\n    })\n    .varuint7('size')\n    .choice('section', {\n      key: 'section-type',\n      values: {\n        0x01: sectionParsers.type,\n        0x02: sectionParsers.import,\n        0x03: sectionParsers.function,\n        0x05: sectionParsers.table,\n        0x07: sectionParsers.export,\n        0x08: sectionParsers.start,\n        0x0a: sectionParsers.code\n      }\n    });\n\n  const header = new BinaryParser()\n    .string('headerConst', {\n      length: 4,\n      description: `header const`\n    })\n    .uInt32le('version')\n    .array('sections', { length: 7, parser: sectionParser });\n\n  return new BinaryParser().block('header', header);\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/error-message/error-message.component.css",
    "content": ".error {\n  font-size: 20px;\n  padding: 20px;\n  text-align: center;\n  background: #ff4e3d;\n  color: #fff;\n  opacity: 0.9;\n  width: 100%;\n  margin-left: -20px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/error-message/error-message.component.html",
    "content": "<div class=\"error\" *ngIf=\"result.type === 'error'\">\n  {{ result.value }}\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/error-message/error-message.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ErrorMessageComponent } from './error-message.component';\n\ndescribe('ErrorMessageComponent', () => {\n  let component: ErrorMessageComponent;\n  let fixture: ComponentFixture<ErrorMessageComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ErrorMessageComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ErrorMessageComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/error-message/error-message.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { Result } from '../web-assembly.service';\n\n@Component({\n  selector: 'slides-error-message',\n  templateUrl: './error-message.component.html',\n  styleUrls: ['./error-message.component.css']\n})\nexport class ErrorMessageComponent implements OnInit {\n  @Input() result: Result<string>;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/monaco-directives/common.ts",
    "content": "import {\n  webAssemblyModuleContentHandler,\n  webAssemblyTestHandler\n} from '../runners/wasm-test-runner/wasm-test-runner.component';\n\nexport interface BaseBlock {\n  code: string;\n  before?: string;\n  after?: string;\n}\n\nexport interface CodeHelperBlock extends BaseBlock {\n  type: string;\n  name?: string;\n  meta: any;\n}\n\nexport interface CodePath {\n  type: 'ts' | 'wat';\n  blocks: CodeHelperBlock[];\n}\n\nexport function getCodeBlockHandler(lang, type) {\n  if (!codeBlockHandlers[lang] || !codeBlockHandlers[lang][type]) {\n    return;\n  }\n  return codeBlockHandlers[lang][type];\n}\n\nconst displayPreview = () => {\n  return { mode: 'default' };\n};\nexport const codeBlockHandlers = {\n  ts: {\n    FunctionDeclaration: displayPreview,\n    SourceFile: displayPreview\n  },\n  wat: {\n    elem: displayPreview,\n    func: webAssemblyTestHandler,\n    module: webAssemblyModuleContentHandler\n  }\n};\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/monaco-directives/monaco-js-position.directive.ts",
    "content": "import {\n  AfterViewInit,\n  Directive,\n  EventEmitter,\n  Optional,\n  Output,\n  Self\n} from '@angular/core';\nimport { CodeDemoEditorInjector } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.injector';\nimport { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\nimport { serializeBlocks } from '../../utils';\nimport { CodePath } from './common';\n\nconst ts = getTypeScript();\n\nconst printer = ts.createPrinter({\n  newLine: ts.NewLineKind.LineFeed\n});\n\nconst usefulTypes = new Set([\n  ts.SyntaxKind.SourceFile,\n  ts.SyntaxKind.FunctionDeclaration\n]);\n\nfunction getName(token) {\n  if (token.kind === ts.SyntaxKind.FunctionDeclaration) {\n    return token.name.text;\n  }\n}\n\nfunction resolveToken(token, sourceFile) {\n  const code = printer.printNode(ts.EmitHint.Unspecified, token, sourceFile);\n\n  const name = getName(token);\n  return {\n    code,\n    type: ts.SyntaxKind[token.kind],\n    ...token,\n    name\n  };\n}\n\nfunction processBlocks(blocks: any[], sourceFile) {\n  return blocks\n    .map(b => resolveToken(b, sourceFile))\n    .filter(b => {\n      return usefulTypes.has(b.kind);\n    });\n}\n\n@Directive({\n  selector: '[slidesMonacoJsPosition]'\n})\nexport class MonacoJsPositionDirective implements AfterViewInit {\n  @Output() slidesMonacoJsPosition = new EventEmitter<CodePath>();\n  lastResult: string;\n\n  constructor(\n    @Self() @Optional() private editorInjector: CodeDemoEditorInjector\n  ) {}\n\n  ngAfterViewInit() {\n    const editor = this.editorInjector.editor;\n    editor.onDidChangeCursorPosition(({ position }) => {\n      const model = editor.getModel();\n      const value = model.getValue();\n      const sourceFile = ts.createSourceFile(\n        'file.ts',\n        value,\n        ts.ScriptTarget.ES2015,\n        /*setParentNodes */ true\n      );\n\n      const offset = model.getOffsetAt(position);\n      let token = (ts as any).getTokenAtPosition(sourceFile, offset);\n      const blocks = [token];\n      while (token.parent && token.kind) {\n        token = token.parent;\n        blocks.push(token);\n      }\n\n      const processedBlocks = processBlocks(blocks, sourceFile);\n\n      const result = serializeBlocks(processedBlocks);\n      // If we're in the same path and value is the same, let's not update\n      const key = result + value;\n      if (this.lastResult !== key) {\n        this.lastResult = key;\n        this.slidesMonacoJsPosition.emit({\n          type: 'ts',\n          blocks: processedBlocks\n        });\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/monaco-directives/monaco-load-answer.directive.ts",
    "content": "import { Directive, EventEmitter, Optional, Output, Self } from '@angular/core';\nimport { CodeDemoEditorInjector } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.injector';\n\n@Directive({\n  selector: '[slidesMonacoLoadAnswer]',\n  exportAs: 'MonacoWatLoadAnswer'\n})\nexport class MonacoWatLoadAnswerDirective {\n  @Output() slidesMonacoLoadAnswer = new EventEmitter<void>();\n\n  constructor(\n    @Self() @Optional() private editorInjector: CodeDemoEditorInjector\n  ) {}\n\n  loadAnswer(config: any) {\n    const model = this.editorInjector.editor.getModel();\n    const value = model.getValue();\n    const newValue = value.replace(config.originalCode, config.answer);\n    model.setValue(newValue);\n    this.slidesMonacoLoadAnswer.emit();\n    const pos = model.getPositionAt(newValue.indexOf(config.answer) + 20);\n    this.editorInjector.editor.setPosition(pos);\n    this.editorInjector.editor.focus();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/monaco-directives/monaco-scrolling.directive.ts",
    "content": "import { Directive, Input, OnChanges, Optional, Self } from '@angular/core';\nimport { CodeDemoEditorInjector } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.injector';\nimport { findPosition } from '@codelab/code-demos/src/lib/code-demo-editor/utils/utils';\n\n@Directive({\n  selector: '[slidesMonacoScrolling]'\n})\nexport class MonacoScrollingDirective implements OnChanges {\n  @Input() slidesMonacoScrolling = '';\n  lastValue: string;\n\n  constructor(\n    @Self() @Optional() private editorInjector: CodeDemoEditorInjector\n  ) {}\n\n  ngOnChanges(changes) {\n    const editor = this.editorInjector.editor;\n    if (\n      editor &&\n      changes.slidesMonacoScrolling &&\n      changes.slidesMonacoScrolling.currentValue !== this.lastValue\n    ) {\n      this.lastValue = this.slidesMonacoScrolling;\n\n      if (this.slidesMonacoScrolling) {\n        const range = findPosition(\n          editor.getModel().getValue(),\n          this.slidesMonacoScrolling\n        );\n\n        // This does not really work\n        editor.revealRangeInCenter({\n          startColumn: range.indexStart,\n          endColumn: range.indexEnd,\n          startLineNumber: range.lineStart,\n          endLineNumber: range.lineEnd\n        });\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/monaco-directives/monaco-wat-position.directive.spec.ts",
    "content": "import { MonacoWatPositionDirective } from './monaco-cursor-position.directive';\n\ndescribe('MonacoCursorPositionDirective', () => {\n  it('should create an instance', () => {\n    const directive = new MonacoWatPositionDirective();\n    expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/monaco-directives/monaco-wat-position.directive.ts",
    "content": "import {\n  AfterViewInit,\n  Directive,\n  EventEmitter,\n  Optional,\n  Output,\n  Self\n} from '@angular/core';\nimport { CodeDemoEditorInjector } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.injector';\nimport { extractBlocks, populateBlocks, serializeBlocks } from '../../utils';\nimport { CodePath } from './common';\n\n@Directive({\n  selector: '[slidesMonacoWatPosition]'\n})\nexport class MonacoWatPositionDirective implements AfterViewInit {\n  @Output() slidesMonacoWatPosition = new EventEmitter<CodePath>();\n  lastResult: string;\n\n  constructor(\n    @Self() @Optional() private editorInjector: CodeDemoEditorInjector\n  ) {}\n\n  ngAfterViewInit() {\n    const editor = this.editorInjector.editor;\n    editor.onDidChangeCursorPosition(x => {\n      const position = x.position;\n      const model = editor.getModel();\n      const offset = model.getOffsetAt(position);\n      const value = model.getValue();\n\n      const textBefore = value.slice(0, offset + 1);\n      const textAfter = value.slice(offset);\n\n      const blocks = populateBlocks(extractBlocks(textBefore, textAfter));\n\n      const result = serializeBlocks(blocks);\n      // If we're in the same path and value is the same, let's not update\n\n      const key = result + value;\n      if (this.lastResult !== key) {\n        this.lastResult = key;\n        this.slidesMonacoWatPosition.emit({ type: 'wat', blocks });\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/runners/wasm-test-runner/runner.js",
    "content": "async function run(code, { args, imports, name, memory }) {\n  // imports.config.log = console.log;\n\n  const program = await WebAssembly.instantiate(code, imports);\n\n  if (memory) {\n    if (!program.instance.exports.memory) {\n      throw new Error(\n        'This test expects memory to be exported from WebAssembly, but none was exported.'\n      );\n    }\n    const mem = new Uint32Array(program.instance.exports.memory.buffer);\n    for (let m = 0; m < memory.length; m++) {\n      mem[m] = memory[m];\n    }\n  }\n\n  if (imports) {\n    Object.entries(imports.config).map(([key, value]) => {\n      if (program.instance.exports[key]) {\n        program.instance.exports[key].value = value;\n      }\n    });\n  }\n\n  const result = program.instance.exports[name](...args);\n  return {\n    result,\n    exports: program.instance.exports\n  };\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/runners/wasm-test-runner/wasm-test-runner.component.html",
    "content": "<ng-container *ngIf=\"result$ | async as result\">\n  <div *ngIf=\"result.type === 'result'\">\n    <div *ngFor=\"let test of result.value\">\n      <div\n        class=\"test-result\"\n        [class.focused]=\"isFocused(test)\"\n        (click)=\"focused = test\"\n      >\n        <div\n          class=\"indicator\"\n          [style.background]=\"test.pass ? '#43ff00' : '#ff5300'\"\n        ></div>\n        <div>\n          <div>\n            <div class=\"call\">\n              {{ config.name }}({{ test.args }}) {{ test.memory }}\n            </div>\n            <div *ngIf=\"test.output !== undefined\">\n              <div class=\"result-expected\">\n                result: {{ test.result.value.result }}\n              </div>\n              <div class=\"result-expected\">expected: {{ test.output }}</div>\n            </div>\n            <div *ngIf=\"test.expectedMemory !== undefined\">\n              result: {{ test.actualMemory }} expected:\n              {{ test.expectedMemory }}\n            </div>\n          </div>\n          <slides-viz\n            *ngIf=\"isFocused(test) && test.viz\"\n            [config]=\"config\"\n            [test]=\"test\"\n          ></slides-viz>\n        </div>\n      </div>\n    </div>\n  </div>\n  <slides-error-message [result]=\"result\"></slides-error-message>\n</ng-container>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/runners/wasm-test-runner/wasm-test-runner.component.scss",
    "content": ".indicator {\n  width: 20px;\n  height: 20px;\n  margin-top: 5px;\n  margin-right: 10px;\n}\n\n.test-result {\n  display: flex;\n  margin-bottom: 10px;\n}\n\nslides-viz {\n  display: block;\n  margin-top: 20px;\n}\n\n.call {\n  font-size: 20px;\n}\n\n.result-expected {\n  font-size: 20px;\n}\n\n.focused {\n  .call {\n    font-size: 3vw;\n  }\n\n  .result-expected {\n    font-size: 2vw;\n  }\n\n  .indicator {\n    width: 3vw;\n    height: 3vw;\n    margin-top: 5px;\n    margin-right: 10px;\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/runners/wasm-test-runner/wasm-test-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WasmTestRunnerComponent } from './wasm-test-runner.component';\n\ndescribe('WasmTestRunnerComponent', () => {\n  let component: WasmTestRunnerComponent;\n  let fixture: ComponentFixture<WasmTestRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WasmTestRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WasmTestRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/runners/wasm-test-runner/wasm-test-runner.component.ts",
    "content": "import { Component, Input, OnChanges } from '@angular/core';\nimport { forkJoin, Observable, Subject } from 'rxjs';\nimport {\n  Result,\n  RunResult,\n  WebAssemblyService\n} from '../../web-assembly.service';\nimport {\n  extractAllFunctions,\n  extractFunction,\n  extractFunctionWithDependencies,\n  extractGlobals,\n  extractTypeCode,\n  generateWatTestCode,\n  hasMemoryCalls,\n  hasTableCalls,\n  hasTypeCalls,\n  populateTestCode,\n  prepareTableCode\n} from '../../../utils';\nimport { wasmAnswers } from '../../../webassembly.component';\n\ndeclare const require;\n\ninterface TestResult {\n  pass: boolean;\n  result: Result<RunResult>;\n  isFirstFailed: boolean;\n}\n\ninterface TestConfig {\n  type: string;\n  name: string;\n  tests: any[];\n}\n\nexport interface WebAssemblyTestConfig extends TestConfig {\n  highlights: string[];\n  mode: string;\n  originalCode: string;\n  globals: string[];\n  table?: string;\n  answer?: string;\n  code: {\n    wat: string;\n    js: string;\n  };\n}\n\nfunction verifyGlobalsInTests(tests, globals) {\n  if (globals.length) {\n    tests.forEach(test => {\n      if (!test.imports) {\n        throw new Error(\n          'No imports present in the test. Function being tested expect the following: ' +\n            globals.join(',')\n        );\n      }\n      if (!test.imports.config) {\n        throw new Error('config property is missing on imports');\n      }\n      for (const g of globals) {\n        if (!(g in test.imports.config)) {\n          throw new Error('input is not present: ' + g);\n        }\n      }\n    });\n  }\n}\n\nfunction testsHaveMemory(config: TestConfig) {\n  return config.tests.some(t => t.memory);\n}\n\nfunction passOrNot(m: any, blockCode, allCode) {\n  if (m.type === 'func') {\n    return new Set(extractAllFunctions(allCode)).has(m.name);\n  }\n  if (m.type === 'module') {\n    return !!allCode.match(/\\(module/);\n  }\n  if (m.type === 'table') {\n    return !!allCode.match(/\\(table/);\n  }\n  if (m.type === 'elem') {\n    return !!allCode.match(/\\(elem/);\n  }\n\n  if (m.type === 'global') {\n    return !!allCode.match(new RegExp('global\\\\s*\\\\$' + m.name));\n  }\n\n  if (m.type === 'global.rowSize') {\n    // (import \"config\" \"rowSize\" (global $rowSize i32))\n    return !!allCode.match(/\\(global \\$rowSize i32\\)/);\n  }\n  if (m.type === 'global.step') {\n    // (global $step (export \"step\") (mut i32) (i32.const 1))\n    return !!allCode.match(/\\(export \"step\"\\)/);\n  }\n\n  if (m.type === 'memory') {\n    return !!allCode.match(new RegExp('memory'));\n  }\n}\n\nexport function webAssemblyModuleContentHandler(\n  config: any,\n  blockCode: string,\n  allCode: string\n) {\n  let hasUpassed = false;\n  const milestones = config.milestones.map(m => {\n    const pass = passOrNot(m, blockCode, allCode);\n\n    let firstFailed = false;\n    if (!pass && !hasUpassed) {\n      hasUpassed = true;\n      firstFailed = true;\n    }\n\n    return {\n      firstFailed,\n      pass,\n      ...m\n    };\n  });\n\n  return {\n    mode: config.type,\n    ...config,\n    milestones\n  };\n}\n\nexport function webAssemblyTestHandler(\n  config: TestConfig,\n  blockCode: string,\n  allCode: string\n): WebAssemblyTestConfig {\n  const originalCode = extractFunction(config.name, allCode);\n  const funcCode = extractFunctionWithDependencies(config.name, allCode, [\n    config.name\n  ]);\n  const globals = extractGlobals(funcCode, allCode);\n\n  const hasMemory = testsHaveMemory(config) || hasMemoryCalls(funcCode);\n\n  const table = hasTableCalls(funcCode, config)\n    ? prepareTableCode(allCode)\n    : '';\n  const types = hasTypeCalls(funcCode) ? extractTypeCode(allCode) : '';\n\n  verifyGlobalsInTests(config.tests, globals);\n  const wat = generateWatTestCode({\n    globals,\n    code: funcCode,\n    name: config.name,\n    hasMemory,\n    types\n  });\n  const answer = wasmAnswers.get(config.name) as string;\n\n  return {\n    code: {\n      wat,\n      js: require('!!raw-loader!./runner.js')\n    },\n    answer,\n    globals,\n    table,\n    ...config,\n    mode: 'test',\n    highlights: originalCode,\n    originalCode\n  };\n}\n\n@Component({\n  selector: 'slides-wasm-test-runner',\n  templateUrl: './wasm-test-runner.component.html',\n  styleUrls: ['./wasm-test-runner.component.scss']\n})\nexport class WasmTestRunnerComponent implements OnChanges {\n  readonly result$ = new Subject<Result<TestResult[]>>();\n  @Input() config: any;\n  focused;\n\n  constructor(private readonly webAssemblyService: WebAssemblyService) {}\n\n  isFocused(test) {\n    return this.focused ? test === this.focused : test.isFirstFailed;\n  }\n\n  runTests() {\n    this.focused = undefined;\n    const { tests, code, name, allCode, table } = this.config as any;\n\n    let hasFailures = false;\n    const sources = (tests as any[]).map(test => {\n      return new Observable<TestResult>(subscriber => {\n        const wat = populateTestCode(code.wat, test, allCode, table);\n\n        return this.webAssemblyService\n          .run(wat, code.js, {\n            args: test.args,\n            imports: test.imports,\n            memory: test.memory,\n            name\n          })\n          .subscribe(result => {\n            let pass = false;\n            if (result.type === 'result') {\n              if ('output' in test) {\n                pass = (result.value as RunResult).result === test.output;\n              }\n\n              if ('expectedMemory' in test) {\n                const mem = new Uint32Array(\n                  (result.value as RunResult).exports.memory.buffer\n                );\n\n                pass = test.expectedMemory.every((m, i) => mem[i] === m);\n                test.actualMemory = mem.slice(0, test.expectedMemory.length);\n              }\n            }\n\n            let isFirstFailed = false;\n\n            if (!pass && !hasFailures) {\n              hasFailures = true;\n              isFirstFailed = true;\n            }\n\n            subscriber.next({\n              isFirstFailed,\n              pass: pass,\n              result,\n              ...test\n            });\n            subscriber.complete();\n          });\n      });\n    });\n\n    forkJoin(sources).subscribe(results => {\n      const error = results.find(({ result }) => result.type === 'error');\n      if (error) {\n        this.result$.next(error.result as any);\n        return;\n      }\n\n      this.result$.next({ type: 'result', value: results });\n    });\n  }\n\n  ngOnChanges() {\n    this.runTests();\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/grid/grid.component.css",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/grid/grid.component.html",
    "content": "<div>\n  <canvas #canvas width=\"360\" height=\"280\"></canvas>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/grid/grid.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { GridComponent } from './grid.component';\n\ndescribe('GridComponent', () => {\n  let component: GridComponent;\n  let fixture: ComponentFixture<GridComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [GridComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(GridComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/grid/grid.component.ts",
    "content": "import { Component, Input, OnChanges, ViewChild } from '@angular/core';\n\nexport interface Figure {\n  type?: 'rect' | 'circle';\n  x: number;\n  y: number;\n  color: string;\n  text?: string;\n}\n\nexport interface GridConfig {\n  values: number[];\n  rowSize: number;\n  showIndex?: boolean;\n  extras?: Figure[] | any;\n}\n\nconst fakeMemory = [\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0\n];\n\ninterface DrawCellConfig extends Figure {\n  context: any;\n  size: number;\n}\n\nfunction drawCell({\n  context,\n  size,\n  x,\n  y,\n  color,\n  text,\n  type = 'rect'\n}: DrawCellConfig) {\n  const gridShift = size;\n  context.fillStyle = color;\n  const x1 = gridShift + x * size;\n  const y1 = gridShift + y * size;\n\n  if (type === 'rect') {\n    context.fillRect(x1, y1, size - 1, size - 1);\n  }\n  if (type === 'circle') {\n    context.arc(x1, y1, size, 0, Math.PI * 2, 0);\n  }\n\n  if (text !== undefined) {\n    context.fillStyle = 'black';\n    context.textAlign = 'center';\n    context.textBaseline = 'middle';\n    context.font = '20px \"Helvetica Neue\", sans-serif';\n    context.fillText(text, x1 + size / 2, y1 + size / 2);\n  }\n}\n\nfunction resolveFuncOrValueForItem(\n  funcOfValue: any,\n  item,\n  index,\n  vizConfig,\n  test,\n  defaultValue\n) {\n  if (!funcOfValue) {\n    return defaultValue;\n  }\n\n  if (typeof funcOfValue === 'function') {\n    return funcOfValue(item, index, vizConfig, test);\n  }\n\n  return funcOfValue;\n}\n\nfunction resolveFuncOrValue(funcOfValue: any, vizConfig, defaultValue) {\n  if (!funcOfValue) {\n    return defaultValue;\n  }\n\n  if (Array.isArray(funcOfValue)) {\n    return funcOfValue;\n  }\n\n  if (typeof funcOfValue === 'function') {\n    return funcOfValue(vizConfig);\n  }\n}\n\n@Component({\n  selector: 'slides-grid',\n  templateUrl: './grid.component.html',\n  styleUrls: ['./grid.component.css']\n})\nexport class GridComponent implements OnChanges {\n  @ViewChild('canvas', { static: true }) canvas;\n  @Input() test: any;\n\n  async ngOnChanges(changes) {\n    const size = 40;\n    const canvas = this.canvas.nativeElement;\n\n    const context = canvas.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n\n    const config = this.test.viz;\n    const memory = resolveFuncOrValue(config.memory, this.test, fakeMemory);\n    for (let i = 0; i < memory.length; i++) {\n      const x = i % config.rowSize;\n      const y = Math.floor(i / config.rowSize);\n\n      const color = resolveFuncOrValueForItem(\n        config.color,\n        memory[i],\n        i,\n        config,\n        this.test,\n        '#ddd'\n      );\n      const text = resolveFuncOrValueForItem(\n        config.text,\n        memory[i],\n        i,\n        config,\n        this.test,\n        ''\n      );\n\n      drawCell({ context, size, x, y, color, text });\n    }\n\n    const extras = resolveFuncOrValue(config.extras, this.test, []);\n\n    for (const s of extras) {\n      drawCell({ context, size, ...s });\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/viz.component.css",
    "content": "td {\n  font-size: 30px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/viz.component.html",
    "content": "<slides-grid\n  *ngIf=\"test && test.viz && !test.viz.type\"\n  [test]=\"test\"\n></slides-grid>\n\n<div *ngIf=\"test && test.viz && test.viz.type === 'evolve'\">\n  <kirjs-rule4 [test]=\"test\"></kirjs-rule4>\n  <slides-grid [test]=\"test\"></slides-grid>\n</div>\n\n<div *ngIf=\"test && test.viz && test.viz.type === 'shift'\">\n  <table>\n    <tr>\n      <td>X</td>\n      <td><< 2</td>\n      <td>=</td>\n      <td style=\"text-align: right;\">X00</td>\n      <td>+</td>\n    </tr>\n    <tr>\n      <td>Y</td>\n      <td><< 1</td>\n      <td>=</td>\n      <td style=\"text-align: right;\">Y0</td>\n      <td>+</td>\n    </tr>\n    <tr>\n      <td>Z</td>\n      <td></td>\n      <td></td>\n      <td style=\"text-align: right;\">Z</td>\n    </tr>\n\n    <tr>\n      <td></td>\n      <td></td>\n      <td></td>\n      <td style=\"text-align: right;\">XYZ</td>\n    </tr>\n  </table>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/viz.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { VizComponent } from './viz.component';\n\ndescribe('VizComponent', () => {\n  let component: VizComponent;\n  let fixture: ComponentFixture<VizComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [VizComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(VizComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/viz.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { WebAssemblyTestConfig } from '../runners/wasm-test-runner/wasm-test-runner.component';\nimport { GridConfig } from './grid/grid.component';\n\n@Component({\n  selector: 'slides-viz',\n  templateUrl: './viz.component.html',\n  styleUrls: ['./viz.component.css']\n})\nexport class VizComponent implements OnInit {\n  @Input() config: WebAssemblyTestConfig;\n  @Input() test;\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/viz/viz.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VizComponent } from './viz.component';\nimport { GridComponent } from './grid/grid.component';\nimport { CellularAutomationModule } from '../../../cellular-automation/cellular-automation.module';\n\n@NgModule({\n  declarations: [VizComponent, GridComponent],\n  exports: [VizComponent],\n  imports: [CommonModule, CellularAutomationModule]\n})\nexport class VizModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/wasm-contents/wasm-contents.component.css",
    "content": ".indicator {\n  width: 20px;\n  height: 20px;\n  margin-top: 5px;\n  margin-right: 10px;\n}\n\n.test-result {\n  display: flex;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/wasm-contents/wasm-contents.component.html",
    "content": "<div *ngFor=\"let m of config.milestones\">\n  <div class=\"test-result\">\n    <div>\n      <div *ngIf=\"m.firstFailed\" style=\"display: flex;\">\n        <div>\n          {{ m.name }}\n        </div>\n        <button mat-button (click)=\"loadFunction(m)\">Add</button>\n      </div>\n\n      <div *ngIf=\"!m.firstFailed\">\n        <div style=\"color: #666\">\n          {{ m.name }}\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/wasm-contents/wasm-contents.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WasmContentsComponent } from './wasm-contents.component';\n\ndescribe('WasmContentsComponent', () => {\n  let component: WasmContentsComponent;\n  let fixture: ComponentFixture<WasmContentsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WasmContentsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WasmContentsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/wasm-contents/wasm-contents.component.ts",
    "content": "import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nfunction genGlobalStep() {\n  return {\n    answer: `global $rowSize i32))\n  (global $step (export \"step\") (mut i32) (i32.const 1))\n`,\n    originalCode: /global \\$rowSize i32\\)\\)/\n  };\n}\n\nfunction genMemory(name) {\n  return {\n    answer: `global $rowSize i32))\n  (memory 1)\n  (export \"memory\" (memory 0))\n`,\n    originalCode: /global \\$rowSize i32\\)\\)/\n  };\n}\n\nfunction genTable() {\n  return {\n    answer: `(memory 0))\n\n  (table 8 anyfunc)\n  (type $return_i32 (func (result i32)))\n`,\n    originalCode: /\\(memory 0\\)\\)/\n  };\n}\n\nfunction genElem() {\n  return {\n    answer: `(table 8 anyfunc)\n\n  (func $enable (result i32)\n    (i32.const 1)\n  )\n\n  (func $disable (result i32)\n    (i32.const 0)\n  )\n\n  (elem (i32.const 0)\n    $enable ;; 000\n    $enable ;; 001\n    $enable ;; 010\n    $enable ;; 011\n    $enable ;; 100\n    $enable ;; 101\n    $enable ;; 110\n    $enable ;; 111\n  )\n`,\n    originalCode: /\\(table 8 anyfunc\\)/\n  };\n}\n\nfunction genRowSize() {\n  return {\n    answer: `(module\n  (import \"config\" \"rowSize\" (global $rowSize i32))\n`,\n    originalCode: /\\(module/\n  };\n}\n\nfunction genModule() {\n  return {\n    answer: `(module\n\n)\n`,\n    originalCode: /^/\n  };\n}\n\nfunction genFuncName(name) {\n  return {\n    answer: `\n  (func $${name} (result i32)\n\n  )\n)\n`,\n    originalCode: /\\)\\s*$/\n  };\n}\n\n@Component({\n  selector: 'slides-wasm-contents',\n  templateUrl: './wasm-contents.component.html',\n  styleUrls: ['./wasm-contents.component.css']\n})\nexport class WasmContentsComponent {\n  @Input() config: any;\n  @Output() loadAnswer = new EventEmitter<any>();\n\n  loadFunction(m) {\n    if (m.type === 'func') {\n      this.loadAnswer.emit({\n        ...genFuncName(m.name),\n        ...m\n      });\n    }\n    if (m.type === 'module') {\n      this.loadAnswer.emit({\n        ...genModule(),\n        ...m\n      });\n    }\n\n    if (m.type === 'global.step') {\n      this.loadAnswer.emit({\n        ...genGlobalStep(),\n        ...m\n      });\n    }\n    if (m.type === 'table') {\n      this.loadAnswer.emit({\n        ...genTable(),\n        ...m\n      });\n    }\n    if (m.type === 'elem') {\n      this.loadAnswer.emit({\n        ...genElem(),\n        ...m\n      });\n    }\n    if (m.type === 'global.rowSize') {\n      this.loadAnswer.emit({\n        ...genRowSize(),\n        ...m\n      });\n    }\n\n    if (m.type === 'memory') {\n      this.loadAnswer.emit({\n        ...genMemory(m.name),\n        ...m\n      });\n    }\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/web-assembly.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { WebAssemblyService } from './web-assembly.service';\n\ndescribe('WebAssemblyService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: WebAssemblyService = TestBed.inject(WebAssemblyService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/web-assembly.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\ndeclare const require;\n// TODO(kirjs): Find a better way.\nconst wabt = (function() {\n  // Needed to make umd properly export stuff.\n  const exports = {};\n  const module = {};\n  const code = require('!raw-loader!wabt');\n  return eval(code)();\n})();\n\nexport interface Result<T> {\n  type: 'error' | 'result';\n  value: T | string;\n  error?: string;\n}\n\nfunction wat2wasm(wat) {\n  const module = wabt.parseWat('main.wasm', wat);\n  const binary = module.toBinary({\n    log: false,\n    canonicalize_lebs: false,\n    relocatable: false,\n    write_debug_names: false\n  });\n  return binary.buffer;\n}\n\nexport interface RunConfig {\n  args: any[];\n  imports: any;\n  name: string;\n  memory?: number[];\n}\n\nexport interface RunResult {\n  result: number;\n  exports: { [key: string]: any };\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WebAssemblyService {\n  constructor() {}\n\n  run<T>(wat: string, js: string, wasmConfig: RunConfig) {\n    return new Observable<Result<RunResult>>(subscriber => {\n      try {\n        const wasm = wat2wasm(wat);\n\n        const setResult = (result: RunResult) => {\n          subscriber.next({\n            type: 'result',\n            value: result\n          });\n          subscriber.complete();\n        };\n\n        const setError = (error: string) => {\n          subscriber.next({\n            type: 'error',\n            value: error\n          });\n          subscriber.complete();\n        };\n\n        eval(`\n      (async function(){\n      try {\n        const code = new Uint8Array([${wasm.toString()}]).buffer;\n        ${js}\n          setResult(await run(code, wasmConfig));\n        } catch(e){\n          setError(e.message);\n        }\n      }())\n    `);\n      } catch (e) {\n        subscriber.next({\n          type: 'error',\n          value: e.message\n        });\n        subscriber.complete();\n      }\n    });\n  }\n\n  saveWasmFile(code: string) {\n    function saveByteArray(name, byte) {\n      const blob = new Blob([byte], { type: 'application/wasm' });\n      const link = document.createElement('a');\n      link.href = window.URL.createObjectURL(blob);\n      link.download = name;\n      link.click();\n    }\n\n    saveByteArray('result.wasm', wat2wasm(code));\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-code-mode/webassembly-code-mode.component.css",
    "content": ":host {\n  position: fixed;\n  right: 0;\n  top: 0;\n  background-color: #444;\n  color: #fff;\n  width: 400px;\n  padding: 10px 20px;\n  bottom: 0;\n  overflow: scroll;\n  transition: width 200ms;\n}\n\n.back {\n  margin-bottom: 10px;\n}\n\n.has-meta {\n  text-decoration: underline;\n}\n\n.side {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n.content {\n  overflow: visible;\n  margin-bottom: 200px;\n}\n\nh2 {\n  font-size: 20px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-code-mode/webassembly-code-mode.component.html",
    "content": "<div class=\"side\">\n  <div class=\"breadcrumbs\" *ngIf=\"width\">\n    <ng-container *ngFor=\"let block of blocks; let l = last\">\n      <span [class.has-meta]=\"!!block.meta\"\n        >{{ block.type }} {{ block.name || '' }}</span\n      >\n      <span>{{ l ? '' : ' / ' }}</span>\n    </ng-container>\n  </div>\n  <div *ngIf=\"selectedMode\" class=\"content\">\n    <h1>{{ selectedMode.name }}</h1>\n    <h2 style=\"font-size: 24px;\">{{ selectedMode.description }}</h2>\n\n    <ng-container *ngIf=\"selectedMode.mode === 'module'\">\n      <slides-wasm-contents\n        [config]=\"selectedMode\"\n        (loadAnswer)=\"loadAnswerFromConfig($event)\"\n      ></slides-wasm-contents>\n    </ng-container>\n\n    <ng-container *ngIf=\"selectedMode.mode === 'test'\">\n      <slides-wasm-test-runner\n        [config]=\"selectedMode\"\n      ></slides-wasm-test-runner>\n    </ng-container>\n\n    <ng-container *ngIf=\"selectedMode.mode === 'default'\">\n      <kirjs-webassembly-runner\n        class=\"runner\"\n        [webAssemblyCode]=\"wat\"\n        [jsCode]=\"js\"\n      ></kirjs-webassembly-runner>\n    </ng-container>\n\n    <button\n      mat-button\n      (click)=\"loadAnswerFromConfig(selectedMode)\"\n      *ngIf=\"selectedMode.answer\"\n    >\n      Load answer\n    </button>\n  </div>\n</div>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-code-mode/webassembly-code-mode.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WebassemblyCodeModeComponent } from './webassembly-code-mode.component';\n\ndescribe('WebassemblyCodeModeComponent', () => {\n  let component: WebassemblyCodeModeComponent;\n  let fixture: ComponentFixture<WebassemblyCodeModeComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WebassemblyCodeModeComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WebassemblyCodeModeComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-code-mode/webassembly-code-mode.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges\n} from '@angular/core';\n\ndeclare const require;\n\n@Component({\n  selector: 'slides-webassembly-code-mode',\n  templateUrl: './webassembly-code-mode.component.html',\n  styleUrls: ['./webassembly-code-mode.component.css']\n})\nexport class WebassemblyCodeModeComponent implements OnChanges {\n  @HostBinding('style.width.px') width = 0;\n  @Input() code: any;\n  @Input() sideBarBlocks: any[];\n  @Output() wasmSelectionHighlight = new EventEmitter();\n  @Output() loadAnswer = new EventEmitter<any>();\n\n  wat: string;\n  js: string;\n  mode = 'getIndex';\n  state: any;\n  selectedMode = {};\n  private blocks: any[];\n\n  constructor() {}\n\n  updateCode() {\n    if (this.code) {\n      this.wat = this.code.wat;\n      this.js = this.code.js;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if ('sideBarBlocks' in changes) {\n      this.blocks = this.sideBarBlocks || [];\n      const block = this.blocks.find(b => !!b.meta);\n      this.selectedMode = {};\n      if (block) {\n        this.selectedMode = block.meta;\n      }\n      this.width = Object.keys(this.selectedMode).length > 0 ? 400 : 0;\n    }\n\n    if (this.code) {\n      this.updateCode();\n    }\n  }\n\n  loadAnswerFromConfig(selectedMode: any) {\n    this.loadAnswer.emit(selectedMode);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-playground.component.html",
    "content": "<ng-container *ngIf=\"code\">\n  <code-demo-editor\n    (slidesMonacoWatPosition)=\"selectFunction($event)\"\n    [codeDemoHighlight]=\"selectedMode.highlights\"\n    (slidesMonacoLoadAnswer)=\"update()\"\n    #monacoWatLoadAnswer=\"MonacoWatLoadAnswer\"\n    minLines=\"20\"\n    class=\"webassembly-code\"\n    [class.has-highlight]=\"selectedMode.highlights\"\n    [fontSize]=\"fontSize\"\n    language=\"wat\"\n    [(ngModel)]=\"code.wat\"\n    (ngModelChange)=\"update()\"\n    [lineNumbers]=\"false\"\n    [language]=\"'wat'\"\n  ></code-demo-editor>\n\n  <code-demo-editor\n    (slidesMonacoJsPosition)=\"selectFunction($event)\"\n    [fontSize]=\"fontSize\"\n    class=\"js-code\"\n    [(ngModel)]=\"code.js\"\n    (ngModelChange)=\"update()\"\n    [lineNumbers]=\"false\"\n    [language]=\"'typescript'\"\n  ></code-demo-editor>\n\n  <slides-webassembly-code-mode\n    (loadAnswer)=\"monacoWatLoadAnswer.loadAnswer($event)\"\n    [sideBarBlocks]=\"sideBarBlocks\"\n    [code]=\"code\"\n    (wasmSelectionHighlight)=\"wasmSelectionHighlight = $event\"\n  ></slides-webassembly-code-mode>\n</ng-container>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-playground.component.scss",
    "content": ":host {\n  display: grid;\n  grid-template-columns: 2fr 1fr;\n  grid-template-rows: auto auto;\n  height: 100%;\n  width: 100%;\n  grid-template-areas: 'wa result' 'js result';\n}\n\n.runner {\n  position: fixed;\n  right: 0;\n  top: 0;\n}\n\n.webassembly-code {\n  grid-area: wa;\n}\n\n.js-code {\n  grid-area: js;\n}\n\n::ng-deep {\n  .has-highlight {\n    .view-lines span:not(.highlighted-code) {\n      color: #777;\n    }\n  }\n\n  .highlighted-code {\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-playground.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WebassemblyPlaygroundComponent } from './webassembly-playground.component';\n\ndescribe('WebassemblyPlaygroundComponent', () => {\n  let component: WebassemblyPlaygroundComponent;\n  let fixture: ComponentFixture<WebassemblyPlaygroundComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WebassemblyPlaygroundComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WebassemblyPlaygroundComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-playground.component.ts",
    "content": "import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n  CodeHelperBlock,\n  CodePath,\n  getCodeBlockHandler\n} from './monaco-directives/common';\n\ninterface WebassemblyPlaygroundInputs {\n  wat: string;\n  js: string;\n}\n\n@Component({\n  selector: 'kirjs-webassembly-playground',\n  templateUrl: './webassembly-playground.component.html',\n  styleUrls: ['./webassembly-playground.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => WebassemblyPlaygroundComponent),\n      multi: true\n    }\n  ]\n})\nexport class WebassemblyPlaygroundComponent implements ControlValueAccessor {\n  @Input() modeConfig = {};\n  @Input() fontSize = 30;\n  code: WebassemblyPlaygroundInputs;\n  wasmSelectionHighlight: string;\n  selectedMode = {};\n  sideBarBlocks: CodeHelperBlock[];\n  private onChange: (code: WebassemblyPlaygroundInputs) => void;\n\n  registerOnChange(\n    onChange: (code: WebassemblyPlaygroundInputs) => void\n  ): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(fn: any): void {}\n\n  setDisabledState(isDisabled: boolean): void {}\n\n  writeValue(code: WebassemblyPlaygroundInputs): void {\n    this.code = code;\n  }\n\n  selectFunction(path: CodePath) {\n    // Last block contains all the code of the module\n    if (path.blocks.length === 0) {\n      return;\n    }\n\n    const allCode = path.blocks[path.blocks.length - 1].code;\n    this.sideBarBlocks = path.blocks.map(b => {\n      const langConfig = this.modeConfig[path.type];\n\n      if (!langConfig) {\n        return { ...b };\n      }\n\n      let meta = langConfig[b.type];\n      const name = b.name || 'default';\n      if (meta && meta[name]) {\n        meta = meta[name];\n        meta.name = b.name;\n        meta.type = b.type;\n        const handler =\n          meta.handler || getCodeBlockHandler(path.type, b.type) || (a => a);\n        meta = handler(meta, b.code, allCode);\n        meta.allCode = allCode;\n      }\n\n      return { ...b, meta };\n    });\n\n    const block = this.sideBarBlocks.find(b => !!b.meta);\n    this.selectedMode = {};\n    if (block) {\n      // TODO(kirjs): Uncommit\n      // this.selectedMode = block.meta;\n    }\n  }\n\n  update() {\n    this.code = { ...this.code };\n    this.onChange(this.code);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-runner/webassembly-runner.component.css",
    "content": ":host {\n  background-color: #444444;\n  height: 100%;\n  padding: 10px;\n  display: block;\n}\n\n.result {\n  font-size: 20px;\n  padding: 20px;\n  width: 20px;\n  text-align: center;\n  position: fixed;\n  right: 0;\n  top: 0;\n  background: #007302;\n  color: #fff;\n  opacity: 0.9;\n}\n\n.error {\n  font-size: 20px;\n  padding: 20px;\n  width: 200px;\n  text-align: center;\n  position: fixed;\n  right: 0;\n  top: 0;\n  background: #ff4e3d;\n  color: #fff;\n  opacity: 0.9;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-runner/webassembly-runner.component.html",
    "content": "<ng-container *ngIf=\"result$ | async as result\">\n  <!--  <button (click)=\"saveWasmFile()\" mat-button>Download</button>-->\n  <div [class]=\"result.type\" *ngIf=\"result.value\">{{ result.value }}</div>\n</ng-container>\n<canvas #canvas [width]=\"width\" [height]=\"height\"></canvas>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-runner/webassembly-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WebassemblyRunnerComponent } from './webassembly-runner.component';\n\ndescribe('WebassemblyRunnerComponent', () => {\n  let component: WebassemblyRunnerComponent;\n  let fixture: ComponentFixture<WebassemblyRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WebassemblyRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WebassemblyRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-runner/webassembly-runner.component.ts",
    "content": "import { Component, Input, OnChanges, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Result, RunResult, WebAssemblyService } from '../web-assembly.service';\n\n@Component({\n  selector: 'kirjs-webassembly-runner',\n  templateUrl: './webassembly-runner.component.html',\n  styleUrls: ['./webassembly-runner.component.css']\n})\nexport class WebassemblyRunnerComponent implements OnChanges {\n  @Input() webAssemblyCode: string;\n  @Input() jsCode: string;\n  @Input() width = 400;\n  @Input() height = 1000;\n\n  @ViewChild('canvas', { static: true }) canvas;\n\n  readonly result$ = new Subject<Result<RunResult>>();\n\n  constructor(private readonly webAssemblyService: WebAssemblyService) {}\n\n  async ngOnChanges(changes) {\n    const canvas = this.canvas.nativeElement;\n    canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);\n    this.webAssemblyService\n      .run(this.webAssemblyCode, this.jsCode, canvas)\n      .subscribe(this.result$);\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly-playground/webassembly-runner/webassembly-runner.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebassemblyRunnerComponent } from './webassembly-runner.component';\n\n@NgModule({\n  declarations: [WebassemblyRunnerComponent],\n  exports: [WebassemblyRunnerComponent],\n  imports: [CommonModule]\n})\nexport class WebassemblyRunnerModule {}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting>\n  <kirjs-new-progress-bar\n    (fontSizeChange)=\"fontSize = fontSize + $event\"\n    [fontSize]=\"fontSize\"\n    title=\"CA ❤ WA\"\n  ></kirjs-new-progress-bar>\n  <div *slide class=\"center\" id=\"start\">\n    <h2>Cellular Automata</h2>\n    <h2>Web assembly</h2>\n    <h1>@kirjs</h1>\n  </div>\n\n  <div *slide class=\"center\" id=\"previously\">\n    <h1>Previously In @BibyDigital's talk...</h1>\n    <div class=\"milica img\"></div>\n    <h2>(Or WebAssembly in 15 seconds)</h2>\n  </div>\n\n  <div *slide class=\"center\" id=\"wa\">\n    <h1>🔥 Web Assembly 🔥</h1>\n    <h2>Not exactly an assembly</h2>\n    <h2>Also not only for web</h2>\n  </div>\n\n  <div *slide class=\"center\" id=\"wa-2\">\n    <h1>Web Assembly</h1>\n    <h1>Intermediate representation</h1>\n    <h2>Compile from (almost) any typed language</h2>\n    <h2>Run in your browser, from other language, or in a cloud...</h2>\n  </div>\n\n  <div *slide class=\"center\" id=\"wa-types\">\n    <h2>Web Assembly can only operate on 4 types</h2>\n    <ul>\n      <li>i32</li>\n      <li>i64</li>\n      <li>f32</li>\n      <li>f64</li>\n    </ul>\n  </div>\n\n  <div *slide class=\"center\" id=\"is-in-binary\">\n    <h1>Web Assembly</h1>\n    <h2>Has a binary representation</h2>\n    <kirjs-wasm-binary #binaryc style=\"display: none\"></kirjs-wasm-binary>\n    <h2 style=\"word-break: break-all\">\n      {{ binaryc.binary.slice(0, 400) }}\n    </h2>\n  </div>\n\n  <div *slide class=\"center\" id=\"wat\">\n    <h1>Web Assembly</h1>\n    <h2>...and a text representation. It is stack based</h2>\n    <h2>\n      <code-demo-editor\n        [(ngModel)]=\"examples.wat\"\n        [fontSize]=\"30\"\n        [lineNumbers]=\"false\"\n        language=\"wat\"\n        style=\"height: 100px;margin: 0 auto;width: 800px;margin-top: 30px;\"\n      ></code-demo-editor>\n    </h2>\n  </div>\n\n  <div *slide class=\"center\" id=\"wa-3\">\n    <h2>Cellular Automata</h2>\n  </div>\n\n  <div *slide class=\"center\" id=\"single-cell\">\n    <slides-single-cell></slides-single-cell>\n  </div>\n\n  <div *slide class=\"center\" id=\"grid\">\n    <slides-single-grid></slides-single-grid>\n  </div>\n\n  <div *slide id=\"set-of-cells\">\n    <h1>Grid</h1>\n    <kirjs-board\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 0, 0, 0, 0, 0]]\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"cells-with-state\">\n    <h1>Rules</h1>\n    <div class=\"rules\">\n      <div class=\"rule\" style=\"margin-right: 50px;\">\n        <kirjs-board [pattern]=\"[[0]]\"></kirjs-board>\n        <div class=\"arrow\" style=\"text-align: center;\">⇩</div>\n        <kirjs-board [pattern]=\"[[1]]\"></kirjs-board>\n      </div>\n      <div class=\"rule\">\n        <kirjs-board [pattern]=\"[[1]]\"></kirjs-board>\n        <div class=\"arrow\" style=\"text-align: center;\">⇩</div>\n        <kirjs-board [pattern]=\"[[0]]\"></kirjs-board>\n      </div>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div (click)=\"board1.playing = !board1.playing\" class=\"play\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 1, 0, 0, 0, 0]]\"\n      [transform]=\"examples.intro.inverse\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"more-rules\">\n    <h1>Rules</h1>\n    <div class=\"rules\">\n      <kirjs-rule3 [arrow]=\"true\" [rule]=\"16\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div (click)=\"board1.playing = !board1.playing\" class=\"play\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [delay]=\"150\"\n      [pattern]=\"[[0, 0, 0, 0, 1, 0, 0, 0, 0]]\"\n      [transform]=\"examples.intro.inPlace16\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide id=\"more-rules-90\">\n    <h1>Rules</h1>\n    <div class=\"rules\">\n      <kirjs-rule3 [arrow]=\"true\" [rule]=\"30\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div (click)=\"board1.playing = !board1.playing\" class=\"play\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [delay]=\"150\"\n      [pattern]=\"[[0, 0, 0, 0, 1, 0, 0, 0, 0]]\"\n      [transform]=\"examples.intro.inPlace90\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide class=\"center\" id=\"feynman\">\n    <h1>Rule 30:</h1>\n    <div class=\"img feynman\"></div>\n  </div>\n\n  <div *slide class=\"center\" id=\"nks\">\n    <h1>Book rec #1:</h1>\n    <h2>\n      <a\n        href=\"https://blog.stephenwolfram.com/2017/05/a-new-kind-of-science-a-15-year-view/\"\n      >\n        New kind of science by Stephen Wolfram 🆓</a\n      >\n    </h2>\n    <div class=\"nks img\"></div>\n  </div>\n\n  <div *slide class=\"center\" id=\"feynman-book\">\n    <h1>Book rec #2:</h1>\n    <h2>Surely You're Joking, Mr. Feynman! by Richard Feynman</h2>\n    <div class=\"joking img\"></div>\n  </div>\n\n  <div *slide class=\"center\" id=\"feynman-30\">\n    <blockquote>\n      Well, we'd just been crawling around the floor—with help from some other\n      people—trying to use meter rules to measure some feature of a giant\n      printout of it. And Feynman took me aside, rather conspiratorially, and\n      said, \"Look, I just want to ask you one thing: how did you know rule 30\n      would do all this crazy stuff?\" \"You know me,\" I said. \"I didn't. I just\n      had a computer try all the possible rules. And I found it.\" \"Ah,\" he said,\n      \"now I feel much better. I was worried you had some way to figure it out.\"\n    </blockquote>\n  </div>\n\n  <div *slide id=\"two-d-30\">\n    <h1>Rule 30</h1>\n    <div class=\"rules\">\n      <kirjs-rule3 [arrow]=\"true\" [rule]=\"30\"></kirjs-rule3>\n    </div>\n\n    <h1 class=\"grid-header\">\n      Grid\n      <div class=\"play\">\n        {{ board1.playing ? '❚❚' : '▶' }}\n      </div>\n    </h1>\n\n    <kirjs-board\n      #board1\n      [cellHeight]=\"20\"\n      [cellWidth]=\"20\"\n      [delay]=\"50\"\n      [pattern]=\"[patterns.rule90Start]\"\n      [transform]=\"examples.intro.twoD90\"\n    ></kirjs-board>\n  </div>\n\n  <div *slide class=\"center\" id=\"to-see-rule-30\">\n    <h1>Let's build it in WebAssembly!</h1>\n  </div>\n\n  <div *slide id=\"web-assembly-start\">\n    <kirjs-webassembly-playground\n      [(ngModel)]=\"code.add\"\n      [fontSize]=\"fontSize\"\n      [modeConfig]=\"addModeConfig\"\n    ></kirjs-webassembly-playground>\n  </div>\n\n  <div *slide class=\"center\" id=\"stack-pre\">\n    <h1>3 minute intro</h1>\n    <h2>Into stack-based programming</h2>\n  </div>\n  <div *slide class=\"center\" id=\"stack\">\n    <p>\n      <b>Stack</b> is a data structure, serving as a collection. Here's a stack\n      of fruit:\n    </p>\n\n    <slides-simple-stack value=\"🍏🍏🍏🍏🍏🍓\"></slides-simple-stack>\n\n    <p>All operations are possible only with the last element of the stack.</p>\n  </div>\n\n  <div *slide class=\"center\" id=\"pop\">\n    <p>First operation is called <b>pop</b>, it removes the last element.</p>\n    <slides-stack-game [level]=\"levels.pop\"></slides-stack-game>\n  </div>\n\n  <div *slide class=\"center\" id=\"push\">\n    <p>\n      The other operation is <b>push</b>. It adds an element on top of the\n      stack.\n    </p>\n    <slides-stack-game [level]=\"levels.push\"></slides-stack-game>\n  </div>\n\n  <div *slide class=\"center\" id=\"peek\">\n    <p>\n      Some implementations also have a <b>peek</b> operation. It tells you what\n      top element on the stack is. You can try it below:\n    </p>\n    <slides-simple-stack value=\"🍏🍋\"></slides-simple-stack>\n    <div class=\"button-wrapper\">\n      <slides-stack-function-button\n        (click)=\"itIsALemon = true\"\n        [func]=\"{ name: 'peek' }\"\n      ></slides-stack-function-button>\n    </div>\n    <div *ngIf=\"itIsALemon\">Congrats! It is a 🍋</div>\n  </div>\n\n  <div *slide class=\"center\" id=\"practice\">\n    <p>Let's practice!</p>\n    <p>\n      Use the commands you know already to get a stack of:\n      <slides-simple-stack value=\"🍓🍋\"></slides-simple-stack>\n    </p>\n    <slides-stack-game [level]=\"levels.together\"></slides-stack-game>\n  </div>\n\n  <div *slide class=\"center\" id=\"test\">\n    <slides-stack-test></slides-stack-test>\n  </div>\n\n  <div *slide class=\"center\" id=\"stack-machines\">\n    <p>\n      Stack machine is one of the fundamental principles used in JVM Java Byte\n      Code, WebAssembly byte code\n    </p>\n  </div>\n\n  <div *slide class=\"center\" id=\"instructions\">\n    <p>\n      Stack machine offers various instructions that can pop and then push\n      multiple element on the stack\n    </p>\n    <p>\n      For example (🌲🍏)=>🍍 takes two elements from the stack (Pine and Apple)\n      and pushes a 🍍 back\n    </p>\n  </div>\n\n  <div *slide class=\"center\" id=\"lemonade\">\n    <p>Now use the instructions below to prepare a lemonade drink:</p>\n    <slides-stack-game [level]=\"levels.lemonade\"></slides-stack-game>\n  </div>\n\n  <div *slide id=\"coding-time\">\n    <h2>Coding time! The plan:</h2>\n    <kirjs-board\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 1, 0, 0, 1, 1, 0, 0, 0]]\"\n    ></kirjs-board>\n    <kirjs-board\n      [cellHeight]=\"120\"\n      [cellWidth]=\"120\"\n      [pattern]=\"[[0, 0, 0, 0, 0, 0, 0, 0, 0]]\"\n    ></kirjs-board>\n\n    <div class=\"rules\" style=\"margin-top: 40px;\">\n      <kirjs-rule3 [arrow]=\"true\" [indexes]=\"true\" [rule]=\"90\"></kirjs-rule3>\n    </div>\n  </div>\n\n  <div *slide id=\"use-wat\">\n    <kirjs-webassembly-playground\n      [(ngModel)]=\"code.simple\"\n      [fontSize]=\"fontSize\"\n      [modeConfig]=\"modeConfig\"\n    ></kirjs-webassembly-playground>\n  </div>\n\n  <div *slide id=\"result\">\n    <slides-full-screen-runner [code]=\"code.simple\"></slides-full-screen-runner>\n  </div>\n\n  <div *slide id=\"cam\">\n    <h1>cambridge</h1>\n    <div class=\"img img-30\"></div>\n    <div class=\"img img-30-2\"></div>\n  </div>\n\n  <div *slide id=\"binary-1\">\n    <!--    https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md-->\n    <h2>\n      <a href=\"https://wasdk.github.io/wasmcodeexplorer/\">wasmcodeexplorer</a>\n    </h2>\n    <kirjs-wasm-binary></kirjs-wasm-binary>\n  </div>\n\n  <div *slide class=\"center\" id=\"wasm-playgroud\">\n    <h1><a href=\"https://webassembly.studio/\">webassembly.studio</a></h1>\n  </div>\n\n  <div *slide class=\"center\" id=\"thanks\">\n    <h1>Thanks</h1>\n    <h2>Stefan Fejes</h2>\n    <h2>ArmadaJS team</h2>\n  </div>\n  <div *slide class=\"center\" id=\"end\">\n    <h2>Cellular Automata</h2>\n    <h2>Web assembly</h2>\n    <h1>@kirjs</h1>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly.component.scss",
    "content": ":host ::ng-deep .slide.slide > div.center {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 40px;\n  padding: 0 20vw;\n\n  p {\n    font-weight: 300;\n  }\n}\n\n::ng-deep {\n  font-weight: 300;\n}\n\n.button-wrapper {\n  margin: 20px 0;\n}\n\n.rules {\n  display: flex;\n\n  .rule {\n    .arrow {\n      margin-bottom: 8px;\n    }\n  }\n}\n\n.grid-header {\n  display: flex;\n  margin-top: 20px;\n\n  .play {\n    margin-left: 8px;\n  }\n}\n\n.img {\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position: center center;\n  box-shadow: 0 0 10px #444 inset;\n}\n\n.img.milica {\n  background-image: url('./pics/milica.jpg');\n  margin-top: 30px;\n  margin-bottom: 50px;\n  width: 400px;\n  height: 400px;\n  border-radius: 50%;\n}\n\n.img.nks {\n  background-image: url('./pics/nks.jpg');\n  margin-top: 30px;\n  margin-bottom: 50px;\n  width: 800px;\n  height: 800px;\n}\n\n.img.feynman {\n  background-image: url('./pics/feynman.png');\n  margin-top: 30px;\n  margin-bottom: 50px;\n  width: 800px;\n  height: 800px;\n}\n\n.img.joking {\n  background-image: url('./pics/joking.jpg');\n  margin-top: 30px;\n  margin-bottom: 50px;\n  width: 800px;\n  height: 800px;\n}\n\n.key-items {\n  display: flex;\n  text-align: center;\n\n  .item {\n    flex: 1;\n    font-size: 40px;\n  }\n}\n\n.img-30 {\n  background-image: url('./pics/30.png');\n  margin-top: 30px;\n  margin-bottom: 50px;\n  width: 800px;\n  height: 800px;\n}\n\n.img-30-2 {\n  background-image: url('./pics/30-2.png');\n  margin-top: 30px;\n  margin-bottom: 50px;\n  width: 800px;\n  height: 800px;\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { WebassemblyComponent } from './webassembly.component';\n\ndescribe('WebassemblyComponent', () => {\n  let component: WebassemblyComponent;\n  let fixture: ComponentFixture<WebassemblyComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [WebassemblyComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(WebassemblyComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport './monaco-wat';\nimport { getIndex } from './tests/get-index';\nimport { rotate } from './tests/rotate';\nimport { shiftTests } from './tests/shift-tests';\nimport { getCellScoreTests } from './tests/get-cell-score';\nimport { addTests } from './tests/add-tests';\nimport { loadCellTests } from './tests/load-cell';\nimport { loadPreviousCellTests } from './tests/load-previous-cell';\nimport { storeCellTests } from './tests/store-cell-tests';\nimport { evolveCellTests } from './tests/evolve-cell';\nimport { enableTests } from './tests/enable-tests';\nimport { disableTests } from './tests/disable-tests';\nimport { evolveRowTests } from './tests/evolve-row';\nimport { evolveTests } from './tests/evolve';\nimport { extractAnswers } from './utils';\nimport { Level } from '../stack/stack-game/stack-game.component';\n\ndeclare const require;\n\nexport const wasmAnswers = extractAnswers(\n  require('!!raw-loader!./samples/answer.wat')\n);\n\nfunction generateArray(size = 89, callback) {\n  const result = Array.from(new Array(size)).map((a, i) => 0);\n  return (callback || (a => a))(result);\n}\n\nfunction inPlace(rule) {\n  const map = (256 + rule)\n    .toString(2)\n    .substr(1)\n    .split('')\n    .map(Number)\n    .reduce((a, v, i) => {\n      a[(15 - i).toString(2).substr(1)] = v;\n      return a;\n    }, {});\n\n  function transformRow(row) {\n    const result = [];\n    for (let i = 0; i < row.length; i++) {\n      const a1 = row[(row.length + i - 1) % row.length].toString();\n      const a2 = row[i].toString();\n      const a3 = row[(i + 1) % row.length].toString();\n      result[i] = [map[a1 + a2 + a3]];\n    }\n    return result;\n  }\n\n  return function(grid) {\n    return grid.map(transformRow);\n  };\n}\n\nfunction transform2d(rule) {\n  const survive = rule.survive.reduce((a, v) => {\n    a[v] = true;\n    return a;\n  }, {});\n  const born = rule.born.reduce((a, v) => {\n    a[v] = true;\n    return a;\n  }, {});\n\n  return function(grid) {\n    return grid.map((row, y) => {\n      return row.map((cell, x) => {\n        const px = (row.length + x - 1) % row.length;\n        const nx = (x + 1) % row.length;\n        const py = (grid.length + y - 1) % grid.length;\n        const ny = (y + 1) % grid.length;\n\n        const score =\n          grid[py][px] +\n          grid[py][x] +\n          grid[py][nx] +\n          grid[y][px] +\n          grid[y][nx] +\n          grid[ny][px] +\n          grid[ny][x] +\n          grid[ny][nx];\n\n        if ((cell === 0 && born[score]) || (cell === 1 && survive[score])) {\n          return 1;\n        }\n\n        return 0;\n      });\n    });\n  };\n}\n\nfunction appendTransform(rule) {\n  const transform = inPlace(rule);\n  return function(grid) {\n    const lastRow = grid[grid.length - 1];\n    grid.push(transform([lastRow])[0]);\n    return grid;\n  };\n}\n\nconst rand = Math.floor(Math.random() * 255);\n\nconst randomRules = new Array(8).fill(0).reduce(\n  (a, v, i) => {\n    if (Math.random() < 0.3) {\n      a.survive.push(i);\n    }\n    if (Math.random() < 0.3) {\n      a.born.push(i);\n    }\n    return a;\n  },\n  { survive: [], born: [] }\n);\n\nconst gameOfLifeRules = { survive: [2, 3], born: [3] };\nconst gameOfLife = transform2d(gameOfLifeRules);\nconst randomPattern = new Array(30)\n  .fill(0)\n  .map(() => new Array(60).fill(0).map(() => (Math.random() < 0.3 ? 1 : 0)));\nconst randomPatternSparce = new Array(30)\n  .fill(0)\n  .map(() => new Array(60).fill(0).map(() => (Math.random() < 0.04 ? 1 : 0)));\n\nconst labyrynthRules = { survive: [0, 1, 2, 3], born: [1] };\n\nconst labRules4 = { survive: [0, 1, 2, 3, 4], born: [1] };\nconst labRules5 = { survive: [0, 1, 2, 3, 4, 5], born: [1] };\nconst labRules6 = { survive: [0, 1, 2, 3, 4, 5, 6], born: [1] };\n\n@Component({\n  selector: 'kirjs-webassembly',\n  templateUrl: './webassembly.component.html',\n  styleUrls: ['./webassembly.component.scss']\n})\nexport class WebassemblyComponent implements OnInit {\n  patterns = {\n    rule90Start: generateArray(89, a => {\n      a[44] = 1;\n      return a;\n    })\n  };\n\n  fontSize = 30;\n  examples = {\n    wat: `(func $add\n    (param $x i32)\n    (param $y i32)\n    (result i32)\n  local.get $x\n  local.get $y\n  i32.add\n)`,\n    intro: {\n      inverse(pattern) {\n        return pattern.map(line => line.map(cell => (cell + 1) % 2));\n      },\n      rand,\n      inPlace16: inPlace(16),\n      inPlace90: inPlace(90),\n      twoD18: appendTransform(18),\n      twoD30: appendTransform(30),\n      twoD90: appendTransform(90),\n      twoD110: appendTransform(110),\n      twoDRand: appendTransform(rand),\n\n      pattern: [\n        [0, 0, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 1, 0, 0, 0, 0]\n      ]\n    },\n    life: {\n      randomRules,\n      random: transform2d(randomRules),\n      gameOfLifeRules,\n      gameOfLife,\n      labyrynthRules: labyrynthRules,\n      labyrynth: transform2d(labyrynthRules),\n      labRules4,\n      labyrynth4: transform2d(labRules4),\n      labRules5,\n      labyrynth5: transform2d(labRules5),\n      labRules6,\n      labyrynth6: transform2d(labRules6),\n      pattern: {\n        randomPattern,\n        randomPatternSparce,\n        stillLife: [\n          [0, 0, 0, 0],\n          [0, 1, 1, 0],\n          [0, 1, 1, 0],\n          [0, 0, 0, 0]\n        ]\n      }\n    }\n  };\n\n  code = {\n    add: {\n      wat: `(module\n    (func $add\n        (param $x i32)\n        (param $y i32)\n        (result i32)\n\n\n    )\n)\n`,\n      js: require('!!raw-loader!./samples/base.js')\n    },\n    simple: {\n      wat: require('!!raw-loader!./samples/base.wat'),\n      js: require('!!raw-loader!./samples/base.js')\n    },\n    brIf: {\n      wa: `(module\n  (func $add (param $lhs i32) (param $rhs i32) (result i32)\n    (local $l1 i32)\n      i32.const 33\n      set_local $l1\n\n      block $lol\n        i32.const 1\n        i32.const 1\n        i32.eq\n        br_if $lol\n        i32.const 22\n        set_local $l1\n      end\n      get_local $l1\n    )\n  (export \"add\" (func $add))\n)\n`\n    }\n  };\n\n  itIsALemon = false;\n\n  addModeConfig = {\n    wat: {\n      func: {\n        add: {\n          description: 'Takes two numbers and adds them together',\n          tests: addTests\n        }\n      }\n    }\n  };\n  modeConfig = {\n    wat: {\n      elem: {\n        default: {}\n      },\n      module: {\n        default: {\n          milestones: [\n            { type: 'func', name: 'rotate' },\n            { type: 'global.rowSize', name: 'rowSize' },\n            { type: 'func', name: 'getIndex' },\n            { type: 'global.step', name: 'step' },\n            { type: 'memory', name: 'memory' },\n            { type: 'func', name: 'loadCell' },\n            { type: 'func', name: 'storeCell' },\n            { type: 'func', name: 'shift' },\n            { type: 'func', name: 'loadPreviousCell' },\n            { type: 'func', name: 'getCellScore' },\n            { type: 'table', name: 'table' },\n            { type: 'elem', name: 'elem' },\n            { type: 'func', name: 'evolveCell' },\n            { type: 'func', name: 'evolveRow' },\n            { type: 'func', name: 'evolve' }\n          ]\n        }\n      },\n      func: {\n        add: {\n          description: 'Takes two numbers and adds them together',\n          tests: addTests\n        },\n        rotate: {\n          description:\n            'Takes an index, and rotates it to be within the range of the line',\n          tests: rotate\n        },\n        getIndex: {\n          description:\n            'Takes X and Y coordinate and returns index in the memory.',\n          tests: getIndex\n        },\n        loadCell: {\n          description:\n            'Takes a position, calculates appropriate index and retrieves the data from memory',\n          tests: loadCellTests\n        },\n        storeCell: {\n          description: 'Stores single cell value im the memory',\n          tests: storeCellTests\n        },\n        shift: {\n          description:\n            'Takes 3 0|1 value and generates 3 bit number merging them together',\n          tests: shiftTests\n        },\n        loadPreviousCell: {\n          description: 'Loads previous cell',\n          tests: loadPreviousCellTests\n        },\n        getCellScore: {\n          description: 'Looks for 3 cells before, and gets a number 0-7',\n          tests: getCellScoreTests\n        },\n        evolveCell: {\n          description:\n            'Evolves single cell based on values of the previous cells',\n          tests: evolveCellTests\n        },\n        evolveRow: {\n          description:\n            'Evolves the whole row based on valueds of the previous row',\n          tests: evolveRowTests\n        },\n        evolve: {\n          description: 'Evolves the whole thing N generations',\n          tests: evolveTests\n        },\n\n        enable: {\n          description: 'This should always return 1',\n          tests: enableTests\n        },\n        disable: {\n          description: 'This should always return 0',\n          tests: disableTests\n        }\n      }\n    },\n    ts: {\n      SourceFile: {\n        default: {}\n      },\n      FunctionDeclaration: {\n        default: {}\n      }\n    }\n  };\n\n  levels: Record<string, Level> = {\n    push: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '🍏',\n          name: 'push 🍏'\n        },\n        {\n          inputs: '',\n          outputs: '🍋',\n          name: 'push 🍋'\n        }\n      ],\n      inputs: '',\n      outputs: '🍏🍋🍏'\n    },\n\n    pop: {\n      functions: [\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        }\n      ],\n      inputs: '🍏🍏🍏🍏🍏',\n      outputs: '🍏'\n    },\n\n    together: {\n      functions: [\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        },\n        {\n          inputs: '',\n          outputs: '🍓',\n          name: 'push 🍓'\n        },\n        {\n          inputs: '',\n          outputs: '🍋',\n          name: 'push 🍋'\n        }\n      ],\n      inputs: '🍏🍏',\n      outputs: '🍓🍋'\n    },\n\n    lemonade: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '💦'\n        },\n        {\n          inputs: '',\n          outputs: '🍋'\n        },\n        {\n          inputs: '',\n          outputs: '🍒'\n        },\n        {\n          inputs: '🍒💦🍋',\n          outputs: '🍹'\n        }\n      ],\n      inputs: '',\n      outputs: '🍹'\n    },\n    level1: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '🍏🍏'\n        },\n        {\n          inputs: '',\n          outputs: '🍋'\n        },\n        {\n          inputs: '🍋🍋',\n          outputs: '🍒'\n        },\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        }\n      ],\n      inputs: '🍏',\n      outputs: '🍒'\n    },\n    level2: {\n      functions: [\n        {\n          inputs: '',\n          outputs: '🍏',\n          name: 'push 🍏'\n        },\n        {\n          inputs: '🍏🍏',\n          outputs: '🍋'\n        },\n        {\n          inputs: '🍋🍋',\n          outputs: '🍒'\n        },\n        {\n          inputs: '＊',\n          outputs: '',\n          name: 'pop'\n        }\n      ],\n      inputs: '🍏',\n      outputs: '🍒'\n    }\n  };\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/kirjs/src/app/modules/webassembly/webassembly.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { RouterModule } from '@angular/router';\nimport { WebassemblyComponent } from './webassembly.component';\nimport { WebassemblyPlaygroundComponent } from './webassembly-playground/webassembly-playground.component';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FormsModule } from '@angular/forms';\nimport { StackModule } from '../stack/stack.module';\nimport { WasmBinaryComponent } from './wasm-binary/wasm-binary.component';\nimport { BinaryViewModule } from '../binary/binary-view/binary-view.module';\nimport { BinaryInlineModule } from '../binary/binary-inline/binary-inline.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { WebassemblyCodeModeComponent } from './webassembly-playground/webassembly-code-mode/webassembly-code-mode.component';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ErrorMessageComponent } from './webassembly-playground/error-message/error-message.component';\nimport { WasmTestRunnerComponent } from './webassembly-playground/runners/wasm-test-runner/wasm-test-runner.component';\nimport { MonacoScrollingDirective } from './webassembly-playground/monaco-directives/monaco-scrolling.directive';\nimport { MonacoJsPositionDirective } from './webassembly-playground/monaco-directives/monaco-js-position.directive';\nimport { MonacoWatPositionDirective } from './webassembly-playground/monaco-directives/monaco-wat-position.directive';\nimport { MonacoWatLoadAnswerDirective } from './webassembly-playground/monaco-directives/monaco-load-answer.directive';\nimport { VizModule } from './webassembly-playground/viz/viz.module';\nimport { WasmContentsComponent } from './webassembly-playground/wasm-contents/wasm-contents.component';\nimport { CaModule } from './ca/ca.module';\nimport { CellularAutomationModule } from '../cellular-automation/cellular-automation.module';\nimport { NewProgressBarModule } from '../ast/new-progress-bar/new-progress-bar.module';\nimport { FullScreenRunnerModule } from './full-screen-runner/full-screen-runner.module';\nimport { WebassemblyRunnerModule } from './webassembly-playground/webassembly-runner/webassembly-runner.module';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(WebassemblyComponent));\n\n@NgModule({\n  declarations: [\n    WebassemblyComponent,\n    WebassemblyPlaygroundComponent,\n    WasmBinaryComponent,\n    WebassemblyCodeModeComponent,\n    ErrorMessageComponent,\n    MonacoWatPositionDirective,\n    WasmTestRunnerComponent,\n    MonacoScrollingDirective,\n    MonacoJsPositionDirective,\n    MonacoWatLoadAnswerDirective,\n    WasmContentsComponent\n  ],\n  exports: [],\n  imports: [\n    StackModule,\n    MatButtonModule,\n    CommonModule,\n    SlidesModule,\n    CodeDemoModule,\n    FormsModule,\n    routes,\n    BinaryViewModule,\n    BinaryInlineModule,\n    SyncDirectivesModule,\n    VizModule,\n    CaModule,\n    CellularAutomationModule,\n    NewProgressBarModule,\n    FullScreenRunnerModule,\n    WebassemblyRunnerModule\n  ]\n})\nexport class WebassemblyModule {}\n"
  },
  {
    "path": "apps/kirjs/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/assets/runner/index.html",
    "content": ""
  },
  {
    "path": "apps/kirjs/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n"
  },
  {
    "path": "apps/kirjs/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n\n/*\n * In development mode, for easier debugging, you can ignore zone related error\n * stack frames such as `zone.run`/`zoneDelegate.invokeTask` by importing the\n * below file. Don't forget to comment it out in production mode\n * because it will have a performance impact when errors are thrown\n */\nimport 'zone.js/dist/zone-error'; // Included with Angular CLI.\n"
  },
  {
    "path": "apps/kirjs/src/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Kirjs</title>\n    <base href=\"/\" />\n    <link\n      href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\"\n    />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\" />\n  </head>\n  <body>\n    <kirjs-main></kirjs-main>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/kirjs/src/locale/kirjs.ru.xtb",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE translationbundle [\n<!ELEMENT translationbundle (translation)*>\n<!ATTLIST translationbundle lang CDATA #REQUIRED>\n\n<!ELEMENT translation (#PCDATA|ph)*>\n<!ATTLIST translation id CDATA #REQUIRED>\n<!ATTLIST translation desc CDATA #IMPLIED>\n<!ATTLIST translation meaning CDATA #IMPLIED>\n<!ATTLIST translation xml:space (default|preserve) \"default\">\n\n<!ELEMENT ph (#PCDATA|ex)*>\n<!ATTLIST ph name CDATA #REQUIRED>\n\n<!ELEMENT ex (#PCDATA)>\n]>\n<translationbundle lang=\"ru\">\n  <translation id=\"introduction\">Вступление</translation>\n  <translation id=\"297943560492772582\">@kirjs</translation>\n  <translation id=\"2822488826106826578\">JavaScript ❤️ Бинарные Данные</translation>\n  <translation id=\"199796482994564583\">Двоичная система спрятана под большим количеством слоев абстракции</translation>\n  <translation id=\"4149332726076272416\">В этом выступлении</translation>\n  <translation id=\"4749058246803727552\">Давайте посмотрим что внутри  <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>gif<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"3597932961286677186\">Заголовок</translation>\n  <translation id=\"8989873612204787281\">Содержит информацию о размерах картинки, наличии и конфигурации глобальной палитры, и прозрачности.</translation>\n  <translation id=\"534812795985958361\">Палитра (наличие и размер настраиваются в заголовке)</translation>\n  <translation id=\"3938479736078443805\">Содержит проиндексированные цвета</translation>\n  <translation id=\"3548048205965117162\">Расширения (необязательны)</translation>\n  <translation id=\"489855084993879246\">Код самой картинки</translation>\n  <translation id=\"5838521644867201449\">Блок с графическими свйоствами картинки</translation>\n  <translation id=\"931491989303959259\">Настройки анимации</translation>\n  <translation id=\"3807699453257291879\">Комментарии</translation>\n  <translation id=\"5510336295069197234\">Конвертация из двоичной системы исчисления в десятичную с помощью JavaScript </translation>\n  <translation id=\"8654618120168558452\">Конвертация из десятичной системы счисления в двоичную с помощью JavaScript</translation>\n  <translation id=\"6328086056731380089\">Конвертация из двоичной системы счисления в шестнадцатиричную с помощью JavaScript</translation>\n  <translation id=\"3610726963919885246\">Конвертация из шестнадцатиричной системы счисления в  двоичную с помощью JavaScript</translation>\n  <translation id=\"4735883542091123359\">ПЕЉМЕЊ!!!</translation>\n  <translation id=\"5377037856556160771\">Получение charCode из строки</translation>\n  <translation id=\"7025121863698322477\">Получение символа из charCode\n</translation>\n  <translation id=\"7931653459498650396\">Парсим бинарный файл (с помощью <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>binary-parser<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</translation>\n  <translation id=\"3731160866778187040\">Можем ли мы использовать <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>бинарные данные <ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> вместо <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>JSON<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>?</translation>\n  <translation id=\"7852133356596779874\">Размер после сериализации</translation>\n  <translation id=\"2742664813202759813\">JSON</translation>\n  <translation id=\"2044194570562448530\">Больше</translation>\n  <translation id=\"793068249425686908\">Бинарные данные</translation>\n  <translation id=\"7774873943331135334\">Меньше</translation>\n  <translation id=\"641664010209157570\">Скорость сериализации</translation>\n  <translation id=\"2985059781575755822\">Медленнее</translation>\n  <translation id=\"659233733431508399\">Быстрее</translation>\n  <translation id=\"675502942307621158\">Отладка</translation>\n  <translation id=\"74488306490404477\">Простота понимания</translation>\n  <translation id=\"7679521196114828675\">Понятно без сторонних инструментов</translation>\n  <translation id=\"4290458654577941433\">Необходимы специальные инструменты</translation>\n  <translation id=\"9105483695831392309\">Интсрументы</translation>\n  <translation id=\"2186589438043615872\">В JS работает из коробки</translation>\n  <translation id=\"1721827980245086554\">Схема</translation>\n  <translation id=\"2979028920132715625\">Нету заданной схемы</translation>\n  <translation id=\"7108226176298610135\">Нужна четкая схема (чаще всего)</translation>\n  <translation id=\"8657754663266965278\">Бесплатная проверка типов </translation>\n  <translation id=\"9170265368266877102\">Бесплатная валидация</translation>\n  <translation id=\"1257397640951538252\">Существующие решения</translation>\n  <translation id=\"8643348940092477927\"><ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Protocol buffers<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> (Google)</translation>\n  <translation id=\"5480246874668908377\"><ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Flatbuffers<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> (Google)</translation>\n  <translation id=\"3516009209791088102\"><ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Thrift<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> (Apache/Facebook)</translation>\n  <translation id=\"501698005128033255\">Заголовки бинарных файлов\n</translation>\n  <translation id=\"497452967189052368\">Gif - GIF87a (или GIF89a)</translation>\n  <translation id=\"734429310122802487\">Jpeg - начинается с ‘FF D8‘ и заканчивается ‘FF D9&apos;</translation>\n  <translation id=\"6451047679707134711\">Java класс - CAFEBABE</translation>\n  <translation id=\"8107803807883105295\">ZIP - начинается с ‘PK‘ (50 4B)</translation>\n  <translation id=\"2598847161910848616\">PDF файлы начинаются с ‘%PDF‘ (25 50 44 46)</translation>\n  <translation id=\"7492675950271746195\">PNG файлы начинаются с  “\\211 P N G \\r \\n 32 \\n” (89 50 4E 47 0D 0A 1A 0A)</translation>\n  <translation id=\"4799145408495606287\">HTTP2 - PRI * HTTP/2.0\\r\\n\\r\\nSM\\r\\n\\r\\n</translation>\n  <translation id=\"2428219673022947728\">Большая коллекция бинарных форматов</translation>\n  <translation id=\"4964093976179230239\">https://formats.kaitai.io/</translation>\n  <translation id=\"7117028634376204882\">Давайте посмотрим как хранятся данные в JavaScript</translation>\n  <translation id=\"3362352357730335601\">Вот так хранятся типизированные массивы в других языках</translation>\n  <translation id=\"5747803473977552853\">Факты о формате Gif</translation>\n  <translation id=\"3264831671739289198\">Размер картинки: 1х1 to 65535х65535</translation>\n  <translation id=\"6873436420290828569\">Цвета - 2-256</translation>\n  <translation id=\"8160048133378270611\">Можно получить полноцветную картинку если заморочиться (но не нужно)</translation>\n  <translation id=\"8642911668882581757\">Количество кадров анимации - не ограничено</translation>\n  <translation id=\"3688153131129835544\">Задержка анимации - 1/100 - 655 seconds</translation>\n  <translation id=\"336946060573563813\">Существовало расширение позволяющее накладывать текст на картинку</translation>\n  <translation id=\"8788288170627730529\">Всего в стандарте 24 страницы  (+12 аппендикс)\n</translation>\n  <translation id=\"8031342257135808239\">JavaScript ❤️ Бинарные данные</translation>\n  <translation id=\"6802387164374652684\">kirjs.com/binary/0</translation>\n  <translation id=\"876108112502141396\">Спасибо @andrey_sitnik и  @_bmsdave за ревью</translation>\n  <translation id=\"1742016744700285395\">Это значение - всегда &quot;GIF&quot;</translation>\n  <translation id=\"1966011271871898521\">Это всегда &quot;87a&quot; или &quot;89a&quot;</translation>\n  <translation id=\"2907179763619097754\">Ширина картинки</translation>\n  <translation id=\"7454178759479297421\">Высота картинки</translation>\n  <translation id=\"2190517453154346128\">Флаг наличия глобальной палитры</translation>\n  <translation id=\"7419758577762656600\">Глубина цвета в палитре (в битах)</translation>\n  <translation id=\"6279072752355765626\">Флаг сортировки палитры по важности цвета.\n\nНужен для экранов которые не поддерживают все 256 цветов, позволяет выбрать самые частые.</translation>\n  <translation id=\"6362281559063974384\">Количество цветов в палитре (результат пропорционален двойке в указанной степени)</translation>\n  <translation id=\"4799068399800745526\">Указывает индекс цвета в таблице, который будет использоваться в качестве прозрачного\n</translation>\n  <translation id=\"7155961055090586288\">Пропорции пикселя</translation>\n  <translation id=\"8178615203242634427\">Зарезервированные биты</translation>\n  <translation id=\"6797144872680228343\">Действие после показа кадра:\n\n0) Ничего не делать.\n1) Оставить все как есть.\n2) Восстановить фон.\n3) Вернуть предыдущий кадр\n4-7) Возможно будут заданы в будущем.</translation>\n  <translation id=\"4537070299235731007\">Этот бит не используется, но в теории позволял картинке реагировать на действия пользователя.</translation>\n  <translation id=\"7895980228479043030\">Флаг, значение которого позволяет включить/выключить прозрачность для последующего кадра</translation>\n  <translation id=\"288524084616596078\">Задержка анимации для следующего кадра</translation>\n  <translation id=\"2564139578844670282\">Индекс прозрачного цвета</translation>\n  <translation id=\"7752598573515737652\">Горизонтальный сдвиг кадра в пикселях</translation>\n  <translation id=\"3589525053629068000\">Горизонтальные сдвиг кадра в пикселях</translation>\n  <translation id=\"1085666956292885352\">Флаг,\n значение которого задает наличие локальной палитры</translation>\n  <translation id=\"1603151697351855061\">Флаг включающий/выключающий чересстрочную развёртку</translation>\n  <translation id=\"8035016501244287343\">Флаг, значение которого задает наличие локальной палитры</translation>\n  <translation id=\"2408340429265484547\">Размер локальной палитры</translation>\n  <translation id=\"1537375986743181008\">Обозначает раширение Netscape, значение всегда 0x01</translation>\n  <translation id=\"6828342527983665872\">Размер расширения в байтах</translation>\n  <translation id=\"3076441160662364443\">Количество анимационных циклов </translation>\n  <translation id=\"8535614733470597054\">Код картинки сжатые с помощью LZW</translation>\n  <translation id=\"fontSize\">Если вам сложно различить цифры ниже, садитесь ближе или откройте слайды: <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>kirjs.com/binary/0<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"8136286563521868281\">Что внутри бинарных файлов (картинки, видео, медиа, zip и пр.)?</translation>\n  <translation id=\"2538222517770638672\">Передача бинарных данных (вместо JSON)</translation>\n  <translation id=\"12850250970925130\">Как JavaScript хранит данные в памяти</translation>\n  <translation id=\"4240264931790119622\">Чтобы понять бинарные данные нужна схема</translation>\n  <translation id=\"1001352917033632569\">Бинарные данные</translation>\n  <translation id=\"6599425442176006164\">01101000 01101111 01101100 01111001 00101110 01101010 01110011</translation>\n  <translation id=\"1818723279872967225\">???</translation>\n  <translation id=\"3222970134911157017\">Это строка в кодировке UTF-8 </translation>\n  <translation id=\"5260619836644538424\">Данные в виде JSON (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{codeLength}}</ex>{{codeLength}}</ph> байт<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"1409409630239345307\">Бинарные данные (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{binariesLength}}</ex>{{binariesLength}}</ph> байт<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></translation>\n  <translation id=\"6442265859744523188\">Схема (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{schemaLength}}</ex>{{schemaLength}}</ph> bytes<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</translation>\n  <translation id=\"2648443831787605149\">Непроиндексированная картинка</translation>\n  <translation id=\"3694360292158869661\">Таблица цветов (Палитра)</translation>\n  <translation id=\"6121157875507934433\">Проиндексированная картинка</translation>\n</translationbundle>\n"
  },
  {
    "path": "apps/kirjs/src/locale/messages.xmb",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE messagebundle [\n<!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)>\n]>\n<messagebundle>\n  <msg id=\"297943560492772582\"><source>src/app/modules/binary/binary.component.html:10</source><source>src/app/modules/binary/binary.component.html:588</source>@kirjs</msg>\n  <msg id=\"2822488826106826578\"><source>src/app/modules/binary/binary.component.html:11</source>️JavaScript ❤️ Binary </msg>\n  <msg id=\"fontSize\"><source>src/app/modules/binary/binary.component.html:16,18</source>\n      If you can&apos;t read the numbers below, move closer or go to <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>kirjs.com/binary/0<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>\n    </msg>\n  <msg id=\"199796482994564583\"><source>src/app/modules/binary/binary.component.html:25</source>Binary is hidden behind many layers of abstraction</msg>\n  <msg id=\"4149332726076272416\"><source>src/app/modules/binary/binary.component.html:29</source>In this talk:</msg>\n  <msg id=\"8136286563521868281\"><source>src/app/modules/binary/binary.component.html:31</source>Binary in files (images, video, other media, zip)</msg>\n  <msg id=\"2538222517770638672\"><source>src/app/modules/binary/binary.component.html:32</source>Binary for data transfer (instead of JSON)</msg>\n  <msg id=\"12850250970925130\"><source>src/app/modules/binary/binary.component.html:33</source>Javascript using binary in memory</msg>\n  <msg id=\"4749058246803727552\"><source>src/app/modules/binary/binary.component.html:41</source>Let&apos;s see what&apos;s inside of <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>gif<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph></msg>\n  <msg id=\"4240264931790119622\"><source>src/app/modules/binary/binary.component.html:87</source><source>src/app/modules/binary/binary.component.html:111</source> Binary data makes no sense without a schema</msg>\n  <msg id=\"1001352917033632569\"><source>src/app/modules/binary/binary.component.html:90</source><source>src/app/modules/binary/binary.component.html:114</source>Binary data</msg>\n  <msg id=\"6599425442176006164\"><source>src/app/modules/binary/binary.component.html:91</source><source>src/app/modules/binary/binary.component.html:115</source>01101000 01101111 01101100 01111001 00101110 01101010 01110011</msg>\n  <msg id=\"1721827980245086554\"><source>src/app/modules/binary/binary.component.html:97</source><source>src/app/modules/binary/binary.component.html:121</source><source>src/app/modules/binary/binary.component.html:449</source>Schema</msg>\n  <msg id=\"1818723279872967225\"><source>src/app/modules/binary/binary.component.html:98</source>Lol, what&apos;s this?</msg>\n  <msg id=\"3222970134911157017\"><source>src/app/modules/binary/binary.component.html:122</source>This is UTF-8 string!</msg>\n  <msg id=\"3597932961286677186\"><source>src/app/modules/binary/binary.component.html:167</source>Header</msg>\n  <msg id=\"8989873612204787281\"><source>src/app/modules/binary/binary.component.html:169</source>Contains size, global pallets specs, transparency.</msg>\n  <msg id=\"534812795985958361\"><source>src/app/modules/binary/binary.component.html:171</source>Palette (Optional, size defined ) </msg>\n  <msg id=\"3938479736078443805\"><source>src/app/modules/binary/binary.component.html:173</source>Contains indexed colors</msg>\n  <msg id=\"3548048205965117162\"><source>src/app/modules/binary/binary.component.html:175</source>Extensions (Optional)</msg>\n  <msg id=\"489855084993879246\"><source>src/app/modules/binary/binary.component.html:178</source>Actual image data</msg>\n  <msg id=\"5838521644867201449\"><source>src/app/modules/binary/binary.component.html:179</source>Image Control</msg>\n  <msg id=\"931491989303959259\"><source>src/app/modules/binary/binary.component.html:180</source>Animation Control</msg>\n  <msg id=\"3807699453257291879\"><source>src/app/modules/binary/binary.component.html:181</source>Comments</msg>\n  <msg id=\"5510336295069197234\"><source>src/app/modules/binary/binary.component.html:214</source>Convert binary to decimal with JavaScript</msg>\n  <msg id=\"8654618120168558452\"><source>src/app/modules/binary/binary.component.html:219</source>Convert decimal to binary</msg>\n  <msg id=\"6328086056731380089\"><source>src/app/modules/binary/binary.component.html:241</source>Convert binary to hexadecimal with JavaScript</msg>\n  <msg id=\"3610726963919885246\"><source>src/app/modules/binary/binary.component.html:246</source>Convert hexadecimal to binary with JavaScript</msg>\n  <msg id=\"4735883542091123359\"><source>src/app/modules/binary/binary.component.html:278</source>ПЕЉМЕЊ!!!</msg>\n  <msg id=\"5377037856556160771\"><source>src/app/modules/binary/binary.component.html:293</source>Get charcode from string</msg>\n  <msg id=\"7025121863698322477\"><source>src/app/modules/binary/binary.component.html:298</source>Get letter from charcode</msg>\n  <msg id=\"7931653459498650396\"><source>src/app/modules/binary/binary.component.html:334</source>Parsing binary(with <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>binary-parser<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</msg>\n  <msg id=\"3731160866778187040\"><source>src/app/modules/binary/binary.component.html:355</source>Can we use <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>binary<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph> instead of <ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph>JSON<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>?</msg>\n  <msg id=\"7852133356596779874\"><source>src/app/modules/binary/binary.component.html:368</source>Serialized Size</msg>\n  <msg id=\"2742664813202759813\"><source>src/app/modules/binary/binary.component.html:372</source><source>src/app/modules/binary/binary.component.html:391</source><source>src/app/modules/binary/binary.component.html:410</source><source>src/app/modules/binary/binary.component.html:432</source><source>src/app/modules/binary/binary.component.html:452</source>JSON</msg>\n  <msg id=\"2044194570562448530\"><source>src/app/modules/binary/binary.component.html:374</source>Bigger</msg>\n  <msg id=\"793068249425686908\"><source>src/app/modules/binary/binary.component.html:379</source><source>src/app/modules/binary/binary.component.html:398</source><source>src/app/modules/binary/binary.component.html:420</source><source>src/app/modules/binary/binary.component.html:440</source><source>src/app/modules/binary/binary.component.html:460</source>Binary</msg>\n  <msg id=\"7774873943331135334\"><source>src/app/modules/binary/binary.component.html:381</source>Smaller</msg>\n  <msg id=\"641664010209157570\"><source>src/app/modules/binary/binary.component.html:388</source>Serialization speed</msg>\n  <msg id=\"2985059781575755822\"><source>src/app/modules/binary/binary.component.html:393</source>Slower</msg>\n  <msg id=\"659233733431508399\"><source>src/app/modules/binary/binary.component.html:400</source>Faster</msg>\n  <msg id=\"675502942307621158\"><source>src/app/modules/binary/binary.component.html:407</source>Debugging</msg>\n  <msg id=\"74488306490404477\"><source>src/app/modules/binary/binary.component.html:413</source>Easy to understand</msg>\n  <msg id=\"7679521196114828675\"><source>src/app/modules/binary/binary.component.html:414</source>Human readable</msg>\n  <msg id=\"4290458654577941433\"><source>src/app/modules/binary/binary.component.html:422</source><source>src/app/modules/binary/binary.component.html:442</source>Requires special tooling</msg>\n  <msg id=\"9105483695831392309\"><source>src/app/modules/binary/binary.component.html:429</source>Tooling</msg>\n  <msg id=\"2186589438043615872\"><source>src/app/modules/binary/binary.component.html:434</source>For JS works out of the box</msg>\n  <msg id=\"2979028920132715625\"><source>src/app/modules/binary/binary.component.html:454</source>No schema</msg>\n  <msg id=\"7108226176298610135\"><source>src/app/modules/binary/binary.component.html:462</source>Needs a schema</msg>\n  <msg id=\"8657754663266965278\"><source>src/app/modules/binary/binary.component.html:463</source>Comes with type checking</msg>\n  <msg id=\"9170265368266877102\"><source>src/app/modules/binary/binary.component.html:464</source>Comes with validation</msg>\n  <msg id=\"1257397640951538252\"><source>src/app/modules/binary/binary.component.html:471</source>Existing solutions</msg>\n  <msg id=\"8643348940092477927\"><source>src/app/modules/binary/binary.component.html:473</source><ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Protocol buffers<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> (Google)</msg>\n  <msg id=\"5480246874668908377\"><source>src/app/modules/binary/binary.component.html:474</source><ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Flatbuffers<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> (Google)</msg>\n  <msg id=\"3516009209791088102\"><source>src/app/modules/binary/binary.component.html:475</source><ph name=\"START_LINK\"><ex>&lt;a&gt;</ex>&lt;a&gt;</ph>Thrift<ph name=\"CLOSE_LINK\"><ex>&lt;/a&gt;</ex>&lt;/a&gt;</ph> (Apache/Facebook)</msg>\n  <msg id=\"501698005128033255\"><source>src/app/modules/binary/binary.component.html:480</source>File header constants</msg>\n  <msg id=\"497452967189052368\"><source>src/app/modules/binary/binary.component.html:482</source>Gif - GIF87a (or GIF89a)</msg>\n  <msg id=\"734429310122802487\"><source>src/app/modules/binary/binary.component.html:483</source>Jpeg - begin with ‘FF D8‘ and end with ‘FF D9&apos;</msg>\n  <msg id=\"6451047679707134711\"><source>src/app/modules/binary/binary.component.html:484</source>Java class - CAFEBABE</msg>\n  <msg id=\"8107803807883105295\"><source>src/app/modules/binary/binary.component.html:485</source>ZIP files begin with ‘PK‘ (50 4B)</msg>\n  <msg id=\"2598847161910848616\"><source>src/app/modules/binary/binary.component.html:486</source>PDF files start with ‘%PDF‘ (25 50 44 46)</msg>\n  <msg id=\"7492675950271746195\"><source>src/app/modules/binary/binary.component.html:487</source>PNG image files begin with “\\211 P N G \\r \\n 32 \\n” (89 50 4E 47 0D 0A 1A 0A)</msg>\n  <msg id=\"4799145408495606287\"><source>src/app/modules/binary/binary.component.html:488</source>HTTP2 - PRI * HTTP/2.0\\r\\n\\r\\nSM\\r\\n\\r\\n</msg>\n  <msg id=\"2428219673022947728\"><source>src/app/modules/binary/binary.component.html:493</source>Big library of binary formats</msg>\n  <msg id=\"4964093976179230239\"><source>src/app/modules/binary/binary.component.html:494</source>https://formats.kaitai.io/</msg>\n  <msg id=\"7117028634376204882\"><source>src/app/modules/binary/binary.component.html:499</source>Let&apos;s look at memory management in JS</msg>\n  <msg id=\"3362352357730335601\"><source>src/app/modules/binary/binary.component.html:503</source>Let&apos;s see how memory works in typed arrays</msg>\n  <msg id=\"5747803473977552853\"><source>src/app/modules/binary/binary.component.html:575</source>Gif facts</msg>\n  <msg id=\"3264831671739289198\"><source>src/app/modules/binary/binary.component.html:577</source>Image size: 1х1 to 65535х65535</msg>\n  <msg id=\"6873436420290828569\"><source>src/app/modules/binary/binary.component.html:578</source>Colors: 2 - 256</msg>\n  <msg id=\"8160048133378270611\"><source>src/app/modules/binary/binary.component.html:579</source>True color gifs are possible</msg>\n  <msg id=\"8642911668882581757\"><source>src/app/modules/binary/binary.component.html:580</source>Max number of animation frames - unlimited</msg>\n  <msg id=\"3688153131129835544\"><source>src/app/modules/binary/binary.component.html:581</source>Animation delay 1/100 - 655 seconds</msg>\n  <msg id=\"336946060573563813\"><source>src/app/modules/binary/binary.component.html:582</source>There&apos;s a plain text extension</msg>\n  <msg id=\"8788288170627730529\"><source>src/app/modules/binary/binary.component.html:583</source>24 pages + 12 pages appendix in gif89 standard</msg>\n  <msg id=\"8031342257135808239\"><source>src/app/modules/binary/binary.component.html:589</source>Binary ❤️ JavaScript</msg>\n  <msg id=\"6802387164374652684\"><source>src/app/modules/binary/binary.component.html:590</source>kirjs.com/binary/0</msg>\n  <msg id=\"876108112502141396\"><source>src/app/modules/binary/binary.component.html:591</source>Thanks @andrey_sitnik, @_bmsdave for review</msg>\n  <msg id=\"1742016744700285395\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:7</source>This is always &quot;GIF&quot;</msg>\n  <msg id=\"1966011271871898521\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:8</source>This is always &quot;87a&quot; or &quot;89a&quot;</msg>\n  <msg id=\"2907179763619097754\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:9</source><source>src/app/modules/binary/fake-gif/fake-gif.component.html:43</source>Width of the image</msg>\n  <msg id=\"7454178759479297421\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:10</source><source>src/app/modules/binary/fake-gif/fake-gif.component.html:44</source>Height of the image</msg>\n  <msg id=\"2190517453154346128\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:12</source>Whether global palette is present</msg>\n  <msg id=\"7419758577762656600\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:13</source>Number of bits per primary color available</msg>\n  <msg id=\"6279072752355765626\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:14</source>Whether the palette is sorted</msg>\n  <msg id=\"6362281559063974384\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:15,17</source>Specifies number of colors in the palette proportional a power of\n    two. e.g.\n  </msg>\n  <msg id=\"4799068399800745526\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:18,19</source>If present specifies index of a color in the global color table that would be transparent\n  </msg>\n  <msg id=\"7155961055090586288\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:20</source>Ratio of the pixel</msg>\n  <msg id=\"8178615203242634427\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:22</source>Reserved bits</msg>\n  <msg id=\"6797144872680228343\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:23,36</source>Disposal Method - Indicates the way in which the graphic is to\n    be treated after being displayed.\n\n    Values : 0 - No disposal specified. The decoder is\n    not required to take any action.\n    1 - Do not dispose. The graphic is to be left\n    in place.\n    2 - Restore to background color. The area used by the\n    graphic must be restored to the background color.\n    3 - Restore to previous. The decoder is required to\n    restore the area overwritten by the graphic with\n    what was there prior to rendering the graphic.\n    4-7 - To be defined.\n  </msg>\n  <msg id=\"4537070299235731007\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:37</source>Not used, the initial intention was to allow user interactions</msg>\n  <msg id=\"7895980228479043030\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:38</source>Whether the frame should have a transparent color</msg>\n  <msg id=\"288524084616596078\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:39</source>Animation delay for next image</msg>\n  <msg id=\"2564139578844670282\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:40</source>Optional transparent color index</msg>\n  <msg id=\"7752598573515737652\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:41</source>Horizontal shift in pixels</msg>\n  <msg id=\"3589525053629068000\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:42</source>Vertical shift in pixels</msg>\n  <msg id=\"1085666956292885352\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:45</source>Whether the image has local palette</msg>\n  <msg id=\"1603151697351855061\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:46</source>Indicates if the image is interlaced.</msg>\n  <msg id=\"8035016501244287343\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:47</source>Whether local palette is sorted</msg>\n  <msg id=\"2408340429265484547\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:48</source>Bucket of sizes of local palette.</msg>\n  <msg id=\"1537375986743181008\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:50,52</source>Identifies the Netscape Looping Extension. This field contains the fixed\n    value 0x01\n  </msg>\n  <msg id=\"6828342527983665872\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:53</source>Size of the extension block in bytes</msg>\n  <msg id=\"3076441160662364443\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:54</source>Number of animation loops</msg>\n  <msg id=\"8535614733470597054\"><source>src/app/modules/binary/fake-gif/fake-gif.component.html:55</source>This is the actual image encoded with LZW</msg>\n  <msg id=\"5260619836644538424\"><source>src/app/modules/binary/json/json.component.html:3</source>Data as JSON (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{codeLength}}</ex>{{codeLength}}</ph> bytes<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</msg>\n  <msg id=\"1409409630239345307\"><source>src/app/modules/binary/json/json.component.html:10</source>Binary data (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{binariesLength}}</ex>{{binariesLength}}</ph> bytes<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</msg>\n  <msg id=\"6442265859744523188\"><source>src/app/modules/binary/json/json.component.html:34</source>Schema (<ph name=\"START_BOLD_TEXT\"><ex>&lt;b&gt;</ex>&lt;b&gt;</ph><ph name=\"INTERPOLATION\"><ex>{{schemaLength}}</ex>{{schemaLength}}</ph> bytes<ph name=\"CLOSE_BOLD_TEXT\"><ex>&lt;/b&gt;</ex>&lt;/b&gt;</ph>)</msg>\n  <msg id=\"2648443831787605149\"><source>src/app/modules/binary/color-indexing/color-indexing.component.html:3</source>Unindexed image</msg>\n  <msg id=\"3694360292158869661\"><source>src/app/modules/binary/color-indexing/color-indexing.component.html:13</source>Color table (Palette)</msg>\n  <msg id=\"6121157875507934433\"><source>src/app/modules/binary/color-indexing/color-indexing.component.html:17</source>Indexed image</msg>\n  <msg id=\"introduction\"><source>src/app/modules/react/react.component.html:5</source>Introduction</msg>\n</messagebundle>\n"
  },
  {
    "path": "apps/kirjs/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { KirjsModule } from './app/kirjs.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic()\n  .bootstrapModule(KirjsModule)\n  .catch(err => console.log(err));\n"
  },
  {
    "path": "apps/kirjs/src/polyfills.ts",
    "content": "import 'zone.js/dist/zone'; // Included with Angular CLI.\n\n(window as any).Buffer = {};\n(window as any).global = {};\nimport '@angular/localize/init';\n"
  },
  {
    "path": "apps/kirjs/src/styles.css",
    "content": "@import '~@angular/material/prebuilt-themes/indigo-pink.css';\n\nhtml,\nbody {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  margin: 0;\n}\n"
  },
  {
    "path": "apps/kirjs/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "apps/kirjs/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"resolveJsonModule\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": []\n  },\n  \"exclude\": [\"test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "apps/kirjs/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"angularCompilerOptions\": {\n    \"enableIvy\": true\n  }\n}\n"
  },
  {
    "path": "apps/kirjs/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "apps/kirjs/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"linterOptions\": {\n    \"exclude\": [\"src/**/*.json\"]\n  }\n}\n"
  },
  {
    "path": "apps/lis/browserslist",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11 # For IE 9-11 support, remove 'not'."
  },
  {
    "path": "apps/lis/jest.config.js",
    "content": "module.exports = {\n  name: 'lis',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/apps/lis',\n  snapshotSerializers: [\n    'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',\n    'jest-preset-angular/build/AngularSnapshotSerializer.js',\n    'jest-preset-angular/build/HTMLCommentSerializer.js'\n  ]\n};\n"
  },
  {
    "path": "apps/lis/src/app/app.component.css",
    "content": "/*\n * Remove template code below\n */\n"
  },
  {
    "path": "apps/lis/src/app/app.component.html",
    "content": "<router-outlet></router-outlet>\n"
  },
  {
    "path": "apps/lis/src/app/app.component.spec.ts",
    "content": "import { TestBed, async } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\nimport { RouterTestingModule } from '@angular/router/testing';\n\ndescribe('AppComponent', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [RouterTestingModule],\n      declarations: [AppComponent]\n    }).compileComponents();\n  }));\n\n  it('should create the app', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app).toBeTruthy();\n  });\n\n  it(`should have as title 'lis'`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app.title).toEqual('lis');\n  });\n\n  it('should render title', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.debugElement.nativeElement;\n    expect(compiled.querySelector('.content span').textContent).toContain(\n      'lis app is running!'\n    );\n  });\n});\n"
  },
  {
    "path": "apps/lis/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n  title = 'lis';\n}\n"
  },
  {
    "path": "apps/lis/src/app/app.module.ts",
    "content": "import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { monacoReady } from '@codelab/code-demos';\nimport { environment } from '../../../codelab/src/environments/environment';\n\nimport { AppComponent } from './app.component';\n\nexport const AngularFireApp = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\n@NgModule({\n  declarations: [AppComponent],\n  imports: [\n    BrowserModule,\n    BrowserAnimationsModule,\n    AngularFireDatabaseModule,\n    AngularFireAuthModule,\n    AngularFireApp,\n    RouterModule.forRoot(\n      [\n        {\n          path: '',\n          loadChildren: () =>\n            import('./modules/rxjs/rxjs.module').then(_ => _.RxjsModule)\n        }\n      ],\n      { initialNavigation: 'enabled' }\n    )\n  ],\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useValue: monacoReady,\n      multi: true\n    }\n  ],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/lis/src/app/modules/rxjs/rxjs.component.css",
    "content": ""
  },
  {
    "path": "apps/lis/src/app/modules/rxjs/rxjs.component.html",
    "content": "<slide-deck slidesRouting slides-tracking>\n  <div *isPresenting slideShortcuts></div>\n  <div *isAdmin slideShortcuts></div>\n  <div *isOff><h1>🥺 There is no active session</h1></div>\n\n  <div><codelab-sync-button name=\"lis\"></codelab-sync-button></div>\n\n  <div *slide id=\"test\">\n    here\n    <div *isAdmin>isAdmin</div>\n    <div *isPresenting>isPresenting</div>\n    <div *isViewing>isViewing</div>\n  </div>\n\n  <div *slide id=\"registration\">\n    <codelab-registration></codelab-registration>\n  </div>\n\n  <div *slide id=\"poll-0\"><codelab-poll [poll]=\"polls[0]\"></codelab-poll></div>\n\n  <div *slide id=\"rxjs\"><code-demo [ngModel]=\"code\"></code-demo></div>\n\n  <div *slide id=\"start\"><h1>Hello</h1></div>\n\n  <div *slide id=\"list\">\n    <ul>\n      <li>a</li>\n      <li>b</li>\n    </ul>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "apps/lis/src/app/modules/rxjs/rxjs.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RxjsComponent } from './rxjs.component';\n\ndescribe('RxjsComponent', () => {\n  let component: RxjsComponent;\n  let fixture: ComponentFixture<RxjsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RxjsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RxjsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/lis/src/app/modules/rxjs/rxjs.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-rxjs',\n  templateUrl: './rxjs.component.html',\n  styleUrls: ['./rxjs.component.css']\n})\nexport class RxjsComponent implements OnInit {\n  code: Record<string, string> = {\n    'index.html': 'Lol',\n    'bootstrap.ts': `\nimport { Injector } from '@angular/core';\n\nconsole.log(11230);\n     `\n  };\n  polls = [\n    {\n      key: 'favorite',\n      type: 'choice',\n      question: 'Which framework do you use most at work?',\n      options: [\n        'Angular',\n        'AngularJS',\n        'React',\n        'Vue',\n        'Svelte',\n        'jQuery',\n        'Something else'\n      ]\n    },\n    {\n      key: 'skill',\n      type: 'choice',\n      question: 'How well do you know angular?',\n      options: [\n        'Not at all',\n        'Somewhat',\n        'I can use it',\n        'Good',\n        'Really good',\n        \"I'm Minko Fluin\"\n      ]\n    },\n    {\n      key: 'build-dev',\n      type: 'choice',\n      question:\n        'how long does it take to rebuild your app in dev mode (and see the result via local dev server) - the total turnaround time',\n      options: [\n        '< 1 second',\n        '1 - 5 seconds',\n        '5 - 10 seconds',\n        '10 - 30 seconds',\n        '30 - 60 seconds',\n        '1-10 minutes',\n        'More than 10 minutes'\n      ]\n    },\n    {\n      key: 'build-prod',\n      type: 'choice',\n      question:\n        'how long does it take to create a production build of your app',\n      options: [\n        '< 1 second',\n        '1 - 5 seconds',\n        '5 - 10 seconds',\n        '10 - 30 seconds',\n        '30 - 60 seconds',\n        '1-10 minutes',\n        'More than 10 minutes'\n      ]\n    },\n    {\n      key: 'cli',\n      type: 'choice',\n      question: 'Which feature is NOT in CLI 8.3.0-next.2 ',\n      answer: 'New command ng make-this-awesome',\n      options: [\n        'Redesigned default app',\n        'New command ng make-this-awesome',\n        'Faster builds with enabled differential loading',\n        'New command ng deploy'\n      ]\n    },\n    {\n      key: 'tomorrow',\n      type: 'choice',\n      question: 'What is being released today?',\n      answer: 'CLI 9.0.0-next.0 with Ivy by default',\n      options: [\n        'CLI 9.0.0-next.0 with Ivy by default',\n        'RxJS 8',\n        'React 16.12',\n        'Angular XS'\n      ]\n    },\n    {\n      key: 'material',\n      type: 'choice',\n      question:\n        'Which feature was added to Angular CDK library 8.1.3 \"gelatin-key\" (2019-08-14)?',\n      answer: '',\n      options: [\n        'Windows 95 theme support',\n        'Drag and drop',\n        'New material-fox component',\n        'New Clipboard service + directive'\n      ]\n    }\n  ];\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/lis/src/app/modules/rxjs/rxjs.module.ts",
    "content": "import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { SyncPollModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll.module';\nimport { SyncRegistrationModule } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { SyncButtonModule } from '@codelab/utils/src/lib/sync/sync-button/sync-button.module';\nimport { RxjsComponent } from './rxjs.component';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(RxjsComponent));\n\n@NgModule({\n  declarations: [RxjsComponent],\n  imports: [\n    CommonModule,\n    SlidesModule,\n    routes,\n    CodeDemoModule,\n    FormsModule,\n    SyncButtonModule,\n    SyncRegistrationModule,\n    SyncPollModule,\n    SyncDirectivesModule\n  ]\n})\nexport class RxjsModule {}\n"
  },
  {
    "path": "apps/lis/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "apps/lis/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n"
  },
  {
    "path": "apps/lis/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "apps/lis/src/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Lis</title>\n    <base href=\"/\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\" />\n    <link\n      href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\"\n    />\n  </head>\n  <body>\n    <codelab-root></codelab-root>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/lis/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic()\n  .bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "apps/lis/src/polyfills.ts",
    "content": "/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n *   2. Application imports. Files imported after ZoneJS that should be loaded before your main\n *      file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\n// import 'classlist.js';  // Run `npm install --save classlist.js`.\n\n/**\n * Web Animations `@angular/platform-browser/animations`\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\n */\n// import 'web-animations-js';  // Run `npm install --save web-animations-js`.\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags.ts';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n *  with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n *  (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"
  },
  {
    "path": "apps/lis/src/styles.css",
    "content": "/* You can add global styles to this file, and also import other style files */\n@import '~@angular/material/prebuilt-themes/indigo-pink.css';\n\nhtml,\nbody {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  margin: 0;\n}\n"
  },
  {
    "path": "apps/lis/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "apps/lis/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": []\n  },\n  \"files\": [\"src/main.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"src/test-setup.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "apps/lis/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "apps/lis/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "apps/lis/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "apps/playground/browserslist",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11 # For IE 9-11 support, remove 'not'."
  },
  {
    "path": "apps/playground/jest.config.js",
    "content": "module.exports = {\n  name: 'playground',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/apps/playground',\n  snapshotSerializers: [\n    'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',\n    'jest-preset-angular/build/AngularSnapshotSerializer.js',\n    'jest-preset-angular/build/HTMLCommentSerializer.js'\n  ]\n};\n"
  },
  {
    "path": "apps/playground/src/app/app.component.html",
    "content": "<router-outlet></router-outlet>\n"
  },
  {
    "path": "apps/playground/src/app/app.component.scss",
    "content": "/*\n * Remove template code below\n */\n:host {\n  display: block;\n  font-family: sans-serif;\n  min-width: 300px;\n  max-width: 1600px;\n  margin: 50px auto;\n}\n\n.gutter-left {\n  margin-left: 9px;\n}\n\n.col-span-2 {\n  grid-column: span 2;\n}\n\n.flex {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\nheader {\n  background-color: #143055;\n  color: white;\n  padding: 5px;\n  border-radius: 3px;\n}\n\nmain {\n  padding: 0 36px;\n}\n\np {\n  text-align: center;\n}\n\nh1 {\n  text-align: center;\n  margin-left: 18px;\n  font-size: 24px;\n}\n\nh2 {\n  text-align: center;\n  font-size: 20px;\n  margin: 40px 0 10px 0;\n}\n\n.resources {\n  text-align: center;\n  list-style: none;\n  padding: 0;\n  display: grid;\n  grid-gap: 9px;\n  grid-template-columns: 1fr 1fr;\n}\n\n.resource {\n  color: #0094ba;\n  height: 36px;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid rgba(0, 0, 0, 0.12);\n  border-radius: 4px;\n  padding: 3px 9px;\n  text-decoration: none;\n}\n\n.resource:hover {\n  background-color: rgba(68, 138, 255, 0.04);\n}\n\npre {\n  padding: 9px;\n  border-radius: 4px;\n  background-color: black;\n  color: #eee;\n}\n\ndetails {\n  border-radius: 4px;\n  color: #333;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid rgba(0, 0, 0, 0.12);\n  padding: 3px 9px;\n  margin-bottom: 9px;\n}\n\nsummary {\n  cursor: pointer;\n  outline: none;\n  height: 36px;\n  line-height: 36px;\n}\n\n.github-star-container {\n  margin-top: 12px;\n  line-height: 20px;\n}\n\n.github-star-container a {\n  display: flex;\n  align-items: center;\n  text-decoration: none;\n  color: #333;\n}\n\n.github-star-badge {\n  color: #24292e;\n  display: flex;\n  align-items: center;\n  font-size: 12px;\n  padding: 3px 10px;\n  border: 1px solid rgba(27, 31, 35, 0.2);\n  border-radius: 3px;\n  background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%);\n  margin-left: 4px;\n  font-weight: 600;\n}\n\n.github-star-badge:hover {\n  background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%);\n  border-color: rgba(27, 31, 35, 0.35);\n  background-position: -0.5em;\n}\n.github-star-badge .material-icons {\n  height: 16px;\n  width: 16px;\n  margin-right: 4px;\n}\n"
  },
  {
    "path": "apps/playground/src/app/app.component.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { AppModule } from './app.module';\n\ndescribe('AppComponent', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [RouterTestingModule, AppModule]\n    }).compileComponents();\n  }));\n\n  it('should create the app', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app).toBeTruthy();\n  });\n\n  it(`should have as title 'playground'`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app.title).toEqual('playground');\n  });\n\n  it('should render title', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.debugElement.nativeElement;\n    expect(compiled.querySelector('h1').textContent).toContain(\n      'Welcome to playground!'\n    );\n  });\n});\n"
  },
  {
    "path": "apps/playground/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n  title = 'playground';\n}\n"
  },
  {
    "path": "apps/playground/src/app/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { APP_INITIALIZER, NgModule } from '@angular/core';\n\nimport { AppComponent } from './app.component';\nimport { RouterModule } from '@angular/router';\nimport { monacoReady } from '@codelab/code-demos';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { environment } from '../environments/environment';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\n\nconst routes = [\n  {\n    path: '',\n    redirectTo: 'code-sync',\n    pathMatch: 'full'\n  },\n  {\n    path: 'angular',\n    loadChildren: () =>\n      import('./playground/playground.module').then(m => m.PlaygroundModule)\n  },\n  {\n    path: 'code-sync',\n    loadChildren: () =>\n      import('./code-sync/code-sync.module').then(m => m.CodeSyncModule)\n  }\n];\n\nexport const AngularFireApp = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\n@NgModule({\n  declarations: [AppComponent],\n  imports: [\n    BrowserModule,\n    BrowserAnimationsModule,\n    RouterModule.forRoot(routes, { initialNavigation: 'enabled' }),\n    AngularFireApp,\n    AngularFireDatabaseModule,\n    AngularFireAuthModule\n  ],\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useValue: monacoReady,\n      multi: true\n    }\n  ],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n"
  },
  {
    "path": "apps/playground/src/app/code-sync/code-sync.component.css",
    "content": ""
  },
  {
    "path": "apps/playground/src/app/code-sync/code-sync.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting>\n  <div *isPresenting slideShortcuts></div>\n  <div *isAdmin slideShortcuts></div>\n  <div *isOff></div>\n\n  <div>\n    <codelab-sync-button name=\"code-sync\"></codelab-sync-button>\n  </div>\n\n  <div *slide id=\"start\"></div>\n</slide-deck>\n"
  },
  {
    "path": "apps/playground/src/app/code-sync/code-sync.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { CodeSyncComponent } from './code-sync.component';\nimport { CodeSyncModule } from './code-sync.module';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { getMockAngularFireProviders } from '@codelab/utils/src/lib/testing/mocks/angular-fire';\n\ndescribe('CodeSyncComponent', () => {\n  let component: CodeSyncComponent;\n  let fixture: ComponentFixture<CodeSyncComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [CodeSyncModule, RouterTestingModule],\n      providers: [getMockAngularFireProviders()]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(CodeSyncComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/playground/src/app/code-sync/code-sync.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-code-sync',\n  templateUrl: './code-sync.component.html',\n  styleUrls: ['./code-sync.component.css']\n})\nexport class CodeSyncComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "apps/playground/src/app/code-sync/code-sync.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { RouterModule } from '@angular/router';\nimport { CodeSyncComponent } from './code-sync.component';\nimport { SyncButtonModule } from '@codelab/utils/src/lib/sync/sync-button/sync-button.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\n\nconst routes = RouterModule.forChild(SlidesRoutes.get(CodeSyncComponent));\n\n@NgModule({\n  declarations: [CodeSyncComponent],\n  imports: [\n    CommonModule,\n    SlidesModule,\n    routes,\n    SyncDirectivesModule,\n    SyncButtonModule,\n    AngularFireDatabaseModule\n  ]\n})\nexport class CodeSyncModule {}\n"
  },
  {
    "path": "apps/playground/src/app/playground/angular-sample.ts",
    "content": "export const angularSampleCode = {\n  'app.component.ts': `import { Component } from '@angular/core';\n\n@Component({\n  selector: 'my-app',\n  template: \\`<h1>Edit me </h1>\\`\n})\nexport class AppComponent {}`,\n  'app.module.ts': `import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}`,\n\n  'main.ts': `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n`,\n  'index.html': '<my-app></my-app>'\n};\n"
  },
  {
    "path": "apps/playground/src/app/playground/playground.component.css",
    "content": ""
  },
  {
    "path": "apps/playground/src/app/playground/playground.component.html",
    "content": "<code-demo\n  [(ngModel)]=\"code\"\n  (ngModelChange)=\"handleUpdate($event)\"\n  bootstrap=\"main\"\n></code-demo>\n"
  },
  {
    "path": "apps/playground/src/app/playground/playground.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PlaygroundComponent } from './playground.component';\nimport { PlaygroundModule } from './playground.module';\nimport { ActivatedRoute, Router } from '@angular/router';\n\ndescribe('PlaygroundComponent', () => {\n  let component: PlaygroundComponent;\n  let fixture: ComponentFixture<PlaygroundComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [PlaygroundModule],\n      providers: [\n        {\n          provide: ActivatedRoute,\n          useValue: { snapshot: { queryParams: { code: '' } } }\n        },\n        {\n          provide: Router,\n          useValue: {\n            navigate: jasmine.createSpy('navigate')\n          }\n        }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PlaygroundComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create!', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "apps/playground/src/app/playground/playground.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { angularSampleCode } from './angular-sample';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n  selector: 'codelab-playground',\n  templateUrl: './playground.component.html',\n  styleUrls: ['./playground.component.css']\n})\nexport class PlaygroundComponent {\n  code = angularSampleCode;\n\n  constructor(\n    private readonly activatedRoute: ActivatedRoute,\n    private readonly router: Router\n  ) {\n    const code = activatedRoute.snapshot.queryParams.code;\n    if (code) {\n      try {\n        this.code = { ...angularSampleCode, ...JSON.parse(atob(code)) };\n      } catch (e) {\n        console.log('can not parse code', code);\n      }\n    }\n  }\n\n  handleUpdate(code: any) {\n    const encoded = btoa(JSON.stringify(code));\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams: { code: encoded }\n    });\n  }\n}\n"
  },
  {
    "path": "apps/playground/src/app/playground/playground.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlaygroundComponent } from './playground.component';\nimport { RouterModule } from '@angular/router';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FormsModule } from '@angular/forms';\nimport { FirebaseModule } from '@codelab/firebase';\n\n@NgModule({\n  declarations: [PlaygroundComponent],\n  imports: [\n    RouterModule.forChild([{ path: '', component: PlaygroundComponent }]),\n    CodeDemoModule,\n    CommonModule,\n    FormsModule,\n    FirebaseModule\n  ]\n})\nexport class PlaygroundModule {}\n"
  },
  {
    "path": "apps/playground/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "apps/playground/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n"
  },
  {
    "path": "apps/playground/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false,\n\n  // Firebase\n  firebaseConfig: {\n    apiKey: 'AIzaSyBiY1Lg2RIcKtbgqzfE6Vrg28Zjal6ZWHs',\n    authDomain: 'angular-presentation.firebaseapp.com',\n    databaseURL: 'https://angular-presentation.firebaseio.com',\n    projectId: 'angular-presentation',\n    storageBucket: 'angular-presentation.appspot.com',\n    messagingSenderId: '1087862173437',\n    appId: '1:1087862173437:web:0bb7fe324b62580bb31894'\n  }\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "apps/playground/src/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Playground</title>\n    <base href=\"/\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\" />\n    <link\n      href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\"\n    />\n  </head>\n  <body>\n    <codelab-root></codelab-root>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/playground/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic()\n  .bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "apps/playground/src/polyfills.ts",
    "content": "import 'zone.js/dist/zone'; // Included with Angular CLI.\nimport '@angular/localize/init';\n\n// Needed for babel :(\n(window as any).Buffer = {};\n"
  },
  {
    "path": "apps/playground/src/styles.scss",
    "content": "@import '~@angular/material/prebuilt-themes/indigo-pink.css';\n"
  },
  {
    "path": "apps/playground/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "apps/playground/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": []\n  },\n  \"angularCompilerOptions\": {\n    \"enableIvy\": true\n  },\n  \"files\": [\"src/main.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"src/test-setup.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "apps/playground/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"angularCompilerOptions\": {\n    \"enableIvy\": true\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "apps/playground/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "apps/playground/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "create-issue.js",
    "content": "/**\n * Created by kirjs on 4/26/17.\n */\n"
  },
  {
    "path": "cypress/fixtures/example.json",
    "content": "{\n  \"name\": \"Using fixtures to represent data\",\n  \"email\": \"hello@cypress.io\",\n  \"body\": \"Fixtures are a great way to mock data for responses to routes\"\n}\n"
  },
  {
    "path": "cypress/integration/codelab/home.spec.js",
    "content": "context('home page', () => {\n  beforeEach(() => {\n    cy.viewport(2400, 1370);\n    cy.visit('http://localhost:4200/');\n  });\n\n  it('didnt click on typescript', () => {\n    cy.matchImageSnapshot('home');\n  });\n\n  it('typescript should be clickable', () => {\n    cy.get('.learn-box.typescript').click();\n\n    // cy.matchImageSnapshot(\"home\");\n\n    cy.location().should(location => {\n      expect(location.href).to.eq('http://localhost:4200/typescript/intro');\n    });\n  });\n});\n"
  },
  {
    "path": "cypress/plugins/cy-ts-preprocessor.js",
    "content": "const wp = require('@cypress/webpack-preprocessor');\n\nconst webpackOptions = {\n  resolve: {\n    extensions: ['.ts', '.js']\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.ts$/,\n        exclude: [/node_modules/],\n        use: [\n          {\n            loader: 'ts-loader'\n          }\n        ]\n      }\n    ]\n  }\n};\n\nconst options = {\n  webpackOptions\n};\n\nmodule.exports = wp(options);\n"
  },
  {
    "path": "cypress/plugins/index.js",
    "content": "const cypressTypeScriptPreprocessor = require('./cy-ts-preprocessor');\nconst {\n  addMatchImageSnapshotPlugin\n} = require('cypress-image-snapshot/plugin');\n\nmodule.exports = (on, config) => {\n  addMatchImageSnapshotPlugin(on, config);\n  // on('file:preprocessor', cypressTypeScriptPreprocessor);\n};\n"
  },
  {
    "path": "cypress/support/commands.js",
    "content": "// ***********************************************\n// This example commands.js shows you how to\n// create various custom commands and overwrite\n// existing commands.\n//\n// For more comprehensive examples of custom\n// commands please read more here:\n// https://on.cypress.io/custom-commands\n// ***********************************************\n//import { addMatchImageSnapshotCommand } from 'cypress-image-snapshot/command';\n\n//\n// -- This is a parent command --\n// Cypress.Commands.add(\"login\", (email, password) => { ... })\n//\n//\n// -- This is a child command --\n// Cypress.Commands.add(\"drag\", { prevSubject: 'element'}, (subject, options) => { ... })\n//\n//\n// -- This is a dual command --\n// Cypress.Commands.add(\"dismiss\", { prevSubject: 'optional'}, (subject, options) => { ... })\n//\n//\n// -- This is will overwrite an existing command --\n// Cypress.Commands.overwrite(\"visit\", (originalFn, url, options) => { ... })\nimport { addMatchImageSnapshotCommand } from 'cypress-image-snapshot/command';\n\naddMatchImageSnapshotCommand({\n  failureThreshold: 0.03, // threshold for entire image\n  failureThresholdType: 'percent', // percent of image or number of pixels\n  customDiffConfig: { threshold: 0.1 }, // threshold for each pixel\n  capture: 'runner'\n});\n"
  },
  {
    "path": "cypress/support/index.js",
    "content": "// ***********************************************************\n// This example support/index.js is processed and\n// loaded automatically before your test files.\n//\n// This is a great place to put global configuration and\n// behavior that modifies Cypress.\n//\n// You can change the location of this file or turn off\n// automatically serving support files with the\n// 'supportFile' configuration option.\n//\n// You can read more here:\n// https://on.cypress.io/configuration\n// ***********************************************************\n\n// Import commands.js using ES2015 syntax:\nimport './commands';\n\n// Alternatively you can use CommonJS syntax:\n// require('./commands')\n"
  },
  {
    "path": "cypress/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"baseUrl\": \"../node_modules\",\n    \"target\": \"es5\",\n    \"lib\": [\"es5\", \"dom\"],\n    \"types\": [\"cypress\"]\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "cypress.json",
    "content": "{}\n"
  },
  {
    "path": "docs/CONTRIBUTING.md",
    "content": "# Contributing to Angular Codelab\n\nThank you for deciding to contribute to codelab.fun! We're excited to have you on the team 🙌\n\nBelow you'll find our guidelines for contributing to further development of this codelab, which is hosted at [codelab-fun/codelab](https://github.com/codelab-fun/codelab) on GitHub.\n\n---\n\n#### Table Of Contents\n\n- [Before You Start](#before-you-start)\n  - [Code of Conduct](#code-of-conduct)\n- [Quick start](#quick-start)\n- [Repository structure](#repository-structure)\n- [Contributing to the Codelab](#contributing-to-the-codelab)\n  - [Reporting Bugs](#reporting-bugs)\n    - [Before Sending Feedback](#before-sending-feedback)\n    - [Submitting a Report](#submitting-a-report)\n  - [Opening Issues on GitHub](#opening-issues-on-github)\n  - [Contributing Code](#contributing-code)\n  - [Making a Pull Request](#making-a-pull-request)\n- [On Style](#on-style)\n  - [Git Commit Messages](#git-commit-messages)\n    - [For example:](#for-example-)\n  - [Code Style](#code-style)\n- [Autoformatting](#autoformatting)\n\n* [Linter](#linter)\n\n---\n\n## Before You Start\n\n### Code of Conduct\n\nThis project adheres to the [Contributor Covenant Code of Conduct](http://contributor-covenant.org/version/1/4/).\nSo that everyone can feel welcome we ask you to please uphold this code should you decide to contribute to this project.\n\n---\n\n## Quick start\n\n- `git clone https://github.com/codelab-fun/codelab.git` (this UTL might be different if you forked)\n- `npm install`\n- `npm start`\n\n_Note:_\nWe use NPM as package manager, not Yarn.\nThus, please keep `package-lock.json` in sync with `package.json`, and do not commit `yarn.lock` file.\n\n⚠ `Windows` users may need to use `yarn` if `npm` fails\n\n## Repository structure\n\nWe're using [NX](https://nx.dev/web) - Extensible Dev Tools for Monorepos.\nThis allows us to have multiple projects and libraries in one repository.\n\nMost of the work will happen in `apps/codelab`, but here's the overview of the other folders:\n\n```\n- apps\n  - codelab                  - The actual codelab code. Most of the work will be done here.\n  - angular-thirty-seconds   - 30.codelab.fun code\n  - kirjs                    - @kirjs's folder for experiments\n  - lis                      - @the_kibs's folder for experiments\n  - blog                     - blog is coming soon\n\n- libs                       - Libraries and helper code shared across projects\n\n- ng2ts                      - Legacy code which shouldn't be touched\n\n- tools                      - Angular schematic for generating new presentations.\n```\n\n## Contributing to the Codelab\n\n### Reporting Bugs\n\nIf you find a bug while going through the codelab as a student, you can submit feedback through the blue feedback button in the bottom-right corner.\n<img src=\"https://user-images.githubusercontent.com/2545357/66276032-b56d8680-e85c-11e9-9148-ab38caeb4a57.png\" width = 600>\n\n---\n\n### Contributing Code\n\nIf you don't know where to start, try perusing issues marked by `help-wanted` tags!\n\nIf you want to work on something there isn't yet an issue for, consider submitting an issue so that multiple contributers aren't _unknowingly_ working on solving the same problem in parallel.\n\nIf you're new to Git check out this awesome [free Udacity class](https://www.udacity.com/course/how-to-use-git-and-github--ud775) by [Caroline Buckey](https://github.com/cbuckey-uda) and [Sarah Spikes](https://github.com/salogel42) 📚\n\nAnd if you're new to just GitHub check out [this cool tutorial series](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github) by [Kent C. Dodds](https://github.com/kentcdodds) 📝\n\n### Making a Pull Request\n\n- Don't forget to pull from the master branch and resolve any merge conflicts first!\n- We run `npm run lint && npm run build:prod && npm run format:check` in CI, so run it locally before committing you code\n- If you don't have access to the repo, fork the project and make a PR from there\n- Describe what the PR addresses\n- Include screenshots and descriptive explanations if necessary\n\n### Code Style\n\n## Autoformatting\n\nrun `npm run format:write` before submitting your code.\n\n# Linter\n\nAngular Codelab comes with its own linter settings. If you're not sure your linter is picking up on them, please run `npm lint` and fix any styling errors before submitting.\n"
  },
  {
    "path": "docs/HOSTING.md",
    "content": "# Host a live Angular Codelab event in your city\n\nWe have hosted multiple live codelab events in 10+ cities, and YOU can help us host one!\n\n<img alt=\"People learning angular\" src=\"https://user-images.githubusercontent.com/2545357/66275179-1fcdf900-e854-11e9-8c44-69e4368ba6c1.png\"  width=\"600\">\n\nIf you know Angular and want to share your knowledge with other people in your home town, we would be happy to support you!\n\n## How to host an event\n\nTo host an Angular Codelab 3 things are needed:\n\n- A place to host the event (potentially in some local Angular company)\n- Some way to invite people (local Angular or GDG meetup could help)\n- At least one mentor who knows Angular and is familiar with Material.\n\nThe most important thing is to know Angular and to be interested to share your knowledge.\nWe can help with the rest.\n\nTo start - [Create a new issue](https://github.com/codelab-fun/codelab/issues/new?title=[Hosting]%20I%20would%20like%20to%host%20codelab%20in%20_CITY_&body=)\n\n## Previous events\n\nHere are some examples and descriptions from previous events:\n\n- [Codelab in NYC](https://www.meetup.com/AngularNYC/events/263172186/) (in English)\n- [Codelab in Moscow](https://www.meetup.com/AngularMoscow/events/262852935/) (in Russian)\n\n## FAQ\n\n❓What does it look like?\n<img alt=\"People learning angular\" src=\"https://user-images.githubusercontent.com/2545357/66275179-1fcdf900-e854-11e9-8c44-69e4368ba6c1.png\"  width=\"600\">\n\nA group of people gather together and starts going through the codelab with their own pace.\nOrganizes and volunteers are there to provide additional context and answer any outstanding questions.\n\n❓How many people should I invite\nThere's no fixed size.\nWe have hosted successful events of 3-60 people. More is possible, but it might be harded to find space.\n\n❓How long is it?\nThere are two formats:\n\n- After work: starts about 6-7PM, and goes for 3 hours. Easier, but everybody's tired after work\n- Weekend: starts in the morning, and goes for 3-5 hours. More productive, but takes part of your weekend\n\n❓How can codelab.fun team help?\nSome of us organize events all over the world and we can help you get in touch with local companies and meetup organizers, and also with promoting your events.\n\n❓Can I host private event at work?\nGo for it!\n"
  },
  {
    "path": "docs/TRANSLATING.md",
    "content": "# Translating Codelab.fun\n\nYou can help us translate codelab.fun to other languages!\n\nWe're using online dashboard for seamless collaborative translation:\n\n<img alt=\"Online translation dashboard\" src=\"https://user-images.githubusercontent.com/2545357/66275329-6a03aa00-e855-11e9-9b82-c7cfe7bd493c.png\" width=\"600\"/>\n\n## How much work would it be?\n\nWe currently have about 500 translation terms, which amounts for a few days of work by one person.\nthe work can be easily parallelized and it's recommended, (but not required) to find couple more people (we can help spread the word).\n\nWording in the course is periodically updated, and it would be amazing if you could also help us periodically update translations.\n\n## Currently Supported languages\n\nCodelab.fun is available in:\n\n- English\n- Russian\n\n## How to start\n\nCheck is somebody is already translating the codelab into your language in [https://github.com/codelab-fun/codelab/issues](issues).\n\n- If someone has already started, ping the issue to see if your help is needed\n- Otherwise [Create a new issue](https://github.com/codelab-fun/codelab/issues/new?title=[Translation]%20I%20would%20like%20to%20translate%20codelab%20into%20_LANGUAGE_&body=)\n"
  },
  {
    "path": "firebase.json",
    "content": "{\n  \"hosting\": [\n    {\n      \"target\": \"codelab\",\n      \"public\": \"dist/apps/codelab\",\n      \"rewrites\": [\n        {\n          \"source\": \"/ru/**\",\n          \"destination\": \"/ru/index.html\"\n        },\n        {\n          \"source\": \"/30/**\",\n          \"destination\": \"/30/index.html\"\n        },\n        {\n          \"source\": \"**\",\n          \"destination\": \"/index.html\"\n        }\n      ]\n    },\n    {\n      \"target\": \"codelab-next\",\n      \"public\": \"dist/apps/codelab\",\n      \"rewrites\": [\n        {\n          \"source\": \"/ru/**\",\n          \"destination\": \"/ru/index.html\"\n        },\n        {\n          \"source\": \"/30/**\",\n          \"destination\": \"/30/index.html\"\n        },\n        {\n          \"source\": \"**\",\n          \"destination\": \"/index.html\"\n        }\n      ]\n    },\n    {\n      \"target\": \"kirjs\",\n      \"public\": \"dist/apps/kirjs\",\n      \"rewrites\": [\n        {\n          \"source\": \"**\",\n          \"destination\": \"/index.html\"\n        }\n      ]\n    },\n    {\n      \"target\": \"lis\",\n      \"public\": \"dist/apps/lis\",\n      \"rewrites\": [\n        {\n          \"source\": \"**\",\n          \"destination\": \"/index.html\"\n        }\n      ]\n    },\n    {\n      \"target\": \"angular-ivy\",\n      \"public\": \"dist/apps/playground\",\n      \"rewrites\": [\n        {\n          \"source\": \"**\",\n          \"destination\": \"/index.html\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],\n  transform: {\n    '^.+\\\\.(ts|js|html)$': 'ts-jest'\n  },\n  resolver: '@nrwl/jest/plugins/resolver',\n  moduleFileExtensions: ['ts', 'js', 'html'],\n  collectCoverage: true,\n  coverageReporters: ['html']\n};\n"
  },
  {
    "path": "libs/angular-ast-viz/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nconst { join } = require('path');\nconst getBaseKarmaConfig = require('../../karma.conf');\n\nmodule.exports = function(config) {\n  const baseConfig = getBaseKarmaConfig();\n  config.set({\n    ...baseConfig,\n    coverageIstanbulReporter: {\n      ...baseConfig.coverageIstanbulReporter,\n      dir: join(__dirname, '../../coverage/libs/angular-ast-viz')\n    }\n  });\n};\n"
  },
  {
    "path": "libs/angular-ast-viz/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/angular-ast-viz\",\n  \"deleteDestPath\": false,\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/ng-package.prod.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/angular-ast-viz\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/package.json",
    "content": "{\n  \"name\": \"angular-ast-viz\",\n  \"version\": \"0.3.3\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^6.0.0-rc.0 || ^6.0.0\",\n    \"@angular/core\": \"^6.0.0-rc.0 || ^6.0.0\"\n  }\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/src/index.ts",
    "content": "export * from './lib/angular-ast-viz.module';\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/angular-ast-viz.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { AngularAstVizModule } from './angular-ast-viz.module';\n\ndescribe('AngularAstVizModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [AngularAstVizModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(AngularAstVizModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/angular-ast-viz.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AstTreeComponent } from './ast-tree/ast-tree.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [AstTreeComponent],\n  exports: [AstTreeComponent]\n})\nexport class AngularAstVizModule {}\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/app.component.css",
    "content": ""
  },
  {
    "path": "libs/angular-ast-viz/src/lib/app.component.html",
    "content": "<div style=\"height: 100%;display: flex;\">\n  <textarea\n    #codeArea\n    (input)=\"generateAst(codeArea.value)\"\n    [value]=\"code\"\n  ></textarea>\n  <ast-viz [node]=\"ast\" (selectNode)=\"selectNode($event)\"></ast-viz>\n  <pre>\n    {{ ast | json }}\n  </pre>\n</div>\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/app.component.spec.ts",
    "content": "import { TestBed, async } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\ndescribe('AppComponent', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [AppComponent]\n    }).compileComponents();\n  }));\n  it('should create the app', async(() => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app).toBeTruthy();\n  }));\n  it(`should have as title 'app'`, async(() => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app.title).toEqual('app');\n  }));\n  it('should render title in a h1 tag', async(() => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.debugElement.nativeElement;\n    expect(compiled.querySelector('h1').textContent).toContain(\n      'Welcome to app!'\n    );\n  }));\n});\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/app.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport * as babylon from 'babylon';\n\n@Component({\n  selector: 'ast-viz-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css']\n})\nexport class AppComponent implements OnInit {\n  ast = [];\n  code = `console.log();`;\n\n  ngOnInit() {\n    this.generateAst(this.code);\n  }\n\n  selectNode(node) {\n    console.log(node);\n  }\n\n  generateAst(value: string) {\n    this.ast = babylon.parse(value).program.body;\n    console.log(this.ast);\n  }\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/ast-tree.component.css",
    "content": ".box {\n  padding: 10px;\n  background: #eee;\n  margin-top: 4px;\n  display: inline-block;\n  min-width: 120px;\n}\n\n.box.CallExpression {\n  background: #e4ff04;\n}\n\n.box.ExpressionStatement {\n  background: #444;\n  color: white;\n}\n\n.box.Identifier {\n  background: #ffe000;\n}\n\n.box.Array {\n  background: #fafafa;\n}\n\n.box.NumericLiteral,\n.box.RegExpLiteral,\n.box.NullLiteral,\n.box.BooleanLiteral,\n.box.TemplateLiteral,\n.box.StringLiteral {\n  background: #00daff;\n}\n\n.props {\n  color: #666;\n}\n\n.box .key {\n}\n\n.box .node {\n  font-weight: 300;\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/ast-tree.component.html",
    "content": "<ng-container *ngIf=\"node\">\n  <ng-container *ngIf=\"node.type\">\n    <div style=\"display: flex;\">\n      <div class=\"box {{ node.type }}\" (click)=\"selectNode.emit(node)\" #box>\n        <div class=\"header\">{{ key ? key + ': ' : '' }}</div>\n        <div class=\"node\">{{ split(node.type) }}</div>\n        <div\n          class=\"props\"\n          *ngFor=\"let key of stringKeys\"\n          style=\"white-space: nowrap\"\n        >\n          {{ key }} = '{{ node[key] }}'\n        </div>\n      </div>\n      <div style=\"padding-left: 20px;\">\n        <ast-viz\n          *ngFor=\"let key of objectKeys\"\n          [node]=\"node[key]\"\n          (selectNode)=\"selectNode.emit($event)\"\n          [key]=\"key\"\n        ></ast-viz>\n      </div>\n    </div>\n  </ng-container>\n  <ng-container *ngIf=\"isArray\">\n    <ng-container *ngIf=\"node.length > 0\">\n      <div style=\"display: flex;\">\n        <div class=\"box Array\" *ngIf=\"key\">\n          <div class=\"header\">{{ key ? key + ': ' : '' }}</div>\n          <div class=\"node\">Array</div>\n        </div>\n\n        <div>\n          <div style=\"margin-left: 20px\" *ngFor=\"let child of node\">\n            <ast-viz\n              (selectNode)=\"selectNode.emit($event)\"\n              [node]=\"child\"\n            ></ast-viz>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n    <ng-container *ngIf=\"node.length === 0\">\n      <div class=\"box Array\">{{ key }}: []</div>\n    </ng-container>\n  </ng-container>\n</ng-container>\n<ng-container *ngIf=\"!node\">\n  <div class=\"box Empty\">\n    <span class=\"key\">{{ key ? key + ': ' : '' }} </span>\n    <span class=\"node\">Null</span>\n  </div>\n</ng-container>\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/ast-tree.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { AstTreeComponent } from './ast-tree.component';\n\ndescribe('AstTreeComponent', () => {\n  let component: AstTreeComponent;\n  let fixture: ComponentFixture<AstTreeComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [AstTreeComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(AstTreeComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/ast-tree.component.ts",
    "content": "import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\n\nconst systemKeys = new Set([\n  'type',\n  'start',\n  'end',\n  'loc',\n  'comments',\n  'tokens',\n  'sourceType',\n  'directives',\n  'extra'\n]);\n\n@Component({\n  selector: 'ast-viz',\n  templateUrl: './ast-tree.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['./ast-tree.component.css']\n})\nexport class AstTreeComponent implements OnInit {\n  @Input() node: any = {};\n  @Input() key: string;\n  @Input() shortNames = true;\n  @Output() selectNode = new EventEmitter();\n\n  split(value) {\n    return value.replace(/([A-Z])/g, ' $1');\n  }\n\n  get specialKeys() {\n    return Object.keys(this.node).filter(key => !systemKeys.has(key));\n  }\n\n  get stringKeys() {\n    return this.specialKeys.filter(\n      key =>\n        typeof this.node[key] === 'string' || typeof this.node[key] === 'number'\n    );\n  }\n\n  get objectKeys() {\n    return this.specialKeys\n      .filter(key => typeof this.node[key] === 'object')\n      .reverse();\n  }\n\n  get isArray() {\n    return Array.isArray(this.node);\n  }\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/ast-tree.module.ts",
    "content": ""
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/short-name-babel.pipe.spec.ts",
    "content": "import { ShortNameBabelPipe } from './short-name-babel.pipe';\n\ndescribe('ShortNameBabelPipe', () => {\n  it('create an instance', () => {\n    const pipe = new ShortNameBabelPipe();\n    expect(pipe).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/angular-ast-viz/src/lib/ast-tree/short-name-babel.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'shortNameBabel'\n})\nexport class ShortNameBabelPipe implements PipeTransform {\n  transform(value: string): any {\n    return value.replace(/[a-z]+/g, '');\n  }\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/angular-ast-viz/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2015\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"flatModuleId\": \"AUTOGENERATED\",\n    \"flatModuleOutFile\": \"AUTOGENERATED\"\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/angular-ast-viz/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"ast-viz\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"ast-viz\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nconst { join } = require('path');\nconst getBaseKarmaConfig = require('../../karma.conf');\n\nmodule.exports = function(config) {\n  const baseConfig = getBaseKarmaConfig();\n  config.set({\n    ...baseConfig,\n    coverageIstanbulReporter: {\n      ...baseConfig.coverageIstanbulReporter,\n      dir: join(__dirname, '../../coverage/libs/angular-slides-to-pdf')\n    }\n  });\n};\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/angular-slides-to-pdf\",\n  \"deleteDestPath\": false,\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/ng-package.prod.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/angular-slides-to-pdf\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/package.json",
    "content": "{\n  \"name\": \"@codelab/angular-slides-to-pdf\",\n  \"version\": \"0.0.1\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^6.0.0-rc.0 || ^6.0.0\",\n    \"@angular/core\": \"^6.0.0-rc.0 || ^6.0.0\"\n  }\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/src/index.ts",
    "content": "export * from './lib/angular-slides-to-pdf.module';\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/src/lib/angular-slides-to-pdf.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SlidesDeckComponent } from '@ng360/slides';\n\n@Component({\n  selector: 'slides-codelab-to-pdf',\n  template: ''\n})\nexport class AngularSlidesToPdfComponent {\n  constructor(private presentation: SlidesDeckComponent) {}\n\n  async toPdf() {\n    const width = 1024;\n    const height = 600;\n\n    this.presentation.goToSlide(0);\n    const JsPDF = function() {} as any;\n    const doc = new JsPDF({\n      orientation: 'landscape',\n      unit: 'px',\n      format: [width, height]\n    });\n\n    for (let i = 0; i < this.presentation.slides.length; i++) {\n      // TODO(kirjs): Uncomment\n      // const el = this.presentation.el.nativeElement.querySelector(\n      //   'slides-slide'\n      // );\n      // const slide = el.querySelector('.slide');\n      // // slide.style.width = width + 'px ';\n      // // slide.style.height = width + 'px ';\n      //\n      // if (i > 0) {\n      //   doc.addPage();\n      // }\n      //\n      // const image1 = await domtoimage.toPng(el);\n      // const image2 = await domtoimage.toPng(slide);\n      // const image = image1.length === 6 ? image2 : image1;\n      //\n      // doc.addImage(image, 0, 0, width, height);\n      //\n      // this.presentation.nextSlide();\n    }\n\n    doc.save('a4.pdf');\n  }\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/src/lib/angular-slides-to-pdf.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { AngularSlidesToPdfModule } from './angular-slides-to-pdf.module';\n\ndescribe('AngularSlidesToPdfModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [AngularSlidesToPdfModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(AngularSlidesToPdfModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/src/lib/angular-slides-to-pdf.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AngularSlidesToPdfComponent } from './angular-slides-to-pdf.component';\n\n@NgModule({\n  declarations: [AngularSlidesToPdfComponent],\n  exports: [AngularSlidesToPdfComponent],\n  imports: [CommonModule]\n})\nexport class AngularSlidesToPdfModule {}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2015\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"flatModuleId\": \"AUTOGENERATED\",\n    \"flatModuleOutFile\": \"AUTOGENERATED\"\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/angular-slides-to-pdf/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"slides\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"slides\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/browser/src/index.ts",
    "content": "export * from './lib/browser.module';\n"
  },
  {
    "path": "libs/browser/src/lib/browser-window/browser-window.component.css",
    "content": ":host {\n  height: 100%;\n  display: block;\n}\n\n.frame {\n  box-shadow: 0 0 1px #dddddd;\n  margin-top: 0;\n  width: 100%;\n  background-color: #fff;\n  flex-grow: 1;\n  display: flex;\n  flex-direction: column;\n}\n\n:host ::ng-deep .runner {\n  flex-grow: 1;\n}\n\n::ng-deep iframe {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n.img-full img {\n  height: 2vw;\n}\n\n.img-full {\n  width: 100%;\n  flex-shrink: 0;\n  height: 2vw;\n  background-image: url(./pics/browsertop-middle.png);\n  background-repeat: repeat;\n  background-size: 2vw 2vw;\n  display: flex;\n  justify-content: space-between;\n}\n\n.browser-frame {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n}\n\n.browser-frame .url {\n  position: absolute;\n  left: 3.2vw;\n  top: 1.2vw;\n  font-size: 0.5vw;\n  background-color: #fff;\n}\n\n.img-left {\n  width: 5vw;\n  height: 2vw;\n  background: url(./pics/browsertop-left.png);\n  background-size: cover;\n}\n\n.img-right {\n  width: 3vw;\n  height: 2vw;\n  background: url(./pics/browsertop-right.png);\n  background-size: cover;\n  background-position-y: -1px;\n}\n"
  },
  {
    "path": "libs/browser/src/lib/browser-window/browser-window.component.html",
    "content": "<div class=\"browser-frame\">\n  <div class=\"img-full\">\n    <div class=\"img-left\"></div>\n    <div class=\"img-right\"></div>\n  </div>\n  <div class=\"url\">{{ url }}</div>\n  <div class=\"frame\" [style.height]=\"height\"><ng-content></ng-content></div>\n</div>\n"
  },
  {
    "path": "libs/browser/src/lib/browser-window/browser-window.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'preview-browser-window',\n  templateUrl: './browser-window.component.html',\n  styleUrls: ['./browser-window.component.css']\n})\nexport class BrowserWindowComponent implements OnInit {\n  @Input() height = '';\n  @Input() url = 'http://localhost:4200/';\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/browser/src/lib/browser.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrowserWindowComponent } from './browser-window/browser-window.component';\nimport { TerminalWindowComponent } from './terminal-window/terminal-window.component';\nimport { PreviewWindowComponent } from './preview-window/preview-window.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    BrowserWindowComponent,\n    TerminalWindowComponent,\n    PreviewWindowComponent\n  ],\n  exports: [\n    BrowserWindowComponent,\n    TerminalWindowComponent,\n    PreviewWindowComponent\n  ]\n})\nexport class BrowserWindowModule {}\n"
  },
  {
    "path": "libs/browser/src/lib/preview-window/preview-window.component.html",
    "content": "<div class=\"{{ ui }}-frame preview-frame\">\n  <div class=\"address-bar\">\n    <div class=\"url\">{{ url }}</div>\n  </div>\n\n  <div class=\"frame\" [style.height]=\"height\">\n    <ng-content></ng-content>\n  </div>\n</div>\n"
  },
  {
    "path": "libs/browser/src/lib/preview-window/preview-window.component.scss",
    "content": "$border-color: #c2c2c2;\n\n:host {\n  height: 100%;\n  display: block;\n\n  ::ng-deep iframe {\n    display: block;\n    width: 100%;\n    flex-grow: 1;\n    height: 100%;\n  }\n}\n\n.preview-frame {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n\n  .frame {\n    box-shadow: 0 0 1px #dddddd;\n    margin-top: 0;\n    width: 100%;\n    background-color: #fff;\n    flex-grow: 1;\n    display: flex;\n    flex-direction: column;\n\n    & ::ng-deep *:first-child {\n      flex-grow: 1;\n      display: flex;\n      flex-direction: column;\n    }\n  }\n}\n\n.console-frame {\n  font: 16px monospace;\n\n  .address-bar {\n    padding: 0.2em;\n    font-weight: bold;\n\n    &::before {\n      display: inline;\n      color: #ff4081;\n      content: '>>';\n    }\n\n    .url {\n      display: inline-block;\n      margin-left: 0.5em;\n    }\n  }\n}\n\n.browser-frame {\n  font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;\n\n  .address-bar {\n    background: #eaeaea;\n    border: 1px solid #c2c2c2;\n    padding: 2px 2px 2px 20px;\n    -webkit-box-align: center;\n    align-items: center;\n\n    & > .url {\n      background: #fff;\n      box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);\n      border: 1px solid $border-color;\n      padding: 0.3em;\n      box-sizing: border-box;\n    }\n  }\n}\n"
  },
  {
    "path": "libs/browser/src/lib/preview-window/preview-window.component.ts",
    "content": "import { Component, Input } from '@angular/core';\n\nexport type PreviewWindowType = 'console' | 'browser';\n\n@Component({\n  selector: 'preview-window',\n  templateUrl: './preview-window.component.html',\n  styleUrls: ['./preview-window.component.scss']\n})\nexport class PreviewWindowComponent {\n  @Input() set url(url: string) {\n    this._url = url.replace('about:blank', 'https://localhost:4200');\n  }\n  @Input() height = '';\n  @Input() ui: PreviewWindowType = 'console';\n\n  get url() {\n    return this.ui === 'console' ? 'console' : this._url;\n  }\n\n  private _url = 'http://';\n}\n"
  },
  {
    "path": "libs/browser/src/lib/terminal-window/terminal-window.component.css",
    "content": ".terminal-frame {\n  width: 100%;\n  height: 100%;\n  box-shadow: 0 0 1px #dddddd;\n}\n\n.frame {\n  box-shadow: 0 0 1px #dddddd;\n  margin-top: 0;\n  color: #444;\n  width: 100%;\n  background-color: #fff;\n  white-space: pre-wrap;\n  font-family: monospace;\n}\n\n.img-full {\n  width: 100%;\n  height: 2vw;\n  background-image: url(/assets/images/consoletop-middle.png);\n  background-repeat: repeat;\n  display: flex;\n  justify-content: space-between;\n}\n\n.img-full img {\n  height: 2vw;\n}\n\n::ng-deep .success {\n  color: green;\n}\n\n::ng-deep .skipped {\n  color: #ddd;\n}\n"
  },
  {
    "path": "libs/browser/src/lib/terminal-window/terminal-window.component.html",
    "content": "<div class=\"terminal-frame\">\n  <div class=\"img-full\">\n    <div class=\"img-left\"><img src=\"assets/images/consoletop-left.png\" /></div>\n    <div class=\"img-right\">\n      <img src=\"assets/images/consoletop-right.png\" />\n    </div>\n  </div>\n  <div class=\"frame\" [style.height]=\"height\"><ng-content></ng-content></div>\n</div>\n"
  },
  {
    "path": "libs/browser/src/lib/terminal-window/terminal-window.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'preview-terminal-window',\n  templateUrl: './terminal-window.component.html',\n  styleUrls: ['./terminal-window.component.css']\n})\nexport class TerminalWindowComponent implements OnInit {\n  @Input() height = '';\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/browser/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/browser/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/browser/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2015\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"flatModuleId\": \"AUTOGENERATED\",\n    \"flatModuleOutFile\": \"AUTOGENERATED\"\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/browser/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/browser/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"preview\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"preview\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/assets/runner/README.md",
    "content": "# Ng bundler\n\nTODO(kirjs): tidy up and add more details.\n\n## Danger\n\nAngular fox warns you:\nThere is a lot of magic happening in this folder, only touch it if you know what's going on.\n\n```\n  _,-=._              /|_/|\n  `-.}   `=._,.-=-._.,  @ @._,\n     `._ _,-.   )      _,.-'\n        `    G.m-\"^m`m'        Dmytro O. Redchuk\n```\n\n## What's going on here?\n\nWe use the files generated here to run code examples in an iframe.\nThere are two files here that we generate:\n\n1. ng-dts/files.ts - contains all the types for monaco to use\n2. ng2/ng-bundle.js - contains all the js files bundled together.\n\n## Regenerating\n\nTo regenerate the files:\n\n- run `npm run build:bundler`\n- test it in the app really well.\n\n<p align=\"center\">\n  <img src=\"images/fox-warns-you.jpeg\" width=\"500px\" alt=\"Fox is very confused\">\n</p>\n"
  },
  {
    "path": "libs/code-demos/assets/runner/index.html",
    "content": "<!DOCTYPE html>\n"
  },
  {
    "path": "libs/code-demos/assets/runner/js/mocha.js",
    "content": "(function e(t, n, r) {\n  function s(o, u) {\n    if (!n[o]) {\n      if (!t[o]) {\n        var a = typeof require == 'function' && require;\n        if (!u && a) return a(o, !0);\n        if (i) return i(o, !0);\n        var f = new Error(\"Cannot find module '\" + o + \"'\");\n        throw ((f.code = 'MODULE_NOT_FOUND'), f);\n      }\n      var l = (n[o] = { exports: {} });\n      t[o][0].call(\n        l.exports,\n        function(e) {\n          var n = t[o][1][e];\n          return s(n ? n : e);\n        },\n        l,\n        l.exports,\n        e,\n        t,\n        n,\n        r\n      );\n    }\n    return n[o].exports;\n  }\n  var i = typeof require == 'function' && require;\n  for (var o = 0; o < r.length; o++) s(r[o]);\n  return s;\n})(\n  {\n    1: [\n      function(require, module, exports) {\n        (function(process) {\n          module.exports = process.env.COV\n            ? require('./lib-cov/mocha')\n            : require('./lib/mocha');\n        }.call(this, require('_process')));\n      },\n      { './lib-cov/mocha': undefined, './lib/mocha': 14, _process: 51 }\n    ],\n    2: [\n      function(require, module, exports) {\n        /* eslint-disable no-unused-vars */\n        module.exports = function(type) {\n          return function() {};\n        };\n      },\n      {}\n    ],\n    3: [\n      function(require, module, exports) {\n        /**\n         * Module exports.\n         */\n\n        exports.EventEmitter = EventEmitter;\n\n        /**\n         * Object#hasOwnProperty reference.\n         */\n        var objToString = Object.prototype.toString;\n\n        /**\n         * Check if a value is an array.\n         *\n         * @api private\n         * @param {*} val The value to test.\n         * @return {boolean} true if the value is a boolean, otherwise false.\n         */\n        function isArray(val) {\n          return objToString.call(val) === '[object Array]';\n        }\n\n        /**\n         * Event emitter constructor.\n         *\n         * @api public\n         */\n        function EventEmitter() {}\n\n        /**\n         * Add a listener.\n         *\n         * @api public\n         * @param {string} name Event name.\n         * @param {Function} fn Event handler.\n         * @return {EventEmitter} Emitter instance.\n         */\n        EventEmitter.prototype.on = function(name, fn) {\n          if (!this.$events) {\n            this.$events = {};\n          }\n\n          if (!this.$events[name]) {\n            this.$events[name] = fn;\n          } else if (isArray(this.$events[name])) {\n            this.$events[name].push(fn);\n          } else {\n            this.$events[name] = [this.$events[name], fn];\n          }\n\n          return this;\n        };\n\n        EventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n        /**\n         * Adds a volatile listener.\n         *\n         * @api public\n         * @param {string} name Event name.\n         * @param {Function} fn Event handler.\n         * @return {EventEmitter} Emitter instance.\n         */\n        EventEmitter.prototype.once = function(name, fn) {\n          var self = this;\n\n          function on() {\n            self.removeListener(name, on);\n            fn.apply(this, arguments);\n          }\n\n          on.listener = fn;\n          this.on(name, on);\n\n          return this;\n        };\n\n        /**\n         * Remove a listener.\n         *\n         * @api public\n         * @param {string} name Event name.\n         * @param {Function} fn Event handler.\n         * @return {EventEmitter} Emitter instance.\n         */\n        EventEmitter.prototype.removeListener = function(name, fn) {\n          if (this.$events && this.$events[name]) {\n            var list = this.$events[name];\n\n            if (isArray(list)) {\n              var pos = -1;\n\n              for (var i = 0, l = list.length; i < l; i++) {\n                if (\n                  list[i] === fn ||\n                  (list[i].listener && list[i].listener === fn)\n                ) {\n                  pos = i;\n                  break;\n                }\n              }\n\n              if (pos < 0) {\n                return this;\n              }\n\n              list.splice(pos, 1);\n\n              if (!list.length) {\n                delete this.$events[name];\n              }\n            } else if (list === fn || (list.listener && list.listener === fn)) {\n              delete this.$events[name];\n            }\n          }\n\n          return this;\n        };\n\n        /**\n         * Remove all listeners for an event.\n         *\n         * @api public\n         * @param {string} name Event name.\n         * @return {EventEmitter} Emitter instance.\n         */\n        EventEmitter.prototype.removeAllListeners = function(name) {\n          if (name === undefined) {\n            this.$events = {};\n            return this;\n          }\n\n          if (this.$events && this.$events[name]) {\n            this.$events[name] = null;\n          }\n\n          return this;\n        };\n\n        /**\n         * Get all listeners for a given event.\n         *\n         * @api public\n         * @param {string} name Event name.\n         * @return {EventEmitter} Emitter instance.\n         */\n        EventEmitter.prototype.listeners = function(name) {\n          if (!this.$events) {\n            this.$events = {};\n          }\n\n          if (!this.$events[name]) {\n            this.$events[name] = [];\n          }\n\n          if (!isArray(this.$events[name])) {\n            this.$events[name] = [this.$events[name]];\n          }\n\n          return this.$events[name];\n        };\n\n        /**\n         * Emit an event.\n         *\n         * @api public\n         * @param {string} name Event name.\n         * @return {boolean} true if at least one handler was invoked, else false.\n         */\n        EventEmitter.prototype.emit = function(name) {\n          if (!this.$events) {\n            return false;\n          }\n\n          var handler = this.$events[name];\n\n          if (!handler) {\n            return false;\n          }\n\n          var args = Array.prototype.slice.call(arguments, 1);\n\n          if (typeof handler === 'function') {\n            handler.apply(this, args);\n          } else if (isArray(handler)) {\n            var listeners = handler.slice();\n\n            for (var i = 0, l = listeners.length; i < l; i++) {\n              listeners[i].apply(this, args);\n            }\n          } else {\n            return false;\n          }\n\n          return true;\n        };\n      },\n      {}\n    ],\n    4: [\n      function(require, module, exports) {\n        /**\n         * Expose `Progress`.\n         */\n\n        module.exports = Progress;\n\n        /**\n         * Initialize a new `Progress` indicator.\n         */\n        function Progress() {\n          this.percent = 0;\n          this.size(0);\n          this.fontSize(11);\n          this.font('helvetica, arial, sans-serif');\n        }\n\n        /**\n         * Set progress size to `size`.\n         *\n         * @api public\n         * @param {number} size\n         * @return {Progress} Progress instance.\n         */\n        Progress.prototype.size = function(size) {\n          this._size = size;\n          return this;\n        };\n\n        /**\n         * Set text to `text`.\n         *\n         * @api public\n         * @param {string} text\n         * @return {Progress} Progress instance.\n         */\n        Progress.prototype.text = function(text) {\n          this._text = text;\n          return this;\n        };\n\n        /**\n         * Set font size to `size`.\n         *\n         * @api public\n         * @param {number} size\n         * @return {Progress} Progress instance.\n         */\n        Progress.prototype.fontSize = function(size) {\n          this._fontSize = size;\n          return this;\n        };\n\n        /**\n         * Set font to `family`.\n         *\n         * @param {string} family\n         * @return {Progress} Progress instance.\n         */\n        Progress.prototype.font = function(family) {\n          this._font = family;\n          return this;\n        };\n\n        /**\n         * Update percentage to `n`.\n         *\n         * @param {number} n\n         * @return {Progress} Progress instance.\n         */\n        Progress.prototype.update = function(n) {\n          this.percent = n;\n          return this;\n        };\n\n        /**\n         * Draw on `ctx`.\n         *\n         * @param {CanvasRenderingContext2d} ctx\n         * @return {Progress} Progress instance.\n         */\n        Progress.prototype.draw = function(ctx) {\n          try {\n            var percent = Math.min(this.percent, 100);\n            var size = this._size;\n            var half = size / 2;\n            var x = half;\n            var y = half;\n            var rad = half - 1;\n            var fontSize = this._fontSize;\n\n            ctx.font = fontSize + 'px ' + this._font;\n\n            var angle = Math.PI * 2 * (percent / 100);\n            ctx.clearRect(0, 0, size, size);\n\n            // outer circle\n            ctx.strokeStyle = '#9f9f9f';\n            ctx.beginPath();\n            ctx.arc(x, y, rad, 0, angle, false);\n            ctx.stroke();\n\n            // inner circle\n            ctx.strokeStyle = '#eee';\n            ctx.beginPath();\n            ctx.arc(x, y, rad - 1, 0, angle, true);\n            ctx.stroke();\n\n            // text\n            var text = this._text || (percent | 0) + '%';\n            var w = ctx.measureText(text).width;\n\n            ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1);\n          } catch (err) {\n            // don't fail if we can't render progress\n          }\n          return this;\n        };\n      },\n      {}\n    ],\n    5: [\n      function(require, module, exports) {\n        (function(global) {\n          exports.isatty = function isatty() {\n            return true;\n          };\n\n          exports.getWindowSize = function getWindowSize() {\n            if ('innerHeight' in global) {\n              return [global.innerHeight, global.innerWidth];\n            }\n            // In a Web Worker, the DOM Window is not available.\n            return [640, 480];\n          };\n        }.call(\n          this,\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      {}\n    ],\n    6: [\n      function(require, module, exports) {\n        /**\n         * Expose `Context`.\n         */\n\n        module.exports = Context;\n\n        /**\n         * Initialize a new `Context`.\n         *\n         * @api private\n         */\n        function Context() {}\n\n        /**\n         * Set or get the context `Runnable` to `runnable`.\n         *\n         * @api private\n         * @param {Runnable} runnable\n         * @return {Context}\n         */\n        Context.prototype.runnable = function(runnable) {\n          if (!arguments.length) {\n            return this._runnable;\n          }\n          this.test = this._runnable = runnable;\n          return this;\n        };\n\n        /**\n         * Set test timeout `ms`.\n         *\n         * @api private\n         * @param {number} ms\n         * @return {Context} self\n         */\n        Context.prototype.timeout = function(ms) {\n          if (!arguments.length) {\n            return this.runnable().timeout();\n          }\n          this.runnable().timeout(ms);\n          return this;\n        };\n\n        /**\n         * Set test timeout `enabled`.\n         *\n         * @api private\n         * @param {boolean} enabled\n         * @return {Context} self\n         */\n        Context.prototype.enableTimeouts = function(enabled) {\n          this.runnable().enableTimeouts(enabled);\n          return this;\n        };\n\n        /**\n         * Set test slowness threshold `ms`.\n         *\n         * @api private\n         * @param {number} ms\n         * @return {Context} self\n         */\n        Context.prototype.slow = function(ms) {\n          this.runnable().slow(ms);\n          return this;\n        };\n\n        /**\n         * Mark a test as skipped.\n         *\n         * @api private\n         * @return {Context} self\n         */\n        Context.prototype.skip = function() {\n          this.runnable().skip();\n          return this;\n        };\n\n        /**\n         * Inspect the context void of `._runnable`.\n         *\n         * @api private\n         * @return {string}\n         */\n        Context.prototype.inspect = function() {\n          return JSON.stringify(\n            this,\n            function(key, val) {\n              return key === 'runnable' || key === 'test' ? undefined : val;\n            },\n            2\n          );\n        };\n      },\n      {}\n    ],\n    7: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Runnable = require('./runnable');\n        var inherits = require('./utils').inherits;\n\n        /**\n         * Expose `Hook`.\n         */\n\n        module.exports = Hook;\n\n        /**\n         * Initialize a new `Hook` with the given `title` and callback `fn`.\n         *\n         * @param {String} title\n         * @param {Function} fn\n         * @api private\n         */\n        function Hook(title, fn) {\n          Runnable.call(this, title, fn);\n          this.type = 'hook';\n        }\n\n        /**\n         * Inherit from `Runnable.prototype`.\n         */\n        inherits(Hook, Runnable);\n\n        /**\n         * Get or set the test `err`.\n         *\n         * @param {Error} err\n         * @return {Error}\n         * @api public\n         */\n        Hook.prototype.error = function(err) {\n          if (!arguments.length) {\n            err = this._error;\n            this._error = null;\n            return err;\n          }\n\n          this._error = err;\n        };\n      },\n      { './runnable': 35, './utils': 39 }\n    ],\n    8: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Suite = require('../suite');\n        var Test = require('../test');\n        var escapeRe = require('escape-string-regexp');\n\n        /**\n         * BDD-style interface:\n         *\n         *      describe('Array', function() {\n         *        describe('#indexOf()', function() {\n         *          it('should return -1 when not present', function() {\n         *            // ...\n         *          });\n         *\n         *          it('should return the index when present', function() {\n         *            // ...\n         *          });\n         *        });\n         *      });\n         *\n         * @param {Suite} suite Root suite.\n         */\n        module.exports = function(suite) {\n          var suites = [suite];\n\n          suite.on('pre-require', function(context, file, mocha) {\n            var common = require('./common')(suites, context);\n\n            context.before = common.before;\n            context.after = common.after;\n            context.beforeEach = common.beforeEach;\n            context.afterEach = common.afterEach;\n            context.run = mocha.options.delay && common.runWithSuite(suite);\n            /**\n             * Describe a \"suite\" with the given `title`\n             * and callback `fn` containing nested suites\n             * and/or tests.\n             */\n\n            context.describe = context.context = function(title, fn) {\n              var suite = Suite.create(suites[0], title);\n              suite.file = file;\n              suites.unshift(suite);\n              fn.call(suite);\n              suites.shift();\n              return suite;\n            };\n\n            /**\n             * Pending describe.\n             */\n\n            context.xdescribe = context.xcontext = context.describe.skip = function(\n              title,\n              fn\n            ) {\n              var suite = Suite.create(suites[0], title);\n              suite.pending = true;\n              suites.unshift(suite);\n              fn.call(suite);\n              suites.shift();\n            };\n\n            /**\n             * Exclusive suite.\n             */\n\n            context.describe.only = function(title, fn) {\n              var suite = context.describe(title, fn);\n              mocha.grep(suite.fullTitle());\n              return suite;\n            };\n\n            /**\n             * Describe a specification or test-case\n             * with the given `title` and callback `fn`\n             * acting as a thunk.\n             */\n\n            context.it = context.specify = function(title, fn) {\n              var suite = suites[0];\n              if (suite.pending) {\n                fn = null;\n              }\n              var test = new Test(title, fn);\n              test.file = file;\n              suite.addTest(test);\n              return test;\n            };\n\n            /**\n             * Exclusive test-case.\n             */\n\n            context.it.only = function(title, fn) {\n              var test = context.it(title, fn);\n              var reString = '^' + escapeRe(test.fullTitle()) + '$';\n              mocha.grep(new RegExp(reString));\n              return test;\n            };\n\n            /**\n             * Pending test case.\n             */\n\n            context.xit = context.xspecify = context.it.skip = function(title) {\n              context.it(title);\n            };\n          });\n        };\n      },\n      {\n        '../suite': 37,\n        '../test': 38,\n        './common': 9,\n        'escape-string-regexp': 68\n      }\n    ],\n    9: [\n      function(require, module, exports) {\n        'use strict';\n\n        /**\n         * Functions common to more than one interface.\n         *\n         * @param {Suite[]} suites\n         * @param {Context} context\n         * @return {Object} An object containing common functions.\n         */\n        module.exports = function(suites, context) {\n          return {\n            /**\n             * This is only present if flag --delay is passed into Mocha. It triggers\n             * root suite execution.\n             *\n             * @param {Suite} suite The root wuite.\n             * @return {Function} A function which runs the root suite\n             */\n            runWithSuite: function runWithSuite(suite) {\n              return function run() {\n                suite.run();\n              };\n            },\n\n            /**\n             * Execute before running tests.\n             *\n             * @param {string} name\n             * @param {Function} fn\n             */\n            before: function(name, fn) {\n              suites[0].beforeAll(name, fn);\n            },\n\n            /**\n             * Execute after running tests.\n             *\n             * @param {string} name\n             * @param {Function} fn\n             */\n            after: function(name, fn) {\n              suites[0].afterAll(name, fn);\n            },\n\n            /**\n             * Execute before each test case.\n             *\n             * @param {string} name\n             * @param {Function} fn\n             */\n            beforeEach: function(name, fn) {\n              suites[0].beforeEach(name, fn);\n            },\n\n            /**\n             * Execute after each test case.\n             *\n             * @param {string} name\n             * @param {Function} fn\n             */\n            afterEach: function(name, fn) {\n              suites[0].afterEach(name, fn);\n            },\n\n            test: {\n              /**\n               * Pending test case.\n               *\n               * @param {string} title\n               */\n              skip: function(title) {\n                context.test(title);\n              }\n            }\n          };\n        };\n      },\n      {}\n    ],\n    10: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Suite = require('../suite');\n        var Test = require('../test');\n\n        /**\n         * TDD-style interface:\n         *\n         *     exports.Array = {\n         *       '#indexOf()': {\n         *         'should return -1 when the value is not present': function() {\n         *\n         *         },\n         *\n         *         'should return the correct index when the value is present': function() {\n         *\n         *         }\n         *       }\n         *     };\n         *\n         * @param {Suite} suite Root suite.\n         */\n        module.exports = function(suite) {\n          var suites = [suite];\n\n          suite.on('require', visit);\n\n          function visit(obj, file) {\n            var suite;\n            for (var key in obj) {\n              if (typeof obj[key] === 'function') {\n                var fn = obj[key];\n                switch (key) {\n                  case 'before':\n                    suites[0].beforeAll(fn);\n                    break;\n                  case 'after':\n                    suites[0].afterAll(fn);\n                    break;\n                  case 'beforeEach':\n                    suites[0].beforeEach(fn);\n                    break;\n                  case 'afterEach':\n                    suites[0].afterEach(fn);\n                    break;\n                  default:\n                    var test = new Test(key, fn);\n                    test.file = file;\n                    suites[0].addTest(test);\n                }\n              } else {\n                suite = Suite.create(suites[0], key);\n                suites.unshift(suite);\n                visit(obj[key]);\n                suites.shift();\n              }\n            }\n          }\n        };\n      },\n      { '../suite': 37, '../test': 38 }\n    ],\n    11: [\n      function(require, module, exports) {\n        exports.bdd = require('./bdd');\n        exports.tdd = require('./tdd');\n        exports.qunit = require('./qunit');\n        exports.exports = require('./exports');\n      },\n      { './bdd': 8, './exports': 10, './qunit': 12, './tdd': 13 }\n    ],\n    12: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Suite = require('../suite');\n        var Test = require('../test');\n        var escapeRe = require('escape-string-regexp');\n\n        /**\n         * QUnit-style interface:\n         *\n         *     suite('Array');\n         *\n         *     test('#length', function() {\n         *       var arr = [1,2,3];\n         *       ok(arr.length == 3);\n         *     });\n         *\n         *     test('#indexOf()', function() {\n         *       var arr = [1,2,3];\n         *       ok(arr.indexOf(1) == 0);\n         *       ok(arr.indexOf(2) == 1);\n         *       ok(arr.indexOf(3) == 2);\n         *     });\n         *\n         *     suite('String');\n         *\n         *     test('#length', function() {\n         *       ok('foo'.length == 3);\n         *     });\n         *\n         * @param {Suite} suite Root suite.\n         */\n        module.exports = function(suite) {\n          var suites = [suite];\n\n          suite.on('pre-require', function(context, file, mocha) {\n            var common = require('./common')(suites, context);\n\n            context.before = common.before;\n            context.after = common.after;\n            context.beforeEach = common.beforeEach;\n            context.afterEach = common.afterEach;\n            context.run = mocha.options.delay && common.runWithSuite(suite);\n            /**\n             * Describe a \"suite\" with the given `title`.\n             */\n\n            context.suite = function(title) {\n              if (suites.length > 1) {\n                suites.shift();\n              }\n              var suite = Suite.create(suites[0], title);\n              suite.file = file;\n              suites.unshift(suite);\n              return suite;\n            };\n\n            /**\n             * Exclusive test-case.\n             */\n\n            context.suite.only = function(title, fn) {\n              var suite = context.suite(title, fn);\n              mocha.grep(suite.fullTitle());\n            };\n\n            /**\n             * Describe a specification or test-case\n             * with the given `title` and callback `fn`\n             * acting as a thunk.\n             */\n\n            context.test = function(title, fn) {\n              var test = new Test(title, fn);\n              test.file = file;\n              suites[0].addTest(test);\n              return test;\n            };\n\n            /**\n             * Exclusive test-case.\n             */\n\n            context.test.only = function(title, fn) {\n              var test = context.test(title, fn);\n              var reString = '^' + escapeRe(test.fullTitle()) + '$';\n              mocha.grep(new RegExp(reString));\n            };\n\n            context.test.skip = common.test.skip;\n          });\n        };\n      },\n      {\n        '../suite': 37,\n        '../test': 38,\n        './common': 9,\n        'escape-string-regexp': 68\n      }\n    ],\n    13: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Suite = require('../suite');\n        var Test = require('../test');\n        var escapeRe = require('escape-string-regexp');\n\n        /**\n         * TDD-style interface:\n         *\n         *      suite('Array', function() {\n         *        suite('#indexOf()', function() {\n         *          suiteSetup(function() {\n         *\n         *          });\n         *\n         *          test('should return -1 when not present', function() {\n         *\n         *          });\n         *\n         *          test('should return the index when present', function() {\n         *\n         *          });\n         *\n         *          suiteTeardown(function() {\n         *\n         *          });\n         *        });\n         *      });\n         *\n         * @param {Suite} suite Root suite.\n         */\n        module.exports = function(suite) {\n          var suites = [suite];\n\n          suite.on('pre-require', function(context, file, mocha) {\n            var common = require('./common')(suites, context);\n\n            context.setup = common.beforeEach;\n            context.teardown = common.afterEach;\n            context.suiteSetup = common.before;\n            context.suiteTeardown = common.after;\n            context.run = mocha.options.delay && common.runWithSuite(suite);\n\n            /**\n             * Describe a \"suite\" with the given `title` and callback `fn` containing\n             * nested suites and/or tests.\n             */\n            context.suite = function(title, fn) {\n              var suite = Suite.create(suites[0], title);\n              suite.file = file;\n              suites.unshift(suite);\n              fn.call(suite);\n              suites.shift();\n              return suite;\n            };\n\n            /**\n             * Pending suite.\n             */\n            context.suite.skip = function(title, fn) {\n              var suite = Suite.create(suites[0], title);\n              suite.pending = true;\n              suites.unshift(suite);\n              fn.call(suite);\n              suites.shift();\n            };\n\n            /**\n             * Exclusive test-case.\n             */\n            context.suite.only = function(title, fn) {\n              var suite = context.suite(title, fn);\n              mocha.grep(suite.fullTitle());\n            };\n\n            /**\n             * Describe a specification or test-case with the given `title` and\n             * callback `fn` acting as a thunk.\n             */\n            context.test = function(title, fn) {\n              var suite = suites[0];\n              if (suite.pending) {\n                fn = null;\n              }\n              var test = new Test(title, fn);\n              test.file = file;\n              suite.addTest(test);\n              return test;\n            };\n\n            /**\n             * Exclusive test-case.\n             */\n\n            context.test.only = function(title, fn) {\n              var test = context.test(title, fn);\n              var reString = '^' + escapeRe(test.fullTitle()) + '$';\n              mocha.grep(new RegExp(reString));\n            };\n\n            context.test.skip = common.test.skip;\n          });\n        };\n      },\n      {\n        '../suite': 37,\n        '../test': 38,\n        './common': 9,\n        'escape-string-regexp': 68\n      }\n    ],\n    14: [\n      function(require, module, exports) {\n        (function(process, global, __dirname) {\n          /*!\n           * mocha\n           * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n           * MIT Licensed\n           */\n\n          /**\n           * Module dependencies.\n           */\n\n          var escapeRe = require('escape-string-regexp');\n          var path = require('path');\n          var reporters = require('./reporters');\n          var utils = require('./utils');\n\n          /**\n           * Expose `Mocha`.\n           */\n\n          exports = module.exports = Mocha;\n\n          /**\n           * To require local UIs and reporters when running in node.\n           */\n\n          if (!process.browser) {\n            var cwd = process.cwd();\n            module.paths.push(cwd, path.join(cwd, 'node_modules'));\n          }\n\n          /**\n           * Expose internals.\n           */\n\n          exports.utils = utils;\n          exports.interfaces = require('./interfaces');\n          exports.reporters = reporters;\n          exports.Runnable = require('./runnable');\n          exports.Context = require('./context');\n          exports.Runner = require('./runner');\n          exports.Suite = require('./suite');\n          exports.Hook = require('./hook');\n          exports.Test = require('./test');\n\n          /**\n           * Return image `name` path.\n           *\n           * @api private\n           * @param {string} name\n           * @return {string}\n           */\n          function image(name) {\n            return path.join(__dirname, '../images', name + '.png');\n          }\n\n          /**\n           * Set up mocha with `options`.\n           *\n           * Options:\n           *\n           *   - `ui` name \"bdd\", \"tdd\", \"exports\" etc\n           *   - `reporter` reporter instance, defaults to `mocha.reporters.spec`\n           *   - `globals` array of accepted globals\n           *   - `timeout` timeout in milliseconds\n           *   - `bail` bail on the first test failure\n           *   - `slow` milliseconds to wait before considering a test slow\n           *   - `ignoreLeaks` ignore global leaks\n           *   - `fullTrace` display the full stack-trace on failing\n           *   - `grep` string or regexp to filter tests with\n           *\n           * @param {Object} options\n           * @api public\n           */\n          function Mocha(options) {\n            options = options || {};\n            this.files = [];\n            this.options = options;\n            if (options.grep) {\n              this.grep(new RegExp(options.grep));\n            }\n            if (options.fgrep) {\n              this.grep(options.fgrep);\n            }\n            this.suite = new exports.Suite('', new exports.Context());\n            this.ui(options.ui);\n            this.bail(options.bail);\n            this.reporter(options.reporter, options.reporterOptions);\n            if (\n              typeof options.timeout !== 'undefined' &&\n              options.timeout !== null\n            ) {\n              this.timeout(options.timeout);\n            }\n            this.useColors(options.useColors);\n            if (options.enableTimeouts !== null) {\n              this.enableTimeouts(options.enableTimeouts);\n            }\n            if (options.slow) {\n              this.slow(options.slow);\n            }\n\n            this.suite.on('pre-require', function(context) {\n              exports.afterEach = context.afterEach || context.teardown;\n              exports.after = context.after || context.suiteTeardown;\n              exports.beforeEach = context.beforeEach || context.setup;\n              exports.before = context.before || context.suiteSetup;\n              exports.describe = context.describe || context.suite;\n              exports.it = context.it || context.test;\n              exports.setup = context.setup || context.beforeEach;\n              exports.suiteSetup = context.suiteSetup || context.before;\n              exports.suiteTeardown = context.suiteTeardown || context.after;\n              exports.suite = context.suite || context.describe;\n              exports.teardown = context.teardown || context.afterEach;\n              exports.test = context.test || context.it;\n              exports.run = context.run;\n            });\n          }\n\n          /**\n           * Enable or disable bailing on the first failure.\n           *\n           * @api public\n           * @param {boolean} [bail]\n           */\n          Mocha.prototype.bail = function(bail) {\n            if (!arguments.length) {\n              bail = true;\n            }\n            this.suite.bail(bail);\n            return this;\n          };\n\n          /**\n           * Add test `file`.\n           *\n           * @api public\n           * @param {string} file\n           */\n          Mocha.prototype.addFile = function(file) {\n            this.files.push(file);\n            return this;\n          };\n\n          /**\n           * Set reporter to `reporter`, defaults to \"spec\".\n           *\n           * @param {String|Function} reporter name or constructor\n           * @param {Object} reporterOptions optional options\n           * @api public\n           * @param {string|Function} reporter name or constructor\n           * @param {Object} reporterOptions optional options\n           */\n          Mocha.prototype.reporter = function(reporter, reporterOptions) {\n            if (typeof reporter === 'function') {\n              this._reporter = reporter;\n            } else {\n              reporter = reporter || 'spec';\n              var _reporter;\n              // Try to load a built-in reporter.\n              if (reporters[reporter]) {\n                _reporter = reporters[reporter];\n              }\n              // Try to load reporters from process.cwd() and node_modules\n              if (!_reporter) {\n                try {\n                  _reporter = require(reporter);\n                } catch (err) {\n                  err.message.indexOf('Cannot find module') !== -1\n                    ? console.warn('\"' + reporter + '\" reporter not found')\n                    : console.warn(\n                        '\"' +\n                          reporter +\n                          '\" reporter blew up with error:\\n' +\n                          err.stack\n                      );\n                }\n              }\n              if (!_reporter && reporter === 'teamcity') {\n                console.warn(\n                  'The Teamcity reporter was moved to a package named ' +\n                    'mocha-teamcity-reporter ' +\n                    '(https://npmjs.org/package/mocha-teamcity-reporter).'\n                );\n              }\n              if (!_reporter) {\n                throw new Error('invalid reporter \"' + reporter + '\"');\n              }\n              this._reporter = _reporter;\n            }\n            this.options.reporterOptions = reporterOptions;\n            return this;\n          };\n\n          /**\n           * Set test UI `name`, defaults to \"bdd\".\n           *\n           * @api public\n           * @param {string} bdd\n           */\n          Mocha.prototype.ui = function(name) {\n            name = name || 'bdd';\n            this._ui = exports.interfaces[name];\n            if (!this._ui) {\n              try {\n                this._ui = require(name);\n              } catch (err) {\n                throw new Error('invalid interface \"' + name + '\"');\n              }\n            }\n            this._ui = this._ui(this.suite);\n            return this;\n          };\n\n          /**\n           * Load registered files.\n           *\n           * @api private\n           */\n          Mocha.prototype.loadFiles = function(fn) {\n            var self = this;\n            var suite = this.suite;\n            var pending = this.files.length;\n            this.files.forEach(function(file) {\n              file = path.resolve(file);\n              suite.emit('pre-require', global, file, self);\n              suite.emit('require', require(file), file, self);\n              suite.emit('post-require', global, file, self);\n              --pending || (fn && fn());\n            });\n          };\n\n          /**\n           * Enable growl support.\n           *\n           * @api private\n           */\n          Mocha.prototype._growl = function(runner, reporter) {\n            var notify = require('growl');\n\n            runner.on('end', function() {\n              var stats = reporter.stats;\n              if (stats.failures) {\n                var msg =\n                  stats.failures + ' of ' + runner.total + ' tests failed';\n                notify(msg, {\n                  name: 'mocha',\n                  title: 'Failed',\n                  image: image('error')\n                });\n              } else {\n                notify(\n                  stats.passes + ' tests passed in ' + stats.duration + 'ms',\n                  {\n                    name: 'mocha',\n                    title: 'Passed',\n                    image: image('ok')\n                  }\n                );\n              }\n            });\n          };\n\n          /**\n           * Add regexp to grep, if `re` is a string it is escaped.\n           *\n           * @param {RegExp|String} re\n           * @return {Mocha}\n           * @api public\n           * @param {RegExp|string} re\n           * @return {Mocha}\n           */\n          Mocha.prototype.grep = function(re) {\n            this.options.grep =\n              typeof re === 'string' ? new RegExp(escapeRe(re)) : re;\n            return this;\n          };\n\n          /**\n           * Invert `.grep()` matches.\n           *\n           * @return {Mocha}\n           * @api public\n           */\n          Mocha.prototype.invert = function() {\n            this.options.invert = true;\n            return this;\n          };\n\n          /**\n           * Ignore global leaks.\n           *\n           * @param {Boolean} ignore\n           * @return {Mocha}\n           * @api public\n           * @param {boolean} ignore\n           * @return {Mocha}\n           */\n          Mocha.prototype.ignoreLeaks = function(ignore) {\n            this.options.ignoreLeaks = Boolean(ignore);\n            return this;\n          };\n\n          /**\n           * Enable global leak checking.\n           *\n           * @return {Mocha}\n           * @api public\n           */\n          Mocha.prototype.checkLeaks = function() {\n            this.options.ignoreLeaks = false;\n            return this;\n          };\n\n          /**\n           * Display long stack-trace on failing\n           *\n           * @return {Mocha}\n           * @api public\n           */\n          Mocha.prototype.fullTrace = function() {\n            this.options.fullStackTrace = true;\n            return this;\n          };\n\n          /**\n           * Enable growl support.\n           *\n           * @return {Mocha}\n           * @api public\n           */\n          Mocha.prototype.growl = function() {\n            this.options.growl = true;\n            return this;\n          };\n\n          /**\n           * Ignore `globals` array or string.\n           *\n           * @param {Array|String} globals\n           * @return {Mocha}\n           * @api public\n           * @param {Array|string} globals\n           * @return {Mocha}\n           */\n          Mocha.prototype.globals = function(globals) {\n            this.options.globals = (this.options.globals || []).concat(globals);\n            return this;\n          };\n\n          /**\n           * Emit color output.\n           *\n           * @param {Boolean} colors\n           * @return {Mocha}\n           * @api public\n           * @param {boolean} colors\n           * @return {Mocha}\n           */\n          Mocha.prototype.useColors = function(colors) {\n            if (colors !== undefined) {\n              this.options.useColors = colors;\n            }\n            return this;\n          };\n\n          /**\n           * Use inline diffs rather than +/-.\n           *\n           * @param {Boolean} inlineDiffs\n           * @return {Mocha}\n           * @api public\n           * @param {boolean} inlineDiffs\n           * @return {Mocha}\n           */\n          Mocha.prototype.useInlineDiffs = function(inlineDiffs) {\n            this.options.useInlineDiffs =\n              inlineDiffs !== undefined && inlineDiffs;\n            return this;\n          };\n\n          /**\n           * Set the timeout in milliseconds.\n           *\n           * @param {Number} timeout\n           * @return {Mocha}\n           * @api public\n           * @param {number} timeout\n           * @return {Mocha}\n           */\n          Mocha.prototype.timeout = function(timeout) {\n            this.suite.timeout(timeout);\n            return this;\n          };\n\n          /**\n           * Set slowness threshold in milliseconds.\n           *\n           * @param {Number} slow\n           * @return {Mocha}\n           * @api public\n           * @param {number} slow\n           * @return {Mocha}\n           */\n          Mocha.prototype.slow = function(slow) {\n            this.suite.slow(slow);\n            return this;\n          };\n\n          /**\n           * Enable timeouts.\n           *\n           * @param {Boolean} enabled\n           * @return {Mocha}\n           * @api public\n           * @param {boolean} enabled\n           * @return {Mocha}\n           */\n          Mocha.prototype.enableTimeouts = function(enabled) {\n            this.suite.enableTimeouts(\n              arguments.length && enabled !== undefined ? enabled : true\n            );\n            return this;\n          };\n\n          /**\n           * Makes all tests async (accepting a callback)\n           *\n           * @return {Mocha}\n           * @api public\n           */\n          Mocha.prototype.asyncOnly = function() {\n            this.options.asyncOnly = true;\n            return this;\n          };\n\n          /**\n           * Disable syntax highlighting (in browser).\n           *\n           * @api public\n           */\n          Mocha.prototype.noHighlighting = function() {\n            this.options.noHighlighting = true;\n            return this;\n          };\n\n          /**\n           * Enable uncaught errors to propagate (in browser).\n           *\n           * @return {Mocha}\n           * @api public\n           */\n          Mocha.prototype.allowUncaught = function() {\n            this.options.allowUncaught = true;\n            return this;\n          };\n\n          /**\n           * Delay root suite execution.\n           * @returns {Mocha}\n           */\n          Mocha.prototype.delay = function delay() {\n            this.options.delay = true;\n            return this;\n          };\n\n          /**\n           * Run tests and invoke `fn()` when complete.\n           *\n           * @api public\n           * @param {Function} fn\n           * @return {Runner}\n           */\n          Mocha.prototype.run = function(fn) {\n            if (this.files.length) {\n              this.loadFiles();\n            }\n            var suite = this.suite;\n            var options = this.options;\n            options.files = this.files;\n            var runner = new exports.Runner(suite, options.delay);\n            var reporter = new this._reporter(runner, options);\n            runner.ignoreLeaks = options.ignoreLeaks !== false;\n            runner.fullStackTrace = options.fullStackTrace;\n            runner.asyncOnly = options.asyncOnly;\n            runner.allowUncaught = options.allowUncaught;\n            if (options.grep) {\n              runner.grep(options.grep, options.invert);\n            }\n            if (options.globals) {\n              runner.globals(options.globals);\n            }\n            if (options.growl) {\n              this._growl(runner, reporter);\n            }\n            if (options.useColors !== undefined) {\n              exports.reporters.Base.useColors = options.useColors;\n            }\n            exports.reporters.Base.inlineDiffs = options.useInlineDiffs;\n\n            function done(failures) {\n              if (reporter.done) {\n                reporter.done(failures, fn);\n              } else {\n                fn && fn(failures);\n              }\n            }\n\n            return runner.run(done);\n          };\n        }.call(\n          this,\n          require('_process'),\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {},\n          '/lib'\n        ));\n      },\n      {\n        './context': 6,\n        './hook': 7,\n        './interfaces': 11,\n        './reporters': 22,\n        './runnable': 35,\n        './runner': 36,\n        './suite': 37,\n        './test': 38,\n        './utils': 39,\n        _process: 51,\n        'escape-string-regexp': 68,\n        growl: 69,\n        path: 41\n      }\n    ],\n    15: [\n      function(require, module, exports) {\n        /**\n         * Helpers.\n         */\n\n        var s = 1000;\n        var m = s * 60;\n        var h = m * 60;\n        var d = h * 24;\n        var y = d * 365.25;\n\n        /**\n         * Parse or format the given `val`.\n         *\n         * Options:\n         *\n         *  - `long` verbose formatting [false]\n         *\n         * @api public\n         * @param {string|number} val\n         * @param {Object} options\n         * @return {string|number}\n         */\n        module.exports = function(val, options) {\n          options = options || {};\n          if (typeof val === 'string') {\n            return parse(val);\n          }\n          // https://github.com/mochajs/mocha/pull/1035\n          return options['long'] ? longFormat(val) : shortFormat(val);\n        };\n\n        /**\n         * Parse the given `str` and return milliseconds.\n         *\n         * @api private\n         * @param {string} str\n         * @return {number}\n         */\n        function parse(str) {\n          var match = /^((?:\\d+)?\\.?\\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(\n            str\n          );\n          if (!match) {\n            return;\n          }\n          var n = parseFloat(match[1]);\n          var type = (match[2] || 'ms').toLowerCase();\n          switch (type) {\n            case 'years':\n            case 'year':\n            case 'y':\n              return n * y;\n            case 'days':\n            case 'day':\n            case 'd':\n              return n * d;\n            case 'hours':\n            case 'hour':\n            case 'h':\n              return n * h;\n            case 'minutes':\n            case 'minute':\n            case 'm':\n              return n * m;\n            case 'seconds':\n            case 'second':\n            case 's':\n              return n * s;\n            case 'ms':\n              return n;\n            default:\n            // No default case\n          }\n        }\n\n        /**\n         * Short format for `ms`.\n         *\n         * @api private\n         * @param {number} ms\n         * @return {string}\n         */\n        function shortFormat(ms) {\n          if (ms >= d) {\n            return Math.round(ms / d) + 'd';\n          }\n          if (ms >= h) {\n            return Math.round(ms / h) + 'h';\n          }\n          if (ms >= m) {\n            return Math.round(ms / m) + 'm';\n          }\n          if (ms >= s) {\n            return Math.round(ms / s) + 's';\n          }\n          return ms + 'ms';\n        }\n\n        /**\n         * Long format for `ms`.\n         *\n         * @api private\n         * @param {number} ms\n         * @return {string}\n         */\n        function longFormat(ms) {\n          return (\n            plural(ms, d, 'day') ||\n            plural(ms, h, 'hour') ||\n            plural(ms, m, 'minute') ||\n            plural(ms, s, 'second') ||\n            ms + ' ms'\n          );\n        }\n\n        /**\n         * Pluralization helper.\n         *\n         * @api private\n         * @param {number} ms\n         * @param {number} n\n         * @param {string} name\n         */\n        function plural(ms, n, name) {\n          if (ms < n) {\n            return;\n          }\n          if (ms < n * 1.5) {\n            return Math.floor(ms / n) + ' ' + name;\n          }\n          return Math.ceil(ms / n) + ' ' + name + 's';\n        }\n      },\n      {}\n    ],\n    16: [\n      function(require, module, exports) {\n        /**\n         * Expose `Pending`.\n         */\n\n        module.exports = Pending;\n\n        /**\n         * Initialize a new `Pending` error with the given message.\n         *\n         * @param {string} message\n         */\n        function Pending(message) {\n          this.message = message;\n        }\n      },\n      {}\n    ],\n    17: [\n      function(require, module, exports) {\n        (function(process, global) {\n          /**\n           * Module dependencies.\n           */\n\n          var tty = require('tty');\n          var diff = require('diff');\n          var ms = require('../ms');\n          var utils = require('../utils');\n          var supportsColor = process.browser\n            ? null\n            : require('supports-color');\n\n          /**\n           * Expose `Base`.\n           */\n\n          exports = module.exports = Base;\n\n          /**\n           * Save timer references to avoid Sinon interfering.\n           * See: https://github.com/mochajs/mocha/issues/237\n           */\n\n          /* eslint-disable no-unused-vars, no-native-reassign */\n          var Date = global.Date;\n          var setTimeout = global.setTimeout;\n          var setInterval = global.setInterval;\n          var clearTimeout = global.clearTimeout;\n          var clearInterval = global.clearInterval;\n          /* eslint-enable no-unused-vars, no-native-reassign */\n\n          /**\n           * Check if both stdio streams are associated with a tty.\n           */\n\n          var isatty = tty.isatty(1) && tty.isatty(2);\n\n          /**\n           * Enable coloring by default, except in the browser interface.\n           */\n\n          exports.useColors =\n            !process.browser &&\n            (supportsColor || process.env.MOCHA_COLORS !== undefined);\n\n          /**\n           * Inline diffs instead of +/-\n           */\n\n          exports.inlineDiffs = false;\n\n          /**\n           * Default color map.\n           */\n\n          exports.colors = {\n            pass: 90,\n            fail: 31,\n            'bright pass': 92,\n            'bright fail': 91,\n            'bright yellow': 93,\n            pending: 36,\n            suite: 0,\n            'error title': 0,\n            'error message': 31,\n            'error stack': 90,\n            checkmark: 32,\n            fast: 90,\n            medium: 33,\n            slow: 31,\n            green: 32,\n            light: 90,\n            'diff gutter': 90,\n            'diff added': 32,\n            'diff removed': 31\n          };\n\n          /**\n           * Default symbol map.\n           */\n\n          exports.symbols = {\n            ok: '✓',\n            err: '✖',\n            dot: '․'\n          };\n\n          // With node.js on Windows: use symbols available in terminal default fonts\n          if (process.platform === 'win32') {\n            exports.symbols.ok = '\\u221A';\n            exports.symbols.err = '\\u00D7';\n            exports.symbols.dot = '.';\n          }\n\n          /**\n           * Color `str` with the given `type`,\n           * allowing colors to be disabled,\n           * as well as user-defined color\n           * schemes.\n           *\n           * @param {string} type\n           * @param {string} str\n           * @return {string}\n           * @api private\n           */\n          var color = (exports.color = function(type, str) {\n            if (!exports.useColors) {\n              return String(str);\n            }\n            return '\\u001b[' + exports.colors[type] + 'm' + str + '\\u001b[0m';\n          });\n\n          /**\n           * Expose term window size, with some defaults for when stderr is not a tty.\n           */\n\n          exports.window = {\n            width: 75\n          };\n\n          if (isatty) {\n            exports.window.width = process.stdout.getWindowSize\n              ? process.stdout.getWindowSize(1)[0]\n              : tty.getWindowSize()[1];\n          }\n\n          /**\n           * Expose some basic cursor interactions that are common among reporters.\n           */\n\n          exports.cursor = {\n            hide: function() {\n              isatty && process.stdout.write('\\u001b[?25l');\n            },\n\n            show: function() {\n              isatty && process.stdout.write('\\u001b[?25h');\n            },\n\n            deleteLine: function() {\n              isatty && process.stdout.write('\\u001b[2K');\n            },\n\n            beginningOfLine: function() {\n              isatty && process.stdout.write('\\u001b[0G');\n            },\n\n            CR: function() {\n              if (isatty) {\n                exports.cursor.deleteLine();\n                exports.cursor.beginningOfLine();\n              } else {\n                process.stdout.write('\\r');\n              }\n            }\n          };\n\n          /**\n           * Outut the given `failures` as a list.\n           *\n           * @param {Array} failures\n           * @api public\n           */\n\n          exports.list = function(failures) {\n            console.log();\n            failures.forEach(function(test, i) {\n              // format\n              var fmt =\n                color('error title', '  %s) %s:\\n') +\n                color('error message', '     %s') +\n                color('error stack', '\\n%s\\n');\n\n              // msg\n              var msg;\n              var err = test.err;\n              var message;\n              if (err.message) {\n                message = err.message;\n              } else if (typeof err.inspect === 'function') {\n                message = err.inspect() + '';\n              } else {\n                message = '';\n              }\n              var stack = err.stack || message;\n              var index = stack.indexOf(message);\n              var actual = err.actual;\n              var expected = err.expected;\n              var escape = true;\n\n              if (index === -1) {\n                msg = message;\n              } else {\n                index += message.length;\n                msg = stack.slice(0, index);\n                // remove msg from stack\n                stack = stack.slice(index + 1);\n              }\n\n              // uncaught\n              if (err.uncaught) {\n                msg = 'Uncaught ' + msg;\n              }\n              // explicitly show diff\n              if (\n                err.showDiff !== false &&\n                sameType(actual, expected) &&\n                expected !== undefined\n              ) {\n                escape = false;\n                if (!(utils.isString(actual) && utils.isString(expected))) {\n                  err.actual = actual = utils.stringify(actual);\n                  err.expected = expected = utils.stringify(expected);\n                }\n\n                fmt =\n                  color('error title', '  %s) %s:\\n%s') +\n                  color('error stack', '\\n%s\\n');\n                var match = message.match(/^([^:]+): expected/);\n                msg =\n                  '\\n      ' + color('error message', match ? match[1] : msg);\n\n                if (exports.inlineDiffs) {\n                  msg += inlineDiff(err, escape);\n                } else {\n                  msg += unifiedDiff(err, escape);\n                }\n              }\n\n              // indent stack trace\n              stack = stack.replace(/^/gm, '  ');\n\n              console.log(fmt, i + 1, test.fullTitle(), msg, stack);\n            });\n          };\n\n          /**\n           * Initialize a new `Base` reporter.\n           *\n           * All other reporters generally\n           * inherit from this reporter, providing\n           * stats such as test duration, number\n           * of tests passed / failed etc.\n           *\n           * @param {Runner} runner\n           * @api public\n           */\n\n          function Base(runner) {\n            var stats = (this.stats = {\n              suites: 0,\n              tests: 0,\n              passes: 0,\n              pending: 0,\n              failures: 0\n            });\n            var failures = (this.failures = []);\n\n            if (!runner) {\n              return;\n            }\n            this.runner = runner;\n\n            runner.stats = stats;\n\n            runner.on('start', function() {\n              stats.start = new Date();\n            });\n\n            runner.on('suite', function(suite) {\n              stats.suites = stats.suites || 0;\n              suite.root || stats.suites++;\n            });\n\n            runner.on('test end', function() {\n              stats.tests = stats.tests || 0;\n              stats.tests++;\n            });\n\n            runner.on('pass', function(test) {\n              stats.passes = stats.passes || 0;\n\n              if (test.duration > test.slow()) {\n                test.speed = 'slow';\n              } else if (test.duration > test.slow() / 2) {\n                test.speed = 'medium';\n              } else {\n                test.speed = 'fast';\n              }\n\n              stats.passes++;\n            });\n\n            runner.on('fail', function(test, err) {\n              stats.failures = stats.failures || 0;\n              stats.failures++;\n              test.err = err;\n              failures.push(test);\n            });\n\n            runner.on('end', function() {\n              stats.end = new Date();\n              stats.duration = new Date() - stats.start;\n            });\n\n            runner.on('pending', function() {\n              stats.pending++;\n            });\n          }\n\n          /**\n           * Output common epilogue used by many of\n           * the bundled reporters.\n           *\n           * @api public\n           */\n          Base.prototype.epilogue = function() {\n            var stats = this.stats;\n            var fmt;\n\n            console.log();\n\n            // passes\n            fmt =\n              color('bright pass', ' ') +\n              color('green', ' %d passing') +\n              color('light', ' (%s)');\n\n            console.log(fmt, stats.passes || 0, ms(stats.duration));\n\n            // pending\n            if (stats.pending) {\n              fmt = color('pending', ' ') + color('pending', ' %d pending');\n\n              console.log(fmt, stats.pending);\n            }\n\n            // failures\n            if (stats.failures) {\n              fmt = color('fail', '  %d failing');\n\n              console.log(fmt, stats.failures);\n\n              Base.list(this.failures);\n              console.log();\n            }\n\n            console.log();\n          };\n\n          /**\n           * Pad the given `str` to `len`.\n           *\n           * @api private\n           * @param {string} str\n           * @param {string} len\n           * @return {string}\n           */\n          function pad(str, len) {\n            str = String(str);\n            return Array(len - str.length + 1).join(' ') + str;\n          }\n\n          /**\n           * Returns an inline diff between 2 strings with coloured ANSI output\n           *\n           * @api private\n           * @param {Error} err with actual/expected\n           * @param {boolean} escape\n           * @return {string} Diff\n           */\n          function inlineDiff(err, escape) {\n            var msg = errorDiff(err, 'WordsWithSpace', escape);\n\n            // linenos\n            var lines = msg.split('\\n');\n            if (lines.length > 4) {\n              var width = String(lines.length).length;\n              msg = lines\n                .map(function(str, i) {\n                  return pad(++i, width) + ' |' + ' ' + str;\n                })\n                .join('\\n');\n            }\n\n            // legend\n            msg =\n              '\\n' +\n              color('diff removed', 'actual') +\n              ' ' +\n              color('diff added', 'expected') +\n              '\\n\\n' +\n              msg +\n              '\\n';\n\n            // indent\n            msg = msg.replace(/^/gm, '      ');\n            return msg;\n          }\n\n          /**\n           * Returns a unified diff between two strings.\n           *\n           * @api private\n           * @param {Error} err with actual/expected\n           * @param {boolean} escape\n           * @return {string} The diff.\n           */\n          function unifiedDiff(err, escape) {\n            var indent = '      ';\n            function cleanUp(line) {\n              if (escape) {\n                line = escapeInvisibles(line);\n              }\n              if (line[0] === '+') {\n                return indent + colorLines('diff added', line);\n              }\n              if (line[0] === '-') {\n                return indent + colorLines('diff removed', line);\n              }\n              if (line.match(/\\@\\@/)) {\n                return null;\n              }\n              if (line.match(/\\\\ No newline/)) {\n                return null;\n              }\n              return indent + line;\n            }\n            function notBlank(line) {\n              return typeof line !== 'undefined' && line !== null;\n            }\n            var msg = diff.createPatch('string', err.actual, err.expected);\n            var lines = msg.split('\\n').splice(4);\n            return (\n              '\\n      ' +\n              colorLines('diff added', '+ expected') +\n              ' ' +\n              colorLines('diff removed', '- actual') +\n              '\\n\\n' +\n              lines\n                .map(cleanUp)\n                .filter(notBlank)\n                .join('\\n')\n            );\n          }\n\n          /**\n           * Return a character diff for `err`.\n           *\n           * @api private\n           * @param {Error} err\n           * @param {string} type\n           * @param {boolean} escape\n           * @return {string}\n           */\n          function errorDiff(err, type, escape) {\n            var actual = escape ? escapeInvisibles(err.actual) : err.actual;\n            var expected = escape\n              ? escapeInvisibles(err.expected)\n              : err.expected;\n            return diff['diff' + type](actual, expected)\n              .map(function(str) {\n                if (str.added) {\n                  return colorLines('diff added', str.value);\n                }\n                if (str.removed) {\n                  return colorLines('diff removed', str.value);\n                }\n                return str.value;\n              })\n              .join('');\n          }\n\n          /**\n           * Returns a string with all invisible characters in plain text\n           *\n           * @api private\n           * @param {string} line\n           * @return {string}\n           */\n          function escapeInvisibles(line) {\n            return line\n              .replace(/\\t/g, '<tab>')\n              .replace(/\\r/g, '<CR>')\n              .replace(/\\n/g, '<LF>\\n');\n          }\n\n          /**\n           * Color lines for `str`, using the color `name`.\n           *\n           * @api private\n           * @param {string} name\n           * @param {string} str\n           * @return {string}\n           */\n          function colorLines(name, str) {\n            return str\n              .split('\\n')\n              .map(function(str) {\n                return color(name, str);\n              })\n              .join('\\n');\n          }\n\n          /**\n           * Object#toString reference.\n           */\n          var objToString = Object.prototype.toString;\n\n          /**\n           * Check that a / b have the same type.\n           *\n           * @api private\n           * @param {Object} a\n           * @param {Object} b\n           * @return {boolean}\n           */\n          function sameType(a, b) {\n            return objToString.call(a) === objToString.call(b);\n          }\n        }.call(\n          this,\n          require('_process'),\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      {\n        '../ms': 15,\n        '../utils': 39,\n        _process: 51,\n        diff: 67,\n        'supports-color': 41,\n        tty: 5\n      }\n    ],\n    18: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Base = require('./base');\n        var utils = require('../utils');\n\n        /**\n         * Expose `Doc`.\n         */\n\n        exports = module.exports = Doc;\n\n        /**\n         * Initialize a new `Doc` reporter.\n         *\n         * @param {Runner} runner\n         * @api public\n         */\n        function Doc(runner) {\n          Base.call(this, runner);\n\n          var indents = 2;\n\n          function indent() {\n            return Array(indents).join('  ');\n          }\n\n          runner.on('suite', function(suite) {\n            if (suite.root) {\n              return;\n            }\n            ++indents;\n            console.log('%s<section class=\"suite\">', indent());\n            ++indents;\n            console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));\n            console.log('%s<dl>', indent());\n          });\n\n          runner.on('suite end', function(suite) {\n            if (suite.root) {\n              return;\n            }\n            console.log('%s</dl>', indent());\n            --indents;\n            console.log('%s</section>', indent());\n            --indents;\n          });\n\n          runner.on('pass', function(test) {\n            console.log('%s  <dt>%s</dt>', indent(), utils.escape(test.title));\n            var code = utils.escape(utils.clean(test.fn.toString()));\n            console.log(\n              '%s  <dd><pre><code>%s</code></pre></dd>',\n              indent(),\n              code\n            );\n          });\n\n          runner.on('fail', function(test, err) {\n            console.log(\n              '%s  <dt class=\"error\">%s</dt>',\n              indent(),\n              utils.escape(test.title)\n            );\n            var code = utils.escape(utils.clean(test.fn.toString()));\n            console.log(\n              '%s  <dd class=\"error\"><pre><code>%s</code></pre></dd>',\n              indent(),\n              code\n            );\n            console.log(\n              '%s  <dd class=\"error\">%s</dd>',\n              indent(),\n              utils.escape(err)\n            );\n          });\n        }\n      },\n      { '../utils': 39, './base': 17 }\n    ],\n    19: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var inherits = require('../utils').inherits;\n          var color = Base.color;\n\n          /**\n           * Expose `Dot`.\n           */\n\n          exports = module.exports = Dot;\n\n          /**\n           * Initialize a new `Dot` matrix test reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function Dot(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var width = (Base.window.width * 0.75) | 0;\n            var n = -1;\n\n            runner.on('start', function() {\n              process.stdout.write('\\n');\n            });\n\n            runner.on('pending', function() {\n              if (++n % width === 0) {\n                process.stdout.write('\\n  ');\n              }\n              process.stdout.write(color('pending', Base.symbols.dot));\n            });\n\n            runner.on('pass', function(test) {\n              if (++n % width === 0) {\n                process.stdout.write('\\n  ');\n              }\n              if (test.speed === 'slow') {\n                process.stdout.write(color('bright yellow', Base.symbols.dot));\n              } else {\n                process.stdout.write(color(test.speed, Base.symbols.dot));\n              }\n            });\n\n            runner.on('fail', function() {\n              if (++n % width === 0) {\n                process.stdout.write('\\n  ');\n              }\n              process.stdout.write(color('fail', Base.symbols.dot));\n            });\n\n            runner.on('end', function() {\n              console.log();\n              self.epilogue();\n            });\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(Dot, Base);\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    20: [\n      function(require, module, exports) {\n        (function(process, __dirname) {\n          /**\n           * Module dependencies.\n           */\n\n          var JSONCov = require('./json-cov');\n          var readFileSync = require('fs').readFileSync;\n          var join = require('path').join;\n\n          /**\n           * Expose `HTMLCov`.\n           */\n\n          exports = module.exports = HTMLCov;\n\n          /**\n           * Initialize a new `JsCoverage` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function HTMLCov(runner) {\n            var jade = require('jade');\n            var file = join(__dirname, '/templates/coverage.jade');\n            var str = readFileSync(file, 'utf8');\n            var fn = jade.compile(str, { filename: file });\n            var self = this;\n\n            JSONCov.call(this, runner, false);\n\n            runner.on('end', function() {\n              process.stdout.write(\n                fn({\n                  cov: self.cov,\n                  coverageClass: coverageClass\n                })\n              );\n            });\n          }\n\n          /**\n           * Return coverage class for a given coverage percentage.\n           *\n           * @api private\n           * @param {number} coveragePctg\n           * @return {string}\n           */\n          function coverageClass(coveragePctg) {\n            if (coveragePctg >= 75) {\n              return 'high';\n            }\n            if (coveragePctg >= 50) {\n              return 'medium';\n            }\n            if (coveragePctg >= 25) {\n              return 'low';\n            }\n            return 'terrible';\n          }\n        }.call(this, require('_process'), '/lib/reporters'));\n      },\n      { './json-cov': 23, _process: 51, fs: 41, jade: 41, path: 41 }\n    ],\n    21: [\n      function(require, module, exports) {\n        (function(global) {\n          /* eslint-env browser */\n\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var utils = require('../utils');\n          var Progress = require('../browser/progress');\n          var escapeRe = require('escape-string-regexp');\n          var escape = utils.escape;\n\n          /**\n           * Save timer references to avoid Sinon interfering (see GH-237).\n           */\n\n          /* eslint-disable no-unused-vars, no-native-reassign */\n          var Date = global.Date;\n          var setTimeout = global.setTimeout;\n          var setInterval = global.setInterval;\n          var clearTimeout = global.clearTimeout;\n          var clearInterval = global.clearInterval;\n          /* eslint-enable no-unused-vars, no-native-reassign */\n\n          /**\n           * Expose `HTML`.\n           */\n\n          exports = module.exports = HTML;\n\n          /**\n           * Stats template.\n           */\n\n          var statsTemplate =\n            '<ul id=\"mocha-stats\">' +\n            '<li class=\"progress\"><canvas width=\"40\" height=\"40\"></canvas></li>' +\n            '<li class=\"passes\"><a href=\"javascript:void(0);\">passes:</a> <em>0</em></li>' +\n            '<li class=\"failures\"><a href=\"javascript:void(0);\">failures:</a> <em>0</em></li>' +\n            '<li class=\"duration\">duration: <em>0</em>s</li>' +\n            '</ul>';\n\n          /**\n           * Initialize a new `HTML` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function HTML(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var stats = this.stats;\n            var stat = fragment(statsTemplate);\n            var items = stat.getElementsByTagName('li');\n            var passes = items[1].getElementsByTagName('em')[0];\n            var passesLink = items[1].getElementsByTagName('a')[0];\n            var failures = items[2].getElementsByTagName('em')[0];\n            var failuresLink = items[2].getElementsByTagName('a')[0];\n            var duration = items[3].getElementsByTagName('em')[0];\n            var canvas = stat.getElementsByTagName('canvas')[0];\n            var report = fragment('<ul id=\"mocha-report\"></ul>');\n            var stack = [report];\n            var progress;\n            var ctx;\n            var root = document.getElementById('mocha');\n\n            if (canvas.getContext) {\n              var ratio = window.devicePixelRatio || 1;\n              canvas.style.width = canvas.width;\n              canvas.style.height = canvas.height;\n              canvas.width *= ratio;\n              canvas.height *= ratio;\n              ctx = canvas.getContext('2d');\n              ctx.scale(ratio, ratio);\n              progress = new Progress();\n            }\n\n            if (!root) {\n              return error('#mocha div missing, add it to your document');\n            }\n\n            // pass toggle\n            on(passesLink, 'click', function() {\n              unhide();\n              var name = /pass/.test(report.className) ? '' : ' pass';\n              report.className =\n                report.className.replace(/fail|pass/g, '') + name;\n              if (report.className.trim()) {\n                hideSuitesWithout('test pass');\n              }\n            });\n\n            // failure toggle\n            on(failuresLink, 'click', function() {\n              unhide();\n              var name = /fail/.test(report.className) ? '' : ' fail';\n              report.className =\n                report.className.replace(/fail|pass/g, '') + name;\n              if (report.className.trim()) {\n                hideSuitesWithout('test fail');\n              }\n            });\n\n            root.appendChild(stat);\n            root.appendChild(report);\n\n            if (progress) {\n              progress.size(40);\n            }\n\n            runner.on('suite', function(suite) {\n              if (suite.root) {\n                return;\n              }\n\n              // suite\n              var url = self.suiteURL(suite);\n              var el = fragment(\n                '<li class=\"suite\"><h1><a href=\"%s\">%s</a></h1></li>',\n                url,\n                escape(suite.title)\n              );\n\n              // container\n              stack[0].appendChild(el);\n              stack.unshift(document.createElement('ul'));\n              el.appendChild(stack[0]);\n            });\n\n            runner.on('suite end', function(suite) {\n              if (suite.root) {\n                return;\n              }\n              stack.shift();\n            });\n\n            runner.on('fail', function(test) {\n              if (test.type === 'hook') {\n                runner.emit('test end', test);\n              }\n            });\n\n            runner.on('test end', function(test) {\n              // TODO: add to stats\n              var percent = ((stats.tests / this.total) * 100) | 0;\n              if (progress) {\n                progress.update(percent).draw(ctx);\n              }\n\n              // update stats\n              var ms = new Date() - stats.start;\n              text(passes, stats.passes);\n              text(failures, stats.failures);\n              text(duration, (ms / 1000).toFixed(2));\n\n              // test\n              var el;\n              if (test.state === 'passed') {\n                var url = self.testURL(test);\n                el = fragment(\n                  '<li class=\"test pass %e\"><h2>%e<span class=\"duration\">%ems</span> <a href=\"%s\" class=\"replay\">‣</a></h2></li>',\n                  test.speed,\n                  test.title,\n                  test.duration,\n                  url\n                );\n              } else if (test.pending) {\n                el = fragment(\n                  '<li class=\"test pass pending\"><h2>%e</h2></li>',\n                  test.title\n                );\n              } else {\n                el = fragment(\n                  '<li class=\"test fail\"><h2>%e <a href=\"%e\" class=\"replay\">‣</a></h2></li>',\n                  test.title,\n                  self.testURL(test)\n                );\n                var stackString; // Note: Includes leading newline\n                var message = test.err.toString();\n\n                // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we\n                // check for the result of the stringifying.\n                if (message === '[object Error]') {\n                  message = test.err.message;\n                }\n\n                if (test.err.stack) {\n                  var indexOfMessage = test.err.stack.indexOf(test.err.message);\n                  if (indexOfMessage === -1) {\n                    stackString = test.err.stack;\n                  } else {\n                    stackString = test.err.stack.substr(\n                      test.err.message.length + indexOfMessage\n                    );\n                  }\n                } else if (test.err.sourceURL && test.err.line !== undefined) {\n                  // Safari doesn't give you a stack. Let's at least provide a source line.\n                  stackString =\n                    '\\n(' + test.err.sourceURL + ':' + test.err.line + ')';\n                }\n\n                stackString = stackString || '';\n\n                if (test.err.htmlMessage && stackString) {\n                  el.appendChild(\n                    fragment(\n                      '<div class=\"html-error\">%s\\n<pre class=\"error\">%e</pre></div>',\n                      test.err.htmlMessage,\n                      stackString\n                    )\n                  );\n                } else if (test.err.htmlMessage) {\n                  el.appendChild(\n                    fragment(\n                      '<div class=\"html-error\">%s</div>',\n                      test.err.htmlMessage\n                    )\n                  );\n                } else {\n                  el.appendChild(\n                    fragment(\n                      '<pre class=\"error\">%e%e</pre>',\n                      message,\n                      stackString\n                    )\n                  );\n                }\n              }\n\n              // toggle code\n              // TODO: defer\n              if (!test.pending) {\n                var h2 = el.getElementsByTagName('h2')[0];\n\n                on(h2, 'click', function() {\n                  pre.style.display =\n                    pre.style.display === 'none' ? 'block' : 'none';\n                });\n\n                var pre = fragment(\n                  '<pre><code>%e</code></pre>',\n                  utils.clean(test.fn.toString())\n                );\n                el.appendChild(pre);\n                pre.style.display = 'none';\n              }\n\n              // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack.\n              if (stack[0]) {\n                stack[0].appendChild(el);\n              }\n            });\n          }\n\n          /**\n           * Makes a URL, preserving querystring (\"search\") parameters.\n           *\n           * @param {string} s\n           * @return {string} A new URL.\n           */\n          function makeUrl(s) {\n            var search = window.location.search;\n\n            // Remove previous grep query parameter if present\n            if (search) {\n              search = search\n                .replace(/[?&]grep=[^&\\s]*/g, '')\n                .replace(/^&/, '?');\n            }\n\n            return (\n              window.location.pathname +\n              (search ? search + '&' : '?') +\n              'grep=' +\n              encodeURIComponent(escapeRe(s))\n            );\n          }\n\n          /**\n           * Provide suite URL.\n           *\n           * @param {Object} [suite]\n           */\n          HTML.prototype.suiteURL = function(suite) {\n            return makeUrl(suite.fullTitle());\n          };\n\n          /**\n           * Provide test URL.\n           *\n           * @param {Object} [test]\n           */\n          HTML.prototype.testURL = function(test) {\n            return makeUrl(test.fullTitle());\n          };\n\n          /**\n           * Display error `msg`.\n           *\n           * @param {string} msg\n           */\n          function error(msg) {\n            document.body.appendChild(\n              fragment('<div id=\"mocha-error\">%s</div>', msg)\n            );\n          }\n\n          /**\n           * Return a DOM fragment from `html`.\n           *\n           * @param {string} html\n           */\n          function fragment(html) {\n            var args = arguments;\n            var div = document.createElement('div');\n            var i = 1;\n\n            div.innerHTML = html.replace(/%([se])/g, function(_, type) {\n              switch (type) {\n                case 's':\n                  return String(args[i++]);\n                case 'e':\n                  return escape(args[i++]);\n                // no default\n              }\n            });\n\n            return div.firstChild;\n          }\n\n          /**\n           * Check for suites that do not have elements\n           * with `classname`, and hide them.\n           *\n           * @param {text} classname\n           */\n          function hideSuitesWithout(classname) {\n            var suites = document.getElementsByClassName('suite');\n            for (var i = 0; i < suites.length; i++) {\n              var els = suites[i].getElementsByClassName(classname);\n              if (!els.length) {\n                suites[i].className += ' hidden';\n              }\n            }\n          }\n\n          /**\n           * Unhide .hidden suites.\n           */\n          function unhide() {\n            var els = document.getElementsByClassName('suite hidden');\n            for (var i = 0; i < els.length; ++i) {\n              els[i].className = els[i].className.replace(\n                'suite hidden',\n                'suite'\n              );\n            }\n          }\n\n          /**\n           * Set an element's text contents.\n           *\n           * @param {HTMLElement} el\n           * @param {string} contents\n           */\n          function text(el, contents) {\n            if (el.textContent) {\n              el.textContent = contents;\n            } else {\n              el.innerText = contents;\n            }\n          }\n\n          /**\n           * Listen on `event` with callback `fn`.\n           */\n          function on(el, event, fn) {\n            if (el.addEventListener) {\n              el.addEventListener(event, fn, false);\n            } else {\n              el.attachEvent('on' + event, fn);\n            }\n          }\n        }.call(\n          this,\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      {\n        '../browser/progress': 4,\n        '../utils': 39,\n        './base': 17,\n        'escape-string-regexp': 68\n      }\n    ],\n    22: [\n      function(require, module, exports) {\n        // Alias exports to a their normalized format Mocha#reporter to prevent a need\n        // for dynamic (try/catch) requires, which Browserify doesn't handle.\n        exports.Base = exports.base = require('./base');\n        exports.Dot = exports.dot = require('./dot');\n        exports.Doc = exports.doc = require('./doc');\n        exports.TAP = exports.tap = require('./tap');\n        exports.JSON = exports.json = require('./json');\n        exports.HTML = exports.html = require('./html');\n        exports.List = exports.list = require('./list');\n        exports.Min = exports.min = require('./min');\n        exports.Spec = exports.spec = require('./spec');\n        exports.Nyan = exports.nyan = require('./nyan');\n        exports.XUnit = exports.xunit = require('./xunit');\n        exports.Markdown = exports.markdown = require('./markdown');\n        exports.Progress = exports.progress = require('./progress');\n        exports.Landing = exports.landing = require('./landing');\n        exports.JSONCov = exports['json-cov'] = require('./json-cov');\n        exports.HTMLCov = exports['html-cov'] = require('./html-cov');\n        exports.JSONStream = exports['json-stream'] = require('./json-stream');\n      },\n      {\n        './base': 17,\n        './doc': 18,\n        './dot': 19,\n        './html': 21,\n        './html-cov': 20,\n        './json': 25,\n        './json-cov': 23,\n        './json-stream': 24,\n        './landing': 26,\n        './list': 27,\n        './markdown': 28,\n        './min': 29,\n        './nyan': 30,\n        './progress': 31,\n        './spec': 32,\n        './tap': 33,\n        './xunit': 34\n      }\n    ],\n    23: [\n      function(require, module, exports) {\n        (function(process, global) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n\n          /**\n           * Expose `JSONCov`.\n           */\n\n          exports = module.exports = JSONCov;\n\n          /**\n           * Initialize a new `JsCoverage` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           * @param {boolean} output\n           */\n          function JSONCov(runner, output) {\n            Base.call(this, runner);\n\n            output = arguments.length === 1 || output;\n            var self = this;\n            var tests = [];\n            var failures = [];\n            var passes = [];\n\n            runner.on('test end', function(test) {\n              tests.push(test);\n            });\n\n            runner.on('pass', function(test) {\n              passes.push(test);\n            });\n\n            runner.on('fail', function(test) {\n              failures.push(test);\n            });\n\n            runner.on('end', function() {\n              var cov = global._$jscoverage || {};\n              var result = (self.cov = map(cov));\n              result.stats = self.stats;\n              result.tests = tests.map(clean);\n              result.failures = failures.map(clean);\n              result.passes = passes.map(clean);\n              if (!output) {\n                return;\n              }\n              process.stdout.write(JSON.stringify(result, null, 2));\n            });\n          }\n\n          /**\n           * Map jscoverage data to a JSON structure\n           * suitable for reporting.\n           *\n           * @api private\n           * @param {Object} cov\n           * @return {Object}\n           */\n\n          function map(cov) {\n            var ret = {\n              instrumentation: 'node-jscoverage',\n              sloc: 0,\n              hits: 0,\n              misses: 0,\n              coverage: 0,\n              files: []\n            };\n\n            for (var filename in cov) {\n              if (Object.prototype.hasOwnProperty.call(cov, filename)) {\n                var data = coverage(filename, cov[filename]);\n                ret.files.push(data);\n                ret.hits += data.hits;\n                ret.misses += data.misses;\n                ret.sloc += data.sloc;\n              }\n            }\n\n            ret.files.sort(function(a, b) {\n              return a.filename.localeCompare(b.filename);\n            });\n\n            if (ret.sloc > 0) {\n              ret.coverage = (ret.hits / ret.sloc) * 100;\n            }\n\n            return ret;\n          }\n\n          /**\n           * Map jscoverage data for a single source file\n           * to a JSON structure suitable for reporting.\n           *\n           * @api private\n           * @param {string} filename name of the source file\n           * @param {Object} data jscoverage coverage data\n           * @return {Object}\n           */\n          function coverage(filename, data) {\n            var ret = {\n              filename: filename,\n              coverage: 0,\n              hits: 0,\n              misses: 0,\n              sloc: 0,\n              source: {}\n            };\n\n            data.source.forEach(function(line, num) {\n              num++;\n\n              if (data[num] === 0) {\n                ret.misses++;\n                ret.sloc++;\n              } else if (data[num] !== undefined) {\n                ret.hits++;\n                ret.sloc++;\n              }\n\n              ret.source[num] = {\n                source: line,\n                coverage: data[num] === undefined ? '' : data[num]\n              };\n            });\n\n            ret.coverage = (ret.hits / ret.sloc) * 100;\n\n            return ret;\n          }\n\n          /**\n           * Return a plain-object representation of `test`\n           * free of cyclic properties etc.\n           *\n           * @api private\n           * @param {Object} test\n           * @return {Object}\n           */\n          function clean(test) {\n            return {\n              duration: test.duration,\n              fullTitle: test.fullTitle(),\n              title: test.title\n            };\n          }\n        }.call(\n          this,\n          require('_process'),\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      { './base': 17, _process: 51 }\n    ],\n    24: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n\n          /**\n           * Expose `List`.\n           */\n\n          exports = module.exports = List;\n\n          /**\n           * Initialize a new `List` test reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function List(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var total = runner.total;\n\n            runner.on('start', function() {\n              console.log(JSON.stringify(['start', { total: total }]));\n            });\n\n            runner.on('pass', function(test) {\n              console.log(JSON.stringify(['pass', clean(test)]));\n            });\n\n            runner.on('fail', function(test, err) {\n              test = clean(test);\n              test.err = err.message;\n              test.stack = err.stack || null;\n              console.log(JSON.stringify(['fail', test]));\n            });\n\n            runner.on('end', function() {\n              process.stdout.write(JSON.stringify(['end', self.stats]));\n            });\n          }\n\n          /**\n           * Return a plain-object representation of `test`\n           * free of cyclic properties etc.\n           *\n           * @api private\n           * @param {Object} test\n           * @return {Object}\n           */\n          function clean(test) {\n            return {\n              title: test.title,\n              fullTitle: test.fullTitle(),\n              duration: test.duration\n            };\n          }\n        }.call(this, require('_process')));\n      },\n      { './base': 17, _process: 51 }\n    ],\n    25: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n\n          /**\n           * Expose `JSON`.\n           */\n\n          exports = module.exports = JSONReporter;\n\n          /**\n           * Initialize a new `JSON` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function JSONReporter(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var tests = [];\n            var pending = [];\n            var failures = [];\n            var passes = [];\n\n            runner.on('test end', function(test) {\n              tests.push(test);\n            });\n\n            runner.on('pass', function(test) {\n              passes.push(test);\n            });\n\n            runner.on('fail', function(test) {\n              failures.push(test);\n            });\n\n            runner.on('pending', function(test) {\n              pending.push(test);\n            });\n\n            runner.on('end', function() {\n              var obj = {\n                stats: self.stats,\n                tests: tests.map(clean),\n                pending: pending.map(clean),\n                failures: failures.map(clean),\n                passes: passes.map(clean)\n              };\n\n              runner.testResults = obj;\n\n              process.stdout.write(JSON.stringify(obj, null, 2));\n            });\n          }\n\n          /**\n           * Return a plain-object representation of `test`\n           * free of cyclic properties etc.\n           *\n           * @api private\n           * @param {Object} test\n           * @return {Object}\n           */\n          function clean(test) {\n            return {\n              title: test.title,\n              fullTitle: test.fullTitle(),\n              duration: test.duration,\n              err: errorJSON(test.err || {})\n            };\n          }\n\n          /**\n           * Transform `error` into a JSON object.\n           *\n           * @api private\n           * @param {Error} err\n           * @return {Object}\n           */\n          function errorJSON(err) {\n            var res = {};\n            Object.getOwnPropertyNames(err).forEach(function(key) {\n              res[key] = err[key];\n            }, err);\n            return res;\n          }\n        }.call(this, require('_process')));\n      },\n      { './base': 17, _process: 51 }\n    ],\n    26: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var inherits = require('../utils').inherits;\n          var cursor = Base.cursor;\n          var color = Base.color;\n\n          /**\n           * Expose `Landing`.\n           */\n\n          exports = module.exports = Landing;\n\n          /**\n           * Airplane color.\n           */\n\n          Base.colors.plane = 0;\n\n          /**\n           * Airplane crash color.\n           */\n\n          Base.colors['plane crash'] = 31;\n\n          /**\n           * Runway color.\n           */\n\n          Base.colors.runway = 90;\n\n          /**\n           * Initialize a new `Landing` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function Landing(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var width = (Base.window.width * 0.75) | 0;\n            var total = runner.total;\n            var stream = process.stdout;\n            var plane = color('plane', '✈');\n            var crashed = -1;\n            var n = 0;\n\n            function runway() {\n              var buf = Array(width).join('-');\n              return '  ' + color('runway', buf);\n            }\n\n            runner.on('start', function() {\n              stream.write('\\n\\n\\n  ');\n              cursor.hide();\n            });\n\n            runner.on('test end', function(test) {\n              // check if the plane crashed\n              var col = crashed === -1 ? ((width * ++n) / total) | 0 : crashed;\n\n              // show the crash\n              if (test.state === 'failed') {\n                plane = color('plane crash', '✈');\n                crashed = col;\n              }\n\n              // render landing strip\n              stream.write('\\u001b[' + (width + 1) + 'D\\u001b[2A');\n              stream.write(runway());\n              stream.write('\\n  ');\n              stream.write(color('runway', Array(col).join('⋅')));\n              stream.write(plane);\n              stream.write(\n                color('runway', Array(width - col).join('⋅') + '\\n')\n              );\n              stream.write(runway());\n              stream.write('\\u001b[0m');\n            });\n\n            runner.on('end', function() {\n              cursor.show();\n              console.log();\n              self.epilogue();\n            });\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(Landing, Base);\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    27: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var inherits = require('../utils').inherits;\n          var color = Base.color;\n          var cursor = Base.cursor;\n\n          /**\n           * Expose `List`.\n           */\n\n          exports = module.exports = List;\n\n          /**\n           * Initialize a new `List` test reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function List(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var n = 0;\n\n            runner.on('start', function() {\n              console.log();\n            });\n\n            runner.on('test', function(test) {\n              process.stdout.write(\n                color('pass', '    ' + test.fullTitle() + ': ')\n              );\n            });\n\n            runner.on('pending', function(test) {\n              var fmt = color('checkmark', '  -') + color('pending', ' %s');\n              console.log(fmt, test.fullTitle());\n            });\n\n            runner.on('pass', function(test) {\n              var fmt =\n                color('checkmark', '  ' + Base.symbols.dot) +\n                color('pass', ' %s: ') +\n                color(test.speed, '%dms');\n              cursor.CR();\n              console.log(fmt, test.fullTitle(), test.duration);\n            });\n\n            runner.on('fail', function(test) {\n              cursor.CR();\n              console.log(color('fail', '  %d) %s'), ++n, test.fullTitle());\n            });\n\n            runner.on('end', self.epilogue.bind(self));\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(List, Base);\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    28: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var utils = require('../utils');\n\n          /**\n           * Constants\n           */\n\n          var SUITE_PREFIX = '$';\n\n          /**\n           * Expose `Markdown`.\n           */\n\n          exports = module.exports = Markdown;\n\n          /**\n           * Initialize a new `Markdown` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function Markdown(runner) {\n            Base.call(this, runner);\n\n            var level = 0;\n            var buf = '';\n\n            function title(str) {\n              return Array(level).join('#') + ' ' + str;\n            }\n\n            function mapTOC(suite, obj) {\n              var ret = obj;\n              var key = SUITE_PREFIX + suite.title;\n\n              obj = obj[key] = obj[key] || { suite: suite };\n              suite.suites.forEach(function(suite) {\n                mapTOC(suite, obj);\n              });\n\n              return ret;\n            }\n\n            function stringifyTOC(obj, level) {\n              ++level;\n              var buf = '';\n              var link;\n              for (var key in obj) {\n                if (key === 'suite') {\n                  continue;\n                }\n                if (key !== SUITE_PREFIX) {\n                  link = ' - [' + key.substring(1) + ']';\n                  link += '(#' + utils.slug(obj[key].suite.fullTitle()) + ')\\n';\n                  buf += Array(level).join('  ') + link;\n                }\n                buf += stringifyTOC(obj[key], level);\n              }\n              return buf;\n            }\n\n            function generateTOC(suite) {\n              var obj = mapTOC(suite, {});\n              return stringifyTOC(obj, 0);\n            }\n\n            generateTOC(runner.suite);\n\n            runner.on('suite', function(suite) {\n              ++level;\n              var slug = utils.slug(suite.fullTitle());\n              buf += '<a name=\"' + slug + '\"></a>' + '\\n';\n              buf += title(suite.title) + '\\n';\n            });\n\n            runner.on('suite end', function() {\n              --level;\n            });\n\n            runner.on('pass', function(test) {\n              var code = utils.clean(test.fn.toString());\n              buf += test.title + '.\\n';\n              buf += '\\n```js\\n';\n              buf += code + '\\n';\n              buf += '```\\n\\n';\n            });\n\n            runner.on('end', function() {\n              process.stdout.write('# TOC\\n');\n              process.stdout.write(generateTOC(runner.suite));\n              process.stdout.write(buf);\n            });\n          }\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    29: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var inherits = require('../utils').inherits;\n\n          /**\n           * Expose `Min`.\n           */\n\n          exports = module.exports = Min;\n\n          /**\n           * Initialize a new `Min` minimal test reporter (best used with --watch).\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function Min(runner) {\n            Base.call(this, runner);\n\n            runner.on('start', function() {\n              // clear screen\n              process.stdout.write('\\u001b[2J');\n              // set cursor position\n              process.stdout.write('\\u001b[1;3H');\n            });\n\n            runner.on('end', this.epilogue.bind(this));\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(Min, Base);\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    30: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var inherits = require('../utils').inherits;\n\n          /**\n           * Expose `Dot`.\n           */\n\n          exports = module.exports = NyanCat;\n\n          /**\n           * Initialize a new `Dot` matrix test reporter.\n           *\n           * @param {Runner} runner\n           * @api public\n           */\n\n          function NyanCat(runner) {\n            Base.call(this, runner);\n\n            var self = this;\n            var width = (Base.window.width * 0.75) | 0;\n            var nyanCatWidth = (this.nyanCatWidth = 11);\n\n            this.colorIndex = 0;\n            this.numberOfLines = 4;\n            this.rainbowColors = self.generateColors();\n            this.scoreboardWidth = 5;\n            this.tick = 0;\n            this.trajectories = [[], [], [], []];\n            this.trajectoryWidthMax = width - nyanCatWidth;\n\n            runner.on('start', function() {\n              Base.cursor.hide();\n              self.draw();\n            });\n\n            runner.on('pending', function() {\n              self.draw();\n            });\n\n            runner.on('pass', function() {\n              self.draw();\n            });\n\n            runner.on('fail', function() {\n              self.draw();\n            });\n\n            runner.on('end', function() {\n              Base.cursor.show();\n              for (var i = 0; i < self.numberOfLines; i++) {\n                write('\\n');\n              }\n              self.epilogue();\n            });\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(NyanCat, Base);\n\n          /**\n           * Draw the nyan cat\n           *\n           * @api private\n           */\n\n          NyanCat.prototype.draw = function() {\n            this.appendRainbow();\n            this.drawScoreboard();\n            this.drawRainbow();\n            this.drawNyanCat();\n            this.tick = !this.tick;\n          };\n\n          /**\n           * Draw the \"scoreboard\" showing the number\n           * of passes, failures and pending tests.\n           *\n           * @api private\n           */\n\n          NyanCat.prototype.drawScoreboard = function() {\n            var stats = this.stats;\n\n            function draw(type, n) {\n              write(' ');\n              write(Base.color(type, n));\n              write('\\n');\n            }\n\n            draw('green', stats.passes);\n            draw('fail', stats.failures);\n            draw('pending', stats.pending);\n            write('\\n');\n\n            this.cursorUp(this.numberOfLines);\n          };\n\n          /**\n           * Append the rainbow.\n           *\n           * @api private\n           */\n\n          NyanCat.prototype.appendRainbow = function() {\n            var segment = this.tick ? '_' : '-';\n            var rainbowified = this.rainbowify(segment);\n\n            for (var index = 0; index < this.numberOfLines; index++) {\n              var trajectory = this.trajectories[index];\n              if (trajectory.length >= this.trajectoryWidthMax) {\n                trajectory.shift();\n              }\n              trajectory.push(rainbowified);\n            }\n          };\n\n          /**\n           * Draw the rainbow.\n           *\n           * @api private\n           */\n\n          NyanCat.prototype.drawRainbow = function() {\n            var self = this;\n\n            this.trajectories.forEach(function(line) {\n              write('\\u001b[' + self.scoreboardWidth + 'C');\n              write(line.join(''));\n              write('\\n');\n            });\n\n            this.cursorUp(this.numberOfLines);\n          };\n\n          /**\n           * Draw the nyan cat\n           *\n           * @api private\n           */\n          NyanCat.prototype.drawNyanCat = function() {\n            var self = this;\n            var startWidth = this.scoreboardWidth + this.trajectories[0].length;\n            var dist = '\\u001b[' + startWidth + 'C';\n            var padding = '';\n\n            write(dist);\n            write('_,------,');\n            write('\\n');\n\n            write(dist);\n            padding = self.tick ? '  ' : '   ';\n            write('_|' + padding + '/\\\\_/\\\\ ');\n            write('\\n');\n\n            write(dist);\n            padding = self.tick ? '_' : '__';\n            var tail = self.tick ? '~' : '^';\n            write(tail + '|' + padding + this.face() + ' ');\n            write('\\n');\n\n            write(dist);\n            padding = self.tick ? ' ' : '  ';\n            write(padding + '\"\"  \"\" ');\n            write('\\n');\n\n            this.cursorUp(this.numberOfLines);\n          };\n\n          /**\n           * Draw nyan cat face.\n           *\n           * @api private\n           * @return {string}\n           */\n\n          NyanCat.prototype.face = function() {\n            var stats = this.stats;\n            if (stats.failures) {\n              return '( x .x)';\n            } else if (stats.pending) {\n              return '( o .o)';\n            } else if (stats.passes) {\n              return '( ^ .^)';\n            }\n            return '( - .-)';\n          };\n\n          /**\n           * Move cursor up `n`.\n           *\n           * @api private\n           * @param {number} n\n           */\n\n          NyanCat.prototype.cursorUp = function(n) {\n            write('\\u001b[' + n + 'A');\n          };\n\n          /**\n           * Move cursor down `n`.\n           *\n           * @api private\n           * @param {number} n\n           */\n\n          NyanCat.prototype.cursorDown = function(n) {\n            write('\\u001b[' + n + 'B');\n          };\n\n          /**\n           * Generate rainbow colors.\n           *\n           * @api private\n           * @return {Array}\n           */\n          NyanCat.prototype.generateColors = function() {\n            var colors = [];\n\n            for (var i = 0; i < 6 * 7; i++) {\n              var pi3 = Math.floor(Math.PI / 3);\n              var n = i * (1.0 / 6);\n              var r = Math.floor(3 * Math.sin(n) + 3);\n              var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3);\n              var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3);\n              colors.push(36 * r + 6 * g + b + 16);\n            }\n\n            return colors;\n          };\n\n          /**\n           * Apply rainbow to the given `str`.\n           *\n           * @api private\n           * @param {string} str\n           * @return {string}\n           */\n          NyanCat.prototype.rainbowify = function(str) {\n            if (!Base.useColors) {\n              return str;\n            }\n            var color = this.rainbowColors[\n              this.colorIndex % this.rainbowColors.length\n            ];\n            this.colorIndex += 1;\n            return '\\u001b[38;5;' + color + 'm' + str + '\\u001b[0m';\n          };\n\n          /**\n           * Stdout helper.\n           *\n           * @param {string} string A message to write to stdout.\n           */\n          function write(string) {\n            process.stdout.write(string);\n          }\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    31: [\n      function(require, module, exports) {\n        (function(process) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var inherits = require('../utils').inherits;\n          var color = Base.color;\n          var cursor = Base.cursor;\n\n          /**\n           * Expose `Progress`.\n           */\n\n          exports = module.exports = Progress;\n\n          /**\n           * General progress bar color.\n           */\n\n          Base.colors.progress = 90;\n\n          /**\n           * Initialize a new `Progress` bar test reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           * @param {Object} options\n           */\n          function Progress(runner, options) {\n            Base.call(this, runner);\n\n            var self = this;\n            var width = (Base.window.width * 0.5) | 0;\n            var total = runner.total;\n            var complete = 0;\n            var lastN = -1;\n\n            // default chars\n            options = options || {};\n            options.open = options.open || '[';\n            options.complete = options.complete || '▬';\n            options.incomplete = options.incomplete || Base.symbols.dot;\n            options.close = options.close || ']';\n            options.verbose = false;\n\n            // tests started\n            runner.on('start', function() {\n              console.log();\n              cursor.hide();\n            });\n\n            // tests complete\n            runner.on('test end', function() {\n              complete++;\n\n              var percent = complete / total;\n              var n = (width * percent) | 0;\n              var i = width - n;\n\n              if (n === lastN && !options.verbose) {\n                // Don't re-render the line if it hasn't changed\n                return;\n              }\n              lastN = n;\n\n              cursor.CR();\n              process.stdout.write('\\u001b[J');\n              process.stdout.write(color('progress', '  ' + options.open));\n              process.stdout.write(Array(n).join(options.complete));\n              process.stdout.write(Array(i).join(options.incomplete));\n              process.stdout.write(color('progress', options.close));\n              if (options.verbose) {\n                process.stdout.write(\n                  color('progress', ' ' + complete + ' of ' + total)\n                );\n              }\n            });\n\n            // tests are complete, output some stats\n            // and the failures if any\n            runner.on('end', function() {\n              cursor.show();\n              console.log();\n              self.epilogue();\n            });\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(Progress, Base);\n        }.call(this, require('_process')));\n      },\n      { '../utils': 39, './base': 17, _process: 51 }\n    ],\n    32: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Base = require('./base');\n        var inherits = require('../utils').inherits;\n        var color = Base.color;\n        var cursor = Base.cursor;\n\n        /**\n         * Expose `Spec`.\n         */\n\n        exports = module.exports = Spec;\n\n        /**\n         * Initialize a new `Spec` test reporter.\n         *\n         * @api public\n         * @param {Runner} runner\n         */\n        function Spec(runner) {\n          Base.call(this, runner);\n\n          var self = this;\n          var indents = 0;\n          var n = 0;\n\n          function indent() {\n            return Array(indents).join('  ');\n          }\n\n          runner.on('start', function() {\n            console.log();\n          });\n\n          runner.on('suite', function(suite) {\n            ++indents;\n            console.log(color('suite', '%s%s'), indent(), suite.title);\n          });\n\n          runner.on('suite end', function() {\n            --indents;\n            if (indents === 1) {\n              console.log();\n            }\n          });\n\n          runner.on('pending', function(test) {\n            var fmt = indent() + color('pending', '  - %s');\n            console.log(fmt, test.title);\n          });\n\n          runner.on('pass', function(test) {\n            var fmt;\n            if (test.speed === 'fast') {\n              fmt =\n                indent() +\n                color('checkmark', '  ' + Base.symbols.ok) +\n                color('pass', ' %s');\n              cursor.CR();\n              console.log(fmt, test.title);\n            } else {\n              fmt =\n                indent() +\n                color('checkmark', '  ' + Base.symbols.ok) +\n                color('pass', ' %s') +\n                color(test.speed, ' (%dms)');\n              cursor.CR();\n              console.log(fmt, test.title, test.duration);\n            }\n          });\n\n          runner.on('fail', function(test) {\n            cursor.CR();\n            console.log(indent() + color('fail', '  %d) %s'), ++n, test.title);\n          });\n\n          runner.on('end', self.epilogue.bind(self));\n        }\n\n        /**\n         * Inherit from `Base.prototype`.\n         */\n        inherits(Spec, Base);\n      },\n      { '../utils': 39, './base': 17 }\n    ],\n    33: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Base = require('./base');\n\n        /**\n         * Expose `TAP`.\n         */\n\n        exports = module.exports = TAP;\n\n        /**\n         * Initialize a new `TAP` reporter.\n         *\n         * @api public\n         * @param {Runner} runner\n         */\n        function TAP(runner) {\n          Base.call(this, runner);\n\n          var n = 1;\n          var passes = 0;\n          var failures = 0;\n\n          runner.on('start', function() {\n            var total = runner.grepTotal(runner.suite);\n            console.log('%d..%d', 1, total);\n          });\n\n          runner.on('test end', function() {\n            ++n;\n          });\n\n          runner.on('pending', function(test) {\n            console.log('ok %d %s # SKIP -', n, title(test));\n          });\n\n          runner.on('pass', function(test) {\n            passes++;\n            console.log('ok %d %s', n, title(test));\n          });\n\n          runner.on('fail', function(test, err) {\n            failures++;\n            console.log('not ok %d %s', n, title(test));\n            if (err.stack) {\n              console.log(err.stack.replace(/^/gm, '  '));\n            }\n          });\n\n          runner.on('end', function() {\n            console.log('# tests ' + (passes + failures));\n            console.log('# pass ' + passes);\n            console.log('# fail ' + failures);\n          });\n        }\n\n        /**\n         * Return a TAP-safe title of `test`\n         *\n         * @api private\n         * @param {Object} test\n         * @return {String}\n         */\n        function title(test) {\n          return test.fullTitle().replace(/#/g, '');\n        }\n      },\n      { './base': 17 }\n    ],\n    34: [\n      function(require, module, exports) {\n        (function(global) {\n          /**\n           * Module dependencies.\n           */\n\n          var Base = require('./base');\n          var utils = require('../utils');\n          var inherits = utils.inherits;\n          var fs = require('fs');\n          var escape = utils.escape;\n\n          /**\n           * Save timer references to avoid Sinon interfering (see GH-237).\n           */\n\n          /* eslint-disable no-unused-vars, no-native-reassign */\n          var Date = global.Date;\n          var setTimeout = global.setTimeout;\n          var setInterval = global.setInterval;\n          var clearTimeout = global.clearTimeout;\n          var clearInterval = global.clearInterval;\n          /* eslint-enable no-unused-vars, no-native-reassign */\n\n          /**\n           * Expose `XUnit`.\n           */\n\n          exports = module.exports = XUnit;\n\n          /**\n           * Initialize a new `XUnit` reporter.\n           *\n           * @api public\n           * @param {Runner} runner\n           */\n          function XUnit(runner, options) {\n            Base.call(this, runner);\n\n            var stats = this.stats;\n            var tests = [];\n            var self = this;\n\n            if (options.reporterOptions && options.reporterOptions.output) {\n              if (!fs.createWriteStream) {\n                throw new Error('file output not supported in browser');\n              }\n              self.fileStream = fs.createWriteStream(\n                options.reporterOptions.output\n              );\n            }\n\n            runner.on('pending', function(test) {\n              tests.push(test);\n            });\n\n            runner.on('pass', function(test) {\n              tests.push(test);\n            });\n\n            runner.on('fail', function(test) {\n              tests.push(test);\n            });\n\n            runner.on('end', function() {\n              self.write(\n                tag(\n                  'testsuite',\n                  {\n                    name: 'Mocha Tests',\n                    tests: stats.tests,\n                    failures: stats.failures,\n                    errors: stats.failures,\n                    skipped: stats.tests - stats.failures - stats.passes,\n                    timestamp: new Date().toUTCString(),\n                    time: stats.duration / 1000 || 0\n                  },\n                  false\n                )\n              );\n\n              tests.forEach(function(t) {\n                self.test(t);\n              });\n\n              self.write('</testsuite>');\n            });\n          }\n\n          /**\n           * Inherit from `Base.prototype`.\n           */\n          inherits(XUnit, Base);\n\n          /**\n           * Override done to close the stream (if it's a file).\n           *\n           * @param failures\n           * @param {Function} fn\n           */\n          XUnit.prototype.done = function(failures, fn) {\n            if (this.fileStream) {\n              this.fileStream.end(function() {\n                fn(failures);\n              });\n            } else {\n              fn(failures);\n            }\n          };\n\n          /**\n           * Write out the given line.\n           *\n           * @param {string} line\n           */\n          XUnit.prototype.write = function(line) {\n            if (this.fileStream) {\n              this.fileStream.write(line + '\\n');\n            } else {\n              console.log(line);\n            }\n          };\n\n          /**\n           * Output tag for the given `test.`\n           *\n           * @param {Test} test\n           */\n          XUnit.prototype.test = function(test) {\n            var attrs = {\n              classname: test.parent.fullTitle(),\n              name: test.title,\n              time: test.duration / 1000 || 0\n            };\n\n            if (test.state === 'failed') {\n              var err = test.err;\n              this.write(\n                tag(\n                  'testcase',\n                  attrs,\n                  false,\n                  tag(\n                    'failure',\n                    {},\n                    false,\n                    cdata(escape(err.message) + '\\n' + err.stack)\n                  )\n                )\n              );\n            } else if (test.pending) {\n              this.write(\n                tag('testcase', attrs, false, tag('skipped', {}, true))\n              );\n            } else {\n              this.write(tag('testcase', attrs, true));\n            }\n          };\n\n          /**\n           * HTML tag helper.\n           *\n           * @param name\n           * @param attrs\n           * @param close\n           * @param content\n           * @return {string}\n           */\n          function tag(name, attrs, close, content) {\n            var end = close ? '/>' : '>';\n            var pairs = [];\n            var tag;\n\n            for (var key in attrs) {\n              if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n                pairs.push(key + '=\"' + escape(attrs[key]) + '\"');\n              }\n            }\n\n            tag =\n              '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;\n            if (content) {\n              tag += content + '</' + name + end;\n            }\n            return tag;\n          }\n\n          /**\n           * Return cdata escaped CDATA `str`.\n           */\n\n          function cdata(str) {\n            return '<![CDATA[' + escape(str) + ']]>';\n          }\n        }.call(\n          this,\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      { '../utils': 39, './base': 17, fs: 41 }\n    ],\n    35: [\n      function(require, module, exports) {\n        (function(global) {\n          /**\n           * Module dependencies.\n           */\n\n          var EventEmitter = require('events').EventEmitter;\n          var Pending = require('./pending');\n          var debug = require('debug')('mocha:runnable');\n          var milliseconds = require('./ms');\n          var utils = require('./utils');\n          var inherits = utils.inherits;\n\n          /**\n           * Save timer references to avoid Sinon interfering (see GH-237).\n           */\n\n          /* eslint-disable no-unused-vars, no-native-reassign */\n          var Date = global.Date;\n          var setTimeout = global.setTimeout;\n          var setInterval = global.setInterval;\n          var clearTimeout = global.clearTimeout;\n          var clearInterval = global.clearInterval;\n          /* eslint-enable no-unused-vars, no-native-reassign */\n\n          /**\n           * Object#toString().\n           */\n\n          var toString = Object.prototype.toString;\n\n          /**\n           * Expose `Runnable`.\n           */\n\n          module.exports = Runnable;\n\n          /**\n           * Initialize a new `Runnable` with the given `title` and callback `fn`.\n           *\n           * @param {String} title\n           * @param {Function} fn\n           * @api private\n           * @param {string} title\n           * @param {Function} fn\n           */\n          function Runnable(title, fn) {\n            this.title = title;\n            this.fn = fn;\n            this.async = fn && fn.length;\n            this.sync = !this.async;\n            this._timeout = 2000;\n            this._slow = 75;\n            this._enableTimeouts = true;\n            this.timedOut = false;\n            this._trace = new Error('done() called multiple times');\n          }\n\n          /**\n           * Inherit from `EventEmitter.prototype`.\n           */\n          inherits(Runnable, EventEmitter);\n\n          /**\n           * Set & get timeout `ms`.\n           *\n           * @api private\n           * @param {number|string} ms\n           * @return {Runnable|number} ms or Runnable instance.\n           */\n          Runnable.prototype.timeout = function(ms) {\n            if (!arguments.length) {\n              return this._timeout;\n            }\n            if (ms === 0) {\n              this._enableTimeouts = false;\n            }\n            if (typeof ms === 'string') {\n              ms = milliseconds(ms);\n            }\n            debug('timeout %d', ms);\n            this._timeout = ms;\n            if (this.timer) {\n              this.resetTimeout();\n            }\n            return this;\n          };\n\n          /**\n           * Set & get slow `ms`.\n           *\n           * @api private\n           * @param {number|string} ms\n           * @return {Runnable|number} ms or Runnable instance.\n           */\n          Runnable.prototype.slow = function(ms) {\n            if (!arguments.length) {\n              return this._slow;\n            }\n            if (typeof ms === 'string') {\n              ms = milliseconds(ms);\n            }\n            debug('timeout %d', ms);\n            this._slow = ms;\n            return this;\n          };\n\n          /**\n           * Set and get whether timeout is `enabled`.\n           *\n           * @api private\n           * @param {boolean} enabled\n           * @return {Runnable|boolean} enabled or Runnable instance.\n           */\n          Runnable.prototype.enableTimeouts = function(enabled) {\n            if (!arguments.length) {\n              return this._enableTimeouts;\n            }\n            debug('enableTimeouts %s', enabled);\n            this._enableTimeouts = enabled;\n            return this;\n          };\n\n          /**\n           * Halt and mark as pending.\n           *\n           * @api private\n           */\n          Runnable.prototype.skip = function() {\n            throw new Pending();\n          };\n\n          /**\n           * Return the full title generated by recursively concatenating the parent's\n           * full title.\n           *\n           * @api public\n           * @return {string}\n           */\n          Runnable.prototype.fullTitle = function() {\n            return this.parent.fullTitle() + ' ' + this.title;\n          };\n\n          /**\n           * Clear the timeout.\n           *\n           * @api private\n           */\n          Runnable.prototype.clearTimeout = function() {\n            clearTimeout(this.timer);\n          };\n\n          /**\n           * Inspect the runnable void of private properties.\n           *\n           * @api private\n           * @return {string}\n           */\n          Runnable.prototype.inspect = function() {\n            return JSON.stringify(\n              this,\n              function(key, val) {\n                if (key[0] === '_') {\n                  return;\n                }\n                if (key === 'parent') {\n                  return '#<Suite>';\n                }\n                if (key === 'ctx') {\n                  return '#<Context>';\n                }\n                return val;\n              },\n              2\n            );\n          };\n\n          /**\n           * Reset the timeout.\n           *\n           * @api private\n           */\n          Runnable.prototype.resetTimeout = function() {\n            var self = this;\n            var ms = this.timeout() || 1e9;\n\n            if (!this._enableTimeouts) {\n              return;\n            }\n            this.clearTimeout();\n            this.timer = setTimeout(function() {\n              if (!self._enableTimeouts) {\n                return;\n              }\n              self.callback(\n                new Error(\n                  'timeout of ' +\n                    ms +\n                    'ms exceeded. Ensure the done() callback is being called in this test.'\n                )\n              );\n              self.timedOut = true;\n            }, ms);\n          };\n\n          /**\n           * Whitelist a list of globals for this test run.\n           *\n           * @api private\n           * @param {string[]} globals\n           */\n          Runnable.prototype.globals = function(globals) {\n            this._allowedGlobals = globals;\n          };\n\n          /**\n           * Run the test and invoke `fn(err)`.\n           *\n           * @param {Function} fn\n           * @api private\n           */\n          Runnable.prototype.run = function(fn) {\n            var self = this;\n            var start = new Date();\n            var ctx = this.ctx;\n            var finished;\n            var emitted;\n\n            // Sometimes the ctx exists, but it is not runnable\n            if (ctx && ctx.runnable) {\n              ctx.runnable(this);\n            }\n\n            // called multiple times\n            function multiple(err) {\n              if (emitted) {\n                return;\n              }\n              emitted = true;\n              self.emit(\n                'error',\n                err ||\n                  new Error(\n                    'done() called multiple times; stacktrace may be inaccurate'\n                  )\n              );\n            }\n\n            // finished\n            function done(err) {\n              var ms = self.timeout();\n              if (self.timedOut) {\n                return;\n              }\n              if (finished) {\n                return multiple(err || self._trace);\n              }\n\n              self.clearTimeout();\n              self.duration = new Date() - start;\n              finished = true;\n              if (!err && self.duration > ms && self._enableTimeouts) {\n                err = new Error(\n                  'timeout of ' +\n                    ms +\n                    'ms exceeded. Ensure the done() callback is being called in this test.'\n                );\n              }\n              fn(err);\n            }\n\n            // for .resetTimeout()\n            this.callback = done;\n\n            // explicit async with `done` argument\n            if (this.async) {\n              this.resetTimeout();\n\n              if (this.allowUncaught) {\n                return callFnAsync(this.fn);\n              }\n              try {\n                callFnAsync(this.fn);\n              } catch (err) {\n                done(utils.getError(err));\n              }\n              return;\n            }\n\n            if (this.allowUncaught) {\n              callFn(this.fn);\n              done();\n              return;\n            }\n\n            // sync or promise-returning\n            try {\n              if (this.pending) {\n                done();\n              } else {\n                callFn(this.fn);\n              }\n            } catch (err) {\n              done(utils.getError(err));\n            }\n\n            function callFn(fn) {\n              var result = fn.call(ctx);\n              if (result && typeof result.then === 'function') {\n                self.resetTimeout();\n                result.then(\n                  function() {\n                    done();\n                  },\n                  function(reason) {\n                    done(\n                      reason ||\n                        new Error('Promise rejected with no or falsy reason')\n                    );\n                  }\n                );\n              } else {\n                if (self.asyncOnly) {\n                  return done(\n                    new Error(\n                      '--async-only option in use without declaring `done()` or returning a promise'\n                    )\n                  );\n                }\n\n                done();\n              }\n            }\n\n            function callFnAsync(fn) {\n              fn.call(ctx, function(err) {\n                if (\n                  err instanceof Error ||\n                  toString.call(err) === '[object Error]'\n                ) {\n                  return done(err);\n                }\n                if (err) {\n                  if (\n                    Object.prototype.toString.call(err) === '[object Object]'\n                  ) {\n                    return done(\n                      new Error(\n                        'done() invoked with non-Error: ' + JSON.stringify(err)\n                      )\n                    );\n                  }\n                  return done(\n                    new Error('done() invoked with non-Error: ' + err)\n                  );\n                }\n                done();\n              });\n            }\n          };\n        }.call(\n          this,\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      { './ms': 15, './pending': 16, './utils': 39, debug: 2, events: 3 }\n    ],\n    36: [\n      function(require, module, exports) {\n        (function(process, global) {\n          /**\n           * Module dependencies.\n           */\n\n          var EventEmitter = require('events').EventEmitter;\n          var Pending = require('./pending');\n          var utils = require('./utils');\n          var inherits = utils.inherits;\n          var debug = require('debug')('mocha:runner');\n          var Runnable = require('./runnable');\n          var filter = utils.filter;\n          var indexOf = utils.indexOf;\n          var keys = utils.keys;\n          var stackFilter = utils.stackTraceFilter();\n          var stringify = utils.stringify;\n          var type = utils.type;\n          var undefinedError = utils.undefinedError;\n\n          /**\n           * Non-enumerable globals.\n           */\n\n          var globals = [\n            'setTimeout',\n            'clearTimeout',\n            'setInterval',\n            'clearInterval',\n            'XMLHttpRequest',\n            'Date',\n            'setImmediate',\n            'clearImmediate'\n          ];\n\n          /**\n           * Expose `Runner`.\n           */\n\n          module.exports = Runner;\n\n          /**\n           * Initialize a `Runner` for the given `suite`.\n           *\n           * Events:\n           *\n           *   - `start`  execution started\n           *   - `end`  execution complete\n           *   - `suite`  (suite) test suite execution started\n           *   - `suite end`  (suite) all tests (and sub-suites) have finished\n           *   - `test`  (test) test execution started\n           *   - `test end`  (test) test completed\n           *   - `hook`  (hook) hook execution started\n           *   - `hook end`  (hook) hook complete\n           *   - `pass`  (test) test passed\n           *   - `fail`  (test, err) test failed\n           *   - `pending`  (test) test pending\n           *\n           * @api public\n           * @param {Suite} suite Root suite\n           * @param {boolean} [delay] Whether or not to delay execution of root suite\n           * until ready.\n           */\n          function Runner(suite, delay) {\n            var self = this;\n            this._globals = [];\n            this._abort = false;\n            this._delay = delay;\n            this.suite = suite;\n            this.started = false;\n            this.total = suite.total();\n            this.failures = 0;\n            this.on('test end', function(test) {\n              self.checkGlobals(test);\n            });\n            this.on('hook end', function(hook) {\n              self.checkGlobals(hook);\n            });\n            this._defaultGrep = /.*/;\n            this.grep(this._defaultGrep);\n            this.globals(this.globalProps().concat(extraGlobals()));\n          }\n\n          /**\n           * Wrapper for setImmediate, process.nextTick, or browser polyfill.\n           *\n           * @param {Function} fn\n           * @api private\n           */\n          Runner.immediately = global.setImmediate || process.nextTick;\n\n          /**\n           * Inherit from `EventEmitter.prototype`.\n           */\n          inherits(Runner, EventEmitter);\n\n          /**\n           * Run tests with full titles matching `re`. Updates runner.total\n           * with number of tests matched.\n           *\n           * @param {RegExp} re\n           * @param {Boolean} invert\n           * @return {Runner} for chaining\n           * @api public\n           * @param {RegExp} re\n           * @param {boolean} invert\n           * @return {Runner} Runner instance.\n           */\n          Runner.prototype.grep = function(re, invert) {\n            debug('grep %s', re);\n            this._grep = re;\n            this._invert = invert;\n            this.total = this.grepTotal(this.suite);\n            return this;\n          };\n\n          /**\n           * Returns the number of tests matching the grep search for the\n           * given suite.\n           *\n           * @param {Suite} suite\n           * @return {Number}\n           * @api public\n           * @param {Suite} suite\n           * @return {number}\n           */\n          Runner.prototype.grepTotal = function(suite) {\n            var self = this;\n            var total = 0;\n\n            suite.eachTest(function(test) {\n              var match = self._grep.test(test.fullTitle());\n              if (self._invert) {\n                match = !match;\n              }\n              if (match) {\n                total++;\n              }\n            });\n\n            return total;\n          };\n\n          /**\n           * Return a list of global properties.\n           *\n           * @return {Array}\n           * @api private\n           */\n          Runner.prototype.globalProps = function() {\n            var props = keys(global);\n\n            // non-enumerables\n            for (var i = 0; i < globals.length; ++i) {\n              if (~indexOf(props, globals[i])) {\n                continue;\n              }\n              props.push(globals[i]);\n            }\n\n            return props;\n          };\n\n          /**\n           * Allow the given `arr` of globals.\n           *\n           * @param {Array} arr\n           * @return {Runner} for chaining\n           * @api public\n           * @param {Array} arr\n           * @return {Runner} Runner instance.\n           */\n          Runner.prototype.globals = function(arr) {\n            if (!arguments.length) {\n              return this._globals;\n            }\n            debug('globals %j', arr);\n            this._globals = this._globals.concat(arr);\n            return this;\n          };\n\n          /**\n           * Check for global variable leaks.\n           *\n           * @api private\n           */\n          Runner.prototype.checkGlobals = function(test) {\n            if (this.ignoreLeaks) {\n              return;\n            }\n            var ok = this._globals;\n\n            var globals = this.globalProps();\n            var leaks;\n\n            if (test) {\n              ok = ok.concat(test._allowedGlobals || []);\n            }\n\n            if (this.prevGlobalsLength === globals.length) {\n              return;\n            }\n            this.prevGlobalsLength = globals.length;\n\n            leaks = filterLeaks(ok, globals);\n            this._globals = this._globals.concat(leaks);\n\n            if (leaks.length > 1) {\n              this.fail(\n                test,\n                new Error('global leaks detected: ' + leaks.join(', ') + '')\n              );\n            } else if (leaks.length) {\n              this.fail(test, new Error('global leak detected: ' + leaks[0]));\n            }\n          };\n\n          /**\n           * Fail the given `test`.\n           *\n           * @api private\n           * @param {Test} test\n           * @param {Error} err\n           */\n          Runner.prototype.fail = function(test, err) {\n            ++this.failures;\n            test.state = 'failed';\n\n            if (\n              !(\n                err instanceof Error ||\n                (err && typeof err.message === 'string')\n              )\n            ) {\n              err = new Error(\n                'the ' +\n                  type(err) +\n                  ' ' +\n                  stringify(err) +\n                  ' was thrown, throw an Error :)'\n              );\n            }\n\n            err.stack =\n              this.fullStackTrace || !err.stack\n                ? err.stack\n                : stackFilter(err.stack);\n\n            this.emit('fail', test, err);\n          };\n\n          /**\n           * Fail the given `hook` with `err`.\n           *\n           * Hook failures work in the following pattern:\n           * - If bail, then exit\n           * - Failed `before` hook skips all tests in a suite and subsuites,\n           *   but jumps to corresponding `after` hook\n           * - Failed `before each` hook skips remaining tests in a\n           *   suite and jumps to corresponding `after each` hook,\n           *   which is run only once\n           * - Failed `after` hook does not alter\n           *   execution order\n           * - Failed `after each` hook skips remaining tests in a\n           *   suite and subsuites, but executes other `after each`\n           *   hooks\n           *\n           * @api private\n           * @param {Hook} hook\n           * @param {Error} err\n           */\n          Runner.prototype.failHook = function(hook, err) {\n            if (hook.ctx && hook.ctx.currentTest) {\n              hook.originalTitle = hook.originalTitle || hook.title;\n              hook.title =\n                hook.originalTitle +\n                ' for \"' +\n                hook.ctx.currentTest.title +\n                '\"';\n            }\n\n            this.fail(hook, err);\n            if (this.suite.bail()) {\n              this.emit('end');\n            }\n          };\n\n          /**\n           * Run hook `name` callbacks and then invoke `fn()`.\n           *\n           * @api private\n           * @param {string} name\n           * @param {Function} fn\n           */\n\n          Runner.prototype.hook = function(name, fn) {\n            var suite = this.suite;\n            var hooks = suite['_' + name];\n            var self = this;\n\n            function next(i) {\n              var hook = hooks[i];\n              if (!hook) {\n                return fn();\n              }\n              self.currentRunnable = hook;\n\n              hook.ctx.currentTest = self.test;\n\n              self.emit('hook', hook);\n\n              if (!hook.listeners('error').length) {\n                hook.on('error', function(err) {\n                  self.failHook(hook, err);\n                });\n              }\n\n              hook.run(function(err) {\n                var testError = hook.error();\n                if (testError) {\n                  self.fail(self.test, testError);\n                }\n                if (err) {\n                  if (err instanceof Pending) {\n                    suite.pending = true;\n                  } else {\n                    self.failHook(hook, err);\n\n                    // stop executing hooks, notify callee of hook err\n                    return fn(err);\n                  }\n                }\n                self.emit('hook end', hook);\n                delete hook.ctx.currentTest;\n                next(++i);\n              });\n            }\n\n            Runner.immediately(function() {\n              next(0);\n            });\n          };\n\n          /**\n           * Run hook `name` for the given array of `suites`\n           * in order, and callback `fn(err, errSuite)`.\n           *\n           * @api private\n           * @param {string} name\n           * @param {Array} suites\n           * @param {Function} fn\n           */\n          Runner.prototype.hooks = function(name, suites, fn) {\n            var self = this;\n            var orig = this.suite;\n\n            function next(suite) {\n              self.suite = suite;\n\n              if (!suite) {\n                self.suite = orig;\n                return fn();\n              }\n\n              self.hook(name, function(err) {\n                if (err) {\n                  var errSuite = self.suite;\n                  self.suite = orig;\n                  return fn(err, errSuite);\n                }\n\n                next(suites.pop());\n              });\n            }\n\n            next(suites.pop());\n          };\n\n          /**\n           * Run hooks from the top level down.\n           *\n           * @param {String} name\n           * @param {Function} fn\n           * @api private\n           */\n          Runner.prototype.hookUp = function(name, fn) {\n            var suites = [this.suite].concat(this.parents()).reverse();\n            this.hooks(name, suites, fn);\n          };\n\n          /**\n           * Run hooks from the bottom up.\n           *\n           * @param {String} name\n           * @param {Function} fn\n           * @api private\n           */\n          Runner.prototype.hookDown = function(name, fn) {\n            var suites = [this.suite].concat(this.parents());\n            this.hooks(name, suites, fn);\n          };\n\n          /**\n           * Return an array of parent Suites from\n           * closest to furthest.\n           *\n           * @return {Array}\n           * @api private\n           */\n          Runner.prototype.parents = function() {\n            var suite = this.suite;\n            var suites = [];\n            while (suite.parent) {\n              suite = suite.parent;\n              suites.push(suite);\n            }\n            return suites;\n          };\n\n          /**\n           * Run the current test and callback `fn(err)`.\n           *\n           * @param {Function} fn\n           * @api private\n           */\n          Runner.prototype.runTest = function(fn) {\n            var self = this;\n            var test = this.test;\n\n            if (this.asyncOnly) {\n              test.asyncOnly = true;\n            }\n\n            if (this.allowUncaught) {\n              test.allowUncaught = true;\n              return test.run(fn);\n            }\n            try {\n              test.on('error', function(err) {\n                self.fail(test, err);\n              });\n              test.run(fn);\n            } catch (err) {\n              fn(err);\n            }\n          };\n\n          /**\n           * Run tests in the given `suite` and invoke the callback `fn()` when complete.\n           *\n           * @api private\n           * @param {Suite} suite\n           * @param {Function} fn\n           */\n          Runner.prototype.runTests = function(suite, fn) {\n            var self = this;\n            var tests = suite.tests.slice();\n            var test;\n\n            function hookErr(_, errSuite, after) {\n              // before/after Each hook for errSuite failed:\n              var orig = self.suite;\n\n              // for failed 'after each' hook start from errSuite parent,\n              // otherwise start from errSuite itself\n              self.suite = after ? errSuite.parent : errSuite;\n\n              if (self.suite) {\n                // call hookUp afterEach\n                self.hookUp('afterEach', function(err2, errSuite2) {\n                  self.suite = orig;\n                  // some hooks may fail even now\n                  if (err2) {\n                    return hookErr(err2, errSuite2, true);\n                  }\n                  // report error suite\n                  fn(errSuite);\n                });\n              } else {\n                // there is no need calling other 'after each' hooks\n                self.suite = orig;\n                fn(errSuite);\n              }\n            }\n\n            function next(err, errSuite) {\n              // if we bail after first err\n              if (self.failures && suite._bail) {\n                return fn();\n              }\n\n              if (self._abort) {\n                return fn();\n              }\n\n              if (err) {\n                return hookErr(err, errSuite, true);\n              }\n\n              // next test\n              test = tests.shift();\n\n              // all done\n              if (!test) {\n                return fn();\n              }\n\n              // grep\n              var match = self._grep.test(test.fullTitle());\n              if (self._invert) {\n                match = !match;\n              }\n              if (!match) {\n                // Run immediately only if we have defined a grep. When we\n                // define a grep — It can cause maximum callstack error if\n                // the grep is doing a large recursive loop by neglecting\n                // all tests. The run immediately function also comes with\n                // a performance cost. So we don't want to run immediately\n                // if we run the whole test suite, because running the whole\n                // test suite don't do any immediate recursive loops. Thus,\n                // allowing a JS runtime to breathe.\n                if (self._grep !== self._defaultGrep) {\n                  Runner.immediately(next);\n                } else {\n                  next();\n                }\n                return;\n              }\n\n              // pending\n              if (test.pending) {\n                self.emit('pending', test);\n                self.emit('test end', test);\n                return next();\n              }\n\n              // execute test and hook(s)\n              self.emit('test', (self.test = test));\n              self.hookDown('beforeEach', function(err, errSuite) {\n                if (suite.pending) {\n                  self.emit('pending', test);\n                  self.emit('test end', test);\n                  return next();\n                }\n                if (err) {\n                  return hookErr(err, errSuite, false);\n                }\n                self.currentRunnable = self.test;\n                self.runTest(function(err) {\n                  test = self.test;\n\n                  if (err) {\n                    if (err instanceof Pending) {\n                      self.emit('pending', test);\n                    } else {\n                      self.fail(test, err);\n                    }\n                    self.emit('test end', test);\n\n                    if (err instanceof Pending) {\n                      return next();\n                    }\n\n                    return self.hookUp('afterEach', next);\n                  }\n\n                  test.state = 'passed';\n                  self.emit('pass', test);\n                  self.emit('test end', test);\n                  self.hookUp('afterEach', next);\n                });\n              });\n            }\n\n            this.next = next;\n            this.hookErr = hookErr;\n            next();\n          };\n\n          /**\n           * Run the given `suite` and invoke the callback `fn()` when complete.\n           *\n           * @api private\n           * @param {Suite} suite\n           * @param {Function} fn\n           */\n          Runner.prototype.runSuite = function(suite, fn) {\n            var i = 0;\n            var self = this;\n            var total = this.grepTotal(suite);\n            var afterAllHookCalled = false;\n\n            debug('run suite %s', suite.fullTitle());\n\n            if (!total || (self.failures && suite._bail)) {\n              return fn();\n            }\n\n            this.emit('suite', (this.suite = suite));\n\n            function next(errSuite) {\n              if (errSuite) {\n                // current suite failed on a hook from errSuite\n                if (errSuite === suite) {\n                  // if errSuite is current suite\n                  // continue to the next sibling suite\n                  return done();\n                }\n                // errSuite is among the parents of current suite\n                // stop execution of errSuite and all sub-suites\n                return done(errSuite);\n              }\n\n              if (self._abort) {\n                return done();\n              }\n\n              var curr = suite.suites[i++];\n              if (!curr) {\n                return done();\n              }\n\n              // Avoid grep neglecting large number of tests causing a\n              // huge recursive loop and thus a maximum call stack error.\n              // See comment in `this.runTests()` for more information.\n              if (self._grep !== self._defaultGrep) {\n                Runner.immediately(function() {\n                  self.runSuite(curr, next);\n                });\n              } else {\n                self.runSuite(curr, next);\n              }\n            }\n\n            function done(errSuite) {\n              self.suite = suite;\n              self.nextSuite = next;\n\n              if (afterAllHookCalled) {\n                fn(errSuite);\n              } else {\n                // mark that the afterAll block has been called once\n                // and so can be skipped if there is an error in it.\n                afterAllHookCalled = true;\n                self.hook('afterAll', function() {\n                  self.emit('suite end', suite);\n                  fn(errSuite);\n                });\n              }\n            }\n\n            this.nextSuite = next;\n\n            this.hook('beforeAll', function(err) {\n              if (err) {\n                return done();\n              }\n              self.runTests(suite, next);\n            });\n          };\n\n          /**\n           * Handle uncaught exceptions.\n           *\n           * @param {Error} err\n           * @api private\n           */\n          Runner.prototype.uncaught = function(err) {\n            if (err) {\n              debug(\n                'uncaught exception %s',\n                err !==\n                  function() {\n                    return this;\n                  }.call(err)\n                  ? err\n                  : err.message || err\n              );\n            } else {\n              debug('uncaught undefined exception');\n              err = undefinedError();\n            }\n            err.uncaught = true;\n\n            var runnable = this.currentRunnable;\n\n            if (!runnable) {\n              runnable = new Runnable('Uncaught error outside test suite');\n              runnable.parent = this.suite;\n\n              if (this.started) {\n                this.fail(runnable, err);\n              } else {\n                // Can't recover from this failure\n                this.emit('start');\n                this.fail(runnable, err);\n                this.emit('end');\n              }\n\n              return;\n            }\n\n            runnable.clearTimeout();\n\n            // Ignore errors if complete\n            if (runnable.state) {\n              return;\n            }\n            this.fail(runnable, err);\n\n            // recover from test\n            if (runnable.type === 'test') {\n              this.emit('test end', runnable);\n              this.hookUp('afterEach', this.next);\n              return;\n            }\n\n            // recover from hooks\n            if (runnable.type === 'hook') {\n              var errSuite = this.suite;\n              // if hook failure is in afterEach block\n              if (runnable.fullTitle().indexOf('after each') > -1) {\n                return this.hookErr(err, errSuite, true);\n              }\n              // if hook failure is in beforeEach block\n              if (runnable.fullTitle().indexOf('before each') > -1) {\n                return this.hookErr(err, errSuite, false);\n              }\n              // if hook failure is in after or before blocks\n              return this.nextSuite(errSuite);\n            }\n\n            // bail\n            this.emit('end');\n          };\n\n          /**\n           * Run the root suite and invoke `fn(failures)`\n           * on completion.\n           *\n           * @param {Function} fn\n           * @return {Runner} for chaining\n           * @api public\n           * @param {Function} fn\n           * @return {Runner} Runner instance.\n           */\n          Runner.prototype.run = function(fn) {\n            var self = this;\n            var rootSuite = this.suite;\n\n            fn = fn || function() {};\n\n            function uncaught(err) {\n              self.uncaught(err);\n            }\n\n            function start() {\n              self.started = true;\n              self.emit('start');\n              self.runSuite(rootSuite, function() {\n                debug('finished running');\n                self.emit('end');\n              });\n            }\n\n            debug('start');\n\n            // callback\n            this.on('end', function() {\n              debug('end');\n              process.removeListener('uncaughtException', uncaught);\n              fn(self.failures);\n            });\n\n            // uncaught exception\n            process.on('uncaughtException', uncaught);\n\n            if (this._delay) {\n              // for reporters, I guess.\n              // might be nice to debounce some dots while we wait.\n              this.emit('waiting', rootSuite);\n              rootSuite.once('run', start);\n            } else {\n              start();\n            }\n\n            return this;\n          };\n\n          /**\n           * Cleanly abort execution.\n           *\n           * @api public\n           * @return {Runner} Runner instance.\n           */\n          Runner.prototype.abort = function() {\n            debug('aborting');\n            this._abort = true;\n\n            return this;\n          };\n\n          /**\n           * Filter leaks with the given globals flagged as `ok`.\n           *\n           * @api private\n           * @param {Array} ok\n           * @param {Array} globals\n           * @return {Array}\n           */\n          function filterLeaks(ok, globals) {\n            return filter(globals, function(key) {\n              // Firefox and Chrome exposes iframes as index inside the window object\n              if (/^d+/.test(key)) {\n                return false;\n              }\n\n              // in firefox\n              // if runner runs in an iframe, this iframe's window.getInterface method not init at first\n              // it is assigned in some seconds\n              if (global.navigator && /^getInterface/.test(key)) {\n                return false;\n              }\n\n              // an iframe could be approached by window[iframeIndex]\n              // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak\n              if (global.navigator && /^\\d+/.test(key)) {\n                return false;\n              }\n\n              // Opera and IE expose global variables for HTML element IDs (issue #243)\n              if (/^mocha-/.test(key)) {\n                return false;\n              }\n\n              var matched = filter(ok, function(ok) {\n                if (~ok.indexOf('*')) {\n                  return key.indexOf(ok.split('*')[0]) === 0;\n                }\n                return key === ok;\n              });\n              return (\n                !matched.length && (!global.navigator || key !== 'onerror')\n              );\n            });\n          }\n\n          /**\n           * Array of globals dependent on the environment.\n           *\n           * @return {Array}\n           * @api private\n           */\n          function extraGlobals() {\n            if (\n              typeof process === 'object' &&\n              typeof process.version === 'string'\n            ) {\n              var parts = process.version.split('.');\n              var nodeVersion = utils.reduce(parts, function(a, v) {\n                return (a << 8) | v;\n              });\n\n              // 'errno' was renamed to process._errno in v0.9.11.\n\n              if (nodeVersion < 0x00090b) {\n                return ['errno'];\n              }\n            }\n\n            return [];\n          }\n        }.call(\n          this,\n          require('_process'),\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      {\n        './pending': 16,\n        './runnable': 35,\n        './utils': 39,\n        _process: 51,\n        debug: 2,\n        events: 3\n      }\n    ],\n    37: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var EventEmitter = require('events').EventEmitter;\n        var Hook = require('./hook');\n        var utils = require('./utils');\n        var inherits = utils.inherits;\n        var debug = require('debug')('mocha:suite');\n        var milliseconds = require('./ms');\n\n        /**\n         * Expose `Suite`.\n         */\n\n        exports = module.exports = Suite;\n\n        /**\n         * Create a new `Suite` with the given `title` and parent `Suite`. When a suite\n         * with the same title is already present, that suite is returned to provide\n         * nicer reporter and more flexible meta-testing.\n         *\n         * @api public\n         * @param {Suite} parent\n         * @param {string} title\n         * @return {Suite}\n         */\n        exports.create = function(parent, title) {\n          var suite = new Suite(title, parent.ctx);\n          suite.parent = parent;\n          if (parent.pending) {\n            suite.pending = true;\n          }\n          title = suite.fullTitle();\n          parent.addSuite(suite);\n          return suite;\n        };\n\n        /**\n         * Initialize a new `Suite` with the given `title` and `ctx`.\n         *\n         * @api private\n         * @param {string} title\n         * @param {Context} parentContext\n         */\n        function Suite(title, parentContext) {\n          this.title = title;\n          function Context() {}\n          Context.prototype = parentContext;\n          this.ctx = new Context();\n          this.suites = [];\n          this.tests = [];\n          this.pending = false;\n          this._beforeEach = [];\n          this._beforeAll = [];\n          this._afterEach = [];\n          this._afterAll = [];\n          this.root = !title;\n          this._timeout = 2000;\n          this._enableTimeouts = true;\n          this._slow = 75;\n          this._bail = false;\n          this.delayed = false;\n        }\n\n        /**\n         * Inherit from `EventEmitter.prototype`.\n         */\n        inherits(Suite, EventEmitter);\n\n        /**\n         * Return a clone of this `Suite`.\n         *\n         * @api private\n         * @return {Suite}\n         */\n        Suite.prototype.clone = function() {\n          var suite = new Suite(this.title);\n          debug('clone');\n          suite.ctx = this.ctx;\n          suite.timeout(this.timeout());\n          suite.enableTimeouts(this.enableTimeouts());\n          suite.slow(this.slow());\n          suite.bail(this.bail());\n          return suite;\n        };\n\n        /**\n         * Set timeout `ms` or short-hand such as \"2s\".\n         *\n         * @api private\n         * @param {number|string} ms\n         * @return {Suite|number} for chaining\n         */\n        Suite.prototype.timeout = function(ms) {\n          if (!arguments.length) {\n            return this._timeout;\n          }\n          if (ms.toString() === '0') {\n            this._enableTimeouts = false;\n          }\n          if (typeof ms === 'string') {\n            ms = milliseconds(ms);\n          }\n          debug('timeout %d', ms);\n          this._timeout = parseInt(ms, 10);\n          return this;\n        };\n\n        /**\n         * Set timeout to `enabled`.\n         *\n         * @api private\n         * @param {boolean} enabled\n         * @return {Suite|boolean} self or enabled\n         */\n        Suite.prototype.enableTimeouts = function(enabled) {\n          if (!arguments.length) {\n            return this._enableTimeouts;\n          }\n          debug('enableTimeouts %s', enabled);\n          this._enableTimeouts = enabled;\n          return this;\n        };\n\n        /**\n         * Set slow `ms` or short-hand such as \"2s\".\n         *\n         * @api private\n         * @param {number|string} ms\n         * @return {Suite|number} for chaining\n         */\n        Suite.prototype.slow = function(ms) {\n          if (!arguments.length) {\n            return this._slow;\n          }\n          if (typeof ms === 'string') {\n            ms = milliseconds(ms);\n          }\n          debug('slow %d', ms);\n          this._slow = ms;\n          return this;\n        };\n\n        /**\n         * Sets whether to bail after first error.\n         *\n         * @api private\n         * @param {boolean} bail\n         * @return {Suite|number} for chaining\n         */\n        Suite.prototype.bail = function(bail) {\n          if (!arguments.length) {\n            return this._bail;\n          }\n          debug('bail %s', bail);\n          this._bail = bail;\n          return this;\n        };\n\n        /**\n         * Run `fn(test[, done])` before running tests.\n         *\n         * @api private\n         * @param {string} title\n         * @param {Function} fn\n         * @return {Suite} for chaining\n         */\n        Suite.prototype.beforeAll = function(title, fn) {\n          if (this.pending) {\n            return this;\n          }\n          if (typeof title === 'function') {\n            fn = title;\n            title = fn.name;\n          }\n          title = '\"before all\" hook' + (title ? ': ' + title : '');\n\n          var hook = new Hook(title, fn);\n          hook.parent = this;\n          hook.timeout(this.timeout());\n          hook.enableTimeouts(this.enableTimeouts());\n          hook.slow(this.slow());\n          hook.ctx = this.ctx;\n          this._beforeAll.push(hook);\n          this.emit('beforeAll', hook);\n          return this;\n        };\n\n        /**\n         * Run `fn(test[, done])` after running tests.\n         *\n         * @api private\n         * @param {string} title\n         * @param {Function} fn\n         * @return {Suite} for chaining\n         */\n        Suite.prototype.afterAll = function(title, fn) {\n          if (this.pending) {\n            return this;\n          }\n          if (typeof title === 'function') {\n            fn = title;\n            title = fn.name;\n          }\n          title = '\"after all\" hook' + (title ? ': ' + title : '');\n\n          var hook = new Hook(title, fn);\n          hook.parent = this;\n          hook.timeout(this.timeout());\n          hook.enableTimeouts(this.enableTimeouts());\n          hook.slow(this.slow());\n          hook.ctx = this.ctx;\n          this._afterAll.push(hook);\n          this.emit('afterAll', hook);\n          return this;\n        };\n\n        /**\n         * Run `fn(test[, done])` before each test case.\n         *\n         * @api private\n         * @param {string} title\n         * @param {Function} fn\n         * @return {Suite} for chaining\n         */\n        Suite.prototype.beforeEach = function(title, fn) {\n          if (this.pending) {\n            return this;\n          }\n          if (typeof title === 'function') {\n            fn = title;\n            title = fn.name;\n          }\n          title = '\"before each\" hook' + (title ? ': ' + title : '');\n\n          var hook = new Hook(title, fn);\n          hook.parent = this;\n          hook.timeout(this.timeout());\n          hook.enableTimeouts(this.enableTimeouts());\n          hook.slow(this.slow());\n          hook.ctx = this.ctx;\n          this._beforeEach.push(hook);\n          this.emit('beforeEach', hook);\n          return this;\n        };\n\n        /**\n         * Run `fn(test[, done])` after each test case.\n         *\n         * @api private\n         * @param {string} title\n         * @param {Function} fn\n         * @return {Suite} for chaining\n         */\n        Suite.prototype.afterEach = function(title, fn) {\n          if (this.pending) {\n            return this;\n          }\n          if (typeof title === 'function') {\n            fn = title;\n            title = fn.name;\n          }\n          title = '\"after each\" hook' + (title ? ': ' + title : '');\n\n          var hook = new Hook(title, fn);\n          hook.parent = this;\n          hook.timeout(this.timeout());\n          hook.enableTimeouts(this.enableTimeouts());\n          hook.slow(this.slow());\n          hook.ctx = this.ctx;\n          this._afterEach.push(hook);\n          this.emit('afterEach', hook);\n          return this;\n        };\n\n        /**\n         * Add a test `suite`.\n         *\n         * @api private\n         * @param {Suite} suite\n         * @return {Suite} for chaining\n         */\n        Suite.prototype.addSuite = function(suite) {\n          suite.parent = this;\n          suite.timeout(this.timeout());\n          suite.enableTimeouts(this.enableTimeouts());\n          suite.slow(this.slow());\n          suite.bail(this.bail());\n          this.suites.push(suite);\n          this.emit('suite', suite);\n          return this;\n        };\n\n        /**\n         * Add a `test` to this suite.\n         *\n         * @api private\n         * @param {Test} test\n         * @return {Suite} for chaining\n         */\n        Suite.prototype.addTest = function(test) {\n          test.parent = this;\n          test.timeout(this.timeout());\n          test.enableTimeouts(this.enableTimeouts());\n          test.slow(this.slow());\n          test.ctx = this.ctx;\n          this.tests.push(test);\n          this.emit('test', test);\n          return this;\n        };\n\n        /**\n         * Return the full title generated by recursively concatenating the parent's\n         * full title.\n         *\n         * @api public\n         * @return {string}\n         */\n        Suite.prototype.fullTitle = function() {\n          if (this.parent) {\n            var full = this.parent.fullTitle();\n            if (full) {\n              return full + ' ' + this.title;\n            }\n          }\n          return this.title;\n        };\n\n        /**\n         * Return the total number of tests.\n         *\n         * @api public\n         * @return {number}\n         */\n        Suite.prototype.total = function() {\n          return (\n            utils.reduce(\n              this.suites,\n              function(sum, suite) {\n                return sum + suite.total();\n              },\n              0\n            ) + this.tests.length\n          );\n        };\n\n        /**\n         * Iterates through each suite recursively to find all tests. Applies a\n         * function in the format `fn(test)`.\n         *\n         * @api private\n         * @param {Function} fn\n         * @return {Suite}\n         */\n        Suite.prototype.eachTest = function(fn) {\n          utils.forEach(this.tests, fn);\n          utils.forEach(this.suites, function(suite) {\n            suite.eachTest(fn);\n          });\n          return this;\n        };\n\n        /**\n         * This will run the root suite if we happen to be running in delayed mode.\n         */\n        Suite.prototype.run = function run() {\n          if (this.root) {\n            this.emit('run');\n          }\n        };\n      },\n      { './hook': 7, './ms': 15, './utils': 39, debug: 2, events: 3 }\n    ],\n    38: [\n      function(require, module, exports) {\n        /**\n         * Module dependencies.\n         */\n\n        var Runnable = require('./runnable');\n        var inherits = require('./utils').inherits;\n\n        /**\n         * Expose `Test`.\n         */\n\n        module.exports = Test;\n\n        /**\n         * Initialize a new `Test` with the given `title` and callback `fn`.\n         *\n         * @api private\n         * @param {String} title\n         * @param {Function} fn\n         */\n        function Test(title, fn) {\n          Runnable.call(this, title, fn);\n          this.pending = !fn;\n          this.type = 'test';\n        }\n\n        /**\n         * Inherit from `Runnable.prototype`.\n         */\n        inherits(Test, Runnable);\n      },\n      { './runnable': 35, './utils': 39 }\n    ],\n    39: [\n      function(require, module, exports) {\n        (function(process, Buffer) {\n          /* eslint-env browser */\n\n          /**\n           * Module dependencies.\n           */\n\n          var basename = require('path').basename;\n          var debug = require('debug')('mocha:watch');\n          var exists = require('fs').existsSync || require('path').existsSync;\n          var glob = require('glob');\n          var join = require('path').join;\n          var readdirSync = require('fs').readdirSync;\n          var statSync = require('fs').statSync;\n          var watchFile = require('fs').watchFile;\n\n          /**\n           * Ignored directories.\n           */\n\n          var ignore = ['node_modules', '.git'];\n\n          exports.inherits = require('util').inherits;\n\n          /**\n           * Escape special characters in the given string of html.\n           *\n           * @api private\n           * @param  {string} html\n           * @return {string}\n           */\n          exports.escape = function(html) {\n            return String(html)\n              .replace(/&/g, '&amp;')\n              .replace(/\"/g, '&quot;')\n              .replace(/</g, '&lt;')\n              .replace(/>/g, '&gt;');\n          };\n\n          /**\n           * Array#forEach (<=IE8)\n           *\n           * @api private\n           * @param {Array} arr\n           * @param {Function} fn\n           * @param {Object} scope\n           */\n          exports.forEach = function(arr, fn, scope) {\n            for (var i = 0, l = arr.length; i < l; i++) {\n              fn.call(scope, arr[i], i);\n            }\n          };\n\n          /**\n           * Test if the given obj is type of string.\n           *\n           * @api private\n           * @param {Object} obj\n           * @return {boolean}\n           */\n          exports.isString = function(obj) {\n            return typeof obj === 'string';\n          };\n\n          /**\n           * Array#map (<=IE8)\n           *\n           * @api private\n           * @param {Array} arr\n           * @param {Function} fn\n           * @param {Object} scope\n           * @return {Array}\n           */\n          exports.map = function(arr, fn, scope) {\n            var result = [];\n            for (var i = 0, l = arr.length; i < l; i++) {\n              result.push(fn.call(scope, arr[i], i, arr));\n            }\n            return result;\n          };\n\n          /**\n           * Array#indexOf (<=IE8)\n           *\n           * @api private\n           * @param {Array} arr\n           * @param {Object} obj to find index of\n           * @param {number} start\n           * @return {number}\n           */\n          exports.indexOf = function(arr, obj, start) {\n            for (var i = start || 0, l = arr.length; i < l; i++) {\n              if (arr[i] === obj) {\n                return i;\n              }\n            }\n            return -1;\n          };\n\n          /**\n           * Array#reduce (<=IE8)\n           *\n           * @api private\n           * @param {Array} arr\n           * @param {Function} fn\n           * @param {Object} val Initial value.\n           * @return {*}\n           */\n          exports.reduce = function(arr, fn, val) {\n            var rval = val;\n\n            for (var i = 0, l = arr.length; i < l; i++) {\n              rval = fn(rval, arr[i], i, arr);\n            }\n\n            return rval;\n          };\n\n          /**\n           * Array#filter (<=IE8)\n           *\n           * @api private\n           * @param {Array} arr\n           * @param {Function} fn\n           * @return {Array}\n           */\n          exports.filter = function(arr, fn) {\n            var ret = [];\n\n            for (var i = 0, l = arr.length; i < l; i++) {\n              var val = arr[i];\n              if (fn(val, i, arr)) {\n                ret.push(val);\n              }\n            }\n\n            return ret;\n          };\n\n          /**\n           * Object.keys (<=IE8)\n           *\n           * @api private\n           * @param {Object} obj\n           * @return {Array} keys\n           */\n          exports.keys =\n            typeof Object.keys === 'function'\n              ? Object.keys\n              : function(obj) {\n                  var keys = [];\n                  var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8\n\n                  for (var key in obj) {\n                    if (has.call(obj, key)) {\n                      keys.push(key);\n                    }\n                  }\n\n                  return keys;\n                };\n\n          /**\n           * Watch the given `files` for changes\n           * and invoke `fn(file)` on modification.\n           *\n           * @api private\n           * @param {Array} files\n           * @param {Function} fn\n           */\n          exports.watch = function(files, fn) {\n            var options = { interval: 100 };\n            files.forEach(function(file) {\n              debug('file %s', file);\n              watchFile(file, options, function(curr, prev) {\n                if (prev.mtime < curr.mtime) {\n                  fn(file);\n                }\n              });\n            });\n          };\n\n          /**\n           * Array.isArray (<=IE8)\n           *\n           * @api private\n           * @param {Object} obj\n           * @return {Boolean}\n           */\n          var isArray =\n            typeof Array.isArray === 'function'\n              ? Array.isArray\n              : function(obj) {\n                  return (\n                    Object.prototype.toString.call(obj) === '[object Array]'\n                  );\n                };\n\n          /**\n           * Buffer.prototype.toJSON polyfill.\n           *\n           * @type {Function}\n           */\n          if (typeof Buffer !== 'undefined' && Buffer.prototype) {\n            Buffer.prototype.toJSON =\n              Buffer.prototype.toJSON ||\n              function() {\n                return Array.prototype.slice.call(this, 0);\n              };\n          }\n\n          /**\n           * Ignored files.\n           *\n           * @api private\n           * @param {string} path\n           * @return {boolean}\n           */\n          function ignored(path) {\n            return !~ignore.indexOf(path);\n          }\n\n          /**\n           * Lookup files in the given `dir`.\n           *\n           * @api private\n           * @param {string} dir\n           * @param {string[]} [ext=['.js']]\n           * @param {Array} [ret=[]]\n           * @return {Array}\n           */\n          exports.files = function(dir, ext, ret) {\n            ret = ret || [];\n            ext = ext || ['js'];\n\n            var re = new RegExp('\\\\.(' + ext.join('|') + ')$');\n\n            readdirSync(dir)\n              .filter(ignored)\n              .forEach(function(path) {\n                path = join(dir, path);\n                if (statSync(path).isDirectory()) {\n                  exports.files(path, ext, ret);\n                } else if (path.match(re)) {\n                  ret.push(path);\n                }\n              });\n\n            return ret;\n          };\n\n          /**\n           * Compute a slug from the given `str`.\n           *\n           * @api private\n           * @param {string} str\n           * @return {string}\n           */\n          exports.slug = function(str) {\n            return str\n              .toLowerCase()\n              .replace(/ +/g, '-')\n              .replace(/[^-\\w]/g, '');\n          };\n\n          /**\n           * Strip the function definition from `str`, and re-indent for pre whitespace.\n           *\n           * @param {string} str\n           * @return {string}\n           */\n          exports.clean = function(str) {\n            str = str\n              .replace(/\\r\\n?|[\\n\\u2028\\u2029]/g, '\\n')\n              .replace(/^\\uFEFF/, '')\n              .replace(/^function *\\(.*\\)\\s*{|\\(.*\\) *=> *{?/, '')\n              .replace(/\\s+\\}$/, '');\n\n            var spaces = str.match(/^\\n?( *)/)[1].length;\n            var tabs = str.match(/^\\n?(\\t*)/)[1].length;\n            var re = new RegExp(\n              '^\\n?' + (tabs ? '\\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}',\n              'gm'\n            );\n\n            str = str.replace(re, '');\n\n            return exports.trim(str);\n          };\n\n          /**\n           * Trim the given `str`.\n           *\n           * @api private\n           * @param {string} str\n           * @return {string}\n           */\n          exports.trim = function(str) {\n            return str.replace(/^\\s+|\\s+$/g, '');\n          };\n\n          /**\n           * Parse the given `qs`.\n           *\n           * @api private\n           * @param {string} qs\n           * @return {Object}\n           */\n          exports.parseQuery = function(qs) {\n            return exports.reduce(\n              qs.replace('?', '').split('&'),\n              function(obj, pair) {\n                var i = pair.indexOf('=');\n                var key = pair.slice(0, i);\n                var val = pair.slice(++i);\n\n                obj[key] = decodeURIComponent(val);\n                return obj;\n              },\n              {}\n            );\n          };\n\n          /**\n           * Highlight the given string of `js`.\n           *\n           * @api private\n           * @param {string} js\n           * @return {string}\n           */\n          function highlight(js) {\n            return js\n              .replace(/</g, '&lt;')\n              .replace(/>/g, '&gt;')\n              .replace(/\\/\\/(.*)/gm, '<span class=\"comment\">//$1</span>')\n              .replace(/('.*?')/gm, '<span class=\"string\">$1</span>')\n              .replace(/(\\d+\\.\\d+)/gm, '<span class=\"number\">$1</span>')\n              .replace(/(\\d+)/gm, '<span class=\"number\">$1</span>')\n              .replace(\n                /\\bnew[ \\t]+(\\w+)/gm,\n                '<span class=\"keyword\">new</span> <span class=\"init\">$1</span>'\n              )\n              .replace(\n                /\\b(function|new|throw|return|var|if|else)\\b/gm,\n                '<span class=\"keyword\">$1</span>'\n              );\n          }\n\n          /**\n           * Highlight the contents of tag `name`.\n           *\n           * @api private\n           * @param {string} name\n           */\n          exports.highlightTags = function(name) {\n            var code = document\n              .getElementById('mocha')\n              .getElementsByTagName(name);\n            for (var i = 0, len = code.length; i < len; ++i) {\n              code[i].innerHTML = highlight(code[i].innerHTML);\n            }\n          };\n\n          /**\n           * If a value could have properties, and has none, this function is called,\n           * which returns a string representation of the empty value.\n           *\n           * Functions w/ no properties return `'[Function]'`\n           * Arrays w/ length === 0 return `'[]'`\n           * Objects w/ no properties return `'{}'`\n           * All else: return result of `value.toString()`\n           *\n           * @api private\n           * @param {*} value The value to inspect.\n           * @param {string} [type] The type of the value, if known.\n           * @returns {string}\n           */\n          function emptyRepresentation(value, type) {\n            type = type || exports.type(value);\n\n            switch (type) {\n              case 'function':\n                return '[Function]';\n              case 'object':\n                return '{}';\n              case 'array':\n                return '[]';\n              default:\n                return value.toString();\n            }\n          }\n\n          /**\n           * Takes some variable and asks `Object.prototype.toString()` what it thinks it\n           * is.\n           *\n           * @api private\n           * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n           * @param {*} value The value to test.\n           * @returns {string}\n           * @example\n           * type({}) // 'object'\n           * type([]) // 'array'\n           * type(1) // 'number'\n           * type(false) // 'boolean'\n           * type(Infinity) // 'number'\n           * type(null) // 'null'\n           * type(new Date()) // 'date'\n           * type(/foo/) // 'regexp'\n           * type('type') // 'string'\n           * type(global) // 'global'\n           */\n          exports.type = function type(value) {\n            if (value === undefined) {\n              return 'undefined';\n            } else if (value === null) {\n              return 'null';\n            } else if (\n              typeof Buffer !== 'undefined' &&\n              Buffer.isBuffer(value)\n            ) {\n              return 'buffer';\n            }\n            return Object.prototype.toString\n              .call(value)\n              .replace(/^\\[.+\\s(.+?)\\]$/, '$1')\n              .toLowerCase();\n          };\n\n          /**\n           * Stringify `value`. Different behavior depending on type of value:\n           *\n           * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively.\n           * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes.\n           * - If `value` is an *empty* object, function, or array, return result of function\n           *   {@link emptyRepresentation}.\n           * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of\n           *   JSON.stringify().\n           *\n           * @api private\n           * @see exports.type\n           * @param {*} value\n           * @return {string}\n           */\n          exports.stringify = function(value) {\n            var type = exports.type(value);\n\n            if (!~exports.indexOf(['object', 'array', 'function'], type)) {\n              if (type !== 'buffer') {\n                return jsonStringify(value);\n              }\n              var json = value.toJSON();\n              // Based on the toJSON result\n              return jsonStringify(\n                json.data && json.type ? json.data : json,\n                2\n              ).replace(/,(\\n|$)/g, '$1');\n            }\n\n            for (var prop in value) {\n              if (Object.prototype.hasOwnProperty.call(value, prop)) {\n                return jsonStringify(exports.canonicalize(value), 2).replace(\n                  /,(\\n|$)/g,\n                  '$1'\n                );\n              }\n            }\n\n            return emptyRepresentation(value, type);\n          };\n\n          /**\n           * like JSON.stringify but more sense.\n           *\n           * @api private\n           * @param {Object}  object\n           * @param {number=} spaces\n           * @param {number=} depth\n           * @returns {*}\n           */\n          function jsonStringify(object, spaces, depth) {\n            if (typeof spaces === 'undefined') {\n              // primitive types\n              return _stringify(object);\n            }\n\n            depth = depth || 1;\n            var space = spaces * depth;\n            var str = isArray(object) ? '[' : '{';\n            var end = isArray(object) ? ']' : '}';\n            var length = object.length || exports.keys(object).length;\n            // `.repeat()` polyfill\n            function repeat(s, n) {\n              return new Array(n).join(s);\n            }\n\n            function _stringify(val) {\n              switch (exports.type(val)) {\n                case 'null':\n                case 'undefined':\n                  val = '[' + val + ']';\n                  break;\n                case 'array':\n                case 'object':\n                  val = jsonStringify(val, spaces, depth + 1);\n                  break;\n                case 'boolean':\n                case 'regexp':\n                case 'number':\n                  val =\n                    val === 0 && 1 / val === -Infinity // `-0`\n                      ? '-0'\n                      : val.toString();\n                  break;\n                case 'date':\n                  var sDate = isNaN(val.getTime()) // Invalid date\n                    ? val.toString()\n                    : val.toISOString();\n                  val = '[Date: ' + sDate + ']';\n                  break;\n                case 'buffer':\n                  var json = val.toJSON();\n                  // Based on the toJSON result\n                  json = json.data && json.type ? json.data : json;\n                  val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']';\n                  break;\n                default:\n                  val =\n                    val === '[Function]' || val === '[Circular]'\n                      ? val\n                      : JSON.stringify(val); // string\n              }\n              return val;\n            }\n\n            for (var i in object) {\n              if (!object.hasOwnProperty(i)) {\n                continue; // not my business\n              }\n              --length;\n              str +=\n                '\\n ' +\n                repeat(' ', space) +\n                (isArray(object) ? '' : '\"' + i + '\": ') + // key\n                _stringify(object[i]) + // value\n                (length ? ',' : ''); // comma\n            }\n\n            return (\n              str +\n              // [], {}\n              (str.length !== 1 ? '\\n' + repeat(' ', --space) + end : end)\n            );\n          }\n\n          /**\n           * Test if a value is a buffer.\n           *\n           * @api private\n           * @param {*} value The value to test.\n           * @return {boolean} True if `value` is a buffer, otherwise false\n           */\n          exports.isBuffer = function(value) {\n            return typeof Buffer !== 'undefined' && Buffer.isBuffer(value);\n          };\n\n          /**\n           * Return a new Thing that has the keys in sorted order. Recursive.\n           *\n           * If the Thing...\n           * - has already been seen, return string `'[Circular]'`\n           * - is `undefined`, return string `'[undefined]'`\n           * - is `null`, return value `null`\n           * - is some other primitive, return the value\n           * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method\n           * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again.\n           * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()`\n           *\n           * @api private\n           * @see {@link exports.stringify}\n           * @param {*} value Thing to inspect.  May or may not have properties.\n           * @param {Array} [stack=[]] Stack of seen values\n           * @return {(Object|Array|Function|string|undefined)}\n           */\n          exports.canonicalize = function(value, stack) {\n            var canonicalizedObj;\n            /* eslint-disable no-unused-vars */\n            var prop;\n            /* eslint-enable no-unused-vars */\n            var type = exports.type(value);\n            function withStack(value, fn) {\n              stack.push(value);\n              fn();\n              stack.pop();\n            }\n\n            stack = stack || [];\n\n            if (exports.indexOf(stack, value) !== -1) {\n              return '[Circular]';\n            }\n\n            switch (type) {\n              case 'undefined':\n              case 'buffer':\n              case 'null':\n                canonicalizedObj = value;\n                break;\n              case 'array':\n                withStack(value, function() {\n                  canonicalizedObj = exports.map(value, function(item) {\n                    return exports.canonicalize(item, stack);\n                  });\n                });\n                break;\n              case 'function':\n                /* eslint-disable guard-for-in */\n                for (prop in value) {\n                  canonicalizedObj = {};\n                  break;\n                }\n                /* eslint-enable guard-for-in */\n                if (!canonicalizedObj) {\n                  canonicalizedObj = emptyRepresentation(value, type);\n                  break;\n                }\n              /* falls through */\n              case 'object':\n                canonicalizedObj = canonicalizedObj || {};\n                withStack(value, function() {\n                  exports.forEach(exports.keys(value).sort(), function(key) {\n                    canonicalizedObj[key] = exports.canonicalize(\n                      value[key],\n                      stack\n                    );\n                  });\n                });\n                break;\n              case 'date':\n              case 'number':\n              case 'regexp':\n              case 'boolean':\n                canonicalizedObj = value;\n                break;\n              default:\n                canonicalizedObj = value.toString();\n            }\n\n            return canonicalizedObj;\n          };\n\n          /**\n           * Lookup file names at the given `path`.\n           *\n           * @api public\n           * @param {string} path Base path to start searching from.\n           * @param {string[]} extensions File extensions to look for.\n           * @param {boolean} recursive Whether or not to recurse into subdirectories.\n           * @return {string[]} An array of paths.\n           */\n          exports.lookupFiles = function lookupFiles(\n            path,\n            extensions,\n            recursive\n          ) {\n            var files = [];\n            var re = new RegExp('\\\\.(' + extensions.join('|') + ')$');\n\n            if (!exists(path)) {\n              if (exists(path + '.js')) {\n                path += '.js';\n              } else {\n                files = glob.sync(path);\n                if (!files.length) {\n                  throw new Error(\n                    \"cannot resolve path (or pattern) '\" + path + \"'\"\n                  );\n                }\n                return files;\n              }\n            }\n\n            try {\n              var stat = statSync(path);\n              if (stat.isFile()) {\n                return path;\n              }\n            } catch (err) {\n              // ignore error\n              return;\n            }\n\n            readdirSync(path).forEach(function(file) {\n              file = join(path, file);\n              try {\n                var stat = statSync(file);\n                if (stat.isDirectory()) {\n                  if (recursive) {\n                    files = files.concat(\n                      lookupFiles(file, extensions, recursive)\n                    );\n                  }\n                  return;\n                }\n              } catch (err) {\n                // ignore error\n                return;\n              }\n              if (\n                !stat.isFile() ||\n                !re.test(file) ||\n                basename(file)[0] === '.'\n              ) {\n                return;\n              }\n              files.push(file);\n            });\n\n            return files;\n          };\n\n          /**\n           * Generate an undefined error with a message warning the user.\n           *\n           * @return {Error}\n           */\n\n          exports.undefinedError = function() {\n            return new Error(\n              'Caught undefined error, did you throw without specifying what?'\n            );\n          };\n\n          /**\n           * Generate an undefined error if `err` is not defined.\n           *\n           * @param {Error} err\n           * @return {Error}\n           */\n\n          exports.getError = function(err) {\n            return err || exports.undefinedError();\n          };\n\n          /**\n           * @summary\n           * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`)\n           * @description\n           * When invoking this function you get a filter function that get the Error.stack as an input,\n           * and return a prettify output.\n           * (i.e: strip Mocha and internal node functions from stack trace).\n           * @returns {Function}\n           */\n          exports.stackTraceFilter = function() {\n            // TODO: Replace with `process.browser`\n            var slash = '/';\n            var is =\n              typeof document === 'undefined'\n                ? { node: true }\n                : { browser: true };\n            var cwd = is.node\n              ? process.cwd() + slash\n              : (typeof location === 'undefined'\n                  ? window.location\n                  : location\n                ).href.replace(/\\/[^\\/]*$/, '/');\n\n            function isMochaInternal(line) {\n              return (\n                ~line.indexOf('node_modules' + slash + 'mocha' + slash) ||\n                ~line.indexOf('components' + slash + 'mochajs' + slash) ||\n                ~line.indexOf('components' + slash + 'mocha' + slash) ||\n                ~line.indexOf(slash + 'mocha.js')\n              );\n            }\n\n            function isNodeInternal(line) {\n              return (\n                ~line.indexOf('(timers.js:') ||\n                ~line.indexOf('(events.js:') ||\n                ~line.indexOf('(node.js:') ||\n                ~line.indexOf('(module.js:') ||\n                ~line.indexOf('GeneratorFunctionPrototype.next (native)') ||\n                false\n              );\n            }\n\n            return function(stack) {\n              stack = stack.split('\\n');\n\n              stack = exports.reduce(\n                stack,\n                function(list, line) {\n                  if (isMochaInternal(line)) {\n                    return list;\n                  }\n\n                  if (is.node && isNodeInternal(line)) {\n                    return list;\n                  }\n\n                  // Clean up cwd(absolute)\n                  list.push(line.replace(cwd, ''));\n                  return list;\n                },\n                []\n              );\n\n              return stack.join('\\n');\n            };\n          };\n        }.call(this, require('_process'), require('buffer').Buffer));\n      },\n      {\n        _process: 51,\n        buffer: 43,\n        debug: 2,\n        fs: 41,\n        glob: 41,\n        path: 41,\n        util: 66\n      }\n    ],\n    40: [\n      function(require, module, exports) {\n        (function(process) {\n          var WritableStream = require('stream').Writable;\n          var inherits = require('util').inherits;\n\n          module.exports = BrowserStdout;\n\n          inherits(BrowserStdout, WritableStream);\n\n          function BrowserStdout(opts) {\n            if (!(this instanceof BrowserStdout))\n              return new BrowserStdout(opts);\n\n            opts = opts || {};\n            WritableStream.call(this, opts);\n            this.label = opts.label !== undefined ? opts.label : 'stdout';\n          }\n\n          BrowserStdout.prototype._write = function(chunks, encoding, cb) {\n            var output = chunks.toString ? chunks.toString() : chunks;\n            if (this.label === false) {\n              console.log(output);\n            } else {\n              console.log(this.label + ':', output);\n            }\n            process.nextTick(cb);\n          };\n        }.call(this, require('_process')));\n      },\n      { _process: 51, stream: 63, util: 66 }\n    ],\n    41: [function(require, module, exports) {}, {}],\n    42: [\n      function(require, module, exports) {\n        arguments[4][41][0].apply(exports, arguments);\n      },\n      { dup: 41 }\n    ],\n    43: [\n      function(require, module, exports) {\n        /*!\n         * The buffer module from node.js, for the browser.\n         *\n         * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n         * @license  MIT\n         */\n\n        var base64 = require('base64-js');\n        var ieee754 = require('ieee754');\n        var isArray = require('is-array');\n\n        exports.Buffer = Buffer;\n        exports.SlowBuffer = SlowBuffer;\n        exports.INSPECT_MAX_BYTES = 50;\n        Buffer.poolSize = 8192; // not used by this implementation\n\n        var rootParent = {};\n\n        /**\n     * If `Buffer.TYPED_ARRAY_SUPPORT`:\n     *   === true    Use Uint8Array implementation (fastest)\n     *   === false   Use Object implementation (most compatible, even IE6)\n     *\n     * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n     * Opera 11.6+, iOS 4.2+.\n     *\n     * Due to various browser bugs, sometimes the Object implementation will be used even\n     * when the browser supports typed arrays.\n     *\n     * Note:\n     *\n     *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n     *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n     *\n     *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property\n     *     on objects.\n     *\n     *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n     *\n     *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n     *     incorrect length in some situations.\n\n     * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n     * get the Object implementation, which is slower but behaves correctly.\n     */\n        Buffer.TYPED_ARRAY_SUPPORT = (function() {\n          function Bar() {}\n          try {\n            var arr = new Uint8Array(1);\n            arr.foo = function() {\n              return 42;\n            };\n            arr.constructor = Bar;\n            return (\n              arr.foo() === 42 && // typed array instances can be augmented\n              arr.constructor === Bar && // constructor can be set\n              typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n              arr.subarray(1, 1).byteLength === 0\n            ); // ie10 has broken `subarray`\n          } catch (e) {\n            return false;\n          }\n        })();\n\n        function kMaxLength() {\n          return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;\n        }\n\n        /**\n         * Class: Buffer\n         * =============\n         *\n         * The Buffer constructor returns instances of `Uint8Array` that are augmented\n         * with function properties for all the node `Buffer` API functions. We use\n         * `Uint8Array` so that square bracket notation works as expected -- it returns\n         * a single octet.\n         *\n         * By augmenting the instances, we can avoid modifying the `Uint8Array`\n         * prototype.\n         */\n        function Buffer(arg) {\n          if (!(this instanceof Buffer)) {\n            // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n            if (arguments.length > 1) return new Buffer(arg, arguments[1]);\n            return new Buffer(arg);\n          }\n\n          this.length = 0;\n          this.parent = undefined;\n\n          // Common case.\n          if (typeof arg === 'number') {\n            return fromNumber(this, arg);\n          }\n\n          // Slightly less common case.\n          if (typeof arg === 'string') {\n            return fromString(\n              this,\n              arg,\n              arguments.length > 1 ? arguments[1] : 'utf8'\n            );\n          }\n\n          // Unusual.\n          return fromObject(this, arg);\n        }\n\n        function fromNumber(that, length) {\n          that = allocate(that, length < 0 ? 0 : checked(length) | 0);\n          if (!Buffer.TYPED_ARRAY_SUPPORT) {\n            for (var i = 0; i < length; i++) {\n              that[i] = 0;\n            }\n          }\n          return that;\n        }\n\n        function fromString(that, string, encoding) {\n          if (typeof encoding !== 'string' || encoding === '')\n            encoding = 'utf8';\n\n          // Assumption: byteLength() return value is always < kMaxLength.\n          var length = byteLength(string, encoding) | 0;\n          that = allocate(that, length);\n\n          that.write(string, encoding);\n          return that;\n        }\n\n        function fromObject(that, object) {\n          if (Buffer.isBuffer(object)) return fromBuffer(that, object);\n\n          if (isArray(object)) return fromArray(that, object);\n\n          if (object == null) {\n            throw new TypeError(\n              'must start with number, buffer, array or string'\n            );\n          }\n\n          if (typeof ArrayBuffer !== 'undefined') {\n            if (object.buffer instanceof ArrayBuffer) {\n              return fromTypedArray(that, object);\n            }\n            if (object instanceof ArrayBuffer) {\n              return fromArrayBuffer(that, object);\n            }\n          }\n\n          if (object.length) return fromArrayLike(that, object);\n\n          return fromJsonObject(that, object);\n        }\n\n        function fromBuffer(that, buffer) {\n          var length = checked(buffer.length) | 0;\n          that = allocate(that, length);\n          buffer.copy(that, 0, 0, length);\n          return that;\n        }\n\n        function fromArray(that, array) {\n          var length = checked(array.length) | 0;\n          that = allocate(that, length);\n          for (var i = 0; i < length; i += 1) {\n            that[i] = array[i] & 255;\n          }\n          return that;\n        }\n\n        // Duplicate of fromArray() to keep fromArray() monomorphic.\n        function fromTypedArray(that, array) {\n          var length = checked(array.length) | 0;\n          that = allocate(that, length);\n          // Truncating the elements is probably not what people expect from typed\n          // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n          // of the old Buffer constructor.\n          for (var i = 0; i < length; i += 1) {\n            that[i] = array[i] & 255;\n          }\n          return that;\n        }\n\n        function fromArrayBuffer(that, array) {\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            // Return an augmented `Uint8Array` instance, for best performance\n            array.byteLength;\n            that = Buffer._augment(new Uint8Array(array));\n          } else {\n            // Fallback: Return an object instance of the Buffer class\n            that = fromTypedArray(that, new Uint8Array(array));\n          }\n          return that;\n        }\n\n        function fromArrayLike(that, array) {\n          var length = checked(array.length) | 0;\n          that = allocate(that, length);\n          for (var i = 0; i < length; i += 1) {\n            that[i] = array[i] & 255;\n          }\n          return that;\n        }\n\n        // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n        // Returns a zero-length buffer for inputs that don't conform to the spec.\n        function fromJsonObject(that, object) {\n          var array;\n          var length = 0;\n\n          if (object.type === 'Buffer' && isArray(object.data)) {\n            array = object.data;\n            length = checked(array.length) | 0;\n          }\n          that = allocate(that, length);\n\n          for (var i = 0; i < length; i += 1) {\n            that[i] = array[i] & 255;\n          }\n          return that;\n        }\n\n        function allocate(that, length) {\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            // Return an augmented `Uint8Array` instance, for best performance\n            that = Buffer._augment(new Uint8Array(length));\n          } else {\n            // Fallback: Return an object instance of the Buffer class\n            that.length = length;\n            that._isBuffer = true;\n          }\n\n          var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1;\n          if (fromPool) that.parent = rootParent;\n\n          return that;\n        }\n\n        function checked(length) {\n          // Note: cannot use `length < kMaxLength` here because that fails when\n          // length is NaN (which is otherwise coerced to zero.)\n          if (length >= kMaxLength()) {\n            throw new RangeError(\n              'Attempt to allocate Buffer larger than maximum ' +\n                'size: 0x' +\n                kMaxLength().toString(16) +\n                ' bytes'\n            );\n          }\n          return length | 0;\n        }\n\n        function SlowBuffer(subject, encoding) {\n          if (!(this instanceof SlowBuffer))\n            return new SlowBuffer(subject, encoding);\n\n          var buf = new Buffer(subject, encoding);\n          delete buf.parent;\n          return buf;\n        }\n\n        Buffer.isBuffer = function isBuffer(b) {\n          return !!(b != null && b._isBuffer);\n        };\n\n        Buffer.compare = function compare(a, b) {\n          if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n            throw new TypeError('Arguments must be Buffers');\n          }\n\n          if (a === b) return 0;\n\n          var x = a.length;\n          var y = b.length;\n\n          var i = 0;\n          var len = Math.min(x, y);\n          while (i < len) {\n            if (a[i] !== b[i]) break;\n\n            ++i;\n          }\n\n          if (i !== len) {\n            x = a[i];\n            y = b[i];\n          }\n\n          if (x < y) return -1;\n          if (y < x) return 1;\n          return 0;\n        };\n\n        Buffer.isEncoding = function isEncoding(encoding) {\n          switch (String(encoding).toLowerCase()) {\n            case 'hex':\n            case 'utf8':\n            case 'utf-8':\n            case 'ascii':\n            case 'binary':\n            case 'base64':\n            case 'raw':\n            case 'ucs2':\n            case 'ucs-2':\n            case 'utf16le':\n            case 'utf-16le':\n              return true;\n            default:\n              return false;\n          }\n        };\n\n        Buffer.concat = function concat(list, length) {\n          if (!isArray(list))\n            throw new TypeError('list argument must be an Array of Buffers.');\n\n          if (list.length === 0) {\n            return new Buffer(0);\n          }\n\n          var i;\n          if (length === undefined) {\n            length = 0;\n            for (i = 0; i < list.length; i++) {\n              length += list[i].length;\n            }\n          }\n\n          var buf = new Buffer(length);\n          var pos = 0;\n          for (i = 0; i < list.length; i++) {\n            var item = list[i];\n            item.copy(buf, pos);\n            pos += item.length;\n          }\n          return buf;\n        };\n\n        function byteLength(string, encoding) {\n          if (typeof string !== 'string') string = '' + string;\n\n          var len = string.length;\n          if (len === 0) return 0;\n\n          // Use a for loop to avoid recursion\n          var loweredCase = false;\n          for (;;) {\n            switch (encoding) {\n              case 'ascii':\n              case 'binary':\n              // Deprecated\n              case 'raw':\n              case 'raws':\n                return len;\n              case 'utf8':\n              case 'utf-8':\n                return utf8ToBytes(string).length;\n              case 'ucs2':\n              case 'ucs-2':\n              case 'utf16le':\n              case 'utf-16le':\n                return len * 2;\n              case 'hex':\n                return len >>> 1;\n              case 'base64':\n                return base64ToBytes(string).length;\n              default:\n                if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n                encoding = ('' + encoding).toLowerCase();\n                loweredCase = true;\n            }\n          }\n        }\n        Buffer.byteLength = byteLength;\n\n        // pre-set for values that may exist in the future\n        Buffer.prototype.length = undefined;\n        Buffer.prototype.parent = undefined;\n\n        function slowToString(encoding, start, end) {\n          var loweredCase = false;\n\n          start = start | 0;\n          end = end === undefined || end === Infinity ? this.length : end | 0;\n\n          if (!encoding) encoding = 'utf8';\n          if (start < 0) start = 0;\n          if (end > this.length) end = this.length;\n          if (end <= start) return '';\n\n          while (true) {\n            switch (encoding) {\n              case 'hex':\n                return hexSlice(this, start, end);\n\n              case 'utf8':\n              case 'utf-8':\n                return utf8Slice(this, start, end);\n\n              case 'ascii':\n                return asciiSlice(this, start, end);\n\n              case 'binary':\n                return binarySlice(this, start, end);\n\n              case 'base64':\n                return base64Slice(this, start, end);\n\n              case 'ucs2':\n              case 'ucs-2':\n              case 'utf16le':\n              case 'utf-16le':\n                return utf16leSlice(this, start, end);\n\n              default:\n                if (loweredCase)\n                  throw new TypeError('Unknown encoding: ' + encoding);\n                encoding = (encoding + '').toLowerCase();\n                loweredCase = true;\n            }\n          }\n        }\n\n        Buffer.prototype.toString = function toString() {\n          var length = this.length | 0;\n          if (length === 0) return '';\n          if (arguments.length === 0) return utf8Slice(this, 0, length);\n          return slowToString.apply(this, arguments);\n        };\n\n        Buffer.prototype.equals = function equals(b) {\n          if (!Buffer.isBuffer(b))\n            throw new TypeError('Argument must be a Buffer');\n          if (this === b) return true;\n          return Buffer.compare(this, b) === 0;\n        };\n\n        Buffer.prototype.inspect = function inspect() {\n          var str = '';\n          var max = exports.INSPECT_MAX_BYTES;\n          if (this.length > 0) {\n            str = this.toString('hex', 0, max)\n              .match(/.{2}/g)\n              .join(' ');\n            if (this.length > max) str += ' ... ';\n          }\n          return '<Buffer ' + str + '>';\n        };\n\n        Buffer.prototype.compare = function compare(b) {\n          if (!Buffer.isBuffer(b))\n            throw new TypeError('Argument must be a Buffer');\n          if (this === b) return 0;\n          return Buffer.compare(this, b);\n        };\n\n        Buffer.prototype.indexOf = function indexOf(val, byteOffset) {\n          if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff;\n          else if (byteOffset < -0x80000000) byteOffset = -0x80000000;\n          byteOffset >>= 0;\n\n          if (this.length === 0) return -1;\n          if (byteOffset >= this.length) return -1;\n\n          // Negative offsets start from the end of the buffer\n          if (byteOffset < 0)\n            byteOffset = Math.max(this.length + byteOffset, 0);\n\n          if (typeof val === 'string') {\n            if (val.length === 0) return -1; // special case: looking for empty string always fails\n            return String.prototype.indexOf.call(this, val, byteOffset);\n          }\n          if (Buffer.isBuffer(val)) {\n            return arrayIndexOf(this, val, byteOffset);\n          }\n          if (typeof val === 'number') {\n            if (\n              Buffer.TYPED_ARRAY_SUPPORT &&\n              Uint8Array.prototype.indexOf === 'function'\n            ) {\n              return Uint8Array.prototype.indexOf.call(this, val, byteOffset);\n            }\n            return arrayIndexOf(this, [val], byteOffset);\n          }\n\n          function arrayIndexOf(arr, val, byteOffset) {\n            var foundIndex = -1;\n            for (var i = 0; byteOffset + i < arr.length; i++) {\n              if (\n                arr[byteOffset + i] ===\n                val[foundIndex === -1 ? 0 : i - foundIndex]\n              ) {\n                if (foundIndex === -1) foundIndex = i;\n                if (i - foundIndex + 1 === val.length)\n                  return byteOffset + foundIndex;\n              } else {\n                foundIndex = -1;\n              }\n            }\n            return -1;\n          }\n\n          throw new TypeError('val must be string, number or Buffer');\n        };\n\n        // `get` is deprecated\n        Buffer.prototype.get = function get(offset) {\n          console.log(\n            '.get() is deprecated. Permissions using array indexes instead.'\n          );\n          return this.readUInt8(offset);\n        };\n\n        // `set` is deprecated\n        Buffer.prototype.set = function set(v, offset) {\n          console.log(\n            '.set() is deprecated. Permissions using array indexes instead.'\n          );\n          return this.writeUInt8(v, offset);\n        };\n\n        function hexWrite(buf, string, offset, length) {\n          offset = Number(offset) || 0;\n          var remaining = buf.length - offset;\n          if (!length) {\n            length = remaining;\n          } else {\n            length = Number(length);\n            if (length > remaining) {\n              length = remaining;\n            }\n          }\n\n          // must be an even number of digits\n          var strLen = string.length;\n          if (strLen % 2 !== 0) throw new Error('Invalid hex string');\n\n          if (length > strLen / 2) {\n            length = strLen / 2;\n          }\n          for (var i = 0; i < length; i++) {\n            var parsed = parseInt(string.substr(i * 2, 2), 16);\n            if (isNaN(parsed)) throw new Error('Invalid hex string');\n            buf[offset + i] = parsed;\n          }\n          return i;\n        }\n\n        function utf8Write(buf, string, offset, length) {\n          return blitBuffer(\n            utf8ToBytes(string, buf.length - offset),\n            buf,\n            offset,\n            length\n          );\n        }\n\n        function asciiWrite(buf, string, offset, length) {\n          return blitBuffer(asciiToBytes(string), buf, offset, length);\n        }\n\n        function binaryWrite(buf, string, offset, length) {\n          return asciiWrite(buf, string, offset, length);\n        }\n\n        function base64Write(buf, string, offset, length) {\n          return blitBuffer(base64ToBytes(string), buf, offset, length);\n        }\n\n        function ucs2Write(buf, string, offset, length) {\n          return blitBuffer(\n            utf16leToBytes(string, buf.length - offset),\n            buf,\n            offset,\n            length\n          );\n        }\n\n        Buffer.prototype.write = function write(\n          string,\n          offset,\n          length,\n          encoding\n        ) {\n          // Buffer#write(string)\n          if (offset === undefined) {\n            encoding = 'utf8';\n            length = this.length;\n            offset = 0;\n            // Buffer#write(string, encoding)\n          } else if (length === undefined && typeof offset === 'string') {\n            encoding = offset;\n            length = this.length;\n            offset = 0;\n            // Buffer#write(string, offset[, length][, encoding])\n          } else if (isFinite(offset)) {\n            offset = offset | 0;\n            if (isFinite(length)) {\n              length = length | 0;\n              if (encoding === undefined) encoding = 'utf8';\n            } else {\n              encoding = length;\n              length = undefined;\n            }\n            // legacy write(string, encoding, offset, length) - remove in v0.13\n          } else {\n            var swap = encoding;\n            encoding = offset;\n            offset = length | 0;\n            length = swap;\n          }\n\n          var remaining = this.length - offset;\n          if (length === undefined || length > remaining) length = remaining;\n\n          if (\n            (string.length > 0 && (length < 0 || offset < 0)) ||\n            offset > this.length\n          ) {\n            throw new RangeError('attempt to write outside buffer bounds');\n          }\n\n          if (!encoding) encoding = 'utf8';\n\n          var loweredCase = false;\n          for (;;) {\n            switch (encoding) {\n              case 'hex':\n                return hexWrite(this, string, offset, length);\n\n              case 'utf8':\n              case 'utf-8':\n                return utf8Write(this, string, offset, length);\n\n              case 'ascii':\n                return asciiWrite(this, string, offset, length);\n\n              case 'binary':\n                return binaryWrite(this, string, offset, length);\n\n              case 'base64':\n                // Warning: maxLength not taken into account in base64Write\n                return base64Write(this, string, offset, length);\n\n              case 'ucs2':\n              case 'ucs-2':\n              case 'utf16le':\n              case 'utf-16le':\n                return ucs2Write(this, string, offset, length);\n\n              default:\n                if (loweredCase)\n                  throw new TypeError('Unknown encoding: ' + encoding);\n                encoding = ('' + encoding).toLowerCase();\n                loweredCase = true;\n            }\n          }\n        };\n\n        Buffer.prototype.toJSON = function toJSON() {\n          return {\n            type: 'Buffer',\n            data: Array.prototype.slice.call(this._arr || this, 0)\n          };\n        };\n\n        function base64Slice(buf, start, end) {\n          if (start === 0 && end === buf.length) {\n            return base64.fromByteArray(buf);\n          } else {\n            return base64.fromByteArray(buf.slice(start, end));\n          }\n        }\n\n        function utf8Slice(buf, start, end) {\n          end = Math.min(buf.length, end);\n          var res = [];\n\n          var i = start;\n          while (i < end) {\n            var firstByte = buf[i];\n            var codePoint = null;\n            var bytesPerSequence =\n              firstByte > 0xef\n                ? 4\n                : firstByte > 0xdf\n                ? 3\n                : firstByte > 0xbf\n                ? 2\n                : 1;\n\n            if (i + bytesPerSequence <= end) {\n              var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n              switch (bytesPerSequence) {\n                case 1:\n                  if (firstByte < 0x80) {\n                    codePoint = firstByte;\n                  }\n                  break;\n                case 2:\n                  secondByte = buf[i + 1];\n                  if ((secondByte & 0xc0) === 0x80) {\n                    tempCodePoint =\n                      ((firstByte & 0x1f) << 0x6) | (secondByte & 0x3f);\n                    if (tempCodePoint > 0x7f) {\n                      codePoint = tempCodePoint;\n                    }\n                  }\n                  break;\n                case 3:\n                  secondByte = buf[i + 1];\n                  thirdByte = buf[i + 2];\n                  if (\n                    (secondByte & 0xc0) === 0x80 &&\n                    (thirdByte & 0xc0) === 0x80\n                  ) {\n                    tempCodePoint =\n                      ((firstByte & 0xf) << 0xc) |\n                      ((secondByte & 0x3f) << 0x6) |\n                      (thirdByte & 0x3f);\n                    if (\n                      tempCodePoint > 0x7ff &&\n                      (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)\n                    ) {\n                      codePoint = tempCodePoint;\n                    }\n                  }\n                  break;\n                case 4:\n                  secondByte = buf[i + 1];\n                  thirdByte = buf[i + 2];\n                  fourthByte = buf[i + 3];\n                  if (\n                    (secondByte & 0xc0) === 0x80 &&\n                    (thirdByte & 0xc0) === 0x80 &&\n                    (fourthByte & 0xc0) === 0x80\n                  ) {\n                    tempCodePoint =\n                      ((firstByte & 0xf) << 0x12) |\n                      ((secondByte & 0x3f) << 0xc) |\n                      ((thirdByte & 0x3f) << 0x6) |\n                      (fourthByte & 0x3f);\n                    if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {\n                      codePoint = tempCodePoint;\n                    }\n                  }\n              }\n            }\n\n            if (codePoint === null) {\n              // we did not generate a valid codePoint so insert a\n              // replacement char (U+FFFD) and advance only 1 byte\n              codePoint = 0xfffd;\n              bytesPerSequence = 1;\n            } else if (codePoint > 0xffff) {\n              // encode to utf16 (surrogate pair dance)\n              codePoint -= 0x10000;\n              res.push(((codePoint >>> 10) & 0x3ff) | 0xd800);\n              codePoint = 0xdc00 | (codePoint & 0x3ff);\n            }\n\n            res.push(codePoint);\n            i += bytesPerSequence;\n          }\n\n          return decodeCodePointsArray(res);\n        }\n\n        // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n        // the lowest limit is Chrome, with 0x10000 args.\n        // We go 1 magnitude less, for safety\n        var MAX_ARGUMENTS_LENGTH = 0x1000;\n\n        function decodeCodePointsArray(codePoints) {\n          var len = codePoints.length;\n          if (len <= MAX_ARGUMENTS_LENGTH) {\n            return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n          }\n\n          // Decode in chunks to avoid \"call stack size exceeded\".\n          var res = '';\n          var i = 0;\n          while (i < len) {\n            res += String.fromCharCode.apply(\n              String,\n              codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH))\n            );\n          }\n          return res;\n        }\n\n        function asciiSlice(buf, start, end) {\n          var ret = '';\n          end = Math.min(buf.length, end);\n\n          for (var i = start; i < end; i++) {\n            ret += String.fromCharCode(buf[i] & 0x7f);\n          }\n          return ret;\n        }\n\n        function binarySlice(buf, start, end) {\n          var ret = '';\n          end = Math.min(buf.length, end);\n\n          for (var i = start; i < end; i++) {\n            ret += String.fromCharCode(buf[i]);\n          }\n          return ret;\n        }\n\n        function hexSlice(buf, start, end) {\n          var len = buf.length;\n\n          if (!start || start < 0) start = 0;\n          if (!end || end < 0 || end > len) end = len;\n\n          var out = '';\n          for (var i = start; i < end; i++) {\n            out += toHex(buf[i]);\n          }\n          return out;\n        }\n\n        function utf16leSlice(buf, start, end) {\n          var bytes = buf.slice(start, end);\n          var res = '';\n          for (var i = 0; i < bytes.length; i += 2) {\n            res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n          }\n          return res;\n        }\n\n        Buffer.prototype.slice = function slice(start, end) {\n          var len = this.length;\n          start = ~~start;\n          end = end === undefined ? len : ~~end;\n\n          if (start < 0) {\n            start += len;\n            if (start < 0) start = 0;\n          } else if (start > len) {\n            start = len;\n          }\n\n          if (end < 0) {\n            end += len;\n            if (end < 0) end = 0;\n          } else if (end > len) {\n            end = len;\n          }\n\n          if (end < start) end = start;\n\n          var newBuf;\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            newBuf = Buffer._augment(this.subarray(start, end));\n          } else {\n            var sliceLen = end - start;\n            newBuf = new Buffer(sliceLen, undefined);\n            for (var i = 0; i < sliceLen; i++) {\n              newBuf[i] = this[i + start];\n            }\n          }\n\n          if (newBuf.length) newBuf.parent = this.parent || this;\n\n          return newBuf;\n        };\n\n        /*\n         * Need to make sure that buffer isn't trying to write out of bounds.\n         */\n        function checkOffset(offset, ext, length) {\n          if (offset % 1 !== 0 || offset < 0)\n            throw new RangeError('offset is not uint');\n          if (offset + ext > length)\n            throw new RangeError('Trying to access beyond buffer length');\n        }\n\n        Buffer.prototype.readUIntLE = function readUIntLE(\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          offset = offset | 0;\n          byteLength = byteLength | 0;\n          if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n          var val = this[offset];\n          var mul = 1;\n          var i = 0;\n          while (++i < byteLength && (mul *= 0x100)) {\n            val += this[offset + i] * mul;\n          }\n\n          return val;\n        };\n\n        Buffer.prototype.readUIntBE = function readUIntBE(\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          offset = offset | 0;\n          byteLength = byteLength | 0;\n          if (!noAssert) {\n            checkOffset(offset, byteLength, this.length);\n          }\n\n          var val = this[offset + --byteLength];\n          var mul = 1;\n          while (byteLength > 0 && (mul *= 0x100)) {\n            val += this[offset + --byteLength] * mul;\n          }\n\n          return val;\n        };\n\n        Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 1, this.length);\n          return this[offset];\n        };\n\n        Buffer.prototype.readUInt16LE = function readUInt16LE(\n          offset,\n          noAssert\n        ) {\n          if (!noAssert) checkOffset(offset, 2, this.length);\n          return this[offset] | (this[offset + 1] << 8);\n        };\n\n        Buffer.prototype.readUInt16BE = function readUInt16BE(\n          offset,\n          noAssert\n        ) {\n          if (!noAssert) checkOffset(offset, 2, this.length);\n          return (this[offset] << 8) | this[offset + 1];\n        };\n\n        Buffer.prototype.readUInt32LE = function readUInt32LE(\n          offset,\n          noAssert\n        ) {\n          if (!noAssert) checkOffset(offset, 4, this.length);\n\n          return (\n            (this[offset] |\n              (this[offset + 1] << 8) |\n              (this[offset + 2] << 16)) +\n            this[offset + 3] * 0x1000000\n          );\n        };\n\n        Buffer.prototype.readUInt32BE = function readUInt32BE(\n          offset,\n          noAssert\n        ) {\n          if (!noAssert) checkOffset(offset, 4, this.length);\n\n          return (\n            this[offset] * 0x1000000 +\n            ((this[offset + 1] << 16) |\n              (this[offset + 2] << 8) |\n              this[offset + 3])\n          );\n        };\n\n        Buffer.prototype.readIntLE = function readIntLE(\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          offset = offset | 0;\n          byteLength = byteLength | 0;\n          if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n          var val = this[offset];\n          var mul = 1;\n          var i = 0;\n          while (++i < byteLength && (mul *= 0x100)) {\n            val += this[offset + i] * mul;\n          }\n          mul *= 0x80;\n\n          if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n          return val;\n        };\n\n        Buffer.prototype.readIntBE = function readIntBE(\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          offset = offset | 0;\n          byteLength = byteLength | 0;\n          if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n          var i = byteLength;\n          var mul = 1;\n          var val = this[offset + --i];\n          while (i > 0 && (mul *= 0x100)) {\n            val += this[offset + --i] * mul;\n          }\n          mul *= 0x80;\n\n          if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n          return val;\n        };\n\n        Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 1, this.length);\n          if (!(this[offset] & 0x80)) return this[offset];\n          return (0xff - this[offset] + 1) * -1;\n        };\n\n        Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 2, this.length);\n          var val = this[offset] | (this[offset + 1] << 8);\n          return val & 0x8000 ? val | 0xffff0000 : val;\n        };\n\n        Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 2, this.length);\n          var val = this[offset + 1] | (this[offset] << 8);\n          return val & 0x8000 ? val | 0xffff0000 : val;\n        };\n\n        Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 4, this.length);\n\n          return (\n            this[offset] |\n            (this[offset + 1] << 8) |\n            (this[offset + 2] << 16) |\n            (this[offset + 3] << 24)\n          );\n        };\n\n        Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 4, this.length);\n\n          return (\n            (this[offset] << 24) |\n            (this[offset + 1] << 16) |\n            (this[offset + 2] << 8) |\n            this[offset + 3]\n          );\n        };\n\n        Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 4, this.length);\n          return ieee754.read(this, offset, true, 23, 4);\n        };\n\n        Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n          if (!noAssert) checkOffset(offset, 4, this.length);\n          return ieee754.read(this, offset, false, 23, 4);\n        };\n\n        Buffer.prototype.readDoubleLE = function readDoubleLE(\n          offset,\n          noAssert\n        ) {\n          if (!noAssert) checkOffset(offset, 8, this.length);\n          return ieee754.read(this, offset, true, 52, 8);\n        };\n\n        Buffer.prototype.readDoubleBE = function readDoubleBE(\n          offset,\n          noAssert\n        ) {\n          if (!noAssert) checkOffset(offset, 8, this.length);\n          return ieee754.read(this, offset, false, 52, 8);\n        };\n\n        function checkInt(buf, value, offset, ext, max, min) {\n          if (!Buffer.isBuffer(buf))\n            throw new TypeError('buffer must be a Buffer instance');\n          if (value > max || value < min)\n            throw new RangeError('value is out of bounds');\n          if (offset + ext > buf.length)\n            throw new RangeError('index out of range');\n        }\n\n        Buffer.prototype.writeUIntLE = function writeUIntLE(\n          value,\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          byteLength = byteLength | 0;\n          if (!noAssert)\n            checkInt(\n              this,\n              value,\n              offset,\n              byteLength,\n              Math.pow(2, 8 * byteLength),\n              0\n            );\n\n          var mul = 1;\n          var i = 0;\n          this[offset] = value & 0xff;\n          while (++i < byteLength && (mul *= 0x100)) {\n            this[offset + i] = (value / mul) & 0xff;\n          }\n\n          return offset + byteLength;\n        };\n\n        Buffer.prototype.writeUIntBE = function writeUIntBE(\n          value,\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          byteLength = byteLength | 0;\n          if (!noAssert)\n            checkInt(\n              this,\n              value,\n              offset,\n              byteLength,\n              Math.pow(2, 8 * byteLength),\n              0\n            );\n\n          var i = byteLength - 1;\n          var mul = 1;\n          this[offset + i] = value & 0xff;\n          while (--i >= 0 && (mul *= 0x100)) {\n            this[offset + i] = (value / mul) & 0xff;\n          }\n\n          return offset + byteLength;\n        };\n\n        Buffer.prototype.writeUInt8 = function writeUInt8(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n          if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n          this[offset] = value;\n          return offset + 1;\n        };\n\n        function objectWriteUInt16(buf, value, offset, littleEndian) {\n          if (value < 0) value = 0xffff + value + 1;\n          for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n            buf[offset + i] =\n              (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n              ((littleEndian ? i : 1 - i) * 8);\n          }\n        }\n\n        Buffer.prototype.writeUInt16LE = function writeUInt16LE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value;\n            this[offset + 1] = value >>> 8;\n          } else {\n            objectWriteUInt16(this, value, offset, true);\n          }\n          return offset + 2;\n        };\n\n        Buffer.prototype.writeUInt16BE = function writeUInt16BE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value >>> 8;\n            this[offset + 1] = value;\n          } else {\n            objectWriteUInt16(this, value, offset, false);\n          }\n          return offset + 2;\n        };\n\n        function objectWriteUInt32(buf, value, offset, littleEndian) {\n          if (value < 0) value = 0xffffffff + value + 1;\n          for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n            buf[offset + i] =\n              (value >>> ((littleEndian ? i : 3 - i) * 8)) & 0xff;\n          }\n        }\n\n        Buffer.prototype.writeUInt32LE = function writeUInt32LE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset + 3] = value >>> 24;\n            this[offset + 2] = value >>> 16;\n            this[offset + 1] = value >>> 8;\n            this[offset] = value;\n          } else {\n            objectWriteUInt32(this, value, offset, true);\n          }\n          return offset + 4;\n        };\n\n        Buffer.prototype.writeUInt32BE = function writeUInt32BE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value >>> 24;\n            this[offset + 1] = value >>> 16;\n            this[offset + 2] = value >>> 8;\n            this[offset + 3] = value;\n          } else {\n            objectWriteUInt32(this, value, offset, false);\n          }\n          return offset + 4;\n        };\n\n        Buffer.prototype.writeIntLE = function writeIntLE(\n          value,\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) {\n            var limit = Math.pow(2, 8 * byteLength - 1);\n\n            checkInt(this, value, offset, byteLength, limit - 1, -limit);\n          }\n\n          var i = 0;\n          var mul = 1;\n          var sub = value < 0 ? 1 : 0;\n          this[offset] = value & 0xff;\n          while (++i < byteLength && (mul *= 0x100)) {\n            this[offset + i] = (((value / mul) >> 0) - sub) & 0xff;\n          }\n\n          return offset + byteLength;\n        };\n\n        Buffer.prototype.writeIntBE = function writeIntBE(\n          value,\n          offset,\n          byteLength,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) {\n            var limit = Math.pow(2, 8 * byteLength - 1);\n\n            checkInt(this, value, offset, byteLength, limit - 1, -limit);\n          }\n\n          var i = byteLength - 1;\n          var mul = 1;\n          var sub = value < 0 ? 1 : 0;\n          this[offset + i] = value & 0xff;\n          while (--i >= 0 && (mul *= 0x100)) {\n            this[offset + i] = (((value / mul) >> 0) - sub) & 0xff;\n          }\n\n          return offset + byteLength;\n        };\n\n        Buffer.prototype.writeInt8 = function writeInt8(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n          if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n          if (value < 0) value = 0xff + value + 1;\n          this[offset] = value;\n          return offset + 1;\n        };\n\n        Buffer.prototype.writeInt16LE = function writeInt16LE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value;\n            this[offset + 1] = value >>> 8;\n          } else {\n            objectWriteUInt16(this, value, offset, true);\n          }\n          return offset + 2;\n        };\n\n        Buffer.prototype.writeInt16BE = function writeInt16BE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value >>> 8;\n            this[offset + 1] = value;\n          } else {\n            objectWriteUInt16(this, value, offset, false);\n          }\n          return offset + 2;\n        };\n\n        Buffer.prototype.writeInt32LE = function writeInt32LE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert)\n            checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value;\n            this[offset + 1] = value >>> 8;\n            this[offset + 2] = value >>> 16;\n            this[offset + 3] = value >>> 24;\n          } else {\n            objectWriteUInt32(this, value, offset, true);\n          }\n          return offset + 4;\n        };\n\n        Buffer.prototype.writeInt32BE = function writeInt32BE(\n          value,\n          offset,\n          noAssert\n        ) {\n          value = +value;\n          offset = offset | 0;\n          if (!noAssert)\n            checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n          if (value < 0) value = 0xffffffff + value + 1;\n          if (Buffer.TYPED_ARRAY_SUPPORT) {\n            this[offset] = value >>> 24;\n            this[offset + 1] = value >>> 16;\n            this[offset + 2] = value >>> 8;\n            this[offset + 3] = value;\n          } else {\n            objectWriteUInt32(this, value, offset, false);\n          }\n          return offset + 4;\n        };\n\n        function checkIEEE754(buf, value, offset, ext, max, min) {\n          if (value > max || value < min)\n            throw new RangeError('value is out of bounds');\n          if (offset + ext > buf.length)\n            throw new RangeError('index out of range');\n          if (offset < 0) throw new RangeError('index out of range');\n        }\n\n        function writeFloat(buf, value, offset, littleEndian, noAssert) {\n          if (!noAssert) {\n            checkIEEE754(\n              buf,\n              value,\n              offset,\n              4,\n              3.4028234663852886e38,\n              -3.4028234663852886e38\n            );\n          }\n          ieee754.write(buf, value, offset, littleEndian, 23, 4);\n          return offset + 4;\n        }\n\n        Buffer.prototype.writeFloatLE = function writeFloatLE(\n          value,\n          offset,\n          noAssert\n        ) {\n          return writeFloat(this, value, offset, true, noAssert);\n        };\n\n        Buffer.prototype.writeFloatBE = function writeFloatBE(\n          value,\n          offset,\n          noAssert\n        ) {\n          return writeFloat(this, value, offset, false, noAssert);\n        };\n\n        function writeDouble(buf, value, offset, littleEndian, noAssert) {\n          if (!noAssert) {\n            checkIEEE754(\n              buf,\n              value,\n              offset,\n              8,\n              1.7976931348623157e308,\n              -1.7976931348623157e308\n            );\n          }\n          ieee754.write(buf, value, offset, littleEndian, 52, 8);\n          return offset + 8;\n        }\n\n        Buffer.prototype.writeDoubleLE = function writeDoubleLE(\n          value,\n          offset,\n          noAssert\n        ) {\n          return writeDouble(this, value, offset, true, noAssert);\n        };\n\n        Buffer.prototype.writeDoubleBE = function writeDoubleBE(\n          value,\n          offset,\n          noAssert\n        ) {\n          return writeDouble(this, value, offset, false, noAssert);\n        };\n\n        // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n        Buffer.prototype.copy = function copy(target, targetStart, start, end) {\n          if (!start) start = 0;\n          if (!end && end !== 0) end = this.length;\n          if (targetStart >= target.length) targetStart = target.length;\n          if (!targetStart) targetStart = 0;\n          if (end > 0 && end < start) end = start;\n\n          // Copy 0 bytes; we're done\n          if (end === start) return 0;\n          if (target.length === 0 || this.length === 0) return 0;\n\n          // Fatal error conditions\n          if (targetStart < 0) {\n            throw new RangeError('targetStart out of bounds');\n          }\n          if (start < 0 || start >= this.length)\n            throw new RangeError('sourceStart out of bounds');\n          if (end < 0) throw new RangeError('sourceEnd out of bounds');\n\n          // Are we oob?\n          if (end > this.length) end = this.length;\n          if (target.length - targetStart < end - start) {\n            end = target.length - targetStart + start;\n          }\n\n          var len = end - start;\n          var i;\n\n          if (this === target && start < targetStart && targetStart < end) {\n            // descending copy from end\n            for (i = len - 1; i >= 0; i--) {\n              target[i + targetStart] = this[i + start];\n            }\n          } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n            // ascending copy from start\n            for (i = 0; i < len; i++) {\n              target[i + targetStart] = this[i + start];\n            }\n          } else {\n            target._set(this.subarray(start, start + len), targetStart);\n          }\n\n          return len;\n        };\n\n        // fill(value, start=0, end=buffer.length)\n        Buffer.prototype.fill = function fill(value, start, end) {\n          if (!value) value = 0;\n          if (!start) start = 0;\n          if (!end) end = this.length;\n\n          if (end < start) throw new RangeError('end < start');\n\n          // Fill 0 bytes; we're done\n          if (end === start) return;\n          if (this.length === 0) return;\n\n          if (start < 0 || start >= this.length)\n            throw new RangeError('start out of bounds');\n          if (end < 0 || end > this.length)\n            throw new RangeError('end out of bounds');\n\n          var i;\n          if (typeof value === 'number') {\n            for (i = start; i < end; i++) {\n              this[i] = value;\n            }\n          } else {\n            var bytes = utf8ToBytes(value.toString());\n            var len = bytes.length;\n            for (i = start; i < end; i++) {\n              this[i] = bytes[i % len];\n            }\n          }\n\n          return this;\n        };\n\n        /**\n         * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\n         * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\n         */\n        Buffer.prototype.toArrayBuffer = function toArrayBuffer() {\n          if (typeof Uint8Array !== 'undefined') {\n            if (Buffer.TYPED_ARRAY_SUPPORT) {\n              return new Buffer(this).buffer;\n            } else {\n              var buf = new Uint8Array(this.length);\n              for (var i = 0, len = buf.length; i < len; i += 1) {\n                buf[i] = this[i];\n              }\n              return buf.buffer;\n            }\n          } else {\n            throw new TypeError(\n              'Buffer.toArrayBuffer not supported in this browser'\n            );\n          }\n        };\n\n        // HELPER FUNCTIONS\n        // ================\n\n        var BP = Buffer.prototype;\n\n        /**\n         * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\n         */\n        Buffer._augment = function _augment(arr) {\n          arr.constructor = Buffer;\n          arr._isBuffer = true;\n\n          // save reference to original Uint8Array set method before overwriting\n          arr._set = arr.set;\n\n          // deprecated\n          arr.get = BP.get;\n          arr.set = BP.set;\n\n          arr.write = BP.write;\n          arr.toString = BP.toString;\n          arr.toLocaleString = BP.toString;\n          arr.toJSON = BP.toJSON;\n          arr.equals = BP.equals;\n          arr.compare = BP.compare;\n          arr.indexOf = BP.indexOf;\n          arr.copy = BP.copy;\n          arr.slice = BP.slice;\n          arr.readUIntLE = BP.readUIntLE;\n          arr.readUIntBE = BP.readUIntBE;\n          arr.readUInt8 = BP.readUInt8;\n          arr.readUInt16LE = BP.readUInt16LE;\n          arr.readUInt16BE = BP.readUInt16BE;\n          arr.readUInt32LE = BP.readUInt32LE;\n          arr.readUInt32BE = BP.readUInt32BE;\n          arr.readIntLE = BP.readIntLE;\n          arr.readIntBE = BP.readIntBE;\n          arr.readInt8 = BP.readInt8;\n          arr.readInt16LE = BP.readInt16LE;\n          arr.readInt16BE = BP.readInt16BE;\n          arr.readInt32LE = BP.readInt32LE;\n          arr.readInt32BE = BP.readInt32BE;\n          arr.readFloatLE = BP.readFloatLE;\n          arr.readFloatBE = BP.readFloatBE;\n          arr.readDoubleLE = BP.readDoubleLE;\n          arr.readDoubleBE = BP.readDoubleBE;\n          arr.writeUInt8 = BP.writeUInt8;\n          arr.writeUIntLE = BP.writeUIntLE;\n          arr.writeUIntBE = BP.writeUIntBE;\n          arr.writeUInt16LE = BP.writeUInt16LE;\n          arr.writeUInt16BE = BP.writeUInt16BE;\n          arr.writeUInt32LE = BP.writeUInt32LE;\n          arr.writeUInt32BE = BP.writeUInt32BE;\n          arr.writeIntLE = BP.writeIntLE;\n          arr.writeIntBE = BP.writeIntBE;\n          arr.writeInt8 = BP.writeInt8;\n          arr.writeInt16LE = BP.writeInt16LE;\n          arr.writeInt16BE = BP.writeInt16BE;\n          arr.writeInt32LE = BP.writeInt32LE;\n          arr.writeInt32BE = BP.writeInt32BE;\n          arr.writeFloatLE = BP.writeFloatLE;\n          arr.writeFloatBE = BP.writeFloatBE;\n          arr.writeDoubleLE = BP.writeDoubleLE;\n          arr.writeDoubleBE = BP.writeDoubleBE;\n          arr.fill = BP.fill;\n          arr.inspect = BP.inspect;\n          arr.toArrayBuffer = BP.toArrayBuffer;\n\n          return arr;\n        };\n\n        var INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\n        function base64clean(str) {\n          // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n          str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n          // Node converts strings with length < 2 to ''\n          if (str.length < 2) return '';\n          // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n          while (str.length % 4 !== 0) {\n            str = str + '=';\n          }\n          return str;\n        }\n\n        function stringtrim(str) {\n          if (str.trim) return str.trim();\n          return str.replace(/^\\s+|\\s+$/g, '');\n        }\n\n        function toHex(n) {\n          if (n < 16) return '0' + n.toString(16);\n          return n.toString(16);\n        }\n\n        function utf8ToBytes(string, units) {\n          units = units || Infinity;\n          var codePoint;\n          var length = string.length;\n          var leadSurrogate = null;\n          var bytes = [];\n\n          for (var i = 0; i < length; i++) {\n            codePoint = string.charCodeAt(i);\n\n            // is surrogate component\n            if (codePoint > 0xd7ff && codePoint < 0xe000) {\n              // last char was a lead\n              if (!leadSurrogate) {\n                // no lead yet\n                if (codePoint > 0xdbff) {\n                  // unexpected trail\n                  if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);\n                  continue;\n                } else if (i + 1 === length) {\n                  // unpaired lead\n                  if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);\n                  continue;\n                }\n\n                // valid lead\n                leadSurrogate = codePoint;\n\n                continue;\n              }\n\n              // 2 leads in a row\n              if (codePoint < 0xdc00) {\n                if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);\n                leadSurrogate = codePoint;\n                continue;\n              }\n\n              // valid surrogate pair\n              codePoint =\n                ((leadSurrogate - 0xd800) << 10) |\n                (codePoint - 0xdc00) |\n                0x10000;\n            } else if (leadSurrogate) {\n              // valid bmp char, but last char was a lead\n              if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);\n            }\n\n            leadSurrogate = null;\n\n            // encode utf8\n            if (codePoint < 0x80) {\n              if ((units -= 1) < 0) break;\n              bytes.push(codePoint);\n            } else if (codePoint < 0x800) {\n              if ((units -= 2) < 0) break;\n              bytes.push((codePoint >> 0x6) | 0xc0, (codePoint & 0x3f) | 0x80);\n            } else if (codePoint < 0x10000) {\n              if ((units -= 3) < 0) break;\n              bytes.push(\n                (codePoint >> 0xc) | 0xe0,\n                ((codePoint >> 0x6) & 0x3f) | 0x80,\n                (codePoint & 0x3f) | 0x80\n              );\n            } else if (codePoint < 0x110000) {\n              if ((units -= 4) < 0) break;\n              bytes.push(\n                (codePoint >> 0x12) | 0xf0,\n                ((codePoint >> 0xc) & 0x3f) | 0x80,\n                ((codePoint >> 0x6) & 0x3f) | 0x80,\n                (codePoint & 0x3f) | 0x80\n              );\n            } else {\n              throw new Error('Invalid code point');\n            }\n          }\n\n          return bytes;\n        }\n\n        function asciiToBytes(str) {\n          var byteArray = [];\n          for (var i = 0; i < str.length; i++) {\n            // Node's code seems to be doing this and not & 0x7F..\n            byteArray.push(str.charCodeAt(i) & 0xff);\n          }\n          return byteArray;\n        }\n\n        function utf16leToBytes(str, units) {\n          var c, hi, lo;\n          var byteArray = [];\n          for (var i = 0; i < str.length; i++) {\n            if ((units -= 2) < 0) break;\n\n            c = str.charCodeAt(i);\n            hi = c >> 8;\n            lo = c % 256;\n            byteArray.push(lo);\n            byteArray.push(hi);\n          }\n\n          return byteArray;\n        }\n\n        function base64ToBytes(str) {\n          return base64.toByteArray(base64clean(str));\n        }\n\n        function blitBuffer(src, dst, offset, length) {\n          for (var i = 0; i < length; i++) {\n            if (i + offset >= dst.length || i >= src.length) break;\n            dst[i + offset] = src[i];\n          }\n          return i;\n        }\n      },\n      { 'base64-js': 44, ieee754: 45, 'is-array': 46 }\n    ],\n    44: [\n      function(require, module, exports) {\n        var lookup =\n          'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n        (function(exports) {\n          'use strict';\n\n          var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\n          var PLUS = '+'.charCodeAt(0);\n          var SLASH = '/'.charCodeAt(0);\n          var NUMBER = '0'.charCodeAt(0);\n          var LOWER = 'a'.charCodeAt(0);\n          var UPPER = 'A'.charCodeAt(0);\n          var PLUS_URL_SAFE = '-'.charCodeAt(0);\n          var SLASH_URL_SAFE = '_'.charCodeAt(0);\n\n          function decode(elt) {\n            var code = elt.charCodeAt(0);\n            if (code === PLUS || code === PLUS_URL_SAFE) return 62; // '+'\n            if (code === SLASH || code === SLASH_URL_SAFE) return 63; // '/'\n            if (code < NUMBER) return -1; //no match\n            if (code < NUMBER + 10) return code - NUMBER + 26 + 26;\n            if (code < UPPER + 26) return code - UPPER;\n            if (code < LOWER + 26) return code - LOWER + 26;\n          }\n\n          function b64ToByteArray(b64) {\n            var i, j, l, tmp, placeHolders, arr;\n\n            if (b64.length % 4 > 0) {\n              throw new Error('Invalid string. Length must be a multiple of 4');\n            }\n\n            // the number of equal signs (place holders)\n            // if there are two placeholders, than the two characters before it\n            // represent one byte\n            // if there is only one, then the three characters before it represent 2 bytes\n            // this is just a cheap hack to not do indexOf twice\n            var len = b64.length;\n            placeHolders =\n              '=' === b64.charAt(len - 2)\n                ? 2\n                : '=' === b64.charAt(len - 1)\n                ? 1\n                : 0;\n\n            // base64 is 4/3 + up to two characters of the original data\n            arr = new Arr((b64.length * 3) / 4 - placeHolders);\n\n            // if there are placeholders, only get up to the last complete 4 chars\n            l = placeHolders > 0 ? b64.length - 4 : b64.length;\n\n            var L = 0;\n\n            function push(v) {\n              arr[L++] = v;\n            }\n\n            for (i = 0, j = 0; i < l; i += 4, j += 3) {\n              tmp =\n                (decode(b64.charAt(i)) << 18) |\n                (decode(b64.charAt(i + 1)) << 12) |\n                (decode(b64.charAt(i + 2)) << 6) |\n                decode(b64.charAt(i + 3));\n              push((tmp & 0xff0000) >> 16);\n              push((tmp & 0xff00) >> 8);\n              push(tmp & 0xff);\n            }\n\n            if (placeHolders === 2) {\n              tmp =\n                (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4);\n              push(tmp & 0xff);\n            } else if (placeHolders === 1) {\n              tmp =\n                (decode(b64.charAt(i)) << 10) |\n                (decode(b64.charAt(i + 1)) << 4) |\n                (decode(b64.charAt(i + 2)) >> 2);\n              push((tmp >> 8) & 0xff);\n              push(tmp & 0xff);\n            }\n\n            return arr;\n          }\n\n          function uint8ToBase64(uint8) {\n            var i,\n              extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n              output = '',\n              temp,\n              length;\n\n            function encode(num) {\n              return lookup.charAt(num);\n            }\n\n            function tripletToBase64(num) {\n              return (\n                encode((num >> 18) & 0x3f) +\n                encode((num >> 12) & 0x3f) +\n                encode((num >> 6) & 0x3f) +\n                encode(num & 0x3f)\n              );\n            }\n\n            // go through the array every three bytes, we'll deal with trailing stuff later\n            for (\n              i = 0, length = uint8.length - extraBytes;\n              i < length;\n              i += 3\n            ) {\n              temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2];\n              output += tripletToBase64(temp);\n            }\n\n            // pad the end with zeros, but make sure to not forget the extra bytes\n            switch (extraBytes) {\n              case 1:\n                temp = uint8[uint8.length - 1];\n                output += encode(temp >> 2);\n                output += encode((temp << 4) & 0x3f);\n                output += '==';\n                break;\n              case 2:\n                temp = (uint8[uint8.length - 2] << 8) + uint8[uint8.length - 1];\n                output += encode(temp >> 10);\n                output += encode((temp >> 4) & 0x3f);\n                output += encode((temp << 2) & 0x3f);\n                output += '=';\n                break;\n            }\n\n            return output;\n          }\n\n          exports.toByteArray = b64ToByteArray;\n          exports.fromByteArray = uint8ToBase64;\n        })(typeof exports === 'undefined' ? (this.base64js = {}) : exports);\n      },\n      {}\n    ],\n    45: [\n      function(require, module, exports) {\n        exports.read = function(buffer, offset, isLE, mLen, nBytes) {\n          var e, m;\n          var eLen = nBytes * 8 - mLen - 1;\n          var eMax = (1 << eLen) - 1;\n          var eBias = eMax >> 1;\n          var nBits = -7;\n          var i = isLE ? nBytes - 1 : 0;\n          var d = isLE ? -1 : 1;\n          var s = buffer[offset + i];\n\n          i += d;\n\n          e = s & ((1 << -nBits) - 1);\n          s >>= -nBits;\n          nBits += eLen;\n          for (\n            ;\n            nBits > 0;\n            e = e * 256 + buffer[offset + i], i += d, nBits -= 8\n          ) {}\n\n          m = e & ((1 << -nBits) - 1);\n          e >>= -nBits;\n          nBits += mLen;\n          for (\n            ;\n            nBits > 0;\n            m = m * 256 + buffer[offset + i], i += d, nBits -= 8\n          ) {}\n\n          if (e === 0) {\n            e = 1 - eBias;\n          } else if (e === eMax) {\n            return m ? NaN : (s ? -1 : 1) * Infinity;\n          } else {\n            m = m + Math.pow(2, mLen);\n            e = e - eBias;\n          }\n          return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n        };\n\n        exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {\n          var e, m, c;\n          var eLen = nBytes * 8 - mLen - 1;\n          var eMax = (1 << eLen) - 1;\n          var eBias = eMax >> 1;\n          var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n          var i = isLE ? 0 : nBytes - 1;\n          var d = isLE ? 1 : -1;\n          var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n          value = Math.abs(value);\n\n          if (isNaN(value) || value === Infinity) {\n            m = isNaN(value) ? 1 : 0;\n            e = eMax;\n          } else {\n            e = Math.floor(Math.log(value) / Math.LN2);\n            if (value * (c = Math.pow(2, -e)) < 1) {\n              e--;\n              c *= 2;\n            }\n            if (e + eBias >= 1) {\n              value += rt / c;\n            } else {\n              value += rt * Math.pow(2, 1 - eBias);\n            }\n            if (value * c >= 2) {\n              e++;\n              c /= 2;\n            }\n\n            if (e + eBias >= eMax) {\n              m = 0;\n              e = eMax;\n            } else if (e + eBias >= 1) {\n              m = (value * c - 1) * Math.pow(2, mLen);\n              e = e + eBias;\n            } else {\n              m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n              e = 0;\n            }\n          }\n\n          for (\n            ;\n            mLen >= 8;\n            buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8\n          ) {}\n\n          e = (e << mLen) | m;\n          eLen += mLen;\n          for (\n            ;\n            eLen > 0;\n            buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8\n          ) {}\n\n          buffer[offset + i - d] |= s * 128;\n        };\n      },\n      {}\n    ],\n    46: [\n      function(require, module, exports) {\n        /**\n         * isArray\n         */\n\n        var isArray = Array.isArray;\n\n        /**\n         * toString\n         */\n\n        var str = Object.prototype.toString;\n\n        /**\n         * Whether or not the given `val`\n         * is an array.\n         *\n         * example:\n         *\n         *        isArray([]);\n         *        // > true\n         *        isArray(arguments);\n         *        // > false\n         *        isArray('');\n         *        // > false\n         *\n         * @param {mixed} val\n         * @return {bool}\n         */\n\n        module.exports =\n          isArray ||\n          function(val) {\n            return !!val && '[object Array]' == str.call(val);\n          };\n      },\n      {}\n    ],\n    47: [\n      function(require, module, exports) {\n        // Copyright Joyent, Inc. and other Node contributors.\n        //\n        // Permission is hereby granted, free of charge, to any person obtaining a\n        // copy of this software and associated documentation files (the\n        // \"Software\"), to deal in the Software without restriction, including\n        // without limitation the rights to use, copy, modify, merge, publish,\n        // distribute, sublicense, and/or sell copies of the Software, and to permit\n        // persons to whom the Software is furnished to do so, subject to the\n        // following conditions:\n        //\n        // The above copyright notice and this permission notice shall be included\n        // in all copies or substantial portions of the Software.\n        //\n        // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n        // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n        // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n        // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n        // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n        // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n        // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n        function EventEmitter() {\n          this._events = this._events || {};\n          this._maxListeners = this._maxListeners || undefined;\n        }\n        module.exports = EventEmitter;\n\n        // Backwards-compat with node 0.10.x\n        EventEmitter.EventEmitter = EventEmitter;\n\n        EventEmitter.prototype._events = undefined;\n        EventEmitter.prototype._maxListeners = undefined;\n\n        // By default EventEmitters will print a warning if more than 10 listeners are\n        // added to it. This is a useful default which helps finding memory leaks.\n        EventEmitter.defaultMaxListeners = 10;\n\n        // Obviously not all Emitters should be limited to 10. This function allows\n        // that to be increased. Set to zero for unlimited.\n        EventEmitter.prototype.setMaxListeners = function(n) {\n          if (!isNumber(n) || n < 0 || isNaN(n))\n            throw TypeError('n must be a positive number');\n          this._maxListeners = n;\n          return this;\n        };\n\n        EventEmitter.prototype.emit = function(type) {\n          var er, handler, len, args, i, listeners;\n\n          if (!this._events) this._events = {};\n\n          // If there is no 'error' event listener then throw.\n          if (type === 'error') {\n            if (\n              !this._events.error ||\n              (isObject(this._events.error) && !this._events.error.length)\n            ) {\n              er = arguments[1];\n              if (er instanceof Error) {\n                throw er; // Unhandled 'error' event\n              }\n              throw TypeError('Uncaught, unspecified \"error\" event.');\n            }\n          }\n\n          handler = this._events[type];\n\n          if (isUndefined(handler)) return false;\n\n          if (isFunction(handler)) {\n            switch (arguments.length) {\n              // fast cases\n              case 1:\n                handler.call(this);\n                break;\n              case 2:\n                handler.call(this, arguments[1]);\n                break;\n              case 3:\n                handler.call(this, arguments[1], arguments[2]);\n                break;\n              // slower\n              default:\n                len = arguments.length;\n                args = new Array(len - 1);\n                for (i = 1; i < len; i++) args[i - 1] = arguments[i];\n                handler.apply(this, args);\n            }\n          } else if (isObject(handler)) {\n            len = arguments.length;\n            args = new Array(len - 1);\n            for (i = 1; i < len; i++) args[i - 1] = arguments[i];\n\n            listeners = handler.slice();\n            len = listeners.length;\n            for (i = 0; i < len; i++) listeners[i].apply(this, args);\n          }\n\n          return true;\n        };\n\n        EventEmitter.prototype.addListener = function(type, listener) {\n          var m;\n\n          if (!isFunction(listener))\n            throw TypeError('listener must be a function');\n\n          if (!this._events) this._events = {};\n\n          // To avoid recursion in the case that type === \"newListener\"! Before\n          // adding it to the listeners, first emit \"newListener\".\n          if (this._events.newListener)\n            this.emit(\n              'newListener',\n              type,\n              isFunction(listener.listener) ? listener.listener : listener\n            );\n\n          if (!this._events[type])\n            // Optimize the case of one listener. Don't need the extra array object.\n            this._events[type] = listener;\n          else if (isObject(this._events[type]))\n            // If we've already got an array, just append.\n            this._events[type].push(listener);\n          // Adding the second element, need to change to array.\n          else this._events[type] = [this._events[type], listener];\n\n          // Check for listener leak\n          if (isObject(this._events[type]) && !this._events[type].warned) {\n            var m;\n            if (!isUndefined(this._maxListeners)) {\n              m = this._maxListeners;\n            } else {\n              m = EventEmitter.defaultMaxListeners;\n            }\n\n            if (m && m > 0 && this._events[type].length > m) {\n              this._events[type].warned = true;\n              console.error(\n                '(node) warning: possible EventEmitter memory ' +\n                  'leak detected. %d listeners added. ' +\n                  'Use emitter.setMaxListeners() to increase limit.',\n                this._events[type].length\n              );\n              if (typeof console.trace === 'function') {\n                // not supported in IE 10\n                console.trace();\n              }\n            }\n          }\n\n          return this;\n        };\n\n        EventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\n        EventEmitter.prototype.once = function(type, listener) {\n          if (!isFunction(listener))\n            throw TypeError('listener must be a function');\n\n          var fired = false;\n\n          function g() {\n            this.removeListener(type, g);\n\n            if (!fired) {\n              fired = true;\n              listener.apply(this, arguments);\n            }\n          }\n\n          g.listener = listener;\n          this.on(type, g);\n\n          return this;\n        };\n\n        // emits a 'removeListener' event iff the listener was removed\n        EventEmitter.prototype.removeListener = function(type, listener) {\n          var list, position, length, i;\n\n          if (!isFunction(listener))\n            throw TypeError('listener must be a function');\n\n          if (!this._events || !this._events[type]) return this;\n\n          list = this._events[type];\n          length = list.length;\n          position = -1;\n\n          if (\n            list === listener ||\n            (isFunction(list.listener) && list.listener === listener)\n          ) {\n            delete this._events[type];\n            if (this._events.removeListener)\n              this.emit('removeListener', type, listener);\n          } else if (isObject(list)) {\n            for (i = length; i-- > 0; ) {\n              if (\n                list[i] === listener ||\n                (list[i].listener && list[i].listener === listener)\n              ) {\n                position = i;\n                break;\n              }\n            }\n\n            if (position < 0) return this;\n\n            if (list.length === 1) {\n              list.length = 0;\n              delete this._events[type];\n            } else {\n              list.splice(position, 1);\n            }\n\n            if (this._events.removeListener)\n              this.emit('removeListener', type, listener);\n          }\n\n          return this;\n        };\n\n        EventEmitter.prototype.removeAllListeners = function(type) {\n          var key, listeners;\n\n          if (!this._events) return this;\n\n          // not listening for removeListener, no need to emit\n          if (!this._events.removeListener) {\n            if (arguments.length === 0) this._events = {};\n            else if (this._events[type]) delete this._events[type];\n            return this;\n          }\n\n          // emit removeListener for all listeners on all events\n          if (arguments.length === 0) {\n            for (key in this._events) {\n              if (key === 'removeListener') continue;\n              this.removeAllListeners(key);\n            }\n            this.removeAllListeners('removeListener');\n            this._events = {};\n            return this;\n          }\n\n          listeners = this._events[type];\n\n          if (isFunction(listeners)) {\n            this.removeListener(type, listeners);\n          } else {\n            // LIFO order\n            while (listeners.length)\n              this.removeListener(type, listeners[listeners.length - 1]);\n          }\n          delete this._events[type];\n\n          return this;\n        };\n\n        EventEmitter.prototype.listeners = function(type) {\n          var ret;\n          if (!this._events || !this._events[type]) ret = [];\n          else if (isFunction(this._events[type])) ret = [this._events[type]];\n          else ret = this._events[type].slice();\n          return ret;\n        };\n\n        EventEmitter.listenerCount = function(emitter, type) {\n          var ret;\n          if (!emitter._events || !emitter._events[type]) ret = 0;\n          else if (isFunction(emitter._events[type])) ret = 1;\n          else ret = emitter._events[type].length;\n          return ret;\n        };\n\n        function isFunction(arg) {\n          return typeof arg === 'function';\n        }\n\n        function isNumber(arg) {\n          return typeof arg === 'number';\n        }\n\n        function isObject(arg) {\n          return typeof arg === 'object' && arg !== null;\n        }\n\n        function isUndefined(arg) {\n          return arg === void 0;\n        }\n      },\n      {}\n    ],\n    48: [\n      function(require, module, exports) {\n        if (typeof Object.create === 'function') {\n          // implementation from standard node.js 'util' module\n          module.exports = function inherits(ctor, superCtor) {\n            ctor.super_ = superCtor;\n            ctor.prototype = Object.create(superCtor.prototype, {\n              constructor: {\n                value: ctor,\n                enumerable: false,\n                writable: true,\n                configurable: true\n              }\n            });\n          };\n        } else {\n          // old school shim for old browsers\n          module.exports = function inherits(ctor, superCtor) {\n            ctor.super_ = superCtor;\n            var TempCtor = function() {};\n            TempCtor.prototype = superCtor.prototype;\n            ctor.prototype = new TempCtor();\n            ctor.prototype.constructor = ctor;\n          };\n        }\n      },\n      {}\n    ],\n    49: [\n      function(require, module, exports) {\n        module.exports =\n          Array.isArray ||\n          function(arr) {\n            return Object.prototype.toString.call(arr) == '[object Array]';\n          };\n      },\n      {}\n    ],\n    50: [\n      function(require, module, exports) {\n        exports.endianness = function() {\n          return 'LE';\n        };\n\n        exports.hostname = function() {\n          if (typeof location !== 'undefined') {\n            return location.hostname;\n          } else return '';\n        };\n\n        exports.loadavg = function() {\n          return [];\n        };\n\n        exports.uptime = function() {\n          return 0;\n        };\n\n        exports.freemem = function() {\n          return Number.MAX_VALUE;\n        };\n\n        exports.totalmem = function() {\n          return Number.MAX_VALUE;\n        };\n\n        exports.cpus = function() {\n          return [];\n        };\n\n        exports.type = function() {\n          return 'Browser';\n        };\n\n        exports.release = function() {\n          if (typeof navigator !== 'undefined') {\n            return navigator.appVersion;\n          }\n          return '';\n        };\n\n        exports.networkInterfaces = exports.getNetworkInterfaces = function() {\n          return {};\n        };\n\n        exports.arch = function() {\n          return 'javascript';\n        };\n\n        exports.platform = function() {\n          return 'browser';\n        };\n\n        exports.tmpdir = exports.tmpDir = function() {\n          return '/tmp';\n        };\n\n        exports.EOL = '\\n';\n      },\n      {}\n    ],\n    51: [\n      function(require, module, exports) {\n        // shim for using process in browser\n\n        var process = (module.exports = {});\n        var queue = [];\n        var draining = false;\n        var currentQueue;\n        var queueIndex = -1;\n\n        function cleanUpNextTick() {\n          draining = false;\n          if (currentQueue.length) {\n            queue = currentQueue.concat(queue);\n          } else {\n            queueIndex = -1;\n          }\n          if (queue.length) {\n            drainQueue();\n          }\n        }\n\n        function drainQueue() {\n          if (draining) {\n            return;\n          }\n          var timeout = setTimeout(cleanUpNextTick);\n          draining = true;\n\n          var len = queue.length;\n          while (len) {\n            currentQueue = queue;\n            queue = [];\n            while (++queueIndex < len) {\n              if (currentQueue) {\n                currentQueue[queueIndex].run();\n              }\n            }\n            queueIndex = -1;\n            len = queue.length;\n          }\n          currentQueue = null;\n          draining = false;\n          clearTimeout(timeout);\n        }\n\n        process.nextTick = function(fun) {\n          var args = new Array(arguments.length - 1);\n          if (arguments.length > 1) {\n            for (var i = 1; i < arguments.length; i++) {\n              args[i - 1] = arguments[i];\n            }\n          }\n          queue.push(new Item(fun, args));\n          if (queue.length === 1 && !draining) {\n            setTimeout(drainQueue, 0);\n          }\n        };\n\n        // v8 likes predictible objects\n        function Item(fun, array) {\n          this.fun = fun;\n          this.array = array;\n        }\n        Item.prototype.run = function() {\n          this.fun.apply(null, this.array);\n        };\n        process.title = 'browser';\n        process.browser = true;\n        process.env = {};\n        process.argv = [];\n        process.version = ''; // empty string to avoid regexp issues\n        process.versions = {};\n\n        function noop() {}\n\n        process.on = noop;\n        process.addListener = noop;\n        process.once = noop;\n        process.off = noop;\n        process.removeListener = noop;\n        process.removeAllListeners = noop;\n        process.emit = noop;\n\n        process.binding = function(name) {\n          throw new Error('process.binding is not supported');\n        };\n\n        process.cwd = function() {\n          return '/';\n        };\n        process.chdir = function(dir) {\n          throw new Error('process.chdir is not supported');\n        };\n        process.umask = function() {\n          return 0;\n        };\n      },\n      {}\n    ],\n    52: [\n      function(require, module, exports) {\n        module.exports = require('./lib/_stream_duplex.js');\n      },\n      { './lib/_stream_duplex.js': 53 }\n    ],\n    53: [\n      function(require, module, exports) {\n        (function(process) {\n          // Copyright Joyent, Inc. and other Node contributors.\n          //\n          // Permission is hereby granted, free of charge, to any person obtaining a\n          // copy of this software and associated documentation files (the\n          // \"Software\"), to deal in the Software without restriction, including\n          // without limitation the rights to use, copy, modify, merge, publish,\n          // distribute, sublicense, and/or sell copies of the Software, and to permit\n          // persons to whom the Software is furnished to do so, subject to the\n          // following conditions:\n          //\n          // The above copyright notice and this permission notice shall be included\n          // in all copies or substantial portions of the Software.\n          //\n          // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n          // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n          // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n          // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n          // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n          // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n          // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n          // a duplex stream is just a stream that is both readable and writable.\n          // Since JS doesn't have multiple prototypal inheritance, this class\n          // prototypally inherits from Readable, and then parasitically from\n          // Writable.\n\n          module.exports = Duplex;\n\n          /*<replacement>*/\n          var objectKeys =\n            Object.keys ||\n            function(obj) {\n              var keys = [];\n              for (var key in obj) keys.push(key);\n              return keys;\n            };\n          /*</replacement>*/\n\n          /*<replacement>*/\n          var util = require('core-util-is');\n          util.inherits = require('inherits');\n          /*</replacement>*/\n\n          var Readable = require('./_stream_readable');\n          var Writable = require('./_stream_writable');\n\n          util.inherits(Duplex, Readable);\n\n          forEach(objectKeys(Writable.prototype), function(method) {\n            if (!Duplex.prototype[method])\n              Duplex.prototype[method] = Writable.prototype[method];\n          });\n\n          function Duplex(options) {\n            if (!(this instanceof Duplex)) return new Duplex(options);\n\n            Readable.call(this, options);\n            Writable.call(this, options);\n\n            if (options && options.readable === false) this.readable = false;\n\n            if (options && options.writable === false) this.writable = false;\n\n            this.allowHalfOpen = true;\n            if (options && options.allowHalfOpen === false)\n              this.allowHalfOpen = false;\n\n            this.once('end', onend);\n          }\n\n          // the no-half-open enforcer\n          function onend() {\n            // if we allow half-open state, or if the writable side ended,\n            // then we're ok.\n            if (this.allowHalfOpen || this._writableState.ended) return;\n\n            // no more data can be written.\n            // But allow more writes to happen in this tick.\n            process.nextTick(this.end.bind(this));\n          }\n\n          function forEach(xs, f) {\n            for (var i = 0, l = xs.length; i < l; i++) {\n              f(xs[i], i);\n            }\n          }\n        }.call(this, require('_process')));\n      },\n      {\n        './_stream_readable': 55,\n        './_stream_writable': 57,\n        _process: 51,\n        'core-util-is': 58,\n        inherits: 48\n      }\n    ],\n    54: [\n      function(require, module, exports) {\n        // Copyright Joyent, Inc. and other Node contributors.\n        //\n        // Permission is hereby granted, free of charge, to any person obtaining a\n        // copy of this software and associated documentation files (the\n        // \"Software\"), to deal in the Software without restriction, including\n        // without limitation the rights to use, copy, modify, merge, publish,\n        // distribute, sublicense, and/or sell copies of the Software, and to permit\n        // persons to whom the Software is furnished to do so, subject to the\n        // following conditions:\n        //\n        // The above copyright notice and this permission notice shall be included\n        // in all copies or substantial portions of the Software.\n        //\n        // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n        // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n        // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n        // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n        // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n        // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n        // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n        // a passthrough stream.\n        // basically just the most minimal sort of Transform stream.\n        // Every written chunk gets output as-is.\n\n        module.exports = PassThrough;\n\n        var Transform = require('./_stream_transform');\n\n        /*<replacement>*/\n        var util = require('core-util-is');\n        util.inherits = require('inherits');\n        /*</replacement>*/\n\n        util.inherits(PassThrough, Transform);\n\n        function PassThrough(options) {\n          if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n          Transform.call(this, options);\n        }\n\n        PassThrough.prototype._transform = function(chunk, encoding, cb) {\n          cb(null, chunk);\n        };\n      },\n      { './_stream_transform': 56, 'core-util-is': 58, inherits: 48 }\n    ],\n    55: [\n      function(require, module, exports) {\n        (function(process) {\n          // Copyright Joyent, Inc. and other Node contributors.\n          //\n          // Permission is hereby granted, free of charge, to any person obtaining a\n          // copy of this software and associated documentation files (the\n          // \"Software\"), to deal in the Software without restriction, including\n          // without limitation the rights to use, copy, modify, merge, publish,\n          // distribute, sublicense, and/or sell copies of the Software, and to permit\n          // persons to whom the Software is furnished to do so, subject to the\n          // following conditions:\n          //\n          // The above copyright notice and this permission notice shall be included\n          // in all copies or substantial portions of the Software.\n          //\n          // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n          // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n          // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n          // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n          // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n          // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n          // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n          module.exports = Readable;\n\n          /*<replacement>*/\n          var isArray = require('isarray');\n          /*</replacement>*/\n\n          /*<replacement>*/\n          var Buffer = require('buffer').Buffer;\n          /*</replacement>*/\n\n          Readable.ReadableState = ReadableState;\n\n          var EE = require('events').EventEmitter;\n\n          /*<replacement>*/\n          if (!EE.listenerCount)\n            EE.listenerCount = function(emitter, type) {\n              return emitter.listeners(type).length;\n            };\n          /*</replacement>*/\n\n          var Stream = require('stream');\n\n          /*<replacement>*/\n          var util = require('core-util-is');\n          util.inherits = require('inherits');\n          /*</replacement>*/\n\n          var StringDecoder;\n\n          /*<replacement>*/\n          var debug = require('util');\n          if (debug && debug.debuglog) {\n            debug = debug.debuglog('stream');\n          } else {\n            debug = function() {};\n          }\n          /*</replacement>*/\n\n          util.inherits(Readable, Stream);\n\n          function ReadableState(options, stream) {\n            var Duplex = require('./_stream_duplex');\n\n            options = options || {};\n\n            // the point at which it stops calling _read() to fill the buffer\n            // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n            var hwm = options.highWaterMark;\n            var defaultHwm = options.objectMode ? 16 : 16 * 1024;\n            this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n            // cast to ints.\n            this.highWaterMark = ~~this.highWaterMark;\n\n            this.buffer = [];\n            this.length = 0;\n            this.pipes = null;\n            this.pipesCount = 0;\n            this.flowing = null;\n            this.ended = false;\n            this.endEmitted = false;\n            this.reading = false;\n\n            // a flag to be able to tell if the onwrite cb is called immediately,\n            // or on a later tick.  We set this to true at first, because any\n            // actions that shouldn't happen until \"later\" should generally also\n            // not happen before the first write call.\n            this.sync = true;\n\n            // whenever we return null, then we set a flag to say\n            // that we're awaiting a 'readable' event emission.\n            this.needReadable = false;\n            this.emittedReadable = false;\n            this.readableListening = false;\n\n            // object stream flag. Used to make read(n) ignore n and to\n            // make all the buffer merging and length checks go away\n            this.objectMode = !!options.objectMode;\n\n            if (stream instanceof Duplex)\n              this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n            // Crypto is kind of old and crusty.  Historically, its default string\n            // encoding is 'binary' so we have to make this configurable.\n            // Everything else in the universe uses 'utf8', though.\n            this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n            // when piping, we only care about 'readable' events that happen\n            // after read()ing all the bytes and not getting any pushback.\n            this.ranOut = false;\n\n            // the number of writers that are awaiting a drain event in .pipe()s\n            this.awaitDrain = 0;\n\n            // if true, a maybeReadMore has been scheduled\n            this.readingMore = false;\n\n            this.decoder = null;\n            this.encoding = null;\n            if (options.encoding) {\n              if (!StringDecoder)\n                StringDecoder = require('string_decoder/').StringDecoder;\n              this.decoder = new StringDecoder(options.encoding);\n              this.encoding = options.encoding;\n            }\n          }\n\n          function Readable(options) {\n            var Duplex = require('./_stream_duplex');\n\n            if (!(this instanceof Readable)) return new Readable(options);\n\n            this._readableState = new ReadableState(options, this);\n\n            // legacy\n            this.readable = true;\n\n            Stream.call(this);\n          }\n\n          // Manually shove something into the read() buffer.\n          // This returns true if the highWaterMark has not been hit yet,\n          // similar to how Writable.write() returns true if you should\n          // write() some more.\n          Readable.prototype.push = function(chunk, encoding) {\n            var state = this._readableState;\n\n            if (util.isString(chunk) && !state.objectMode) {\n              encoding = encoding || state.defaultEncoding;\n              if (encoding !== state.encoding) {\n                chunk = new Buffer(chunk, encoding);\n                encoding = '';\n              }\n            }\n\n            return readableAddChunk(this, state, chunk, encoding, false);\n          };\n\n          // Unshift should *always* be something directly out of read()\n          Readable.prototype.unshift = function(chunk) {\n            var state = this._readableState;\n            return readableAddChunk(this, state, chunk, '', true);\n          };\n\n          function readableAddChunk(\n            stream,\n            state,\n            chunk,\n            encoding,\n            addToFront\n          ) {\n            var er = chunkInvalid(state, chunk);\n            if (er) {\n              stream.emit('error', er);\n            } else if (util.isNullOrUndefined(chunk)) {\n              state.reading = false;\n              if (!state.ended) onEofChunk(stream, state);\n            } else if (state.objectMode || (chunk && chunk.length > 0)) {\n              if (state.ended && !addToFront) {\n                var e = new Error('stream.push() after EOF');\n                stream.emit('error', e);\n              } else if (state.endEmitted && addToFront) {\n                var e = new Error('stream.unshift() after end event');\n                stream.emit('error', e);\n              } else {\n                if (state.decoder && !addToFront && !encoding)\n                  chunk = state.decoder.write(chunk);\n\n                if (!addToFront) state.reading = false;\n\n                // if we want the data now, just emit it.\n                if (state.flowing && state.length === 0 && !state.sync) {\n                  stream.emit('data', chunk);\n                  stream.read(0);\n                } else {\n                  // update the buffer info.\n                  state.length += state.objectMode ? 1 : chunk.length;\n                  if (addToFront) state.buffer.unshift(chunk);\n                  else state.buffer.push(chunk);\n\n                  if (state.needReadable) emitReadable(stream);\n                }\n\n                maybeReadMore(stream, state);\n              }\n            } else if (!addToFront) {\n              state.reading = false;\n            }\n\n            return needMoreData(state);\n          }\n\n          // if it's past the high water mark, we can push in some more.\n          // Also, if we have no data yet, we can stand some\n          // more bytes.  This is to work around cases where hwm=0,\n          // such as the repl.  Also, if the push() triggered a\n          // readable event, and the user called read(largeNumber) such that\n          // needReadable was set, then we ought to push more, so that another\n          // 'readable' event will be triggered.\n          function needMoreData(state) {\n            return (\n              !state.ended &&\n              (state.needReadable ||\n                state.length < state.highWaterMark ||\n                state.length === 0)\n            );\n          }\n\n          // backwards compatibility.\n          Readable.prototype.setEncoding = function(enc) {\n            if (!StringDecoder)\n              StringDecoder = require('string_decoder/').StringDecoder;\n            this._readableState.decoder = new StringDecoder(enc);\n            this._readableState.encoding = enc;\n            return this;\n          };\n\n          // Don't raise the hwm > 128MB\n          var MAX_HWM = 0x800000;\n          function roundUpToNextPowerOf2(n) {\n            if (n >= MAX_HWM) {\n              n = MAX_HWM;\n            } else {\n              // Get the next highest power of 2\n              n--;\n              for (var p = 1; p < 32; p <<= 1) n |= n >> p;\n              n++;\n            }\n            return n;\n          }\n\n          function howMuchToRead(n, state) {\n            if (state.length === 0 && state.ended) return 0;\n\n            if (state.objectMode) return n === 0 ? 0 : 1;\n\n            if (isNaN(n) || util.isNull(n)) {\n              // only flow one buffer at a time\n              if (state.flowing && state.buffer.length)\n                return state.buffer[0].length;\n              else return state.length;\n            }\n\n            if (n <= 0) return 0;\n\n            // If we're asking for more than the target buffer level,\n            // then raise the water mark.  Bump up to the next highest\n            // power of 2, to prevent increasing it excessively in tiny\n            // amounts.\n            if (n > state.highWaterMark)\n              state.highWaterMark = roundUpToNextPowerOf2(n);\n\n            // don't have that much.  return null, unless we've ended.\n            if (n > state.length) {\n              if (!state.ended) {\n                state.needReadable = true;\n                return 0;\n              } else return state.length;\n            }\n\n            return n;\n          }\n\n          // you can override either this method, or the async _read(n) below.\n          Readable.prototype.read = function(n) {\n            debug('read', n);\n            var state = this._readableState;\n            var nOrig = n;\n\n            if (!util.isNumber(n) || n > 0) state.emittedReadable = false;\n\n            // if we're doing read(0) to trigger a readable event, but we\n            // already have a bunch of data in the buffer, then just trigger\n            // the 'readable' event and move on.\n            if (\n              n === 0 &&\n              state.needReadable &&\n              (state.length >= state.highWaterMark || state.ended)\n            ) {\n              debug('read: emitReadable', state.length, state.ended);\n              if (state.length === 0 && state.ended) endReadable(this);\n              else emitReadable(this);\n              return null;\n            }\n\n            n = howMuchToRead(n, state);\n\n            // if we've ended, and we're now clear, then finish it up.\n            if (n === 0 && state.ended) {\n              if (state.length === 0) endReadable(this);\n              return null;\n            }\n\n            // All the actual chunk generation logic needs to be\n            // *below* the call to _read.  The reason is that in certain\n            // synthetic stream cases, such as passthrough streams, _read\n            // may be a completely synchronous operation which may change\n            // the state of the read buffer, providing enough data when\n            // before there was *not* enough.\n            //\n            // So, the steps are:\n            // 1. Figure out what the state of things will be after we do\n            // a read from the buffer.\n            //\n            // 2. If that resulting state will trigger a _read, then call _read.\n            // Note that this may be asynchronous, or synchronous.  Yes, it is\n            // deeply ugly to write APIs this way, but that still doesn't mean\n            // that the Readable class should behave improperly, as streams are\n            // designed to be sync/async agnostic.\n            // Take note if the _read call is sync or async (ie, if the read call\n            // has returned yet), so that we know whether or not it's safe to emit\n            // 'readable' etc.\n            //\n            // 3. Actually pull the requested chunks out of the buffer and return.\n\n            // if we need a readable event, then we need to do some reading.\n            var doRead = state.needReadable;\n            debug('need readable', doRead);\n\n            // if we currently have less than the highWaterMark, then also read some\n            if (state.length === 0 || state.length - n < state.highWaterMark) {\n              doRead = true;\n              debug('length less than watermark', doRead);\n            }\n\n            // however, if we've ended, then there's no point, and if we're already\n            // reading, then it's unnecessary.\n            if (state.ended || state.reading) {\n              doRead = false;\n              debug('reading or ended', doRead);\n            }\n\n            if (doRead) {\n              debug('do read');\n              state.reading = true;\n              state.sync = true;\n              // if the length is currently zero, then we *need* a readable event.\n              if (state.length === 0) state.needReadable = true;\n              // call internal read method\n              this._read(state.highWaterMark);\n              state.sync = false;\n            }\n\n            // If _read pushed data synchronously, then `reading` will be false,\n            // and we need to re-evaluate how much data we can return to the user.\n            if (doRead && !state.reading) n = howMuchToRead(nOrig, state);\n\n            var ret;\n            if (n > 0) ret = fromList(n, state);\n            else ret = null;\n\n            if (util.isNull(ret)) {\n              state.needReadable = true;\n              n = 0;\n            }\n\n            state.length -= n;\n\n            // If we have nothing in the buffer, then we want to know\n            // as soon as we *do* get something into the buffer.\n            if (state.length === 0 && !state.ended) state.needReadable = true;\n\n            // If we tried to read() past the EOF, then emit end on the next tick.\n            if (nOrig !== n && state.ended && state.length === 0)\n              endReadable(this);\n\n            if (!util.isNull(ret)) this.emit('data', ret);\n\n            return ret;\n          };\n\n          function chunkInvalid(state, chunk) {\n            var er = null;\n            if (\n              !util.isBuffer(chunk) &&\n              !util.isString(chunk) &&\n              !util.isNullOrUndefined(chunk) &&\n              !state.objectMode\n            ) {\n              er = new TypeError('Invalid non-string/buffer chunk');\n            }\n            return er;\n          }\n\n          function onEofChunk(stream, state) {\n            if (state.decoder && !state.ended) {\n              var chunk = state.decoder.end();\n              if (chunk && chunk.length) {\n                state.buffer.push(chunk);\n                state.length += state.objectMode ? 1 : chunk.length;\n              }\n            }\n            state.ended = true;\n\n            // emit 'readable' now to make sure it gets picked up.\n            emitReadable(stream);\n          }\n\n          // Don't emit readable right away in sync mode, because this can trigger\n          // another read() call => stack overflow.  This way, it might trigger\n          // a nextTick recursion warning, but that's not so bad.\n          function emitReadable(stream) {\n            var state = stream._readableState;\n            state.needReadable = false;\n            if (!state.emittedReadable) {\n              debug('emitReadable', state.flowing);\n              state.emittedReadable = true;\n              if (state.sync)\n                process.nextTick(function() {\n                  emitReadable_(stream);\n                });\n              else emitReadable_(stream);\n            }\n          }\n\n          function emitReadable_(stream) {\n            debug('emit readable');\n            stream.emit('readable');\n            flow(stream);\n          }\n\n          // at this point, the user has presumably seen the 'readable' event,\n          // and called read() to consume some data.  that may have triggered\n          // in turn another _read(n) call, in which case reading = true if\n          // it's in progress.\n          // However, if we're not ended, or reading, and the length < hwm,\n          // then go ahead and try to read some more preemptively.\n          function maybeReadMore(stream, state) {\n            if (!state.readingMore) {\n              state.readingMore = true;\n              process.nextTick(function() {\n                maybeReadMore_(stream, state);\n              });\n            }\n          }\n\n          function maybeReadMore_(stream, state) {\n            var len = state.length;\n            while (\n              !state.reading &&\n              !state.flowing &&\n              !state.ended &&\n              state.length < state.highWaterMark\n            ) {\n              debug('maybeReadMore read 0');\n              stream.read(0);\n              if (len === state.length)\n                // didn't get any data, stop spinning.\n                break;\n              else len = state.length;\n            }\n            state.readingMore = false;\n          }\n\n          // abstract method.  to be overridden in specific implementation classes.\n          // call cb(er, data) where data is <= n in length.\n          // for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n          // arbitrary, and perhaps not very meaningful.\n          Readable.prototype._read = function(n) {\n            this.emit('error', new Error('not implemented'));\n          };\n\n          Readable.prototype.pipe = function(dest, pipeOpts) {\n            var src = this;\n            var state = this._readableState;\n\n            switch (state.pipesCount) {\n              case 0:\n                state.pipes = dest;\n                break;\n              case 1:\n                state.pipes = [state.pipes, dest];\n                break;\n              default:\n                state.pipes.push(dest);\n                break;\n            }\n            state.pipesCount += 1;\n            debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n            var doEnd =\n              (!pipeOpts || pipeOpts.end !== false) &&\n              dest !== process.stdout &&\n              dest !== process.stderr;\n\n            var endFn = doEnd ? onend : cleanup;\n            if (state.endEmitted) process.nextTick(endFn);\n            else src.once('end', endFn);\n\n            dest.on('unpipe', onunpipe);\n            function onunpipe(readable) {\n              debug('onunpipe');\n              if (readable === src) {\n                cleanup();\n              }\n            }\n\n            function onend() {\n              debug('onend');\n              dest.end();\n            }\n\n            // when the dest drains, it reduces the awaitDrain counter\n            // on the source.  This would be more elegant with a .once()\n            // handler in flow(), but adding and removing repeatedly is\n            // too slow.\n            var ondrain = pipeOnDrain(src);\n            dest.on('drain', ondrain);\n\n            function cleanup() {\n              debug('cleanup');\n              // cleanup event handlers once the pipe is broken\n              dest.removeListener('close', onclose);\n              dest.removeListener('finish', onfinish);\n              dest.removeListener('drain', ondrain);\n              dest.removeListener('error', onerror);\n              dest.removeListener('unpipe', onunpipe);\n              src.removeListener('end', onend);\n              src.removeListener('end', cleanup);\n              src.removeListener('data', ondata);\n\n              // if the reader is waiting for a drain event from this\n              // specific writer, then it would cause it to never start\n              // flowing again.\n              // So, if this is awaiting a drain, then we just call it now.\n              // If we don't know, then assume that we are waiting for one.\n              if (\n                state.awaitDrain &&\n                (!dest._writableState || dest._writableState.needDrain)\n              )\n                ondrain();\n            }\n\n            src.on('data', ondata);\n            function ondata(chunk) {\n              debug('ondata');\n              var ret = dest.write(chunk);\n              if (false === ret) {\n                debug(\n                  'false write response, pause',\n                  src._readableState.awaitDrain\n                );\n                src._readableState.awaitDrain++;\n                src.pause();\n              }\n            }\n\n            // if the dest has an error, then stop piping into it.\n            // however, don't suppress the throwing behavior for this.\n            function onerror(er) {\n              debug('onerror', er);\n              unpipe();\n              dest.removeListener('error', onerror);\n              if (EE.listenerCount(dest, 'error') === 0) dest.emit('error', er);\n            }\n            // This is a brutally ugly hack to make sure that our error handler\n            // is attached before any userland ones.  NEVER DO THIS.\n            if (!dest._events || !dest._events.error) dest.on('error', onerror);\n            else if (isArray(dest._events.error))\n              dest._events.error.unshift(onerror);\n            else dest._events.error = [onerror, dest._events.error];\n\n            // Both close and finish should trigger unpipe, but only once.\n            function onclose() {\n              dest.removeListener('finish', onfinish);\n              unpipe();\n            }\n            dest.once('close', onclose);\n            function onfinish() {\n              debug('onfinish');\n              dest.removeListener('close', onclose);\n              unpipe();\n            }\n            dest.once('finish', onfinish);\n\n            function unpipe() {\n              debug('unpipe');\n              src.unpipe(dest);\n            }\n\n            // tell the dest that it's being piped to\n            dest.emit('pipe', src);\n\n            // start the flow if it hasn't been started already.\n            if (!state.flowing) {\n              debug('pipe resume');\n              src.resume();\n            }\n\n            return dest;\n          };\n\n          function pipeOnDrain(src) {\n            return function() {\n              var state = src._readableState;\n              debug('pipeOnDrain', state.awaitDrain);\n              if (state.awaitDrain) state.awaitDrain--;\n              if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {\n                state.flowing = true;\n                flow(src);\n              }\n            };\n          }\n\n          Readable.prototype.unpipe = function(dest) {\n            var state = this._readableState;\n\n            // if we're not piping anywhere, then do nothing.\n            if (state.pipesCount === 0) return this;\n\n            // just one destination.  most common case.\n            if (state.pipesCount === 1) {\n              // passed in one, but it's not the right one.\n              if (dest && dest !== state.pipes) return this;\n\n              if (!dest) dest = state.pipes;\n\n              // got a match.\n              state.pipes = null;\n              state.pipesCount = 0;\n              state.flowing = false;\n              if (dest) dest.emit('unpipe', this);\n              return this;\n            }\n\n            // slow case. multiple pipe destinations.\n\n            if (!dest) {\n              // remove all.\n              var dests = state.pipes;\n              var len = state.pipesCount;\n              state.pipes = null;\n              state.pipesCount = 0;\n              state.flowing = false;\n\n              for (var i = 0; i < len; i++) dests[i].emit('unpipe', this);\n              return this;\n            }\n\n            // try to find the right one.\n            var i = indexOf(state.pipes, dest);\n            if (i === -1) return this;\n\n            state.pipes.splice(i, 1);\n            state.pipesCount -= 1;\n            if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n            dest.emit('unpipe', this);\n\n            return this;\n          };\n\n          // set up data events if they are asked for\n          // Ensure readable listeners eventually get something\n          Readable.prototype.on = function(ev, fn) {\n            var res = Stream.prototype.on.call(this, ev, fn);\n\n            // If listening to data, and it has not explicitly been paused,\n            // then call resume to start the flow of data on the next tick.\n            if (ev === 'data' && false !== this._readableState.flowing) {\n              this.resume();\n            }\n\n            if (ev === 'readable' && this.readable) {\n              var state = this._readableState;\n              if (!state.readableListening) {\n                state.readableListening = true;\n                state.emittedReadable = false;\n                state.needReadable = true;\n                if (!state.reading) {\n                  var self = this;\n                  process.nextTick(function() {\n                    debug('readable nexttick read 0');\n                    self.read(0);\n                  });\n                } else if (state.length) {\n                  emitReadable(this, state);\n                }\n              }\n            }\n\n            return res;\n          };\n          Readable.prototype.addListener = Readable.prototype.on;\n\n          // pause() and resume() are remnants of the legacy readable stream API\n          // If the user uses them, then switch into old mode.\n          Readable.prototype.resume = function() {\n            var state = this._readableState;\n            if (!state.flowing) {\n              debug('resume');\n              state.flowing = true;\n              if (!state.reading) {\n                debug('resume read 0');\n                this.read(0);\n              }\n              resume(this, state);\n            }\n            return this;\n          };\n\n          function resume(stream, state) {\n            if (!state.resumeScheduled) {\n              state.resumeScheduled = true;\n              process.nextTick(function() {\n                resume_(stream, state);\n              });\n            }\n          }\n\n          function resume_(stream, state) {\n            state.resumeScheduled = false;\n            stream.emit('resume');\n            flow(stream);\n            if (state.flowing && !state.reading) stream.read(0);\n          }\n\n          Readable.prototype.pause = function() {\n            debug('call pause flowing=%j', this._readableState.flowing);\n            if (false !== this._readableState.flowing) {\n              debug('pause');\n              this._readableState.flowing = false;\n              this.emit('pause');\n            }\n            return this;\n          };\n\n          function flow(stream) {\n            var state = stream._readableState;\n            debug('flow', state.flowing);\n            if (state.flowing) {\n              do {\n                var chunk = stream.read();\n              } while (null !== chunk && state.flowing);\n            }\n          }\n\n          // wrap an old-style stream as the async data source.\n          // This is *not* part of the readable stream interface.\n          // It is an ugly unfortunate mess of history.\n          Readable.prototype.wrap = function(stream) {\n            var state = this._readableState;\n            var paused = false;\n\n            var self = this;\n            stream.on('end', function() {\n              debug('wrapped end');\n              if (state.decoder && !state.ended) {\n                var chunk = state.decoder.end();\n                if (chunk && chunk.length) self.push(chunk);\n              }\n\n              self.push(null);\n            });\n\n            stream.on('data', function(chunk) {\n              debug('wrapped data');\n              if (state.decoder) chunk = state.decoder.write(chunk);\n              if (!chunk || (!state.objectMode && !chunk.length)) return;\n\n              var ret = self.push(chunk);\n              if (!ret) {\n                paused = true;\n                stream.pause();\n              }\n            });\n\n            // proxy all the other methods.\n            // important when wrapping filters and duplexes.\n            for (var i in stream) {\n              if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {\n                this[i] = (function(method) {\n                  return function() {\n                    return stream[method].apply(stream, arguments);\n                  };\n                })(i);\n              }\n            }\n\n            // proxy certain important events.\n            var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n            forEach(events, function(ev) {\n              stream.on(ev, self.emit.bind(self, ev));\n            });\n\n            // when we try to consume some more bytes, simply unpause the\n            // underlying stream.\n            self._read = function(n) {\n              debug('wrapped _read', n);\n              if (paused) {\n                paused = false;\n                stream.resume();\n              }\n            };\n\n            return self;\n          };\n\n          // exposed for testing purposes only.\n          Readable._fromList = fromList;\n\n          // Pluck off n bytes from an array of buffers.\n          // Length is the combined lengths of all the buffers in the list.\n          function fromList(n, state) {\n            var list = state.buffer;\n            var length = state.length;\n            var stringMode = !!state.decoder;\n            var objectMode = !!state.objectMode;\n            var ret;\n\n            // nothing in the list, definitely empty.\n            if (list.length === 0) return null;\n\n            if (length === 0) ret = null;\n            else if (objectMode) ret = list.shift();\n            else if (!n || n >= length) {\n              // read it all, truncate the array.\n              if (stringMode) ret = list.join('');\n              else ret = Buffer.concat(list, length);\n              list.length = 0;\n            } else {\n              // read just some of it.\n              if (n < list[0].length) {\n                // just take a part of the first list item.\n                // slice is the same for buffers and strings.\n                var buf = list[0];\n                ret = buf.slice(0, n);\n                list[0] = buf.slice(n);\n              } else if (n === list[0].length) {\n                // first list is a perfect match\n                ret = list.shift();\n              } else {\n                // complex case.\n                // we have enough to cover it, but it spans past the first buffer.\n                if (stringMode) ret = '';\n                else ret = new Buffer(n);\n\n                var c = 0;\n                for (var i = 0, l = list.length; i < l && c < n; i++) {\n                  var buf = list[0];\n                  var cpy = Math.min(n - c, buf.length);\n\n                  if (stringMode) ret += buf.slice(0, cpy);\n                  else buf.copy(ret, c, 0, cpy);\n\n                  if (cpy < buf.length) list[0] = buf.slice(cpy);\n                  else list.shift();\n\n                  c += cpy;\n                }\n              }\n            }\n\n            return ret;\n          }\n\n          function endReadable(stream) {\n            var state = stream._readableState;\n\n            // If we get here before consuming all the bytes, then that is a\n            // bug in node.  Should never happen.\n            if (state.length > 0)\n              throw new Error('endReadable called on non-empty stream');\n\n            if (!state.endEmitted) {\n              state.ended = true;\n              process.nextTick(function() {\n                // Check that we didn't get one last unshift.\n                if (!state.endEmitted && state.length === 0) {\n                  state.endEmitted = true;\n                  stream.readable = false;\n                  stream.emit('end');\n                }\n              });\n            }\n          }\n\n          function forEach(xs, f) {\n            for (var i = 0, l = xs.length; i < l; i++) {\n              f(xs[i], i);\n            }\n          }\n\n          function indexOf(xs, x) {\n            for (var i = 0, l = xs.length; i < l; i++) {\n              if (xs[i] === x) return i;\n            }\n            return -1;\n          }\n        }.call(this, require('_process')));\n      },\n      {\n        './_stream_duplex': 53,\n        _process: 51,\n        buffer: 43,\n        'core-util-is': 58,\n        events: 47,\n        inherits: 48,\n        isarray: 49,\n        stream: 63,\n        'string_decoder/': 64,\n        util: 42\n      }\n    ],\n    56: [\n      function(require, module, exports) {\n        // Copyright Joyent, Inc. and other Node contributors.\n        //\n        // Permission is hereby granted, free of charge, to any person obtaining a\n        // copy of this software and associated documentation files (the\n        // \"Software\"), to deal in the Software without restriction, including\n        // without limitation the rights to use, copy, modify, merge, publish,\n        // distribute, sublicense, and/or sell copies of the Software, and to permit\n        // persons to whom the Software is furnished to do so, subject to the\n        // following conditions:\n        //\n        // The above copyright notice and this permission notice shall be included\n        // in all copies or substantial portions of the Software.\n        //\n        // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n        // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n        // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n        // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n        // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n        // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n        // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n        // a transform stream is a readable/writable stream where you do\n        // something with the data.  Sometimes it's called a \"filter\",\n        // but that's not a great name for it, since that implies a thing where\n        // some bits pass through, and others are simply ignored.  (That would\n        // be a valid example of a transform, of course.)\n        //\n        // While the output is causally related to the input, it's not a\n        // necessarily symmetric or synchronous transformation.  For example,\n        // a zlib stream might take multiple plain-text writes(), and then\n        // emit a single compressed chunk some time in the future.\n        //\n        // Here's how this works:\n        //\n        // The Transform stream has all the aspects of the readable and writable\n        // stream classes.  When you write(chunk), that calls _write(chunk,cb)\n        // internally, and returns false if there's a lot of pending writes\n        // buffered up.  When you call read(), that calls _read(n) until\n        // there's enough pending readable data buffered up.\n        //\n        // In a transform stream, the written data is placed in a buffer.  When\n        // _read(n) is called, it transforms the queued up data, calling the\n        // buffered _write cb's as it consumes chunks.  If consuming a single\n        // written chunk would result in multiple output chunks, then the first\n        // outputted bit calls the readcb, and subsequent chunks just go into\n        // the read buffer, and will cause it to emit 'readable' if necessary.\n        //\n        // This way, back-pressure is actually determined by the reading side,\n        // since _read has to be called to start processing a new chunk.  However,\n        // a pathological inflate type of transform can cause excessive buffering\n        // here.  For example, imagine a stream where every byte of input is\n        // interpreted as an integer from 0-255, and then results in that many\n        // bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n        // 1kb of data being output.  In this case, you could write a very small\n        // amount of input, and end up with a very large amount of output.  In\n        // such a pathological inflating mechanism, there'd be no way to tell\n        // the system to stop doing the transform.  A single 4MB write could\n        // cause the system to run out of memory.\n        //\n        // However, even in such a pathological case, only a single written chunk\n        // would be consumed, and then the rest would wait (un-transformed) until\n        // the results of the previous transformed chunk were consumed.\n\n        module.exports = Transform;\n\n        var Duplex = require('./_stream_duplex');\n\n        /*<replacement>*/\n        var util = require('core-util-is');\n        util.inherits = require('inherits');\n        /*</replacement>*/\n\n        util.inherits(Transform, Duplex);\n\n        function TransformState(options, stream) {\n          this.afterTransform = function(er, data) {\n            return afterTransform(stream, er, data);\n          };\n\n          this.needTransform = false;\n          this.transforming = false;\n          this.writecb = null;\n          this.writechunk = null;\n        }\n\n        function afterTransform(stream, er, data) {\n          var ts = stream._transformState;\n          ts.transforming = false;\n\n          var cb = ts.writecb;\n\n          if (!cb)\n            return stream.emit(\n              'error',\n              new Error('no writecb in Transform class')\n            );\n\n          ts.writechunk = null;\n          ts.writecb = null;\n\n          if (!util.isNullOrUndefined(data)) stream.push(data);\n\n          if (cb) cb(er);\n\n          var rs = stream._readableState;\n          rs.reading = false;\n          if (rs.needReadable || rs.length < rs.highWaterMark) {\n            stream._read(rs.highWaterMark);\n          }\n        }\n\n        function Transform(options) {\n          if (!(this instanceof Transform)) return new Transform(options);\n\n          Duplex.call(this, options);\n\n          this._transformState = new TransformState(options, this);\n\n          // when the writable side finishes, then flush out anything remaining.\n          var stream = this;\n\n          // start out asking for a readable event once data is transformed.\n          this._readableState.needReadable = true;\n\n          // we have implemented the _read method, and done the other things\n          // that Readable wants before the first _read call, so unset the\n          // sync guard flag.\n          this._readableState.sync = false;\n\n          this.once('prefinish', function() {\n            if (util.isFunction(this._flush))\n              this._flush(function(er) {\n                done(stream, er);\n              });\n            else done(stream);\n          });\n        }\n\n        Transform.prototype.push = function(chunk, encoding) {\n          this._transformState.needTransform = false;\n          return Duplex.prototype.push.call(this, chunk, encoding);\n        };\n\n        // This is the part where you do stuff!\n        // override this function in implementation classes.\n        // 'chunk' is an input chunk.\n        //\n        // Call `push(newChunk)` to pass along transformed output\n        // to the readable side.  You may call 'push' zero or more times.\n        //\n        // Call `cb(err)` when you are done with this chunk.  If you pass\n        // an error, then that'll put the hurt on the whole operation.  If you\n        // never call cb(), then you'll never get another chunk.\n        Transform.prototype._transform = function(chunk, encoding, cb) {\n          throw new Error('not implemented');\n        };\n\n        Transform.prototype._write = function(chunk, encoding, cb) {\n          var ts = this._transformState;\n          ts.writecb = cb;\n          ts.writechunk = chunk;\n          ts.writeencoding = encoding;\n          if (!ts.transforming) {\n            var rs = this._readableState;\n            if (\n              ts.needTransform ||\n              rs.needReadable ||\n              rs.length < rs.highWaterMark\n            )\n              this._read(rs.highWaterMark);\n          }\n        };\n\n        // Doesn't matter what the args are here.\n        // _transform does all the work.\n        // That we got here means that the readable side wants more data.\n        Transform.prototype._read = function(n) {\n          var ts = this._transformState;\n\n          if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {\n            ts.transforming = true;\n            this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n          } else {\n            // mark that we need a transform, so that any data that comes in\n            // will get processed, now that we've asked for it.\n            ts.needTransform = true;\n          }\n        };\n\n        function done(stream, er) {\n          if (er) return stream.emit('error', er);\n\n          // if there's nothing in the write buffer, then that means\n          // that nothing more will ever be provided\n          var ws = stream._writableState;\n          var ts = stream._transformState;\n\n          if (ws.length)\n            throw new Error('calling transform done when ws.length != 0');\n\n          if (ts.transforming)\n            throw new Error('calling transform done when still transforming');\n\n          return stream.push(null);\n        }\n      },\n      { './_stream_duplex': 53, 'core-util-is': 58, inherits: 48 }\n    ],\n    57: [\n      function(require, module, exports) {\n        (function(process) {\n          // Copyright Joyent, Inc. and other Node contributors.\n          //\n          // Permission is hereby granted, free of charge, to any person obtaining a\n          // copy of this software and associated documentation files (the\n          // \"Software\"), to deal in the Software without restriction, including\n          // without limitation the rights to use, copy, modify, merge, publish,\n          // distribute, sublicense, and/or sell copies of the Software, and to permit\n          // persons to whom the Software is furnished to do so, subject to the\n          // following conditions:\n          //\n          // The above copyright notice and this permission notice shall be included\n          // in all copies or substantial portions of the Software.\n          //\n          // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n          // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n          // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n          // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n          // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n          // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n          // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n          // A bit simpler than readable streams.\n          // Implement an async ._write(chunk, cb), and it'll handle all\n          // the drain event emission and buffering.\n\n          module.exports = Writable;\n\n          /*<replacement>*/\n          var Buffer = require('buffer').Buffer;\n          /*</replacement>*/\n\n          Writable.WritableState = WritableState;\n\n          /*<replacement>*/\n          var util = require('core-util-is');\n          util.inherits = require('inherits');\n          /*</replacement>*/\n\n          var Stream = require('stream');\n\n          util.inherits(Writable, Stream);\n\n          function WriteReq(chunk, encoding, cb) {\n            this.chunk = chunk;\n            this.encoding = encoding;\n            this.callback = cb;\n          }\n\n          function WritableState(options, stream) {\n            var Duplex = require('./_stream_duplex');\n\n            options = options || {};\n\n            // the point at which write() starts returning false\n            // Note: 0 is a valid value, means that we always return false if\n            // the entire buffer is not flushed immediately on write()\n            var hwm = options.highWaterMark;\n            var defaultHwm = options.objectMode ? 16 : 16 * 1024;\n            this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n            // object stream flag to indicate whether or not this stream\n            // contains buffers or objects.\n            this.objectMode = !!options.objectMode;\n\n            if (stream instanceof Duplex)\n              this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n            // cast to ints.\n            this.highWaterMark = ~~this.highWaterMark;\n\n            this.needDrain = false;\n            // at the start of calling end()\n            this.ending = false;\n            // when end() has been called, and returned\n            this.ended = false;\n            // when 'finish' is emitted\n            this.finished = false;\n\n            // should we decode strings into buffers before passing to _write?\n            // this is here so that some node-core streams can optimize string\n            // handling at a lower level.\n            var noDecode = options.decodeStrings === false;\n            this.decodeStrings = !noDecode;\n\n            // Crypto is kind of old and crusty.  Historically, its default string\n            // encoding is 'binary' so we have to make this configurable.\n            // Everything else in the universe uses 'utf8', though.\n            this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n            // not an actual buffer we keep track of, but a measurement\n            // of how much we're waiting to get pushed to some underlying\n            // socket or file.\n            this.length = 0;\n\n            // a flag to see when we're in the middle of a write.\n            this.writing = false;\n\n            // when true all writes will be buffered until .uncork() call\n            this.corked = 0;\n\n            // a flag to be able to tell if the onwrite cb is called immediately,\n            // or on a later tick.  We set this to true at first, because any\n            // actions that shouldn't happen until \"later\" should generally also\n            // not happen before the first write call.\n            this.sync = true;\n\n            // a flag to know if we're processing previously buffered items, which\n            // may call the _write() callback in the same tick, so that we don't\n            // end up in an overlapped onwrite situation.\n            this.bufferProcessing = false;\n\n            // the callback that's passed to _write(chunk,cb)\n            this.onwrite = function(er) {\n              onwrite(stream, er);\n            };\n\n            // the callback that the user supplies to write(chunk,encoding,cb)\n            this.writecb = null;\n\n            // the amount that is being written when _write is called.\n            this.writelen = 0;\n\n            this.buffer = [];\n\n            // number of pending user-supplied write callbacks\n            // this must be 0 before 'finish' can be emitted\n            this.pendingcb = 0;\n\n            // emit prefinish if the only thing we're waiting for is _write cbs\n            // This is relevant for synchronous Transform streams\n            this.prefinished = false;\n\n            // True if the error was already emitted and should not be thrown again\n            this.errorEmitted = false;\n          }\n\n          function Writable(options) {\n            var Duplex = require('./_stream_duplex');\n\n            // Writable ctor is applied to Duplexes, though they're not\n            // instanceof Writable, they're instanceof Readable.\n            if (!(this instanceof Writable) && !(this instanceof Duplex))\n              return new Writable(options);\n\n            this._writableState = new WritableState(options, this);\n\n            // legacy.\n            this.writable = true;\n\n            Stream.call(this);\n          }\n\n          // Otherwise people can pipe Writable streams, which is just wrong.\n          Writable.prototype.pipe = function() {\n            this.emit('error', new Error('Cannot pipe. Not readable.'));\n          };\n\n          function writeAfterEnd(stream, state, cb) {\n            var er = new Error('write after end');\n            // TODO: defer error events consistently everywhere, not just the cb\n            stream.emit('error', er);\n            process.nextTick(function() {\n              cb(er);\n            });\n          }\n\n          // If we get something that is not a buffer, string, null, or undefined,\n          // and we're not in objectMode, then that's an error.\n          // Otherwise stream chunks are all considered to be of length=1, and the\n          // watermarks determine how many objects to keep in the buffer, rather than\n          // how many bytes or characters.\n          function validChunk(stream, state, chunk, cb) {\n            var valid = true;\n            if (\n              !util.isBuffer(chunk) &&\n              !util.isString(chunk) &&\n              !util.isNullOrUndefined(chunk) &&\n              !state.objectMode\n            ) {\n              var er = new TypeError('Invalid non-string/buffer chunk');\n              stream.emit('error', er);\n              process.nextTick(function() {\n                cb(er);\n              });\n              valid = false;\n            }\n            return valid;\n          }\n\n          Writable.prototype.write = function(chunk, encoding, cb) {\n            var state = this._writableState;\n            var ret = false;\n\n            if (util.isFunction(encoding)) {\n              cb = encoding;\n              encoding = null;\n            }\n\n            if (util.isBuffer(chunk)) encoding = 'buffer';\n            else if (!encoding) encoding = state.defaultEncoding;\n\n            if (!util.isFunction(cb)) cb = function() {};\n\n            if (state.ended) writeAfterEnd(this, state, cb);\n            else if (validChunk(this, state, chunk, cb)) {\n              state.pendingcb++;\n              ret = writeOrBuffer(this, state, chunk, encoding, cb);\n            }\n\n            return ret;\n          };\n\n          Writable.prototype.cork = function() {\n            var state = this._writableState;\n\n            state.corked++;\n          };\n\n          Writable.prototype.uncork = function() {\n            var state = this._writableState;\n\n            if (state.corked) {\n              state.corked--;\n\n              if (\n                !state.writing &&\n                !state.corked &&\n                !state.finished &&\n                !state.bufferProcessing &&\n                state.buffer.length\n              )\n                clearBuffer(this, state);\n            }\n          };\n\n          function decodeChunk(state, chunk, encoding) {\n            if (\n              !state.objectMode &&\n              state.decodeStrings !== false &&\n              util.isString(chunk)\n            ) {\n              chunk = new Buffer(chunk, encoding);\n            }\n            return chunk;\n          }\n\n          // if we're already writing something, then just put this\n          // in the queue, and wait our turn.  Otherwise, call _write\n          // If we return false, then we need a drain event, so set that flag.\n          function writeOrBuffer(stream, state, chunk, encoding, cb) {\n            chunk = decodeChunk(state, chunk, encoding);\n            if (util.isBuffer(chunk)) encoding = 'buffer';\n            var len = state.objectMode ? 1 : chunk.length;\n\n            state.length += len;\n\n            var ret = state.length < state.highWaterMark;\n            // we must ensure that previous needDrain will not be reset to false.\n            if (!ret) state.needDrain = true;\n\n            if (state.writing || state.corked)\n              state.buffer.push(new WriteReq(chunk, encoding, cb));\n            else doWrite(stream, state, false, len, chunk, encoding, cb);\n\n            return ret;\n          }\n\n          function doWrite(stream, state, writev, len, chunk, encoding, cb) {\n            state.writelen = len;\n            state.writecb = cb;\n            state.writing = true;\n            state.sync = true;\n            if (writev) stream._writev(chunk, state.onwrite);\n            else stream._write(chunk, encoding, state.onwrite);\n            state.sync = false;\n          }\n\n          function onwriteError(stream, state, sync, er, cb) {\n            if (sync)\n              process.nextTick(function() {\n                state.pendingcb--;\n                cb(er);\n              });\n            else {\n              state.pendingcb--;\n              cb(er);\n            }\n\n            stream._writableState.errorEmitted = true;\n            stream.emit('error', er);\n          }\n\n          function onwriteStateUpdate(state) {\n            state.writing = false;\n            state.writecb = null;\n            state.length -= state.writelen;\n            state.writelen = 0;\n          }\n\n          function onwrite(stream, er) {\n            var state = stream._writableState;\n            var sync = state.sync;\n            var cb = state.writecb;\n\n            onwriteStateUpdate(state);\n\n            if (er) onwriteError(stream, state, sync, er, cb);\n            else {\n              // Check if we're actually ready to finish, but don't emit yet\n              var finished = needFinish(stream, state);\n\n              if (\n                !finished &&\n                !state.corked &&\n                !state.bufferProcessing &&\n                state.buffer.length\n              ) {\n                clearBuffer(stream, state);\n              }\n\n              if (sync) {\n                process.nextTick(function() {\n                  afterWrite(stream, state, finished, cb);\n                });\n              } else {\n                afterWrite(stream, state, finished, cb);\n              }\n            }\n          }\n\n          function afterWrite(stream, state, finished, cb) {\n            if (!finished) onwriteDrain(stream, state);\n            state.pendingcb--;\n            cb();\n            finishMaybe(stream, state);\n          }\n\n          // Must force callback to be called on nextTick, so that we don't\n          // emit 'drain' before the write() consumer gets the 'false' return\n          // value, and has a chance to attach a 'drain' listener.\n          function onwriteDrain(stream, state) {\n            if (state.length === 0 && state.needDrain) {\n              state.needDrain = false;\n              stream.emit('drain');\n            }\n          }\n\n          // if there's something in the buffer waiting, then process it\n          function clearBuffer(stream, state) {\n            state.bufferProcessing = true;\n\n            if (stream._writev && state.buffer.length > 1) {\n              // Fast case, write everything using _writev()\n              var cbs = [];\n              for (var c = 0; c < state.buffer.length; c++)\n                cbs.push(state.buffer[c].callback);\n\n              // count the one we are adding, as well.\n              // TODO(isaacs) clean this up\n              state.pendingcb++;\n              doWrite(\n                stream,\n                state,\n                true,\n                state.length,\n                state.buffer,\n                '',\n                function(err) {\n                  for (var i = 0; i < cbs.length; i++) {\n                    state.pendingcb--;\n                    cbs[i](err);\n                  }\n                }\n              );\n\n              // Clear buffer\n              state.buffer = [];\n            } else {\n              // Slow case, write chunks one-by-one\n              for (var c = 0; c < state.buffer.length; c++) {\n                var entry = state.buffer[c];\n                var chunk = entry.chunk;\n                var encoding = entry.encoding;\n                var cb = entry.callback;\n                var len = state.objectMode ? 1 : chunk.length;\n\n                doWrite(stream, state, false, len, chunk, encoding, cb);\n\n                // if we didn't call the onwrite immediately, then\n                // it means that we need to wait until it does.\n                // also, that means that the chunk and cb are currently\n                // being processed, so move the buffer counter past them.\n                if (state.writing) {\n                  c++;\n                  break;\n                }\n              }\n\n              if (c < state.buffer.length) state.buffer = state.buffer.slice(c);\n              else state.buffer.length = 0;\n            }\n\n            state.bufferProcessing = false;\n          }\n\n          Writable.prototype._write = function(chunk, encoding, cb) {\n            cb(new Error('not implemented'));\n          };\n\n          Writable.prototype._writev = null;\n\n          Writable.prototype.end = function(chunk, encoding, cb) {\n            var state = this._writableState;\n\n            if (util.isFunction(chunk)) {\n              cb = chunk;\n              chunk = null;\n              encoding = null;\n            } else if (util.isFunction(encoding)) {\n              cb = encoding;\n              encoding = null;\n            }\n\n            if (!util.isNullOrUndefined(chunk)) this.write(chunk, encoding);\n\n            // .end() fully uncorks\n            if (state.corked) {\n              state.corked = 1;\n              this.uncork();\n            }\n\n            // ignore unnecessary end() calls.\n            if (!state.ending && !state.finished) endWritable(this, state, cb);\n          };\n\n          function needFinish(stream, state) {\n            return (\n              state.ending &&\n              state.length === 0 &&\n              !state.finished &&\n              !state.writing\n            );\n          }\n\n          function prefinish(stream, state) {\n            if (!state.prefinished) {\n              state.prefinished = true;\n              stream.emit('prefinish');\n            }\n          }\n\n          function finishMaybe(stream, state) {\n            var need = needFinish(stream, state);\n            if (need) {\n              if (state.pendingcb === 0) {\n                prefinish(stream, state);\n                state.finished = true;\n                stream.emit('finish');\n              } else prefinish(stream, state);\n            }\n            return need;\n          }\n\n          function endWritable(stream, state, cb) {\n            state.ending = true;\n            finishMaybe(stream, state);\n            if (cb) {\n              if (state.finished) process.nextTick(cb);\n              else stream.once('finish', cb);\n            }\n            state.ended = true;\n          }\n        }.call(this, require('_process')));\n      },\n      {\n        './_stream_duplex': 53,\n        _process: 51,\n        buffer: 43,\n        'core-util-is': 58,\n        inherits: 48,\n        stream: 63\n      }\n    ],\n    58: [\n      function(require, module, exports) {\n        (function(Buffer) {\n          // Copyright Joyent, Inc. and other Node contributors.\n          //\n          // Permission is hereby granted, free of charge, to any person obtaining a\n          // copy of this software and associated documentation files (the\n          // \"Software\"), to deal in the Software without restriction, including\n          // without limitation the rights to use, copy, modify, merge, publish,\n          // distribute, sublicense, and/or sell copies of the Software, and to permit\n          // persons to whom the Software is furnished to do so, subject to the\n          // following conditions:\n          //\n          // The above copyright notice and this permission notice shall be included\n          // in all copies or substantial portions of the Software.\n          //\n          // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n          // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n          // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n          // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n          // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n          // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n          // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n          // NOTE: These type checking functions intentionally don't use `instanceof`\n          // because it is fragile and can be easily faked with `Object.create()`.\n          function isArray(ar) {\n            return Array.isArray(ar);\n          }\n          exports.isArray = isArray;\n\n          function isBoolean(arg) {\n            return typeof arg === 'boolean';\n          }\n          exports.isBoolean = isBoolean;\n\n          function isNull(arg) {\n            return arg === null;\n          }\n          exports.isNull = isNull;\n\n          function isNullOrUndefined(arg) {\n            return arg == null;\n          }\n          exports.isNullOrUndefined = isNullOrUndefined;\n\n          function isNumber(arg) {\n            return typeof arg === 'number';\n          }\n          exports.isNumber = isNumber;\n\n          function isString(arg) {\n            return typeof arg === 'string';\n          }\n          exports.isString = isString;\n\n          function isSymbol(arg) {\n            return typeof arg === 'symbol';\n          }\n          exports.isSymbol = isSymbol;\n\n          function isUndefined(arg) {\n            return arg === void 0;\n          }\n          exports.isUndefined = isUndefined;\n\n          function isRegExp(re) {\n            return isObject(re) && objectToString(re) === '[object RegExp]';\n          }\n          exports.isRegExp = isRegExp;\n\n          function isObject(arg) {\n            return typeof arg === 'object' && arg !== null;\n          }\n          exports.isObject = isObject;\n\n          function isDate(d) {\n            return isObject(d) && objectToString(d) === '[object Date]';\n          }\n          exports.isDate = isDate;\n\n          function isError(e) {\n            return (\n              isObject(e) &&\n              (objectToString(e) === '[object Error]' || e instanceof Error)\n            );\n          }\n          exports.isError = isError;\n\n          function isFunction(arg) {\n            return typeof arg === 'function';\n          }\n          exports.isFunction = isFunction;\n\n          function isPrimitive(arg) {\n            return (\n              arg === null ||\n              typeof arg === 'boolean' ||\n              typeof arg === 'number' ||\n              typeof arg === 'string' ||\n              typeof arg === 'symbol' || // ES6 symbol\n              typeof arg === 'undefined'\n            );\n          }\n          exports.isPrimitive = isPrimitive;\n\n          function isBuffer(arg) {\n            return Buffer.isBuffer(arg);\n          }\n          exports.isBuffer = isBuffer;\n\n          function objectToString(o) {\n            return Object.prototype.toString.call(o);\n          }\n        }.call(this, require('buffer').Buffer));\n      },\n      { buffer: 43 }\n    ],\n    59: [\n      function(require, module, exports) {\n        module.exports = require('./lib/_stream_passthrough.js');\n      },\n      { './lib/_stream_passthrough.js': 54 }\n    ],\n    60: [\n      function(require, module, exports) {\n        exports = module.exports = require('./lib/_stream_readable.js');\n        exports.Stream = require('stream');\n        exports.Readable = exports;\n        exports.Writable = require('./lib/_stream_writable.js');\n        exports.Duplex = require('./lib/_stream_duplex.js');\n        exports.Transform = require('./lib/_stream_transform.js');\n        exports.PassThrough = require('./lib/_stream_passthrough.js');\n      },\n      {\n        './lib/_stream_duplex.js': 53,\n        './lib/_stream_passthrough.js': 54,\n        './lib/_stream_readable.js': 55,\n        './lib/_stream_transform.js': 56,\n        './lib/_stream_writable.js': 57,\n        stream: 63\n      }\n    ],\n    61: [\n      function(require, module, exports) {\n        module.exports = require('./lib/_stream_transform.js');\n      },\n      { './lib/_stream_transform.js': 56 }\n    ],\n    62: [\n      function(require, module, exports) {\n        module.exports = require('./lib/_stream_writable.js');\n      },\n      { './lib/_stream_writable.js': 57 }\n    ],\n    63: [\n      function(require, module, exports) {\n        // Copyright Joyent, Inc. and other Node contributors.\n        //\n        // Permission is hereby granted, free of charge, to any person obtaining a\n        // copy of this software and associated documentation files (the\n        // \"Software\"), to deal in the Software without restriction, including\n        // without limitation the rights to use, copy, modify, merge, publish,\n        // distribute, sublicense, and/or sell copies of the Software, and to permit\n        // persons to whom the Software is furnished to do so, subject to the\n        // following conditions:\n        //\n        // The above copyright notice and this permission notice shall be included\n        // in all copies or substantial portions of the Software.\n        //\n        // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n        // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n        // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n        // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n        // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n        // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n        // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n        module.exports = Stream;\n\n        var EE = require('events').EventEmitter;\n        var inherits = require('inherits');\n\n        inherits(Stream, EE);\n        Stream.Readable = require('readable-stream/readable.js');\n        Stream.Writable = require('readable-stream/writable.js');\n        Stream.Duplex = require('readable-stream/duplex.js');\n        Stream.Transform = require('readable-stream/transform.js');\n        Stream.PassThrough = require('readable-stream/passthrough.js');\n\n        // Backwards-compat with node 0.4.x\n        Stream.Stream = Stream;\n\n        // old-style streams.  Note that the pipe method (the only relevant\n        // part of this class) is overridden in the Readable class.\n\n        function Stream() {\n          EE.call(this);\n        }\n\n        Stream.prototype.pipe = function(dest, options) {\n          var source = this;\n\n          function ondata(chunk) {\n            if (dest.writable) {\n              if (false === dest.write(chunk) && source.pause) {\n                source.pause();\n              }\n            }\n          }\n\n          source.on('data', ondata);\n\n          function ondrain() {\n            if (source.readable && source.resume) {\n              source.resume();\n            }\n          }\n\n          dest.on('drain', ondrain);\n\n          // If the 'end' option is not supplied, dest.end() will be called when\n          // source gets the 'end' or 'close' events.  Only dest.end() once.\n          if (!dest._isStdio && (!options || options.end !== false)) {\n            source.on('end', onend);\n            source.on('close', onclose);\n          }\n\n          var didOnEnd = false;\n          function onend() {\n            if (didOnEnd) return;\n            didOnEnd = true;\n\n            dest.end();\n          }\n\n          function onclose() {\n            if (didOnEnd) return;\n            didOnEnd = true;\n\n            if (typeof dest.destroy === 'function') dest.destroy();\n          }\n\n          // don't leave dangling pipes when there are errors.\n          function onerror(er) {\n            cleanup();\n            if (EE.listenerCount(this, 'error') === 0) {\n              throw er; // Unhandled stream error in pipe.\n            }\n          }\n\n          source.on('error', onerror);\n          dest.on('error', onerror);\n\n          // remove all the event listeners that were added.\n          function cleanup() {\n            source.removeListener('data', ondata);\n            dest.removeListener('drain', ondrain);\n\n            source.removeListener('end', onend);\n            source.removeListener('close', onclose);\n\n            source.removeListener('error', onerror);\n            dest.removeListener('error', onerror);\n\n            source.removeListener('end', cleanup);\n            source.removeListener('close', cleanup);\n\n            dest.removeListener('close', cleanup);\n          }\n\n          source.on('end', cleanup);\n          source.on('close', cleanup);\n\n          dest.on('close', cleanup);\n\n          dest.emit('pipe', source);\n\n          // Allow for unix-like usage: A.pipe(B).pipe(C)\n          return dest;\n        };\n      },\n      {\n        events: 47,\n        inherits: 48,\n        'readable-stream/duplex.js': 52,\n        'readable-stream/passthrough.js': 59,\n        'readable-stream/readable.js': 60,\n        'readable-stream/transform.js': 61,\n        'readable-stream/writable.js': 62\n      }\n    ],\n    64: [\n      function(require, module, exports) {\n        // Copyright Joyent, Inc. and other Node contributors.\n        //\n        // Permission is hereby granted, free of charge, to any person obtaining a\n        // copy of this software and associated documentation files (the\n        // \"Software\"), to deal in the Software without restriction, including\n        // without limitation the rights to use, copy, modify, merge, publish,\n        // distribute, sublicense, and/or sell copies of the Software, and to permit\n        // persons to whom the Software is furnished to do so, subject to the\n        // following conditions:\n        //\n        // The above copyright notice and this permission notice shall be included\n        // in all copies or substantial portions of the Software.\n        //\n        // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n        // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n        // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n        // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n        // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n        // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n        // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n        var Buffer = require('buffer').Buffer;\n\n        var isBufferEncoding =\n          Buffer.isEncoding ||\n          function(encoding) {\n            switch (encoding && encoding.toLowerCase()) {\n              case 'hex':\n              case 'utf8':\n              case 'utf-8':\n              case 'ascii':\n              case 'binary':\n              case 'base64':\n              case 'ucs2':\n              case 'ucs-2':\n              case 'utf16le':\n              case 'utf-16le':\n              case 'raw':\n                return true;\n              default:\n                return false;\n            }\n          };\n\n        function assertEncoding(encoding) {\n          if (encoding && !isBufferEncoding(encoding)) {\n            throw new Error('Unknown encoding: ' + encoding);\n          }\n        }\n\n        // StringDecoder provides an interface for efficiently splitting a series of\n        // buffers into a series of JS strings without breaking apart multi-byte\n        // characters. CESU-8 is handled as part of the UTF-8 encoding.\n        //\n        // @TODO Handling all encodings inside a single object makes it very difficult\n        // to reason about this code, so it should be split up in the future.\n        // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n        // points as used by CESU-8.\n        var StringDecoder = (exports.StringDecoder = function(encoding) {\n          this.encoding = (encoding || 'utf8')\n            .toLowerCase()\n            .replace(/[-_]/, '');\n          assertEncoding(encoding);\n          switch (this.encoding) {\n            case 'utf8':\n              // CESU-8 represents each of Surrogate Pair by 3-bytes\n              this.surrogateSize = 3;\n              break;\n            case 'ucs2':\n            case 'utf16le':\n              // UTF-16 represents each of Surrogate Pair by 2-bytes\n              this.surrogateSize = 2;\n              this.detectIncompleteChar = utf16DetectIncompleteChar;\n              break;\n            case 'base64':\n              // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n              this.surrogateSize = 3;\n              this.detectIncompleteChar = base64DetectIncompleteChar;\n              break;\n            default:\n              this.write = passThroughWrite;\n              return;\n          }\n\n          // Enough space to store all bytes of a single character. UTF-8 needs 4\n          // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n          this.charBuffer = new Buffer(6);\n          // Number of bytes received for the current incomplete multi-byte character.\n          this.charReceived = 0;\n          // Number of bytes expected for the current incomplete multi-byte character.\n          this.charLength = 0;\n        });\n\n        // write decodes the given buffer and returns it as JS string that is\n        // guaranteed to not contain any partial multi-byte characters. Any partial\n        // character found at the end of the buffer is buffered up, and will be\n        // returned when calling write again with the remaining bytes.\n        //\n        // Note: Converting a Buffer containing an orphan surrogate to a String\n        // currently works, but converting a String to a Buffer (via `new Buffer`, or\n        // Buffer#write) will replace incomplete surrogates with the unicode\n        // replacement character. See https://codereview.chromium.org/121173009/ .\n        StringDecoder.prototype.write = function(buffer) {\n          var charStr = '';\n          // if our last write ended with an incomplete multibyte character\n          while (this.charLength) {\n            // determine how many remaining bytes this buffer has to offer for this char\n            var available =\n              buffer.length >= this.charLength - this.charReceived\n                ? this.charLength - this.charReceived\n                : buffer.length;\n\n            // add the new bytes to the char buffer\n            buffer.copy(this.charBuffer, this.charReceived, 0, available);\n            this.charReceived += available;\n\n            if (this.charReceived < this.charLength) {\n              // still not enough chars in this buffer? wait for more ...\n              return '';\n            }\n\n            // remove bytes belonging to the current character from the buffer\n            buffer = buffer.slice(available, buffer.length);\n\n            // get the character that was split\n            charStr = this.charBuffer\n              .slice(0, this.charLength)\n              .toString(this.encoding);\n\n            // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n            var charCode = charStr.charCodeAt(charStr.length - 1);\n            if (charCode >= 0xd800 && charCode <= 0xdbff) {\n              this.charLength += this.surrogateSize;\n              charStr = '';\n              continue;\n            }\n            this.charReceived = this.charLength = 0;\n\n            // if there are no more bytes in this buffer, just emit our char\n            if (buffer.length === 0) {\n              return charStr;\n            }\n            break;\n          }\n\n          // determine and set charLength / charReceived\n          this.detectIncompleteChar(buffer);\n\n          var end = buffer.length;\n          if (this.charLength) {\n            // buffer the incomplete character bytes we got\n            buffer.copy(\n              this.charBuffer,\n              0,\n              buffer.length - this.charReceived,\n              end\n            );\n            end -= this.charReceived;\n          }\n\n          charStr += buffer.toString(this.encoding, 0, end);\n\n          var end = charStr.length - 1;\n          var charCode = charStr.charCodeAt(end);\n          // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n          if (charCode >= 0xd800 && charCode <= 0xdbff) {\n            var size = this.surrogateSize;\n            this.charLength += size;\n            this.charReceived += size;\n            this.charBuffer.copy(this.charBuffer, size, 0, size);\n            buffer.copy(this.charBuffer, 0, 0, size);\n            return charStr.substring(0, end);\n          }\n\n          // or just emit the charStr\n          return charStr;\n        };\n\n        // detectIncompleteChar determines if there is an incomplete UTF-8 character at\n        // the end of the given buffer. If so, it sets this.charLength to the byte\n        // length that character, and sets this.charReceived to the number of bytes\n        // that are available for this character.\n        StringDecoder.prototype.detectIncompleteChar = function(buffer) {\n          // determine how many bytes we have to check at the end of this buffer\n          var i = buffer.length >= 3 ? 3 : buffer.length;\n\n          // Figure out if one of the last i bytes of our buffer announces an\n          // incomplete char.\n          for (; i > 0; i--) {\n            var c = buffer[buffer.length - i];\n\n            // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n            // 110XXXXX\n            if (i == 1 && c >> 5 == 0x06) {\n              this.charLength = 2;\n              break;\n            }\n\n            // 1110XXXX\n            if (i <= 2 && c >> 4 == 0x0e) {\n              this.charLength = 3;\n              break;\n            }\n\n            // 11110XXX\n            if (i <= 3 && c >> 3 == 0x1e) {\n              this.charLength = 4;\n              break;\n            }\n          }\n          this.charReceived = i;\n        };\n\n        StringDecoder.prototype.end = function(buffer) {\n          var res = '';\n          if (buffer && buffer.length) res = this.write(buffer);\n\n          if (this.charReceived) {\n            var cr = this.charReceived;\n            var buf = this.charBuffer;\n            var enc = this.encoding;\n            res += buf.slice(0, cr).toString(enc);\n          }\n\n          return res;\n        };\n\n        function passThroughWrite(buffer) {\n          return buffer.toString(this.encoding);\n        }\n\n        function utf16DetectIncompleteChar(buffer) {\n          this.charReceived = buffer.length % 2;\n          this.charLength = this.charReceived ? 2 : 0;\n        }\n\n        function base64DetectIncompleteChar(buffer) {\n          this.charReceived = buffer.length % 3;\n          this.charLength = this.charReceived ? 3 : 0;\n        }\n      },\n      { buffer: 43 }\n    ],\n    65: [\n      function(require, module, exports) {\n        module.exports = function isBuffer(arg) {\n          return (\n            arg &&\n            typeof arg === 'object' &&\n            typeof arg.copy === 'function' &&\n            typeof arg.fill === 'function' &&\n            typeof arg.readUInt8 === 'function'\n          );\n        };\n      },\n      {}\n    ],\n    66: [\n      function(require, module, exports) {\n        (function(process, global) {\n          // Copyright Joyent, Inc. and other Node contributors.\n          //\n          // Permission is hereby granted, free of charge, to any person obtaining a\n          // copy of this software and associated documentation files (the\n          // \"Software\"), to deal in the Software without restriction, including\n          // without limitation the rights to use, copy, modify, merge, publish,\n          // distribute, sublicense, and/or sell copies of the Software, and to permit\n          // persons to whom the Software is furnished to do so, subject to the\n          // following conditions:\n          //\n          // The above copyright notice and this permission notice shall be included\n          // in all copies or substantial portions of the Software.\n          //\n          // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n          // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n          // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n          // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n          // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n          // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n          // USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n          var formatRegExp = /%[sdj%]/g;\n          exports.format = function(f) {\n            if (!isString(f)) {\n              var objects = [];\n              for (var i = 0; i < arguments.length; i++) {\n                objects.push(inspect(arguments[i]));\n              }\n              return objects.join(' ');\n            }\n\n            var i = 1;\n            var args = arguments;\n            var len = args.length;\n            var str = String(f).replace(formatRegExp, function(x) {\n              if (x === '%%') return '%';\n              if (i >= len) return x;\n              switch (x) {\n                case '%s':\n                  return String(args[i++]);\n                case '%d':\n                  return Number(args[i++]);\n                case '%j':\n                  try {\n                    return JSON.stringify(args[i++]);\n                  } catch (_) {\n                    return '[Circular]';\n                  }\n                default:\n                  return x;\n              }\n            });\n            for (var x = args[i]; i < len; x = args[++i]) {\n              if (isNull(x) || !isObject(x)) {\n                str += ' ' + x;\n              } else {\n                str += ' ' + inspect(x);\n              }\n            }\n            return str;\n          };\n\n          // Mark that a method should not be used.\n          // Returns a modified function which warns once by default.\n          // If --no-deprecation is set, then it is a no-op.\n          exports.deprecate = function(fn, msg) {\n            // Allow for deprecating things in the process of starting up.\n            if (isUndefined(global.process)) {\n              return function() {\n                return exports.deprecate(fn, msg).apply(this, arguments);\n              };\n            }\n\n            if (process.noDeprecation === true) {\n              return fn;\n            }\n\n            var warned = false;\n            function deprecated() {\n              if (!warned) {\n                if (process.throwDeprecation) {\n                  throw new Error(msg);\n                } else if (process.traceDeprecation) {\n                  console.trace(msg);\n                } else {\n                  console.error(msg);\n                }\n                warned = true;\n              }\n              return fn.apply(this, arguments);\n            }\n\n            return deprecated;\n          };\n\n          var debugs = {};\n          var debugEnviron;\n          exports.debuglog = function(set) {\n            if (isUndefined(debugEnviron))\n              debugEnviron = process.env.NODE_DEBUG || '';\n            set = set.toUpperCase();\n            if (!debugs[set]) {\n              if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n                var pid = process.pid;\n                debugs[set] = function() {\n                  var msg = exports.format.apply(exports, arguments);\n                  console.error('%s %d: %s', set, pid, msg);\n                };\n              } else {\n                debugs[set] = function() {};\n              }\n            }\n            return debugs[set];\n          };\n\n          /**\n           * Echos the value of a value. Trys to print the value out\n           * in the best way possible given the different types.\n           *\n           * @param {Object} obj The object to print out.\n           * @param {Object} opts Optional options object that alters the output.\n           */\n          /* legacy: obj, showHidden, depth, colors*/\n          function inspect(obj, opts) {\n            // default options\n            var ctx = {\n              seen: [],\n              stylize: stylizeNoColor\n            };\n            // legacy...\n            if (arguments.length >= 3) ctx.depth = arguments[2];\n            if (arguments.length >= 4) ctx.colors = arguments[3];\n            if (isBoolean(opts)) {\n              // legacy...\n              ctx.showHidden = opts;\n            } else if (opts) {\n              // got an \"options\" object\n              exports._extend(ctx, opts);\n            }\n            // set default options\n            if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n            if (isUndefined(ctx.depth)) ctx.depth = 2;\n            if (isUndefined(ctx.colors)) ctx.colors = false;\n            if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n            if (ctx.colors) ctx.stylize = stylizeWithColor;\n            return formatValue(ctx, obj, ctx.depth);\n          }\n          exports.inspect = inspect;\n\n          // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\n          inspect.colors = {\n            bold: [1, 22],\n            italic: [3, 23],\n            underline: [4, 24],\n            inverse: [7, 27],\n            white: [37, 39],\n            grey: [90, 39],\n            black: [30, 39],\n            blue: [34, 39],\n            cyan: [36, 39],\n            green: [32, 39],\n            magenta: [35, 39],\n            red: [31, 39],\n            yellow: [33, 39]\n          };\n\n          // Don't use 'blue' not visible on cmd.exe\n          inspect.styles = {\n            special: 'cyan',\n            number: 'yellow',\n            boolean: 'yellow',\n            undefined: 'grey',\n            null: 'bold',\n            string: 'green',\n            date: 'magenta',\n            // \"name\": intentionally not styling\n            regexp: 'red'\n          };\n\n          function stylizeWithColor(str, styleType) {\n            var style = inspect.styles[styleType];\n\n            if (style) {\n              return (\n                '\\u001b[' +\n                inspect.colors[style][0] +\n                'm' +\n                str +\n                '\\u001b[' +\n                inspect.colors[style][1] +\n                'm'\n              );\n            } else {\n              return str;\n            }\n          }\n\n          function stylizeNoColor(str, styleType) {\n            return str;\n          }\n\n          function arrayToHash(array) {\n            var hash = {};\n\n            array.forEach(function(val, idx) {\n              hash[val] = true;\n            });\n\n            return hash;\n          }\n\n          function formatValue(ctx, value, recurseTimes) {\n            // Provide a hook for user-specified inspect functions.\n            // Check that value is an object with an inspect function on it\n            if (\n              ctx.customInspect &&\n              value &&\n              isFunction(value.inspect) &&\n              // Filter out the util module, it's inspect function is special\n              value.inspect !== exports.inspect &&\n              // Also filter out any prototype objects using the circular check.\n              !(value.constructor && value.constructor.prototype === value)\n            ) {\n              var ret = value.inspect(recurseTimes, ctx);\n              if (!isString(ret)) {\n                ret = formatValue(ctx, ret, recurseTimes);\n              }\n              return ret;\n            }\n\n            // Primitive types cannot have properties\n            var primitive = formatPrimitive(ctx, value);\n            if (primitive) {\n              return primitive;\n            }\n\n            // Look up the keys of the object.\n            var keys = Object.keys(value);\n            var visibleKeys = arrayToHash(keys);\n\n            if (ctx.showHidden) {\n              keys = Object.getOwnPropertyNames(value);\n            }\n\n            // IE doesn't make error fields non-enumerable\n            // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n            if (\n              isError(value) &&\n              (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)\n            ) {\n              return formatError(value);\n            }\n\n            // Some type of object without properties can be shortcutted.\n            if (keys.length === 0) {\n              if (isFunction(value)) {\n                var name = value.name ? ': ' + value.name : '';\n                return ctx.stylize('[Function' + name + ']', 'special');\n              }\n              if (isRegExp(value)) {\n                return ctx.stylize(\n                  RegExp.prototype.toString.call(value),\n                  'regexp'\n                );\n              }\n              if (isDate(value)) {\n                return ctx.stylize(Date.prototype.toString.call(value), 'date');\n              }\n              if (isError(value)) {\n                return formatError(value);\n              }\n            }\n\n            var base = '',\n              array = false,\n              braces = ['{', '}'];\n\n            // Make Array say that they are Array\n            if (isArray(value)) {\n              array = true;\n              braces = ['[', ']'];\n            }\n\n            // Make functions say that they are functions\n            if (isFunction(value)) {\n              var n = value.name ? ': ' + value.name : '';\n              base = ' [Function' + n + ']';\n            }\n\n            // Make RegExps say that they are RegExps\n            if (isRegExp(value)) {\n              base = ' ' + RegExp.prototype.toString.call(value);\n            }\n\n            // Make dates with properties first say the date\n            if (isDate(value)) {\n              base = ' ' + Date.prototype.toUTCString.call(value);\n            }\n\n            // Make error with message first say the error\n            if (isError(value)) {\n              base = ' ' + formatError(value);\n            }\n\n            if (keys.length === 0 && (!array || value.length == 0)) {\n              return braces[0] + base + braces[1];\n            }\n\n            if (recurseTimes < 0) {\n              if (isRegExp(value)) {\n                return ctx.stylize(\n                  RegExp.prototype.toString.call(value),\n                  'regexp'\n                );\n              } else {\n                return ctx.stylize('[Object]', 'special');\n              }\n            }\n\n            ctx.seen.push(value);\n\n            var output;\n            if (array) {\n              output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n            } else {\n              output = keys.map(function(key) {\n                return formatProperty(\n                  ctx,\n                  value,\n                  recurseTimes,\n                  visibleKeys,\n                  key,\n                  array\n                );\n              });\n            }\n\n            ctx.seen.pop();\n\n            return reduceToSingleString(output, base, braces);\n          }\n\n          function formatPrimitive(ctx, value) {\n            if (isUndefined(value))\n              return ctx.stylize('undefined', 'undefined');\n            if (isString(value)) {\n              var simple =\n                \"'\" +\n                JSON.stringify(value)\n                  .replace(/^\"|\"$/g, '')\n                  .replace(/'/g, \"\\\\'\")\n                  .replace(/\\\\\"/g, '\"') +\n                \"'\";\n              return ctx.stylize(simple, 'string');\n            }\n            if (isNumber(value)) return ctx.stylize('' + value, 'number');\n            if (isBoolean(value)) return ctx.stylize('' + value, 'boolean');\n            // For some reason typeof null is \"object\", so special case here.\n            if (isNull(value)) return ctx.stylize('null', 'null');\n          }\n\n          function formatError(value) {\n            return '[' + Error.prototype.toString.call(value) + ']';\n          }\n\n          function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n            var output = [];\n            for (var i = 0, l = value.length; i < l; ++i) {\n              if (hasOwnProperty(value, String(i))) {\n                output.push(\n                  formatProperty(\n                    ctx,\n                    value,\n                    recurseTimes,\n                    visibleKeys,\n                    String(i),\n                    true\n                  )\n                );\n              } else {\n                output.push('');\n              }\n            }\n            keys.forEach(function(key) {\n              if (!key.match(/^\\d+$/)) {\n                output.push(\n                  formatProperty(\n                    ctx,\n                    value,\n                    recurseTimes,\n                    visibleKeys,\n                    key,\n                    true\n                  )\n                );\n              }\n            });\n            return output;\n          }\n\n          function formatProperty(\n            ctx,\n            value,\n            recurseTimes,\n            visibleKeys,\n            key,\n            array\n          ) {\n            var name, str, desc;\n            desc = Object.getOwnPropertyDescriptor(value, key) || {\n              value: value[key]\n            };\n            if (desc.get) {\n              if (desc.set) {\n                str = ctx.stylize('[Getter/Setter]', 'special');\n              } else {\n                str = ctx.stylize('[Getter]', 'special');\n              }\n            } else {\n              if (desc.set) {\n                str = ctx.stylize('[Setter]', 'special');\n              }\n            }\n            if (!hasOwnProperty(visibleKeys, key)) {\n              name = '[' + key + ']';\n            }\n            if (!str) {\n              if (ctx.seen.indexOf(desc.value) < 0) {\n                if (isNull(recurseTimes)) {\n                  str = formatValue(ctx, desc.value, null);\n                } else {\n                  str = formatValue(ctx, desc.value, recurseTimes - 1);\n                }\n                if (str.indexOf('\\n') > -1) {\n                  if (array) {\n                    str = str\n                      .split('\\n')\n                      .map(function(line) {\n                        return '  ' + line;\n                      })\n                      .join('\\n')\n                      .substr(2);\n                  } else {\n                    str =\n                      '\\n' +\n                      str\n                        .split('\\n')\n                        .map(function(line) {\n                          return '   ' + line;\n                        })\n                        .join('\\n');\n                  }\n                }\n              } else {\n                str = ctx.stylize('[Circular]', 'special');\n              }\n            }\n            if (isUndefined(name)) {\n              if (array && key.match(/^\\d+$/)) {\n                return str;\n              }\n              name = JSON.stringify('' + key);\n              if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n                name = name.substr(1, name.length - 2);\n                name = ctx.stylize(name, 'name');\n              } else {\n                name = name\n                  .replace(/'/g, \"\\\\'\")\n                  .replace(/\\\\\"/g, '\"')\n                  .replace(/(^\"|\"$)/g, \"'\");\n                name = ctx.stylize(name, 'string');\n              }\n            }\n\n            return name + ': ' + str;\n          }\n\n          function reduceToSingleString(output, base, braces) {\n            var numLinesEst = 0;\n            var length = output.reduce(function(prev, cur) {\n              numLinesEst++;\n              if (cur.indexOf('\\n') >= 0) numLinesEst++;\n              return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n            }, 0);\n\n            if (length > 60) {\n              return (\n                braces[0] +\n                (base === '' ? '' : base + '\\n ') +\n                ' ' +\n                output.join(',\\n  ') +\n                ' ' +\n                braces[1]\n              );\n            }\n\n            return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n          }\n\n          // NOTE: These type checking functions intentionally don't use `instanceof`\n          // because it is fragile and can be easily faked with `Object.create()`.\n          function isArray(ar) {\n            return Array.isArray(ar);\n          }\n          exports.isArray = isArray;\n\n          function isBoolean(arg) {\n            return typeof arg === 'boolean';\n          }\n          exports.isBoolean = isBoolean;\n\n          function isNull(arg) {\n            return arg === null;\n          }\n          exports.isNull = isNull;\n\n          function isNullOrUndefined(arg) {\n            return arg == null;\n          }\n          exports.isNullOrUndefined = isNullOrUndefined;\n\n          function isNumber(arg) {\n            return typeof arg === 'number';\n          }\n          exports.isNumber = isNumber;\n\n          function isString(arg) {\n            return typeof arg === 'string';\n          }\n          exports.isString = isString;\n\n          function isSymbol(arg) {\n            return typeof arg === 'symbol';\n          }\n          exports.isSymbol = isSymbol;\n\n          function isUndefined(arg) {\n            return arg === void 0;\n          }\n          exports.isUndefined = isUndefined;\n\n          function isRegExp(re) {\n            return isObject(re) && objectToString(re) === '[object RegExp]';\n          }\n          exports.isRegExp = isRegExp;\n\n          function isObject(arg) {\n            return typeof arg === 'object' && arg !== null;\n          }\n          exports.isObject = isObject;\n\n          function isDate(d) {\n            return isObject(d) && objectToString(d) === '[object Date]';\n          }\n          exports.isDate = isDate;\n\n          function isError(e) {\n            return (\n              isObject(e) &&\n              (objectToString(e) === '[object Error]' || e instanceof Error)\n            );\n          }\n          exports.isError = isError;\n\n          function isFunction(arg) {\n            return typeof arg === 'function';\n          }\n          exports.isFunction = isFunction;\n\n          function isPrimitive(arg) {\n            return (\n              arg === null ||\n              typeof arg === 'boolean' ||\n              typeof arg === 'number' ||\n              typeof arg === 'string' ||\n              typeof arg === 'symbol' || // ES6 symbol\n              typeof arg === 'undefined'\n            );\n          }\n          exports.isPrimitive = isPrimitive;\n\n          exports.isBuffer = require('./support/isBuffer');\n\n          function objectToString(o) {\n            return Object.prototype.toString.call(o);\n          }\n\n          function pad(n) {\n            return n < 10 ? '0' + n.toString(10) : n.toString(10);\n          }\n\n          var months = [\n            'Jan',\n            'Feb',\n            'Mar',\n            'Apr',\n            'May',\n            'Jun',\n            'Jul',\n            'Aug',\n            'Sep',\n            'Oct',\n            'Nov',\n            'Dec'\n          ];\n\n          // 26 Feb 16:19:34\n          function timestamp() {\n            var d = new Date();\n            var time = [\n              pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())\n            ].join(':');\n            return [d.getDate(), months[d.getMonth()], time].join(' ');\n          }\n\n          // log is just a thin wrapper to console.log that prepends a timestamp\n          exports.log = function() {\n            console.log(\n              '%s - %s',\n              timestamp(),\n              exports.format.apply(exports, arguments)\n            );\n          };\n\n          /**\n           * Inherit the prototype methods from one constructor into another.\n           *\n           * The Function.prototype.inherits from lang.js rewritten as a standalone\n           * function (not on Function.prototype). NOTE: If this file is to be loaded\n           * during bootstrapping this function needs to be rewritten using some native\n           * functions as prototype setup using normal JavaScript does not work as\n           * expected during bootstrapping (see mirror.js in r114903).\n           *\n           * @param {function} ctor Constructor function which needs to inherit the\n           *     prototype.\n           * @param {function} superCtor Constructor function to inherit prototype from.\n           */\n          exports.inherits = require('inherits');\n\n          exports._extend = function(origin, add) {\n            // Don't do anything if add isn't an object\n            if (!add || !isObject(add)) return origin;\n\n            var keys = Object.keys(add);\n            var i = keys.length;\n            while (i--) {\n              origin[keys[i]] = add[keys[i]];\n            }\n            return origin;\n          };\n\n          function hasOwnProperty(obj, prop) {\n            return Object.prototype.hasOwnProperty.call(obj, prop);\n          }\n        }.call(\n          this,\n          require('_process'),\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      { './support/isBuffer': 65, _process: 51, inherits: 48 }\n    ],\n    67: [\n      function(require, module, exports) {\n        /* See LICENSE file for terms of use */\n\n        /*\n         * Text diff implementation.\n         *\n         * This library supports the following APIS:\n         * JsDiff.diffChars: Character by character diff\n         * JsDiff.diffWords: Word (as defined by \\b regex) diff which ignores whitespace\n         * JsDiff.diffLines: Line based diff\n         *\n         * JsDiff.diffCss: Diff targeted at CSS content\n         *\n         * These methods are based on the implementation proposed in\n         * \"An O(ND) Difference Algorithm and its Variations\" (Myers, 1986).\n         * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927\n         */\n        (function(global, undefined) {\n          var objectPrototypeToString = Object.prototype.toString;\n\n          /*istanbul ignore next*/\n          function map(arr, mapper, that) {\n            if (Array.prototype.map) {\n              return Array.prototype.map.call(arr, mapper, that);\n            }\n\n            var other = new Array(arr.length);\n\n            for (var i = 0, n = arr.length; i < n; i++) {\n              other[i] = mapper.call(that, arr[i], i, arr);\n            }\n            return other;\n          }\n          function clonePath(path) {\n            return {\n              newPos: path.newPos,\n              components: path.components.slice(0)\n            };\n          }\n          function removeEmpty(array) {\n            var ret = [];\n            for (var i = 0; i < array.length; i++) {\n              if (array[i]) {\n                ret.push(array[i]);\n              }\n            }\n            return ret;\n          }\n          function escapeHTML(s) {\n            var n = s;\n            n = n.replace(/&/g, '&amp;');\n            n = n.replace(/</g, '&lt;');\n            n = n.replace(/>/g, '&gt;');\n            n = n.replace(/\"/g, '&quot;');\n\n            return n;\n          }\n\n          // This function handles the presence of circular references by bailing out when encountering an\n          // object that is already on the \"stack\" of items being processed.\n          function canonicalize(obj, stack, replacementStack) {\n            stack = stack || [];\n            replacementStack = replacementStack || [];\n\n            var i;\n\n            for (i = 0; i < stack.length; i += 1) {\n              if (stack[i] === obj) {\n                return replacementStack[i];\n              }\n            }\n\n            var canonicalizedObj;\n\n            if ('[object Array]' === objectPrototypeToString.call(obj)) {\n              stack.push(obj);\n              canonicalizedObj = new Array(obj.length);\n              replacementStack.push(canonicalizedObj);\n              for (i = 0; i < obj.length; i += 1) {\n                canonicalizedObj[i] = canonicalize(\n                  obj[i],\n                  stack,\n                  replacementStack\n                );\n              }\n              stack.pop();\n              replacementStack.pop();\n            } else if (typeof obj === 'object' && obj !== null) {\n              stack.push(obj);\n              canonicalizedObj = {};\n              replacementStack.push(canonicalizedObj);\n              var sortedKeys = [],\n                key;\n              for (key in obj) {\n                sortedKeys.push(key);\n              }\n              sortedKeys.sort();\n              for (i = 0; i < sortedKeys.length; i += 1) {\n                key = sortedKeys[i];\n                canonicalizedObj[key] = canonicalize(\n                  obj[key],\n                  stack,\n                  replacementStack\n                );\n              }\n              stack.pop();\n              replacementStack.pop();\n            } else {\n              canonicalizedObj = obj;\n            }\n            return canonicalizedObj;\n          }\n\n          function buildValues(\n            components,\n            newString,\n            oldString,\n            useLongestToken\n          ) {\n            var componentPos = 0,\n              componentLen = components.length,\n              newPos = 0,\n              oldPos = 0;\n\n            for (; componentPos < componentLen; componentPos++) {\n              var component = components[componentPos];\n              if (!component.removed) {\n                if (!component.added && useLongestToken) {\n                  var value = newString.slice(newPos, newPos + component.count);\n                  value = map(value, function(value, i) {\n                    var oldValue = oldString[oldPos + i];\n                    return oldValue.length > value.length ? oldValue : value;\n                  });\n\n                  component.value = value.join('');\n                } else {\n                  component.value = newString\n                    .slice(newPos, newPos + component.count)\n                    .join('');\n                }\n                newPos += component.count;\n\n                // Common case\n                if (!component.added) {\n                  oldPos += component.count;\n                }\n              } else {\n                component.value = oldString\n                  .slice(oldPos, oldPos + component.count)\n                  .join('');\n                oldPos += component.count;\n\n                // Reverse add and remove so removes are output first to match common convention\n                // The diffing algorithm is tied to add then remove output and this is the simplest\n                // route to get the desired output with minimal overhead.\n                if (componentPos && components[componentPos - 1].added) {\n                  var tmp = components[componentPos - 1];\n                  components[componentPos - 1] = components[componentPos];\n                  components[componentPos] = tmp;\n                }\n              }\n            }\n\n            return components;\n          }\n\n          function Diff(ignoreWhitespace) {\n            this.ignoreWhitespace = ignoreWhitespace;\n          }\n          Diff.prototype = {\n            diff: function(oldString, newString, callback) {\n              var self = this;\n\n              function done(value) {\n                if (callback) {\n                  setTimeout(function() {\n                    callback(undefined, value);\n                  }, 0);\n                  return true;\n                } else {\n                  return value;\n                }\n              }\n\n              // Handle the identity case (this is due to unrolling editLength == 0\n              if (newString === oldString) {\n                return done([{ value: newString }]);\n              }\n              if (!newString) {\n                return done([{ value: oldString, removed: true }]);\n              }\n              if (!oldString) {\n                return done([{ value: newString, added: true }]);\n              }\n\n              newString = this.tokenize(newString);\n              oldString = this.tokenize(oldString);\n\n              var newLen = newString.length,\n                oldLen = oldString.length;\n              var editLength = 1;\n              var maxEditLength = newLen + oldLen;\n              var bestPath = [{ newPos: -1, components: [] }];\n\n              // Seed editLength = 0, i.e. the content starts with the same values\n              var oldPos = this.extractCommon(\n                bestPath[0],\n                newString,\n                oldString,\n                0\n              );\n              if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n                // Identity per the equality and tokenizer\n                return done([{ value: newString.join('') }]);\n              }\n\n              // Main worker method. checks all permutations of a given edit length for acceptance.\n              function execEditLength() {\n                for (\n                  var diagonalPath = -1 * editLength;\n                  diagonalPath <= editLength;\n                  diagonalPath += 2\n                ) {\n                  var basePath;\n                  var addPath = bestPath[diagonalPath - 1],\n                    removePath = bestPath[diagonalPath + 1],\n                    oldPos =\n                      (removePath ? removePath.newPos : 0) - diagonalPath;\n                  if (addPath) {\n                    // No one else is going to attempt to use this value, clear it\n                    bestPath[diagonalPath - 1] = undefined;\n                  }\n\n                  var canAdd = addPath && addPath.newPos + 1 < newLen,\n                    canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n                  if (!canAdd && !canRemove) {\n                    // If this path is a terminal then prune\n                    bestPath[diagonalPath] = undefined;\n                    continue;\n                  }\n\n                  // Select the diagonal that we want to branch from. We select the prior\n                  // path whose position in the new string is the farthest from the origin\n                  // and does not pass the bounds of the diff graph\n                  if (\n                    !canAdd ||\n                    (canRemove && addPath.newPos < removePath.newPos)\n                  ) {\n                    basePath = clonePath(removePath);\n                    self.pushComponent(basePath.components, undefined, true);\n                  } else {\n                    basePath = addPath; // No need to clone, we've pulled it from the list\n                    basePath.newPos++;\n                    self.pushComponent(basePath.components, true, undefined);\n                  }\n\n                  oldPos = self.extractCommon(\n                    basePath,\n                    newString,\n                    oldString,\n                    diagonalPath\n                  );\n\n                  // If we have hit the end of both strings, then we are done\n                  if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n                    return done(\n                      buildValues(\n                        basePath.components,\n                        newString,\n                        oldString,\n                        self.useLongestToken\n                      )\n                    );\n                  } else {\n                    // Otherwise track this path as a potential candidate and continue.\n                    bestPath[diagonalPath] = basePath;\n                  }\n                }\n\n                editLength++;\n              }\n\n              // Performs the length of edit iteration. Is a bit fugly as this has to support the\n              // sync and async mode which is never fun. Loops over execEditLength until a value\n              // is produced.\n              if (callback) {\n                (function exec() {\n                  setTimeout(function() {\n                    // This should not happen, but we want to be safe.\n                    /*istanbul ignore next */\n                    if (editLength > maxEditLength) {\n                      return callback();\n                    }\n\n                    if (!execEditLength()) {\n                      exec();\n                    }\n                  }, 0);\n                })();\n              } else {\n                while (editLength <= maxEditLength) {\n                  var ret = execEditLength();\n                  if (ret) {\n                    return ret;\n                  }\n                }\n              }\n            },\n\n            pushComponent: function(components, added, removed) {\n              var last = components[components.length - 1];\n              if (last && last.added === added && last.removed === removed) {\n                // We need to clone here as the component clone operation is just\n                // as shallow array clone\n                components[components.length - 1] = {\n                  count: last.count + 1,\n                  added: added,\n                  removed: removed\n                };\n              } else {\n                components.push({ count: 1, added: added, removed: removed });\n              }\n            },\n            extractCommon: function(\n              basePath,\n              newString,\n              oldString,\n              diagonalPath\n            ) {\n              var newLen = newString.length,\n                oldLen = oldString.length,\n                newPos = basePath.newPos,\n                oldPos = newPos - diagonalPath,\n                commonCount = 0;\n              while (\n                newPos + 1 < newLen &&\n                oldPos + 1 < oldLen &&\n                this.equals(newString[newPos + 1], oldString[oldPos + 1])\n              ) {\n                newPos++;\n                oldPos++;\n                commonCount++;\n              }\n\n              if (commonCount) {\n                basePath.components.push({ count: commonCount });\n              }\n\n              basePath.newPos = newPos;\n              return oldPos;\n            },\n\n            equals: function(left, right) {\n              var reWhitespace = /\\S/;\n              return (\n                left === right ||\n                (this.ignoreWhitespace &&\n                  !reWhitespace.test(left) &&\n                  !reWhitespace.test(right))\n              );\n            },\n            tokenize: function(value) {\n              return value.split('');\n            }\n          };\n\n          var CharDiff = new Diff();\n\n          var WordDiff = new Diff(true);\n          var WordWithSpaceDiff = new Diff();\n          WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) {\n            return removeEmpty(value.split(/(\\s+|\\b)/));\n          };\n\n          var CssDiff = new Diff(true);\n          CssDiff.tokenize = function(value) {\n            return removeEmpty(value.split(/([{}:;,]|\\s+)/));\n          };\n\n          var LineDiff = new Diff();\n\n          var TrimmedLineDiff = new Diff();\n          TrimmedLineDiff.ignoreTrim = true;\n\n          LineDiff.tokenize = TrimmedLineDiff.tokenize = function(value) {\n            var retLines = [],\n              lines = value.split(/^/m);\n            for (var i = 0; i < lines.length; i++) {\n              var line = lines[i],\n                lastLine = lines[i - 1],\n                lastLineLastChar = lastLine && lastLine[lastLine.length - 1];\n\n              // Merge lines that may contain windows new lines\n              if (line === '\\n' && lastLineLastChar === '\\r') {\n                retLines[retLines.length - 1] =\n                  retLines[retLines.length - 1].slice(0, -1) + '\\r\\n';\n              } else {\n                if (this.ignoreTrim) {\n                  line = line.trim();\n                  // add a newline unless this is the last line.\n                  if (i < lines.length - 1) {\n                    line += '\\n';\n                  }\n                }\n                retLines.push(line);\n              }\n            }\n\n            return retLines;\n          };\n\n          var PatchDiff = new Diff();\n          PatchDiff.tokenize = function(value) {\n            var ret = [],\n              linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n            // Ignore the final empty token that occurs if the string ends with a new line\n            if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n              linesAndNewlines.pop();\n            }\n\n            // Merge the content and line separators into single tokens\n            for (var i = 0; i < linesAndNewlines.length; i++) {\n              var line = linesAndNewlines[i];\n\n              if (i % 2) {\n                ret[ret.length - 1] += line;\n              } else {\n                ret.push(line);\n              }\n            }\n            return ret;\n          };\n\n          var SentenceDiff = new Diff();\n          SentenceDiff.tokenize = function(value) {\n            return removeEmpty(value.split(/(\\S.+?[.!?])(?=\\s+|$)/));\n          };\n\n          var JsonDiff = new Diff();\n          // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n          // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n          JsonDiff.useLongestToken = true;\n          JsonDiff.tokenize = LineDiff.tokenize;\n          JsonDiff.equals = function(left, right) {\n            return LineDiff.equals(\n              left.replace(/,([\\r\\n])/g, '$1'),\n              right.replace(/,([\\r\\n])/g, '$1')\n            );\n          };\n\n          var JsDiff = {\n            Diff: Diff,\n\n            diffChars: function(oldStr, newStr, callback) {\n              return CharDiff.diff(oldStr, newStr, callback);\n            },\n            diffWords: function(oldStr, newStr, callback) {\n              return WordDiff.diff(oldStr, newStr, callback);\n            },\n            diffWordsWithSpace: function(oldStr, newStr, callback) {\n              return WordWithSpaceDiff.diff(oldStr, newStr, callback);\n            },\n            diffLines: function(oldStr, newStr, callback) {\n              return LineDiff.diff(oldStr, newStr, callback);\n            },\n            diffTrimmedLines: function(oldStr, newStr, callback) {\n              return TrimmedLineDiff.diff(oldStr, newStr, callback);\n            },\n\n            diffSentences: function(oldStr, newStr, callback) {\n              return SentenceDiff.diff(oldStr, newStr, callback);\n            },\n\n            diffCss: function(oldStr, newStr, callback) {\n              return CssDiff.diff(oldStr, newStr, callback);\n            },\n            diffJson: function(oldObj, newObj, callback) {\n              return JsonDiff.diff(\n                typeof oldObj === 'string'\n                  ? oldObj\n                  : JSON.stringify(canonicalize(oldObj), undefined, '  '),\n                typeof newObj === 'string'\n                  ? newObj\n                  : JSON.stringify(canonicalize(newObj), undefined, '  '),\n                callback\n              );\n            },\n\n            createTwoFilesPatch: function(\n              oldFileName,\n              newFileName,\n              oldStr,\n              newStr,\n              oldHeader,\n              newHeader\n            ) {\n              var ret = [];\n\n              if (oldFileName == newFileName) {\n                ret.push('Index: ' + oldFileName);\n              }\n              ret.push(\n                '==================================================================='\n              );\n              ret.push(\n                '--- ' +\n                  oldFileName +\n                  (typeof oldHeader === 'undefined' ? '' : '\\t' + oldHeader)\n              );\n              ret.push(\n                '+++ ' +\n                  newFileName +\n                  (typeof newHeader === 'undefined' ? '' : '\\t' + newHeader)\n              );\n\n              var diff = PatchDiff.diff(oldStr, newStr);\n              diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n\n              // Formats a given set of lines for printing as context lines in a patch\n              function contextLines(lines) {\n                return map(lines, function(entry) {\n                  return ' ' + entry;\n                });\n              }\n\n              // Outputs the no newline at end of file warning if needed\n              function eofNL(curRange, i, current) {\n                var last = diff[diff.length - 2],\n                  isLast = i === diff.length - 2,\n                  isLastOfType =\n                    i === diff.length - 3 && current.added !== last.added;\n\n                // Figure out if this is the last line for the given file and missing NL\n                if (!/\\n$/.test(current.value) && (isLast || isLastOfType)) {\n                  curRange.push('\\\\ No newline at end of file');\n                }\n              }\n\n              var oldRangeStart = 0,\n                newRangeStart = 0,\n                curRange = [],\n                oldLine = 1,\n                newLine = 1;\n              for (var i = 0; i < diff.length; i++) {\n                var current = diff[i],\n                  lines =\n                    current.lines ||\n                    current.value.replace(/\\n$/, '').split('\\n');\n                current.lines = lines;\n\n                if (current.added || current.removed) {\n                  // If we have previous context, start with that\n                  if (!oldRangeStart) {\n                    var prev = diff[i - 1];\n                    oldRangeStart = oldLine;\n                    newRangeStart = newLine;\n\n                    if (prev) {\n                      curRange = contextLines(prev.lines.slice(-4));\n                      oldRangeStart -= curRange.length;\n                      newRangeStart -= curRange.length;\n                    }\n                  }\n\n                  // Output our changes\n                  curRange.push.apply(\n                    curRange,\n                    map(lines, function(entry) {\n                      return (current.added ? '+' : '-') + entry;\n                    })\n                  );\n                  eofNL(curRange, i, current);\n\n                  // Track the updated file position\n                  if (current.added) {\n                    newLine += lines.length;\n                  } else {\n                    oldLine += lines.length;\n                  }\n                } else {\n                  // Identical context lines. Track line changes\n                  if (oldRangeStart) {\n                    // Close out any changes that have been output (or join overlapping)\n                    if (lines.length <= 8 && i < diff.length - 2) {\n                      // Overlapping\n                      curRange.push.apply(curRange, contextLines(lines));\n                    } else {\n                      // end the range and output\n                      var contextSize = Math.min(lines.length, 4);\n                      ret.push(\n                        '@@ -' +\n                          oldRangeStart +\n                          ',' +\n                          (oldLine - oldRangeStart + contextSize) +\n                          ' +' +\n                          newRangeStart +\n                          ',' +\n                          (newLine - newRangeStart + contextSize) +\n                          ' @@'\n                      );\n                      ret.push.apply(ret, curRange);\n                      ret.push.apply(\n                        ret,\n                        contextLines(lines.slice(0, contextSize))\n                      );\n                      if (lines.length <= 4) {\n                        eofNL(ret, i, current);\n                      }\n\n                      oldRangeStart = 0;\n                      newRangeStart = 0;\n                      curRange = [];\n                    }\n                  }\n                  oldLine += lines.length;\n                  newLine += lines.length;\n                }\n              }\n\n              return ret.join('\\n') + '\\n';\n            },\n\n            createPatch: function(\n              fileName,\n              oldStr,\n              newStr,\n              oldHeader,\n              newHeader\n            ) {\n              return JsDiff.createTwoFilesPatch(\n                fileName,\n                fileName,\n                oldStr,\n                newStr,\n                oldHeader,\n                newHeader\n              );\n            },\n\n            applyPatch: function(oldStr, uniDiff) {\n              var diffstr = uniDiff.split('\\n'),\n                hunks = [],\n                i = 0,\n                remEOFNL = false,\n                addEOFNL = false;\n\n              // Skip to the first change hunk\n              while (i < diffstr.length && !/^@@/.test(diffstr[i])) {\n                i++;\n              }\n\n              // Parse the unified diff\n              for (; i < diffstr.length; i++) {\n                if (diffstr[i][0] === '@') {\n                  var chnukHeader = diffstr[i].split(\n                    /@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@/\n                  );\n                  hunks.unshift({\n                    start: chnukHeader[3],\n                    oldlength: +chnukHeader[2],\n                    removed: [],\n                    newlength: chnukHeader[4],\n                    added: []\n                  });\n                } else if (diffstr[i][0] === '+') {\n                  hunks[0].added.push(diffstr[i].substr(1));\n                } else if (diffstr[i][0] === '-') {\n                  hunks[0].removed.push(diffstr[i].substr(1));\n                } else if (diffstr[i][0] === ' ') {\n                  hunks[0].added.push(diffstr[i].substr(1));\n                  hunks[0].removed.push(diffstr[i].substr(1));\n                } else if (diffstr[i][0] === '\\\\') {\n                  if (diffstr[i - 1][0] === '+') {\n                    remEOFNL = true;\n                  } else if (diffstr[i - 1][0] === '-') {\n                    addEOFNL = true;\n                  }\n                }\n              }\n\n              // Apply the diff to the input\n              var lines = oldStr.split('\\n');\n              for (i = hunks.length - 1; i >= 0; i--) {\n                var hunk = hunks[i];\n                // Sanity check the input string. Bail if we don't match.\n                for (var j = 0; j < hunk.oldlength; j++) {\n                  if (lines[hunk.start - 1 + j] !== hunk.removed[j]) {\n                    return false;\n                  }\n                }\n                Array.prototype.splice.apply(\n                  lines,\n                  [hunk.start - 1, hunk.oldlength].concat(hunk.added)\n                );\n              }\n\n              // Handle EOFNL insertion/removal\n              if (remEOFNL) {\n                while (!lines[lines.length - 1]) {\n                  lines.pop();\n                }\n              } else if (addEOFNL) {\n                lines.push('');\n              }\n              return lines.join('\\n');\n            },\n\n            convertChangesToXML: function(changes) {\n              var ret = [];\n              for (var i = 0; i < changes.length; i++) {\n                var change = changes[i];\n                if (change.added) {\n                  ret.push('<ins>');\n                } else if (change.removed) {\n                  ret.push('<del>');\n                }\n\n                ret.push(escapeHTML(change.value));\n\n                if (change.added) {\n                  ret.push('</ins>');\n                } else if (change.removed) {\n                  ret.push('</del>');\n                }\n              }\n              return ret.join('');\n            },\n\n            // See: http://code.google.com/p/google-diff-match-patch/wiki/API\n            convertChangesToDMP: function(changes) {\n              var ret = [],\n                change,\n                operation;\n              for (var i = 0; i < changes.length; i++) {\n                change = changes[i];\n                if (change.added) {\n                  operation = 1;\n                } else if (change.removed) {\n                  operation = -1;\n                } else {\n                  operation = 0;\n                }\n\n                ret.push([operation, change.value]);\n              }\n              return ret;\n            },\n\n            canonicalize: canonicalize\n          };\n\n          /*istanbul ignore next */\n          /*global module */\n          if (typeof module !== 'undefined' && module.exports) {\n            module.exports = JsDiff;\n          } else if (typeof define === 'function' && define.amd) {\n            /*global define */\n            define([], function() {\n              return JsDiff;\n            });\n          } else if (typeof global.JsDiff === 'undefined') {\n            global.JsDiff = JsDiff;\n          }\n        })(this);\n      },\n      {}\n    ],\n    68: [\n      function(require, module, exports) {\n        'use strict';\n\n        var matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\n        module.exports = function(str) {\n          if (typeof str !== 'string') {\n            throw new TypeError('Expected a string');\n          }\n\n          return str.replace(matchOperatorsRe, '\\\\$&');\n        };\n      },\n      {}\n    ],\n    69: [\n      function(require, module, exports) {\n        (function(process) {\n          // Growl - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)\n\n          /**\n           * Module dependencies.\n           */\n\n          var exec = require('child_process').exec,\n            fs = require('fs'),\n            path = require('path'),\n            exists = fs.existsSync || path.existsSync,\n            os = require('os'),\n            quote = JSON.stringify,\n            cmd;\n\n          function which(name) {\n            var paths = process.env.PATH.split(':');\n            var loc;\n\n            for (var i = 0, len = paths.length; i < len; ++i) {\n              loc = path.join(paths[i], name);\n              if (exists(loc)) return loc;\n            }\n          }\n\n          switch (os.type()) {\n            case 'Darwin':\n              if (which('terminal-notifier')) {\n                cmd = {\n                  type: 'Darwin-NotificationCenter',\n                  pkg: 'terminal-notifier',\n                  msg: '-message',\n                  title: '-title',\n                  subtitle: '-subtitle',\n                  priority: {\n                    cmd: '-execute',\n                    range: []\n                  }\n                };\n              } else {\n                cmd = {\n                  type: 'Darwin-Growl',\n                  pkg: 'growlnotify',\n                  msg: '-m',\n                  sticky: '--sticky',\n                  priority: {\n                    cmd: '--priority',\n                    range: [\n                      -2,\n                      -1,\n                      0,\n                      1,\n                      2,\n                      'Very Low',\n                      'Moderate',\n                      'Normal',\n                      'High',\n                      'Emergency'\n                    ]\n                  }\n                };\n              }\n              break;\n            case 'Linux':\n              cmd = {\n                type: 'Linux',\n                pkg: 'notify-send',\n                msg: '',\n                sticky: '-t 0',\n                icon: '-i',\n                priority: {\n                  cmd: '-u',\n                  range: ['low', 'normal', 'critical']\n                }\n              };\n              break;\n            case 'Windows_NT':\n              cmd = {\n                type: 'Windows',\n                pkg: 'growlnotify',\n                msg: '',\n                sticky: '/s:true',\n                title: '/t:',\n                icon: '/i:',\n                priority: {\n                  cmd: '/p:',\n                  range: [-2, -1, 0, 1, 2]\n                }\n              };\n              break;\n          }\n\n          /**\n           * Expose `growl`.\n           */\n\n          exports = module.exports = growl;\n\n          /**\n           * Node-growl version.\n           */\n\n          exports.version = '1.4.1';\n\n          /**\n           * Send growl notification _msg_ with _options_.\n           *\n           * Options:\n           *\n           *  - title   Notification title\n           *  - sticky  Make the notification stick (defaults to false)\n           *  - priority  Specify an int or named key (default is 0)\n           *  - name    Application name (defaults to growlnotify)\n           *  - image\n           *    - path to an icon sets --iconpath\n           *    - path to an image sets --image\n           *    - capitalized word sets --appIcon\n           *    - filename uses extname as --icon\n           *    - otherwise treated as --icon\n           *\n           * Examples:\n           *\n           *   growl('New email')\n           *   growl('5 new emails', { title: 'Thunderbird' })\n           *   growl('Email sent', function(){\n           *     // ... notification sent\n           *   })\n           *\n           * @param {string} msg\n           * @param {object} options\n           * @param {function} fn\n           * @api public\n           */\n\n          function growl(msg, options, fn) {\n            var image,\n              args,\n              options = options || {},\n              fn = fn || function() {};\n\n            // noop\n            if (!cmd)\n              return fn(new Error('growl not supported on this platform'));\n            args = [cmd.pkg];\n\n            // image\n            if ((image = options.image)) {\n              switch (cmd.type) {\n                case 'Darwin-Growl':\n                  var flag,\n                    ext = path.extname(image).substr(1);\n                  flag = flag || (ext == 'icns' && 'iconpath');\n                  flag = flag || (/^[A-Z]/.test(image) && 'appIcon');\n                  flag = flag || (/^png|gif|jpe?g$/.test(ext) && 'image');\n                  flag = flag || (ext && (image = ext) && 'icon');\n                  flag = flag || 'icon';\n                  args.push('--' + flag, quote(image));\n                  break;\n                case 'Linux':\n                  args.push(cmd.icon, quote(image));\n                  // libnotify defaults to sticky, set a hint for transient notifications\n                  if (!options.sticky) args.push('--hint=int:transient:1');\n                  break;\n                case 'Windows':\n                  args.push(cmd.icon + quote(image));\n                  break;\n              }\n            }\n\n            // sticky\n            if (options.sticky) args.push(cmd.sticky);\n\n            // priority\n            if (options.priority) {\n              var priority = options.priority + '';\n              var checkindexOf = cmd.priority.range.indexOf(priority);\n              if (~cmd.priority.range.indexOf(priority)) {\n                args.push(cmd.priority, options.priority);\n              }\n            }\n\n            // name\n            if (options.name && cmd.type === 'Darwin-Growl') {\n              args.push('--name', options.name);\n            }\n\n            switch (cmd.type) {\n              case 'Darwin-Growl':\n                args.push(cmd.msg);\n                args.push(quote(msg));\n                if (options.title) args.push(quote(options.title));\n                break;\n              case 'Darwin-NotificationCenter':\n                args.push(cmd.msg);\n                args.push(quote(msg));\n                if (options.title) {\n                  args.push(cmd.title);\n                  args.push(quote(options.title));\n                }\n                if (options.subtitle) {\n                  args.push(cmd.subtitle);\n                  args.push(quote(options.subtitle));\n                }\n                break;\n              case 'Darwin-Growl':\n                args.push(cmd.msg);\n                args.push(quote(msg));\n                if (options.title) args.push(quote(options.title));\n                break;\n              case 'Linux':\n                if (options.title) {\n                  args.push(quote(options.title));\n                  args.push(cmd.msg);\n                  args.push(quote(msg));\n                } else {\n                  args.push(quote(msg));\n                }\n                break;\n              case 'Windows':\n                args.push(quote(msg));\n                if (options.title) args.push(cmd.title + quote(options.title));\n                break;\n            }\n\n            // execute\n            exec(args.join(' '), fn);\n          }\n        }.call(this, require('_process')));\n      },\n      { _process: 51, child_process: 41, fs: 41, os: 50, path: 41 }\n    ],\n    70: [\n      function(require, module, exports) {\n        (function(process, global) {\n          /**\n           * Shim process.stdout.\n           */\n\n          process.stdout = require('browser-stdout')();\n\n          var Mocha = require('../');\n\n          /**\n           * Create a Mocha instance.\n           *\n           * @return {undefined}\n           */\n\n          var mocha = new Mocha({ reporter: 'html' });\n\n          /**\n           * Save timer references to avoid Sinon interfering (see GH-237).\n           */\n\n          var Date = global.Date;\n          var setTimeout = global.setTimeout;\n          var setInterval = global.setInterval;\n          var clearTimeout = global.clearTimeout;\n          var clearInterval = global.clearInterval;\n\n          var uncaughtExceptionHandlers = [];\n\n          var originalOnerrorHandler = global.onerror;\n\n          /**\n           * Remove uncaughtException listener.\n           * Revert to original onerror handler if previously defined.\n           */\n\n          process.removeListener = function(e, fn) {\n            if ('uncaughtException' == e) {\n              if (originalOnerrorHandler) {\n                global.onerror = originalOnerrorHandler;\n              } else {\n                global.onerror = function() {};\n              }\n              var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn);\n              if (i != -1) {\n                uncaughtExceptionHandlers.splice(i, 1);\n              }\n            }\n          };\n\n          /**\n           * Implements uncaughtException listener.\n           */\n\n          process.on = function(e, fn) {\n            if ('uncaughtException' == e) {\n              global.onerror = function(err, url, line) {\n                fn(new Error(err + ' (' + url + ':' + line + ')'));\n                return !mocha.allowUncaught;\n              };\n              uncaughtExceptionHandlers.push(fn);\n            }\n          };\n\n          // The BDD UI is registered by default, but no UI will be functional in the\n          // browser without an explicit call to the overridden `mocha.ui` (see below).\n          // Ensure that this default UI does not expose its methods to the global scope.\n          mocha.suite.removeAllListeners('pre-require');\n\n          var immediateQueue = [],\n            immediateTimeout;\n\n          function timeslice() {\n            var immediateStart = new Date().getTime();\n            while (\n              immediateQueue.length &&\n              new Date().getTime() - immediateStart < 100\n            ) {\n              immediateQueue.shift()();\n            }\n            if (immediateQueue.length) {\n              immediateTimeout = setTimeout(timeslice, 0);\n            } else {\n              immediateTimeout = null;\n            }\n          }\n\n          /**\n           * High-performance override of Runner.immediately.\n           */\n\n          Mocha.Runner.immediately = function(callback) {\n            immediateQueue.push(callback);\n            if (!immediateTimeout) {\n              immediateTimeout = setTimeout(timeslice, 0);\n            }\n          };\n\n          /**\n           * Function to allow assertion libraries to throw errors directly into mocha.\n           * This is useful when running tests in a browser because window.onerror will\n           * only receive the 'message' attribute of the Error.\n           */\n          mocha.throwError = function(err) {\n            Mocha.utils.forEach(uncaughtExceptionHandlers, function(fn) {\n              fn(err);\n            });\n            throw err;\n          };\n\n          /**\n           * Override ui to ensure that the ui functions are initialized.\n           * Normally this would happen in Mocha.prototype.loadFiles.\n           */\n\n          mocha.ui = function(ui) {\n            Mocha.prototype.ui.call(this, ui);\n            this.suite.emit('pre-require', global, null, this);\n            return this;\n          };\n\n          /**\n           * Setup mocha with the given setting options.\n           */\n\n          mocha.setup = function(opts) {\n            if ('string' == typeof opts) opts = { ui: opts };\n            for (var opt in opts) this[opt](opts[opt]);\n            return this;\n          };\n\n          /**\n           * Run mocha, returning the Runner.\n           */\n\n          mocha.run = function(fn) {\n            var options = mocha.options;\n            mocha.globals('location');\n\n            var query = Mocha.utils.parseQuery(global.location.search || '');\n            if (query.grep) mocha.grep(new RegExp(query.grep));\n            if (query.fgrep) mocha.grep(query.fgrep);\n            if (query.invert) mocha.invert();\n\n            return Mocha.prototype.run.call(mocha, function(err) {\n              // The DOM Document is not available in Web Workers.\n              var document = global.document;\n              if (\n                document &&\n                document.getElementById('mocha') &&\n                options.noHighlighting !== true\n              ) {\n                Mocha.utils.highlightTags('code');\n              }\n              if (fn) fn(err);\n            });\n          };\n\n          /**\n           * Expose the process shim.\n           * https://github.com/mochajs/mocha/pull/916\n           */\n\n          Mocha.process = process;\n\n          /**\n           * Expose mocha.\n           */\n\n          window.Mocha = Mocha;\n          window.mocha = mocha;\n        }.call(\n          this,\n          require('_process'),\n          typeof global !== 'undefined'\n            ? global\n            : typeof self !== 'undefined'\n            ? self\n            : typeof window !== 'undefined'\n            ? window\n            : {}\n        ));\n      },\n      { '../': 1, _process: 51, 'browser-stdout': 40 }\n    ]\n  },\n  {},\n  [70]\n);\n"
  },
  {
    "path": "libs/code-demos/assets/runner/js/system-config.js",
    "content": "function loadSystemModule(name, code) {\n  window.define = function(deps, callback) {\n    console.log(window.System.x);\n    window.System.amdDefine(name, deps, callback);\n  };\n  window.define.amd = true;\n  eval(code);\n}\n\nglobal['module'] = {};\n\nSystem.config({\n  map: {\n    '@angular/core': 'npm:@angular/core/bundles/core.umd.js',\n    '@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',\n    '@angular/common': 'npm:@angular/common/bundles/common.umd.js',\n    '@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',\n    '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',\n    '@angular/compiler/testing':\n      'npm:@angular/compiler/bundles/compiler-testing.umd.js',\n    '@angular/platform-browser':\n      'npm:@angular/platform-browser/bundles/platform-browser.umd.js',\n    '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',\n    '@angular/material/autocomplete':\n      'npm:@angular/material/bundles/material-autocomplete.umd.js',\n    '@angular/material/autocomplete-testing':\n      'npm:@angular/material/bundles/material-autocomplete-testing.umd.js',\n    '@angular/material/badge':\n      'npm:@angular/material/bundles/material-badge.umd.js',\n    '@angular/material/bottom-sheet':\n      'npm:@angular/material/bundles/material-bottom-sheet.umd.js',\n    '@angular/material/button':\n      'npm:@angular/material/bundles/material-button.umd.js',\n    '@angular/material/button-testing':\n      'npm:@angular/material/bundles/material-button-testing.umd.js',\n    '@angular/material/button-toggle':\n      'npm:@angular/material/bundles/material-button-toggle.umd.js',\n    '@angular/material/card':\n      'npm:@angular/material/bundles/material-card.umd.js',\n    '@angular/material/checkbox':\n      'npm:@angular/material/bundles/material-checkbox.umd.js',\n    '@angular/material/checkbox-testing':\n      'npm:@angular/material/bundles/material-checkbox-testing.umd.js',\n    '@angular/material/chips':\n      'npm:@angular/material/bundles/material-chips.umd.js',\n    '@angular/material/core':\n      'npm:@angular/material/bundles/material-core.umd.js',\n    '@angular/material/datepicker':\n      'npm:@angular/material/bundles/material-datepicker.umd.js',\n    '@angular/material/dialog':\n      'npm:@angular/material/bundles/material-dialog.umd.js',\n    '@angular/material/dialog-testing':\n      'npm:@angular/material/bundles/material-dialog-testing.umd.js',\n    '@angular/material/divider':\n      'npm:@angular/material/bundles/material-divider.umd.js',\n    '@angular/material/expansion':\n      'npm:@angular/material/bundles/material-expansion.umd.js',\n    '@angular/material/form-field':\n      'npm:@angular/material/bundles/material-form-field.umd.js',\n    '@angular/material/grid-list':\n      'npm:@angular/material/bundles/material-grid-list.umd.js',\n    '@angular/material/icon':\n      'npm:@angular/material/bundles/material-icon.umd.js',\n    '@angular/material/input':\n      'npm:@angular/material/bundles/material-input.umd.js',\n    '@angular/material/list':\n      'npm:@angular/material/bundles/material-list.umd.js',\n    '@angular/material/menu':\n      'npm:@angular/material/bundles/material-menu.umd.js',\n    '@angular/material/menu-testing':\n      'npm:@angular/material/bundles/material-menu-testing.umd.js',\n    '@angular/material/paginator':\n      'npm:@angular/material/bundles/material-paginator.umd.js',\n    '@angular/material/progress-bar':\n      'npm:@angular/material/bundles/material-progress-bar.umd.js',\n    '@angular/material/progress-bar-testing':\n      'npm:@angular/material/bundles/material-progress-bar-testing.umd.js',\n    '@angular/material/progress-spinner':\n      'npm:@angular/material/bundles/material-progress-spinner.umd.js',\n    '@angular/material/progress-spinner-testing':\n      'npm:@angular/material/bundles/material-progress-spinner-testing.umd.js',\n    '@angular/material/radio':\n      'npm:@angular/material/bundles/material-radio.umd.js',\n    '@angular/material/radio-testing':\n      'npm:@angular/material/bundles/material-radio-testing.umd.js',\n    '@angular/material/select':\n      'npm:@angular/material/bundles/material-select.umd.js',\n    '@angular/material/sidenav':\n      'npm:@angular/material/bundles/material-sidenav.umd.js',\n    '@angular/material/sidenav-testing':\n      'npm:@angular/material/bundles/material-sidenav-testing.umd.js',\n    '@angular/material/slide-toggle':\n      'npm:@angular/material/bundles/material-slide-toggle.umd.js',\n    '@angular/material/slide-toggle-testing':\n      'npm:@angular/material/bundles/material-slide-toggle-testing.umd.js',\n    '@angular/material/slider':\n      'npm:@angular/material/bundles/material-slider.umd.js',\n    '@angular/material/slider-testing':\n      'npm:@angular/material/bundles/material-slider-testing.umd.js',\n    '@angular/material/snack-bar':\n      'npm:@angular/material/bundles/material-snack-bar.umd.js',\n    '@angular/material/snack-bar-testing':\n      'npm:@angular/material/bundles/material-snack-bar-testing.umd.js',\n    '@angular/material/sort':\n      'npm:@angular/material/bundles/material-sort.umd.js',\n    '@angular/material/stepper':\n      'npm:@angular/material/bundles/material-stepper.umd.js',\n    '@angular/material/table':\n      'npm:@angular/material/bundles/material-table.umd.js',\n    '@angular/material/tabs':\n      'npm:@angular/material/bundles/material-tabs.umd.js',\n    '@angular/material/tabs-testing':\n      'npm:@angular/material/bundles/material-tabs-testing.umd.js',\n    '@angular/material/toolbar':\n      'npm:@angular/material/bundles/material-toolbar.umd.js',\n    '@angular/material/tooltip':\n      'npm:@angular/material/bundles/material-tooltip.umd.js',\n    '@angular/material/tree':\n      'npm:@angular/material/bundles/material-tree.umd.js',\n    '@angular/cdk/platform': 'npm:@angular/cdk/bundles/cdk-platform.umd.js',\n    '@angular/cdk/bidi': 'npm:@angular/cdk/bundles/cdk-bidi.umd.js',\n    '@angular/cdk/coercion': 'npm:@angular/cdk/bundles/cdk-coercion.umd.js',\n    '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js',\n    '@angular/cdk/keycodes': 'npm:@angular/cdk/bundles/cdk-keycodes.umd.js',\n    '@angular/cdk/portal': 'npm:@angular/cdk/bundles/cdk-portal.umd.js',\n    '@angular/cdk/rxjs': 'npm:@angular/cdk/bundles/cdk-rxjs.umd.js',\n    '@angular/cdk/table': 'npm:@angular/cdk/bundles/cdk-table.umd.js',\n    '@angular/cdk/tree': 'npm:@angular/cdk/bundles/cdk-tree.umd.js',\n    '@angular/cdk/stepper': 'npm:@angular/cdk/bundles/cdk-stepper.umd.js',\n    '@angular/cdk/layout': 'npm:@angular/cdk/bundles/cdk-layout.umd.js',\n    '@angular/cdk/text-field': 'npm:@angular/cdk/bundles/cdk-text-field.umd.js',\n    '@angular/cdk/accordion': 'npm:@angular/cdk/bundles/cdk-accordion.umd.js',\n    '@angular/cdk/scrolling': 'npm:@angular/cdk/bundles/cdk-scrolling.umd.js',\n    '@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js',\n    '@angular/cdk/overlay': 'npm:@angular/cdk/bundles/cdk-overlay.umd.js',\n    '@angular/cdk/collections':\n      'npm:@angular/cdk/bundles/cdk-collections.umd.js',\n    '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',\n    '@angular/animations/browser':\n      'npm:@angular/animations/bundles/animations-browser.umd.js',\n    '@angular/platform-browser/animations':\n      'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',\n    '@angular/platform-browser/testing':\n      'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',\n    '@angular/platform-browser-dynamic':\n      'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',\n    '@angular/platform-browser-dynamic/testing':\n      'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',\n    '@angular/http': 'npm:@angular/http/bundles/http.umd.js',\n    '@angular/router': 'npm:@angular/router/bundles/router.umd.js',\n    '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',\n\n    // other libraries\n    tslib: 'npm:tslib/tslib.js',\n    'rxjs/operators': 'npm:rxjs/operators',\n    rxjs: 'npm:rxjs'\n  },\n  warnings: true,\n  packages: {\n    'rxjs/operators': {\n      main: 'index'\n    },\n    rxjs: {\n      main: 'index'\n    }\n  }\n});\n"
  },
  {
    "path": "libs/code-demos/assets/runner/js/test-bootstrap.js",
    "content": "function mochaBefore() {\n  mocha.suite.suites = [];\n  mocha.suite._afterAll = [];\n  mocha.suite._afterEach = [];\n  mocha.suite._beforeAll = [];\n  mocha.suite._beforeEach = [];\n  mocha.setup('bdd').reporter(function() {});\n}\n\nSystem.register(\n  'initTestBed',\n  ['@angular/core/testing', '@angular/platform-browser-dynamic/testing'],\n  function() {\n    'use strict';\n    var testing_1, testing_2;\n    return {\n      setters: [\n        function(testing_1_1) {\n          testing_1 = testing_1_1;\n        },\n        function(testing_2_1) {\n          testing_2 = testing_2_1;\n        }\n      ],\n      execute: function() {\n        testing_1.TestBed.initTestEnvironment(\n          testing_2.BrowserDynamicTestingModule,\n          testing_2.platformBrowserDynamicTesting()\n        );\n      }\n    };\n  }\n);\n\nfunction flattenTests(suite) {\n  const result = [];\n\n  function extractSuite(suite) {\n    suite.suites.forEach(function(suite) {\n      extractSuite(suite);\n    });\n    suite.tests.forEach(function(test) {\n      result.push(test.title);\n    });\n  }\n\n  extractSuite(suite);\n  return result;\n}\n\nfunction mochaAfter(runId) {\n  var parentFrame = window.parent;\n  parentFrame.postMessage(\n    {\n      type: 'testList',\n      tests: flattenTests(mocha.suite)\n    },\n    '*'\n  );\n\n  const runner = mocha.run();\n  runner\n    .on('pass', function(test, result) {\n      parentFrame.postMessage(\n        {\n          type: 'testResult',\n          test: {\n            title: test.title\n          },\n          result: result,\n          pass: true,\n          runId: runId\n        },\n        '*'\n      );\n    })\n    .on('fail', function(test, error) {\n      parentFrame.postMessage(\n        {\n          type: 'testResult',\n          test: {\n            title: test.title\n          },\n          result: error.message,\n          pass: false,\n          runId: runId\n        },\n        '*'\n      );\n    })\n    .on('end', function() {\n      parentFrame.postMessage(\n        {\n          type: 'testEnd'\n        },\n        '*'\n      );\n      runner.removeAllListeners('pass');\n      runner.removeAllListeners('fail');\n      runner.removeAllListeners('end');\n    });\n}\n"
  },
  {
    "path": "libs/code-demos/assets/runner/ng-dts/bundler.ts",
    "content": "import { readFileSync, writeFileSync } from 'fs';\nimport { join, basename } from 'path';\n\nconst glob = require('glob');\n\nconst folders = [\n  '@angular/core',\n  '@angular/platform-browser',\n  '@angular/platform-browser-dynamic',\n  '@angular/router',\n  '@angular/cdk',\n  '@angular/material/autocomplete',\n  '@angular/material/badge',\n  '@angular/material/bottom-sheet',\n  '@angular/material/button',\n  '@angular/material/button-toggle',\n  '@angular/material/card',\n  '@angular/material/checkbox',\n  '@angular/material/chips',\n  '@angular/material/core',\n  '@angular/material/datepicker',\n  '@angular/material/dialog',\n  '@angular/material/divider',\n  '@angular/material/expansion',\n  '@angular/material/form-field',\n  '@angular/material/grid-list',\n  '@angular/material/icon',\n  '@angular/material/input',\n  '@angular/material/list',\n  '@angular/material/menu',\n  '@angular/material/paginator',\n  '@angular/material/progress-bar',\n  '@angular/material/progress-spinner',\n  '@angular/material/radio',\n  '@angular/material/select',\n  '@angular/material/sidenav',\n  '@angular/material/slide-toggle',\n  '@angular/material/slider',\n  '@angular/material/snack-bar',\n  '@angular/material/sort',\n  '@angular/material/stepper',\n  '@angular/material/table',\n  '@angular/material/tabs',\n  '@angular/material/toolbar',\n  '@angular/material/tooltip',\n  '@angular/material/tree',\n  '@angular/forms',\n  'rxjs'\n];\n\ninterface FileModule {\n  typings: string;\n  dtsPaths: string[];\n}\n\nconst fileModules: FileModule[] = folders.map(\n  (folder): FileModule => ({\n    typings: (\n      JSON.parse(\n        readFileSync(`node_modules/${folder}/package.json`, {\n          encoding: 'utf-8'\n        })\n      ) || {}\n    ).typings,\n    dtsPaths: glob.sync(`node_modules/${folder}/**/*.d.ts`)\n  })\n);\n\nconst vendors = [].concat(\n  ...fileModules.map(({ typings, dtsPaths }) => {\n    return dtsPaths.map(path => {\n      const paths = [path];\n      if (typings) {\n        const dtsFileName = basename(path);\n        const typingsName = basename(typings);\n        if (typingsName === dtsFileName) {\n          paths.push(path.replace(dtsFileName, 'index.d.ts'));\n        }\n      }\n\n      const content = readFileSync(path, 'UTF-8');\n      return { paths, content };\n    });\n  })\n);\n\nconst content = JSON.stringify(vendors, null, 2);\nwriteFileSync(join(__dirname, './files.txt'), content, 'utf-8');\n\nconsole.log('Done: ');\nconsole.log('number of types', vendors.length);\nconsole.log('File size (kb): ', content.length / 1000);\n"
  },
  {
    "path": "libs/code-demos/assets/runner/ng-dts/files.txt",
    "content": "[\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/core.d.ts\",\n      \"node_modules/@angular/core/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { Observable } from 'rxjs';\\r\\nimport { Subject } from 'rxjs';\\r\\nimport { Subscription } from 'rxjs';\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents an abstract class `T`, if applied to a concrete class it would stop being\\r\\n * instantiatable.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from './src/r3_symbols';\\nexport declare interface AbstractType<T> extends Function {\\r\\n    prototype: T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Below are constants for LContainer indices to help us look up LContainer members\\r\\n * without having to remember the specific indices.\\r\\n * Uglify will inline these when minifying so there shouldn't be a cost.\\r\\n */\\r\\ndeclare const ACTIVE_INDEX = 2;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A lifecycle hook that is called after the default change detector has\\r\\n * completed checking all content of a directive.\\r\\n *\\r\\n * @see `AfterViewChecked`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface to\\r\\n * define its own after-check functionality.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='AfterContentChecked'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AfterContentChecked {\\r\\n    /**\\r\\n     * A callback method that is invoked immediately after the\\r\\n     * default change detector has completed checking all of the directive's\\r\\n     * content.\\r\\n     */\\r\\n    ngAfterContentChecked(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A lifecycle hook that is called after Angular has fully initialized\\r\\n * all content of a directive.\\r\\n * Define an `ngAfterContentInit()` method to handle any additional initialization tasks.\\r\\n *\\r\\n * @see `OnInit`\\r\\n * @see `AfterViewInit`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface to\\r\\n * define its own content initialization method.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='AfterContentInit'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AfterContentInit {\\r\\n    /**\\r\\n     * A callback method that is invoked immediately after\\r\\n     * Angular has completed initialization of all of the directive's\\r\\n     * content.\\r\\n     * It is invoked only once when the directive is instantiated.\\r\\n     */\\r\\n    ngAfterContentInit(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A lifecycle hook that is called after the default change detector has\\r\\n * completed checking a component's view for changes.\\r\\n *\\r\\n * @see `AfterContentChecked`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface to\\r\\n * define its own after-check functionality.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='AfterViewChecked'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AfterViewChecked {\\r\\n    /**\\r\\n     * A callback method that is invoked immediately after the\\r\\n     * default change detector has completed one change-check cycle\\r\\n     * for a component's view.\\r\\n     */\\r\\n    ngAfterViewChecked(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A lifecycle hook that is called after Angular has fully initialized\\r\\n * a component's view.\\r\\n * Define an `ngAfterViewInit()` method to handle any additional initialization tasks.\\r\\n *\\r\\n * @see `OnInit`\\r\\n * @see `AfterContentInit`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface to\\r\\n * define its own view initialization method.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='AfterViewInit'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AfterViewInit {\\r\\n    /**\\r\\n     * A callback method that is invoked immediately after\\r\\n     * Angular has completed initialization of a component's view.\\r\\n     * It is invoked only once when the view is instantiated.\\r\\n     *\\r\\n     */\\r\\n    ngAfterViewInit(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A DI token that you can use to create a virtual [provider](guide/glossary#provider)\\r\\n * that will populate the `entryComponents` field of components and NgModules\\r\\n * based on its `useValue` property value.\\r\\n * All components that are referenced in the `useValue` value (either directly\\r\\n * or in a nested array or map) are added to the `entryComponents` property.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * The following example shows how the router can populate the `entryComponents`\\r\\n * field of an NgModule based on a router configuration that refers\\r\\n * to components.\\r\\n *\\r\\n * ```typescript\\r\\n * // helper function inside the router\\r\\n * function provideRoutes(routes) {\\r\\n *   return [\\r\\n *     {provide: ROUTES, useValue: routes},\\r\\n *     {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}\\r\\n *   ];\\r\\n * }\\r\\n *\\r\\n * // user code\\r\\n * let routes = [\\r\\n *   {path: '/root', component: RootComp},\\r\\n *   {path: '/teams', component: TeamsComp}\\r\\n * ];\\r\\n *\\r\\n * @NgModule({\\r\\n *   providers: [provideRoutes(routes)]\\r\\n * })\\r\\n * class ModuleWithRoutes {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ANALYZE_FOR_ENTRY_COMPONENTS: InjectionToken<any>;\\r\\n\\r\\n/**\\r\\n * All callbacks provided via this token will be called for every component that is bootstrapped.\\r\\n * Signature of the callback:\\r\\n *\\r\\n * `(componentRef: ComponentRef) => void`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const APP_BOOTSTRAP_LISTENER: InjectionToken<((compRef: ComponentRef<any>) => void)[]>;\\r\\n\\r\\n/**\\r\\n * A DI Token representing a unique string id assigned to the application by Angular and used\\r\\n * primarily for prefixing application attributes and CSS styles when\\r\\n * {@link ViewEncapsulation#Emulated ViewEncapsulation.Emulated} is being used.\\r\\n *\\r\\n * If you need to avoid randomly generated value to be used as an application id, you can provide\\r\\n * a custom value via a DI provider <!-- TODO: provider --> configuring the root {@link Injector}\\r\\n * using this token.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const APP_ID: InjectionToken<string>;\\r\\n\\r\\n/**\\r\\n * A function that will be executed when an application is initialized.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const APP_INITIALIZER: InjectionToken<(() => void)[]>;\\r\\n\\r\\n/**\\r\\n * A class that reflects the state of running {@link APP_INITIALIZER}s.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ApplicationInitStatus {\\r\\n    private appInits;\\r\\n    private resolve;\\r\\n    private reject;\\r\\n    private initialized;\\r\\n    readonly donePromise: Promise<any>;\\r\\n    readonly done = false;\\r\\n    constructor(appInits: (() => any)[]);\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ApplicationInitStatus>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ApplicationInitStatus>;\\n}\\r\\n\\r\\n/**\\r\\n * Configures the root injector for an app with\\r\\n * providers of `@angular/core` dependencies that `ApplicationRef` needs\\r\\n * to bootstrap components.\\r\\n *\\r\\n * Re-exported by `BrowserModule`, which is included automatically in the root\\r\\n * `AppModule` when you create a new app with the CLI `new` command.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ApplicationModule {\\r\\n    constructor(appRef: ApplicationRef);\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ApplicationModule, never, never, never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<ApplicationModule>;\\n}\\r\\n\\r\\n/**\\r\\n * A reference to an Angular application running on a page.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@a is-stable-examples}\\r\\n * ### isStable examples and caveats\\r\\n *\\r\\n * Note two important points about `isStable`, demonstrated in the examples below:\\r\\n * - the application will never be stable if you start any kind\\r\\n * of recurrent asynchronous task when the application starts\\r\\n * (for example for a polling process, started with a `setInterval`, a `setTimeout`\\r\\n * or using RxJS operators like `interval`);\\r\\n * - the `isStable` Observable runs outside of the Angular zone.\\r\\n *\\r\\n * Let's imagine that you start a recurrent task\\r\\n * (here incrementing a counter, using RxJS `interval`),\\r\\n * and at the same time subscribe to `isStable`.\\r\\n *\\r\\n * ```\\r\\n * constructor(appRef: ApplicationRef) {\\r\\n *   appRef.isStable.pipe(\\r\\n *      filter(stable => stable)\\r\\n *   ).subscribe(() => console.log('App is stable now');\\r\\n *   interval(1000).subscribe(counter => console.log(counter));\\r\\n * }\\r\\n * ```\\r\\n * In this example, `isStable` will never emit `true`,\\r\\n * and the trace \\\"App is stable now\\\" will never get logged.\\r\\n *\\r\\n * If you want to execute something when the app is stable,\\r\\n * you have to wait for the application to be stable\\r\\n * before starting your polling process.\\r\\n *\\r\\n * ```\\r\\n * constructor(appRef: ApplicationRef) {\\r\\n *   appRef.isStable.pipe(\\r\\n *     first(stable => stable),\\r\\n *     tap(stable => console.log('App is stable now')),\\r\\n *     switchMap(() => interval(1000))\\r\\n *   ).subscribe(counter => console.log(counter));\\r\\n * }\\r\\n * ```\\r\\n * In this example, the trace \\\"App is stable now\\\" will be logged\\r\\n * and then the counter starts incrementing every second.\\r\\n *\\r\\n * Note also that this Observable runs outside of the Angular zone,\\r\\n * which means that the code in the subscription\\r\\n * to this Observable will not trigger the change detection.\\r\\n *\\r\\n * Let's imagine that instead of logging the counter value,\\r\\n * you update a field of your component\\r\\n * and display it in its template.\\r\\n *\\r\\n * ```\\r\\n * constructor(appRef: ApplicationRef) {\\r\\n *   appRef.isStable.pipe(\\r\\n *     first(stable => stable),\\r\\n *     switchMap(() => interval(1000))\\r\\n *   ).subscribe(counter => this.value = counter);\\r\\n * }\\r\\n * ```\\r\\n * As the `isStable` Observable runs outside the zone,\\r\\n * the `value` field will be updated properly,\\r\\n * but the template will not be refreshed!\\r\\n *\\r\\n * You'll have to manually trigger the change detection to update the template.\\r\\n *\\r\\n * ```\\r\\n * constructor(appRef: ApplicationRef, cd: ChangeDetectorRef) {\\r\\n *   appRef.isStable.pipe(\\r\\n *     first(stable => stable),\\r\\n *     switchMap(() => interval(1000))\\r\\n *   ).subscribe(counter => {\\r\\n *     this.value = counter;\\r\\n *     cd.detectChanges();\\r\\n *   });\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * Or make the subscription callback run inside the zone.\\r\\n *\\r\\n * ```\\r\\n * constructor(appRef: ApplicationRef, zone: NgZone) {\\r\\n *   appRef.isStable.pipe(\\r\\n *     first(stable => stable),\\r\\n *     switchMap(() => interval(1000))\\r\\n *   ).subscribe(counter => zone.run(() => this.value = counter));\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ApplicationRef {\\r\\n    private _zone;\\r\\n    private _console;\\r\\n    private _injector;\\r\\n    private _exceptionHandler;\\r\\n    private _componentFactoryResolver;\\r\\n    private _initStatus;\\r\\n    private _bootstrapListeners;\\r\\n    private _views;\\r\\n    private _runningTick;\\r\\n    private _enforceNoNewChanges;\\r\\n    private _stable;\\r\\n    /**\\r\\n     * Get a list of component types registered to this application.\\r\\n     * This list is populated even before the component is created.\\r\\n     */\\r\\n    readonly componentTypes: Type<any>[];\\r\\n    /**\\r\\n     * Get a list of components registered to this application.\\r\\n     */\\r\\n    readonly components: ComponentRef<any>[];\\r\\n    /**\\r\\n     * Returns an Observable that indicates when the application is stable or unstable.\\r\\n     *\\r\\n     * @see  [Usage notes](#is-stable-examples) for examples and caveats when using this API.\\r\\n     */\\r\\n    readonly isStable: Observable<boolean>;\\r\\n    /**\\r\\n     * Bootstrap a new component at the root level of the application.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Bootstrap process\\r\\n     *\\r\\n     * When bootstrapping a new root component into an application, Angular mounts the\\r\\n     * specified application component onto DOM elements identified by the componentType's\\r\\n     * selector and kicks off automatic change detection to finish initializing the component.\\r\\n     *\\r\\n     * Optionally, a component can be mounted onto a DOM element that does not match the\\r\\n     * componentType's selector.\\r\\n     *\\r\\n     * ### Example\\r\\n     * {@example core/ts/platform/platform.ts region='longform'}\\r\\n     */\\r\\n    bootstrap<C>(componentOrFactory: ComponentFactory<C> | Type<C>, rootSelectorOrNode?: string | any): ComponentRef<C>;\\r\\n    /**\\r\\n     * Invoke this method to explicitly process change detection and its side-effects.\\r\\n     *\\r\\n     * In development mode, `tick()` also performs a second change detection cycle to ensure that no\\r\\n     * further changes are detected. If additional changes are picked up during this second cycle,\\r\\n     * bindings in the app have side-effects that cannot be resolved in a single change detection\\r\\n     * pass.\\r\\n     * In this case, Angular throws an error, since an Angular application can only have one change\\r\\n     * detection pass during which all change detection must complete.\\r\\n     */\\r\\n    tick(): void;\\r\\n    /**\\r\\n     * Attaches a view so that it will be dirty checked.\\r\\n     * The view will be automatically detached when it is destroyed.\\r\\n     * This will throw if the view is already attached to a ViewContainer.\\r\\n     */\\r\\n    attachView(viewRef: ViewRef): void;\\r\\n    /**\\r\\n     * Detaches a view from dirty checking again.\\r\\n     */\\r\\n    detachView(viewRef: ViewRef): void;\\r\\n    private _loadComponent;\\r\\n    private _unloadComponent;\\r\\n    /**\\r\\n     * Returns the number of attached views.\\r\\n     */\\r\\n    readonly viewCount: number;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ApplicationRef>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ApplicationRef>;\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function asNativeElements(debugEls: DebugElement[]): any;\\r\\n\\r\\n/**\\r\\n * Checks that there currently is a platform which contains the given token as a provider.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function assertPlatform(requiredToken: any): PlatformRef;\\r\\n\\r\\n/**\\r\\n * Type of the Attribute metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Attribute {\\r\\n    /**\\r\\n     * The name of the attribute whose value can be injected.\\r\\n     */\\r\\n    attributeName?: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Attribute decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Attribute: AttributeDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Attribute decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AttributeDecorator {\\r\\n    /**\\r\\n     * Parameter decorator for a directive constructor that designates\\r\\n     * a host-element attribute whose value is injected as a constant string literal.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * Suppose we have an `<input>` element and want to know its `type`.\\r\\n     *\\r\\n     * ```html\\r\\n     * <input type=\\\"text\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * The following example uses the decorator to inject the string literal `text`.\\r\\n     *\\r\\n     * {@example core/ts/metadata/metadata.ts region='attributeMetadata'}\\r\\n     *\\r\\n     * ### Example as TypeScript Decorator\\r\\n     *\\r\\n     * {@example core/ts/metadata/metadata.ts region='attributeFactory'}\\r\\n     *\\r\\n     */\\r\\n    (name: string): any;\\r\\n    new (name: string): Attribute;\\r\\n}\\r\\n\\r\\ndeclare const BINDING_INDEX = 7;\\r\\n\\r\\ndeclare interface BindingDef {\\r\\n    flags: ɵBindingFlags;\\r\\n    ns: string | null;\\r\\n    name: string | null;\\r\\n    nonMinifiedName: string | null;\\r\\n    securityContext: SecurityContext | null;\\r\\n    suffix: string | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provides additional options to the bootstraping process.\\r\\n *\\r\\n *\\r\\n */\\r\\ndeclare interface BootstrapOptions {\\r\\n    /**\\r\\n     * Optionally specify which `NgZone` should be used.\\r\\n     *\\r\\n     * - Provide your own `NgZone` instance.\\r\\n     * - `zone.js` - Use default `NgZone` which requires `Zone.js`.\\r\\n     * - `noop` - Use `NoopNgZone` which does nothing.\\r\\n     */\\r\\n    ngZone?: NgZone | 'zone.js' | 'noop';\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * The strategy that the default change detector uses to detect changes.\\r\\n * When set, takes effect the next time change detection is triggered.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare enum ChangeDetectionStrategy {\\r\\n    /**\\r\\n     * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated\\r\\n     * until reactivated by setting the strategy to `Default` (`CheckAlways`).\\r\\n     * Change detection can still be explicitly invoked.\\r\\n     * This strategy applies to all child directives and cannot be overridden.\\r\\n     */\\r\\n    OnPush = 0,\\r\\n    /**\\r\\n     * Use the default `CheckAlways` strategy, in which change detection is automatic until\\r\\n     * explicitly deactivated.\\r\\n     */\\r\\n    Default = 1\\r\\n}\\r\\n\\r\\n/**\\r\\n * Base class for Angular Views, provides change detection functionality.\\r\\n * A change-detection tree collects all views that are to be checked for changes.\\r\\n * Use the methods to add and remove views from the tree, initiate change-detection,\\r\\n * and explicitly mark views as _dirty_, meaning that they have changed and need to be rerendered.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * The following examples demonstrate how to modify default change-detection behavior\\r\\n * to perform explicit detection when needed.\\r\\n *\\r\\n * ### Use `markForCheck()` with `CheckOnce` strategy\\r\\n *\\r\\n * The following example sets the `OnPush` change-detection strategy for a component\\r\\n * (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check\\r\\n * after an interval. See [live demo](http://plnkr.co/edit/GC512b?p=preview).\\r\\n *\\r\\n * <code-example path=\\\"core/ts/change_detect/change-detection.ts\\\"\\r\\n * region=\\\"mark-for-check\\\"></code-example>\\r\\n *\\r\\n * ### Detach change detector to limit how often check occurs\\r\\n *\\r\\n * The following example defines a component with a large list of read-only data\\r\\n * that is expected to change constantly, many times per second.\\r\\n * To improve performance, we want to check and update the list\\r\\n * less often than the changes actually occur. To do that, we detach\\r\\n * the component's change detector and perform an explicit local check every five seconds.\\r\\n *\\r\\n * <code-example path=\\\"core/ts/change_detect/change-detection.ts\\\" region=\\\"detach\\\"></code-example>\\r\\n *\\r\\n *\\r\\n * ### Reattaching a detached component\\r\\n *\\r\\n * The following example creates a component displaying live data.\\r\\n * The component detaches its change detector from the main change detector tree\\r\\n * when the `live` property is set to false, and reattaches it when the property\\r\\n * becomes true.\\r\\n *\\r\\n * <code-example path=\\\"core/ts/change_detect/change-detection.ts\\\" region=\\\"reattach\\\"></code-example>\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ChangeDetectorRef {\\r\\n    /**\\r\\n     * When a view uses the {@link ChangeDetectionStrategy#OnPush OnPush} (checkOnce)\\r\\n     * change detection strategy, explicitly marks the view as changed so that\\r\\n     * it can be checked again.\\r\\n     *\\r\\n     * Components are normally marked as dirty (in need of rerendering) when inputs\\r\\n     * have changed or events have fired in the view. Call this method to ensure that\\r\\n     * a component is checked even if these triggers have not occured.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on OnPush components -->\\r\\n     *\\r\\n     */\\r\\n    abstract markForCheck(): void;\\r\\n    /**\\r\\n     * Detaches this view from the change-detection tree.\\r\\n     * A detached view is  not checked until it is reattached.\\r\\n     * Use in combination with `detectChanges()` to implement local change detection checks.\\r\\n     *\\r\\n     * Detached views are not checked during change detection runs until they are\\r\\n     * re-attached, even if they are marked as dirty.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\\r\\n     *\\r\\n     */\\r\\n    abstract detach(): void;\\r\\n    /**\\r\\n     * Checks this view and its children. Use in combination with {@link ChangeDetectorRef#detach\\r\\n     * detach}\\r\\n     * to implement local change detection checks.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\\r\\n     *\\r\\n     */\\r\\n    abstract detectChanges(): void;\\r\\n    /**\\r\\n     * Checks the change detector and its children, and throws if any changes are detected.\\r\\n     *\\r\\n     * Use in development mode to verify that running change detection doesn't introduce\\r\\n     * other changes.\\r\\n     */\\r\\n    abstract checkNoChanges(): void;\\r\\n    /**\\r\\n     * Re-attaches the previously detached view to the change detection tree.\\r\\n     * Views are attached to the tree by default.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     *\\r\\n     */\\r\\n    abstract reattach(): void;\\r\\n}\\r\\n\\r\\ndeclare const CHILD_HEAD = 14;\\r\\n\\r\\ndeclare const CHILD_TAIL = 15;\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `useClass` for a token.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ClassProvider'}\\r\\n *\\r\\n * Note that following two providers are not equal:\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ClassProviderDifference'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ClassProvider extends ClassSansProvider {\\r\\n    /**\\r\\n     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value by invoking a `useClass` function.\\r\\n * Base for `ClassProvider` decorator.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ClassSansProvider {\\r\\n    /**\\r\\n     * Class to instantiate for the `token`.\\r\\n     */\\r\\n    useClass: Type<any>;\\r\\n}\\r\\n\\r\\ndeclare const CLEANUP = 8;\\r\\n\\r\\n/**\\r\\n * @deprecated v4.0.0 - Use IterableChangeRecord instead.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface CollectionChangeRecord<V> extends IterableChangeRecord<V> {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marks that the next string is for comment.\\r\\n *\\r\\n * See `I18nMutateOpCodes` documentation.\\r\\n */\\r\\ndeclare const COMMENT_MARKER: COMMENT_MARKER;\\r\\n\\r\\ndeclare interface COMMENT_MARKER {\\r\\n    marker: 'comment';\\r\\n}\\r\\n\\r\\n/**\\r\\n * Compile an Angular injectable according to its `Injectable` metadata, and patch the resulting\\r\\n * injectable def (`ɵprov`) onto the injectable type.\\r\\n */\\r\\ndeclare function compileInjectable(type: Type<any>, srcMeta?: Injectable): void;\\r\\n\\r\\n/**\\r\\n * Low-level service for running the angular compiler during runtime\\r\\n * to create {@link ComponentFactory}s, which\\r\\n * can later be used to create and render a Component instance.\\r\\n *\\r\\n * Each `@NgModule` provides an own `Compiler` to its injector,\\r\\n * that will use the directives/pipes of the ng module for compilation\\r\\n * of components.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Compiler {\\r\\n    /**\\r\\n     * Compiles the given NgModule and all of its components. All templates of the components listed\\r\\n     * in `entryComponents` have to be inlined.\\r\\n     */\\r\\n    compileModuleSync: <T>(moduleType: Type<T>) => NgModuleFactory<T>;\\r\\n    /**\\r\\n     * Compiles the given NgModule and all of its components\\r\\n     */\\r\\n    compileModuleAsync: <T>(moduleType: Type<T>) => Promise<NgModuleFactory<T>>;\\r\\n    /**\\r\\n     * Same as {@link #compileModuleSync} but also creates ComponentFactories for all components.\\r\\n     */\\r\\n    compileModuleAndAllComponentsSync: <T>(moduleType: Type<T>) => ModuleWithComponentFactories<T>;\\r\\n    /**\\r\\n     * Same as {@link #compileModuleAsync} but also creates ComponentFactories for all components.\\r\\n     */\\r\\n    compileModuleAndAllComponentsAsync: <T>(moduleType: Type<T>) => Promise<ModuleWithComponentFactories<T>>;\\r\\n    /**\\r\\n     * Clears all caches.\\r\\n     */\\r\\n    clearCache(): void;\\r\\n    /**\\r\\n     * Clears the cache for the given component/ngModule.\\r\\n     */\\r\\n    clearCacheFor(type: Type<any>): void;\\r\\n    /**\\r\\n     * Returns the id for a given NgModule, if one is defined and known to the compiler.\\r\\n     */\\r\\n    getModuleId(moduleType: Type<any>): string | undefined;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Compiler>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Compiler>;\\n}\\r\\n\\r\\n/**\\r\\n * Token to provide CompilerOptions in the platform injector.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const COMPILER_OPTIONS: InjectionToken<CompilerOptions[]>;\\r\\n\\r\\n/**\\r\\n * A factory for creating a Compiler\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class CompilerFactory {\\r\\n    abstract createCompiler(options?: CompilerOptions[]): Compiler;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Options for creating a compiler\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type CompilerOptions = {\\r\\n    useJit?: boolean;\\r\\n    defaultEncapsulation?: ViewEncapsulation;\\r\\n    providers?: StaticProvider[];\\r\\n    missingTranslation?: MissingTranslationStrategy;\\r\\n    preserveWhitespaces?: boolean;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Supplies configuration metadata for an Angular component.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Component extends Directive {\\r\\n    /**\\r\\n     * The change-detection strategy to use for this component.\\r\\n     *\\r\\n     * When a component is instantiated, Angular creates a change detector,\\r\\n     * which is responsible for propagating the component's bindings.\\r\\n     * The strategy is one of:\\r\\n     * - `ChangeDetectionStrategy#OnPush` sets the strategy to `CheckOnce` (on demand).\\r\\n     * - `ChangeDetectionStrategy#Default` sets the strategy to `CheckAlways`.\\r\\n     */\\r\\n    changeDetection?: ChangeDetectionStrategy;\\r\\n    /**\\r\\n     * Defines the set of injectable objects that are visible to its view DOM children.\\r\\n     * See [example](#injecting-a-class-with-a-view-provider).\\r\\n     *\\r\\n     */\\r\\n    viewProviders?: Provider[];\\r\\n    /**\\r\\n     * The module ID of the module that contains the component.\\r\\n     * The component must be able to resolve relative URLs for templates and styles.\\r\\n     * SystemJS exposes the `__moduleName` variable within each module.\\r\\n     * In CommonJS, this can  be set to `module.id`.\\r\\n     *\\r\\n     */\\r\\n    moduleId?: string;\\r\\n    /**\\r\\n     * The relative path or absolute URL of a template file for an Angular component.\\r\\n     * If provided, do not supply an inline template using `template`.\\r\\n     *\\r\\n     */\\r\\n    templateUrl?: string;\\r\\n    /**\\r\\n     * An inline template for an Angular component. If provided,\\r\\n     * do not supply a template file using `templateUrl`.\\r\\n     *\\r\\n     */\\r\\n    template?: string;\\r\\n    /**\\r\\n     * One or more relative paths or absolute URLs for files containing CSS stylesheets to use\\r\\n     * in this component.\\r\\n     */\\r\\n    styleUrls?: string[];\\r\\n    /**\\r\\n     * One or more inline CSS stylesheets to use\\r\\n     * in this component.\\r\\n     */\\r\\n    styles?: string[];\\r\\n    /**\\r\\n     * One or more animation `trigger()` calls, containing\\r\\n     * `state()` and `transition()` definitions.\\r\\n     * See the [Animations guide](/guide/animations) and animations API documentation.\\r\\n     *\\r\\n     */\\r\\n    animations?: any[];\\r\\n    /**\\r\\n     * An encapsulation policy for the template and CSS styles. One of:\\r\\n     * - `ViewEncapsulation.Native`: Deprecated. Use `ViewEncapsulation.ShadowDom` instead.\\r\\n     * - `ViewEncapsulation.Emulated`: Use shimmed CSS that\\r\\n     * emulates the native behavior.\\r\\n     * - `ViewEncapsulation.None`: Use global CSS without any\\r\\n     * encapsulation.\\r\\n     * - `ViewEncapsulation.ShadowDom`: Use Shadow DOM v1 to encapsulate styles.\\r\\n     *\\r\\n     * If not supplied, the value is taken from `CompilerOptions`. The default compiler option is\\r\\n     * `ViewEncapsulation.Emulated`.\\r\\n     *\\r\\n     * If the policy is set to `ViewEncapsulation.Emulated` and the component has no `styles`\\r\\n     * or `styleUrls` specified, the policy is automatically switched to `ViewEncapsulation.None`.\\r\\n     */\\r\\n    encapsulation?: ViewEncapsulation;\\r\\n    /**\\r\\n     * Overrides the default encapsulation start and end delimiters (`{{` and `}}`)\\r\\n     */\\r\\n    interpolation?: [string, string];\\r\\n    /**\\r\\n     * A set of components that should be compiled along with\\r\\n     * this component. For each component listed here,\\r\\n     * Angular creates a {@link ComponentFactory} and stores it in the\\r\\n     * {@link ComponentFactoryResolver}.\\r\\n     */\\r\\n    entryComponents?: Array<Type<any> | any[]>;\\r\\n    /**\\r\\n     * True to preserve or false to remove potentially superfluous whitespace characters\\r\\n     * from the compiled template. Whitespace characters are those matching the `\\\\s`\\r\\n     * character class in JavaScript regular expressions. Default is false, unless\\r\\n     * overridden in compiler options.\\r\\n     */\\r\\n    preserveWhitespaces?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Component decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Component: ComponentDecorator;\\r\\n\\r\\n/**\\r\\n * Component decorator interface\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ComponentDecorator {\\r\\n    /**\\r\\n     * Decorator that marks a class as an Angular component and provides configuration\\r\\n     * metadata that determines how the component should be processed,\\r\\n     * instantiated, and used at runtime.\\r\\n     *\\r\\n     * Components are the most basic UI building block of an Angular app.\\r\\n     * An Angular app contains a tree of Angular components.\\r\\n     *\\r\\n     * Angular components are a subset of directives, always associated with a template.\\r\\n     * Unlike other directives, only one component can be instantiated per an element in a template.\\r\\n     *\\r\\n     * A component must belong to an NgModule in order for it to be available\\r\\n     * to another component or application. To make it a member of an NgModule,\\r\\n     * list it in the `declarations` field of the `NgModule` metadata.\\r\\n     *\\r\\n     * Note that, in addition to these options for configuring a directive,\\r\\n     * you can control a component's runtime behavior by implementing\\r\\n     * life-cycle hooks. For more information, see the\\r\\n     * [Lifecycle Hooks](guide/lifecycle-hooks) guide.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Setting component inputs\\r\\n     *\\r\\n     * The following example creates a component with two data-bound properties,\\r\\n     * specified by the `inputs` value.\\r\\n     *\\r\\n     * <code-example path=\\\"core/ts/metadata/directives.ts\\\" region=\\\"component-input\\\"></code-example>\\r\\n     *\\r\\n     *\\r\\n     * ### Setting component outputs\\r\\n     *\\r\\n     * The following example shows two event emitters that emit on an interval. One\\r\\n     * emits an output every second, while the other emits every five seconds.\\r\\n     *\\r\\n     * {@example core/ts/metadata/directives.ts region='component-output-interval'}\\r\\n     *\\r\\n     * ### Injecting a class with a view provider\\r\\n     *\\r\\n     * The following simple example injects a class into a component\\r\\n     * using the view provider specified in component metadata:\\r\\n     *\\r\\n     * ```ts\\r\\n     * class Greeter {\\r\\n     *    greet(name:string) {\\r\\n     *      return 'Hello ' + name + '!';\\r\\n     *    }\\r\\n     * }\\r\\n     *\\r\\n     * @Directive({\\r\\n     *   selector: 'needs-greeter'\\r\\n     * })\\r\\n     * class NeedsGreeter {\\r\\n     *   greeter:Greeter;\\r\\n     *\\r\\n     *   constructor(greeter:Greeter) {\\r\\n     *     this.greeter = greeter;\\r\\n     *   }\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'greet',\\r\\n     *   viewProviders: [\\r\\n     *     Greeter\\r\\n     *   ],\\r\\n     *   template: `<needs-greeter></needs-greeter>`\\r\\n     * })\\r\\n     * class HelloWorld {\\r\\n     * }\\r\\n     *\\r\\n     * ```\\r\\n     *\\r\\n     * ### Preserving whitespace\\r\\n     *\\r\\n     * Removing whitespace can greatly reduce AOT-generated code size and speed up view creation.\\r\\n     * As of Angular 6, the default for `preserveWhitespaces` is false (whitespace is removed).\\r\\n     * To change the default setting for all components in your application, set\\r\\n     * the `preserveWhitespaces` option of the AOT compiler.\\r\\n     *\\r\\n     * By default, the AOT compiler removes whitespace characters as follows:\\r\\n     * * Trims all whitespaces at the beginning and the end of a template.\\r\\n     * * Removes whitespace-only text nodes. For example,\\r\\n     *\\r\\n     * ```html\\r\\n     * <button>Action 1</button>  <button>Action 2</button>\\r\\n     * ```\\r\\n     *\\r\\n     * becomes:\\r\\n     *\\r\\n     * ```html\\r\\n     * <button>Action 1</button><button>Action 2</button>\\r\\n     * ```\\r\\n     *\\r\\n     * * Replaces a series of whitespace characters in text nodes with a single space.\\r\\n     * For example, `<span>\\\\n some text\\\\n</span>` becomes `<span> some text </span>`.\\r\\n     * * Does NOT alter text nodes inside HTML tags such as `<pre>` or `<textarea>`,\\r\\n     * where whitespace characters are significant.\\r\\n     *\\r\\n     * Note that these transformations can influence DOM nodes layout, although impact\\r\\n     * should be minimal.\\r\\n     *\\r\\n     * You can override the default behavior to preserve whitespace characters\\r\\n     * in certain fragments of a template. For example, you can exclude an entire\\r\\n     * DOM sub-tree by using the `ngPreserveWhitespaces` attribute:\\r\\n     *\\r\\n     * ```html\\r\\n     * <div ngPreserveWhitespaces>\\r\\n     *     whitespaces are preserved here\\r\\n     *     <span>    and here </span>\\r\\n     * </div>\\r\\n     * ```\\r\\n     *\\r\\n     * You can force a single space to be preserved in a text node by using `&ngsp;`,\\r\\n     * which is replaced with a space character by Angular's template\\r\\n     * compiler:\\r\\n     *\\r\\n     * ```html\\r\\n     * <a>Spaces</a>&ngsp;<a>between</a>&ngsp;<a>links.</a>\\r\\n     * <!-->compiled to be equivalent to:</>\\r\\n     *  <a>Spaces</a> <a>between</a> <a>links.</a>\\r\\n     * ```\\r\\n     *\\r\\n     * Note that sequences of `&ngsp;` are still collapsed to just one space character when\\r\\n     * the `preserveWhitespaces` option is set to `false`.\\r\\n     *\\r\\n     * ```html\\r\\n     * <a>before</a>&ngsp;&ngsp;&ngsp;<a>after</a>\\r\\n     * <!-->compiled to be equivalent to:</>\\r\\n     *  <a>Spaces</a> <a>between</a> <a>links.</a>\\r\\n     * ```\\r\\n     *\\r\\n     * To preserve sequences of whitespace characters, use the\\r\\n     * `ngPreserveWhitespaces` attribute.\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    (obj: Component): TypeDecorator;\\r\\n    /**\\r\\n     * See the `Component` decorator.\\r\\n     */\\r\\n    new (obj: Component): Component;\\r\\n}\\r\\n\\r\\ndeclare interface ComponentDefFeature {\\r\\n    <T>(componentDef: ɵComponentDef<T>): void;\\r\\n    /**\\r\\n     * Marks a feature as something that {@link InheritDefinitionFeature} will execute\\r\\n     * during inheritance.\\r\\n     *\\r\\n     * NOTE: DO NOT SET IN ROOT OF MODULE! Doing so will result in tree-shakers/bundlers\\r\\n     * identifying the change as a side effect, and the feature will be included in\\r\\n     * every bundle.\\r\\n     */\\r\\n    ngInherit?: true;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Base class for a factory that can create a component dynamically.\\r\\n * Instantiate a factory for a given type of component with `resolveComponentFactory()`.\\r\\n * Use the resulting `ComponentFactory.create()` method to create a component of that type.\\r\\n *\\r\\n * @see [Dynamic Components](guide/dynamic-component-loader)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class ComponentFactory<C> {\\r\\n    /**\\r\\n     * The component's HTML selector.\\r\\n     */\\r\\n    abstract readonly selector: string;\\r\\n    /**\\r\\n     * The type of component the factory will create.\\r\\n     */\\r\\n    abstract readonly componentType: Type<any>;\\r\\n    /**\\r\\n     * Selector for all <ng-content> elements in the component.\\r\\n     */\\r\\n    abstract readonly ngContentSelectors: string[];\\r\\n    /**\\r\\n     * The inputs of the component.\\r\\n     */\\r\\n    abstract readonly inputs: {\\r\\n        propName: string;\\r\\n        templateName: string;\\r\\n    }[];\\r\\n    /**\\r\\n     * The outputs of the component.\\r\\n     */\\r\\n    abstract readonly outputs: {\\r\\n        propName: string;\\r\\n        templateName: string;\\r\\n    }[];\\r\\n    /**\\r\\n     * Creates a new component.\\r\\n     */\\r\\n    abstract create(injector: Injector, projectableNodes?: any[][], rootSelectorOrNode?: string | any, ngModule?: NgModuleRef<any>): ComponentRef<C>;\\r\\n}\\r\\nexport { ComponentFactory }\\r\\nexport { ComponentFactory as ɵComponentFactory }\\r\\n\\r\\n/**\\r\\n * A simple registry that maps `Components` to generated `ComponentFactory` classes\\r\\n * that can be used to create instances of components.\\r\\n * Use to obtain the factory for a given component type,\\r\\n * then use the factory's `create()` method to create a component of that type.\\r\\n *\\r\\n * @see [Dynamic Components](guide/dynamic-component-loader)\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ComponentFactoryResolver {\\r\\n    static NULL: ComponentFactoryResolver;\\r\\n    /**\\r\\n     * Retrieves the factory object that creates a component of the given type.\\r\\n     * @param component The component type.\\r\\n     */\\r\\n    abstract resolveComponentFactory<T>(component: Type<T>): ComponentFactory<T>;\\r\\n}\\r\\n\\r\\ndeclare type ComponentInstance = {};\\r\\n\\r\\n/**\\r\\n * Represents a component created by a `ComponentFactory`.\\r\\n * Provides access to the component instance and related objects,\\r\\n * and provides the means of destroying the instance.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ComponentRef<C> {\\r\\n    /**\\r\\n     * The host or anchor [element](guide/glossary#element) for this component instance.\\r\\n     */\\r\\n    abstract readonly location: ElementRef;\\r\\n    /**\\r\\n     * The [dependency injector](guide/glossary#injector) for this component instance.\\r\\n     */\\r\\n    abstract readonly injector: Injector;\\r\\n    /**\\r\\n     * This component instance.\\r\\n     */\\r\\n    abstract readonly instance: C;\\r\\n    /**\\r\\n     * The [host view](guide/glossary#view-tree) defined by the template\\r\\n     * for this component instance.\\r\\n     */\\r\\n    abstract readonly hostView: ViewRef;\\r\\n    /**\\r\\n     * The change detector for this component instance.\\r\\n     */\\r\\n    abstract readonly changeDetectorRef: ChangeDetectorRef;\\r\\n    /**\\r\\n     * The type of this component (as created by a `ComponentFactory` class).\\r\\n     */\\r\\n    abstract readonly componentType: Type<any>;\\r\\n    /**\\r\\n     * Destroys the component instance and all of the data structures associated with it.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * A lifecycle hook that provides additional developer-defined cleanup\\r\\n     * functionality for the component.\\r\\n     * @param callback A handler function that cleans up developer-defined data\\r\\n     * associated with this component. Called when the `destroy()` method is invoked.\\r\\n     */\\r\\n    abstract onDestroy(callback: Function): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Definition of what a template rendering function should look like for a component.\\r\\n */\\r\\ndeclare type ComponentTemplate<T> = {\\r\\n    <U extends T>(rf: ɵRenderFlags, ctx: T | U): void;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of a token.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ConstructorProvider extends ConstructorSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: Type<any>;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of a token.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ```ts\\r\\n * @Injectable(SomeModule, {deps: []})\\r\\n * class MyService {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ConstructorSansProvider {\\r\\n    /**\\r\\n     * A list of `token`s to be resolved by the injector.\\r\\n     */\\r\\n    deps?: any[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the ContentChild metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ContentChild = Query;\\r\\n\\r\\n/**\\r\\n * ContentChild decorator and metadata.\\r\\n *\\r\\n *\\r\\n * @Annotation\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ContentChild: ContentChildDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the ContentChild decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ContentChildDecorator {\\r\\n    /**\\r\\n     * Parameter decorator that configures a content query.\\r\\n     *\\r\\n     * Use to get the first element or the directive matching the selector from the content DOM.\\r\\n     * If the content DOM changes, and a new child matches the selector,\\r\\n     * the property will be updated.\\r\\n     *\\r\\n     * Content queries are set before the `ngAfterContentInit` callback is called.\\r\\n     *\\r\\n     * Does not retrieve elements or directives that are in other components' templates,\\r\\n     * since a component's template is always a black box to its ancestors.\\r\\n     *\\r\\n     * **Metadata Properties**:\\r\\n     *\\r\\n     * * **selector** - The directive type or the name used for querying.\\r\\n     * * **read** - True to read a different token from the queried element.\\r\\n     * * **static** - True to resolve query results before change detection runs,\\r\\n     * false to resolve after change detection. Defaults to false.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * {@example core/di/ts/contentChild/content_child_howto.ts region='HowTo'}\\r\\n     *\\r\\n     * ### Example\\r\\n     *\\r\\n     * {@example core/di/ts/contentChild/content_child_example.ts region='Component'}\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    (selector: Type<any> | Function | string, opts?: {\\r\\n        read?: any;\\r\\n        static?: boolean;\\r\\n    }): any;\\r\\n    new (selector: Type<any> | Function | string, opts?: {\\r\\n        read?: any;\\r\\n        static?: boolean;\\r\\n    }): ContentChild;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the ContentChildren metadata.\\r\\n *\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ContentChildren = Query;\\r\\n\\r\\n/**\\r\\n * ContentChildren decorator and metadata.\\r\\n *\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ContentChildren: ContentChildrenDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the ContentChildren decorator / constructor function.\\r\\n *\\r\\n * @see `ContentChildren`.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ContentChildrenDecorator {\\r\\n    /**\\r\\n     * Parameter decorator that configures a content query.\\r\\n     *\\r\\n     * Use to get the `QueryList` of elements or directives from the content DOM.\\r\\n     * Any time a child element is added, removed, or moved, the query list will be\\r\\n     * updated, and the changes observable of the query list will emit a new value.\\r\\n     *\\r\\n     * Content queries are set before the `ngAfterContentInit` callback is called.\\r\\n     *\\r\\n     * Does not retrieve elements or directives that are in other components' templates,\\r\\n     * since a component's template is always a black box to its ancestors.\\r\\n     *\\r\\n     * **Metadata Properties**:\\r\\n     *\\r\\n     * * **selector** - The directive type or the name used for querying.\\r\\n     * * **descendants** - True to include all descendants, otherwise include only direct children.\\r\\n     * * **read** - True to read a different token from the queried elements.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * Here is a simple demonstration of how the `ContentChildren` decorator can be used.\\r\\n     *\\r\\n     * {@example core/di/ts/contentChildren/content_children_howto.ts region='HowTo'}\\r\\n     *\\r\\n     * ### Tab-pane example\\r\\n     *\\r\\n     * Here is a slightly more realistic example that shows how `ContentChildren` decorators\\r\\n     * can be used to implement a tab pane component.\\r\\n     *\\r\\n     * {@example core/di/ts/contentChildren/content_children_example.ts region='Component'}\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    (selector: Type<any> | Function | string, opts?: {\\r\\n        descendants?: boolean;\\r\\n        read?: any;\\r\\n    }): any;\\r\\n    new (selector: Type<any> | Function | string, opts?: {\\r\\n        descendants?: boolean;\\r\\n        read?: any;\\r\\n    }): Query;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Definition of what a content queries function should look like.\\r\\n */\\r\\ndeclare type ContentQueriesFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U, directiveIndex: number) => void;\\r\\n\\r\\ndeclare const CONTEXT = 9;\\r\\n\\r\\n/** Options that control how the component should be bootstrapped. */\\r\\ndeclare interface CreateComponentOptions {\\r\\n    /** Which renderer factory to use. */\\r\\n    rendererFactory?: RendererFactory3;\\r\\n    /** A custom sanitizer instance */\\r\\n    sanitizer?: Sanitizer;\\r\\n    /** A custom animation player handler */\\r\\n    playerHandler?: ɵPlayerHandler;\\r\\n    /**\\r\\n     * Host element on which the component will be bootstrapped. If not specified,\\r\\n     * the component definition's `tag` is used to query the existing DOM for the\\r\\n     * element to bootstrap.\\r\\n     */\\r\\n    host?: RElement | string;\\r\\n    /** Module injector for the component. If unspecified, the injector will be NULL_INJECTOR. */\\r\\n    injector?: Injector;\\r\\n    /**\\r\\n     * List of features to be applied to the created component. Features are simply\\r\\n     * functions that decorate a component with a certain behavior.\\r\\n     *\\r\\n     * Typically, the features in this list are features that cannot be added to the\\r\\n     * other features list in the component definition because they rely on other factors.\\r\\n     *\\r\\n     * Example: `LifecycleHooksFeature` is a function that adds lifecycle hook capabilities\\r\\n     * to root components in a tree-shakable way. It cannot be added to the component\\r\\n     * features list because there's no way of knowing when the component will be used as\\r\\n     * a root component.\\r\\n     */\\r\\n    hostFeatures?: HostFeature[];\\r\\n    /**\\r\\n     * A function which is used to schedule change detection work in the future.\\r\\n     *\\r\\n     * When marking components as dirty, it is necessary to schedule the work of\\r\\n     * change detection in the future. This is done to coalesce multiple\\r\\n     * {@link markDirty} calls into a single changed detection processing.\\r\\n     *\\r\\n     * The default value of the scheduler is the `requestAnimationFrame` function.\\r\\n     *\\r\\n     * It is also useful to override this function for testing purposes.\\r\\n     */\\r\\n    scheduler?: (work: () => void) => void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Creates a platform.\\r\\n * Platforms have to be eagerly created via this function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function createPlatform(injector: Injector): PlatformRef;\\r\\n\\r\\n/**\\r\\n * Creates a factory for a platform\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function createPlatformFactory(parentPlatformFactory: ((extraProviders?: StaticProvider[]) => PlatformRef) | null, name: string, providers?: StaticProvider[]): (extraProviders?: StaticProvider[]) => PlatformRef;\\r\\n\\r\\n\\r\\n/**\\r\\n * Expresses a single CSS Selector.\\r\\n *\\r\\n * Beginning of array\\r\\n * - First index: element name\\r\\n * - Subsequent odd indices: attr keys\\r\\n * - Subsequent even indices: attr values\\r\\n *\\r\\n * After SelectorFlags.CLASS flag\\r\\n * - Class name values\\r\\n *\\r\\n * SelectorFlags.NOT flag\\r\\n * - Changes the mode to NOT\\r\\n * - Can be combined with other flags to set the element / attr / class mode\\r\\n *\\r\\n * e.g. SelectorFlags.NOT | SelectorFlags.ELEMENT\\r\\n *\\r\\n * Example:\\r\\n * Original: `div.foo.bar[attr1=val1][attr2]`\\r\\n * Parsed: ['div', 'attr1', 'val1', 'attr2', '', SelectorFlags.CLASS, 'foo', 'bar']\\r\\n *\\r\\n * Original: 'div[attr1]:not(.foo[attr2])\\r\\n * Parsed: [\\r\\n *  'div', 'attr1', '',\\r\\n *  SelectorFlags.NOT | SelectorFlags.ATTRIBUTE 'attr2', '', SelectorFlags.CLASS, 'foo'\\r\\n * ]\\r\\n *\\r\\n * See more examples in node_selector_matcher_spec.ts\\r\\n */\\r\\ndeclare type CssSelector = (string | SelectorFlags)[];\\r\\n\\r\\n/**\\r\\n * Defines a schema that allows an NgModule to contain the following:\\r\\n * - Non-Angular elements named with dash case (`-`).\\r\\n * - Element properties named with dash case (`-`).\\r\\n * Dash case is the naming convention for custom elements.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const CUSTOM_ELEMENTS_SCHEMA: SchemaMetadata;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface DebugElement extends DebugNode {\\r\\n    readonly name: string;\\r\\n    readonly properties: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    readonly attributes: {\\r\\n        [key: string]: string | null;\\r\\n    };\\r\\n    readonly classes: {\\r\\n        [key: string]: boolean;\\r\\n    };\\r\\n    readonly styles: {\\r\\n        [key: string]: string | null;\\r\\n    };\\r\\n    readonly childNodes: DebugNode[];\\r\\n    readonly nativeElement: any;\\r\\n    readonly children: DebugElement[];\\r\\n    query(predicate: Predicate<DebugElement>): DebugElement;\\r\\n    queryAll(predicate: Predicate<DebugElement>): DebugElement[];\\r\\n    queryAllNodes(predicate: Predicate<DebugNode>): DebugNode[];\\r\\n    triggerEventHandler(eventName: string, eventObj: any): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const DebugElement: {\\r\\n    new (...args: any[]): DebugElement;\\r\\n};\\r\\n\\r\\ndeclare class DebugElement__POST_R3__ extends DebugNode__POST_R3__ implements DebugElement {\\r\\n    constructor(nativeNode: Element);\\r\\n    readonly nativeElement: Element | null;\\r\\n    readonly name: string;\\r\\n    /**\\r\\n     *  Gets a map of property names to property values for an element.\\r\\n     *\\r\\n     *  This map includes:\\r\\n     *  - Regular property bindings (e.g. `[id]=\\\"id\\\"`)\\r\\n     *  - Host property bindings (e.g. `host: { '[id]': \\\"id\\\" }`)\\r\\n     *  - Interpolated property bindings (e.g. `id=\\\"{{ value }}\\\")\\r\\n     *\\r\\n     *  It does not include:\\r\\n     *  - input property bindings (e.g. `[myCustomInput]=\\\"value\\\"`)\\r\\n     *  - attribute bindings (e.g. `[attr.role]=\\\"menu\\\"`)\\r\\n     */\\r\\n    readonly properties: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    readonly attributes: {\\r\\n        [key: string]: string | null;\\r\\n    };\\r\\n    readonly styles: {\\r\\n        [key: string]: string | null;\\r\\n    };\\r\\n    private _classesProxy;\\r\\n    readonly classes: {\\r\\n        [key: string]: boolean;\\r\\n    };\\r\\n    readonly childNodes: DebugNode[];\\r\\n    readonly children: DebugElement[];\\r\\n    query(predicate: Predicate<DebugElement>): DebugElement;\\r\\n    queryAll(predicate: Predicate<DebugElement>): DebugElement[];\\r\\n    queryAllNodes(predicate: Predicate<DebugNode>): DebugNode[];\\r\\n    triggerEventHandler(eventName: string, eventObj: any): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class DebugEventListener {\\r\\n    name: string;\\r\\n    callback: Function;\\r\\n    constructor(name: string, callback: Function);\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface DebugNode {\\r\\n    readonly listeners: DebugEventListener[];\\r\\n    readonly parent: DebugElement | null;\\r\\n    readonly nativeNode: any;\\r\\n    readonly injector: Injector;\\r\\n    readonly componentInstance: any;\\r\\n    readonly context: any;\\r\\n    readonly references: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    readonly providerTokens: any[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const DebugNode: {\\r\\n    new (...args: any[]): DebugNode;\\r\\n};\\r\\n\\r\\ndeclare class DebugNode__POST_R3__ implements DebugNode {\\r\\n    readonly nativeNode: Node;\\r\\n    constructor(nativeNode: Node);\\r\\n    readonly parent: DebugElement | null;\\r\\n    readonly injector: Injector;\\r\\n    readonly componentInstance: any;\\r\\n    readonly context: any;\\r\\n    readonly listeners: DebugEventListener[];\\r\\n    readonly references: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    readonly providerTokens: any[];\\r\\n}\\r\\n\\r\\ndeclare const DECLARATION_LCONTAINER = 17;\\r\\n\\r\\ndeclare const DECLARATION_VIEW = 16;\\r\\n\\r\\n/**\\r\\n * @deprecated v4.0.0 - Should not be part of public API.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class DefaultIterableDiffer<V> implements IterableDiffer<V>, IterableChanges<V> {\\r\\n    readonly length: number;\\r\\n    readonly collection: V[] | Iterable<V> | null;\\r\\n    private _linkedRecords;\\r\\n    private _unlinkedRecords;\\r\\n    private _previousItHead;\\r\\n    private _itHead;\\r\\n    private _itTail;\\r\\n    private _additionsHead;\\r\\n    private _additionsTail;\\r\\n    private _movesHead;\\r\\n    private _movesTail;\\r\\n    private _removalsHead;\\r\\n    private _removalsTail;\\r\\n    private _identityChangesHead;\\r\\n    private _identityChangesTail;\\r\\n    private _trackByFn;\\r\\n    constructor(trackByFn?: TrackByFunction<V>);\\r\\n    forEachItem(fn: (record: IterableChangeRecord_<V>) => void): void;\\r\\n    forEachOperation(fn: (item: IterableChangeRecord<V>, previousIndex: number | null, currentIndex: number | null) => void): void;\\r\\n    forEachPreviousItem(fn: (record: IterableChangeRecord_<V>) => void): void;\\r\\n    forEachAddedItem(fn: (record: IterableChangeRecord_<V>) => void): void;\\r\\n    forEachMovedItem(fn: (record: IterableChangeRecord_<V>) => void): void;\\r\\n    forEachRemovedItem(fn: (record: IterableChangeRecord_<V>) => void): void;\\r\\n    forEachIdentityChange(fn: (record: IterableChangeRecord_<V>) => void): void;\\r\\n    diff(collection: NgIterable<V> | null | undefined): DefaultIterableDiffer<V> | null;\\r\\n    onDestroy(): void;\\r\\n    check(collection: NgIterable<V>): boolean;\\r\\n    readonly isDirty: boolean;\\r\\n    private _addToRemovals;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @deprecated in v8, delete after v10. This API should be used only be generated code, and that\\r\\n * code should now use ɵɵdefineInjectable instead.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const defineInjectable: typeof ɵɵdefineInjectable;\\r\\n\\r\\ndeclare interface Definition<DF extends DefinitionFactory<any>> {\\r\\n    factory: DF | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Factory for ViewDefinitions/NgModuleDefinitions.\\r\\n * We use a function so we can reexeute it in case an error happens and use the given logger\\r\\n * function to log the error from the definition of the node, which is shown in all browser\\r\\n * logs.\\r\\n */\\r\\ndeclare interface DefinitionFactory<D extends Definition<any>> {\\r\\n    (logger: NodeLogger): D;\\r\\n}\\r\\n\\r\\ndeclare interface DepDef {\\r\\n    flags: ɵDepFlags;\\r\\n    token: any;\\r\\n    tokenKey: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Destroy the existing platform.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function destroyPlatform(): void;\\r\\n\\r\\n/**\\r\\n * Directive decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Directive {\\r\\n    /**\\r\\n     * The CSS selector that identifies this directive in a template\\r\\n     * and triggers instantiation of the directive.\\r\\n     *\\r\\n     * Declare as one of the following:\\r\\n     *\\r\\n     * - `element-name`: Select by element name.\\r\\n     * - `.class`: Select by class name.\\r\\n     * - `[attribute]`: Select by attribute name.\\r\\n     * - `[attribute=value]`: Select by attribute name and value.\\r\\n     * - `:not(sub_selector)`: Select only if the element does not match the `sub_selector`.\\r\\n     * - `selector1, selector2`: Select if either `selector1` or `selector2` matches.\\r\\n     *\\r\\n     * Angular only allows directives to apply on CSS selectors that do not cross\\r\\n     * element boundaries.\\r\\n     *\\r\\n     * For the following template HTML, a directive with an `input[type=text]` selector,\\r\\n     * would be instantiated only on the `<input type=\\\"text\\\">` element.\\r\\n     *\\r\\n     * ```html\\r\\n     * <form>\\r\\n     *   <input type=\\\"text\\\">\\r\\n     *   <input type=\\\"radio\\\">\\r\\n     * <form>\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    selector?: string;\\r\\n    /**\\r\\n     * Enumerates the set of data-bound input properties for a directive\\r\\n     *\\r\\n     * Angular automatically updates input properties during change detection.\\r\\n     * The `inputs` property defines a set of `directiveProperty` to `bindingProperty`\\r\\n     * configuration:\\r\\n     *\\r\\n     * - `directiveProperty` specifies the component property where the value is written.\\r\\n     * - `bindingProperty` specifies the DOM property where the value is read from.\\r\\n     *\\r\\n     * When `bindingProperty` is not provided, it is assumed to be equal to `directiveProperty`.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * The following example creates a component with two data-bound properties.\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Component({\\r\\n     *   selector: 'bank-account',\\r\\n     *   inputs: ['bankName', 'id: account-id'],\\r\\n     *   template: `\\r\\n     *     Bank Name: {{bankName}}\\r\\n     *     Account Id: {{id}}\\r\\n     *   `\\r\\n     * })\\r\\n     * class BankAccount {\\r\\n     *   bankName: string;\\r\\n     *   id: string;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    inputs?: string[];\\r\\n    /**\\r\\n     * Enumerates the set of event-bound output properties.\\r\\n     *\\r\\n     * When an output property emits an event, an event handler attached to that event\\r\\n     * in the template is invoked.\\r\\n     *\\r\\n     * The `outputs` property defines a set of `directiveProperty` to `bindingProperty`\\r\\n     * configuration:\\r\\n     *\\r\\n     * - `directiveProperty` specifies the component property that emits events.\\r\\n     * - `bindingProperty` specifies the DOM property the event handler is attached to.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Component({\\r\\n     *   selector: 'child-dir',\\r\\n     *   outputs: [ 'bankNameChange' ]\\r\\n     *   template: `<input (input)=\\\"bankNameChange.emit($event.target.value)\\\" />`\\r\\n     * })\\r\\n     * class ChildDir {\\r\\n     *  bankNameChange: EventEmitter<string> = new EventEmitter<string>();\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'main',\\r\\n     *   template: `\\r\\n     *     {{ bankName }} <child-dir (bankNameChange)=\\\"onBankNameChange($event)\\\"></child-dir>\\r\\n     *   `\\r\\n     * })\\r\\n     * class MainComponent {\\r\\n     *  bankName: string;\\r\\n     *\\r\\n     *   onBankNameChange(bankName: string) {\\r\\n     *     this.bankName = bankName;\\r\\n     *   }\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    outputs?: string[];\\r\\n    /**\\r\\n     * Configures the [injector](guide/glossary#injector) of this\\r\\n     * directive or component with a [token](guide/glossary#di-token)\\r\\n     * that maps to a [provider](guide/glossary#provider) of a dependency.\\r\\n     */\\r\\n    providers?: Provider[];\\r\\n    /**\\r\\n     * Defines the name that can be used in the template to assign this directive to a variable.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ```ts\\r\\n     * @Directive({\\r\\n     *   selector: 'child-dir',\\r\\n     *   exportAs: 'child'\\r\\n     * })\\r\\n     * class ChildDir {\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'main',\\r\\n     *   template: `<child-dir #c=\\\"child\\\"></child-dir>`\\r\\n     * })\\r\\n     * class MainComponent {\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    exportAs?: string;\\r\\n    /**\\r\\n     * Configures the queries that will be injected into the directive.\\r\\n     *\\r\\n     * Content queries are set before the `ngAfterContentInit` callback is called.\\r\\n     * View queries are set before the `ngAfterViewInit` callback is called.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * The following example shows how queries are defined\\r\\n     * and when their results are available in lifecycle hooks:\\r\\n     *\\r\\n     * ```ts\\r\\n     * @Component({\\r\\n     *   selector: 'someDir',\\r\\n     *   queries: {\\r\\n     *     contentChildren: new ContentChildren(ChildDirective),\\r\\n     *     viewChildren: new ViewChildren(ChildDirective)\\r\\n     *   },\\r\\n     *   template: '<child-directive></child-directive>'\\r\\n     * })\\r\\n     * class SomeDir {\\r\\n     *   contentChildren: QueryList<ChildDirective>,\\r\\n     *   viewChildren: QueryList<ChildDirective>\\r\\n     *\\r\\n     *   ngAfterContentInit() {\\r\\n     *     // contentChildren is set\\r\\n     *   }\\r\\n     *\\r\\n     *   ngAfterViewInit() {\\r\\n     *     // viewChildren is set\\r\\n     *   }\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    queries?: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    /**\\r\\n     * Maps class properties to host element bindings for properties,\\r\\n     * attributes, and events, using a set of key-value pairs.\\r\\n     *\\r\\n     * Angular automatically checks host property bindings during change detection.\\r\\n     * If a binding changes, Angular updates the directive's host element.\\r\\n     *\\r\\n     * When the key is a property of the host element, the property value is\\r\\n     * the propagated to the specified DOM property.\\r\\n     *\\r\\n     * When the key is a static attribute in the DOM, the attribute value\\r\\n     * is propagated to the specified property in the host element.\\r\\n     *\\r\\n     * For event handling:\\r\\n     * - The key is the DOM event that the directive listens to.\\r\\n     * To listen to global events, add the target to the event name.\\r\\n     * The target can be `window`, `document` or `body`.\\r\\n     * - The value is the statement to execute when the event occurs. If the\\r\\n     * statement evaluates to `false`, then `preventDefault` is applied on the DOM\\r\\n     * event. A handler method can refer to the `$event` local variable.\\r\\n     *\\r\\n     */\\r\\n    host?: {\\r\\n        [key: string]: string;\\r\\n    };\\r\\n    /**\\r\\n     * If true, this directive/component will be skipped by the AOT compiler and so will always be\\r\\n     * compiled using JIT.\\r\\n     *\\r\\n     * This exists to support future Ivy work and has no effect currently.\\r\\n     */\\r\\n    jit?: true;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the Directive metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Directive: DirectiveDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Directive decorator / constructor function.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface DirectiveDecorator {\\r\\n    /**\\r\\n     * Decorator that marks a class as an Angular directive.\\r\\n     * You can define your own directives to attach custom behavior to elements in the DOM.\\r\\n     *\\r\\n     * The options provide configuration metadata that determines\\r\\n     * how the directive should be processed, instantiated and used at\\r\\n     * runtime.\\r\\n     *\\r\\n     * Directive classes, like component classes, can implement\\r\\n     * [life-cycle hooks](guide/lifecycle-hooks) to influence their configuration and behavior.\\r\\n     *\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * To define a directive, mark the class with the decorator and provide metadata.\\r\\n     *\\r\\n     * ```ts\\r\\n     * import {Directive} from '@angular/core';\\r\\n     *\\r\\n     * @Directive({\\r\\n     *   selector: 'my-directive',\\r\\n     * })\\r\\n     * export class MyDirective {\\r\\n     * ...\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * ### Declaring directives\\r\\n     *\\r\\n     * Directives are [declarables](guide/glossary#declarable).\\r\\n     * They must be declared by an NgModule\\r\\n     * in order to be usable in an app.\\r\\n     *\\r\\n     * A directive must belong to exactly one NgModule. Do not re-declare\\r\\n     * a directive imported from another module.\\r\\n     * List the directive class in the `declarations` field of an NgModule.\\r\\n     *\\r\\n     * ```ts\\r\\n     * declarations: [\\r\\n     *  AppComponent,\\r\\n     *  MyDirective\\r\\n     * ],\\r\\n     * ```\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    (obj?: Directive): TypeDecorator;\\r\\n    /**\\r\\n     * See the `Directive` decorator.\\r\\n     */\\r\\n    new (obj?: Directive): Directive;\\r\\n}\\r\\n\\r\\ndeclare interface DirectiveDefFeature {\\r\\n    <T>(directiveDef: ɵDirectiveDef<T>): void;\\r\\n    /**\\r\\n     * Marks a feature as something that {@link InheritDefinitionFeature} will execute\\r\\n     * during inheritance.\\r\\n     *\\r\\n     * NOTE: DO NOT SET IN ROOT OF MODULE! Doing so will result in tree-shakers/bundlers\\r\\n     * identifying the change as a side effect, and the feature will be included in\\r\\n     * every bundle.\\r\\n     */\\r\\n    ngInherit?: true;\\r\\n}\\r\\n\\r\\ndeclare type DirectiveDefList = (ɵDirectiveDef<any> | ɵComponentDef<any>)[];\\r\\n\\r\\n/**\\r\\n * Type used for directiveDefs on component definition.\\r\\n *\\r\\n * The function is necessary to be able to support forward declarations.\\r\\n */\\r\\ndeclare type DirectiveDefListOrFactory = (() => DirectiveDefList) | DirectiveDefList;\\r\\n\\r\\ndeclare type DirectiveInstance = {};\\r\\n\\r\\ndeclare type DirectiveTypeList = (ɵDirectiveType<any> | ɵComponentType<any> | Type<any>)[];\\r\\n\\r\\ndeclare type DirectiveTypesOrFactory = (() => DirectiveTypeList) | DirectiveTypeList;\\r\\n\\r\\ndeclare interface DisposableFn {\\r\\n    (): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Hook for manual bootstrapping of the application instead of using bootstrap array in @NgModule\\r\\n * annotation.\\r\\n *\\r\\n * Reference to the current application is provided as a parameter.\\r\\n *\\r\\n * See [\\\"Bootstrapping\\\"](guide/bootstrapping) and [\\\"Entry components\\\"](guide/entry-components).\\r\\n *\\r\\n * @usageNotes\\r\\n * ```typescript\\r\\n * class AppModule implements DoBootstrap {\\r\\n *   ngDoBootstrap(appRef: ApplicationRef) {\\r\\n *     appRef.bootstrap(AppComponent); // Or some other component\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface DoBootstrap {\\r\\n    ngDoBootstrap(appRef: ApplicationRef): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A lifecycle hook that invokes a custom change-detection function for a directive,\\r\\n * in addition to the check performed by the default change-detector.\\r\\n *\\r\\n * The default change-detection algorithm looks for differences by comparing\\r\\n * bound-property values by reference across change detection runs. You can use this\\r\\n * hook to check for and respond to changes by some other means.\\r\\n *\\r\\n * When the default change detector detects changes, it invokes `ngOnChanges()` if supplied,\\r\\n * regardless of whether you perform additional change detection.\\r\\n * Typically, you should not use both `DoCheck` and `OnChanges` to respond to\\r\\n * changes on the same input.\\r\\n *\\r\\n * @see `OnChanges`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface\\r\\n * to invoke it own change-detection cycle.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='DoCheck'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface DoCheck {\\r\\n    /**\\r\\n       * A callback method that performs change-detection, invoked\\r\\n       * after the default change-detector runs.\\r\\n       * See `KeyValueDiffers` and `IterableDiffers` for implementing\\r\\n       * custom change checking for collections.\\r\\n       *\\r\\n       */\\r\\n    ngDoCheck(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marks that the next string is for element.\\r\\n *\\r\\n * See `I18nMutateOpCodes` documentation.\\r\\n */\\r\\ndeclare const ELEMENT_MARKER: ELEMENT_MARKER;\\r\\n\\r\\ndeclare interface ELEMENT_MARKER {\\r\\n    marker: 'element';\\r\\n}\\r\\n\\r\\ndeclare interface ElementDef {\\r\\n    name: string | null;\\r\\n    ns: string | null;\\r\\n    /** ns, name, value */\\r\\n    attrs: [string, string, string][] | null;\\r\\n    template: ɵViewDefinition | null;\\r\\n    componentProvider: NodeDef | null;\\r\\n    componentRendererType: RendererType2 | null;\\r\\n    componentView: ViewDefinitionFactory | null;\\r\\n    /**\\r\\n     * visible public providers for DI in the view,\\r\\n     * as see from this element. This does not include private providers.\\r\\n     */\\r\\n    publicProviders: {\\r\\n        [tokenKey: string]: NodeDef;\\r\\n    } | null;\\r\\n    /**\\r\\n     * same as visiblePublicProviders, but also includes private providers\\r\\n     * that are located on this element.\\r\\n     */\\r\\n    allProviders: {\\r\\n        [tokenKey: string]: NodeDef;\\r\\n    } | null;\\r\\n    handleEvent: ElementHandleEventFn | null;\\r\\n}\\r\\n\\r\\ndeclare interface ElementHandleEventFn {\\r\\n    (view: ViewData, eventName: string, event: any): boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A wrapper around a native element inside of a View.\\r\\n *\\r\\n * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM\\r\\n * element.\\r\\n *\\r\\n * @security Permitting direct access to the DOM can make your application more vulnerable to\\r\\n * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the\\r\\n * [Security Guide](http://g.co/ng/security).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ElementRef<T extends any = any> {\\r\\n    /**\\r\\n     * The underlying native element or `null` if direct access to native elements is not supported\\r\\n     * (e.g. when the application runs in a web worker).\\r\\n     *\\r\\n     * <div class=\\\"callout is-critical\\\">\\r\\n     *   <header>Use with caution</header>\\r\\n     *   <p>\\r\\n     *    Use this API as the last resort when direct access to DOM is needed. Use templating and\\r\\n     *    data-binding provided by Angular instead. Alternatively you can take a look at {@link\\r\\n     * Renderer2}\\r\\n     *    which provides API that can safely be used even when direct access to native elements is not\\r\\n     *    supported.\\r\\n     *   </p>\\r\\n     *   <p>\\r\\n     *    Relying on direct DOM access creates tight coupling between your application and rendering\\r\\n     *    layers which will make it impossible to separate the two and deploy your application into a\\r\\n     *    web worker.\\r\\n     *   </p>\\r\\n     * </div>\\r\\n     *\\r\\n     */\\r\\n    nativeElement: T;\\r\\n    constructor(nativeElement: T);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents an Angular [view](guide/glossary#view) in a view container.\\r\\n * An [embedded view](guide/glossary#view-tree) can be referenced from a component\\r\\n * other than the hosting component whose template defines it, or it can be defined\\r\\n * independently by a `TemplateRef`.\\r\\n *\\r\\n * Properties of elements in a view can change, but the structure (number and order) of elements in\\r\\n * a view cannot. Change the structure of elements by inserting, moving, or\\r\\n * removing nested views in a view container.\\r\\n *\\r\\n * @see `ViewContainerRef`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * The following template breaks down into two separate `TemplateRef` instances,\\r\\n * an outer one and an inner one.\\r\\n *\\r\\n * ```\\r\\n * Count: {{items.length}}\\r\\n * <ul>\\r\\n *   <li *ngFor=\\\"let  item of items\\\">{{item}}</li>\\r\\n * </ul>\\r\\n * ```\\r\\n *\\r\\n * This is the outer `TemplateRef`:\\r\\n *\\r\\n * ```\\r\\n * Count: {{items.length}}\\r\\n * <ul>\\r\\n *   <ng-template ngFor let-item [ngForOf]=\\\"items\\\"></ng-template>\\r\\n * </ul>\\r\\n * ```\\r\\n *\\r\\n * This is the inner `TemplateRef`:\\r\\n *\\r\\n * ```\\r\\n *   <li>{{item}}</li>\\r\\n * ```\\r\\n *\\r\\n * The outer and inner `TemplateRef` instances are assembled into views as follows:\\r\\n *\\r\\n * ```\\r\\n * <!-- ViewRef: outer-0 -->\\r\\n * Count: 2\\r\\n * <ul>\\r\\n *   <ng-template view-container-ref></ng-template>\\r\\n *   <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->\\r\\n *   <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->\\r\\n * </ul>\\r\\n * <!-- /ViewRef: outer-0 -->\\r\\n * ```\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class EmbeddedViewRef<C> extends ViewRef {\\r\\n    /**\\r\\n     * The context for this view, inherited from the anchor element.\\r\\n     */\\r\\n    abstract readonly context: C;\\r\\n    /**\\r\\n     * The root nodes for this embedded view.\\r\\n     */\\r\\n    abstract readonly rootNodes: any[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Disable Angular's development mode, which turns off assertions and other\\r\\n * checks within the framework.\\r\\n *\\r\\n * One important assertion this disables verifies that a change detection pass\\r\\n * does not result in additional changes to any bindings (also known as\\r\\n * unidirectional data flow).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function enableProdMode(): void;\\r\\n\\r\\n\\r\\n/**\\r\\n * Provides a hook for centralized exception handling.\\r\\n *\\r\\n * The default implementation of `ErrorHandler` prints error messages to the `console`. To\\r\\n * intercept error handling, write a custom exception handler that replaces this default as\\r\\n * appropriate for your app.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * class MyErrorHandler implements ErrorHandler {\\r\\n *   handleError(error) {\\r\\n *     // do something with the exception\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\\r\\n * })\\r\\n * class MyModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ErrorHandler {\\r\\n    handleError(error: any): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Use in components with the `@Output` directive to emit custom events\\r\\n * synchronously or asynchronously, and register handlers for those events\\r\\n * by subscribing to an instance.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * Extends\\r\\n * [RxJS `Subject`](https://rxjs.dev/api/index/class/Subject)\\r\\n * for Angular by adding the `emit()` method.\\r\\n *\\r\\n * In the following example, a component defines two output properties\\r\\n * that create event emitters. When the title is clicked, the emitter\\r\\n * emits an open or close event to toggle the current visibility state.\\r\\n *\\r\\n * ```html\\r\\n * @Component({\\r\\n *   selector: 'zippy',\\r\\n *   template: `\\r\\n *   <div class=\\\"zippy\\\">\\r\\n *     <div (click)=\\\"toggle()\\\">Toggle</div>\\r\\n *     <div [hidden]=\\\"!visible\\\">\\r\\n *       <ng-content></ng-content>\\r\\n *     </div>\\r\\n *  </div>`})\\r\\n * export class Zippy {\\r\\n *   visible: boolean = true;\\r\\n *   @Output() open: EventEmitter<any> = new EventEmitter();\\r\\n *   @Output() close: EventEmitter<any> = new EventEmitter();\\r\\n *\\r\\n *   toggle() {\\r\\n *     this.visible = !this.visible;\\r\\n *     if (this.visible) {\\r\\n *       this.open.emit(null);\\r\\n *     } else {\\r\\n *       this.close.emit(null);\\r\\n *     }\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * Access the event object with the `$event` argument passed to the output event\\r\\n * handler:\\r\\n *\\r\\n * ```html\\r\\n * <zippy (open)=\\\"onOpen($event)\\\" (close)=\\\"onClose($event)\\\"></zippy>\\r\\n * ```\\r\\n *\\r\\n * @see [Observables in Angular](guide/observables-in-angular)\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class EventEmitter<T extends any> extends Subject<T> {\\r\\n    /**\\r\\n     * Creates an instance of this class that can\\r\\n     * deliver events synchronously or asynchronously.\\r\\n     *\\r\\n     * @param isAsync When true, deliver events asynchronously.\\r\\n     *\\r\\n     */\\r\\n    constructor(isAsync?: boolean);\\r\\n    /**\\r\\n     * Emits an event containing a given value.\\r\\n     * @param value The value to emit.\\r\\n     */\\r\\n    emit(value?: T): void;\\r\\n    /**\\r\\n     * Registers handlers for events emitted by this instance.\\r\\n     * @param generatorOrNext When supplied, a custom handler for emitted events.\\r\\n     * @param error When supplied, a custom handler for an error notification\\r\\n     * from this emitter.\\r\\n     * @param complete When supplied, a custom handler for a completion\\r\\n     * notification from this emitter.\\r\\n     */\\r\\n    subscribe(generatorOrNext?: any, error?: any, complete?: any): Subscription;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value of another `useExisting` token.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ExistingProvider'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ExistingProvider extends ExistingSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value of another `useExisting` token.\\r\\n *\\r\\n * @see `ExistingProvider`\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ExistingSansProvider {\\r\\n    /**\\r\\n     * Existing `token` to return. (Equivalent to `injector.get(useExisting)`)\\r\\n     */\\r\\n    useExisting: any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Set of instructions used to process host bindings efficiently.\\r\\n *\\r\\n * See VIEW_DATA.md for more information.\\r\\n */\\r\\ndeclare interface ExpandoInstructions extends Array<number | HostBindingsFunction<any> | null> {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Definition of what a factory function should look like.\\r\\n */\\r\\ndeclare type FactoryFn<T> = {\\r\\n    /**\\r\\n     * Subclasses without an explicit constructor call through to the factory of their base\\r\\n     * definition, providing it with their own constructor to instantiate.\\r\\n     */\\r\\n    <U extends T>(t: Type<U>): U;\\r\\n    /**\\r\\n     * If no constructor to instantiate is provided, an instance of type T itself is created.\\r\\n     */\\r\\n    (t?: undefined): T;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value by invoking a `useFactory` function.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='FactoryProvider'}\\r\\n *\\r\\n * Dependencies can also be marked as optional:\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='FactoryProviderOptionalDeps'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface FactoryProvider extends FactorySansProvider {\\r\\n    /**\\r\\n     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value by invoking a `useFactory` function.\\r\\n *\\r\\n * @see `FactoryProvider`\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface FactorySansProvider {\\r\\n    /**\\r\\n     * A function to invoke to create a value for this `token`. The function is invoked with\\r\\n     * resolved values of `token`s in the `deps` field.\\r\\n     */\\r\\n    useFactory: Function;\\r\\n    /**\\r\\n     * A list of `token`s to be resolved by the injector. The list of values is then\\r\\n     * used as arguments to the `useFactory` function.\\r\\n     */\\r\\n    deps?: any[];\\r\\n}\\r\\n\\r\\ndeclare const FLAGS = 2;\\r\\n\\r\\n/**\\r\\n * Allows to refer to references which are not yet defined.\\r\\n *\\r\\n * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\\r\\n * DI is declared, but not yet defined. It is also used when the `token` which we use when creating\\r\\n * a query is not yet defined.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function forwardRef(forwardRefFn: ForwardRefFn): Type<any>;\\r\\n\\r\\n/**\\r\\n * An interface that a function passed into {@link forwardRef} has to implement.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref_fn'}\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ForwardRefFn {\\r\\n    (): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const getDebugNode: (nativeNode: any) => DebugNode | null;\\r\\n\\r\\n/**\\r\\n * Returns the NgModuleFactory with the given id, if it exists and has been loaded.\\r\\n * Factories for modules that do not specify an `id` cannot be retrieved. Throws if the module\\r\\n * cannot be found.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const getModuleFactory: (id: string) => NgModuleFactory<any>;\\r\\n\\r\\n/**\\r\\n * Returns the current platform.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function getPlatform(): PlatformRef | null;\\r\\n\\r\\n/**\\r\\n * Adapter interface for retrieving the `Testability` service associated for a\\r\\n * particular context.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface GetTestability {\\r\\n    addToWindow(registry: TestabilityRegistry): void;\\r\\n    findTestabilityInTree(registry: TestabilityRegistry, elem: any, findInAncestors: boolean): Testability | null;\\r\\n}\\r\\n\\r\\ndeclare type GlobalTargetName = 'document' | 'window' | 'body';\\r\\n\\r\\ndeclare type GlobalTargetResolver = (element: any) => {\\r\\n    name: GlobalTargetName;\\r\\n    target: EventTarget;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Array of hooks that should be executed for a view and their directive indices.\\r\\n *\\r\\n * For each node of the view, the following data is stored:\\r\\n * 1) Node index (optional)\\r\\n * 2) A series of number/function pairs where:\\r\\n *  - even indices are directive indices\\r\\n *  - odd indices are hook functions\\r\\n *\\r\\n * Special cases:\\r\\n *  - a negative directive index flags an init hook (ngOnInit, ngAfterContentInit, ngAfterViewInit)\\r\\n */\\r\\ndeclare type HookData = (number | (() => void))[];\\r\\n\\r\\ndeclare const HOST = 0;\\r\\n\\r\\n/**\\r\\n * Type of the Host metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Host {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Host decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Host: HostDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the HostBinding metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface HostBinding {\\r\\n    /**\\r\\n     * The DOM property that is bound to a data property.\\r\\n     */\\r\\n    hostPropertyName?: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const HostBinding: HostBindingDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the HostBinding decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface HostBindingDecorator {\\r\\n    /**\\r\\n     * Decorator that marks a DOM property as a host-binding property and supplies configuration\\r\\n     * metadata.\\r\\n     * Angular automatically checks host property bindings during change detection, and\\r\\n     * if a binding changes it updates the host element of the directive.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * The following example creates a directive that sets the `valid` and `invalid`\\r\\n     * properties on the DOM element that has an `ngModel` directive on it.\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Directive({selector: '[ngModel]'})\\r\\n     * class NgModelStatus {\\r\\n     *   constructor(public control: NgModel) {}\\r\\n     *   @HostBinding('class.valid') get valid() { return this.control.valid; }\\r\\n     *   @HostBinding('class.invalid') get invalid() { return this.control.invalid; }\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'app',\\r\\n     *   template: `<input [(ngModel)]=\\\"prop\\\">`,\\r\\n     * })\\r\\n     * class App {\\r\\n     *   prop;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    (hostPropertyName?: string): any;\\r\\n    new (hostPropertyName?: string): any;\\r\\n}\\r\\n\\r\\ndeclare type HostBindingsFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U, elementIndex: number) => void;\\r\\n\\r\\n/**\\r\\n * Type of the Host decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface HostDecorator {\\r\\n    /**\\r\\n     * Parameter decorator on a view-provider parameter of a class constructor\\r\\n     * that tells the DI framework to resolve the view by checking injectors of child\\r\\n     * elements, and stop when reaching the host element of the current component.\\r\\n     *\\r\\n     * For an extended example, see\\r\\n     * [\\\"Dependency Injection Guide\\\"](guide/dependency-injection-in-action#optional).\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * The following shows use with the `@Optional` decorator, and allows for a null result.\\r\\n     *\\r\\n     * <code-example path=\\\"core/di/ts/metadata_spec.ts\\\" region=\\\"Host\\\">\\r\\n     * </code-example>\\r\\n     */\\r\\n    (): any;\\r\\n    new (): Host;\\r\\n}\\r\\n\\r\\n/** See CreateComponentOptions.hostFeatures */\\r\\ndeclare type HostFeature = (<T>(component: T, componentDef: ɵComponentDef<T>) => void);\\r\\n\\r\\n/**\\r\\n * Type of the HostListener metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface HostListener {\\r\\n    /**\\r\\n     * The DOM event to listen for.\\r\\n     */\\r\\n    eventName?: string;\\r\\n    /**\\r\\n     * A set of arguments to pass to the handler method when the event occurs.\\r\\n     */\\r\\n    args?: string[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Decorator that binds a DOM event to a host listener and supplies configuration metadata.\\r\\n * Angular invokes the supplied handler method when the host element emits the specified event,\\r\\n * and updates the bound element with the result.\\r\\n *\\r\\n * If the handler method returns false, applies `preventDefault` on the bound element.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * The following example declares a directive\\r\\n * that attaches a click listener to a button and counts clicks.\\r\\n *\\r\\n * ```ts\\r\\n * @Directive({selector: 'button[counting]'})\\r\\n * class CountClicks {\\r\\n *   numberOfClicks = 0;\\r\\n *\\r\\n *   @HostListener('click', ['$event.target'])\\r\\n *   onClick(btn) {\\r\\n *     console.log('button', btn, 'number of clicks:', this.numberOfClicks++);\\r\\n *  }\\r\\n * }\\r\\n *\\r\\n * @Component({\\r\\n *   selector: 'app',\\r\\n *   template: '<button counting>Increment</button>',\\r\\n * })\\r\\n * class App {}\\r\\n * ```\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const HostListener: HostListenerDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the HostListener decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface HostListenerDecorator {\\r\\n    /**\\r\\n     * Decorator that declares a DOM event to listen for,\\r\\n     * and provides a handler method to run when that event occurs.\\r\\n     */\\r\\n    (eventName: string, args?: string[]): any;\\r\\n    new (eventName: string, args?: string[]): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Array storing OpCode for dynamically creating `i18n` blocks.\\r\\n *\\r\\n * Example:\\r\\n * ```ts\\r\\n * <I18nCreateOpCode>[\\r\\n *   // For adding text nodes\\r\\n *   // ---------------------\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[index++] = document.createTextNode('abc');\\r\\n *   //   lView[1].insertBefore(node, lView[2]);\\r\\n *   'abc', 1 << SHIFT_PARENT | 2 << SHIFT_REF | InsertBefore,\\r\\n *\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[index++] = document.createTextNode('xyz');\\r\\n *   //   lView[1].appendChild(node);\\r\\n *   'xyz', 1 << SHIFT_PARENT | AppendChild,\\r\\n *\\r\\n *   // For adding element nodes\\r\\n *   // ---------------------\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[index++] = document.createElement('div');\\r\\n *   //   lView[1].insertBefore(node, lView[2]);\\r\\n *   ELEMENT_MARKER, 'div', 1 << SHIFT_PARENT | 2 << SHIFT_REF | InsertBefore,\\r\\n *\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[index++] = document.createElement('div');\\r\\n *   //   lView[1].appendChild(node);\\r\\n *   ELEMENT_MARKER, 'div', 1 << SHIFT_PARENT | AppendChild,\\r\\n *\\r\\n *   // For adding comment nodes\\r\\n *   // ---------------------\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[index++] = document.createComment('');\\r\\n *   //   lView[1].insertBefore(node, lView[2]);\\r\\n *   COMMENT_MARKER, '', 1 << SHIFT_PARENT | 2 << SHIFT_REF | InsertBefore,\\r\\n *\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[index++] = document.createComment('');\\r\\n *   //   lView[1].appendChild(node);\\r\\n *   COMMENT_MARKER, '', 1 << SHIFT_PARENT | AppendChild,\\r\\n *\\r\\n *   // For moving existing nodes to a different location\\r\\n *   // --------------------------------------------------\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[1];\\r\\n *   //   lView[2].insertBefore(node, lView[3]);\\r\\n *   1 << SHIFT_REF | Select, 2 << SHIFT_PARENT | 3 << SHIFT_REF | InsertBefore,\\r\\n *\\r\\n *   // Equivalent to:\\r\\n *   //   const node = lView[1];\\r\\n *   //   lView[2].appendChild(node);\\r\\n *   1 << SHIFT_REF | Select, 2 << SHIFT_PARENT | AppendChild,\\r\\n *\\r\\n *   // For removing existing nodes\\r\\n *   // --------------------------------------------------\\r\\n *   //   const node = lView[1];\\r\\n *   //   removeChild(tView.data(1), node, lView);\\r\\n *   1 << SHIFT_REF | Remove,\\r\\n *\\r\\n *   // For writing attributes\\r\\n *   // --------------------------------------------------\\r\\n *   //   const node = lView[1];\\r\\n *   //   node.setAttribute('attr', 'value');\\r\\n *   1 << SHIFT_REF | Select, 'attr', 'value'\\r\\n *            // NOTE: Select followed by two string (vs select followed by OpCode)\\r\\n * ];\\r\\n * ```\\r\\n * NOTE:\\r\\n *   - `index` is initial location where the extra nodes should be stored in the EXPANDO section of\\r\\n * `LVIewData`.\\r\\n *\\r\\n * See: `applyI18nCreateOpCodes`;\\r\\n */\\r\\ndeclare interface I18nMutateOpCodes extends Array<number | string | ELEMENT_MARKER | COMMENT_MARKER | null> {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Stores DOM operations which need to be applied to update DOM render tree due to changes in\\r\\n * expressions.\\r\\n *\\r\\n * The basic idea is that `i18nExp` OpCodes capture expression changes and update a change\\r\\n * mask bit. (Bit 1 for expression 1, bit 2 for expression 2 etc..., bit 32 for expression 32 and\\r\\n * higher.) The OpCodes then compare its own change mask against the expression change mask to\\r\\n * determine if the OpCodes should execute.\\r\\n *\\r\\n * These OpCodes can be used by both the i18n block as well as ICU sub-block.\\r\\n *\\r\\n * ## Example\\r\\n *\\r\\n * Assume\\r\\n * ```ts\\r\\n *   if (rf & RenderFlags.Update) {\\r\\n *    i18nExp(ctx.exp1); // If changed set mask bit 1\\r\\n *    i18nExp(ctx.exp2); // If changed set mask bit 2\\r\\n *    i18nExp(ctx.exp3); // If changed set mask bit 3\\r\\n *    i18nExp(ctx.exp4); // If changed set mask bit 4\\r\\n *    i18nApply(0);            // Apply all changes by executing the OpCodes.\\r\\n *  }\\r\\n * ```\\r\\n * We can assume that each call to `i18nExp` sets an internal `changeMask` bit depending on the\\r\\n * index of `i18nExp`.\\r\\n *\\r\\n * ### OpCodes\\r\\n * ```ts\\r\\n * <I18nUpdateOpCodes>[\\r\\n *   // The following OpCodes represent: `<div i18n-title=\\\"pre{{exp1}}in{{exp2}}post\\\">`\\r\\n *   // If `changeMask & 0b11`\\r\\n *   //        has changed then execute update OpCodes.\\r\\n *   //        has NOT changed then skip `7` values and start processing next OpCodes.\\r\\n *   0b11, 7,\\r\\n *   // Concatenate `newValue = 'pre'+lView[bindIndex-4]+'in'+lView[bindIndex-3]+'post';`.\\r\\n *   'pre', -4, 'in', -3, 'post',\\r\\n *   // Update attribute: `elementAttribute(1, 'title', sanitizerFn(newValue));`\\r\\n *   1 << SHIFT_REF | Attr, 'title', sanitizerFn,\\r\\n *\\r\\n *   // The following OpCodes represent: `<div i18n>Hello {{exp3}}!\\\">`\\r\\n *   // If `changeMask & 0b100`\\r\\n *   //        has changed then execute update OpCodes.\\r\\n *   //        has NOT changed then skip `4` values and start processing next OpCodes.\\r\\n *   0b100, 4,\\r\\n *   // Concatenate `newValue = 'Hello ' + lView[bindIndex -2] + '!';`.\\r\\n *   'Hello ', -2, '!',\\r\\n *   // Update text: `lView[1].textContent = newValue;`\\r\\n *   1 << SHIFT_REF | Text,\\r\\n *\\r\\n *   // The following OpCodes represent: `<div i18n>{exp4, plural, ... }\\\">`\\r\\n *   // If `changeMask & 0b1000`\\r\\n *   //        has changed then execute update OpCodes.\\r\\n *   //        has NOT changed then skip `4` values and start processing next OpCodes.\\r\\n *   0b1000, 4,\\r\\n *   // Concatenate `newValue = lView[bindIndex -1];`.\\r\\n *   -1,\\r\\n *   // Switch ICU: `icuSwitchCase(lView[1], 0, newValue);`\\r\\n *   0 << SHIFT_ICU | 1 << SHIFT_REF | IcuSwitch,\\r\\n *\\r\\n *   // Note `changeMask & -1` is always true, so the IcuUpdate will always execute.\\r\\n *   -1, 1,\\r\\n *   // Update ICU: `icuUpdateCase(lView[1], 0);`\\r\\n *   0 << SHIFT_ICU | 1 << SHIFT_REF | IcuUpdate,\\r\\n *\\r\\n * ];\\r\\n * ```\\r\\n *\\r\\n */\\r\\ndeclare interface I18nUpdateOpCodes extends Array<string | number | SanitizerFn | null> {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Defines the ICU type of `select` or `plural`\\r\\n */\\r\\ndeclare const enum IcuType {\\r\\n    select = 0,\\r\\n    plural = 1\\r\\n}\\r\\n\\r\\n/**\\r\\n * This array contains information about input properties that\\r\\n * need to be set once from attribute data. It's ordered by\\r\\n * directive index (relative to element) so it's simple to\\r\\n * look up a specific directive's initial input data.\\r\\n *\\r\\n * Within each sub-array:\\r\\n *\\r\\n * i+0: attribute name\\r\\n * i+1: minified/internal input name\\r\\n * i+2: initial value\\r\\n *\\r\\n * If a directive on a node does not have any input properties\\r\\n * that should be set from attributes, its index is set to null\\r\\n * to avoid a sparse array.\\r\\n *\\r\\n * e.g. [null, ['role-min', 'minified-input', 'button']]\\r\\n */\\r\\ndeclare type InitialInputData = (InitialInputs | null)[];\\r\\n\\r\\n/**\\r\\n * Used by InitialInputData to store input properties\\r\\n * that should be set once from attributes.\\r\\n *\\r\\n * i+0: attribute name\\r\\n * i+1: minified/internal input name\\r\\n * i+2: initial value\\r\\n *\\r\\n * e.g. ['role-min', 'minified-input', 'button']\\r\\n */\\r\\ndeclare type InitialInputs = string[];\\r\\n\\r\\n/**\\r\\n * Type of the Inject metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Inject {\\r\\n    /**\\r\\n     * A [DI token](guide/glossary#di-token) that maps to the dependency to be injected.\\r\\n     */\\r\\n    token: any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Inject decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Inject: InjectDecorator;\\r\\n\\r\\n/**\\r\\n * Injects a token from the currently active injector.\\r\\n *\\r\\n * Must be used in the context of a factory function such as one defined for an\\r\\n * `InjectionToken`. Throws an error if not called from such a context.\\r\\n *\\r\\n * Within such a factory function, using this function to request injection of a dependency\\r\\n * is faster and more type-safe than providing an additional array of dependencies\\r\\n * (as has been common with `useFactory` providers).\\r\\n *\\r\\n * @param token The injection token for the dependency to be injected.\\r\\n * @param flags Optional flags that control how injection is executed.\\r\\n * The flags correspond to injection strategies that can be specified with\\r\\n * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.\\r\\n * @returns True if injection is successful, null otherwise.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const inject: typeof ɵɵinject;\\r\\n\\r\\n/**\\r\\n * Type of the Injectable metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Injectable {\\r\\n    /**\\r\\n     * Determines which injectors will provide the injectable,\\r\\n     * by either associating it with an @NgModule or other `InjectorType`,\\r\\n     * or by specifying that this injectable should be provided in the:\\r\\n     * - 'root' injector, which will be the application-level injector in most apps.\\r\\n     * - 'platform' injector, which would be the special singleton platform injector shared by all\\r\\n     * applications on the page.\\r\\n     * - 'any' injector, which would be the injector which receives the resolution. (Note this only\\r\\n     * works on NgModule Injectors and not on Element Injector)\\r\\n     */\\r\\n    providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Injectable decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Injectable: InjectableDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Injectable decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface InjectableDecorator {\\r\\n    /**\\r\\n     * Decorator that marks a class as available to be\\r\\n     * provided and injected as a dependency.\\r\\n     *\\r\\n     * @see [Introduction to Services and DI](guide/architecture-services)\\r\\n     * @see [Dependency Injection Guide](guide/dependency-injection)\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * Marking a class with `@Injectable` ensures that the compiler\\r\\n     * will generate the necessary metadata to create the class's\\r\\n     * dependencies when the class is injected.\\r\\n     *\\r\\n     * The following example shows how a service class is properly\\r\\n     *  marked so that a supporting service can be injected upon creation.\\r\\n     *\\r\\n     * <code-example path=\\\"core/di/ts/metadata_spec.ts\\\" region=\\\"Injectable\\\"></code-example>\\r\\n     *\\r\\n     */\\r\\n    (): TypeDecorator;\\r\\n    (options?: {\\r\\n        providedIn: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n    } & InjectableProvider): TypeDecorator;\\r\\n    new (): Injectable;\\r\\n    new (options?: {\\r\\n        providedIn: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n    } & InjectableProvider): Injectable;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Injectable providers used in `@Injectable` decorator.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type InjectableProvider = ValueSansProvider | ExistingSansProvider | StaticClassSansProvider | ConstructorSansProvider | FactorySansProvider | ClassSansProvider;\\r\\n\\r\\n/**\\r\\n * A `Type` which has an `InjectableDef` static field.\\r\\n *\\r\\n * `InjectableDefType`s contain their own Dependency Injection metadata and are usable in an\\r\\n * `InjectorDef`-based `StaticInjector.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface InjectableType<T> extends Type<T> {\\r\\n    /**\\r\\n     * Opaque type whose structure is highly version dependent. Do not rely on any properties.\\r\\n     */\\r\\n    ɵprov: never;\\r\\n}\\r\\n\\r\\n/** Returns a ChangeDetectorRef (a.k.a. a ViewRef) */\\r\\ndeclare function injectChangeDetectorRef(isPipe?: boolean): ChangeDetectorRef;\\r\\n\\r\\n\\r\\n/**\\r\\n * Type of the Inject decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface InjectDecorator {\\r\\n    /**\\r\\n     * Parameter decorator on a dependency parameter of a class constructor\\r\\n     * that specifies a custom provider of the dependency.\\r\\n     *\\r\\n     * Learn more in the [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * The following example shows a class constructor that specifies a\\r\\n     * custom provider of a dependency using the parameter decorator.\\r\\n     *\\r\\n     * When `@Inject()` is not present, the injector uses the type annotation of the\\r\\n     * parameter as the provider.\\r\\n     *\\r\\n     * <code-example path=\\\"core/di/ts/metadata_spec.ts\\\" region=\\\"InjectWithoutDecorator\\\">\\r\\n     * </code-example>\\r\\n     */\\r\\n    (token: any): any;\\r\\n    new (token: any): Inject;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Creates an ElementRef from the most recent node.\\r\\n *\\r\\n * @returns The ElementRef instance to use\\r\\n */\\r\\ndeclare function injectElementRef(ElementRefToken: typeof ElementRef): ElementRef;\\r\\n\\r\\n\\r\\n/**\\r\\n * Injection flags for DI.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare enum InjectFlags {\\r\\n    /** Check self and check parent injector if needed */\\r\\n    Default = 0,\\r\\n    /**\\r\\n     * Specifies that an injector should retrieve a dependency from any injector until reaching the\\r\\n     * host element of the current component. (Only used with Element Injector)\\r\\n     */\\r\\n    Host = 1,\\r\\n    /** Don't ascend to ancestors of the node requesting injection. */\\r\\n    Self = 2,\\r\\n    /** Skip the node that is requesting injection. */\\r\\n    SkipSelf = 4,\\r\\n    /** Inject `defaultValue` instead if token not found. */\\r\\n    Optional = 8\\r\\n}\\r\\n\\r\\n/**\\r\\n * Creates a token that can be used in a DI Provider.\\r\\n *\\r\\n * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a\\r\\n * runtime representation) such as when injecting an interface, callable type, array or\\r\\n * parameterized type.\\r\\n *\\r\\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\\r\\n * the `Injector`. This provides additional level of type safety.\\r\\n *\\r\\n * ```\\r\\n * interface MyInterface {...}\\r\\n * var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));\\r\\n * // myInterface is inferred to be MyInterface.\\r\\n * ```\\r\\n *\\r\\n * When creating an `InjectionToken`, you can optionally specify a factory function which returns\\r\\n * (possibly by creating) a default value of the parameterized type `T`. This sets up the\\r\\n * `InjectionToken` using this factory as a provider as if it was defined explicitly in the\\r\\n * application's root injector. If the factory function, which takes zero arguments, needs to inject\\r\\n * dependencies, it can do so using the `inject` function. See below for an example.\\r\\n *\\r\\n * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which\\r\\n * overrides the above behavior and marks the token as belonging to a particular `@NgModule`. As\\r\\n * mentioned above, `'root'` is the default value for `providedIn`.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Basic Example\\r\\n *\\r\\n * ### Plain InjectionToken\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='InjectionToken'}\\r\\n *\\r\\n * ### Tree-shakable InjectionToken\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\\r\\n *\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class InjectionToken<T> {\\r\\n    protected _desc: string;\\r\\n    readonly ɵprov: never | undefined;\\r\\n    constructor(_desc: string, options?: {\\r\\n        providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n        factory: () => T;\\r\\n    });\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An InjectionToken that gets the current `Injector` for `createInjector()`-style injectors.\\r\\n *\\r\\n * Requesting this token instead of `Injector` allows `StaticInjector` to be tree-shaken from a\\r\\n * project.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const INJECTOR: InjectionToken<Injector>;\\r\\n\\r\\n/**\\r\\n * Concrete injectors implement this interface.\\r\\n *\\r\\n * For more details, see the [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='Injector'}\\r\\n *\\r\\n * `Injector` returns itself when given `Injector` as a token:\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='injectInjector'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class Injector {\\r\\n    static THROW_IF_NOT_FOUND: Object;\\r\\n    static NULL: Injector;\\r\\n    /**\\r\\n     * Retrieves an instance from the injector based on the provided token.\\r\\n     * @returns The instance from the injector if defined, otherwise the `notFoundValue`.\\r\\n     * @throws When the `notFoundValue` is `undefined` or `Injector.THROW_IF_NOT_FOUND`.\\r\\n     */\\r\\n    abstract get<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    /**\\r\\n     * @deprecated from v4.0.0 use Type<T> or InjectionToken<T>\\r\\n     * @suppress {duplicate}\\r\\n     */\\r\\n    abstract get(token: any, notFoundValue?: any): any;\\r\\n    /**\\r\\n     * @deprecated from v5 use the new signature Injector.create(options)\\r\\n     */\\r\\n    static create(providers: StaticProvider[], parent?: Injector): Injector;\\r\\n    static create(options: {\\r\\n        providers: StaticProvider[];\\r\\n        parent?: Injector;\\r\\n        name?: string;\\r\\n    }): Injector;\\r\\n    /** @nocollapse */\\r\\n    static ɵprov: never;\\r\\n}\\r\\n\\r\\ndeclare const INJECTOR_2 = 10;\\r\\n\\r\\n/**\\r\\n * A type which has an `InjectorDef` static field.\\r\\n *\\r\\n * `InjectorDefTypes` can be used to configure a `StaticInjector`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface InjectorType<T> extends Type<T> {\\r\\n    /**\\r\\n     * Opaque type whose structure is highly version dependent. Do not rely on any properties.\\r\\n     */\\r\\n    ɵinj: never;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Describes the `InjectorDef` equivalent of a `ModuleWithProviders`, an `InjectorDefType` with an\\r\\n * associated array of providers.\\r\\n *\\r\\n * Objects of this type can be listed in the imports section of an `InjectorDef`.\\r\\n *\\r\\n * NOTE: This is a private type and should not be exported\\r\\n */\\r\\ndeclare interface InjectorTypeWithProviders<T> {\\r\\n    ngModule: InjectorType<T>;\\r\\n    providers?: (Type<any> | ValueProvider | ExistingProvider | FactoryProvider | ConstructorProvider | StaticClassProvider | ClassProvider | any[])[];\\r\\n}\\r\\n\\r\\n/** Injects a Renderer2 for the current component. */\\r\\ndeclare function injectRenderer2(): Renderer2;\\r\\n\\r\\n/**\\r\\n * Creates a TemplateRef given a node.\\r\\n *\\r\\n * @returns The TemplateRef instance to use\\r\\n */\\r\\ndeclare function injectTemplateRef<T>(TemplateRefToken: typeof TemplateRef, ElementRefToken: typeof ElementRef): TemplateRef<T> | null;\\r\\n\\r\\n/**\\r\\n * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef\\r\\n * already exists, retrieves the existing ViewContainerRef.\\r\\n *\\r\\n * @returns The ViewContainerRef instance to use\\r\\n */\\r\\ndeclare function injectViewContainerRef(ViewContainerRefToken: typeof ViewContainerRef, ElementRefToken: typeof ElementRef): ViewContainerRef;\\r\\n\\r\\n/**\\r\\n * Type of metadata for an `Input` property.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Input {\\r\\n    /**\\r\\n     * The name of the DOM property to which the input property is bound.\\r\\n     */\\r\\n    bindingPropertyName?: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Input: InputDecorator;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface InputDecorator {\\r\\n    /**\\r\\n    * Decorator that marks a class field as an input property and supplies configuration metadata.\\r\\n    * The input property is bound to a DOM property in the template. During change detection,\\r\\n    * Angular automatically updates the data property with the DOM property's value.\\r\\n    *\\r\\n    * @usageNotes\\r\\n    *\\r\\n    * You can supply an optional name to use in templates when the\\r\\n    * component is instantiated, that maps to the\\r\\n    * name of the bound property. By default, the original\\r\\n    * name of the bound property is used for input binding.\\r\\n    *\\r\\n    * The following example creates a component with two input properties,\\r\\n    * one of which is given a special binding name.\\r\\n    *\\r\\n    * ```typescript\\r\\n    * @Component({\\r\\n    *   selector: 'bank-account',\\r\\n    *   template: `\\r\\n    *     Bank Name: {{bankName}}\\r\\n    *     Account Id: {{id}}\\r\\n    *   `\\r\\n    * })\\r\\n    * class BankAccount {\\r\\n    *   // This property is bound using its original name.\\r\\n    *   @Input() bankName: string;\\r\\n    *   // this property value is bound to a different property name\\r\\n    *   // when this component is instantiated in a template.\\r\\n    *   @Input('account-id') id: string;\\r\\n    *\\r\\n    *   // this property is not bound, and is not automatically updated by Angular\\r\\n    *   normalizedBankName: string;\\r\\n    * }\\r\\n    *\\r\\n    * @Component({\\r\\n    *   selector: 'app',\\r\\n    *   template: `\\r\\n    *     <bank-account bankName=\\\"RBC\\\" account-id=\\\"4747\\\"></bank-account>\\r\\n    *   `\\r\\n    * })\\r\\n    * class App {}\\r\\n    * ```\\r\\n    *\\r\\n    * @see [Input and Output properties](guide/template-syntax#input-and-output-properties)\\r\\n    */\\r\\n    (bindingPropertyName?: string): any;\\r\\n    new (bindingPropertyName?: string): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * All implicit instruction state is stored here.\\r\\n *\\r\\n * It is useful to have a single object where all of the state is stored as a mental model\\r\\n * (rather it being spread across many different variables.)\\r\\n *\\r\\n * PERF NOTE: Turns out that writing to a true global variable is slower than\\r\\n * having an intermediate object with properties.\\r\\n */\\r\\ndeclare interface InstructionState {\\r\\n    /**\\r\\n     * State of the current view being processed.\\r\\n     *\\r\\n     * An array of nodes (text, element, container, etc), pipes, their bindings, and\\r\\n     * any local variables that need to be stored between invocations.\\r\\n     */\\r\\n    lView: ɵangular_packages_core_core_bm;\\r\\n    /**\\r\\n     * Used to set the parent property when nodes are created and track query results.\\r\\n     *\\r\\n     * This is used in conjection with `isParent`.\\r\\n     */\\r\\n    previousOrParentTNode: TNode;\\r\\n    /**\\r\\n     * If `isParent` is:\\r\\n     *  - `true`: then `previousOrParentTNode` points to a parent node.\\r\\n     *  - `false`: then `previousOrParentTNode` points to previous node (sibling).\\r\\n     */\\r\\n    isParent: boolean;\\r\\n    /**\\r\\n     * Index of currently selected element in LView.\\r\\n     *\\r\\n     * Used by binding instructions. Updated as part of advance instruction.\\r\\n     */\\r\\n    selectedIndex: number;\\r\\n    /**\\r\\n     * The last viewData retrieved by nextContext().\\r\\n     * Allows building nextContext() and reference() calls.\\r\\n     *\\r\\n     * e.g. const inner = x().$implicit; const outer = x().$implicit;\\r\\n     */\\r\\n    contextLView: ɵangular_packages_core_core_bm;\\r\\n    /**\\r\\n     * In this mode, any changes in bindings will throw an ExpressionChangedAfterChecked error.\\r\\n     *\\r\\n     * Necessary to support ChangeDetectorRef.checkNoChanges().\\r\\n     */\\r\\n    checkNoChangesMode: boolean;\\r\\n    /**\\r\\n     * Store the element depth count. This is used to identify the root elements of the template\\r\\n     * so that we can then attach `LView` to only those elements.\\r\\n     */\\r\\n    elementDepthCount: number;\\r\\n    /**\\r\\n     * Stores whether directives should be matched to elements.\\r\\n     *\\r\\n     * When template contains `ngNonBindable` then we need to prevent the runtime form matching\\r\\n     * directives on children of that element.\\r\\n     *\\r\\n     * Example:\\r\\n     * ```\\r\\n     * <my-comp my-directive>\\r\\n     *   Should match component / directive.\\r\\n     * </my-comp>\\r\\n     * <div ngNonBindable>\\r\\n     *   <my-comp my-directive>\\r\\n     *     Should not match component / directive because we are in ngNonBindable.\\r\\n     *   </my-comp>\\r\\n     * </div>\\r\\n     * ```\\r\\n     */\\r\\n    bindingsEnabled: boolean;\\r\\n    /**\\r\\n     * Current namespace to be used when creating elements\\r\\n     */\\r\\n    currentNamespace: string | null;\\r\\n    /**\\r\\n     * Current sanitizer\\r\\n     */\\r\\n    currentSanitizer: StyleSanitizeFn | null;\\r\\n    /**\\r\\n     * Used when processing host bindings.\\r\\n     */\\r\\n    currentDirectiveDef: ɵDirectiveDef<any> | ɵComponentDef<any> | null;\\r\\n    /**\\r\\n     * Used as the starting directive id value.\\r\\n     *\\r\\n     * All subsequent directives are incremented from this value onwards.\\r\\n     * The reason why this value is `1` instead of `0` is because the `0`\\r\\n     * value is reserved for the template.\\r\\n     */\\r\\n    activeDirectiveId: number;\\r\\n    /**\\r\\n     * The root index from which pure function instructions should calculate their binding\\r\\n     * indices. In component views, this is TView.bindingStartIndex. In a host binding\\r\\n     * context, this is the TView.expandoStartIndex + any dirs/hostVars before the given dir.\\r\\n     */\\r\\n    bindingRootIndex: number;\\r\\n    /**\\r\\n     * Current index of a View or Content Query which needs to be processed next.\\r\\n     * We iterate over the list of Queries and increment current query index at every step.\\r\\n     */\\r\\n    currentQueryIndex: number;\\r\\n    /**\\r\\n     * Function to be called when the element is exited.\\r\\n     *\\r\\n     * NOTE: The function is here for tree shakable purposes since it is only needed by styling.\\r\\n     */\\r\\n    elementExitFn: (() => void) | null;\\r\\n}\\r\\n\\r\\ndeclare interface InternalNgModuleRef<T> extends NgModuleRef<T> {\\r\\n    _bootstrapComponents: Type<any>[];\\r\\n}\\r\\n\\r\\ndeclare interface InternalViewRef extends ViewRef {\\r\\n    detachFromAppRef(): void;\\r\\n    attachToAppRef(appRef: ApplicationRef): void;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Returns whether Angular is in development mode. After called once,\\r\\n * the value is locked and won't change any more.\\r\\n *\\r\\n * By default, this is true, unless a user calls `enableProdMode` before calling this.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function isDevMode(): boolean;\\r\\n\\r\\n/**\\r\\n * Record representing the item change information.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface IterableChangeRecord<V> {\\r\\n    /** Current index of the item in `Iterable` or null if removed. */\\r\\n    readonly currentIndex: number | null;\\r\\n    /** Previous index of the item in `Iterable` or null if added. */\\r\\n    readonly previousIndex: number | null;\\r\\n    /** The item. */\\r\\n    readonly item: V;\\r\\n    /** Track by identity as computed by the `TrackByFunction`. */\\r\\n    readonly trackById: any;\\r\\n}\\r\\n\\r\\ndeclare class IterableChangeRecord_<V> implements IterableChangeRecord<V> {\\r\\n    item: V;\\r\\n    trackById: any;\\r\\n    currentIndex: number | null;\\r\\n    previousIndex: number | null;\\r\\n    constructor(item: V, trackById: any);\\r\\n}\\r\\n\\r\\n/**\\r\\n * An object describing the changes in the `Iterable` collection since last time\\r\\n * `IterableDiffer#diff()` was invoked.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface IterableChanges<V> {\\r\\n    /**\\r\\n     * Iterate over all changes. `IterableChangeRecord` will contain information about changes\\r\\n     * to each item.\\r\\n     */\\r\\n    forEachItem(fn: (record: IterableChangeRecord<V>) => void): void;\\r\\n    /**\\r\\n     * Iterate over a set of operations which when applied to the original `Iterable` will produce the\\r\\n     * new `Iterable`.\\r\\n     *\\r\\n     * NOTE: These are not necessarily the actual operations which were applied to the original\\r\\n     * `Iterable`, rather these are a set of computed operations which may not be the same as the\\r\\n     * ones applied.\\r\\n     *\\r\\n     * @param record A change which needs to be applied\\r\\n     * @param previousIndex The `IterableChangeRecord#previousIndex` of the `record` refers to the\\r\\n     *        original `Iterable` location, where as `previousIndex` refers to the transient location\\r\\n     *        of the item, after applying the operations up to this point.\\r\\n     * @param currentIndex The `IterableChangeRecord#currentIndex` of the `record` refers to the\\r\\n     *        original `Iterable` location, where as `currentIndex` refers to the transient location\\r\\n     *        of the item, after applying the operations up to this point.\\r\\n     */\\r\\n    forEachOperation(fn: (record: IterableChangeRecord<V>, previousIndex: number | null, currentIndex: number | null) => void): void;\\r\\n    /**\\r\\n     * Iterate over changes in the order of original `Iterable` showing where the original items\\r\\n     * have moved.\\r\\n     */\\r\\n    forEachPreviousItem(fn: (record: IterableChangeRecord<V>) => void): void;\\r\\n    /** Iterate over all added items. */\\r\\n    forEachAddedItem(fn: (record: IterableChangeRecord<V>) => void): void;\\r\\n    /** Iterate over all moved items. */\\r\\n    forEachMovedItem(fn: (record: IterableChangeRecord<V>) => void): void;\\r\\n    /** Iterate over all removed items. */\\r\\n    forEachRemovedItem(fn: (record: IterableChangeRecord<V>) => void): void;\\r\\n    /** Iterate over all items which had their identity (as computed by the `TrackByFunction`)\\r\\n     * changed. */\\r\\n    forEachIdentityChange(fn: (record: IterableChangeRecord<V>) => void): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A strategy for tracking changes over time to an iterable. Used by {@link NgForOf} to\\r\\n * respond to changes in an iterable by effecting equivalent changes in the DOM.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface IterableDiffer<V> {\\r\\n    /**\\r\\n     * Compute a difference between the previous state and the new `object` state.\\r\\n     *\\r\\n     * @param object containing the new value.\\r\\n     * @returns an object describing the difference. The return value is only valid until the next\\r\\n     * `diff()` invocation.\\r\\n     */\\r\\n    diff(object: NgIterable<V> | undefined | null): IterableChanges<V> | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provides a factory for {@link IterableDiffer}.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface IterableDifferFactory {\\r\\n    supports(objects: any): boolean;\\r\\n    create<V>(trackByFn?: TrackByFunction<V>): IterableDiffer<V>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class IterableDiffers {\\r\\n    /** @nocollapse */\\r\\n    static ɵprov: never;\\r\\n    /**\\r\\n     * @deprecated v4.0.0 - Should be private\\r\\n     */\\r\\n    factories: IterableDifferFactory[];\\r\\n    constructor(factories: IterableDifferFactory[]);\\r\\n    static create(factories: IterableDifferFactory[], parent?: IterableDiffers): IterableDiffers;\\r\\n    /**\\r\\n     * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the\\r\\n     * inherited {@link IterableDiffers} instance with the provided factories and return a new\\r\\n     * {@link IterableDiffers} instance.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example shows how to extend an existing list of factories,\\r\\n     * which will only be applied to the injector for this component and its children.\\r\\n     * This step is all that's required to make a new {@link IterableDiffer} available.\\r\\n     *\\r\\n     * ```\\r\\n     * @Component({\\r\\n     *   viewProviders: [\\r\\n     *     IterableDiffers.extend([new ImmutableListDiffer()])\\r\\n     *   ]\\r\\n     * })\\r\\n     * ```\\r\\n     */\\r\\n    static extend(factories: IterableDifferFactory[]): StaticProvider;\\r\\n    find(iterable: any): IterableDifferFactory;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Record representing the item change information.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface KeyValueChangeRecord<K, V> {\\r\\n    /**\\r\\n     * Current key in the Map.\\r\\n     */\\r\\n    readonly key: K;\\r\\n    /**\\r\\n     * Current value for the key or `null` if removed.\\r\\n     */\\r\\n    readonly currentValue: V | null;\\r\\n    /**\\r\\n     * Previous value for the key or `null` if added.\\r\\n     */\\r\\n    readonly previousValue: V | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An object describing the changes in the `Map` or `{[k:string]: string}` since last time\\r\\n * `KeyValueDiffer#diff()` was invoked.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface KeyValueChanges<K, V> {\\r\\n    /**\\r\\n     * Iterate over all changes. `KeyValueChangeRecord` will contain information about changes\\r\\n     * to each item.\\r\\n     */\\r\\n    forEachItem(fn: (r: KeyValueChangeRecord<K, V>) => void): void;\\r\\n    /**\\r\\n     * Iterate over changes in the order of original Map showing where the original items\\r\\n     * have moved.\\r\\n     */\\r\\n    forEachPreviousItem(fn: (r: KeyValueChangeRecord<K, V>) => void): void;\\r\\n    /**\\r\\n     * Iterate over all keys for which values have changed.\\r\\n     */\\r\\n    forEachChangedItem(fn: (r: KeyValueChangeRecord<K, V>) => void): void;\\r\\n    /**\\r\\n     * Iterate over all added items.\\r\\n     */\\r\\n    forEachAddedItem(fn: (r: KeyValueChangeRecord<K, V>) => void): void;\\r\\n    /**\\r\\n     * Iterate over all removed items.\\r\\n     */\\r\\n    forEachRemovedItem(fn: (r: KeyValueChangeRecord<K, V>) => void): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A differ that tracks changes made to an object over time.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface KeyValueDiffer<K, V> {\\r\\n    /**\\r\\n     * Compute a difference between the previous state and the new `object` state.\\r\\n     *\\r\\n     * @param object containing the new value.\\r\\n     * @returns an object describing the difference. The return value is only valid until the next\\r\\n     * `diff()` invocation.\\r\\n     */\\r\\n    diff(object: Map<K, V>): KeyValueChanges<K, V> | null;\\r\\n    /**\\r\\n     * Compute a difference between the previous state and the new `object` state.\\r\\n     *\\r\\n     * @param object containing the new value.\\r\\n     * @returns an object describing the difference. The return value is only valid until the next\\r\\n     * `diff()` invocation.\\r\\n     */\\r\\n    diff(object: {\\r\\n        [key: string]: V;\\r\\n    }): KeyValueChanges<string, V> | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provides a factory for {@link KeyValueDiffer}.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface KeyValueDifferFactory {\\r\\n    /**\\r\\n     * Test to see if the differ knows how to diff this kind of object.\\r\\n     */\\r\\n    supports(objects: any): boolean;\\r\\n    /**\\r\\n     * Create a `KeyValueDiffer`.\\r\\n     */\\r\\n    create<K, V>(): KeyValueDiffer<K, V>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class KeyValueDiffers {\\r\\n    /** @nocollapse */\\r\\n    static ɵprov: never;\\r\\n    /**\\r\\n     * @deprecated v4.0.0 - Should be private.\\r\\n     */\\r\\n    factories: KeyValueDifferFactory[];\\r\\n    constructor(factories: KeyValueDifferFactory[]);\\r\\n    static create<S>(factories: KeyValueDifferFactory[], parent?: KeyValueDiffers): KeyValueDiffers;\\r\\n    /**\\r\\n     * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the\\r\\n     * inherited {@link KeyValueDiffers} instance with the provided factories and return a new\\r\\n     * {@link KeyValueDiffers} instance.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example shows how to extend an existing list of factories,\\r\\n     * which will only be applied to the injector for this component and its children.\\r\\n     * This step is all that's required to make a new {@link KeyValueDiffer} available.\\r\\n     *\\r\\n     * ```\\r\\n     * @Component({\\r\\n     *   viewProviders: [\\r\\n     *     KeyValueDiffers.extend([new ImmutableMapDiffer()])\\r\\n     *   ]\\r\\n     * })\\r\\n     * ```\\r\\n     */\\r\\n    static extend<S>(factories: KeyValueDifferFactory[]): StaticProvider;\\r\\n    find(kv: any): KeyValueDifferFactory;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The state associated with a container.\\r\\n *\\r\\n * This is an array so that its structure is closer to LView. This helps\\r\\n * when traversing the view tree (which is a mix of containers and component\\r\\n * views), so we can jump to viewOrContainer[NEXT] in the same way regardless\\r\\n * of type.\\r\\n */\\r\\ndeclare interface LContainer extends Array<any> {\\r\\n    /**\\r\\n     * The host element of this LContainer.\\r\\n     *\\r\\n     * The host could be an LView if this container is on a component node.\\r\\n     * In that case, the component LView is its HOST.\\r\\n     */\\r\\n    readonly [HOST]: RElement | RComment | ɵangular_packages_core_core_bm;\\r\\n    /**\\r\\n     * This is a type field which allows us to differentiate `LContainer` from `StylingContext` in an\\r\\n     * efficient way. The value is always set to `true`\\r\\n     */\\r\\n    [TYPE]: true;\\r\\n    /**\\r\\n     * The next active index in the views array to read or write to. This helps us\\r\\n     * keep track of where we are in the views array.\\r\\n     * In the case the LContainer is created for a ViewContainerRef,\\r\\n     * it is set to null to identify this scenario, as indices are \\\"absolute\\\" in that case,\\r\\n     * i.e. provided directly by the user of the ViewContainerRef API.\\r\\n     */\\r\\n    [ACTIVE_INDEX]: number;\\r\\n    /**\\r\\n     * Access to the parent view is necessary so we can propagate back\\r\\n     * up from inside a container to parent[NEXT].\\r\\n     */\\r\\n    [PARENT]: ɵangular_packages_core_core_bm;\\r\\n    /**\\r\\n     * This allows us to jump from a container to a sibling container or component\\r\\n     * view with the same parent, so we can remove listeners efficiently.\\r\\n     */\\r\\n    [NEXT]: ɵangular_packages_core_core_bm | LContainer | null;\\r\\n    /**\\r\\n     * A collection of views created based on the underlying `<ng-template>` element but inserted into\\r\\n     * a different `LContainer`. We need to track views created from a given declaration point since\\r\\n     * queries collect matches from the embedded view declaration point and _not_ the insertion point.\\r\\n     */\\r\\n    [MOVED_VIEWS]: ɵangular_packages_core_core_bm[] | null;\\r\\n    /**\\r\\n     * Pointer to the `TNode` which represents the host of the container.\\r\\n     */\\r\\n    [T_HOST]: TNode;\\r\\n    /** The comment element that serves as an anchor for this LContainer. */\\r\\n    readonly [NATIVE]: RComment;\\r\\n    /**\\r\\n     * Array of `ViewRef`s used by any `ViewContainerRef`s that point to this container.\\r\\n     *\\r\\n     * This is lazily initialized by `ViewContainerRef` when the first view is inserted.\\r\\n     */\\r\\n    [VIEW_REFS]: ViewRef[] | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provide this token to set the locale of your application.\\r\\n * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,\\r\\n * DecimalPipe and PercentPipe) and by ICU expressions.\\r\\n *\\r\\n * See the [i18n guide](guide/i18n#setting-up-locale) for more information.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```typescript\\r\\n * import { LOCALE_ID } from '@angular/core';\\r\\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\r\\n * import { AppModule } from './app/app.module';\\r\\n *\\r\\n * platformBrowserDynamic().bootstrapModule(AppModule, {\\r\\n *   providers: [{provide: LOCALE_ID, useValue: 'en-US' }]\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const LOCALE_ID: InjectionToken<string>;\\r\\n\\r\\n/**\\r\\n * Type for a function that extracts a value for a local refs.\\r\\n * Example:\\r\\n * - `<div #nativeDivEl>` - `nativeDivEl` should point to the native `<div>` element;\\r\\n * - `<ng-template #tplRef>` - `tplRef` should point to the `TemplateRef` instance;\\r\\n */\\r\\ndeclare type LocalRefExtractor = (tNode: TNodeWithLocalRefs, currentView: ɵangular_packages_core_core_bm) => any;\\r\\n\\r\\n/**\\r\\n * lQueries represent a collection of individual LQuery objects tracked in a given view.\\r\\n */\\r\\ndeclare interface LQueries {\\r\\n    /**\\r\\n     * A collection of queries tracked in a given view.\\r\\n     */\\r\\n    queries: LQuery<any>[];\\r\\n    /**\\r\\n     * A method called when a new embedded view is created. As a result a set of LQueries applicable\\r\\n     * for a new embedded view is instantiated (cloned) from the declaration view.\\r\\n     * @param tView\\r\\n     */\\r\\n    createEmbeddedView(tView: TView): LQueries | null;\\r\\n    /**\\r\\n     * A method called when an embedded view is inserted into a container. As a result all impacted\\r\\n     * `LQuery` objects (and associated `QueryList`) are marked as dirty.\\r\\n     * @param tView\\r\\n     */\\r\\n    insertView(tView: TView): void;\\r\\n    /**\\r\\n     * A method called when an embedded view is detached from a container. As a result all impacted\\r\\n     * `LQuery` objects (and associated `QueryList`) are marked as dirty.\\r\\n     * @param tView\\r\\n     */\\r\\n    detachView(tView: TView): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An interface that represents query-related information specific to a view instance. Most notably\\r\\n * it contains:\\r\\n * - materialized query matches;\\r\\n * - a pointer to a QueryList where materialized query results should be reported.\\r\\n */\\r\\ndeclare interface LQuery<T> {\\r\\n    /**\\r\\n     * Materialized query matches for a given view only (!). Results are initialized lazily so the\\r\\n     * array of matches is set to `null` initially.\\r\\n     */\\r\\n    matches: (T | null)[] | null;\\r\\n    /**\\r\\n     * A QueryList where materialized query results should be reported.\\r\\n     */\\r\\n    queryList: QueryList<T>;\\r\\n    /**\\r\\n     * Clones an LQuery for an embedded view. A cloned query shares the same `QueryList` but has a\\r\\n     * separate collection of materialized matches.\\r\\n     */\\r\\n    clone(): LQuery<T>;\\r\\n    /**\\r\\n     * Called when an embedded view, impacting results of this query, is inserted or removed.\\r\\n     */\\r\\n    setDirty(): void;\\r\\n}\\r\\n\\r\\n/** Flags associated with an LView (saved in LView[FLAGS]) */\\r\\ndeclare const enum LViewFlags {\\r\\n    /** The state of the init phase on the first 2 bits */\\r\\n    InitPhaseStateIncrementer = 1,\\r\\n    InitPhaseStateMask = 3,\\r\\n    /**\\r\\n     * Whether or not the view is in creationMode.\\r\\n     *\\r\\n     * This must be stored in the view rather than using `data` as a marker so that\\r\\n     * we can properly support embedded views. Otherwise, when exiting a child view\\r\\n     * back into the parent view, `data` will be defined and `creationMode` will be\\r\\n     * improperly reported as false.\\r\\n     */\\r\\n    CreationMode = 4,\\r\\n    /**\\r\\n     * Whether or not this LView instance is on its first processing pass.\\r\\n     *\\r\\n     * An LView instance is considered to be on its \\\"first pass\\\" until it\\r\\n     * has completed one creation mode run and one update mode run. At this\\r\\n     * time, the flag is turned off.\\r\\n     */\\r\\n    FirstLViewPass = 8,\\r\\n    /** Whether this view has default change detection strategy (checks always) or onPush */\\r\\n    CheckAlways = 16,\\r\\n    /**\\r\\n     * Whether or not manual change detection is turned on for onPush components.\\r\\n     *\\r\\n     * This is a special mode that only marks components dirty in two cases:\\r\\n     * 1) There has been a change to an @Input property\\r\\n     * 2) `markDirty()` has been called manually by the user\\r\\n     *\\r\\n     * Note that in this mode, the firing of events does NOT mark components\\r\\n     * dirty automatically.\\r\\n     *\\r\\n     * Manual mode is turned off by default for backwards compatibility, as events\\r\\n     * automatically mark OnPush components dirty in View Engine.\\r\\n     *\\r\\n     * TODO: Add a public API to ChangeDetectionStrategy to turn this mode on\\r\\n     */\\r\\n    ManualOnPush = 32,\\r\\n    /** Whether or not this view is currently dirty (needing check) */\\r\\n    Dirty = 64,\\r\\n    /** Whether or not this view is currently attached to change detection tree. */\\r\\n    Attached = 128,\\r\\n    /** Whether or not this view is destroyed. */\\r\\n    Destroyed = 256,\\r\\n    /** Whether or not this view is the root view */\\r\\n    IsRoot = 512,\\r\\n    /**\\r\\n     * Index of the current init phase on last 22 bits\\r\\n     */\\r\\n    IndexWithinInitPhaseIncrementer = 1024,\\r\\n    IndexWithinInitPhaseShift = 10,\\r\\n    IndexWithinInitPhaseReset = 1023\\r\\n}\\r\\n\\r\\n/**\\r\\n * Use this enum at bootstrap as an option of `bootstrapModule` to define the strategy\\r\\n * that the compiler should use in case of missing translations:\\r\\n * - Error: throw if you have missing translations.\\r\\n * - Warning (default): show a warning in the console and/or shell.\\r\\n * - Ignore: do nothing.\\r\\n *\\r\\n * See the [i18n guide](guide/i18n#missing-translation) for more information.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n * ```typescript\\r\\n * import { MissingTranslationStrategy } from '@angular/core';\\r\\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\r\\n * import { AppModule } from './app/app.module';\\r\\n *\\r\\n * platformBrowserDynamic().bootstrapModule(AppModule, {\\r\\n *   missingTranslation: MissingTranslationStrategy.Error\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare enum MissingTranslationStrategy {\\r\\n    Error = 0,\\r\\n    Warning = 1,\\r\\n    Ignore = 2\\r\\n}\\r\\n\\r\\n/**\\r\\n * Combination of NgModuleFactory and ComponentFactorys.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ModuleWithComponentFactories<T> {\\r\\n    ngModuleFactory: NgModuleFactory<T>;\\r\\n    componentFactories: ComponentFactory<any>[];\\r\\n    constructor(ngModuleFactory: NgModuleFactory<T>, componentFactories: ComponentFactory<any>[]);\\r\\n}\\r\\n\\r\\n/**\\r\\n * A wrapper around an NgModule that associates it with the providers.\\r\\n *\\r\\n * @param T the module type. In Ivy applications, this must be explicitly\\r\\n * provided.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ModuleWithProviders<T = any /** TODO(alxhub): remove default when callers pass explicit type param */> {\\r\\n    ngModule: Type<T>;\\r\\n    providers?: Provider[];\\r\\n}\\r\\n\\r\\ndeclare const MOVED_VIEWS = 5;\\r\\n\\r\\ndeclare const NATIVE = 7;\\r\\n\\r\\ndeclare const NEXT = 4;\\r\\n\\r\\ndeclare interface NgContentDef {\\r\\n    /**\\r\\n     * this index is checked against NodeDef.ngContentIndex to find the nodes\\r\\n     * that are matched by this ng-content.\\r\\n     * Note that a NodeDef with an ng-content can be reprojected, i.e.\\r\\n     * have a ngContentIndex on its own.\\r\\n     */\\r\\n    index: number;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A type describing supported iterable types.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type NgIterable<T> = Array<T> | Iterable<T>;\\r\\n\\r\\n/**\\r\\n * Type of the NgModule metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface NgModule {\\r\\n    /**\\r\\n     * The set of injectable objects that are available in the injector\\r\\n     * of this module.\\r\\n     *\\r\\n     * @see [Dependency Injection guide](guide/dependency-injection)\\r\\n     * @see [NgModule guide](guide/providers)\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * Dependencies whose providers are listed here become available for injection\\r\\n     * into any component, directive, pipe or service that is a child of this injector.\\r\\n     * The NgModule used for bootstrapping uses the root injector, and can provide dependencies\\r\\n     * to any part of the app.\\r\\n     *\\r\\n     * A lazy-loaded module has its own injector, typically a child of the app root injector.\\r\\n     * Lazy-loaded services are scoped to the lazy-loaded module's injector.\\r\\n     * If a lazy-loaded module also provides the `UserService`, any component created\\r\\n     * within that module's context (such as by router navigation) gets the local instance\\r\\n     * of the service, not the instance in the root injector.\\r\\n     * Components in external modules continue to receive the instance provided by their injectors.\\r\\n     *\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example defines a class that is injected in\\r\\n     * the HelloWorld NgModule:\\r\\n     *\\r\\n     * ```\\r\\n     * class Greeter {\\r\\n     *    greet(name:string) {\\r\\n     *      return 'Hello ' + name + '!';\\r\\n     *    }\\r\\n     * }\\r\\n     *\\r\\n     * @NgModule({\\r\\n     *   providers: [\\r\\n     *     Greeter\\r\\n     *   ]\\r\\n     * })\\r\\n     * class HelloWorld {\\r\\n     *   greeter:Greeter;\\r\\n     *\\r\\n     *   constructor(greeter:Greeter) {\\r\\n     *     this.greeter = greeter;\\r\\n     *   }\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    providers?: Provider[];\\r\\n    /**\\r\\n     * The set of components, directives, and pipes ([declarables](guide/glossary#declarable))\\r\\n     * that belong to this module.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * The set of selectors that are available to a template include those declared here, and\\r\\n     * those that are exported from imported NgModules.\\r\\n     *\\r\\n     * Declarables must belong to exactly one module.\\r\\n     * The compiler emits an error if you try to declare the same class in more than one module.\\r\\n     * Be careful not to declare a class that is imported from another module.\\r\\n     *\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example allows the CommonModule to use the `NgFor`\\r\\n     * directive.\\r\\n     *\\r\\n     * ```javascript\\r\\n     * @NgModule({\\r\\n     *   declarations: [NgFor]\\r\\n     * })\\r\\n     * class CommonModule {\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    declarations?: Array<Type<any> | any[]>;\\r\\n    /**\\r\\n     * The set of NgModules whose exported [declarables](guide/glossary#declarable)\\r\\n     * are available to templates in this module.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * A template can use exported declarables from any\\r\\n     * imported module, including those from modules that are imported indirectly\\r\\n     * and re-exported.\\r\\n     * For example, `ModuleA` imports `ModuleB`, and also exports\\r\\n     * it, which makes the declarables from `ModuleB` available\\r\\n     * wherever `ModuleA` is imported.\\r\\n     *\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example allows MainModule to use anything exported by\\r\\n     * `CommonModule`:\\r\\n     *\\r\\n     * ```javascript\\r\\n     * @NgModule({\\r\\n     *   imports: [CommonModule]\\r\\n     * })\\r\\n     * class MainModule {\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    imports?: Array<Type<any> | ModuleWithProviders<{}> | any[]>;\\r\\n    /**\\r\\n     * The set of components, directives, and pipes declared in this\\r\\n     * NgModule that can be used in the template of any component that is part of an\\r\\n     * NgModule that imports this NgModule. Exported declarations are the module's public API.\\r\\n     *\\r\\n     * A declarable belongs to one and only one NgModule.\\r\\n     * A module can list another module among its exports, in which case all of that module's\\r\\n     * public declaration are exported.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * Declarations are private by default.\\r\\n     * If this ModuleA does not export UserComponent, then only the components within this\\r\\n     * ModuleA can use UserComponent.\\r\\n     *\\r\\n     * ModuleA can import ModuleB and also export it, making exports from ModuleB\\r\\n     * available to an NgModule that imports ModuleA.\\r\\n     *\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example exports the `NgFor` directive from CommonModule.\\r\\n     *\\r\\n     * ```javascript\\r\\n     * @NgModule({\\r\\n     *   exports: [NgFor]\\r\\n     * })\\r\\n     * class CommonModule {\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    exports?: Array<Type<any> | any[]>;\\r\\n    /**\\r\\n     * The set of components to compile when this NgModule is defined,\\r\\n     * so that they can be dynamically loaded into the view.\\r\\n     *\\r\\n     * For each component listed here, Angular creates a `ComponentFactory`\\r\\n     * and stores it in the `ComponentFactoryResolver`.\\r\\n     *\\r\\n     * Angular automatically adds components in the module's bootstrap\\r\\n     * and route definitions into the `entryComponents` list. Use this\\r\\n     * option to add components that are bootstrapped\\r\\n     * using one of the imperative techniques, such as `ViewContainerRef.createComponent()`.\\r\\n     *\\r\\n     * @see [Entry Components](guide/entry-components)\\r\\n     */\\r\\n    entryComponents?: Array<Type<any> | any[]>;\\r\\n    /**\\r\\n     * The set of components that are bootstrapped when\\r\\n     * this module is bootstrapped. The components listed here\\r\\n     * are automatically added to `entryComponents`.\\r\\n     */\\r\\n    bootstrap?: Array<Type<any> | any[]>;\\r\\n    /**\\r\\n     * The set of schemas that declare elements to be allowed in the NgModule.\\r\\n     * Elements and properties that are neither Angular components nor directives\\r\\n     * must be declared in a schema.\\r\\n     *\\r\\n     * Allowed value are `NO_ERRORS_SCHEMA` and `CUSTOM_ELEMENTS_SCHEMA`.\\r\\n     *\\r\\n     * @security When using one of `NO_ERRORS_SCHEMA` or `CUSTOM_ELEMENTS_SCHEMA`\\r\\n     * you must ensure that allowed elements and properties securely escape inputs.\\r\\n     */\\r\\n    schemas?: Array<SchemaMetadata | any[]>;\\r\\n    /**\\r\\n     * A name or path that uniquely identifies this NgModule in `getModuleFactory`.\\r\\n     * If left `undefined`, the NgModule is not registered with\\r\\n     * `getModuleFactory`.\\r\\n     */\\r\\n    id?: string;\\r\\n    /**\\r\\n     * If true, this module will be skipped by the AOT compiler and so will always be compiled\\r\\n     * using JIT.\\r\\n     *\\r\\n     * This exists to support future Ivy work and has no effect currently.\\r\\n     */\\r\\n    jit?: true;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const NgModule: NgModuleDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the NgModule decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface NgModuleDecorator {\\r\\n    /**\\r\\n     * Decorator that marks a class as an NgModule and supplies configuration metadata.\\r\\n     */\\r\\n    (obj?: NgModule): TypeDecorator;\\r\\n    new (obj?: NgModule): NgModule;\\r\\n}\\r\\n\\r\\ndeclare interface NgModuleDefinition extends Definition<NgModuleDefinitionFactory> {\\r\\n    providers: NgModuleProviderDef[];\\r\\n    providersByKey: {\\r\\n        [tokenKey: string]: NgModuleProviderDef;\\r\\n    };\\r\\n    modules: any[];\\r\\n    scope: 'root' | 'platform' | null;\\r\\n}\\r\\n\\r\\ndeclare interface NgModuleDefinitionFactory extends DefinitionFactory<NgModuleDefinition> {\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class NgModuleFactory<T> {\\r\\n    abstract readonly moduleType: Type<T>;\\r\\n    abstract create(parentInjector: Injector | null): NgModuleRef<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Used to load ng module factories.\\r\\n *\\r\\n * @publicApi\\r\\n * @deprecated the `string` form of `loadChildren` is deprecated, and `NgModuleFactoryLoader` is\\r\\n * part of its implementation. See `LoadChildren` for more details.\\r\\n */\\r\\nexport declare abstract class NgModuleFactoryLoader {\\r\\n    abstract load(path: string): Promise<NgModuleFactory<any>>;\\r\\n}\\r\\n\\r\\ndeclare interface NgModuleProviderDef {\\r\\n    flags: ɵNodeFlags;\\r\\n    index: number;\\r\\n    token: any;\\r\\n    value: any;\\r\\n    deps: DepDef[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents an instance of an NgModule created via a {@link NgModuleFactory}.\\r\\n *\\r\\n * `NgModuleRef` provides access to the NgModule Instance as well other objects related to this\\r\\n * NgModule Instance.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class NgModuleRef<T> {\\r\\n    /**\\r\\n     * The injector that contains all of the providers of the NgModule.\\r\\n     */\\r\\n    abstract readonly injector: Injector;\\r\\n    /**\\r\\n     * The ComponentFactoryResolver to get hold of the ComponentFactories\\r\\n     * declared in the `entryComponents` property of the module.\\r\\n     */\\r\\n    abstract readonly componentFactoryResolver: ComponentFactoryResolver;\\r\\n    /**\\r\\n     * The NgModule instance.\\r\\n     */\\r\\n    abstract readonly instance: T;\\r\\n    /**\\r\\n     * Destroys the module instance and all of the data structures associated with it.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * Allows to register a callback that will be called when the module is destroyed.\\r\\n     */\\r\\n    abstract onDestroy(callback: () => void): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A token for third-party components that can register themselves with NgProbe.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgProbeToken {\\r\\n    name: string;\\r\\n    token: any;\\r\\n    constructor(name: string, token: any);\\r\\n}\\r\\n\\r\\n/**\\r\\n * An injectable service for executing work inside or outside of the Angular zone.\\r\\n *\\r\\n * The most common use of this service is to optimize performance when starting a work consisting of\\r\\n * one or more asynchronous tasks that don't require UI updates or error handling to be handled by\\r\\n * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks\\r\\n * can reenter the Angular zone via {@link #run}.\\r\\n *\\r\\n * <!-- TODO: add/fix links to:\\r\\n *   - docs explaining zones and the use of zones in Angular and change-detection\\r\\n *   - link to runOutsideAngular/run (throughout this file!)\\r\\n *   -->\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * import {Component, NgZone} from '@angular/core';\\r\\n * import {NgIf} from '@angular/common';\\r\\n *\\r\\n * @Component({\\r\\n *   selector: 'ng-zone-demo',\\r\\n *   template: `\\r\\n *     <h2>Demo: NgZone</h2>\\r\\n *\\r\\n *     <p>Progress: {{progress}}%</p>\\r\\n *     <p *ngIf=\\\"progress >= 100\\\">Done processing {{label}} of Angular zone!</p>\\r\\n *\\r\\n *     <button (click)=\\\"processWithinAngularZone()\\\">Process within Angular zone</button>\\r\\n *     <button (click)=\\\"processOutsideOfAngularZone()\\\">Process outside of Angular zone</button>\\r\\n *   `,\\r\\n * })\\r\\n * export class NgZoneDemo {\\r\\n *   progress: number = 0;\\r\\n *   label: string;\\r\\n *\\r\\n *   constructor(private _ngZone: NgZone) {}\\r\\n *\\r\\n *   // Loop inside the Angular zone\\r\\n *   // so the UI DOES refresh after each setTimeout cycle\\r\\n *   processWithinAngularZone() {\\r\\n *     this.label = 'inside';\\r\\n *     this.progress = 0;\\r\\n *     this._increaseProgress(() => console.log('Inside Done!'));\\r\\n *   }\\r\\n *\\r\\n *   // Loop outside of the Angular zone\\r\\n *   // so the UI DOES NOT refresh after each setTimeout cycle\\r\\n *   processOutsideOfAngularZone() {\\r\\n *     this.label = 'outside';\\r\\n *     this.progress = 0;\\r\\n *     this._ngZone.runOutsideAngular(() => {\\r\\n *       this._increaseProgress(() => {\\r\\n *         // reenter the Angular zone and display done\\r\\n *         this._ngZone.run(() => { console.log('Outside Done!'); });\\r\\n *       });\\r\\n *     });\\r\\n *   }\\r\\n *\\r\\n *   _increaseProgress(doneCallback: () => void) {\\r\\n *     this.progress += 1;\\r\\n *     console.log(`Current progress: ${this.progress}%`);\\r\\n *\\r\\n *     if (this.progress < 100) {\\r\\n *       window.setTimeout(() => this._increaseProgress(doneCallback), 10);\\r\\n *     } else {\\r\\n *       doneCallback();\\r\\n *     }\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgZone {\\r\\n    readonly hasPendingMicrotasks: boolean;\\r\\n    readonly hasPendingMacrotasks: boolean;\\r\\n    /**\\r\\n     * Whether there are no outstanding microtasks or macrotasks.\\r\\n     */\\r\\n    readonly isStable: boolean;\\r\\n    /**\\r\\n     * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\\r\\n     */\\r\\n    readonly onUnstable: EventEmitter<any>;\\r\\n    /**\\r\\n     * Notifies when there is no more microtasks enqueued in the current VM Turn.\\r\\n     * This is a hint for Angular to do change detection, which may enqueue more microtasks.\\r\\n     * For this reason this event can fire multiple times per VM Turn.\\r\\n     */\\r\\n    readonly onMicrotaskEmpty: EventEmitter<any>;\\r\\n    /**\\r\\n     * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\\r\\n     * implies we are about to relinquish VM turn.\\r\\n     * This event gets called just once.\\r\\n     */\\r\\n    readonly onStable: EventEmitter<any>;\\r\\n    /**\\r\\n     * Notifies that an error has been delivered.\\r\\n     */\\r\\n    readonly onError: EventEmitter<any>;\\r\\n    constructor({ enableLongStackTrace }: {\\r\\n        enableLongStackTrace?: boolean | undefined;\\r\\n    });\\r\\n    static isInAngularZone(): boolean;\\r\\n    static assertInAngularZone(): void;\\r\\n    static assertNotInAngularZone(): void;\\r\\n    /**\\r\\n     * Executes the `fn` function synchronously within the Angular zone and returns value returned by\\r\\n     * the function.\\r\\n     *\\r\\n     * Running functions via `run` allows you to reenter Angular zone from a task that was executed\\r\\n     * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\\r\\n     *\\r\\n     * Any future tasks or microtasks scheduled from within this function will continue executing from\\r\\n     * within the Angular zone.\\r\\n     *\\r\\n     * If a synchronous error happens it will be rethrown and not reported via `onError`.\\r\\n     */\\r\\n    run<T>(fn: (...args: any[]) => T, applyThis?: any, applyArgs?: any[]): T;\\r\\n    /**\\r\\n     * Executes the `fn` function synchronously within the Angular zone as a task and returns value\\r\\n     * returned by the function.\\r\\n     *\\r\\n     * Running functions via `run` allows you to reenter Angular zone from a task that was executed\\r\\n     * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\\r\\n     *\\r\\n     * Any future tasks or microtasks scheduled from within this function will continue executing from\\r\\n     * within the Angular zone.\\r\\n     *\\r\\n     * If a synchronous error happens it will be rethrown and not reported via `onError`.\\r\\n     */\\r\\n    runTask<T>(fn: (...args: any[]) => T, applyThis?: any, applyArgs?: any[], name?: string): T;\\r\\n    /**\\r\\n     * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not\\r\\n     * rethrown.\\r\\n     */\\r\\n    runGuarded<T>(fn: (...args: any[]) => T, applyThis?: any, applyArgs?: any[]): T;\\r\\n    /**\\r\\n     * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by\\r\\n     * the function.\\r\\n     *\\r\\n     * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do\\r\\n     * work that\\r\\n     * doesn't trigger Angular change-detection or is subject to Angular's error handling.\\r\\n     *\\r\\n     * Any future tasks or microtasks scheduled from within this function will continue executing from\\r\\n     * outside of the Angular zone.\\r\\n     *\\r\\n     * Use {@link #run} to reenter the Angular zone and do work that updates the application model.\\r\\n     */\\r\\n    runOutsideAngular<T>(fn: (...args: any[]) => T): T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Defines a schema that allows any property on any element.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const NO_ERRORS_SCHEMA: SchemaMetadata;\\r\\n\\r\\ndeclare interface NodeCheckFn {\\r\\n    (view: ViewData, nodeIndex: number, argStyle: ɵArgumentType.Dynamic, values: any[]): any;\\r\\n    (view: ViewData, nodeIndex: number, argStyle: ɵArgumentType.Inline, v0?: any, v1?: any, v2?: any, v3?: any, v4?: any, v5?: any, v6?: any, v7?: any, v8?: any, v9?: any): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Node instance data.\\r\\n *\\r\\n * We have a separate type per NodeType to save memory\\r\\n * (TextData | ElementData | ProviderData | PureExpressionData | QueryList<any>)\\r\\n *\\r\\n * To keep our code monomorphic,\\r\\n * we prohibit using `NodeData` directly but enforce the use of accessors (`asElementData`, ...).\\r\\n * This way, no usage site can get a `NodeData` from view.nodes and then use it for different\\r\\n * purposes.\\r\\n */\\r\\ndeclare class NodeData {\\r\\n    private __brand;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A node definition in the view.\\r\\n *\\r\\n * Note: We use one type for all nodes so that loops that loop over all nodes\\r\\n * of a ViewDefinition stay monomorphic!\\r\\n */\\r\\ndeclare interface NodeDef {\\r\\n    flags: ɵNodeFlags;\\r\\n    nodeIndex: number;\\r\\n    checkIndex: number;\\r\\n    parent: NodeDef | null;\\r\\n    renderParent: NodeDef | null;\\r\\n    /** this is checked against NgContentDef.index to find matched nodes */\\r\\n    ngContentIndex: number | null;\\r\\n    /** number of transitive children */\\r\\n    childCount: number;\\r\\n    /** aggregated NodeFlags for all transitive children (does not include self) **/\\r\\n    childFlags: ɵNodeFlags;\\r\\n    /** aggregated NodeFlags for all direct children (does not include self) **/\\r\\n    directChildFlags: ɵNodeFlags;\\r\\n    bindingIndex: number;\\r\\n    bindings: BindingDef[];\\r\\n    bindingFlags: ɵBindingFlags;\\r\\n    outputIndex: number;\\r\\n    outputs: OutputDef[];\\r\\n    /**\\r\\n     * references that the user placed on the element\\r\\n     */\\r\\n    references: {\\r\\n        [refId: string]: ɵQueryValueType;\\r\\n    };\\r\\n    /**\\r\\n     * ids and value types of all queries that are matched by this node.\\r\\n     */\\r\\n    matchedQueries: {\\r\\n        [queryId: number]: ɵQueryValueType;\\r\\n    };\\r\\n    /** Binary or of all matched query ids of this node. */\\r\\n    matchedQueryIds: number;\\r\\n    /**\\r\\n     * Binary or of all query ids that are matched by one of the children.\\r\\n     * This includes query ids from templates as well.\\r\\n     * Used as a bloom filter.\\r\\n     */\\r\\n    childMatchedQueries: number;\\r\\n    element: ElementDef | null;\\r\\n    provider: ProviderDef | null;\\r\\n    text: TextDef | null;\\r\\n    query: QueryDef | null;\\r\\n    ngContent: NgContentDef | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Function to call console.error at the right source location. This is an indirection\\r\\n * via another function as browser will log the location that actually called\\r\\n * `console.error`.\\r\\n */\\r\\ndeclare interface NodeLogger {\\r\\n    (): () => void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Object Oriented style of API needed to create elements and text nodes.\\r\\n *\\r\\n * This is the native browser API style, e.g. operations are methods on individual objects\\r\\n * like HTMLElement. With this style, no additional code is needed as a facade\\r\\n * (reducing payload size).\\r\\n * */\\r\\ndeclare interface ObjectOrientedRenderer3 {\\r\\n    createComment(data: string): RComment;\\r\\n    createElement(tagName: string): RElement;\\r\\n    createElementNS(namespace: string, tagName: string): RElement;\\r\\n    createTextNode(data: string): RText;\\r\\n    querySelector(selectors: string): RElement | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A lifecycle hook that is called when any data-bound property of a directive changes.\\r\\n * Define an `ngOnChanges()` method to handle the changes.\\r\\n *\\r\\n * @see `DoCheck`\\r\\n * @see `OnInit`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface to\\r\\n * define an on-changes handler for an input property.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='OnChanges'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface OnChanges {\\r\\n    /**\\r\\n     * A callback method that is invoked immediately after the\\r\\n     * default change detector has checked data-bound properties\\r\\n     * if at least one has changed, and before the view and content\\r\\n     * children are checked.\\r\\n     * @param changes The changed properties.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A lifecycle hook that is called when a directive, pipe, or service is destroyed.\\r\\n * Use for any custom cleanup that needs to occur when the\\r\\n * instance is destroyed.\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface\\r\\n * to define its own custom clean-up method.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='OnDestroy'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface OnDestroy {\\r\\n    /**\\r\\n     * A callback method that performs custom clean-up, invoked immediately\\r\\n     * after a directive, pipe, or service instance is destroyed.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A lifecycle hook that is called after Angular has initialized\\r\\n * all data-bound properties of a directive.\\r\\n * Define an `ngOnInit()` method to handle any additional initialization tasks.\\r\\n *\\r\\n * @see `AfterContentInit`\\r\\n * @see [Lifecycle Hooks](guide/lifecycle-hooks#onchanges) guide\\r\\n *\\r\\n * @usageNotes\\r\\n * The following snippet shows how a component can implement this interface to\\r\\n * define its own initialization method.\\r\\n *\\r\\n * {@example core/ts/metadata/lifecycle_hooks_spec.ts region='OnInit'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface OnInit {\\r\\n    /**\\r\\n     * A callback method that is invoked immediately after the\\r\\n     * default change detector has checked the directive's\\r\\n     * data-bound properties for the first time,\\r\\n     * and before any of the view or content children have been checked.\\r\\n     * It is invoked only once when the directive is instantiated.\\r\\n     */\\r\\n    ngOnInit(): void;\\r\\n}\\r\\n\\r\\ndeclare interface OpaqueViewState {\\r\\n    '__brand__': 'Brand for OpaqueViewState that nothing will match';\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the Optional metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Optional {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Optional decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Optional: OptionalDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Optional decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface OptionalDecorator {\\r\\n    /**\\r\\n     * Parameter decorator to be used on constructor parameters,\\r\\n     * which marks the parameter as being an optional dependency.\\r\\n     * The DI framework provides null if the dependency is not found.\\r\\n     *\\r\\n     * Can be used together with other parameter decorators\\r\\n     * that modify how dependency injection operates.\\r\\n     *\\r\\n     * Learn more in the [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * The following code allows the possibility of a null result:\\r\\n     *\\r\\n     * <code-example path=\\\"core/di/ts/metadata_spec.ts\\\" region=\\\"Optional\\\">\\r\\n     * </code-example>\\r\\n     *\\r\\n     */\\r\\n    (): any;\\r\\n    new (): Optional;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the Output metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Output {\\r\\n    /**\\r\\n    * The name of the DOM property to which the output property is bound.\\r\\n    */\\r\\n    bindingPropertyName?: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Output: OutputDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Output decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface OutputDecorator {\\r\\n    /**\\r\\n    * Decorator that marks a class field as an output property and supplies configuration metadata.\\r\\n    * The DOM property bound to the output property is automatically updated during change detection.\\r\\n    *\\r\\n    * @usageNotes\\r\\n    *\\r\\n    * You can supply an optional name to use in templates when the\\r\\n    * component is instantiated, that maps to the\\r\\n    * name of the bound property. By default, the original\\r\\n    * name of the bound property is used for output binding.\\r\\n    *\\r\\n    * See `Input` decorator for an example of providing a binding name.\\r\\n    *\\r\\n    * @see [Input and Output properties](guide/template-syntax#input-and-output-properties)\\r\\n    *\\r\\n    */\\r\\n    (bindingPropertyName?: string): any;\\r\\n    new (bindingPropertyName?: string): any;\\r\\n}\\r\\n\\r\\ndeclare interface OutputDef {\\r\\n    type: OutputType;\\r\\n    target: 'window' | 'document' | 'body' | 'component' | null;\\r\\n    eventName: string;\\r\\n    propName: string | null;\\r\\n}\\r\\n\\r\\ndeclare const enum OutputType {\\r\\n    ElementOutput = 0,\\r\\n    DirectiveOutput = 1\\r\\n}\\r\\n\\r\\n/**\\r\\n * A token which indicates the root directory of the application\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const PACKAGE_ROOT_URL: InjectionToken<string>;\\r\\n\\r\\ndeclare const PARENT = 3;\\r\\n\\r\\n/**\\r\\n * Type of the Pipe metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Pipe {\\r\\n    /**\\r\\n     * The pipe name to use in template bindings.\\r\\n     * Typically uses [lowerCamelCase](guide/glossary#case-types)\\r\\n     * because the name cannot contain hyphens.\\r\\n     */\\r\\n    name: string;\\r\\n    /**\\r\\n     * When true, the pipe is pure, meaning that the\\r\\n     * `transform()` method is invoked only when its input arguments\\r\\n     * change. Pipes are pure by default.\\r\\n     *\\r\\n     * If the pipe has internal state (that is, the result\\r\\n     * depends on state other than its arguments), set `pure` to false.\\r\\n     * In this case, the pipe is invoked on each change-detection cycle,\\r\\n     * even if the arguments have not changed.\\r\\n     */\\r\\n    pure?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Pipe: PipeDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Pipe decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface PipeDecorator {\\r\\n    /**\\r\\n     *\\r\\n     * Decorator that marks a class as pipe and supplies configuration metadata.\\r\\n     *\\r\\n     * A pipe class must implement the `PipeTransform` interface.\\r\\n     * For example, if the name is \\\"myPipe\\\", use a template binding expression\\r\\n     * such as the following:\\r\\n     *\\r\\n     * ```\\r\\n     * {{ exp | myPipe }}\\r\\n     * ```\\r\\n     *\\r\\n     * The result of the expression is passed to the pipe's `transform()` method.\\r\\n     *\\r\\n     * A pipe must belong to an NgModule in order for it to be available\\r\\n     * to a template. To make it a member of an NgModule,\\r\\n     * list it in the `declarations` field of the `NgModule` metadata.\\r\\n     *\\r\\n     * @see [Style Guide: Pipe Names](guide/styleguide#02-09)\\r\\n     *\\r\\n     */\\r\\n    (obj: Pipe): TypeDecorator;\\r\\n    /**\\r\\n     * See the `Pipe` decorator.\\r\\n     */\\r\\n    new (obj: Pipe): Pipe;\\r\\n}\\r\\n\\r\\ndeclare type PipeDefList = ɵPipeDef<any>[];\\r\\n\\r\\n/**\\r\\n * Type used for PipeDefs on component definition.\\r\\n *\\r\\n * The function is necessary to be able to support forward declarations.\\r\\n */\\r\\ndeclare type PipeDefListOrFactory = (() => PipeDefList) | PipeDefList;\\r\\n\\r\\n\\r\\n/**\\r\\n * An interface that is implemented by pipes in order to perform a transformation.\\r\\n * Angular invokes the `transform` method with the value of a binding\\r\\n * as the first argument, and any parameters as the second argument in list form.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * In the following example, `RepeatPipe` repeats a given value a given number of times.\\r\\n *\\r\\n * ```ts\\r\\n * import {Pipe, PipeTransform} from '@angular/core';\\r\\n *\\r\\n * @Pipe({name: 'repeat'})\\r\\n * export class RepeatPipe implements PipeTransform {\\r\\n *   transform(value: any, times: number) {\\r\\n *     return value.repeat(times);\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * Invoking `{{ 'ok' | repeat:3 }}` in a template produces `okokok`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface PipeTransform {\\r\\n    transform(value: any, ...args: any[]): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A subclass of `Type` which has a static `ɵpipe`:`PipeDef` field making it\\r\\n * consumable for rendering.\\r\\n */\\r\\ndeclare interface PipeType<T> extends Type<T> {\\r\\n    ɵpipe: never;\\r\\n}\\r\\n\\r\\ndeclare type PipeTypeList = (PipeType<any> | Type<any>)[];\\r\\n\\r\\ndeclare type PipeTypesOrFactory = (() => PipeTypeList) | PipeTypeList;\\r\\n\\r\\n/**\\r\\n * A token that indicates an opaque platform id.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const PLATFORM_ID: InjectionToken<Object>;\\r\\n\\r\\n/**\\r\\n * A function that will be executed when a platform is initialized.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const PLATFORM_INITIALIZER: InjectionToken<(() => void)[]>;\\r\\n\\r\\n/**\\r\\n * This platform has to be included in any other platform\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const platformCore: (extraProviders?: StaticProvider[] | undefined) => PlatformRef;\\r\\n\\r\\n/**\\r\\n * The Angular platform is the entry point for Angular on a web page. Each page\\r\\n * has exactly one platform, and services (such as reflection) which are common\\r\\n * to every Angular application running on the page are bound in its scope.\\r\\n *\\r\\n * A page's platform is initialized implicitly when a platform is created via a platform factory\\r\\n * (e.g. {@link platformBrowser}), or explicitly by calling the {@link createPlatform} function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class PlatformRef {\\r\\n    private _injector;\\r\\n    private _modules;\\r\\n    private _destroyListeners;\\r\\n    private _destroyed;\\r\\n    /**\\r\\n     * Creates an instance of an `@NgModule` for the given platform\\r\\n     * for offline compilation.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Simple Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * my_module.ts:\\r\\n     *\\r\\n     * @NgModule({\\r\\n     *   imports: [BrowserModule]\\r\\n     * })\\r\\n     * class MyModule {}\\r\\n     *\\r\\n     * main.ts:\\r\\n     * import {MyModuleNgFactory} from './my_module.ngfactory';\\r\\n     * import {platformBrowser} from '@angular/platform-browser';\\r\\n     *\\r\\n     * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);\\r\\n     * ```\\r\\n     */\\r\\n    bootstrapModuleFactory<M>(moduleFactory: NgModuleFactory<M>, options?: BootstrapOptions): Promise<NgModuleRef<M>>;\\r\\n    /**\\r\\n     * Creates an instance of an `@NgModule` for a given platform using the given runtime compiler.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Simple Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @NgModule({\\r\\n     *   imports: [BrowserModule]\\r\\n     * })\\r\\n     * class MyModule {}\\r\\n     *\\r\\n     * let moduleRef = platformBrowser().bootstrapModule(MyModule);\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    bootstrapModule<M>(moduleType: Type<M>, compilerOptions?: (CompilerOptions & BootstrapOptions) | Array<CompilerOptions & BootstrapOptions>): Promise<NgModuleRef<M>>;\\r\\n    private _moduleDoBootstrap;\\r\\n    /**\\r\\n     * Register a listener to be called when the platform is disposed.\\r\\n     */\\r\\n    onDestroy(callback: () => void): void;\\r\\n    /**\\r\\n     * Retrieve the platform {@link Injector}, which is the parent injector for\\r\\n     * every Angular application on the page and provides singleton providers.\\r\\n     */\\r\\n    readonly injector: Injector;\\r\\n    /**\\r\\n     * Destroy the Angular platform and all Angular applications on the page.\\r\\n     */\\r\\n    destroy(): void;\\r\\n    readonly destroyed: boolean;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<PlatformRef>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<PlatformRef>;\\n}\\r\\n\\r\\ndeclare interface PlatformReflectionCapabilities {\\r\\n    isReflectionEnabled(): boolean;\\r\\n    factory(type: Type<any>): Function;\\r\\n    hasLifecycleHook(type: any, lcProperty: string): boolean;\\r\\n    guards(type: any): {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    /**\\r\\n     * Return a list of annotations/types for constructor parameters\\r\\n     */\\r\\n    parameters(type: Type<any>): any[][];\\r\\n    /**\\r\\n     * Return a list of annotations declared on the class\\r\\n     */\\r\\n    annotations(type: Type<any>): any[];\\r\\n    /**\\r\\n     * Return a object literal which describes the annotations on Class fields/properties.\\r\\n     */\\r\\n    propMetadata(typeOrFunc: Type<any>): {\\r\\n        [key: string]: any[];\\r\\n    };\\r\\n    getter(name: string): ɵGetterFn;\\r\\n    setter(name: string): ɵSetterFn;\\r\\n    method(name: string): ɵMethodFn;\\r\\n    importUri(type: Type<any>): string;\\r\\n    resourceUri(type: Type<any>): string;\\r\\n    resolveIdentifier(name: string, moduleUrl: string, members: string[], runtime: any): any;\\r\\n    resolveEnum(enumIdentifier: any, name: string): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A boolean-valued function over a value, possibly including context information\\r\\n * regarding that value's position in an array.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Predicate<T> {\\r\\n    (value: T): boolean;\\r\\n}\\r\\n\\r\\ndeclare const PREORDER_HOOK_FLAGS = 18;\\r\\n\\r\\n/** More flags associated with an LView (saved in LView[FLAGS_MORE]) */\\r\\ndeclare const enum PreOrderHookFlags {\\r\\n    /** The index of the next pre-order hook to be called in the hooks array, on the first 16\\r\\n       bits */\\r\\n    IndexOfTheNextPreOrderHookMaskMask = 65535,\\r\\n    /**\\r\\n     * The number of init hooks that have already been called, on the last 16 bits\\r\\n     */\\r\\n    NumberOfInitHooksCalledIncrementer = 65536,\\r\\n    NumberOfInitHooksCalledShift = 16,\\r\\n    NumberOfInitHooksCalledMask = 4294901760\\r\\n}\\r\\n\\r\\n/**\\r\\n * Procedural style of API needed to create elements and text nodes.\\r\\n *\\r\\n * In non-native browser environments (e.g. platforms such as web-workers), this is the\\r\\n * facade that enables element manipulation. This also facilitates backwards compatibility\\r\\n * with Renderer2.\\r\\n */\\r\\ndeclare interface ProceduralRenderer3 {\\r\\n    destroy(): void;\\r\\n    createComment(value: string): RComment;\\r\\n    createElement(name: string, namespace?: string | null): RElement;\\r\\n    createText(value: string): RText;\\r\\n    /**\\r\\n     * This property is allowed to be null / undefined,\\r\\n     * in which case the view engine won't call it.\\r\\n     * This is used as a performance optimization for production mode.\\r\\n     */\\r\\n    destroyNode?: ((node: RNode) => void) | null;\\r\\n    appendChild(parent: RElement, newChild: RNode): void;\\r\\n    insertBefore(parent: RNode, newChild: RNode, refChild: RNode | null): void;\\r\\n    removeChild(parent: RElement, oldChild: RNode, isHostElement?: boolean): void;\\r\\n    selectRootElement(selectorOrNode: string | any): RElement;\\r\\n    parentNode(node: RNode): RElement | null;\\r\\n    nextSibling(node: RNode): RNode | null;\\r\\n    setAttribute(el: RElement, name: string, value: string, namespace?: string | null): void;\\r\\n    removeAttribute(el: RElement, name: string, namespace?: string | null): void;\\r\\n    addClass(el: RElement, name: string): void;\\r\\n    removeClass(el: RElement, name: string): void;\\r\\n    setStyle(el: RElement, style: string, value: any, flags?: RendererStyleFlags2 | RendererStyleFlags3): void;\\r\\n    removeStyle(el: RElement, style: string, flags?: RendererStyleFlags2 | RendererStyleFlags3): void;\\r\\n    setProperty(el: RElement, name: string, value: any): void;\\r\\n    setValue(node: RText | RComment, value: string): void;\\r\\n    listen(target: GlobalTargetName | RNode, eventName: string, callback: (event: any) => boolean | void): () => void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Describes a function that is used to process provider lists (such as provider\\r\\n * overrides).\\r\\n */\\r\\ndeclare type ProcessProvidersFunction = (providers: Provider[]) => Provider[];\\r\\n\\r\\n/**\\r\\n * List of slots for a projection. A slot can be either based on a parsed CSS selector\\r\\n * which will be used to determine nodes which are projected into that slot.\\r\\n *\\r\\n * When set to \\\"*\\\", the slot is reserved and can be used for multi-slot projection\\r\\n * using {@link ViewContainerRef#createComponent}. The last slot that specifies the\\r\\n * wildcard selector will retrieve all projectable nodes which do not match any selector.\\r\\n */\\r\\ndeclare type ProjectionSlots = (ɵCssSelectorList | '*')[];\\r\\n\\r\\n/**\\r\\n * This mapping is necessary so we can set input properties and output listeners\\r\\n * properly at runtime when property names are minified or aliased.\\r\\n *\\r\\n * Key: unminified / public input or output name\\r\\n * Value: array containing minified / internal name and related directive index\\r\\n *\\r\\n * The value must be an array to support inputs and outputs with the same name\\r\\n * on the same node.\\r\\n */\\r\\ndeclare type PropertyAliases = {\\r\\n    [key: string]: PropertyAliasValue;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Store the runtime input or output names for all the directives.\\r\\n *\\r\\n * i+0: directive instance index\\r\\n * i+1: publicName\\r\\n * i+2: privateName\\r\\n *\\r\\n * e.g. [0, 'change', 'change-minified']\\r\\n */\\r\\ndeclare type PropertyAliasValue = (number | string)[];\\r\\n\\r\\n/**\\r\\n * Describes how the `Injector` should be configured.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @see `StaticProvider`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type Provider = TypeProvider | ValueProvider | ClassProvider | ConstructorProvider | ExistingProvider | FactoryProvider | any[];\\r\\n\\r\\ndeclare interface ProviderDef {\\r\\n    token: any;\\r\\n    value: any;\\r\\n    deps: DepDef[];\\r\\n}\\r\\n\\r\\ndeclare interface ProviderOverride {\\r\\n    token: any;\\r\\n    flags: ɵNodeFlags;\\r\\n    value: any;\\r\\n    deps: ([ɵDepFlags, any] | any)[];\\r\\n    deprecatedBehavior: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Testability API.\\r\\n * `declare` keyword causes tsickle to generate externs, so these methods are\\r\\n * not renamed by Closure Compiler.\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface PublicTestability {\\r\\n    isStable(): boolean;\\r\\n    whenStable(callback: Function, timeout?: number, updateCallback?: Function): void;\\r\\n    findProviders(using: any, provider: string, exactMatch: boolean): any[];\\r\\n}\\r\\n\\r\\ndeclare const QUERIES = 5;\\r\\n\\r\\n/**\\r\\n * Type of the Query metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Query {\\r\\n    descendants: boolean;\\r\\n    first: boolean;\\r\\n    read: any;\\r\\n    isViewQuery: boolean;\\r\\n    selector: any;\\r\\n    static?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Base class for query metadata.\\r\\n *\\r\\n * @see `ContentChildren`.\\r\\n * @see `ContentChild`.\\r\\n * @see `ViewChildren`.\\r\\n * @see `ViewChild`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class Query {\\r\\n}\\r\\n\\r\\ndeclare interface QueryBindingDef {\\r\\n    propName: string;\\r\\n    bindingType: ɵQueryBindingType;\\r\\n}\\r\\n\\r\\ndeclare interface QueryDef {\\r\\n    id: number;\\r\\n    filterId: number;\\r\\n    bindings: QueryBindingDef[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * An unmodifiable list of items that Angular keeps up to date when the state\\r\\n * of the application changes.\\r\\n *\\r\\n * The type of object that {@link ViewChildren}, {@link ContentChildren}, and {@link QueryList}\\r\\n * provide.\\r\\n *\\r\\n * Implements an iterable interface, therefore it can be used in both ES6\\r\\n * javascript `for (var i of items)` loops as well as in Angular templates with\\r\\n * `*ngFor=\\\"let i of myList\\\"`.\\r\\n *\\r\\n * Changes can be observed by subscribing to the changes `Observable`.\\r\\n *\\r\\n * NOTE: In the future this class will implement an `Observable` interface.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n * ```typescript\\r\\n * @Component({...})\\r\\n * class Container {\\r\\n *   @ViewChildren(Item) items:QueryList<Item>;\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class QueryList<T> {\\r\\n    readonly dirty = true;\\r\\n    private _results;\\r\\n    readonly changes: Observable<any>;\\r\\n    readonly length: number;\\r\\n    readonly first: T;\\r\\n    readonly last: T;\\r\\n    constructor();\\r\\n    /**\\r\\n     * See\\r\\n     * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)\\r\\n     */\\r\\n    map<U>(fn: (item: T, index: number, array: T[]) => U): U[];\\r\\n    /**\\r\\n     * See\\r\\n     * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)\\r\\n     */\\r\\n    filter(fn: (item: T, index: number, array: T[]) => boolean): T[];\\r\\n    /**\\r\\n     * See\\r\\n     * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)\\r\\n     */\\r\\n    find(fn: (item: T, index: number, array: T[]) => boolean): T | undefined;\\r\\n    /**\\r\\n     * See\\r\\n     * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)\\r\\n     */\\r\\n    reduce<U>(fn: (prevValue: U, curValue: T, curIndex: number, array: T[]) => U, init: U): U;\\r\\n    /**\\r\\n     * See\\r\\n     * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)\\r\\n     */\\r\\n    forEach(fn: (item: T, index: number, array: T[]) => void): void;\\r\\n    /**\\r\\n     * See\\r\\n     * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)\\r\\n     */\\r\\n    some(fn: (value: T, index: number, array: T[]) => boolean): boolean;\\r\\n    /**\\r\\n     * Returns a copy of the internal results list as an Array.\\r\\n     */\\r\\n    toArray(): T[];\\r\\n    toString(): string;\\r\\n    /**\\r\\n     * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that\\r\\n     * on change detection, it will not notify of changes to the queries, unless a new change\\r\\n     * occurs.\\r\\n     *\\r\\n     * @param resultsTree The query results to store\\r\\n     */\\r\\n    reset(resultsTree: Array<T | any[]>): void;\\r\\n    /**\\r\\n     * Triggers a change event by emitting on the `changes` {@link EventEmitter}.\\r\\n     */\\r\\n    notifyOnChanges(): void;\\r\\n    /** internal */\\r\\n    setDirty(): void;\\r\\n    /** internal */\\r\\n    destroy(): void;\\r\\n}\\r\\n\\r\\ndeclare class R3Injector {\\r\\n    readonly parent: Injector;\\r\\n    /**\\r\\n     * Map of tokens to records which contain the instances of those tokens.\\r\\n     * - `null` value implies that we don't have the record. Used by tree-shakable injectors\\r\\n     * to prevent further searches.\\r\\n     */\\r\\n    private records;\\r\\n    /**\\r\\n     * The transitive set of `InjectorType`s which define this injector.\\r\\n     */\\r\\n    private injectorDefTypes;\\r\\n    /**\\r\\n     * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.\\r\\n     */\\r\\n    private onDestroy;\\r\\n    /**\\r\\n     * Flag indicating this injector provides the APP_ROOT_SCOPE token, and thus counts as the\\r\\n     * root scope.\\r\\n     */\\r\\n    private readonly scope;\\r\\n    readonly source: string | null;\\r\\n    /**\\r\\n     * Flag indicating that this injector was previously destroyed.\\r\\n     */\\r\\n    readonly destroyed: boolean;\\r\\n    private _destroyed;\\r\\n    constructor(def: InjectorType<any>, additionalProviders: StaticProvider[] | null, parent: Injector, source?: string | null);\\r\\n    /**\\r\\n     * Destroy the injector and release references to every instance or provider associated with it.\\r\\n     *\\r\\n     * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a\\r\\n     * hook was found.\\r\\n     */\\r\\n    destroy(): void;\\r\\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: any, flags?: InjectFlags): T;\\r\\n    toString(): string;\\r\\n    private assertNotDestroyed;\\r\\n    /**\\r\\n     * Add an `InjectorType` or `InjectorTypeWithProviders` and all of its transitive providers\\r\\n     * to this injector.\\r\\n     *\\r\\n     * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,\\r\\n     * the function will return \\\"true\\\" to indicate that the providers of the type definition need\\r\\n     * to be processed. This allows us to process providers of injector types after all imports of\\r\\n     * an injector definition are processed. (following View Engine semantics: see FW-1349)\\r\\n     */\\r\\n    private processInjectorType;\\r\\n    /**\\r\\n     * Process a `SingleProvider` and add it.\\r\\n     */\\r\\n    private processProvider;\\r\\n    private hydrate;\\r\\n    private injectableDefInScope;\\r\\n}\\r\\n\\r\\ndeclare interface Range {\\r\\n}\\r\\n\\r\\ndeclare interface RComment extends RNode {\\r\\n    textContent: string | null;\\r\\n}\\r\\n\\r\\ndeclare interface RCssStyleDeclaration {\\r\\n    removeProperty(propertyName: string): string;\\r\\n    setProperty(propertyName: string, value: string | null, priority?: string): void;\\r\\n}\\r\\n\\r\\ndeclare interface RDomTokenList {\\r\\n    add(token: string): void;\\r\\n    remove(token: string): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A ReflectiveDependency injection container used for instantiating objects and resolving\\r\\n * dependencies.\\r\\n *\\r\\n * An `Injector` is a replacement for a `new` operator, which can automatically resolve the\\r\\n * constructor dependencies.\\r\\n *\\r\\n * In typical use, application code asks for the dependencies in the constructor and they are\\r\\n * resolved by the `Injector`.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * The following example creates an `Injector` configured to create `Engine` and `Car`.\\r\\n *\\r\\n * ```typescript\\r\\n * @Injectable()\\r\\n * class Engine {\\r\\n * }\\r\\n *\\r\\n * @Injectable()\\r\\n * class Car {\\r\\n *   constructor(public engine:Engine) {}\\r\\n * }\\r\\n *\\r\\n * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);\\r\\n * var car = injector.get(Car);\\r\\n * expect(car instanceof Car).toBe(true);\\r\\n * expect(car.engine instanceof Engine).toBe(true);\\r\\n * ```\\r\\n *\\r\\n * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`\\r\\n * resolve all of the object's dependencies automatically.\\r\\n *\\r\\n * @deprecated from v5 - slow and brings in a lot of code, Use `Injector.create` instead.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ReflectiveInjector implements Injector {\\r\\n    /**\\r\\n     * Turns an array of provider definitions into an array of resolved providers.\\r\\n     *\\r\\n     * A resolution is a process of flattening multiple nested arrays and converting individual\\r\\n     * providers into an array of `ResolvedReflectiveProvider`s.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Injectable()\\r\\n     * class Engine {\\r\\n     * }\\r\\n     *\\r\\n     * @Injectable()\\r\\n     * class Car {\\r\\n     *   constructor(public engine:Engine) {}\\r\\n     * }\\r\\n     *\\r\\n     * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);\\r\\n     *\\r\\n     * expect(providers.length).toEqual(2);\\r\\n     *\\r\\n     * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);\\r\\n     * expect(providers[0].key.displayName).toBe(\\\"Car\\\");\\r\\n     * expect(providers[0].dependencies.length).toEqual(1);\\r\\n     * expect(providers[0].factory).toBeDefined();\\r\\n     *\\r\\n     * expect(providers[1].key.displayName).toBe(\\\"Engine\\\");\\r\\n     * });\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    static resolve(providers: Provider[]): ResolvedReflectiveProvider[];\\r\\n    /**\\r\\n     * Resolves an array of providers and creates an injector from those providers.\\r\\n     *\\r\\n     * The passed-in providers can be an array of `Type`, `Provider`,\\r\\n     * or a recursive array of more providers.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Injectable()\\r\\n     * class Engine {\\r\\n     * }\\r\\n     *\\r\\n     * @Injectable()\\r\\n     * class Car {\\r\\n     *   constructor(public engine:Engine) {}\\r\\n     * }\\r\\n     *\\r\\n     * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);\\r\\n     * expect(injector.get(Car) instanceof Car).toBe(true);\\r\\n     * ```\\r\\n     */\\r\\n    static resolveAndCreate(providers: Provider[], parent?: Injector): ReflectiveInjector;\\r\\n    /**\\r\\n     * Creates an injector from previously resolved providers.\\r\\n     *\\r\\n     * This API is the recommended way to construct injectors in performance-sensitive parts.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Injectable()\\r\\n     * class Engine {\\r\\n     * }\\r\\n     *\\r\\n     * @Injectable()\\r\\n     * class Car {\\r\\n     *   constructor(public engine:Engine) {}\\r\\n     * }\\r\\n     *\\r\\n     * var providers = ReflectiveInjector.resolve([Car, Engine]);\\r\\n     * var injector = ReflectiveInjector.fromResolvedProviders(providers);\\r\\n     * expect(injector.get(Car) instanceof Car).toBe(true);\\r\\n     * ```\\r\\n     */\\r\\n    static fromResolvedProviders(providers: ResolvedReflectiveProvider[], parent?: Injector): ReflectiveInjector;\\r\\n    /**\\r\\n     * Parent of this injector.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\\r\\n     * -->\\r\\n     */\\r\\n    abstract readonly parent: Injector | null;\\r\\n    /**\\r\\n     * Resolves an array of providers and creates a child injector from those providers.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\\r\\n     * -->\\r\\n     *\\r\\n     * The passed-in providers can be an array of `Type`, `Provider`,\\r\\n     * or a recursive array of more providers.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * class ParentProvider {}\\r\\n     * class ChildProvider {}\\r\\n     *\\r\\n     * var parent = ReflectiveInjector.resolveAndCreate([ParentProvider]);\\r\\n     * var child = parent.resolveAndCreateChild([ChildProvider]);\\r\\n     *\\r\\n     * expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);\\r\\n     * expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);\\r\\n     * expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));\\r\\n     * ```\\r\\n     */\\r\\n    abstract resolveAndCreateChild(providers: Provider[]): ReflectiveInjector;\\r\\n    /**\\r\\n     * Creates a child injector from previously resolved providers.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\\r\\n     * -->\\r\\n     *\\r\\n     * This API is the recommended way to construct injectors in performance-sensitive parts.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * class ParentProvider {}\\r\\n     * class ChildProvider {}\\r\\n     *\\r\\n     * var parentProviders = ReflectiveInjector.resolve([ParentProvider]);\\r\\n     * var childProviders = ReflectiveInjector.resolve([ChildProvider]);\\r\\n     *\\r\\n     * var parent = ReflectiveInjector.fromResolvedProviders(parentProviders);\\r\\n     * var child = parent.createChildFromResolved(childProviders);\\r\\n     *\\r\\n     * expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);\\r\\n     * expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);\\r\\n     * expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));\\r\\n     * ```\\r\\n     */\\r\\n    abstract createChildFromResolved(providers: ResolvedReflectiveProvider[]): ReflectiveInjector;\\r\\n    /**\\r\\n     * Resolves a provider and instantiates an object in the context of the injector.\\r\\n     *\\r\\n     * The created object does not get cached by the injector.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Injectable()\\r\\n     * class Engine {\\r\\n     * }\\r\\n     *\\r\\n     * @Injectable()\\r\\n     * class Car {\\r\\n     *   constructor(public engine:Engine) {}\\r\\n     * }\\r\\n     *\\r\\n     * var injector = ReflectiveInjector.resolveAndCreate([Engine]);\\r\\n     *\\r\\n     * var car = injector.resolveAndInstantiate(Car);\\r\\n     * expect(car.engine).toBe(injector.get(Engine));\\r\\n     * expect(car).not.toBe(injector.resolveAndInstantiate(Car));\\r\\n     * ```\\r\\n     */\\r\\n    abstract resolveAndInstantiate(provider: Provider): any;\\r\\n    /**\\r\\n     * Instantiates an object using a resolved provider in the context of the injector.\\r\\n     *\\r\\n     * The created object does not get cached by the injector.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Injectable()\\r\\n     * class Engine {\\r\\n     * }\\r\\n     *\\r\\n     * @Injectable()\\r\\n     * class Car {\\r\\n     *   constructor(public engine:Engine) {}\\r\\n     * }\\r\\n     *\\r\\n     * var injector = ReflectiveInjector.resolveAndCreate([Engine]);\\r\\n     * var carProvider = ReflectiveInjector.resolve([Car])[0];\\r\\n     * var car = injector.instantiateResolved(carProvider);\\r\\n     * expect(car.engine).toBe(injector.get(Engine));\\r\\n     * expect(car).not.toBe(injector.instantiateResolved(carProvider));\\r\\n     * ```\\r\\n     */\\r\\n    abstract instantiateResolved(provider: ResolvedReflectiveProvider): any;\\r\\n    abstract get(token: any, notFoundValue?: any): any;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * A unique object used for retrieving items from the {@link ReflectiveInjector}.\\r\\n *\\r\\n * Keys have:\\r\\n * - a system-wide unique `id`.\\r\\n * - a `token`.\\r\\n *\\r\\n * `Key` is used internally by {@link ReflectiveInjector} because its system-wide unique `id` allows\\r\\n * the\\r\\n * injector to store created objects in a more efficient way.\\r\\n *\\r\\n * `Key` should not be created directly. {@link ReflectiveInjector} creates keys automatically when\\r\\n * resolving\\r\\n * providers.\\r\\n *\\r\\n * @deprecated No replacement\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ReflectiveKey {\\r\\n    token: Object;\\r\\n    id: number;\\r\\n    readonly displayName: string;\\r\\n    /**\\r\\n     * Private\\r\\n     */\\r\\n    constructor(token: Object, id: number);\\r\\n    /**\\r\\n     * Retrieves a `Key` for a token.\\r\\n     */\\r\\n    static get(token: Object): ReflectiveKey;\\r\\n    /**\\r\\n     * @returns the number of keys registered in the system.\\r\\n     */\\r\\n    static readonly numberOfKeys: number;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Subset of API needed for writing attributes, properties, and setting up\\r\\n * listeners on Element.\\r\\n */\\r\\ndeclare interface RElement extends RNode {\\r\\n    style: RCssStyleDeclaration;\\r\\n    classList: RDomTokenList;\\r\\n    className: string;\\r\\n    setAttribute(name: string, value: string): void;\\r\\n    removeAttribute(name: string): void;\\r\\n    setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void;\\r\\n    addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;\\r\\n    removeEventListener(type: string, listener?: EventListener, options?: boolean): void;\\r\\n    setProperty?(name: string, value: any): void;\\r\\n}\\r\\n\\r\\ndeclare const RENDERER = 12;\\r\\n\\r\\n/**\\r\\n * Extend this base class to implement custom rendering. By default, Angular\\r\\n * renders a template into DOM. You can use custom rendering to intercept\\r\\n * rendering calls, or to render to something other than DOM.\\r\\n *\\r\\n * Create your custom renderer using `RendererFactory2`.\\r\\n *\\r\\n * Use a custom renderer to bypass Angular's templating and\\r\\n * make custom UI changes that can't be expressed declaratively.\\r\\n * For example if you need to set a property or an attribute whose name is\\r\\n * not statically known, use the `setProperty()` or\\r\\n * `setAttribute()` method.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class Renderer2 {\\r\\n    /**\\r\\n     * Use to store arbitrary developer-defined data on a renderer instance,\\r\\n     * as an object containing key-value pairs.\\r\\n     * This is useful for renderers that delegate to other renderers.\\r\\n     */\\r\\n    abstract readonly data: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    /**\\r\\n     * Implement this callback to destroy the renderer or the host element.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * Implement this callback to create an instance of the host element.\\r\\n     * @param name An identifying name for the new element, unique within the namespace.\\r\\n     * @param namespace The namespace for the new element.\\r\\n     * @returns The new element.\\r\\n     */\\r\\n    abstract createElement(name: string, namespace?: string | null): any;\\r\\n    /**\\r\\n     * Implement this callback to add a comment to the DOM of the host element.\\r\\n     * @param value The comment text.\\r\\n     * @returns The modified element.\\r\\n     */\\r\\n    abstract createComment(value: string): any;\\r\\n    /**\\r\\n     * Implement this callback to add text to the DOM of the host element.\\r\\n     * @param value The text string.\\r\\n     * @returns The modified element.\\r\\n     */\\r\\n    abstract createText(value: string): any;\\r\\n    /**\\r\\n     * If null or undefined, the view engine won't call it.\\r\\n     * This is used as a performance optimization for production mode.\\r\\n     */\\r\\n    destroyNode: ((node: any) => void) | null;\\r\\n    /**\\r\\n     * Appends a child to a given parent node in the host element DOM.\\r\\n     * @param parent The parent node.\\r\\n     * @param newChild The new child node.\\r\\n     */\\r\\n    abstract appendChild(parent: any, newChild: any): void;\\r\\n    /**\\r\\n     * Implement this callback to insert a child node at a given position in a parent node\\r\\n     * in the host element DOM.\\r\\n     * @param parent The parent node.\\r\\n     * @param newChild The new child nodes.\\r\\n     * @param refChild The existing child node that should precede the new node.\\r\\n     */\\r\\n    abstract insertBefore(parent: any, newChild: any, refChild: any): void;\\r\\n    /**\\r\\n     * Implement this callback to remove a child node from the host element's DOM.\\r\\n     * @param parent The parent node.\\r\\n     * @param oldChild The child node to remove.\\r\\n     * @param isHostElement Optionally signal to the renderer whether this element is a host element\\r\\n     * or not\\r\\n     */\\r\\n    abstract removeChild(parent: any, oldChild: any, isHostElement?: boolean): void;\\r\\n    /**\\r\\n     * Implement this callback to prepare an element to be bootstrapped\\r\\n     * as a root element, and return the element instance.\\r\\n     * @param selectorOrNode The DOM element.\\r\\n     * @param preserveContent Whether the contents of the root element\\r\\n     * should be preserved, or cleared upon bootstrap (default behavior).\\r\\n     * Use with `ViewEncapsulation.ShadowDom` to allow simple native\\r\\n     * content projection via `<slot>` elements.\\r\\n     * @returns The root element.\\r\\n     */\\r\\n    abstract selectRootElement(selectorOrNode: string | any, preserveContent?: boolean): any;\\r\\n    /**\\r\\n     * Implement this callback to get the parent of a given node\\r\\n     * in the host element's DOM.\\r\\n     * @param node The child node to query.\\r\\n     * @returns The parent node, or null if there is no parent.\\r\\n     * For WebWorkers, always returns true.\\r\\n     * This is because the check is synchronous,\\r\\n     * and the caller can't rely on checking for null.\\r\\n     */\\r\\n    abstract parentNode(node: any): any;\\r\\n    /**\\r\\n     * Implement this callback to get the next sibling node of a given node\\r\\n     * in the host element's DOM.\\r\\n     * @returns The sibling node, or null if there is no sibling.\\r\\n     * For WebWorkers, always returns a value.\\r\\n     * This is because the check is synchronous,\\r\\n     * and the caller can't rely on checking for null.\\r\\n     */\\r\\n    abstract nextSibling(node: any): any;\\r\\n    /**\\r\\n     * Implement this callback to set an attribute value for an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param name The attribute name.\\r\\n     * @param value The new value.\\r\\n     * @param namespace The namespace.\\r\\n     */\\r\\n    abstract setAttribute(el: any, name: string, value: string, namespace?: string | null): void;\\r\\n    /**\\r\\n     * Implement this callback to remove an attribute from an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param name The attribute name.\\r\\n     * @param namespace The namespace.\\r\\n     */\\r\\n    abstract removeAttribute(el: any, name: string, namespace?: string | null): void;\\r\\n    /**\\r\\n     * Implement this callback to add a class to an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param name The class name.\\r\\n     */\\r\\n    abstract addClass(el: any, name: string): void;\\r\\n    /**\\r\\n     * Implement this callback to remove a class from an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param name The class name.\\r\\n     */\\r\\n    abstract removeClass(el: any, name: string): void;\\r\\n    /**\\r\\n     * Implement this callback to set a CSS style for an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param style The name of the style.\\r\\n     * @param value The new value.\\r\\n     * @param flags Flags for style variations. No flags are set by default.\\r\\n     */\\r\\n    abstract setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2): void;\\r\\n    /**\\r\\n     * Implement this callback to remove the value from a CSS style for an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param style The name of the style.\\r\\n     * @param flags Flags for style variations to remove, if set. ???\\r\\n     */\\r\\n    abstract removeStyle(el: any, style: string, flags?: RendererStyleFlags2): void;\\r\\n    /**\\r\\n     * Implement this callback to set the value of a property of an element in the DOM.\\r\\n     * @param el The element.\\r\\n     * @param name The property name.\\r\\n     * @param value The new value.\\r\\n     */\\r\\n    abstract setProperty(el: any, name: string, value: any): void;\\r\\n    /**\\r\\n     * Implement this callback to set the value of a node in the host element.\\r\\n     * @param node The node.\\r\\n     * @param value The new value.\\r\\n     */\\r\\n    abstract setValue(node: any, value: string): void;\\r\\n    /**\\r\\n     * Implement this callback to start an event listener.\\r\\n     * @param target The context in which to listen for events. Can be\\r\\n     * the entire window or document, the body of the document, or a specific\\r\\n     * DOM element.\\r\\n     * @param eventName The event to listen for.\\r\\n     * @param callback A handler function to invoke when the event occurs.\\r\\n     * @returns An \\\"unlisten\\\" function for disposing of this handler.\\r\\n     */\\r\\n    abstract listen(target: 'window' | 'document' | 'body' | any, eventName: string, callback: (event: any) => boolean | void): () => void;\\r\\n}\\r\\n\\r\\ndeclare type Renderer3 = ObjectOrientedRenderer3 | ProceduralRenderer3;\\r\\n\\r\\ndeclare const RENDERER_FACTORY = 11;\\r\\n\\r\\n/**\\r\\n * Creates and initializes a custom renderer that implements the `Renderer2` base class.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class RendererFactory2 {\\r\\n    /**\\r\\n     * Creates and initializes a custom renderer for a host DOM element.\\r\\n     * @param hostElement The element to render.\\r\\n     * @param type The base class to implement.\\r\\n     * @returns The new custom renderer instance.\\r\\n     */\\r\\n    abstract createRenderer(hostElement: any, type: RendererType2 | null): Renderer2;\\r\\n    /**\\r\\n     * A callback invoked when rendering has begun.\\r\\n     */\\r\\n    abstract begin?(): void;\\r\\n    /**\\r\\n     * A callback invoked when rendering has completed.\\r\\n     */\\r\\n    abstract end?(): void;\\r\\n    /**\\r\\n     * Use with animations test-only mode. Notifies the test when rendering has completed.\\r\\n     * @returns The asynchronous result of the developer-defined function.\\r\\n     */\\r\\n    abstract whenRenderingDone?(): Promise<any>;\\r\\n}\\r\\n\\r\\ndeclare interface RendererFactory3 {\\r\\n    createRenderer(hostElement: RElement | null, rendererType: RendererType2 | null): Renderer3;\\r\\n    begin?(): void;\\r\\n    end?(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Flags for renderer-specific style modifiers.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare enum RendererStyleFlags2 {\\r\\n    /**\\r\\n     * Marks a style as important.\\r\\n     */\\r\\n    Important = 1,\\r\\n    /**\\r\\n     * Marks a style as using dash case naming (this-is-dash-case).\\r\\n     */\\r\\n    DashCase = 2\\r\\n}\\r\\n\\r\\ndeclare enum RendererStyleFlags3 {\\r\\n    Important = 1,\\r\\n    DashCase = 2\\r\\n}\\r\\n\\r\\n/**\\r\\n * Used by `RendererFactory2` to associate custom rendering data and styles\\r\\n * with a rendering implementation.\\r\\n *  @publicApi\\r\\n */\\r\\nexport declare interface RendererType2 {\\r\\n    /**\\r\\n     * A unique identifying string for the new renderer, used when creating\\r\\n     * unique styles for encapsulation.\\r\\n     */\\r\\n    id: string;\\r\\n    /**\\r\\n     * The view encapsulation type, which determines how styles are applied to\\r\\n     * DOM elements. One of\\r\\n     * - `Emulated` (default): Emulate native scoping of styles.\\r\\n     * - `Native`: Use the native encapsulation mechanism of the renderer.\\r\\n     * - `ShadowDom`: Use modern [Shadow\\r\\n     * DOM](https://w3c.github.io/webcomponents/spec/shadow/) and\\r\\n     * create a ShadowRoot for component's host element.\\r\\n     * - `None`: Do not provide any template or style encapsulation.\\r\\n     */\\r\\n    encapsulation: ViewEncapsulation;\\r\\n    /**\\r\\n     * Defines CSS styles to be stored on a renderer instance.\\r\\n     */\\r\\n    styles: (string | any[])[];\\r\\n    /**\\r\\n     * Defines arbitrary developer-defined data to be stored on a renderer instance.\\r\\n     * This is useful for renderers that delegate to other renderers.\\r\\n     */\\r\\n    data: {\\r\\n        [kind: string]: any;\\r\\n    };\\r\\n}\\r\\n\\r\\n/**\\r\\n * An internal resolved representation of a factory function created by resolving `Provider`.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ResolvedReflectiveFactory {\\r\\n    /**\\r\\n     * Factory function which can return an instance of an object represented by a key.\\r\\n     */\\r\\n    factory: Function;\\r\\n    /**\\r\\n     * Arguments (dependencies) to the `factory` function.\\r\\n     */\\r\\n    dependencies: ɵangular_packages_core_core_e[];\\r\\n    constructor(\\r\\n    /**\\r\\n     * Factory function which can return an instance of an object represented by a key.\\r\\n     */\\r\\n    factory: Function, \\r\\n    /**\\r\\n     * Arguments (dependencies) to the `factory` function.\\r\\n     */\\r\\n    dependencies: ɵangular_packages_core_core_e[]);\\r\\n}\\r\\n\\r\\n/**\\r\\n * An internal resolved representation of a `Provider` used by the `Injector`.\\r\\n *\\r\\n * @usageNotes\\r\\n * This is usually created automatically by `Injector.resolveAndCreate`.\\r\\n *\\r\\n * It can be created manually, as follows:\\r\\n *\\r\\n * ### Example\\r\\n *\\r\\n * ```typescript\\r\\n * var resolvedProviders = Injector.resolve([{ provide: 'message', useValue: 'Hello' }]);\\r\\n * var injector = Injector.fromResolvedProviders(resolvedProviders);\\r\\n *\\r\\n * expect(injector.get('message')).toEqual('Hello');\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ResolvedReflectiveProvider {\\r\\n    /**\\r\\n     * A key, usually a `Type<any>`.\\r\\n     */\\r\\n    key: ReflectiveKey;\\r\\n    /**\\r\\n     * Factory function which can return an instance of an object represented by a key.\\r\\n     */\\r\\n    resolvedFactories: ResolvedReflectiveFactory[];\\r\\n    /**\\r\\n     * Indicates if the provider is a multi-provider or a regular provider.\\r\\n     */\\r\\n    multiProvider: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Lazily retrieves the reference value from a forwardRef.\\r\\n *\\r\\n * Acts as the identity function when given a non-forward-ref value.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}\\r\\n *\\r\\n * @see `forwardRef`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function resolveForwardRef<T>(type: T): T;\\r\\n\\r\\n/** Subset of API needed for appending elements and text nodes. */\\r\\ndeclare interface RNode {\\r\\n    /**\\r\\n     * Returns the parent Element, Document, or DocumentFragment\\r\\n     */\\r\\n    parentNode: RNode | null;\\r\\n    /**\\r\\n     * Returns the parent Element if there is one\\r\\n     */\\r\\n    parentElement: RElement | null;\\r\\n    /**\\r\\n     * Gets the Node immediately following this one in the parent's childNodes\\r\\n     */\\r\\n    nextSibling: RNode | null;\\r\\n    /**\\r\\n     * Removes a child from the current node and returns the removed node\\r\\n     * @param oldChild the child node to remove\\r\\n     */\\r\\n    removeChild(oldChild: RNode): RNode;\\r\\n    /**\\r\\n     * Insert a child node.\\r\\n     *\\r\\n     * Used exclusively for adding View root nodes into ViewAnchor location.\\r\\n     */\\r\\n    insertBefore(newChild: RNode, refChild: RNode | null, isViewRoot: boolean): void;\\r\\n    /**\\r\\n     * Append a child node.\\r\\n     *\\r\\n     * Used exclusively for building up DOM which are static (ie not View roots)\\r\\n     */\\r\\n    appendChild(newChild: RNode): RNode;\\r\\n}\\r\\n\\r\\n/**\\r\\n * RootContext contains information which is shared for all components which\\r\\n * were bootstrapped with {@link renderComponent}.\\r\\n */\\r\\ndeclare interface RootContext {\\r\\n    /**\\r\\n     * A function used for scheduling change detection in the future. Usually\\r\\n     * this is `requestAnimationFrame`.\\r\\n     */\\r\\n    scheduler: (workFn: () => void) => void;\\r\\n    /**\\r\\n     * A promise which is resolved when all components are considered clean (not dirty).\\r\\n     *\\r\\n     * This promise is overwritten every time a first call to {@link markDirty} is invoked.\\r\\n     */\\r\\n    clean: Promise<null>;\\r\\n    /**\\r\\n     * RootComponents - The components that were instantiated by the call to\\r\\n     * {@link renderComponent}.\\r\\n     */\\r\\n    components: {}[];\\r\\n    /**\\r\\n     * The player flushing handler to kick off all animations\\r\\n     */\\r\\n    playerHandler: ɵPlayerHandler | null;\\r\\n    /**\\r\\n     * What render-related operations to run once a scheduler has been set\\r\\n     */\\r\\n    flags: RootContextFlags;\\r\\n}\\r\\n\\r\\ndeclare const enum RootContextFlags {\\r\\n    Empty = 0,\\r\\n    DetectChanges = 1,\\r\\n    FlushPlayers = 2\\r\\n}\\r\\n\\r\\ndeclare interface RootData {\\r\\n    injector: Injector;\\r\\n    ngModule: NgModuleRef<any>;\\r\\n    projectableNodes: any[][];\\r\\n    selectorOrNode: any;\\r\\n    renderer: Renderer2;\\r\\n    rendererFactory: RendererFactory2;\\r\\n    errorHandler: ErrorHandler;\\r\\n    sanitizer: Sanitizer;\\r\\n}\\r\\n\\r\\ndeclare interface RText extends RNode {\\r\\n    textContent: string | null;\\r\\n}\\r\\n\\r\\ndeclare const SANITIZER = 13;\\r\\n\\r\\n/**\\r\\n * Sanitizer is used by the views to sanitize potentially dangerous values.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class Sanitizer {\\r\\n    abstract sanitize(context: SecurityContext, value: {} | string | null): string | null;\\r\\n    /** @nocollapse */\\r\\n    static ɵprov: never;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Function used to sanitize the value before writing it into the renderer.\\r\\n */\\r\\ndeclare type SanitizerFn = (value: any, tagName?: string, propName?: string) => string;\\r\\n\\r\\n\\r\\n/**\\r\\n * A schema definition associated with an NgModule.\\r\\n *\\r\\n * @see `@NgModule`, `CUSTOM_ELEMENTS_SCHEMA`, `NO_ERRORS_SCHEMA`\\r\\n *\\r\\n * @param name The name of a defined schema.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SchemaMetadata {\\r\\n    name: string;\\r\\n}\\r\\n\\r\\ndeclare interface Scope {\\r\\n    (...args: any[] /** TODO #9100 */): any;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * A SecurityContext marks a location that has dangerous security implications, e.g. a DOM property\\r\\n * like `innerHTML` that could cause Cross Site Scripting (XSS) security bugs when improperly\\r\\n * handled.\\r\\n *\\r\\n * See DomSanitizer for more details on security in Angular applications.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare enum SecurityContext {\\r\\n    NONE = 0,\\r\\n    HTML = 1,\\r\\n    STYLE = 2,\\r\\n    SCRIPT = 3,\\r\\n    URL = 4,\\r\\n    RESOURCE_URL = 5\\r\\n}\\r\\n\\r\\n/** Flags used to build up CssSelectors */\\r\\ndeclare const enum SelectorFlags {\\r\\n    /** Indicates this is the beginning of a new negative selector */\\r\\n    NOT = 1,\\r\\n    /** Mode for matching attributes */\\r\\n    ATTRIBUTE = 2,\\r\\n    /** Mode for matching tag names */\\r\\n    ELEMENT = 4,\\r\\n    /** Mode for matching class names */\\r\\n    CLASS = 8\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the Self metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Self {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Self decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Self: SelfDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the Self decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SelfDecorator {\\r\\n    /**\\r\\n     * Parameter decorator to be used on constructor parameters,\\r\\n     * which tells the DI framework to start dependency resolution from the local injector.\\r\\n     *\\r\\n     * Resolution works upward through the injector hierarchy, so the children\\r\\n     * of this class must configure their own providers or be prepared for a null result.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * In the following example, the dependency can be resolved\\r\\n     * by the local injector when instantiating the class itself, but not\\r\\n     * when instantiating a child.\\r\\n     *\\r\\n     * <code-example path=\\\"core/di/ts/metadata_spec.ts\\\" region=\\\"Self\\\">\\r\\n     * </code-example>\\r\\n     *\\r\\n     *\\r\\n     * @see `SkipSelf`\\r\\n     * @see `Optional`\\r\\n     *\\r\\n     */\\r\\n    (): any;\\r\\n    new (): Self;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Set the {@link GetTestability} implementation used by the Angular testing framework.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function setTestabilityGetter(getter: GetTestability): void;\\r\\n\\r\\n\\r\\n/**\\r\\n * Represents a basic change from a previous to a new value for a single\\r\\n * property on a directive instance. Passed as a value in a\\r\\n * {@link SimpleChanges} object to the `ngOnChanges` hook.\\r\\n *\\r\\n * @see `OnChanges`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class SimpleChange {\\r\\n    previousValue: any;\\r\\n    currentValue: any;\\r\\n    firstChange: boolean;\\r\\n    constructor(previousValue: any, currentValue: any, firstChange: boolean);\\r\\n    /**\\r\\n     * Check whether the new value is the first value assigned.\\r\\n     */\\r\\n    isFirstChange(): boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A hashtable of changes represented by {@link SimpleChange} objects stored\\r\\n * at the declared property name they belong to on a Directive or Component. This is\\r\\n * the type passed to the `ngOnChanges` hook.\\r\\n *\\r\\n * @see `OnChanges`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SimpleChanges {\\r\\n    [propName: string]: SimpleChange;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the SkipSelf metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SkipSelf {\\r\\n}\\r\\n\\r\\n/**\\r\\n * SkipSelf decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const SkipSelf: SkipSelfDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the SkipSelf decorator / constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SkipSelfDecorator {\\r\\n    /**\\r\\n     * Parameter decorator to be used on constructor parameters,\\r\\n     * which tells the DI framework to start dependency resolution from the parent injector.\\r\\n     * Resolution works upward through the injector hierarchy, so the local injector\\r\\n     * is not checked for a provider.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * In the following example, the dependency can be resolved when\\r\\n     * instantiating a child, but not when instantiating the class itself.\\r\\n     *\\r\\n     * <code-example path=\\\"core/di/ts/metadata_spec.ts\\\" region=\\\"SkipSelf\\\">\\r\\n     * </code-example>\\r\\n     *\\r\\n     * Learn more in the\\r\\n     * [Dependency Injection guide](guide/dependency-injection-in-action#skip).\\r\\n     *\\r\\n     * @see `Self`\\r\\n     * @see `Optional`\\r\\n     *\\r\\n     */\\r\\n    (): any;\\r\\n    new (): SkipSelf;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `useClass` for a token.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='StaticClassProvider'}\\r\\n *\\r\\n * Note that following two providers are not equal:\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='StaticClassProviderDifference'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface StaticClassProvider extends StaticClassSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `useClass` for a token.\\r\\n * Base for `StaticClassProvider` decorator.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface StaticClassSansProvider {\\r\\n    /**\\r\\n     * An optional class to instantiate for the `token`. By default, the `provide`\\r\\n     * class is instantiated.\\r\\n     */\\r\\n    useClass: Type<any>;\\r\\n    /**\\r\\n     * A list of `token`s to be resolved by the injector. The list of values is then\\r\\n     * used as arguments to the `useClass` constructor.\\r\\n     */\\r\\n    deps: any[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Describes how the `Injector` should be configured as static (that is, without reflection).\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type StaticProvider = ValueProvider | ExistingProvider | StaticClassProvider | ConstructorProvider | FactoryProvider | any[];\\r\\n\\r\\n/**\\r\\n * Used to intercept and sanitize style values before they are written to the renderer.\\r\\n *\\r\\n * This function is designed to be called in two modes. When a value is not provided\\r\\n * then the function will return a boolean whether a property will be sanitized later.\\r\\n * If a value is provided then the sanitized version of that will be returned.\\r\\n */\\r\\ndeclare interface StyleSanitizeFn {\\r\\n    (prop: string, value: string | ɵSafeValue | null, mode?: StyleSanitizeMode): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A series of flags to instruct a style sanitizer to either validate\\r\\n * or sanitize a value.\\r\\n *\\r\\n * Because sanitization is dependent on the style property (i.e. style\\r\\n * sanitization for `width` is much different than for `background-image`)\\r\\n * the sanitization function (e.g. `StyleSanitizerFn`) needs to check a\\r\\n * property value first before it actually sanitizes any values.\\r\\n *\\r\\n * This enum exist to allow a style sanitization function to either only\\r\\n * do validation (check the property to see whether a value will be\\r\\n * sanitized or not) or to sanitize the value (or both).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare const enum StyleSanitizeMode {\\r\\n    /** Just check to see if the property is required to be sanitized or not */\\r\\n    ValidateProperty = 1,\\r\\n    /** Skip checking the property; just sanitize the value */\\r\\n    SanitizeOnly = 2,\\r\\n    /** Check the property and (if true) then sanitize the value */\\r\\n    ValidateAndSanitize = 3\\r\\n}\\r\\n\\r\\n/**\\r\\n * Array-based representation of a key/value array.\\r\\n *\\r\\n * The format of the array is \\\"property\\\", \\\"value\\\", \\\"property2\\\",\\r\\n * \\\"value2\\\", etc...\\r\\n *\\r\\n * The first value in the array is reserved to store the instance\\r\\n * of the key/value array that was used to populate the property/\\r\\n * value entries that take place in the remainder of the array.\\r\\n */\\r\\ndeclare interface StylingMapArray extends Array<{} | string | number | null | undefined> {\\r\\n    /**\\r\\n     * The last raw value used to generate the entries in the map.\\r\\n     */\\r\\n    [StylingMapArrayIndex.RawValuePosition]: {} | string | number | null | undefined;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An index of position and offset points for any data stored within a `StylingMapArray` instance.\\r\\n */\\r\\ndeclare const enum StylingMapArrayIndex {\\r\\n    /** Where the values start in the array */\\r\\n    ValuesStartPosition = 1,\\r\\n    /** The location of the raw key/value map instance used last to populate the array entries */\\r\\n    RawValuePosition = 0,\\r\\n    /** The size of each property/value entry */\\r\\n    TupleSize = 2,\\r\\n    /** The offset for the property entry in the tuple */\\r\\n    PropOffset = 0,\\r\\n    /** The offset for the value entry in the tuple */\\r\\n    ValueOffset = 1\\r\\n}\\r\\n\\r\\n/**\\r\\n * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory\\r\\n * @publicApi\\r\\n * @deprecated the `string` form of `loadChildren` is deprecated, and `SystemJsNgModuleLoader` is\\r\\n * part of its implementation. See `LoadChildren` for more details.\\r\\n */\\r\\nexport declare class SystemJsNgModuleLoader implements NgModuleFactoryLoader {\\r\\n    private _compiler;\\r\\n    private _config;\\r\\n    constructor(_compiler: Compiler, config?: SystemJsNgModuleLoaderConfig);\\r\\n    load(path: string): Promise<NgModuleFactory<any>>;\\r\\n    private loadAndCompile;\\r\\n    private loadFactory;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<SystemJsNgModuleLoader>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<SystemJsNgModuleLoader>;\\n}\\r\\n\\r\\n/**\\r\\n * Configuration for SystemJsNgModuleLoader.\\r\\n * token.\\r\\n *\\r\\n * @publicApi\\r\\n * @deprecated the `string` form of `loadChildren` is deprecated, and `SystemJsNgModuleLoaderConfig`\\r\\n * is part of its implementation. See `LoadChildren` for more details.\\r\\n */\\r\\nexport declare abstract class SystemJsNgModuleLoaderConfig {\\r\\n    /**\\r\\n     * Prefix to add when computing the name of the factory module for a given module name.\\r\\n     */\\r\\n    factoryPathPrefix: string;\\r\\n    /**\\r\\n     * Suffix to add when computing the name of the factory module for a given module name.\\r\\n     */\\r\\n    factoryPathSuffix: string;\\r\\n}\\r\\n\\r\\ndeclare const T_HOST = 6;\\r\\n\\r\\n/**\\r\\n * A combination of:\\r\\n * - Attribute names and values.\\r\\n * - Special markers acting as flags to alter attributes processing.\\r\\n * - Parsed ngProjectAs selectors.\\r\\n */\\r\\ndeclare type TAttributes = (string | ɵAttributeMarker | CssSelector)[];\\r\\n\\r\\n/** Static data for an LContainer */\\r\\ndeclare interface TContainerNode extends TNode {\\r\\n    /**\\r\\n     * Index in the data[] array.\\r\\n     *\\r\\n     * If it's -1, this is a dynamically created container node that isn't stored in\\r\\n     * data[] (e.g. when you inject ViewContainerRef) .\\r\\n     */\\r\\n    index: number;\\r\\n    child: null;\\r\\n    /**\\r\\n     * Container nodes will have parents unless:\\r\\n     *\\r\\n     * - They are the first node of a component or embedded view\\r\\n     * - They are dynamically created\\r\\n     */\\r\\n    parent: ɵangular_packages_core_core_bh | TElementContainerNode | null;\\r\\n    tViews: TView | TView[] | null;\\r\\n    projection: null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Static data that corresponds to the instance-specific data array on an LView.\\r\\n *\\r\\n * Each node's static data is stored in tData at the same index that it's stored\\r\\n * in the data array.  Any nodes that do not have static data store a null value in\\r\\n * tData to avoid a sparse array.\\r\\n *\\r\\n * Each pipe's definition is stored here at the same index as its pipe instance in\\r\\n * the data array.\\r\\n *\\r\\n * Each host property's name is stored here at the same index as its value in the\\r\\n * data array.\\r\\n *\\r\\n * Each property binding name is stored here at the same index as its value in\\r\\n * the data array. If the binding is an interpolation, the static string values\\r\\n * are stored parallel to the dynamic values. Example:\\r\\n *\\r\\n * id=\\\"prefix {{ v0 }} a {{ v1 }} b {{ v2 }} suffix\\\"\\r\\n *\\r\\n * LView       |   TView.data\\r\\n *------------------------\\r\\n *  v0 value   |   'a'\\r\\n *  v1 value   |   'b'\\r\\n *  v2 value   |   id � prefix � suffix\\r\\n *\\r\\n * Injector bloom filters are also stored here.\\r\\n */\\r\\ndeclare type TData = (TNode | ɵPipeDef<any> | ɵDirectiveDef<any> | ɵComponentDef<any> | number | Type<any> | InjectionToken<any> | TI18n | I18nUpdateOpCodes | null | string)[];\\r\\n\\r\\n/** Static data for an <ng-container> */\\r\\ndeclare interface TElementContainerNode extends TNode {\\r\\n    /** Index in the LView[] array. */\\r\\n    index: number;\\r\\n    child: ɵangular_packages_core_core_bh | TTextNode | TContainerNode | TElementContainerNode | TProjectionNode | null;\\r\\n    parent: ɵangular_packages_core_core_bh | TElementContainerNode | null;\\r\\n    tViews: null;\\r\\n    projection: null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents an embedded template that can be used to instantiate embedded views.\\r\\n * To instantiate embedded views based on a template, use the `ViewContainerRef`\\r\\n * method `createEmbeddedView()`.\\r\\n *\\r\\n * Access a `TemplateRef` instance by placing a directive on an `<ng-template>`\\r\\n * element (or directive prefixed with `*`). The `TemplateRef` for the embedded view\\r\\n * is injected into the constructor of the directive,\\r\\n * using the `TemplateRef` token.\\r\\n *\\r\\n * You can also use a `Query` to find a `TemplateRef` associated with\\r\\n * a component or a directive.\\r\\n *\\r\\n * @see `ViewContainerRef`\\r\\n * @see [Navigate the Component Tree with DI](guide/dependency-injection-navtree)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class TemplateRef<C> {\\r\\n    /**\\r\\n     * The anchor element in the parent view for this embedded view.\\r\\n     *\\r\\n     * The data-binding and injection contexts of embedded views created from this `TemplateRef`\\r\\n     * inherit from the contexts of this location.\\r\\n     *\\r\\n     * Typically new embedded views are attached to the view container of this location, but in\\r\\n     * advanced use-cases, the view can be attached to a different container while keeping the\\r\\n     * data-binding and injection context from the original location.\\r\\n     *\\r\\n     */\\r\\n    abstract readonly elementRef: ElementRef;\\r\\n    /**\\r\\n     * Instantiates an embedded view based on this template,\\r\\n     * and attaches it to the view container.\\r\\n     * @param context The data-binding context of the embedded view, as declared\\r\\n     * in the `<ng-template>` usage.\\r\\n     * @returns The new embedded view object.\\r\\n     */\\r\\n    abstract createEmbeddedView(context: C): EmbeddedViewRef<C>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The Testability service provides testing hooks that can be accessed from\\r\\n * the browser and by services such as Protractor. Each bootstrapped Angular\\r\\n * application on the page will have an instance of Testability.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Testability implements PublicTestability {\\r\\n    private _ngZone;\\r\\n    private _pendingCount;\\r\\n    private _isZoneStable;\\r\\n    private _callbacks;\\r\\n    private taskTrackingZone;\\r\\n    constructor(_ngZone: NgZone);\\r\\n    private _watchAngularEvents;\\r\\n    /**\\r\\n     * Increases the number of pending request\\r\\n     * @deprecated pending requests are now tracked with zones.\\r\\n     */\\r\\n    increasePendingRequestCount(): number;\\r\\n    /**\\r\\n     * Decreases the number of pending request\\r\\n     * @deprecated pending requests are now tracked with zones\\r\\n     */\\r\\n    decreasePendingRequestCount(): number;\\r\\n    /**\\r\\n     * Whether an associated application is stable\\r\\n     */\\r\\n    isStable(): boolean;\\r\\n    private _runCallbacksIfReady;\\r\\n    private getPendingTasks;\\r\\n    private addCallback;\\r\\n    /**\\r\\n     * Wait for the application to be stable with a timeout. If the timeout is reached before that\\r\\n     * happens, the callback receives a list of the macro tasks that were pending, otherwise null.\\r\\n     *\\r\\n     * @param doneCb The callback to invoke when Angular is stable or the timeout expires\\r\\n     *    whichever comes first.\\r\\n     * @param timeout Optional. The maximum time to wait for Angular to become stable. If not\\r\\n     *    specified, whenStable() will wait forever.\\r\\n     * @param updateCb Optional. If specified, this callback will be invoked whenever the set of\\r\\n     *    pending macrotasks changes. If this callback returns true doneCb will not be invoked\\r\\n     *    and no further updates will be issued.\\r\\n     */\\r\\n    whenStable(doneCb: Function, timeout?: number, updateCb?: Function): void;\\r\\n    /**\\r\\n     * Get the number of pending requests\\r\\n     * @deprecated pending requests are now tracked with zones\\r\\n     */\\r\\n    getPendingRequestCount(): number;\\r\\n    /**\\r\\n     * Find providers by name\\r\\n     * @param using The root element to search from\\r\\n     * @param provider The name of binding variable\\r\\n     * @param exactMatch Whether using exactMatch\\r\\n     */\\r\\n    findProviders(using: any, provider: string, exactMatch: boolean): any[];\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Testability>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Testability>;\\n}\\r\\n\\r\\n/**\\r\\n * A global registry of {@link Testability} instances for specific elements.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class TestabilityRegistry {\\r\\n    constructor();\\r\\n    /**\\r\\n     * Registers an application with a testability hook so that it can be tracked\\r\\n     * @param token token of application, root element\\r\\n     * @param testability Testability hook\\r\\n     */\\r\\n    registerApplication(token: any, testability: Testability): void;\\r\\n    /**\\r\\n     * Unregisters an application.\\r\\n     * @param token token of application, root element\\r\\n     */\\r\\n    unregisterApplication(token: any): void;\\r\\n    /**\\r\\n     * Unregisters all applications\\r\\n     */\\r\\n    unregisterAllApplications(): void;\\r\\n    /**\\r\\n     * Get a testability hook associated with the application\\r\\n     * @param elem root element\\r\\n     */\\r\\n    getTestability(elem: any): Testability | null;\\r\\n    /**\\r\\n     * Get all registered testabilities\\r\\n     */\\r\\n    getAllTestabilities(): Testability[];\\r\\n    /**\\r\\n     * Get all registered applications(root elements)\\r\\n     */\\r\\n    getAllRootElements(): any[];\\r\\n    /**\\r\\n     * Find testability of a node in the Tree\\r\\n     * @param elem node\\r\\n     * @param findInAncestors whether finding testability in ancestors if testability was not found in\\r\\n     * current node\\r\\n     */\\r\\n    findTestabilityInTree(elem: Node, findInAncestors?: boolean): Testability | null;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<TestabilityRegistry>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<TestabilityRegistry>;\\n}\\r\\n\\r\\ndeclare interface TextDef {\\r\\n    prefix: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Store information for the i18n translation block.\\r\\n */\\r\\ndeclare interface TI18n {\\r\\n    /**\\r\\n     * Number of slots to allocate in expando.\\r\\n     *\\r\\n     * This is the max number of DOM elements which will be created by this i18n + ICU blocks. When\\r\\n     * the DOM elements are being created they are stored in the EXPANDO, so that update OpCodes can\\r\\n     * write into them.\\r\\n     */\\r\\n    vars: number;\\r\\n    /**\\r\\n     * A set of OpCodes which will create the Text Nodes and ICU anchors for the translation blocks.\\r\\n     *\\r\\n     * NOTE: The ICU anchors are filled in with ICU Update OpCode.\\r\\n     */\\r\\n    create: I18nMutateOpCodes;\\r\\n    /**\\r\\n     * A set of OpCodes which will be executed on each change detection to determine if any changes to\\r\\n     * DOM are required.\\r\\n     */\\r\\n    update: I18nUpdateOpCodes;\\r\\n    /**\\r\\n     * A list of ICUs in a translation block (or `null` if block has no ICUs).\\r\\n     *\\r\\n     * Example:\\r\\n     * Given: `<div i18n>You have {count, plural, ...} and {state, switch, ...}</div>`\\r\\n     * There would be 2 ICUs in this array.\\r\\n     *   1. `{count, plural, ...}`\\r\\n     *   2. `{state, switch, ...}`\\r\\n     */\\r\\n    icus: TIcu[] | null;\\r\\n}\\r\\n\\r\\ndeclare interface TIcu {\\r\\n    /**\\r\\n     * Defines the ICU type of `select` or `plural`\\r\\n     */\\r\\n    type: IcuType;\\r\\n    /**\\r\\n     * Number of slots to allocate in expando for each case.\\r\\n     *\\r\\n     * This is the max number of DOM elements which will be created by this i18n + ICU blocks. When\\r\\n     * the DOM elements are being created they are stored in the EXPANDO, so that update OpCodes can\\r\\n     * write into them.\\r\\n     */\\r\\n    vars: number[];\\r\\n    /**\\r\\n     * An optional array of child/sub ICUs.\\r\\n     *\\r\\n     * In case of nested ICUs such as:\\r\\n     * ```\\r\\n     * {�0�, plural,\\r\\n     *   =0 {zero}\\r\\n     *   other {�0� {�1�, select,\\r\\n     *                     cat {cats}\\r\\n     *                     dog {dogs}\\r\\n     *                     other {animals}\\r\\n     *                   }!\\r\\n     *   }\\r\\n     * }\\r\\n     * ```\\r\\n     * When the parent ICU is changing it must clean up child ICUs as well. For this reason it needs\\r\\n     * to know which child ICUs to run clean up for as well.\\r\\n     *\\r\\n     * In the above example this would be:\\r\\n     * ```ts\\r\\n     * [\\r\\n     *   [],   // `=0` has no sub ICUs\\r\\n     *   [1],  // `other` has one subICU at `1`st index.\\r\\n     * ]\\r\\n     * ```\\r\\n     *\\r\\n     * The reason why it is Array of Arrays is because first array represents the case, and second\\r\\n     * represents the child ICUs to clean up. There may be more than one child ICUs per case.\\r\\n     */\\r\\n    childIcus: number[][];\\r\\n    /**\\r\\n     * A list of case values which the current ICU will try to match.\\r\\n     *\\r\\n     * The last value is `other`\\r\\n     */\\r\\n    cases: any[];\\r\\n    /**\\r\\n     * A set of OpCodes to apply in order to build up the DOM render tree for the ICU\\r\\n     */\\r\\n    create: I18nMutateOpCodes[];\\r\\n    /**\\r\\n     * A set of OpCodes to apply in order to destroy the DOM render tree for the ICU.\\r\\n     */\\r\\n    remove: I18nMutateOpCodes[];\\r\\n    /**\\r\\n     * A set of OpCodes to apply in order to update the DOM render tree for the ICU bindings.\\r\\n     */\\r\\n    update: I18nUpdateOpCodes[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Binding data (flyweight) for a particular node that is shared between all templates\\r\\n * of a specific type.\\r\\n *\\r\\n * If a property is:\\r\\n *    - PropertyAliases: that property's data was generated and this is it\\r\\n *    - Null: that property's data was already generated and nothing was found.\\r\\n *    - Undefined: that property's data has not yet been generated\\r\\n *\\r\\n * see: https://en.wikipedia.org/wiki/Flyweight_pattern for more on the Flyweight pattern\\r\\n */\\r\\ndeclare interface TNode {\\r\\n    /** The type of the TNode. See TNodeType. */\\r\\n    type: TNodeType;\\r\\n    /**\\r\\n     * Index of the TNode in TView.data and corresponding native element in LView.\\r\\n     *\\r\\n     * This is necessary to get from any TNode to its corresponding native element when\\r\\n     * traversing the node tree.\\r\\n     *\\r\\n     * If index is -1, this is a dynamically created container node or embedded view node.\\r\\n     */\\r\\n    index: number;\\r\\n    /**\\r\\n     * The index of the closest injector in this node's LView.\\r\\n     *\\r\\n     * If the index === -1, there is no injector on this node or any ancestor node in this view.\\r\\n     *\\r\\n     * If the index !== -1, it is the index of this node's injector OR the index of a parent injector\\r\\n     * in the same view. We pass the parent injector index down the node tree of a view so it's\\r\\n     * possible to find the parent injector without walking a potentially deep node tree. Injector\\r\\n     * indices are not set across view boundaries because there could be multiple component hosts.\\r\\n     *\\r\\n     * If tNode.injectorIndex === tNode.parent.injectorIndex, then the index belongs to a parent\\r\\n     * injector.\\r\\n     */\\r\\n    injectorIndex: number;\\r\\n    /**\\r\\n     * Stores starting index of the directives.\\r\\n     */\\r\\n    directiveStart: number;\\r\\n    /**\\r\\n     * Stores final exclusive index of the directives.\\r\\n     */\\r\\n    directiveEnd: number;\\r\\n    /**\\r\\n     * Stores indexes of property bindings. This field is only set in the ngDevMode and holds indexes\\r\\n     * of property bindings so TestBed can get bound property metadata for a given node.\\r\\n     */\\r\\n    propertyBindings: number[] | null;\\r\\n    /**\\r\\n     * Stores if Node isComponent, isProjected, hasContentQuery, hasClassInput and hasStyleInput etc.\\r\\n     */\\r\\n    flags: TNodeFlags;\\r\\n    /**\\r\\n     * This number stores two values using its bits:\\r\\n     *\\r\\n     * - the index of the first provider on that node (first 16 bits)\\r\\n     * - the count of view providers from the component on this node (last 16 bits)\\r\\n     */\\r\\n    providerIndexes: TNodeProviderIndexes;\\r\\n    /** The tag name associated with this node. */\\r\\n    tagName: string | null;\\r\\n    /**\\r\\n     * Attributes associated with an element. We need to store attributes to support various use-cases\\r\\n     * (attribute injection, content projection with selectors, directives matching).\\r\\n     * Attributes are stored statically because reading them from the DOM would be way too slow for\\r\\n     * content projection and queries.\\r\\n     *\\r\\n     * Since attrs will always be calculated first, they will never need to be marked undefined by\\r\\n     * other instructions.\\r\\n     *\\r\\n     * For regular attributes a name of an attribute and its value alternate in the array.\\r\\n     * e.g. ['role', 'checkbox']\\r\\n     * This array can contain flags that will indicate \\\"special attributes\\\" (attributes with\\r\\n     * namespaces, attributes extracted from bindings and outputs).\\r\\n     */\\r\\n    attrs: TAttributes | null;\\r\\n    /**\\r\\n     * A set of local names under which a given element is exported in a template and\\r\\n     * visible to queries. An entry in this array can be created for different reasons:\\r\\n     * - an element itself is referenced, ex.: `<div #foo>`\\r\\n     * - a component is referenced, ex.: `<my-cmpt #foo>`\\r\\n     * - a directive is referenced, ex.: `<my-cmpt #foo=\\\"directiveExportAs\\\">`.\\r\\n     *\\r\\n     * A given element might have different local names and those names can be associated\\r\\n     * with a directive. We store local names at even indexes while odd indexes are reserved\\r\\n     * for directive index in a view (or `-1` if there is no associated directive).\\r\\n     *\\r\\n     * Some examples:\\r\\n     * - `<div #foo>` => `[\\\"foo\\\", -1]`\\r\\n     * - `<my-cmpt #foo>` => `[\\\"foo\\\", myCmptIdx]`\\r\\n     * - `<my-cmpt #foo #bar=\\\"directiveExportAs\\\">` => `[\\\"foo\\\", myCmptIdx, \\\"bar\\\", directiveIdx]`\\r\\n     * - `<div #foo #bar=\\\"directiveExportAs\\\">` => `[\\\"foo\\\", -1, \\\"bar\\\", directiveIdx]`\\r\\n     */\\r\\n    localNames: (string | number)[] | null;\\r\\n    /** Information about input properties that need to be set once from attribute data. */\\r\\n    initialInputs: InitialInputData | null | undefined;\\r\\n    /**\\r\\n     * Input data for all directives on this node.\\r\\n     *\\r\\n     * - `undefined` means that the prop has not been initialized yet,\\r\\n     * - `null` means that the prop has been initialized but no inputs have been found.\\r\\n     */\\r\\n    inputs: PropertyAliases | null | undefined;\\r\\n    /**\\r\\n     * Output data for all directives on this node.\\r\\n     *\\r\\n     * - `undefined` means that the prop has not been initialized yet,\\r\\n     * - `null` means that the prop has been initialized but no outputs have been found.\\r\\n     */\\r\\n    outputs: PropertyAliases | null | undefined;\\r\\n    /**\\r\\n     * The TView or TViews attached to this node.\\r\\n     *\\r\\n     * If this TNode corresponds to an LContainer with inline views, the container will\\r\\n     * need to store separate static data for each of its view blocks (TView[]). Otherwise,\\r\\n     * nodes in inline views with the same index as nodes in their parent views will overwrite\\r\\n     * each other, as they are in the same template.\\r\\n     *\\r\\n     * Each index in this array corresponds to the static data for a certain\\r\\n     * view. So if you had V(0) and V(1) in a container, you might have:\\r\\n     *\\r\\n     * [\\r\\n     *   [{tagName: 'div', attrs: ...}, null],     // V(0) TView\\r\\n     *   [{tagName: 'button', attrs ...}, null]    // V(1) TView\\r\\n     *\\r\\n     * If this TNode corresponds to an LContainer with a template (e.g. structural\\r\\n     * directive), the template's TView will be stored here.\\r\\n     *\\r\\n     * If this TNode corresponds to an element, tViews will be null .\\r\\n     */\\r\\n    tViews: TView | TView[] | null;\\r\\n    /**\\r\\n     * The next sibling node. Necessary so we can propagate through the root nodes of a view\\r\\n     * to insert them or remove them from the DOM.\\r\\n     */\\r\\n    next: TNode | null;\\r\\n    /**\\r\\n     * The next projected sibling. Since in Angular content projection works on the node-by-node basis\\r\\n     * the act of projecting nodes might change nodes relationship at the insertion point (target\\r\\n     * view). At the same time we need to keep initial relationship between nodes as expressed in\\r\\n     * content view.\\r\\n     */\\r\\n    projectionNext: TNode | null;\\r\\n    /**\\r\\n     * First child of the current node.\\r\\n     *\\r\\n     * For component nodes, the child will always be a ContentChild (in same view).\\r\\n     * For embedded view nodes, the child will be in their child view.\\r\\n     */\\r\\n    child: TNode | null;\\r\\n    /**\\r\\n     * Parent node (in the same view only).\\r\\n     *\\r\\n     * We need a reference to a node's parent so we can append the node to its parent's native\\r\\n     * element at the appropriate time.\\r\\n     *\\r\\n     * If the parent would be in a different view (e.g. component host), this property will be null.\\r\\n     * It's important that we don't try to cross component boundaries when retrieving the parent\\r\\n     * because the parent will change (e.g. index, attrs) depending on where the component was\\r\\n     * used (and thus shouldn't be stored on TNode). In these cases, we retrieve the parent through\\r\\n     * LView.node instead (which will be instance-specific).\\r\\n     *\\r\\n     * If this is an inline view node (V), the parent will be its container.\\r\\n     */\\r\\n    parent: ɵangular_packages_core_core_bh | TContainerNode | null;\\r\\n    /**\\r\\n     * List of projected TNodes for a given component host element OR index into the said nodes.\\r\\n     *\\r\\n     * For easier discussion assume this example:\\r\\n     * `<parent>`'s view definition:\\r\\n     * ```\\r\\n     * <child id=\\\"c1\\\">content1</child>\\r\\n     * <child id=\\\"c2\\\"><span>content2</span></child>\\r\\n     * ```\\r\\n     * `<child>`'s view definition:\\r\\n     * ```\\r\\n     * <ng-content id=\\\"cont1\\\"></ng-content>\\r\\n     * ```\\r\\n     *\\r\\n     * If `Array.isArray(projection)` then `TNode` is a host element:\\r\\n     * - `projection` stores the content nodes which are to be projected.\\r\\n     *    - The nodes represent categories defined by the selector: For example:\\r\\n     *      `<ng-content/><ng-content select=\\\"abc\\\"/>` would represent the heads for `<ng-content/>`\\r\\n     *      and `<ng-content select=\\\"abc\\\"/>` respectively.\\r\\n     *    - The nodes we store in `projection` are heads only, we used `.next` to get their\\r\\n     *      siblings.\\r\\n     *    - The nodes `.next` is sorted/rewritten as part of the projection setup.\\r\\n     *    - `projection` size is equal to the number of projections `<ng-content>`. The size of\\r\\n     *      `c1` will be `1` because `<child>` has only one `<ng-content>`.\\r\\n     * - we store `projection` with the host (`c1`, `c2`) rather than the `<ng-content>` (`cont1`)\\r\\n     *   because the same component (`<child>`) can be used in multiple locations (`c1`, `c2`) and as\\r\\n     *   a result have different set of nodes to project.\\r\\n     * - without `projection` it would be difficult to efficiently traverse nodes to be projected.\\r\\n     *\\r\\n     * If `typeof projection == 'number'` then `TNode` is a `<ng-content>` element:\\r\\n     * - `projection` is an index of the host's `projection`Nodes.\\r\\n     *   - This would return the first head node to project:\\r\\n     *     `getHost(currentTNode).projection[currentTNode.projection]`.\\r\\n     * - When projecting nodes the parent node retrieved may be a `<ng-content>` node, in which case\\r\\n     *   the process is recursive in nature.\\r\\n     *\\r\\n     * If `projection` is of type `RNode[][]` than we have a collection of native nodes passed as\\r\\n     * projectable nodes during dynamic component creation.\\r\\n     */\\r\\n    projection: (TNode | RNode[])[] | number | null;\\r\\n    /**\\r\\n     * A collection of all style bindings and/or static style values for an element.\\r\\n     *\\r\\n     * This field will be populated if and when:\\r\\n     *\\r\\n     * - There are one or more initial styles on an element (e.g. `<div style=\\\"width:200px\\\">`)\\r\\n     * - There are one or more style bindings on an element (e.g. `<div [style.width]=\\\"w\\\">`)\\r\\n     *\\r\\n     * If and when there are only initial styles (no bindings) then an instance of `StylingMapArray`\\r\\n     * will be used here. Otherwise an instance of `TStylingContext` will be created when there\\r\\n     * are one or more style bindings on an element.\\r\\n     *\\r\\n     * During element creation this value is likely to be populated with an instance of\\r\\n     * `StylingMapArray` and only when the bindings are evaluated (which happens during\\r\\n     * update mode) then it will be converted to a `TStylingContext` if any style bindings\\r\\n     * are encountered. If and when this happens then the existing `StylingMapArray` value\\r\\n     * will be placed into the initial styling slot in the newly created `TStylingContext`.\\r\\n     */\\r\\n    styles: StylingMapArray | TStylingContext | null;\\r\\n    /**\\r\\n     * A collection of all class bindings and/or static class values for an element.\\r\\n     *\\r\\n     * This field will be populated if and when:\\r\\n     *\\r\\n     * - There are one or more initial classes on an element (e.g. `<div class=\\\"one two three\\\">`)\\r\\n     * - There are one or more class bindings on an element (e.g. `<div [class.foo]=\\\"f\\\">`)\\r\\n     *\\r\\n     * If and when there are only initial classes (no bindings) then an instance of `StylingMapArray`\\r\\n     * will be used here. Otherwise an instance of `TStylingContext` will be created when there\\r\\n     * are one or more class bindings on an element.\\r\\n     *\\r\\n     * During element creation this value is likely to be populated with an instance of\\r\\n     * `StylingMapArray` and only when the bindings are evaluated (which happens during\\r\\n     * update mode) then it will be converted to a `TStylingContext` if any class bindings\\r\\n     * are encountered. If and when this happens then the existing `StylingMapArray` value\\r\\n     * will be placed into the initial styling slot in the newly created `TStylingContext`.\\r\\n     */\\r\\n    classes: StylingMapArray | TStylingContext | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Corresponds to the TNode.flags property.\\r\\n */\\r\\ndeclare const enum TNodeFlags {\\r\\n    /** This bit is set if the node is a host for any directive (including a component) */\\r\\n    isDirectiveHost = 1,\\r\\n    /**\\r\\n     * This bit is set if the node is a host for a component. Setting this bit implies that the\\r\\n     * isDirectiveHost bit is set as well. */\\r\\n    isComponentHost = 2,\\r\\n    /** This bit is set if the node has been projected */\\r\\n    isProjected = 4,\\r\\n    /** This bit is set if any directive on this node has content queries */\\r\\n    hasContentQuery = 8,\\r\\n    /** This bit is set if the node has any \\\"class\\\" inputs */\\r\\n    hasClassInput = 16,\\r\\n    /** This bit is set if the node has any \\\"style\\\" inputs */\\r\\n    hasStyleInput = 32,\\r\\n    /** This bit is set if the node has initial styling */\\r\\n    hasInitialStyling = 64,\\r\\n    /** This bit is set if the node has been detached by i18n */\\r\\n    isDetached = 128,\\r\\n    /**\\r\\n     * This bit is set if the node has directives with host bindings. This flags allows us to guard\\r\\n     * host-binding logic and invoke it only on nodes that actually have directives with host\\r\\n     * bindings.\\r\\n     */\\r\\n    hasHostBindings = 256\\r\\n}\\r\\n\\r\\n/**\\r\\n * Corresponds to the TNode.providerIndexes property.\\r\\n */\\r\\ndeclare const enum TNodeProviderIndexes {\\r\\n    /** The index of the first provider on this node is encoded on the least significant bits */\\r\\n    ProvidersStartIndexMask = 65535,\\r\\n    /** The count of view providers from the component on this node is encoded on the 16 most\\r\\n       significant bits */\\r\\n    CptViewProvidersCountShift = 16,\\r\\n    CptViewProvidersCountShifter = 65536\\r\\n}\\r\\n\\r\\n/**\\r\\n * TNodeType corresponds to the {@link TNode} `type` property.\\r\\n */\\r\\ndeclare const enum TNodeType {\\r\\n    /**\\r\\n     * The TNode contains information about an {@link LContainer} for embedded views.\\r\\n     */\\r\\n    Container = 0,\\r\\n    /**\\r\\n     * The TNode contains information about an `<ng-content>` projection\\r\\n     */\\r\\n    Projection = 1,\\r\\n    /**\\r\\n     * The TNode contains information about an {@link LView}\\r\\n     */\\r\\n    View = 2,\\r\\n    /**\\r\\n     * The TNode contains information about a DOM element aka {@link RNode}.\\r\\n     */\\r\\n    Element = 3,\\r\\n    /**\\r\\n     * The TNode contains information about an `<ng-container>` element {@link RNode}.\\r\\n     */\\r\\n    ElementContainer = 4,\\r\\n    /**\\r\\n     * The TNode contains information about an ICU comment used in `i18n`.\\r\\n     */\\r\\n    IcuContainer = 5\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type representing a set of TNodes that can have local refs (`#foo`) placed on them.\\r\\n */\\r\\ndeclare type TNodeWithLocalRefs = TContainerNode | ɵangular_packages_core_core_bh | TElementContainerNode;\\r\\n\\r\\n/** Static data for an LProjectionNode  */\\r\\ndeclare interface TProjectionNode extends TNode {\\r\\n    /** Index in the data[] array */\\r\\n    child: null;\\r\\n    /**\\r\\n     * Projection nodes will have parents unless they are the first node of a component\\r\\n     * or embedded view (which means their parent is in a different view and must be\\r\\n     * retrieved using LView.node).\\r\\n     */\\r\\n    parent: ɵangular_packages_core_core_bh | TElementContainerNode | null;\\r\\n    tViews: null;\\r\\n    /** Index of the projection node. (See TNode.projection for more info.) */\\r\\n    projection: number;\\r\\n}\\r\\n\\r\\n/**\\r\\n * TQueries represent a collection of individual TQuery objects tracked in a given view. Most of the\\r\\n * methods on this interface are simple proxy methods to the corresponding functionality on TQuery.\\r\\n */\\r\\ndeclare interface TQueries {\\r\\n    /**\\r\\n     * Adds a new TQuery to a collection of queries tracked in a given view.\\r\\n     * @param tQuery\\r\\n     */\\r\\n    track(tQuery: TQuery): void;\\r\\n    /**\\r\\n     * Returns a TQuery instance for at the given index  in the queries array.\\r\\n     * @param index\\r\\n     */\\r\\n    getByIndex(index: number): TQuery;\\r\\n    /**\\r\\n     * Returns the number of queries tracked in a given view.\\r\\n     */\\r\\n    length: number;\\r\\n    /**\\r\\n     * A proxy method that iterates over all the TQueries in a given TView and calls the corresponding\\r\\n     * `elementStart` on each and every TQuery.\\r\\n     * @param tView\\r\\n     * @param tNode\\r\\n     */\\r\\n    elementStart(tView: TView, tNode: TNode): void;\\r\\n    /**\\r\\n     * A proxy method that iterates over all the TQueries in a given TView and calls the corresponding\\r\\n     * `elementEnd` on each and every TQuery.\\r\\n     * @param tNode\\r\\n     */\\r\\n    elementEnd(tNode: TNode): void;\\r\\n    /**\\r\\n     * A proxy method that iterates over all the TQueries in a given TView and calls the corresponding\\r\\n     * `template` on each and every TQuery.\\r\\n     * @param tView\\r\\n     * @param tNode\\r\\n     */\\r\\n    template(tView: TView, tNode: TNode): void;\\r\\n    /**\\r\\n    * A proxy method that iterates over all the TQueries in a given TView and calls the corresponding\\r\\n     * `embeddedTView` on each and every TQuery.\\r\\n     * @param tNode\\r\\n     */\\r\\n    embeddedTView(tNode: TNode): TQueries | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * TQuery objects represent all the query-related data that remain the same from one view instance\\r\\n * to another and can be determined on the very first template pass. Most notably TQuery holds all\\r\\n * the matches for a given view.\\r\\n */\\r\\ndeclare interface TQuery {\\r\\n    /**\\r\\n     * Query metadata extracted from query annotations.\\r\\n     */\\r\\n    metadata: TQueryMetadata;\\r\\n    /**\\r\\n     * Index of a query in a declaration view in case of queries propagated to en embedded view, -1\\r\\n     * for queries declared in a given view. We are storing this index so we can find a parent query\\r\\n     * to clone for an embedded view (when an embedded view is created).\\r\\n     */\\r\\n    indexInDeclarationView: number;\\r\\n    /**\\r\\n     * Matches collected on the first template pass. Each match is a pair of:\\r\\n     * - TNode index;\\r\\n     * - match index;\\r\\n     *\\r\\n     * A TNode index can be either:\\r\\n     * - a positive number (the most common case) to indicate a matching TNode;\\r\\n     * - a negative number to indicate that a given query is crossing a <ng-template> element and\\r\\n     * results from views created based on TemplateRef should be inserted at this place.\\r\\n     *\\r\\n     * A match index is a number used to find an actual value (for a given node) when query results\\r\\n     * are materialized. This index can have one of the following values:\\r\\n     * - -2 - indicates that we need to read a special token (TemplateRef, ViewContainerRef etc.);\\r\\n     * - -1 - indicates that we need to read a default value based on the node type (TemplateRef for\\r\\n     * ng-template and ElementRef for other elements);\\r\\n     * - a positive number - index of an injectable to be read from the element injector.\\r\\n     */\\r\\n    matches: number[] | null;\\r\\n    /**\\r\\n     * A flag indicating if a given query crosses an <ng-template> element. This flag exists for\\r\\n     * performance reasons: we can notice that queries not crossing any <ng-template> elements will\\r\\n     * have matches from a given view only (and adapt processing accordingly).\\r\\n     */\\r\\n    crossesNgTemplate: boolean;\\r\\n    /**\\r\\n     * A method call when a given query is crossing an element (or element container). This is where a\\r\\n     * given TNode is matched against a query predicate.\\r\\n     * @param tView\\r\\n     * @param tNode\\r\\n     */\\r\\n    elementStart(tView: TView, tNode: TNode): void;\\r\\n    /**\\r\\n     * A method called when processing the elementEnd instruction - this is mostly useful to determine\\r\\n     * if a given content query should match any nodes past this point.\\r\\n     * @param tNode\\r\\n     */\\r\\n    elementEnd(tNode: TNode): void;\\r\\n    /**\\r\\n     * A method called when processing the template instruction. This is where a\\r\\n     * given TContainerNode is matched against a query predicate.\\r\\n     * @param tView\\r\\n     * @param tNode\\r\\n     */\\r\\n    template(tView: TView, tNode: TNode): void;\\r\\n    /**\\r\\n     * A query-related method called when an embedded TView is created based on the content of a\\r\\n     * <ng-template> element. We call this method to determine if a given query should be propagated\\r\\n     * to the embedded view and if so - return a cloned TQuery for this embedded view.\\r\\n     * @param tNode\\r\\n     * @param childQueryIndex\\r\\n     */\\r\\n    embeddedTView(tNode: TNode, childQueryIndex: number): TQuery | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An object representing query metadata extracted from query annotations.\\r\\n */\\r\\ndeclare interface TQueryMetadata {\\r\\n    predicate: Type<any> | string[];\\r\\n    descendants: boolean;\\r\\n    read: any;\\r\\n    isStatic: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An optional function passed into the `NgForOf` directive that defines how to track\\r\\n * changes for items in an iterable.\\r\\n * The function takes the iteration index and item ID.\\r\\n * When supplied, Angular tracks changes by the return value of the function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface TrackByFunction<T> {\\r\\n    (index: number, item: T): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Use this token at bootstrap to provide the content of your translation file (`xtb`,\\r\\n * `xlf` or `xlf2`) when you want to translate your application in another language.\\r\\n *\\r\\n * See the [i18n guide](guide/i18n#merge) for more information.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```typescript\\r\\n * import { TRANSLATIONS } from '@angular/core';\\r\\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\r\\n * import { AppModule } from './app/app.module';\\r\\n *\\r\\n * // content of your translation file\\r\\n * const translations = '....';\\r\\n *\\r\\n * platformBrowserDynamic().bootstrapModule(AppModule, {\\r\\n *   providers: [{provide: TRANSLATIONS, useValue: translations }]\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const TRANSLATIONS: InjectionToken<string>;\\r\\n\\r\\n/**\\r\\n * Provide this token at bootstrap to set the format of your {@link TRANSLATIONS}: `xtb`,\\r\\n * `xlf` or `xlf2`.\\r\\n *\\r\\n * See the [i18n guide](guide/i18n#merge) for more information.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```typescript\\r\\n * import { TRANSLATIONS_FORMAT } from '@angular/core';\\r\\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\\r\\n * import { AppModule } from './app/app.module';\\r\\n *\\r\\n * platformBrowserDynamic().bootstrapModule(AppModule, {\\r\\n *   providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const TRANSLATIONS_FORMAT: InjectionToken<string>;\\r\\n\\r\\n/**\\r\\n * Tsickle has a bug where it creates an infinite loop for a function returning itself.\\r\\n * This is a temporary type that will be removed when the issue is resolved.\\r\\n * https://github.com/angular/tsickle/issues/1009)\\r\\n */\\r\\ndeclare type TsickleIssue1009 = any;\\r\\n\\r\\n/**\\r\\n * A series of flags used to configure the config value present within an instance of\\r\\n * `TStylingContext`.\\r\\n */\\r\\ndeclare const enum TStylingConfig {\\r\\n    /**\\r\\n     * The initial state of the styling context config.\\r\\n     */\\r\\n    Initial = 0,\\r\\n    /**\\r\\n     * Whether or not there are any directives on this element.\\r\\n     *\\r\\n     * This is used so that certain performance optimizations can\\r\\n     * take place (e.g. direct style/class binding application).\\r\\n     *\\r\\n     * Note that the presence of this flag doesn't guarantee the\\r\\n     * presence of host-level style or class bindings within any\\r\\n     * of the active directives on the element.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `<div dir-one>`\\r\\n     * 2. `<div dir-one [dir-two]=\\\"x\\\">`\\r\\n     * 3. `<comp>`\\r\\n     * 4. `<comp dir-one>`\\r\\n     */\\r\\n    HasDirectives = 1,\\r\\n    /**\\r\\n     * Whether or not there are prop-based bindings present.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `<div [style.prop]=\\\"x\\\">`\\r\\n     * 2. `<div [class.prop]=\\\"x\\\">`\\r\\n     * 3. `@HostBinding('style.prop') x`\\r\\n     * 4. `@HostBinding('class.prop') x`\\r\\n     */\\r\\n    HasPropBindings = 2,\\r\\n    /**\\r\\n     * Whether or not there are map-based bindings present.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `<div [style]=\\\"x\\\">`\\r\\n     * 2. `<div [class]=\\\"x\\\">`\\r\\n     * 3. `@HostBinding('style') x`\\r\\n     * 4. `@HostBinding('class') x`\\r\\n     */\\r\\n    HasMapBindings = 4,\\r\\n    /**\\r\\n     * Whether or not there are map-based and prop-based bindings present.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `<div [style]=\\\"x\\\" [style.prop]=\\\"y\\\">`\\r\\n     * 2. `<div [class]=\\\"x\\\" [style.prop]=\\\"y\\\">`\\r\\n     * 3. `<div [style]=\\\"x\\\" dir-that-sets-some-prop>`\\r\\n     * 4. `<div [class]=\\\"x\\\" dir-that-sets-some-class>`\\r\\n     */\\r\\n    HasPropAndMapBindings = 6,\\r\\n    /**\\r\\n     * Whether or not there are two or more sources for a single property in the context.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. prop + prop: `<div [style.width]=\\\"x\\\" dir-that-sets-width>`\\r\\n     * 2. map + prop: `<div [style]=\\\"x\\\" [style.prop]>`\\r\\n     * 3. map + map: `<div [style]=\\\"x\\\" dir-that-sets-style>`\\r\\n     */\\r\\n    HasCollisions = 8,\\r\\n    /**\\r\\n     * Whether or not the context contains initial styling values.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `<div style=\\\"width:200px\\\">`\\r\\n     * 2. `<div class=\\\"one two three\\\">`\\r\\n     * 3. `@Directive({ host: { 'style': 'width:200px' } })`\\r\\n     * 4. `@Directive({ host: { 'class': 'one two three' } })`\\r\\n     */\\r\\n    HasInitialStyling = 16,\\r\\n    /**\\r\\n     * Whether or not the context contains one or more template bindings.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `<div [style]=\\\"x\\\">`\\r\\n     * 2. `<div [style.width]=\\\"x\\\">`\\r\\n     * 3. `<div [class]=\\\"x\\\">`\\r\\n     * 4. `<div [class.name]=\\\"x\\\">`\\r\\n     */\\r\\n    HasTemplateBindings = 32,\\r\\n    /**\\r\\n     * Whether or not the context contains one or more host bindings.\\r\\n     *\\r\\n     * Examples include:\\r\\n     * 1. `@HostBinding('style') x`\\r\\n     * 2. `@HostBinding('style.width') x`\\r\\n     * 3. `@HostBinding('class') x`\\r\\n     * 4. `@HostBinding('class.name') x`\\r\\n     */\\r\\n    HasHostBindings = 64,\\r\\n    /**\\r\\n     * Whether or not the template bindings are allowed to be registered in the context.\\r\\n     *\\r\\n     * This flag is after one or more template-based style/class bindings were\\r\\n     * set and processed for an element. Once the bindings are processed then a call\\r\\n     * to stylingApply is issued and the lock will be put into place.\\r\\n     *\\r\\n     * Note that this is only set once.\\r\\n     */\\r\\n    TemplateBindingsLocked = 128,\\r\\n    /**\\r\\n     * Whether or not the host bindings are allowed to be registered in the context.\\r\\n     *\\r\\n     * This flag is after one or more host-based style/class bindings were\\r\\n     * set and processed for an element. Once the bindings are processed then a call\\r\\n     * to stylingApply is issued and the lock will be put into place.\\r\\n     *\\r\\n     * Note that this is only set once.\\r\\n     */\\r\\n    HostBindingsLocked = 256,\\r\\n    /** A Mask of all the configurations */\\r\\n    Mask = 511,\\r\\n    /** Total amount of configuration bits used */\\r\\n    TotalBits = 9\\r\\n}\\r\\n\\r\\n/**\\r\\n * --------\\r\\n *\\r\\n * This file contains the core interfaces for styling in Angular.\\r\\n *\\r\\n * To learn more about the algorithm see `TStylingContext`.\\r\\n *\\r\\n * --------\\r\\n */\\r\\n/**\\r\\n * A static-level representation of all style or class bindings/values\\r\\n * associated with a `TNode`.\\r\\n *\\r\\n * The `TStylingContext` unites all template styling bindings (i.e.\\r\\n * `[class]` and `[style]` bindings) as well as all host-level\\r\\n * styling bindings (for components and directives) together into\\r\\n * a single manifest\\r\\n *\\r\\n * The styling context is stored on a `TNode` on and there are\\r\\n * two instances of it: one for classes and another for styles.\\r\\n *\\r\\n * ```typescript\\r\\n * tNode.styles = [ ... a context only for styles ... ];\\r\\n * tNode.classes = [ ... a context only for classes ... ];\\r\\n * ```\\r\\n *\\r\\n * The styling context is created each time there are one or more\\r\\n * styling bindings (style or class bindings) present for an element,\\r\\n * but is only created once per `TNode`.\\r\\n *\\r\\n * `tNode.styles` and `tNode.classes` can be an instance of the following:\\r\\n *\\r\\n * ```typescript\\r\\n * tNode.styles = null; // no static styling or styling bindings active\\r\\n * tNode.styles = StylingMapArray; // only static values present (e.g. `<div style=\\\"width:200\\\">`)\\r\\n * tNode.styles = TStylingContext; // one or more styling bindings present (e.g. `<div\\r\\n * [style.width]>`)\\r\\n * ```\\r\\n *\\r\\n * Both `tNode.styles` and `tNode.classes` are instantiated when anything\\r\\n * styling-related is active on an element. They are first created from\\r\\n * from the any of the element-level instructions (e.g. `element`,\\r\\n * `elementStart`, `elementHostAttrs`). When any static style/class\\r\\n * values are encountered they are registered on the `tNode.styles`\\r\\n * and `tNode.classes` data-structures. By default (when any static\\r\\n * values are encountered) the `tNode.styles` or `tNode.classes` values\\r\\n * are instances of a `StylingMapArray`. Only when style/class bindings\\r\\n * are detected then that styling map is converted into an instance of\\r\\n * `TStylingContext`.\\r\\n *\\r\\n * Due to the fact the the `TStylingContext` is stored on a `TNode`\\r\\n * this means that all data within the context is static. Instead of\\r\\n * storing actual styling binding values, the lView binding index values\\r\\n * are stored within the context. (static nature means it is more compact.)\\r\\n *\\r\\n * The code below shows a breakdown of two instances of `TStylingContext`\\r\\n * (one for `tNode.styles` and another for `tNode.classes`):\\r\\n *\\r\\n * ```typescript\\r\\n * // <div [class.active]=\\\"c\\\"  // lView binding index = 20\\r\\n * //      [style.width]=\\\"x\\\"   // lView binding index = 21\\r\\n * //      [style.height]=\\\"y\\\"> // lView binding index = 22\\r\\n * //  ...\\r\\n * // </div>\\r\\n * tNode.styles = [\\r\\n *   0,         // the context config value (see `TStylingContextConfig`)\\r\\n *   1,         // the total amount of sources present (only `1` b/c there are only template\\r\\n * bindings)\\r\\n *   [null],    // initial values array (an instance of `StylingMapArray`)\\r\\n *\\r\\n *   0,         // config entry for the property (see `TStylingContextPropConfigFlags`)\\r\\n *   0b010,     // template guard mask for height\\r\\n *   0,         // host bindings guard mask for height\\r\\n *   'height',  // the property name\\r\\n *   22,        // the binding location for the \\\"y\\\" binding in the lView\\r\\n *   null,      // the default value for height\\r\\n *\\r\\n *   0,         // config entry for the property (see `TStylingContextPropConfigFlags`)\\r\\n *   0b001,     // template guard mask for width\\r\\n *   0,         // host bindings guard mask for width\\r\\n *   'width',   // the property name\\r\\n *   21,        // the binding location for the \\\"x\\\" binding in the lView\\r\\n *   null,      // the default value for width\\r\\n * ];\\r\\n *\\r\\n * tNode.classes = [\\r\\n *   0,         // the context config value (see `TStylingContextConfig`)\\r\\n *   1,         // the total amount of sources present (only `1` b/c there are only template\\r\\n * bindings)\\r\\n *   [null],    // initial values array (an instance of `StylingMapArray`)\\r\\n *\\r\\n *   0,         // config entry for the property (see `TStylingContextPropConfigFlags`)\\r\\n *   0b001,     // template guard mask for width\\r\\n *   0,         // host bindings guard mask for width\\r\\n *   'active',  // the property name\\r\\n *   20,        // the binding location for the \\\"c\\\" binding in the lView\\r\\n *   null,      // the default value for the `active` class\\r\\n * ];\\r\\n * ```\\r\\n *\\r\\n * Entry value present in an entry (called a tuple) within the\\r\\n * styling context is as follows:\\r\\n *\\r\\n * ```typescript\\r\\n * context = [\\r\\n *   //...\\r\\n *   configValue,\\r\\n *   templateGuardMask,\\r\\n *   hostBindingsGuardMask,\\r\\n *   propName,\\r\\n *   ...bindingIndices...,\\r\\n *   defaultValue\\r\\n *   //...\\r\\n * ];\\r\\n * ```\\r\\n *\\r\\n * Below is a breakdown of each value:\\r\\n *\\r\\n * - **configValue**:\\r\\n *   Property-specific configuration values. The only config setting\\r\\n *   that is implemented right now is whether or not to sanitize the\\r\\n *   value.\\r\\n *\\r\\n * - **templateGuardMask**:\\r\\n *   A numeric value where each bit represents a binding index\\r\\n *   location. Each binding index location is assigned based on\\r\\n *   a local counter value that increments each time an instruction\\r\\n *   is called:\\r\\n *\\r\\n * ```\\r\\n * <div [style.width]=\\\"x\\\"   // binding index = 21 (counter index = 0)\\r\\n *      [style.height]=\\\"y\\\"> // binding index = 22 (counter index = 1)\\r\\n * ```\\r\\n *\\r\\n *   In the example code above, if the `width` value where to change\\r\\n *   then the first bit in the local bit mask value would be flipped\\r\\n *   (and the second bit for when `height`).\\r\\n *\\r\\n *   If and when there are more than 32 binding sources in the context\\r\\n *   (more than 32 `[style/class]` bindings) then the bit masking will\\r\\n *   overflow and we are left with a situation where a `-1` value will\\r\\n *   represent the bit mask. Due to the way that JavaScript handles\\r\\n *   negative values, when the bit mask is `-1` then all bits within\\r\\n *   that value will be automatically flipped (this is a quick and\\r\\n *   efficient way to flip all bits on the mask when a special kind\\r\\n *   of caching scenario occurs or when there are more than 32 bindings).\\r\\n *\\r\\n * - **hostBindingsGuardMask**:\\r\\n *   Another instance of a guard mask that is specific to host bindings.\\r\\n *   This behaves exactly the same way as does the `templateGuardMask`,\\r\\n *   but will not contain any binding information processed in the template.\\r\\n *   The reason why there are two instances of guard masks (one for the\\r\\n *   template and another for host bindings) is because the template bindings\\r\\n *   are processed before host bindings and the state information is not\\r\\n *   carried over into the host bindings code. As soon as host bindings are\\r\\n *   processed for an element the counter and state-based bit mask values are\\r\\n *   set to `0`.\\r\\n *\\r\\n * ```\\r\\n * <div [style.width]=\\\"x\\\"   // binding index = 21 (counter index = 0)\\r\\n *      [style.height]=\\\"y\\\"  // binding index = 22 (counter index = 1)\\r\\n *      dir-that-sets-width  // binding index = 30 (counter index = 0)\\r\\n *      dir-that-sets-width> // binding index = 31 (counter index = 1)\\r\\n * ```\\r\\n *\\r\\n * - **propName**:\\r\\n *   The CSS property name or class name (e.g `width` or `active`).\\r\\n *\\r\\n * - **bindingIndices...**:\\r\\n *   A series of numeric binding values that reflect where in the\\r\\n *   lView to find the style/class values associated with the property.\\r\\n *   Each value is in order in terms of priority (templates are first,\\r\\n *   then directives and then components). When the context is flushed\\r\\n *   and the style/class values are applied to the element (this happens\\r\\n *   inside of the `stylingApply` instruction) then the flushing code\\r\\n *   will keep checking each binding index against the associated lView\\r\\n *   to find the first style/class value that is non-null.\\r\\n *\\r\\n * - **defaultValue**:\\r\\n *   This is the default that will always be applied to the element if\\r\\n *   and when all other binding sources return a result that is null.\\r\\n *   Usually this value is `null` but it can also be a static value that\\r\\n *   is intercepted when the tNode is first constructured (e.g.\\r\\n *   `<div style=\\\"width:200px\\\">` has a default value of `200px` for\\r\\n *   the `width` property).\\r\\n *\\r\\n * Each time a new binding is encountered it is registered into the\\r\\n * context. The context then is continually updated until the first\\r\\n * styling apply call has been called (which is automatically scheduled\\r\\n * to be called once an element exits during change detection). Note that\\r\\n * each entry in the context is stored in alphabetical order.\\r\\n *\\r\\n * Once styling has been flushed for the first time for an element the\\r\\n * context will set as locked (this prevents bindings from being added\\r\\n * to the context later on).\\r\\n *\\r\\n * # How Styles/Classes are Rendered\\r\\n * Each time a styling instruction (e.g. `[class.name]`, `[style.prop]`,\\r\\n * etc...) is executed, the associated `lView` for the view is updated\\r\\n * at the current binding location. Also, when this happens, a local\\r\\n * counter value is incremented. If the binding value has changed then\\r\\n * a local `bitMask` variable is updated with the specific bit based\\r\\n * on the counter value.\\r\\n *\\r\\n * Below is a lightweight example of what happens when a single style\\r\\n * property is updated (i.e. `<div [style.prop]=\\\"val\\\">`):\\r\\n *\\r\\n * ```typescript\\r\\n * function updateStyleProp(prop: string, value: string) {\\r\\n *   const lView = getLView();\\r\\n *   const bindingIndex = BINDING_INDEX++;\\r\\n *\\r\\n *   // update the local counter value\\r\\n *   const indexForStyle = stylingState.stylesCount++;\\r\\n *   if (lView[bindingIndex] !== value) {\\r\\n *     lView[bindingIndex] = value;\\r\\n *\\r\\n *     // tell the local state that we have updated a style value\\r\\n *     // by updating the bit mask\\r\\n *     stylingState.bitMaskForStyles |= 1 << indexForStyle;\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * Once all the bindings have updated a `bitMask` value will be populated.\\r\\n * This `bitMask` value is used in the apply algorithm (which is called\\r\\n * context resolution).\\r\\n *\\r\\n * ## The Apply Algorithm (Context Resolution)\\r\\n * As explained above, each time a binding updates its value, the resulting\\r\\n * value is stored in the `lView` array. These styling values have yet to\\r\\n * be flushed to the element.\\r\\n *\\r\\n * Once all the styling instructions have been evaluated, then the styling\\r\\n * context(s) are flushed to the element. When this happens, the context will\\r\\n * be iterated over (property by property) and each binding source will be\\r\\n * examined and the first non-null value will be applied to the element.\\r\\n *\\r\\n * Let's say that we the following template code:\\r\\n *\\r\\n * ```html\\r\\n * <div [style.width]=\\\"w1\\\" dir-that-set-width=\\\"w2\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * There are two styling bindings in the code above and they both write\\r\\n * to the `width` property. When styling is flushed on the element, the\\r\\n * algorithm will try and figure out which one of these values to write\\r\\n * to the element.\\r\\n *\\r\\n * In order to figure out which value to apply, the following\\r\\n * binding prioritization is adhered to:\\r\\n *\\r\\n *   1. First template-level styling bindings are applied (if present).\\r\\n *      This includes things like `[style.width]` and `[class.active]`.\\r\\n *\\r\\n *   2. Second are styling-level host bindings present in directives.\\r\\n *      (if there are sub/super directives present then the sub directives\\r\\n *      are applied first).\\r\\n *\\r\\n *   3. Third are styling-level host bindings present in components.\\r\\n *      (if there are sub/super components present then the sub directives\\r\\n *      are applied first).\\r\\n *\\r\\n * This means that in the code above the styling binding present in the\\r\\n * template is applied first and, only if its falsy, then the directive\\r\\n * styling binding for width will be applied.\\r\\n *\\r\\n * ### What about map-based styling bindings?\\r\\n * Map-based styling bindings are activated when there are one or more\\r\\n * `[style]` and/or `[class]` bindings present on an element. When this\\r\\n * code is activated, the apply algorithm will iterate over each map\\r\\n * entry and apply each styling value to the element with the same\\r\\n * prioritization rules as above.\\r\\n *\\r\\n * For the algorithm to apply styling values efficiently, the\\r\\n * styling map entries must be applied in sync (property by property)\\r\\n * with prop-based bindings. (The map-based algorithm is described\\r\\n * more inside of the `render3/styling/map_based_bindings.ts` file.)\\r\\n *\\r\\n * ## Sanitization\\r\\n * Sanitization is used to prevent invalid style values from being applied to\\r\\n * the element.\\r\\n *\\r\\n * It is enabled in two cases:\\r\\n *\\r\\n *   1. The `styleSanitizer(sanitizerFn)` instruction was called (just before any other\\r\\n *      styling instructions are run).\\r\\n *\\r\\n *   2. The component/directive `LView` instance has a sanitizer object attached to it\\r\\n *      (this happens when `renderComponent` is executed with a `sanitizer` value or\\r\\n *      if the ngModule contains a sanitizer provider attached to it).\\r\\n *\\r\\n * If and when sanitization is active then all property/value entries will be evaluated\\r\\n * through the active sanitizer before they are applied to the element (or the styling\\r\\n * debug handler).\\r\\n *\\r\\n * If a `Sanitizer` object is used (via the `LView[SANITIZER]` value) then that object\\r\\n * will be used for every property.\\r\\n *\\r\\n * If a `StyleSanitizerFn` function is used (via the `styleSanitizer`) then it will be\\r\\n * called in two ways:\\r\\n *\\r\\n *   1. property validation mode: this will be called early to mark whether a property\\r\\n *      should be sanitized or not at during the flushing stage.\\r\\n *\\r\\n *   2. value sanitization mode: this will be called during the flushing stage and will\\r\\n *      run the sanitizer function against the value before applying it to the element.\\r\\n *\\r\\n * If sanitization returns an empty value then that empty value will be applied\\r\\n * to the element.\\r\\n */\\r\\ndeclare interface TStylingContext extends Array<number | string | number | boolean | null | StylingMapArray | {}> {\\r\\n    /** Configuration data for the context */\\r\\n    [TStylingContextIndex.ConfigPosition]: TStylingConfig;\\r\\n    /** The total amount of sources present in the context */\\r\\n    [TStylingContextIndex.TotalSourcesPosition]: number;\\r\\n    /** Initial value position for static styles */\\r\\n    [TStylingContextIndex.InitialStylingValuePosition]: StylingMapArray;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An index of position and offset values used to navigate the `TStylingContext`.\\r\\n */\\r\\ndeclare const enum TStylingContextIndex {\\r\\n    ConfigPosition = 0,\\r\\n    TotalSourcesPosition = 1,\\r\\n    InitialStylingValuePosition = 2,\\r\\n    ValuesStartPosition = 3,\\r\\n    ConfigOffset = 0,\\r\\n    TemplateBitGuardOffset = 1,\\r\\n    HostBindingsBitGuardOffset = 2,\\r\\n    PropOffset = 3,\\r\\n    BindingsStartOffset = 4\\r\\n}\\r\\n\\r\\n/** Static data for a text node */\\r\\ndeclare interface TTextNode extends TNode {\\r\\n    /** Index in the data[] array */\\r\\n    index: number;\\r\\n    child: null;\\r\\n    /**\\r\\n     * Text nodes will have parents unless they are the first node of a component or\\r\\n     * embedded view (which means their parent is in a different view and must be\\r\\n     * retrieved using LView.node).\\r\\n     */\\r\\n    parent: ɵangular_packages_core_core_bh | TElementContainerNode | null;\\r\\n    tViews: null;\\r\\n    projection: null;\\r\\n}\\r\\n\\r\\ndeclare const TVIEW = 1;\\r\\n\\r\\n/**\\r\\n * The static data for an LView (shared between all templates of a\\r\\n * given type).\\r\\n *\\r\\n * Stored on the `ComponentDef.tView`.\\r\\n */\\r\\ndeclare interface TView {\\r\\n    /**\\r\\n     * ID for inline views to determine whether a view is the same as the previous view\\r\\n     * in a certain position. If it's not, we know the new view needs to be inserted\\r\\n     * and the one that exists needs to be removed (e.g. if/else statements)\\r\\n     *\\r\\n     * If this is -1, then this is a component view or a dynamically created view.\\r\\n     */\\r\\n    readonly id: number;\\r\\n    /**\\r\\n     * This is a blueprint used to generate LView instances for this TView. Copying this\\r\\n     * blueprint is faster than creating a new LView from scratch.\\r\\n     */\\r\\n    blueprint: ɵangular_packages_core_core_bm;\\r\\n    /**\\r\\n     * The template function used to refresh the view of dynamically created views\\r\\n     * and components. Will be null for inline views.\\r\\n     */\\r\\n    template: ComponentTemplate<{}> | null;\\r\\n    /**\\r\\n     * A function containing query-related instructions.\\r\\n     */\\r\\n    viewQuery: ViewQueriesFunction<{}> | null;\\r\\n    /**\\r\\n     * Pointer to the host `TNode` (not part of this TView).\\r\\n     *\\r\\n     * If this is a `TViewNode` for an `LViewNode`, this is an embedded view of a container.\\r\\n     * We need this pointer to be able to efficiently find this node when inserting the view\\r\\n     * into an anchor.\\r\\n     *\\r\\n     * If this is a `TElementNode`, this is the view of a root component. It has exactly one\\r\\n     * root TNode.\\r\\n     *\\r\\n     * If this is null, this is the view of a component that is not at root. We do not store\\r\\n     * the host TNodes for child component views because they can potentially have several\\r\\n     * different host TNodes, depending on where the component is being used. These host\\r\\n     * TNodes cannot be shared (due to different indices, etc).\\r\\n     */\\r\\n    node: TViewNode | ɵangular_packages_core_core_bh | null;\\r\\n    /** Whether or not this template has been processed. */\\r\\n    firstTemplatePass: boolean;\\r\\n    /** Static data equivalent of LView.data[]. Contains TNodes, PipeDefInternal or TI18n. */\\r\\n    data: TData;\\r\\n    /**\\r\\n     * The binding start index is the index at which the data array\\r\\n     * starts to store bindings only. Saving this value ensures that we\\r\\n     * will begin reading bindings at the correct point in the array when\\r\\n     * we are in update mode.\\r\\n     */\\r\\n    bindingStartIndex: number;\\r\\n    /**\\r\\n     * The index where the \\\"expando\\\" section of `LView` begins. The expando\\r\\n     * section contains injectors, directive instances, and host binding values.\\r\\n     * Unlike the \\\"decls\\\" and \\\"vars\\\" sections of `LView`, the length of this\\r\\n     * section cannot be calculated at compile-time because directives are matched\\r\\n     * at runtime to preserve locality.\\r\\n     *\\r\\n     * We store this start index so we know where to start checking host bindings\\r\\n     * in `setHostBindings`.\\r\\n     */\\r\\n    expandoStartIndex: number;\\r\\n    /**\\r\\n     * Whether or not there are any static view queries tracked on this view.\\r\\n     *\\r\\n     * We store this so we know whether or not we should do a view query\\r\\n     * refresh after creation mode to collect static query results.\\r\\n     */\\r\\n    staticViewQueries: boolean;\\r\\n    /**\\r\\n     * Whether or not there are any static content queries tracked on this view.\\r\\n     *\\r\\n     * We store this so we know whether or not we should do a content query\\r\\n     * refresh after creation mode to collect static query results.\\r\\n     */\\r\\n    staticContentQueries: boolean;\\r\\n    /**\\r\\n     * A reference to the first child node located in the view.\\r\\n     */\\r\\n    firstChild: TNode | null;\\r\\n    /**\\r\\n     * Set of instructions used to process host bindings efficiently.\\r\\n     *\\r\\n     * See VIEW_DATA.md for more information.\\r\\n     */\\r\\n    expandoInstructions: ExpandoInstructions | null;\\r\\n    /**\\r\\n     * Full registry of directives and components that may be found in this view.\\r\\n     *\\r\\n     * It's necessary to keep a copy of the full def list on the TView so it's possible\\r\\n     * to render template functions without a host component.\\r\\n     */\\r\\n    directiveRegistry: DirectiveDefList | null;\\r\\n    /**\\r\\n     * Full registry of pipes that may be found in this view.\\r\\n     *\\r\\n     * The property is either an array of `PipeDefs`s or a function which returns the array of\\r\\n     * `PipeDefs`s. The function is necessary to be able to support forward declarations.\\r\\n     *\\r\\n     * It's necessary to keep a copy of the full def list on the TView so it's possible\\r\\n     * to render template functions without a host component.\\r\\n     */\\r\\n    pipeRegistry: PipeDefList | null;\\r\\n    /**\\r\\n     * Array of ngOnInit, ngOnChanges and ngDoCheck hooks that should be executed for this view in\\r\\n     * creation mode.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    preOrderHooks: HookData | null;\\r\\n    /**\\r\\n     * Array of ngOnChanges and ngDoCheck hooks that should be executed for this view in update mode.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    preOrderCheckHooks: HookData | null;\\r\\n    /**\\r\\n     * Array of ngAfterContentInit and ngAfterContentChecked hooks that should be executed\\r\\n     * for this view in creation mode.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    contentHooks: HookData | null;\\r\\n    /**\\r\\n     * Array of ngAfterContentChecked hooks that should be executed for this view in update\\r\\n     * mode.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    contentCheckHooks: HookData | null;\\r\\n    /**\\r\\n     * Array of ngAfterViewInit and ngAfterViewChecked hooks that should be executed for\\r\\n     * this view in creation mode.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    viewHooks: HookData | null;\\r\\n    /**\\r\\n     * Array of ngAfterViewChecked hooks that should be executed for this view in\\r\\n     * update mode.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    viewCheckHooks: HookData | null;\\r\\n    /**\\r\\n     * Array of ngOnDestroy hooks that should be executed when this view is destroyed.\\r\\n     *\\r\\n     * Even indices: Directive index\\r\\n     * Odd indices: Hook function\\r\\n     */\\r\\n    destroyHooks: HookData | null;\\r\\n    /**\\r\\n     * When a view is destroyed, listeners need to be released and outputs need to be\\r\\n     * unsubscribed. This cleanup array stores both listener data (in chunks of 4)\\r\\n     * and output data (in chunks of 2) for a particular view. Combining the arrays\\r\\n     * saves on memory (70 bytes per array) and on a few bytes of code size (for two\\r\\n     * separate for loops).\\r\\n     *\\r\\n     * If it's a native DOM listener or output subscription being stored:\\r\\n     * 1st index is: event name  `name = tView.cleanup[i+0]`\\r\\n     * 2nd index is: index of native element or a function that retrieves global target (window,\\r\\n     *               document or body) reference based on the native element:\\r\\n     *    `typeof idxOrTargetGetter === 'function'`: global target getter function\\r\\n     *    `typeof idxOrTargetGetter === 'number'`: index of native element\\r\\n     *\\r\\n     * 3rd index is: index of listener function `listener = lView[CLEANUP][tView.cleanup[i+2]]`\\r\\n     * 4th index is: `useCaptureOrIndx = tView.cleanup[i+3]`\\r\\n     *    `typeof useCaptureOrIndx == 'boolean' : useCapture boolean\\r\\n     *    `typeof useCaptureOrIndx == 'number':\\r\\n     *         `useCaptureOrIndx >= 0` `removeListener = LView[CLEANUP][useCaptureOrIndx]`\\r\\n     *         `useCaptureOrIndx <  0` `subscription = LView[CLEANUP][-useCaptureOrIndx]`\\r\\n     *\\r\\n     * If it's an output subscription or query list destroy hook:\\r\\n     * 1st index is: output unsubscribe function / query list destroy function\\r\\n     * 2nd index is: index of function context in LView.cleanupInstances[]\\r\\n     *               `tView.cleanup[i+0].call(lView[CLEANUP][tView.cleanup[i+1]])`\\r\\n     */\\r\\n    cleanup: any[] | null;\\r\\n    /**\\r\\n     * A list of element indices for child components that will need to be\\r\\n     * refreshed when the current view has finished its check. These indices have\\r\\n     * already been adjusted for the HEADER_OFFSET.\\r\\n     *\\r\\n     */\\r\\n    components: number[] | null;\\r\\n    /**\\r\\n     * A collection of queries tracked in a given view.\\r\\n     */\\r\\n    queries: TQueries | null;\\r\\n    /**\\r\\n     * An array of indices pointing to directives with content queries alongside with the\\r\\n     * corresponding\\r\\n     * query index. Each entry in this array is a tuple of:\\r\\n     * - index of the first content query index declared by a given directive;\\r\\n     * - index of a directive.\\r\\n     *\\r\\n     * We are storing those indexes so we can refresh content queries as part of a view refresh\\r\\n     * process.\\r\\n     */\\r\\n    contentQueries: number[] | null;\\r\\n    /**\\r\\n     * Set of schemas that declare elements to be allowed inside the view.\\r\\n     */\\r\\n    schemas: SchemaMetadata[] | null;\\r\\n    /**\\r\\n     * Array of attributes for all of the elements in the view. Used\\r\\n     * for directive matching and attribute bindings.\\r\\n     */\\r\\n    consts: TAttributes[] | null;\\r\\n}\\r\\n\\r\\n/** Static data for a view  */\\r\\ndeclare interface TViewNode extends TNode {\\r\\n    /** If -1, it's a dynamically created view. Otherwise, it is the view block ID. */\\r\\n    index: number;\\r\\n    child: ɵangular_packages_core_core_bh | TTextNode | TElementContainerNode | TContainerNode | TProjectionNode | null;\\r\\n    parent: TContainerNode | null;\\r\\n    tViews: null;\\r\\n    projection: null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Special location which allows easy identification of type. If we have an array which was\\r\\n * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is\\r\\n * `LContainer`.\\r\\n */\\r\\ndeclare const TYPE = 1;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents a type that a Component or other object is instances of.\\r\\n *\\r\\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by\\r\\n * the `MyCustomComponent` constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const Type: FunctionConstructor;\\r\\n\\r\\nexport declare interface Type<T> extends Function {\\r\\n    new (...args: any[]): T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An interface implemented by all Angular type decorators, which allows them to be used as\\r\\n * decorators as well as Angular syntax.\\r\\n *\\r\\n * ```\\r\\n * @ng.Component({...})\\r\\n * class MyClass {...}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface TypeDecorator {\\r\\n    /**\\r\\n     * Invoke as decorator.\\r\\n     */\\r\\n    <T extends Type<any>>(type: T): T;\\r\\n    (target: Object, propertyKey?: string | symbol, parameterIndex?: number): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `Type` when `Type' is used as the token.\\r\\n *\\r\\n * Create an instance by invoking the `new` operator and supplying additional arguments.\\r\\n * This form is a short form of `TypeProvider`;\\r\\n *\\r\\n * For more details, see the [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='TypeProvider'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface TypeProvider extends Type<any> {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value for a token.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ValueProvider'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ValueProvider extends ValueSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value for a token.\\r\\n * Base for `ValueProvider` decorator.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ValueSansProvider {\\r\\n    /**\\r\\n     * The value to inject.\\r\\n     */\\r\\n    useValue: any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const VERSION: Version;\\r\\n\\r\\n\\r\\n/**\\r\\n * @description Represents the version of Angular\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Version {\\r\\n    full: string;\\r\\n    readonly major: string;\\r\\n    readonly minor: string;\\r\\n    readonly patch: string;\\r\\n    constructor(full: string);\\r\\n}\\r\\n\\r\\ndeclare const VIEW_REFS = 8;\\r\\n\\r\\n/**\\r\\n * Type of the ViewChild metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ViewChild = Query;\\r\\n\\r\\n/**\\r\\n * ViewChild decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ViewChild: ViewChildDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the ViewChild decorator / constructor function.\\r\\n *\\r\\n * @see `ViewChild`.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ViewChildDecorator {\\r\\n    /**\\r\\n     * @description\\r\\n     * Property decorator that configures a view query.\\r\\n     * The change detector looks for the first element or the directive matching the selector\\r\\n     * in the view DOM. If the view DOM changes, and a new child matches the selector,\\r\\n     * the property is updated.\\r\\n     *\\r\\n     * View queries are set before the `ngAfterViewInit` callback is called.\\r\\n     *\\r\\n     * **Metadata Properties**:\\r\\n     *\\r\\n     * * **selector** - The directive type or the name used for querying.\\r\\n     * * **read** - True to read a different token from the queried elements.\\r\\n     * * **static** - True to resolve query results before change detection runs,\\r\\n     * false to resolve after change detection. Defaults to false.\\r\\n     *\\r\\n     *\\r\\n     * The following selectors are supported.\\r\\n     *   * Any class with the `@Component` or `@Directive` decorator\\r\\n     *   * A template reference variable as a string (e.g. query `<my-component #cmp></my-component>`\\r\\n     * with `@ViewChild('cmp')`)\\r\\n     *   * Any provider defined in the child component tree of the current component (e.g.\\r\\n     * `@ViewChild(SomeService) someService: SomeService`)\\r\\n     *   * Any provider defined through a string token (e.g. `@ViewChild('someToken') someTokenVal:\\r\\n     * any`)\\r\\n     *   * A `TemplateRef` (e.g. query `<ng-template></ng-template>` with `@ViewChild(TemplateRef)\\r\\n     * template;`)\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * {@example core/di/ts/viewChild/view_child_example.ts region='Component'}\\r\\n     *\\r\\n     * ### Example 2\\r\\n     *\\r\\n     * {@example core/di/ts/viewChild/view_child_howto.ts region='HowTo'}\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    (selector: Type<any> | Function | string, opts?: {\\r\\n        read?: any;\\r\\n        static?: boolean;\\r\\n    }): any;\\r\\n    new (selector: Type<any> | Function | string, opts?: {\\r\\n        read?: any;\\r\\n        static?: boolean;\\r\\n    }): ViewChild;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Type of the ViewChildren metadata.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ViewChildren = Query;\\r\\n\\r\\n/**\\r\\n * ViewChildren decorator and metadata.\\r\\n *\\r\\n * @Annotation\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ViewChildren: ViewChildrenDecorator;\\r\\n\\r\\n/**\\r\\n * Type of the ViewChildren decorator / constructor function.\\r\\n *\\r\\n * @see `ViewChildren`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ViewChildrenDecorator {\\r\\n    /**\\r\\n     * Parameter decorator that configures a view query.\\r\\n     *\\r\\n     * Use to get the `QueryList` of elements or directives from the view DOM.\\r\\n     * Any time a child element is added, removed, or moved, the query list will be updated,\\r\\n     * and the changes observable of the query list will emit a new value.\\r\\n     *\\r\\n     * View queries are set before the `ngAfterViewInit` callback is called.\\r\\n     *\\r\\n     * **Metadata Properties**:\\r\\n     *\\r\\n     * * **selector** - The directive type or the name used for querying.\\r\\n     * * **read** - True to read a different token from the queried elements.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * {@example core/di/ts/viewChildren/view_children_howto.ts region='HowTo'}\\r\\n     *\\r\\n     * ### Another example\\r\\n     *\\r\\n     * {@example core/di/ts/viewChildren/view_children_example.ts region='Component'}\\r\\n     *\\r\\n     * @Annotation\\r\\n     */\\r\\n    (selector: Type<any> | Function | string, opts?: {\\r\\n        read?: any;\\r\\n    }): any;\\r\\n    new (selector: Type<any> | Function | string, opts?: {\\r\\n        read?: any;\\r\\n    }): ViewChildren;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents a container where one or more views can be attached to a component.\\r\\n *\\r\\n * Can contain *host views* (created by instantiating a\\r\\n * component with the `createComponent()` method), and *embedded views*\\r\\n * (created by instantiating a `TemplateRef` with the `createEmbeddedView()` method).\\r\\n *\\r\\n * A view container instance can contain other view containers,\\r\\n * creating a [view hierarchy](guide/glossary#view-tree).\\r\\n *\\r\\n * @see `ComponentRef`\\r\\n * @see `EmbeddedViewRef`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ViewContainerRef {\\r\\n    /**\\r\\n     * Anchor element that specifies the location of this container in the containing view.\\r\\n     * Each view container can have only one anchor element, and each anchor element\\r\\n     * can have only a single view container.\\r\\n     *\\r\\n     * Root elements of views attached to this container become siblings of the anchor element in\\r\\n     * the rendered view.\\r\\n     *\\r\\n     * Access the `ViewContainerRef` of an element by placing a `Directive` injected\\r\\n     * with `ViewContainerRef` on the element, or use a `ViewChild` query.\\r\\n     *\\r\\n     * <!-- TODO: rename to anchorElement -->\\r\\n     */\\r\\n    abstract readonly element: ElementRef;\\r\\n    /**\\r\\n     * The [dependency injector](guide/glossary#injector) for this view container.\\r\\n     */\\r\\n    abstract readonly injector: Injector;\\r\\n    /** @deprecated No replacement */\\r\\n    abstract readonly parentInjector: Injector;\\r\\n    /**\\r\\n     * Destroys all views in this container.\\r\\n     */\\r\\n    abstract clear(): void;\\r\\n    /**\\r\\n     * Retrieves a view from this container.\\r\\n     * @param index The 0-based index of the view to retrieve.\\r\\n     * @returns The `ViewRef` instance, or null if the index is out of range.\\r\\n     */\\r\\n    abstract get(index: number): ViewRef | null;\\r\\n    /**\\r\\n     * Reports how many views are currently attached to this container.\\r\\n     * @returns The number of views.\\r\\n     */\\r\\n    abstract readonly length: number;\\r\\n    /**\\r\\n     * Instantiates an embedded view and inserts it\\r\\n     * into this container.\\r\\n     * @param templateRef The HTML template that defines the view.\\r\\n     * @param index The 0-based index at which to insert the new view into this container.\\r\\n     * If not specified, appends the new view as the last entry.\\r\\n     *\\r\\n     * @returns The `ViewRef` instance for the newly created view.\\r\\n     */\\r\\n    abstract createEmbeddedView<C>(templateRef: TemplateRef<C>, context?: C, index?: number): EmbeddedViewRef<C>;\\r\\n    /**\\r\\n     * Instantiates a single component and inserts its host view into this container.\\r\\n     *\\r\\n     * @param componentFactory The factory to use.\\r\\n     * @param index The index at which to insert the new component's host view into this container.\\r\\n     * If not specified, appends the new view as the last entry.\\r\\n     * @param injector The injector to use as the parent for the new component.\\r\\n     * @param projectableNodes\\r\\n     * @param ngModule\\r\\n     *\\r\\n     * @returns The new component instance, containing the host view.\\r\\n     *\\r\\n     */\\r\\n    abstract createComponent<C>(componentFactory: ComponentFactory<C>, index?: number, injector?: Injector, projectableNodes?: any[][], ngModule?: NgModuleRef<any>): ComponentRef<C>;\\r\\n    /**\\r\\n     * Inserts a view into this container.\\r\\n     * @param viewRef The view to insert.\\r\\n     * @param index The 0-based index at which to insert the view.\\r\\n     * If not specified, appends the new view as the last entry.\\r\\n     * @returns The inserted `ViewRef` instance.\\r\\n     *\\r\\n     */\\r\\n    abstract insert(viewRef: ViewRef, index?: number): ViewRef;\\r\\n    /**\\r\\n     * Moves a view to a new location in this container.\\r\\n     * @param viewRef The view to move.\\r\\n     * @param index The 0-based index of the new location.\\r\\n     * @returns The moved `ViewRef` instance.\\r\\n     */\\r\\n    abstract move(viewRef: ViewRef, currentIndex: number): ViewRef;\\r\\n    /**\\r\\n     * Returns the index of a view within the current container.\\r\\n     * @param viewRef The view to query.\\r\\n     * @returns The 0-based index of the view's position in this container,\\r\\n     * or `-1` if this container doesn't contain the view.\\r\\n     */\\r\\n    abstract indexOf(viewRef: ViewRef): number;\\r\\n    /**\\r\\n     * Destroys a view attached to this container\\r\\n     * @param index The 0-based index of the view to destroy.\\r\\n     * If not specified, the last view in the container is removed.\\r\\n     */\\r\\n    abstract remove(index?: number): void;\\r\\n    /**\\r\\n     * Detaches a view from this container without destroying it.\\r\\n     * Use along with `insert()` to move a view within the current container.\\r\\n     * @param index The 0-based index of the view to detach.\\r\\n     * If not specified, the last view in the container is detached.\\r\\n     */\\r\\n    abstract detach(index?: number): ViewRef | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * View instance data.\\r\\n * Attention: Adding fields to this is performance sensitive!\\r\\n */\\r\\ndeclare interface ViewData {\\r\\n    def: ɵViewDefinition;\\r\\n    root: RootData;\\r\\n    renderer: Renderer2;\\r\\n    parentNodeDef: NodeDef | null;\\r\\n    parent: ViewData | null;\\r\\n    viewContainerParent: ViewData | null;\\r\\n    component: any;\\r\\n    context: any;\\r\\n    nodes: {\\r\\n        [key: number]: NodeData;\\r\\n    };\\r\\n    state: ViewState;\\r\\n    oldValues: any[];\\r\\n    disposables: DisposableFn[] | null;\\r\\n    initIndex: number;\\r\\n}\\r\\n\\r\\ndeclare interface ViewDefinitionFactory extends DefinitionFactory<ɵViewDefinition> {\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Defines template and style encapsulation options available for Component's {@link Component}.\\r\\n *\\r\\n * See {@link Component#encapsulation encapsulation}.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/ts/metadata/encapsulation.ts region='longform'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare enum ViewEncapsulation {\\r\\n    /**\\r\\n     * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host\\r\\n     * Element and pre-processing the style rules provided via {@link Component#styles styles} or\\r\\n     * {@link Component#styleUrls styleUrls}, and adding the new Host Element attribute to all\\r\\n     * selectors.\\r\\n     *\\r\\n     * This is the default option.\\r\\n     */\\r\\n    Emulated = 0,\\r\\n    /**\\r\\n     * @deprecated v6.1.0 - use {ViewEncapsulation.ShadowDom} instead.\\r\\n     * Use the native encapsulation mechanism of the renderer.\\r\\n     *\\r\\n     * For the DOM this means using the deprecated [Shadow DOM\\r\\n     * v0](https://w3c.github.io/webcomponents/spec/shadow/) and\\r\\n     * creating a ShadowRoot for Component's Host Element.\\r\\n     */\\r\\n    Native = 1,\\r\\n    /**\\r\\n     * Don't provide any template or style encapsulation.\\r\\n     */\\r\\n    None = 2,\\r\\n    /**\\r\\n     * Use Shadow DOM to encapsulate styles.\\r\\n     *\\r\\n     * For the DOM this means using modern [Shadow\\r\\n     * DOM](https://w3c.github.io/webcomponents/spec/shadow/) and\\r\\n     * creating a ShadowRoot for Component's Host Element.\\r\\n     */\\r\\n    ShadowDom = 3\\r\\n}\\r\\n\\r\\ndeclare interface viewEngine_ChangeDetectorRef_interface extends ChangeDetectorRef {\\r\\n}\\r\\n\\r\\ndeclare interface ViewHandleEventFn {\\r\\n    (view: ViewData, nodeIndex: number, eventName: string, event: any): boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Definition of what a view queries function should look like.\\r\\n */\\r\\ndeclare type ViewQueriesFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U) => void;\\r\\n\\r\\n/**\\r\\n * Represents an Angular [view](guide/glossary#view),\\r\\n * specifically the [host view](guide/glossary#view-tree) that is defined by a component.\\r\\n * Also serves as the base class\\r\\n * that adds destroy methods for [embedded views](guide/glossary#view-tree).\\r\\n *\\r\\n * @see `EmbeddedViewRef`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ViewRef extends ChangeDetectorRef {\\r\\n    /**\\r\\n     * Destroys this view and all of the data structures associated with it.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * Reports whether this view has been destroyed.\\r\\n     * @returns True after the `destroy()` method has been called, false otherwise.\\r\\n     */\\r\\n    abstract readonly destroyed: boolean;\\r\\n    /**\\r\\n     * A lifecycle hook that provides additional developer-defined cleanup\\r\\n     * functionality for views.\\r\\n     * @param callback A handler function that cleans up developer-defined data\\r\\n     * associated with a view. Called when the `destroy()` method is invoked.\\r\\n     */\\r\\n    abstract onDestroy(callback: Function): any /** TODO #9100 */;\\r\\n}\\r\\n\\r\\ndeclare class ViewRef_2<T> implements EmbeddedViewRef<T>, InternalViewRef, viewEngine_ChangeDetectorRef_interface {\\r\\n    private _context;\\r\\n    private _componentIndex;\\r\\n    private _appRef;\\r\\n    private _viewContainerRef;\\r\\n    readonly rootNodes: any[];\\r\\n    constructor(_lView: ɵangular_packages_core_core_bm, _context: T | null, _componentIndex: number);\\r\\n    readonly context: T;\\r\\n    readonly destroyed: boolean;\\r\\n    destroy(): void;\\r\\n    onDestroy(callback: Function): void;\\r\\n    /**\\r\\n     * Marks a view and all of its ancestors dirty.\\r\\n     *\\r\\n     * It also triggers change detection by calling `scheduleTick` internally, which coalesces\\r\\n     * multiple `markForCheck` calls to into one change detection run.\\r\\n     *\\r\\n     * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush OnPush} component is\\r\\n     * checked when it needs to be re-rendered but the two normal triggers haven't marked it\\r\\n     * dirty (i.e. inputs haven't changed and events haven't fired in the view).\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on OnPush components -->\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * ```typescript\\r\\n     * @Component({\\r\\n     *   selector: 'my-app',\\r\\n     *   template: `Number of ticks: {{numberOfTicks}}`\\r\\n     *   changeDetection: ChangeDetectionStrategy.OnPush,\\r\\n     * })\\r\\n     * class AppComponent {\\r\\n     *   numberOfTicks = 0;\\r\\n     *\\r\\n     *   constructor(private ref: ChangeDetectorRef) {\\r\\n     *     setInterval(() => {\\r\\n     *       this.numberOfTicks++;\\r\\n     *       // the following is required, otherwise the view will not be updated\\r\\n     *       this.ref.markForCheck();\\r\\n     *     }, 1000);\\r\\n     *   }\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    markForCheck(): void;\\r\\n    /**\\r\\n     * Detaches the view from the change detection tree.\\r\\n     *\\r\\n     * Detached views will not be checked during change detection runs until they are\\r\\n     * re-attached, even if they are dirty. `detach` can be used in combination with\\r\\n     * {@link ChangeDetectorRef#detectChanges detectChanges} to implement local change\\r\\n     * detection checks.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example defines a component with a large list of readonly data.\\r\\n     * Imagine the data changes constantly, many times per second. For performance reasons,\\r\\n     * we want to check and update the list every five seconds. We can do that by detaching\\r\\n     * the component's change detector and doing a local check every five seconds.\\r\\n     *\\r\\n     * ```typescript\\r\\n     * class DataProvider {\\r\\n     *   // in a real application the returned data will be different every time\\r\\n     *   get data() {\\r\\n     *     return [1,2,3,4,5];\\r\\n     *   }\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'giant-list',\\r\\n     *   template: `\\r\\n     *     <li *ngFor=\\\"let d of dataProvider.data\\\">Data {{d}}</li>\\r\\n     *   `,\\r\\n     * })\\r\\n     * class GiantList {\\r\\n     *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {\\r\\n     *     ref.detach();\\r\\n     *     setInterval(() => {\\r\\n     *       this.ref.detectChanges();\\r\\n     *     }, 5000);\\r\\n     *   }\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'app',\\r\\n     *   providers: [DataProvider],\\r\\n     *   template: `\\r\\n     *     <giant-list><giant-list>\\r\\n     *   `,\\r\\n     * })\\r\\n     * class App {\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    detach(): void;\\r\\n    /**\\r\\n     * Re-attaches a view to the change detection tree.\\r\\n     *\\r\\n     * This can be used to re-attach views that were previously detached from the tree\\r\\n     * using {@link ChangeDetectorRef#detach detach}. Views are attached to the tree by default.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example creates a component displaying `live` data. The component will detach\\r\\n     * its change detector from the main change detector tree when the component's live property\\r\\n     * is set to false.\\r\\n     *\\r\\n     * ```typescript\\r\\n     * class DataProvider {\\r\\n     *   data = 1;\\r\\n     *\\r\\n     *   constructor() {\\r\\n     *     setInterval(() => {\\r\\n     *       this.data = this.data * 2;\\r\\n     *     }, 500);\\r\\n     *   }\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'live-data',\\r\\n     *   inputs: ['live'],\\r\\n     *   template: 'Data: {{dataProvider.data}}'\\r\\n     * })\\r\\n     * class LiveData {\\r\\n     *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}\\r\\n     *\\r\\n     *   set live(value) {\\r\\n     *     if (value) {\\r\\n     *       this.ref.reattach();\\r\\n     *     } else {\\r\\n     *       this.ref.detach();\\r\\n     *     }\\r\\n     *   }\\r\\n     * }\\r\\n     *\\r\\n     * @Component({\\r\\n     *   selector: 'my-app',\\r\\n     *   providers: [DataProvider],\\r\\n     *   template: `\\r\\n     *     Live Update: <input type=\\\"checkbox\\\" [(ngModel)]=\\\"live\\\">\\r\\n     *     <live-data [live]=\\\"live\\\"><live-data>\\r\\n     *   `,\\r\\n     * })\\r\\n     * class AppComponent {\\r\\n     *   live = true;\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    reattach(): void;\\r\\n    /**\\r\\n     * Checks the view and its children.\\r\\n     *\\r\\n     * This can also be used in combination with {@link ChangeDetectorRef#detach detach} to implement\\r\\n     * local change detection checks.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * The following example defines a component with a large list of readonly data.\\r\\n     * Imagine, the data changes constantly, many times per second. For performance reasons,\\r\\n     * we want to check and update the list every five seconds.\\r\\n     *\\r\\n     * We can do that by detaching the component's change detector and doing a local change detection\\r\\n     * check every five seconds.\\r\\n     *\\r\\n     * See {@link ChangeDetectorRef#detach detach} for more information.\\r\\n     */\\r\\n    detectChanges(): void;\\r\\n    /**\\r\\n     * Checks the change detector and its children, and throws if any changes are detected.\\r\\n     *\\r\\n     * This is used in development mode to verify that running change detection doesn't\\r\\n     * introduce other changes.\\r\\n     */\\r\\n    checkNoChanges(): void;\\r\\n    attachToViewContainerRef(vcRef: ViewContainerRef): void;\\r\\n    detachFromAppRef(): void;\\r\\n    attachToAppRef(appRef: ApplicationRef): void;\\r\\n    private _lookUpContext;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Bitmask of states\\r\\n */\\r\\ndeclare const enum ViewState {\\r\\n    BeforeFirstCheck = 1,\\r\\n    FirstCheck = 2,\\r\\n    Attached = 4,\\r\\n    ChecksEnabled = 8,\\r\\n    IsProjectedView = 16,\\r\\n    CheckProjectedView = 32,\\r\\n    CheckProjectedViews = 64,\\r\\n    Destroyed = 128,\\r\\n    InitState_Mask = 1792,\\r\\n    InitState_BeforeInit = 0,\\r\\n    InitState_CallingOnInit = 256,\\r\\n    InitState_CallingAfterContentInit = 512,\\r\\n    InitState_CallingAfterViewInit = 768,\\r\\n    InitState_AfterInit = 1024,\\r\\n    CatDetectChanges = 12,\\r\\n    CatInit = 13\\r\\n}\\r\\n\\r\\ndeclare interface ViewUpdateFn {\\r\\n    (check: NodeCheckFn, view: ViewData): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Indicates that the result of a {@link Pipe} transformation has changed even though the\\r\\n * reference has not changed.\\r\\n *\\r\\n * Wrapped values are unwrapped automatically during the change detection, and the unwrapped value\\r\\n * is stored.\\r\\n *\\r\\n * Example:\\r\\n *\\r\\n * ```\\r\\n * if (this._latestValue === this._latestReturnedValue) {\\r\\n *    return this._latestReturnedValue;\\r\\n *  } else {\\r\\n *    this._latestReturnedValue = this._latestValue;\\r\\n *    return WrappedValue.wrap(this._latestValue); // this will force update\\r\\n *  }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class WrappedValue {\\r\\n    /** @deprecated from 5.3, use `unwrap()` instead - will switch to protected */\\r\\n    wrapped: any;\\r\\n    constructor(value: any);\\r\\n    /** Creates a wrapped value. */\\r\\n    static wrap(value: any): WrappedValue;\\r\\n    /**\\r\\n     * Returns the underlying value of a wrapped value.\\r\\n     * Returns the given `value` when it is not wrapped.\\r\\n     **/\\r\\n    static unwrap(value: any): any;\\r\\n    /** Returns true if `value` is a wrapped value. */\\r\\n    static isWrapped(value: any): value is WrappedValue;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Create trace scope.\\r\\n *\\r\\n * Scopes must be strictly nested and are analogous to stack frames, but\\r\\n * do not have to follow the stack frames. Instead it is recommended that they follow logical\\r\\n * nesting. You may want to use\\r\\n * [Event\\r\\n * Signatures](http://google.github.io/tracing-framework/instrumenting-code.html#custom-events)\\r\\n * as they are defined in WTF.\\r\\n *\\r\\n * Used to mark scope entry. The return value is used to leave the scope.\\r\\n *\\r\\n *     var myScope = wtfCreateScope('MyClass#myMethod(ascii someVal)');\\r\\n *\\r\\n *     someMethod() {\\r\\n *        var s = myScope('Foo'); // 'Foo' gets stored in tracing UI\\r\\n *        // DO SOME WORK HERE\\r\\n *        return wtfLeave(s, 123); // Return value 123\\r\\n *     }\\r\\n *\\r\\n * Note, adding try-finally block around the work to ensure that `wtfLeave` gets called can\\r\\n * negatively impact the performance of your application. For this reason we recommend that\\r\\n * you don't add them to ensure that `wtfLeave` gets called. In production `wtfLeave` is a noop and\\r\\n * so try-finally block has no value. When debugging perf issues, skipping `wtfLeave`, do to\\r\\n * exception, will produce incorrect trace, but presence of exception signifies logic error which\\r\\n * needs to be fixed before the app should be profiled. Add try-finally only when you expect that\\r\\n * an exception is expected during normal execution while profiling.\\r\\n *\\r\\n * @publicApi\\r\\n * @deprecated the Web Tracing Framework is no longer supported in Angular\\r\\n */\\r\\nexport declare const wtfCreateScope: (signature: string, flags?: any) => WtfScopeFn;\\r\\n\\r\\n/**\\r\\n * Ends a async time range operation.\\r\\n * [range] is the return value from [wtfStartTimeRange] Async ranges only work if WTF has been\\r\\n * enabled.\\r\\n * @publicApi\\r\\n * @deprecated the Web Tracing Framework is no longer supported in Angular\\r\\n */\\r\\nexport declare const wtfEndTimeRange: (range: any) => void;\\r\\n\\r\\n/**\\r\\n * Used to mark end of Scope.\\r\\n *\\r\\n * - `scope` to end.\\r\\n * - `returnValue` (optional) to be passed to the WTF.\\r\\n *\\r\\n * Returns the `returnValue for easy chaining.\\r\\n * @publicApi\\r\\n * @deprecated the Web Tracing Framework is no longer supported in Angular\\r\\n */\\r\\nexport declare const wtfLeave: <T>(scope: any, returnValue?: T) => T;\\r\\n\\r\\n\\r\\n/**\\r\\n * A scope function for the Web Tracing Framework (WTF).\\r\\n *\\r\\n * @publicApi\\r\\n * @deprecated the Web Tracing Framework is no longer supported in Angular\\r\\n */\\r\\nexport declare interface WtfScopeFn {\\r\\n    (arg0?: any, arg1?: any): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Used to mark Async start. Async are similar to scope but they don't have to be strictly nested.\\r\\n * The return value is used in the call to [endAsync]. Async ranges only work if WTF has been\\r\\n * enabled.\\r\\n *\\r\\n *     someMethod() {\\r\\n *        var s = wtfStartTimeRange('HTTP:GET', 'some.url');\\r\\n *        var future = new Future.delay(5).then((_) {\\r\\n *          wtfEndTimeRange(s);\\r\\n *        });\\r\\n *     }\\r\\n * @publicApi\\r\\n * @deprecated the Web Tracing Framework is no longer supported in Angular\\r\\n */\\r\\nexport declare const wtfStartTimeRange: (rangeType: string, action: string) => any;\\r\\n\\r\\n/**\\r\\n * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to\\r\\n * the DOM in a browser environment.\\r\\n */\\r\\nexport declare function ɵ_sanitizeHtml(defaultDoc: any, unsafeHtmlInput: string): string;\\r\\n\\r\\n/**\\r\\n * Sanitizes the given untrusted CSS style property value (i.e. not an entire object, just a single\\r\\n * value) and returns a value that is safe to use in a browser environment.\\r\\n */\\r\\nexport declare function ɵ_sanitizeStyle(value: string): string;\\r\\n\\r\\n\\r\\nexport declare function ɵ_sanitizeUrl(url: string): string;\\r\\n\\r\\nexport declare const ɵALLOW_MULTIPLE_PLATFORMS: InjectionToken<boolean>;\\r\\n\\r\\nexport declare function ɵallowSanitizationBypassAndThrow(value: any, type: ɵBypassType.Html): value is ɵSafeHtml;\\r\\n\\r\\nexport declare function ɵallowSanitizationBypassAndThrow(value: any, type: ɵBypassType.ResourceUrl): value is ɵSafeResourceUrl;\\r\\n\\r\\nexport declare function ɵallowSanitizationBypassAndThrow(value: any, type: ɵBypassType.Script): value is ɵSafeScript;\\r\\n\\r\\nexport declare function ɵallowSanitizationBypassAndThrow(value: any, type: ɵBypassType.Style): value is ɵSafeStyle;\\r\\n\\r\\nexport declare function ɵallowSanitizationBypassAndThrow(value: any, type: ɵBypassType.Url): value is ɵSafeUrl;\\r\\n\\r\\nexport declare function ɵallowSanitizationBypassAndThrow(value: any, type: ɵBypassType): boolean;\\r\\n\\r\\nexport declare function ɵand(flags: ɵNodeFlags, matchedQueriesDsl: null | [string | number, ɵQueryValueType][], ngContentIndex: null | number, childCount: number, handleEvent?: null | ElementHandleEventFn, templateFactory?: ViewDefinitionFactory): NodeDef;\\r\\n\\r\\n/** Checks whether a function is wrapped by a `forwardRef`. */\\r\\nexport declare function ɵangular_packages_core_core_a(fn: any): fn is () => any;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_b<T>(token: Type<T> | InjectionToken<T>): T;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_b<T>(token: Type<T> | InjectionToken<T>, flags?: InjectFlags): T | null;\\r\\n\\r\\nexport declare abstract class ɵangular_packages_core_core_ba {\\r\\n    abstract readonly view: ViewData;\\r\\n    abstract readonly nodeIndex: number | null;\\r\\n    abstract readonly injector: Injector;\\r\\n    abstract readonly component: any;\\r\\n    abstract readonly providerTokens: any[];\\r\\n    abstract readonly references: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    abstract readonly context: any;\\r\\n    abstract readonly componentRenderElement: any;\\r\\n    abstract readonly renderNode: any;\\r\\n    abstract logError(console: Console, ...values: any[]): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A change detection scheduler token for {@link RootContext}. This token is the default value used\\r\\n * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.\\r\\n */\\r\\nexport declare const ɵangular_packages_core_core_bb: InjectionToken<(fn: () => void) => void>;\\r\\n\\r\\n/**\\r\\n * Inject static attribute value into directive constructor.\\r\\n *\\r\\n * This method is used with `factory` functions which are generated as part of\\r\\n * `defineDirective` or `defineComponent`. The method retrieves the static value\\r\\n * of an attribute. (Dynamic attributes are not supported since they are not resolved\\r\\n *  at the time of injection and can change over time.)\\r\\n *\\r\\n * # Example\\r\\n * Given:\\r\\n * ```\\r\\n * @Component(...)\\r\\n * class MyComponent {\\r\\n *   constructor(@Attribute('title') title: string) { ... }\\r\\n * }\\r\\n * ```\\r\\n * When instantiated with\\r\\n * ```\\r\\n * <my-component title=\\\"Hello\\\"></my-component>\\r\\n * ```\\r\\n *\\r\\n * Then factory method generated is:\\r\\n * ```\\r\\n * MyComponent.ɵcmp = defineComponent({\\r\\n *   factory: () => new MyComponent(injectAttribute('title'))\\r\\n *   ...\\r\\n * })\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_bc(tNode: TNode, attrNameToInject: string): string | null;\\r\\n\\r\\nexport declare const ɵangular_packages_core_core_bd: InstructionState;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_be(): ɵangular_packages_core_core_bm;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_bf(): TNode;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_bg<T = any>(level?: number): T;\\r\\n\\r\\n/** Static data for an element  */\\r\\nexport declare interface ɵangular_packages_core_core_bh extends TNode {\\r\\n    /** Index in the data[] array */\\r\\n    index: number;\\r\\n    child: ɵangular_packages_core_core_bh | TTextNode | TElementContainerNode | TContainerNode | TProjectionNode | null;\\r\\n    /**\\r\\n     * Element nodes will have parents unless they are the first node of a component or\\r\\n     * embedded view (which means their parent is in a different view and must be\\r\\n     * retrieved using viewData[HOST_NODE]).\\r\\n     */\\r\\n    parent: ɵangular_packages_core_core_bh | TElementContainerNode | null;\\r\\n    tViews: null;\\r\\n    /**\\r\\n     * If this is a component TNode with projection, this will be an array of projected\\r\\n     * TNodes or native nodes (see TNode.projection for more info). If it's a regular element node or\\r\\n     * a component without projection, it will be null.\\r\\n     */\\r\\n    projection: (TNode | RNode[])[] | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Detects which sanitizer to use for URL property, based on tag name and prop name.\\r\\n *\\r\\n * The rules are based on the RESOURCE_URL context config from\\r\\n * `packages/compiler/src/schema/dom_security_schema.ts`.\\r\\n * If tag and prop names don't match Resource URL schema, use URL sanitizer.\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_bi(tag: string, prop: string): typeof ɵɵsanitizeResourceUrl;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_bj(name: string, props?: (...args: any[]) => any, parentClass?: any): any;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_bk(name: string, props?: (...args: any[]) => any, parentClass?: any, additionalProcessing?: (target: any, name: string, ...args: any[]) => void): any;\\r\\n\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_bl<T>(objWithPropertyToExtract: T): string;\\r\\n\\r\\n/**\\r\\n * `LView` stores all of the information needed to process the instructions as\\r\\n * they are invoked from the template. Each embedded view and component view has its\\r\\n * own `LView`. When processing a particular view, we set the `viewData` to that\\r\\n * `LView`. When that view is done processing, the `viewData` is set back to\\r\\n * whatever the original `viewData` was before (the parent `LView`).\\r\\n *\\r\\n * Keeping separate state for each view facilities view insertion / deletion, so we\\r\\n * don't have to edit the data array based on which views are present.\\r\\n */\\r\\nexport declare interface ɵangular_packages_core_core_bm extends Array<any> {\\r\\n    /**\\r\\n     * The host node for this LView instance, if this is a component view.\\r\\n     * If this is an embedded view, HOST will be null.\\r\\n     */\\r\\n    [HOST]: RElement | null;\\r\\n    /**\\r\\n     * The static data for this view. We need a reference to this so we can easily walk up the\\r\\n     * node tree in DI and get the TView.data array associated with a node (where the\\r\\n     * directive defs are stored).\\r\\n     */\\r\\n    readonly [TVIEW]: TView;\\r\\n    /** Flags for this view. See LViewFlags for more info. */\\r\\n    [FLAGS]: LViewFlags;\\r\\n    /**\\r\\n     * This may store an {@link LView} or {@link LContainer}.\\r\\n     *\\r\\n     * `LView` - The parent view. This is needed when we exit the view and must restore the previous\\r\\n     * LView. Without this, the render method would have to keep a stack of\\r\\n     * views as it is recursively rendering templates.\\r\\n     *\\r\\n     * `LContainer` - The current view is part of a container, and is an embedded view.\\r\\n     */\\r\\n    [PARENT]: ɵangular_packages_core_core_bm | LContainer | null;\\r\\n    /**\\r\\n     *\\r\\n     * The next sibling LView or LContainer.\\r\\n     *\\r\\n     * Allows us to propagate between sibling view states that aren't in the same\\r\\n     * container. Embedded views already have a node.next, but it is only set for\\r\\n     * views in the same container. We need a way to link component views and views\\r\\n     * across containers as well.\\r\\n     */\\r\\n    [NEXT]: ɵangular_packages_core_core_bm | LContainer | null;\\r\\n    /** Queries active for this view - nodes from a view are reported to those queries. */\\r\\n    [QUERIES]: LQueries | null;\\r\\n    /**\\r\\n     * Pointer to the `TViewNode` or `TElementNode` which represents the root of the view.\\r\\n     *\\r\\n     * If `TViewNode`, this is an embedded view of a container. We need this to be able to\\r\\n     * efficiently find the `LViewNode` when inserting the view into an anchor.\\r\\n     *\\r\\n     * If `TElementNode`, this is the LView of a component.\\r\\n     *\\r\\n     * If null, this is the root view of an application (root component is in this view).\\r\\n     */\\r\\n    [T_HOST]: TViewNode | ɵangular_packages_core_core_bh | null;\\r\\n    /**\\r\\n     * The binding index we should access next.\\r\\n     *\\r\\n     * This is stored so that bindings can continue where they left off\\r\\n     * if a view is left midway through processing bindings (e.g. if there is\\r\\n     * a setter that creates an embedded view, like in ngIf).\\r\\n     */\\r\\n    [BINDING_INDEX]: number;\\r\\n    /**\\r\\n     * When a view is destroyed, listeners need to be released and outputs need to be\\r\\n     * unsubscribed. This context array stores both listener functions wrapped with\\r\\n     * their context and output subscription instances for a particular view.\\r\\n     *\\r\\n     * These change per LView instance, so they cannot be stored on TView. Instead,\\r\\n     * TView.cleanup saves an index to the necessary context in this array.\\r\\n     */\\r\\n    [CLEANUP]: any[] | null;\\r\\n    /**\\r\\n     * - For dynamic views, this is the context with which to render the template (e.g.\\r\\n     *   `NgForContext`), or `{}` if not defined explicitly.\\r\\n     * - For root view of the root component the context contains change detection data.\\r\\n     * - For non-root components, the context is the component instance,\\r\\n     * - For inline views, the context is null.\\r\\n     */\\r\\n    [CONTEXT]: {} | RootContext | null;\\r\\n    /** An optional Module Injector to be used as fall back after Element Injectors are consulted. */\\r\\n    readonly [INJECTOR_2]: Injector | null;\\r\\n    /** Renderer to be used for this view. */\\r\\n    [RENDERER_FACTORY]: RendererFactory3;\\r\\n    /** Renderer to be used for this view. */\\r\\n    [RENDERER]: Renderer3;\\r\\n    /** An optional custom sanitizer. */\\r\\n    [SANITIZER]: Sanitizer | null;\\r\\n    /**\\r\\n     * Reference to the first LView or LContainer beneath this LView in\\r\\n     * the hierarchy.\\r\\n     *\\r\\n     * Necessary to store this so views can traverse through their nested views\\r\\n     * to remove listeners and call onDestroy callbacks.\\r\\n     */\\r\\n    [CHILD_HEAD]: ɵangular_packages_core_core_bm | LContainer | null;\\r\\n    /**\\r\\n     * The last LView or LContainer beneath this LView in the hierarchy.\\r\\n     *\\r\\n     * The tail allows us to quickly add a new state to the end of the view list\\r\\n     * without having to propagate starting from the first child.\\r\\n     */\\r\\n    [CHILD_TAIL]: ɵangular_packages_core_core_bm | LContainer | null;\\r\\n    /**\\r\\n     * View where this view's template was declared.\\r\\n     *\\r\\n     * Only applicable for dynamically created views. Will be null for inline/component views.\\r\\n     *\\r\\n     * The template for a dynamically created view may be declared in a different view than\\r\\n     * it is inserted. We already track the \\\"insertion view\\\" (view where the template was\\r\\n     * inserted) in LView[PARENT], but we also need access to the \\\"declaration view\\\"\\r\\n     * (view where the template was declared). Otherwise, we wouldn't be able to call the\\r\\n     * view's template function with the proper contexts. Context should be inherited from\\r\\n     * the declaration view tree, not the insertion view tree.\\r\\n     *\\r\\n     * Example (AppComponent template):\\r\\n     *\\r\\n     * <ng-template #foo></ng-template>       <-- declared here -->\\r\\n     * <some-comp [tpl]=\\\"foo\\\"></some-comp>    <-- inserted inside this component -->\\r\\n     *\\r\\n     * The <ng-template> above is declared in the AppComponent template, but it will be passed into\\r\\n     * SomeComp and inserted there. In this case, the declaration view would be the AppComponent,\\r\\n     * but the insertion view would be SomeComp. When we are removing views, we would want to\\r\\n     * traverse through the insertion view to clean up listeners. When we are calling the\\r\\n     * template function during change detection, we need the declaration view to get inherited\\r\\n     * context.\\r\\n     */\\r\\n    [DECLARATION_VIEW]: ɵangular_packages_core_core_bm | null;\\r\\n    /**\\r\\n     * A declaration point of embedded views (ones instantiated based on the content of a\\r\\n     * <ng-template>), null for other types of views.\\r\\n     *\\r\\n     * We need to track all embedded views created from a given declaration point so we can prepare\\r\\n     * query matches in a proper order (query matches are ordered based on their declaration point and\\r\\n     * _not_ the insertion point).\\r\\n     */\\r\\n    [DECLARATION_LCONTAINER]: LContainer | null;\\r\\n    /**\\r\\n     * More flags for this view. See PreOrderHookFlags for more info.\\r\\n     */\\r\\n    [PREORDER_HOOK_FLAGS]: PreOrderHookFlags;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Convince closure compiler that the wrapped function has no side-effects.\\r\\n *\\r\\n * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to\\r\\n * allow us to execute a function but have closure compiler mark the call as no-side-effects.\\r\\n * It is important that the return value for the `noSideEffects` function be assigned\\r\\n * to something which is retained otherwise the call to `noSideEffects` will be removed by closure\\r\\n * compiler.\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_bn(fn: () => void): string;\\r\\n\\r\\n/**\\r\\n * Returns the `RootContext` instance that is associated with\\r\\n * the application where the target is situated. It does this by walking the parent views until it\\r\\n * gets to the root view, then getting the context off of that.\\r\\n *\\r\\n * @param viewOrComponent the `LView` or component to get the root context for.\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_bo(viewOrComponent: ɵangular_packages_core_core_bm | {}): RootContext;\\r\\n\\r\\nexport declare class ɵangular_packages_core_core_c implements Injector {\\r\\n    get(token: any, notFoundValue?: any): any;\\r\\n}\\r\\n\\r\\nexport declare class ɵangular_packages_core_core_d implements ReflectiveInjector {\\r\\n    private static INJECTOR_KEY;\\r\\n    readonly parent: Injector | null;\\r\\n    keyIds: number[];\\r\\n    objs: any[];\\r\\n    /**\\r\\n     * Private\\r\\n     */\\r\\n    constructor(_providers: ResolvedReflectiveProvider[], _parent?: Injector);\\r\\n    get(token: any, notFoundValue?: any): any;\\r\\n    resolveAndCreateChild(providers: Provider[]): ReflectiveInjector;\\r\\n    createChildFromResolved(providers: ResolvedReflectiveProvider[]): ReflectiveInjector;\\r\\n    resolveAndInstantiate(provider: Provider): any;\\r\\n    instantiateResolved(provider: ResolvedReflectiveProvider): any;\\r\\n    getProviderAtIndex(index: number): ResolvedReflectiveProvider;\\r\\n    private _getMaxNumberOfObjects;\\r\\n    private _instantiateProvider;\\r\\n    private _instantiate;\\r\\n    private _getByReflectiveDependency;\\r\\n    private _getByKey;\\r\\n    private _getObjByKeyId;\\r\\n    readonly displayName: string;\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * `Dependency` is used by the framework to extend DI.\\r\\n * This is internal to Angular and should not be used directly.\\r\\n */\\r\\nexport declare class ɵangular_packages_core_core_e {\\r\\n    key: ReflectiveKey;\\r\\n    optional: boolean;\\r\\n    visibility: Self | SkipSelf | null;\\r\\n    constructor(key: ReflectiveKey, optional: boolean, visibility: Self | SkipSelf | null);\\r\\n    static fromKey(key: ReflectiveKey): ɵangular_packages_core_core_e;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Resolve a list of Providers.\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_f(providers: Provider[]): ResolvedReflectiveProvider[];\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_g(): string;\\r\\n\\r\\n/**\\r\\n * Creates an ElementRef given a node.\\r\\n *\\r\\n * @param ElementRefToken The ElementRef type\\r\\n * @param tNode The node for which you'd like an ElementRef\\r\\n * @param view The view to which the node belongs\\r\\n * @returns The ElementRef instance to use\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_h(ElementRefToken: typeof ElementRef, tNode: TNode, view: ɵangular_packages_core_core_bm): ElementRef;\\r\\n\\r\\n/**\\r\\n * Creates a TemplateRef and stores it on the injector.\\r\\n *\\r\\n * @param TemplateRefToken The TemplateRef type\\r\\n * @param ElementRefToken The ElementRef type\\r\\n * @param hostTNode The node on which a TemplateRef is requested\\r\\n * @param hostView The view to which the node belongs\\r\\n * @returns The TemplateRef instance or null if we can't create a TemplateRef on a given node type\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_i<T>(TemplateRefToken: typeof TemplateRef, ElementRefToken: typeof ElementRef, hostTNode: TNode, hostView: ɵangular_packages_core_core_bm): TemplateRef<T> | null;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_j(id: string): NgModuleFactory<any>;\\r\\n\\r\\nexport declare class ɵangular_packages_core_core_k {\\r\\n    readonly listeners: DebugEventListener[];\\r\\n    readonly parent: DebugElement | null;\\r\\n    readonly nativeNode: any;\\r\\n    private readonly _debugContext;\\r\\n    constructor(nativeNode: any, parent: DebugNode | null, _debugContext: ɵangular_packages_core_core_ba);\\r\\n    readonly injector: Injector;\\r\\n    readonly componentInstance: any;\\r\\n    readonly context: any;\\r\\n    readonly references: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    readonly providerTokens: any[];\\r\\n}\\r\\n\\r\\nexport declare class ɵangular_packages_core_core_l extends ɵangular_packages_core_core_k implements DebugElement {\\r\\n    readonly name: string;\\r\\n    readonly properties: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    readonly attributes: {\\r\\n        [key: string]: string | null;\\r\\n    };\\r\\n    readonly classes: {\\r\\n        [key: string]: boolean;\\r\\n    };\\r\\n    readonly styles: {\\r\\n        [key: string]: string | null;\\r\\n    };\\r\\n    readonly childNodes: DebugNode[];\\r\\n    readonly nativeElement: any;\\r\\n    constructor(nativeNode: any, parent: any, _debugContext: ɵangular_packages_core_core_ba);\\r\\n    addChild(child: DebugNode): void;\\r\\n    removeChild(child: DebugNode): void;\\r\\n    insertChildrenAfter(child: DebugNode, newChildren: DebugNode[]): void;\\r\\n    insertBefore(refChild: DebugNode, newChild: DebugNode): void;\\r\\n    query(predicate: Predicate<DebugElement>): DebugElement;\\r\\n    queryAll(predicate: Predicate<DebugElement>): DebugElement[];\\r\\n    queryAllNodes(predicate: Predicate<DebugNode>): DebugNode[];\\r\\n    readonly children: DebugElement[];\\r\\n    triggerEventHandler(eventName: string, eventObj: any): void;\\r\\n}\\r\\n\\r\\nexport declare class ɵangular_packages_core_core_m implements IterableDifferFactory {\\r\\n    constructor();\\r\\n    supports(obj: Object | null | undefined): boolean;\\r\\n    create<V>(trackByFn?: TrackByFunction<V>): DefaultIterableDiffer<V>;\\r\\n}\\r\\n\\r\\nexport declare class ɵangular_packages_core_core_n<K, V> implements KeyValueDifferFactory {\\r\\n    constructor();\\r\\n    supports(obj: any): boolean;\\r\\n    create<K, V>(): KeyValueDiffer<K, V>;\\r\\n}\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_o(): IterableDiffers;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_p(): KeyValueDiffers;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_q(locale?: string): string;\\r\\n\\r\\n/**\\r\\n * A built-in [dependency injection token](guide/glossary#di-token)\\r\\n * that is used to configure the root injector for bootstrapping.\\r\\n */\\r\\nexport declare const ɵangular_packages_core_core_r: StaticProvider[];\\r\\n\\r\\n/**\\r\\n * Schedule work at next available slot.\\r\\n *\\r\\n * In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped\\r\\n * using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.\\r\\n * This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.\\r\\n *\\r\\n * @param ngZone NgZone to use for scheduling.\\r\\n */\\r\\nexport declare function ɵangular_packages_core_core_s(ngZone: NgZone): (fn: () => void) => void;\\r\\n\\r\\n/**\\r\\n * True if WTF is enabled.\\r\\n */\\r\\nexport declare const ɵangular_packages_core_core_t: boolean;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_u(): boolean;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_v(signature: string, flags?: any): any;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_w<T>(scope: Scope): void;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_w<T>(scope: Scope, returnValue?: T): T;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_x(rangeType: string, action: string): Range;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_y(range: Range): void;\\r\\n\\r\\nexport declare function ɵangular_packages_core_core_z(checkIndex: number, flags: ɵNodeFlags, matchedQueriesDsl: [string | number, ɵQueryValueType][] | null, childCount: number, token: any, value: any, deps: ([ɵDepFlags, any] | any)[], bindings?: BindingDef[], outputs?: OutputDef[]): NodeDef;\\r\\n\\r\\n/**\\r\\n * Providers that will generate a random APP_ID_TOKEN.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ɵAPP_ID_RANDOM_PROVIDER: {\\r\\n    provide: InjectionToken<string>;\\r\\n    useFactory: typeof ɵangular_packages_core_core_g;\\r\\n    deps: any[];\\r\\n};\\r\\n\\r\\nexport declare const enum ɵArgumentType {\\r\\n    Inline = 0,\\r\\n    Dynamic = 1\\r\\n}\\r\\n\\r\\n/**\\r\\n * A set of marker values to be used in the attributes arrays. These markers indicate that some\\r\\n * items are not regular attributes and the processing should be adapted accordingly.\\r\\n */\\r\\nexport declare const enum ɵAttributeMarker {\\r\\n    /**\\r\\n     * Marker indicates that the following 3 values in the attributes array are:\\r\\n     * namespaceUri, attributeName, attributeValue\\r\\n     * in that order.\\r\\n     */\\r\\n    NamespaceURI = 0,\\r\\n    /**\\r\\n      * Signals class declaration.\\r\\n      *\\r\\n      * Each value following `Classes` designates a class name to include on the element.\\r\\n      * ## Example:\\r\\n      *\\r\\n      * Given:\\r\\n      * ```\\r\\n      * <div class=\\\"foo bar baz\\\">...<d/vi>\\r\\n      * ```\\r\\n      *\\r\\n      * the generated code is:\\r\\n      * ```\\r\\n      * var _c1 = [AttributeMarker.Classes, 'foo', 'bar', 'baz'];\\r\\n      * ```\\r\\n      */\\r\\n    Classes = 1,\\r\\n    /**\\r\\n     * Signals style declaration.\\r\\n     *\\r\\n     * Each pair of values following `Styles` designates a style name and value to include on the\\r\\n     * element.\\r\\n     * ## Example:\\r\\n     *\\r\\n     * Given:\\r\\n     * ```\\r\\n     * <div style=\\\"width:100px; height:200px; color:red\\\">...</div>\\r\\n     * ```\\r\\n     *\\r\\n     * the generated code is:\\r\\n     * ```\\r\\n     * var _c1 = [AttributeMarker.Styles, 'width', '100px', 'height'. '200px', 'color', 'red'];\\r\\n     * ```\\r\\n     */\\r\\n    Styles = 2,\\r\\n    /**\\r\\n     * Signals that the following attribute names were extracted from input or output bindings.\\r\\n     *\\r\\n     * For example, given the following HTML:\\r\\n     *\\r\\n     * ```\\r\\n     * <div moo=\\\"car\\\" [foo]=\\\"exp\\\" (bar)=\\\"doSth()\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * the generated code is:\\r\\n     *\\r\\n     * ```\\r\\n     * var _c1 = ['moo', 'car', AttributeMarker.Bindings, 'foo', 'bar'];\\r\\n     * ```\\r\\n     */\\r\\n    Bindings = 3,\\r\\n    /**\\r\\n     * Signals that the following attribute names were hoisted from an inline-template declaration.\\r\\n     *\\r\\n     * For example, given the following HTML:\\r\\n     *\\r\\n     * ```\\r\\n     * <div *ngFor=\\\"let value of values; trackBy:trackBy\\\" dirA [dirB]=\\\"value\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * the generated code for the `template()` instruction would include:\\r\\n     *\\r\\n     * ```\\r\\n     * ['dirA', '', AttributeMarker.Bindings, 'dirB', AttributeMarker.Template, 'ngFor', 'ngForOf',\\r\\n     * 'ngForTrackBy', 'let-value']\\r\\n     * ```\\r\\n     *\\r\\n     * while the generated code for the `element()` instruction inside the template function would\\r\\n     * include:\\r\\n     *\\r\\n     * ```\\r\\n     * ['dirA', '', AttributeMarker.Bindings, 'dirB']\\r\\n     * ```\\r\\n     */\\r\\n    Template = 4,\\r\\n    /**\\r\\n     * Signals that the following attribute is `ngProjectAs` and its value is a parsed `CssSelector`.\\r\\n     *\\r\\n     * For example, given the following HTML:\\r\\n     *\\r\\n     * ```\\r\\n     * <h1 attr=\\\"value\\\" ngProjectAs=\\\"[title]\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * the generated code for the `element()` instruction would include:\\r\\n     *\\r\\n     * ```\\r\\n     * ['attr', 'value', AttributeMarker.ProjectAs, ['', 'title', '']]\\r\\n     * ```\\r\\n     */\\r\\n    ProjectAs = 5,\\r\\n    /**\\r\\n     * Signals that the following attribute will be translated by runtime i18n\\r\\n     *\\r\\n     * For example, given the following HTML:\\r\\n     *\\r\\n     * ```\\r\\n     * <div moo=\\\"car\\\" foo=\\\"value\\\" i18n-foo [bar]=\\\"binding\\\" i18n-bar>\\r\\n     * ```\\r\\n     *\\r\\n     * the generated code is:\\r\\n     *\\r\\n     * ```\\r\\n     * var _c1 = ['moo', 'car', AttributeMarker.I18n, 'foo', 'bar'];\\r\\n     */\\r\\n    I18n = 6\\r\\n}\\r\\n\\r\\nexport declare const enum ɵBindingFlags {\\r\\n    TypeElementAttribute = 1,\\r\\n    TypeElementClass = 2,\\r\\n    TypeElementStyle = 4,\\r\\n    TypeProperty = 8,\\r\\n    SyntheticProperty = 16,\\r\\n    SyntheticHostProperty = 32,\\r\\n    CatSyntheticProperty = 48,\\r\\n    Types = 15\\r\\n}\\r\\n\\r\\n/**\\r\\n * Mark `html` string as trusted.\\r\\n *\\r\\n * This function wraps the trusted string in `String` and brands it in a way which makes it\\r\\n * recognizable to {@link htmlSanitizer} to be trusted implicitly.\\r\\n *\\r\\n * @param trustedHtml `html` string which needs to be implicitly trusted.\\r\\n * @returns a `html` which has been branded to be implicitly trusted.\\r\\n */\\r\\nexport declare function ɵbypassSanitizationTrustHtml(trustedHtml: string): ɵSafeHtml;\\r\\n\\r\\n/**\\r\\n * Mark `url` string as trusted.\\r\\n *\\r\\n * This function wraps the trusted string in `String` and brands it in a way which makes it\\r\\n * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.\\r\\n *\\r\\n * @param trustedResourceUrl `url` string which needs to be implicitly trusted.\\r\\n * @returns a `url` which has been branded to be implicitly trusted.\\r\\n */\\r\\nexport declare function ɵbypassSanitizationTrustResourceUrl(trustedResourceUrl: string): ɵSafeResourceUrl;\\r\\n\\r\\n/**\\r\\n * Mark `script` string as trusted.\\r\\n *\\r\\n * This function wraps the trusted string in `String` and brands it in a way which makes it\\r\\n * recognizable to {@link scriptSanitizer} to be trusted implicitly.\\r\\n *\\r\\n * @param trustedScript `script` string which needs to be implicitly trusted.\\r\\n * @returns a `script` which has been branded to be implicitly trusted.\\r\\n */\\r\\nexport declare function ɵbypassSanitizationTrustScript(trustedScript: string): ɵSafeScript;\\r\\n\\r\\n/**\\r\\n * Mark `style` string as trusted.\\r\\n *\\r\\n * This function wraps the trusted string in `String` and brands it in a way which makes it\\r\\n * recognizable to {@link styleSanitizer} to be trusted implicitly.\\r\\n *\\r\\n * @param trustedStyle `style` string which needs to be implicitly trusted.\\r\\n * @returns a `style` hich has been branded to be implicitly trusted.\\r\\n */\\r\\nexport declare function ɵbypassSanitizationTrustStyle(trustedStyle: string): ɵSafeStyle;\\r\\n\\r\\n/**\\r\\n * Mark `url` string as trusted.\\r\\n *\\r\\n * This function wraps the trusted string in `String` and brands it in a way which makes it\\r\\n * recognizable to {@link urlSanitizer} to be trusted implicitly.\\r\\n *\\r\\n * @param trustedUrl `url` string which needs to be implicitly trusted.\\r\\n * @returns a `url`  which has been branded to be implicitly trusted.\\r\\n */\\r\\nexport declare function ɵbypassSanitizationTrustUrl(trustedUrl: string): ɵSafeUrl;\\r\\n\\r\\n\\r\\nexport declare const enum ɵBypassType {\\r\\n    Url = \\\"URL\\\",\\r\\n    Html = \\\"HTML\\\",\\r\\n    ResourceUrl = \\\"ResourceURL\\\",\\r\\n    Script = \\\"Script\\\",\\r\\n    Style = \\\"Style\\\"\\r\\n}\\r\\n\\r\\nexport declare function ɵccf(selector: string, componentType: Type<any>, viewDefFactory: ViewDefinitionFactory, inputs: {\\r\\n    [propName: string]: string;\\r\\n} | null, outputs: {\\r\\n    [propName: string]: string;\\r\\n}, ngContentSelectors: string[]): ComponentFactory<any>;\\r\\n\\r\\n/**\\r\\n * Defines the possible states of the default change detector.\\r\\n * @see `ChangeDetectorRef`\\r\\n */\\r\\nexport declare enum ɵChangeDetectorStatus {\\r\\n    /**\\r\\n     * A state in which, after calling `detectChanges()`, the change detector\\r\\n     * state becomes `Checked`, and must be explicitly invoked or reactivated.\\r\\n     */\\r\\n    CheckOnce = 0,\\r\\n    /**\\r\\n     * A state in which change detection is skipped until the change detector mode\\r\\n     * becomes `CheckOnce`.\\r\\n     */\\r\\n    Checked = 1,\\r\\n    /**\\r\\n     * A state in which change detection continues automatically until explicitly\\r\\n     * deactivated.\\r\\n     */\\r\\n    CheckAlways = 2,\\r\\n    /**\\r\\n     * A state in which a change detector sub tree is not a part of the main tree and\\r\\n     * should be skipped.\\r\\n     */\\r\\n    Detached = 3,\\r\\n    /**\\r\\n     * Indicates that the change detector encountered an error checking a binding\\r\\n     * or calling a directive lifecycle method and is now in an inconsistent state. Change\\r\\n     * detectors in this state do not detect changes.\\r\\n     */\\r\\n    Errored = 4,\\r\\n    /**\\r\\n     * Indicates that the change detector has been destroyed.\\r\\n     */\\r\\n    Destroyed = 5\\r\\n}\\r\\n\\r\\nexport declare function ɵclearOverrides(): void;\\r\\n\\r\\nexport declare function ɵclearResolutionOfComponentResourcesQueue(): Map<Type<any>, Component>;\\r\\n\\r\\nexport declare function ɵcmf(ngModuleType: Type<any>, bootstrapComponents: Type<any>[], defFactory: NgModuleDefinitionFactory): NgModuleFactory<any>;\\r\\n\\r\\nexport declare class ɵCodegenComponentFactoryResolver implements ComponentFactoryResolver {\\r\\n    private _parent;\\r\\n    private _ngModule;\\r\\n    private _factories;\\r\\n    constructor(factories: ComponentFactory<any>[], _parent: ComponentFactoryResolver, _ngModule: NgModuleRef<any>);\\r\\n    resolveComponentFactory<T>(component: {\\r\\n        new (...args: any[]): T;\\r\\n    }): ComponentFactory<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Compile an Angular component according to its decorator metadata, and patch the resulting\\r\\n * component def (ɵcmp) onto the component type.\\r\\n *\\r\\n * Compilation may be asynchronous (due to the need to resolve URLs for the component template or\\r\\n * other resources, for example). In the event that compilation is not immediate, `compileComponent`\\r\\n * will enqueue resource resolution into a global queue and will fail to return the `ɵcmp`\\r\\n * until the global queue has been resolved with a call to `resolveComponentResources`.\\r\\n */\\r\\nexport declare function ɵcompileComponent(type: Type<any>, metadata: Component): void;\\r\\n\\r\\n/**\\r\\n * Compile an Angular directive according to its decorator metadata, and patch the resulting\\r\\n * directive def onto the component type.\\r\\n *\\r\\n * In the event that compilation is not immediate, `compileDirective` will return a `Promise` which\\r\\n * will resolve when compilation completes and the directive becomes usable.\\r\\n */\\r\\nexport declare function ɵcompileDirective(type: Type<any>, directive: Directive | null): void;\\r\\n\\r\\n/**\\r\\n * Compiles a module in JIT mode.\\r\\n *\\r\\n * This function automatically gets called when a class has a `@NgModule` decorator.\\r\\n */\\r\\nexport declare function ɵcompileNgModule(moduleType: Type<any>, ngModule?: NgModule): void;\\r\\n\\r\\n/**\\r\\n * Compiles and adds the `ɵmod` and `ɵinj` properties to the module class.\\r\\n *\\r\\n * It's possible to compile a module via this API which will allow duplicate declarations in its\\r\\n * root.\\r\\n */\\r\\nexport declare function ɵcompileNgModuleDefs(moduleType: ɵNgModuleType, ngModule: NgModule, allowDuplicateDeclarationsInRoot?: boolean): void;\\r\\n\\r\\nexport declare function ɵcompileNgModuleFactory__POST_R3__<M>(injector: Injector, options: CompilerOptions, moduleType: Type<M>): Promise<NgModuleFactory<M>>;\\r\\n\\r\\nexport declare function ɵcompilePipe(type: Type<any>, meta: Pipe): void;\\r\\n\\r\\nexport declare const ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__: <T>(moduleType: Type<T>) => Promise<ModuleWithComponentFactories<T>>;\\r\\n\\r\\nexport declare const ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__: <T>(moduleType: Type<T>) => ModuleWithComponentFactories<T>;\\r\\n\\r\\nexport declare const ɵCompiler_compileModuleAsync__POST_R3__: <T>(moduleType: Type<T>) => Promise<NgModuleFactory<T>>;\\r\\n\\r\\nexport declare const ɵCompiler_compileModuleSync__POST_R3__: <T>(moduleType: Type<T>) => NgModuleFactory<T>;\\r\\n\\r\\n/**\\r\\n * Runtime link information for Components.\\r\\n *\\r\\n * This is internal data structure used by the render to link\\r\\n * components into templates.\\r\\n *\\r\\n * NOTE: Always use `defineComponent` function to create this object,\\r\\n * never create the object directly since the shape of this object\\r\\n * can change between versions.\\r\\n *\\r\\n * See: {@link defineComponent}\\r\\n */\\r\\nexport declare interface ɵComponentDef<T> extends ɵDirectiveDef<T> {\\r\\n    /**\\r\\n     * Runtime unique component ID.\\r\\n     */\\r\\n    readonly id: string;\\r\\n    /**\\r\\n     * The View template of the component.\\r\\n     */\\r\\n    readonly template: ComponentTemplate<T>;\\r\\n    /** Constants associated with the component's view. */\\r\\n    readonly consts: TAttributes[] | null;\\r\\n    /**\\r\\n     * An array of `ngContent[selector]` values that were found in the template.\\r\\n     */\\r\\n    readonly ngContentSelectors?: string[];\\r\\n    /**\\r\\n     * A set of styles that the component needs to be present for component to render correctly.\\r\\n     */\\r\\n    readonly styles: string[];\\r\\n    /**\\r\\n     * The number of nodes, local refs, and pipes in this component template.\\r\\n     *\\r\\n     * Used to calculate the length of the component's LView array, so we\\r\\n     * can pre-fill the array and set the binding start index.\\r\\n     */\\r\\n    readonly decls: number;\\r\\n    /**\\r\\n     * The number of bindings in this component template (including pure fn bindings).\\r\\n     *\\r\\n     * Used to calculate the length of the component's LView array, so we\\r\\n     * can pre-fill the array and set the host binding start index.\\r\\n     */\\r\\n    readonly vars: number;\\r\\n    /**\\r\\n     * Query-related instructions for a component.\\r\\n     */\\r\\n    viewQuery: ViewQueriesFunction<T> | null;\\r\\n    /**\\r\\n     * The view encapsulation type, which determines how styles are applied to\\r\\n     * DOM elements. One of\\r\\n     * - `Emulated` (default): Emulate native scoping of styles.\\r\\n     * - `Native`: Use the native encapsulation mechanism of the renderer.\\r\\n     * - `ShadowDom`: Use modern [ShadowDOM](https://w3c.github.io/webcomponents/spec/shadow/) and\\r\\n     *   create a ShadowRoot for component's host element.\\r\\n     * - `None`: Do not provide any template or style encapsulation.\\r\\n     */\\r\\n    readonly encapsulation: ViewEncapsulation;\\r\\n    /**\\r\\n     * Defines arbitrary developer-defined data to be stored on a renderer instance.\\r\\n     * This is useful for renderers that delegate to other renderers.\\r\\n     */\\r\\n    readonly data: {\\r\\n        [kind: string]: any;\\r\\n    };\\r\\n    /** Whether or not this component's ChangeDetectionStrategy is OnPush */\\r\\n    readonly onPush: boolean;\\r\\n    /**\\r\\n     * Registry of directives and components that may be found in this view.\\r\\n     *\\r\\n     * The property is either an array of `DirectiveDef`s or a function which returns the array of\\r\\n     * `DirectiveDef`s. The function is necessary to be able to support forward declarations.\\r\\n     */\\r\\n    directiveDefs: DirectiveDefListOrFactory | null;\\r\\n    /**\\r\\n     * Registry of pipes that may be found in this view.\\r\\n     *\\r\\n     * The property is either an array of `PipeDefs`s or a function which returns the array of\\r\\n     * `PipeDefs`s. The function is necessary to be able to support forward declarations.\\r\\n     */\\r\\n    pipeDefs: PipeDefListOrFactory | null;\\r\\n    /**\\r\\n     * The set of schemas that declare elements to be allowed in the component's template.\\r\\n     */\\r\\n    schemas: SchemaMetadata[] | null;\\r\\n    /**\\r\\n     * Ivy runtime uses this place to store the computed tView for the component. This gets filled on\\r\\n     * the first run of component.\\r\\n     */\\r\\n    tView: TView | null;\\r\\n    /**\\r\\n     * Used to store the result of `noSideEffects` function so that it is not removed by closure\\r\\n     * compiler. The property should never be read.\\r\\n     */\\r\\n    readonly _?: never;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A subclass of `Type` which has a static `ɵcmp`:`ComponentDef` field making it\\r\\n * consumable for rendering.\\r\\n */\\r\\nexport declare interface ɵComponentType<T> extends Type<T> {\\r\\n    ɵcmp: never;\\r\\n}\\r\\n\\r\\n\\r\\nexport declare class ɵConsole {\\r\\n    log(message: string): void;\\r\\n    warn(message: string): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Create a new `Injector` which is configured using a `defType` of `InjectorType<any>`s.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵcreateInjector(defType: any, parent?: Injector | null, additionalProviders?: StaticProvider[] | null, name?: string): Injector;\\r\\n\\r\\nexport declare function ɵcrt(values: {\\r\\n    styles: (string | any[])[];\\r\\n    encapsulation: ViewEncapsulation;\\r\\n    data: {\\r\\n        [kind: string]: any[];\\r\\n    };\\r\\n}): RendererType2;\\r\\n\\r\\n/**\\r\\n * A list of CssSelectors.\\r\\n *\\r\\n * A directive or component can have multiple selectors. This type is used for\\r\\n * directive defs so any of the selectors in the list will match that directive.\\r\\n *\\r\\n * Original: 'form, [ngForm]'\\r\\n * Parsed: [['form'], ['', 'ngForm', '']]\\r\\n */\\r\\nexport declare type ɵCssSelectorList = CssSelector[];\\r\\n\\r\\n/**\\r\\n * The locale id that the application is using by default (for translations and ICU expressions).\\r\\n */\\r\\nexport declare const ɵDEFAULT_LOCALE_ID = \\\"en-US\\\";\\r\\n\\r\\nexport declare const ɵdefaultIterableDiffers: IterableDiffers;\\r\\n\\r\\nexport declare const ɵdefaultKeyValueDiffers: KeyValueDiffers;\\r\\n\\r\\n/**\\r\\n * Bitmask for DI flags\\r\\n */\\r\\nexport declare const enum ɵDepFlags {\\r\\n    None = 0,\\r\\n    SkipSelf = 1,\\r\\n    Optional = 2,\\r\\n    Self = 4,\\r\\n    Value = 8\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Synchronously perform change detection on a component (and possibly its sub-components).\\r\\n *\\r\\n * This function triggers change detection in a synchronous way on a component. There should\\r\\n * be very little reason to call this function directly since a preferred way to do change\\r\\n * detection is to {@link markDirty} the component and wait for the scheduler to call this method\\r\\n * at some future point in time. This is because a single user action often results in many\\r\\n * components being invalidated and calling change detection on each component synchronously\\r\\n * would be inefficient. It is better to wait until all components are marked as dirty and\\r\\n * then perform single change detection across all of the components\\r\\n *\\r\\n * @param component The component which the change detection should be performed on.\\r\\n */\\r\\nexport declare function ɵdetectChanges<T>(component: T): void;\\r\\n\\r\\n\\r\\nexport declare function ɵdevModeEqual(a: any, b: any): boolean;\\r\\n\\r\\nexport declare function ɵdid(checkIndex: number, flags: ɵNodeFlags, matchedQueries: null | [string | number, ɵQueryValueType][], childCount: number, ctor: any, deps: ([ɵDepFlags, any] | any)[], props?: null | {\\r\\n    [name: string]: [number, string];\\r\\n}, outputs?: null | {\\r\\n    [name: string]: string;\\r\\n}): NodeDef;\\r\\n\\r\\n/**\\r\\n * Runtime link information for Directives.\\r\\n *\\r\\n * This is internal data structure used by the render to link\\r\\n * directives into templates.\\r\\n *\\r\\n * NOTE: Always use `defineDirective` function to create this object,\\r\\n * never create the object directly since the shape of this object\\r\\n * can change between versions.\\r\\n *\\r\\n * @param Selector type metadata specifying the selector of the directive or component\\r\\n *\\r\\n * See: {@link defineDirective}\\r\\n */\\r\\nexport declare interface ɵDirectiveDef<T> extends ɵɵBaseDef<T> {\\r\\n    /** Token representing the directive. Used by DI. */\\r\\n    type: Type<T>;\\r\\n    /** Function that resolves providers and publishes them into the DI system. */\\r\\n    providersResolver: (<U extends T>(def: ɵDirectiveDef<U>, processProvidersFn?: ProcessProvidersFunction) => void) | null;\\r\\n    /** The selectors that will be used to match nodes to this directive. */\\r\\n    readonly selectors: ɵCssSelectorList;\\r\\n    /**\\r\\n     * Name under which the directive is exported (for use with local references in template)\\r\\n     */\\r\\n    readonly exportAs: string[] | null;\\r\\n    /**\\r\\n     * Factory function used to create a new directive instance. Will be null initially.\\r\\n     * Populated when the factory is first requested by directive instantiation logic.\\r\\n     */\\r\\n    factory: FactoryFn<T> | null;\\r\\n    onChanges: (() => void) | null;\\r\\n    onInit: (() => void) | null;\\r\\n    doCheck: (() => void) | null;\\r\\n    afterContentInit: (() => void) | null;\\r\\n    afterContentChecked: (() => void) | null;\\r\\n    afterViewInit: (() => void) | null;\\r\\n    afterViewChecked: (() => void) | null;\\r\\n    onDestroy: (() => void) | null;\\r\\n    /**\\r\\n     * The features applied to this directive\\r\\n     */\\r\\n    readonly features: DirectiveDefFeature[] | null;\\r\\n    setInput: (<U extends T>(this: ɵDirectiveDef<U>, instance: U, value: any, publicName: string, privateName: string) => void) | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A subclass of `Type` which has a static `ɵdir`:`DirectiveDef` field making it\\r\\n * consumable for rendering.\\r\\n */\\r\\nexport declare interface ɵDirectiveType<T> extends Type<T> {\\r\\n    ɵdir: never;\\r\\n    ɵfac: () => T;\\r\\n}\\r\\n\\r\\nexport declare function ɵeld(checkIndex: number, flags: ɵNodeFlags, matchedQueriesDsl: null | [string | number, ɵQueryValueType][], ngContentIndex: null | number, childCount: number, namespaceAndName: string | null, fixedAttrs?: null | [string, string][], bindings?: null | [ɵBindingFlags, string, string | SecurityContext | null][], outputs?: null | ([string, string])[], handleEvent?: null | ElementHandleEventFn, componentView?: null | ViewDefinitionFactory, componentRendererType?: RendererType2 | null): NodeDef;\\r\\n\\r\\nexport declare const ɵEMPTY_ARRAY: any[];\\r\\n\\r\\nexport declare const ɵEMPTY_MAP: {\\r\\n    [key: string]: any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Finds the locale data for a given locale.\\r\\n *\\r\\n * @param locale The locale code.\\r\\n * @returns The locale data.\\r\\n * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)\\r\\n */\\r\\nexport declare function ɵfindLocaleData(locale: string): any;\\r\\n\\r\\n/**\\r\\n * Loops over queued module definitions, if a given module definition has all of its\\r\\n * declarations resolved, it dequeues that module definition and sets the scope on\\r\\n * its declarations.\\r\\n */\\r\\nexport declare function ɵflushModuleScopingQueueAsMuchAsPossible(): void;\\r\\n\\r\\nexport declare function ɵgetComponentViewDefinitionFactory(componentFactory: ComponentFactory<any>): ViewDefinitionFactory;\\r\\n\\r\\nexport declare function ɵgetDebugNode__POST_R3__(nativeNode: Element): DebugElement__POST_R3__;\\r\\n\\r\\nexport declare function ɵgetDebugNode__POST_R3__(nativeNode: Node): DebugNode__POST_R3__;\\r\\n\\r\\nexport declare function ɵgetDebugNode__POST_R3__(nativeNode: null): null;\\r\\n\\r\\n/**\\r\\n * Retrieves directives associated with a given DOM host element.\\r\\n *\\r\\n * @param target A DOM element, component or directive instance.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵgetDirectives(target: {}): Array<{}>;\\r\\n\\r\\n/**\\r\\n * Retrieve the host element of the component.\\r\\n *\\r\\n * Use this function to retrieve the host element of the component. The host\\r\\n * element is the element which the component is associated with.\\r\\n *\\r\\n * @param directive Component or Directive for which the host element should be retrieved.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵgetHostElement<T>(directive: T): Element;\\r\\n\\r\\n/**\\r\\n * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading\\r\\n * inherited value.\\r\\n *\\r\\n * @param type A type which may have its own (non-inherited) `ɵprov`.\\r\\n */\\r\\nexport declare function ɵgetInjectableDef<T>(type: any): ɵɵInjectableDef<T> | null;\\r\\n\\r\\n/** Returns the matching `LContext` data for a given DOM node, directive or component instance.\\r\\n *\\r\\n * This function will examine the provided DOM element, component, or directive instance\\\\'s\\r\\n * monkey-patched property to derive the `LContext` data. Once called then the monkey-patched\\r\\n * value will be that of the newly created `LContext`.\\r\\n *\\r\\n * If the monkey-patched value is the `LView` instance then the context value for that\\r\\n * target will be created and the monkey-patch reference will be updated. Therefore when this\\r\\n * function is called it may mutate the provided element\\\\'s, component\\\\'s or any of the associated\\r\\n * directive\\\\'s monkey-patch values.\\r\\n *\\r\\n * If the monkey-patch value is not detected then the code will walk up the DOM until an element\\r\\n * is found which contains a monkey-patch reference. When that occurs then the provided element\\r\\n * will be updated with a new context (which is then returned). If the monkey-patch value is not\\r\\n * detected for a component/directive instance then it will throw an error (all components and\\r\\n * directives should be automatically monkey-patched by ivy).\\r\\n *\\r\\n * @param target Component, Directive or DOM Node.\\r\\n */\\r\\nexport declare function ɵgetLContext(target: any): ɵLContext | null;\\r\\n\\r\\n\\r\\n/**\\r\\n * Retrieves the plural function used by ICU expressions to determine the plural case to use\\r\\n * for a given locale.\\r\\n * @param locale A locale code for the locale format rules to use.\\r\\n * @returns The plural function for the locale.\\r\\n * @see `NgPlural`\\r\\n * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)\\r\\n */\\r\\nexport declare function ɵgetLocalePluralCase(locale: string): (value: number) => number;\\r\\n\\r\\nexport declare function ɵgetModuleFactory__POST_R3__(id: string): NgModuleFactory<any>;\\r\\n\\r\\nexport declare function ɵgetSanitizationBypassType(value: any): ɵBypassType | null;\\r\\n\\r\\nexport declare type ɵGetterFn = (obj: any) => any;\\r\\n\\r\\n\\r\\nexport declare const ɵglobal: any;\\r\\n\\r\\nexport declare function ɵinitServicesIfNeeded(): void;\\r\\n\\r\\nexport declare function ɵINJECTOR_IMPL__POST_R3__(providers: StaticProvider[], parent: Injector | undefined, name: string): Injector;\\r\\n\\r\\n/**\\r\\n * An internal token whose presence in an injector indicates that the injector should treat itself\\r\\n * as a root scoped injector when processing requests for unknown tokens which may indicate\\r\\n * they are provided in the root scope.\\r\\n */\\r\\nexport declare const ɵINJECTOR_SCOPE: InjectionToken<\\\"root\\\" | \\\"platform\\\" | null>;\\r\\n\\r\\nexport declare function ɵinlineInterpolate(valueCount: number, c0: string, a1: any, c1: string, a2?: any, c2?: string, a3?: any, c3?: string, a4?: any, c4?: string, a5?: any, c5?: string, a6?: any, c6?: string, a7?: any, c7?: string, a8?: any, c8?: string, a9?: any, c9?: string): string;\\r\\n\\r\\nexport declare function ɵinterpolate(valueCount: number, constAndInterp: string[]): string;\\r\\n\\r\\nexport declare function ɵisBoundToModule__POST_R3__<C>(cf: ComponentFactory<C>): boolean;\\r\\n\\r\\n/**\\r\\n * Reports whether a given strategy is currently the default for change detection.\\r\\n * @param changeDetectionStrategy The strategy to check.\\r\\n * @returns True if the given strategy is the current default, false otherwise.\\r\\n * @see `ChangeDetectorStatus`\\r\\n * @see `ChangeDetectorRef`\\r\\n */\\r\\nexport declare function ɵisDefaultChangeDetectionStrategy(changeDetectionStrategy: ChangeDetectionStrategy): boolean;\\r\\n\\r\\nexport declare function ɵisListLikeIterable(obj: any): boolean;\\r\\n\\r\\n/**\\r\\n * Determine if the argument is an Observable\\r\\n */\\r\\nexport declare function ɵisObservable(obj: any | Observable<any>): obj is Observable<any>;\\r\\n\\r\\n/**\\r\\n * Determine if the argument is shaped like a Promise\\r\\n */\\r\\nexport declare function ɵisPromise(obj: any): obj is Promise<any>;\\r\\n\\r\\nexport declare const ɵivyEnabled = false;\\r\\n\\r\\n/**\\r\\n * The internal view context which is specific to a given DOM element, directive or\\r\\n * component instance. Each value in here (besides the LView and element node details)\\r\\n * can be present, null or undefined. If undefined then it implies the value has not been\\r\\n * looked up yet, otherwise, if null, then a lookup was executed and nothing was found.\\r\\n *\\r\\n * Each value will get filled when the respective value is examined within the getContext\\r\\n * function. The component, element and each directive instance will share the same instance\\r\\n * of the context.\\r\\n */\\r\\nexport declare interface ɵLContext {\\r\\n    /**\\r\\n     * The component's parent view data.\\r\\n     */\\r\\n    lView: ɵangular_packages_core_core_bm;\\r\\n    /**\\r\\n     * The index instance of the node.\\r\\n     */\\r\\n    nodeIndex: number;\\r\\n    /**\\r\\n     * The instance of the DOM node that is attached to the lNode.\\r\\n     */\\r\\n    native: RNode;\\r\\n    /**\\r\\n     * The instance of the Component node.\\r\\n     */\\r\\n    component: {} | null | undefined;\\r\\n    /**\\r\\n     * The list of active directives that exist on this element.\\r\\n     */\\r\\n    directives: any[] | null | undefined;\\r\\n    /**\\r\\n     * The map of local references (local reference name => element or directive instance) that exist\\r\\n     * on this element.\\r\\n     */\\r\\n    localRefs: {\\r\\n        [key: string]: any;\\r\\n    } | null | undefined;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Used to enable lifecycle hooks on the root component.\\r\\n *\\r\\n * Include this feature when calling `renderComponent` if the root component\\r\\n * you are rendering has lifecycle hooks defined. Otherwise, the hooks won't\\r\\n * be called properly.\\r\\n *\\r\\n * Example:\\r\\n *\\r\\n * ```\\r\\n * renderComponent(AppComponent, {features: [RootLifecycleHooks]});\\r\\n * ```\\r\\n */\\r\\nexport declare function ɵLifecycleHooksFeature(component: any, def: ɵComponentDef<any>): void;\\r\\n\\r\\n/**\\r\\n * This const is used to store the locale data registered with `registerLocaleData`\\r\\n */\\r\\nexport declare const ɵLOCALE_DATA: {\\r\\n    [localeId: string]: any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Index of each type of locale data from the locale data array\\r\\n */\\r\\nexport declare enum ɵLocaleDataIndex {\\r\\n    LocaleId = 0,\\r\\n    DayPeriodsFormat = 1,\\r\\n    DayPeriodsStandalone = 2,\\r\\n    DaysFormat = 3,\\r\\n    DaysStandalone = 4,\\r\\n    MonthsFormat = 5,\\r\\n    MonthsStandalone = 6,\\r\\n    Eras = 7,\\r\\n    FirstDayOfWeek = 8,\\r\\n    WeekendRange = 9,\\r\\n    DateFormat = 10,\\r\\n    TimeFormat = 11,\\r\\n    DateTimeFormat = 12,\\r\\n    NumberSymbols = 13,\\r\\n    NumberFormats = 14,\\r\\n    CurrencySymbol = 15,\\r\\n    CurrencyName = 16,\\r\\n    Currencies = 17,\\r\\n    PluralCase = 18,\\r\\n    ExtraData = 19\\r\\n}\\r\\n\\r\\n\\r\\nexport declare function ɵlooseIdentical(a: any, b: any): boolean;\\r\\n\\r\\n/**\\r\\n * @suppress {globalThis}\\r\\n */\\r\\nexport declare function ɵmakeDecorator<T>(name: string, props?: (...args: any[]) => any, parentClass?: any, additionalProcessing?: (type: Type<T>) => void, typeFn?: (type: Type<T>, ...args: any[]) => void): {\\r\\n    new (...args: any[]): any;\\r\\n    (...args: any[]): any;\\r\\n    (...args: any[]): (cls: any) => any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Mark the component as dirty (needing change detection).\\r\\n *\\r\\n * Marking a component dirty will schedule a change detection on this\\r\\n * component at some point in the future. Marking an already dirty\\r\\n * component as dirty is a noop. Only one outstanding change detection\\r\\n * can be scheduled per component tree. (Two components bootstrapped with\\r\\n * separate `renderComponent` will have separate schedulers)\\r\\n *\\r\\n * When the root component is bootstrapped with `renderComponent`, a scheduler\\r\\n * can be provided.\\r\\n *\\r\\n * @param component Component to mark as dirty.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵmarkDirty<T>(component: T): void;\\r\\n\\r\\nexport declare type ɵMethodFn = (obj: any, args: any[]) => any;\\r\\n\\r\\nexport declare function ɵmod(providers: NgModuleProviderDef[]): NgModuleDefinition;\\r\\n\\r\\nexport declare function ɵmpd(flags: ɵNodeFlags, token: any, value: any, deps: ([ɵDepFlags, any] | any)[]): NgModuleProviderDef;\\r\\n\\r\\nexport declare function ɵncd(ngContentIndex: null | number, index: number): NodeDef;\\r\\n\\r\\nexport declare const ɵNG_BASE_DEF: string;\\r\\n\\r\\n\\r\\nexport declare const ɵNG_COMP_DEF: string;\\r\\n\\r\\nexport declare const ɵNG_DIR_DEF: string;\\r\\n\\r\\n/**\\r\\n * If a directive is diPublic, bloomAdd sets a property on the type with this constant as\\r\\n * the key and the directive's unique ID as the value. This allows us to map directives to their\\r\\n * bloom filter bit for DI.\\r\\n */\\r\\nexport declare const ɵNG_ELEMENT_ID: string;\\r\\n\\r\\nexport declare const ɵNG_INJ_DEF: string;\\r\\n\\r\\nexport declare const ɵNG_MOD_DEF: string;\\r\\n\\r\\nexport declare const ɵNG_PIPE_DEF: string;\\r\\n\\r\\nexport declare const ɵNG_PROV_DEF: string;\\r\\n\\r\\n/**\\r\\n * Runtime link information for NgModules.\\r\\n *\\r\\n * This is the internal data structure used by the runtime to assemble components, directives,\\r\\n * pipes, and injectors.\\r\\n *\\r\\n * NOTE: Always use `ɵɵdefineNgModule` function to create this object,\\r\\n * never create the object directly since the shape of this object\\r\\n * can change between versions.\\r\\n */\\r\\nexport declare interface ɵNgModuleDef<T> {\\r\\n    /** Token representing the module. Used by DI. */\\r\\n    type: T;\\r\\n    /** List of components to bootstrap. */\\r\\n    bootstrap: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of components, directives, and pipes declared by this module. */\\r\\n    declarations: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of modules or `ModuleWithProviders` imported by this module. */\\r\\n    imports: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * List of modules, `ModuleWithProviders`, components, directives, or pipes exported by this\\r\\n     * module.\\r\\n     */\\r\\n    exports: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * Cached value of computed `transitiveCompileScopes` for this module.\\r\\n     *\\r\\n     * This should never be read directly, but accessed via `transitiveScopesFor`.\\r\\n     */\\r\\n    transitiveCompileScopes: ɵNgModuleTransitiveScopes | null;\\r\\n    /** The set of schemas that declare elements to be allowed in the NgModule. */\\r\\n    schemas: SchemaMetadata[] | null;\\r\\n    /** Unique ID for the module with which it should be registered.  */\\r\\n    id: string | null;\\r\\n}\\r\\n\\r\\nexport declare class ɵNgModuleFactory<T> extends NgModuleFactory<T> {\\r\\n    moduleType: Type<T>;\\r\\n    constructor(moduleType: Type<T>);\\r\\n    create(parentInjector: Injector | null): NgModuleRef<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents the expansion of an `NgModule` into its scopes.\\r\\n *\\r\\n * A scope is a set of directives and pipes that are visible in a particular context. Each\\r\\n * `NgModule` has two scopes. The `compilation` scope is the set of directives and pipes that will\\r\\n * be recognized in the templates of components declared by the module. The `exported` scope is the\\r\\n * set of directives and pipes exported by a module (that is, module B's exported scope gets added\\r\\n * to module A's compilation scope when module A imports B).\\r\\n */\\r\\nexport declare interface ɵNgModuleTransitiveScopes {\\r\\n    compilation: {\\r\\n        directives: Set<any>;\\r\\n        pipes: Set<any>;\\r\\n    };\\r\\n    exported: {\\r\\n        directives: Set<any>;\\r\\n        pipes: Set<any>;\\r\\n    };\\r\\n    schemas: SchemaMetadata[] | null;\\r\\n}\\r\\n\\r\\nexport declare interface ɵNgModuleType<T = any> extends Type<T> {\\r\\n    ɵmod: ɵNgModuleDef<T>;\\r\\n}\\r\\n\\r\\n\\r\\nexport declare interface ɵNO_CHANGE {\\r\\n    brand: 'NO_CHANGE';\\r\\n}\\r\\n\\r\\n/** A special value which designates that a value has not changed. */\\r\\nexport declare const ɵNO_CHANGE: ɵNO_CHANGE;\\r\\n\\r\\n/**\\r\\n * Bitmask for NodeDef.flags.\\r\\n * Naming convention:\\r\\n * - `Type...`: flags that are mutually exclusive\\r\\n * - `Cat...`: union of multiple `Type...` (short for category).\\r\\n */\\r\\nexport declare const enum ɵNodeFlags {\\r\\n    None = 0,\\r\\n    TypeElement = 1,\\r\\n    TypeText = 2,\\r\\n    ProjectedTemplate = 4,\\r\\n    CatRenderNode = 3,\\r\\n    TypeNgContent = 8,\\r\\n    TypePipe = 16,\\r\\n    TypePureArray = 32,\\r\\n    TypePureObject = 64,\\r\\n    TypePurePipe = 128,\\r\\n    CatPureExpression = 224,\\r\\n    TypeValueProvider = 256,\\r\\n    TypeClassProvider = 512,\\r\\n    TypeFactoryProvider = 1024,\\r\\n    TypeUseExistingProvider = 2048,\\r\\n    LazyProvider = 4096,\\r\\n    PrivateProvider = 8192,\\r\\n    TypeDirective = 16384,\\r\\n    Component = 32768,\\r\\n    CatProviderNoDirective = 3840,\\r\\n    CatProvider = 20224,\\r\\n    OnInit = 65536,\\r\\n    OnDestroy = 131072,\\r\\n    DoCheck = 262144,\\r\\n    OnChanges = 524288,\\r\\n    AfterContentInit = 1048576,\\r\\n    AfterContentChecked = 2097152,\\r\\n    AfterViewInit = 4194304,\\r\\n    AfterViewChecked = 8388608,\\r\\n    EmbeddedViews = 16777216,\\r\\n    ComponentView = 33554432,\\r\\n    TypeContentQuery = 67108864,\\r\\n    TypeViewQuery = 134217728,\\r\\n    StaticQuery = 268435456,\\r\\n    DynamicQuery = 536870912,\\r\\n    TypeNgModule = 1073741824,\\r\\n    CatQuery = 201326592,\\r\\n    Types = 201347067\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls\\r\\n * to framework to perform rendering.\\r\\n */\\r\\nexport declare class ɵNoopNgZone implements NgZone {\\r\\n    readonly hasPendingMicrotasks: boolean;\\r\\n    readonly hasPendingMacrotasks: boolean;\\r\\n    readonly isStable: boolean;\\r\\n    readonly onUnstable: EventEmitter<any>;\\r\\n    readonly onMicrotaskEmpty: EventEmitter<any>;\\r\\n    readonly onStable: EventEmitter<any>;\\r\\n    readonly onError: EventEmitter<any>;\\r\\n    run(fn: (...args: any[]) => any, applyThis?: any, applyArgs?: any): any;\\r\\n    runGuarded(fn: (...args: any[]) => any, applyThis?: any, applyArgs?: any): any;\\r\\n    runOutsideAngular(fn: (...args: any[]) => any): any;\\r\\n    runTask(fn: (...args: any[]) => any, applyThis?: any, applyArgs?: any, name?: string): any;\\r\\n}\\r\\n\\r\\nexport declare const ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR: {};\\r\\n\\r\\nexport declare function ɵnov(view: ViewData, index: number): any;\\r\\n\\r\\nexport declare function ɵoverrideComponentView(comp: Type<any>, componentFactory: ComponentFactory<any>): void;\\r\\n\\r\\nexport declare function ɵoverrideProvider(override: ProviderOverride): void;\\r\\n\\r\\nexport declare function ɵpad(checkIndex: number, argCount: number): NodeDef;\\r\\n\\r\\n/**\\r\\n * Patch the definition of a component with directives and pipes from the compilation scope of\\r\\n * a given module.\\r\\n */\\r\\nexport declare function ɵpatchComponentDefWithScope<C>(componentDef: ɵComponentDef<C>, transitiveScopes: ɵNgModuleTransitiveScopes): void;\\r\\n\\r\\nexport declare function ɵpid(flags: ɵNodeFlags, ctor: any, deps: ([ɵDepFlags, any] | any)[]): NodeDef;\\r\\n\\r\\n/**\\r\\n * Runtime link information for Pipes.\\r\\n *\\r\\n * This is internal data structure used by the renderer to link\\r\\n * pipes into templates.\\r\\n *\\r\\n * NOTE: Always use `definePipe` function to create this object,\\r\\n * never create the object directly since the shape of this object\\r\\n * can change between versions.\\r\\n *\\r\\n * See: {@link definePipe}\\r\\n */\\r\\nexport declare interface ɵPipeDef<T> {\\r\\n    /** Token representing the pipe. */\\r\\n    type: Type<T>;\\r\\n    /**\\r\\n     * Pipe name.\\r\\n     *\\r\\n     * Used to resolve pipe in templates.\\r\\n     */\\r\\n    readonly name: string;\\r\\n    /**\\r\\n     * Factory function used to create a new pipe instance. Will be null initially.\\r\\n     * Populated when the factory is first requested by pipe instantiation logic.\\r\\n     */\\r\\n    factory: FactoryFn<T> | null;\\r\\n    /**\\r\\n     * Whether or not the pipe is pure.\\r\\n     *\\r\\n     * Pure pipes result only depends on the pipe input and not on internal\\r\\n     * state of the pipe.\\r\\n     */\\r\\n    readonly pure: boolean;\\r\\n    onDestroy: (() => void) | null;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * A shared interface which contains an animation player\\r\\n */\\r\\nexport declare interface ɵPlayer {\\r\\n    parent?: ɵPlayer | null;\\r\\n    state: ɵPlayState;\\r\\n    play(): void;\\r\\n    pause(): void;\\r\\n    finish(): void;\\r\\n    destroy(): void;\\r\\n    addEventListener(state: ɵPlayState | string, cb: (data?: any) => any): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Used as a reference to build a player from a styling template binding\\r\\n * (`[style]` and `[class]`).\\r\\n *\\r\\n * The `fn` function will be called once any styling-related changes are\\r\\n * evaluated on an element and is expected to return a player that will\\r\\n * be then run on the element.\\r\\n *\\r\\n * `[style]`, `[style.prop]`, `[class]` and `[class.name]` template bindings\\r\\n * all accept a `PlayerFactory` as input and this player factories.\\r\\n */\\r\\nexport declare interface ɵPlayerFactory {\\r\\n    '__brand__': 'Brand for PlayerFactory that nothing will match';\\r\\n}\\r\\n\\r\\n/**\\r\\n * Designed to be used as an injection service to capture all animation players.\\r\\n *\\r\\n * When present all animation players will be passed into the flush method below.\\r\\n * This feature is designed to service application-wide animation testing, live\\r\\n * debugging as well as custom animation choreographing tools.\\r\\n */\\r\\nexport declare interface ɵPlayerHandler {\\r\\n    /**\\r\\n     * Designed to kick off the player at the end of change detection\\r\\n     */\\r\\n    flushPlayers(): void;\\r\\n    /**\\r\\n     * @param player The player that has been scheduled to run within the application.\\r\\n     * @param context The context as to where the player was bound to\\r\\n     */\\r\\n    queuePlayer(player: ɵPlayer, context: ComponentInstance | DirectiveInstance | HTMLElement): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The state of a given player\\r\\n *\\r\\n * Do not change the increasing nature of the numbers since the player\\r\\n * code may compare state by checking if a number is higher or lower than\\r\\n * a certain numeric value.\\r\\n */\\r\\nexport declare const enum ɵPlayState {\\r\\n    Pending = 0,\\r\\n    Running = 1,\\r\\n    Paused = 2,\\r\\n    Finished = 100,\\r\\n    Destroyed = 200\\r\\n}\\r\\n\\r\\nexport declare function ɵpod(checkIndex: number, propToIndex: {\\r\\n    [p: string]: number;\\r\\n}): NodeDef;\\r\\n\\r\\nexport declare function ɵppd(checkIndex: number, argCount: number): NodeDef;\\r\\n\\r\\nexport declare function ɵprd(flags: ɵNodeFlags, matchedQueries: null | [string | number, ɵQueryValueType][], token: any, value: any, deps: ([ɵDepFlags, any] | any)[]): NodeDef;\\r\\n\\r\\n/**\\r\\n * Publishes a collection of default debug tools onto`window.ng`.\\r\\n *\\r\\n * These functions are available globally when Angular is in development\\r\\n * mode and are automatically stripped away from prod mode is on.\\r\\n */\\r\\nexport declare function ɵpublishDefaultGlobalUtils(): void;\\r\\n\\r\\n/**\\r\\n * Publishes the given function to `window.ng` so that it can be\\r\\n * used from the browser console when an application is not in production.\\r\\n */\\r\\nexport declare function ɵpublishGlobalUtil(name: string, fn: Function): void;\\r\\n\\r\\nexport declare function ɵqud(flags: ɵNodeFlags, id: number, bindings: {\\r\\n    [propName: string]: ɵQueryBindingType;\\r\\n}): NodeDef;\\r\\n\\r\\nexport declare const enum ɵQueryBindingType {\\r\\n    First = 0,\\r\\n    All = 1\\r\\n}\\r\\n\\r\\nexport declare const enum ɵQueryValueType {\\r\\n    ElementRef = 0,\\r\\n    RenderElement = 1,\\r\\n    TemplateRef = 2,\\r\\n    ViewContainerRef = 3,\\r\\n    Provider = 4\\r\\n}\\r\\n\\r\\nexport declare class ɵReflectionCapabilities implements PlatformReflectionCapabilities {\\r\\n    private _reflect;\\r\\n    constructor(reflect?: any);\\r\\n    isReflectionEnabled(): boolean;\\r\\n    factory<T>(t: Type<T>): (args: any[]) => T;\\r\\n    private _ownParameters;\\r\\n    parameters(type: Type<any>): any[][];\\r\\n    private _ownAnnotations;\\r\\n    annotations(typeOrFunc: Type<any>): any[];\\r\\n    private _ownPropMetadata;\\r\\n    propMetadata(typeOrFunc: any): {\\r\\n        [key: string]: any[];\\r\\n    };\\r\\n    ownPropMetadata(typeOrFunc: any): {\\r\\n        [key: string]: any[];\\r\\n    };\\r\\n    hasLifecycleHook(type: any, lcProperty: string): boolean;\\r\\n    guards(type: any): {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    getter(name: string): ɵGetterFn;\\r\\n    setter(name: string): ɵSetterFn;\\r\\n    method(name: string): ɵMethodFn;\\r\\n    importUri(type: any): string;\\r\\n    resourceUri(type: any): string;\\r\\n    resolveIdentifier(name: string, moduleUrl: string, members: string[], runtime: any): any;\\r\\n    resolveEnum(enumIdentifier: any, name: string): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Registers a loaded module. Should only be called from generated NgModuleFactory code.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵregisterModuleFactory(id: string, factory: NgModuleFactory<any>): void;\\r\\n\\r\\nexport declare function ɵregisterNgModuleType(ngModuleType: ɵNgModuleType): void;\\r\\n\\r\\n/**\\r\\n * Render3 implementation of {@link viewEngine_ComponentFactory}.\\r\\n */\\r\\nexport declare class ɵRender3ComponentFactory<T> extends ComponentFactory<T> {\\r\\n    private componentDef;\\r\\n    private ngModule?;\\r\\n    selector: string;\\r\\n    componentType: Type<any>;\\r\\n    ngContentSelectors: string[];\\r\\n    isBoundToModule: boolean;\\r\\n    readonly inputs: {\\r\\n        propName: string;\\r\\n        templateName: string;\\r\\n    }[];\\r\\n    readonly outputs: {\\r\\n        propName: string;\\r\\n        templateName: string;\\r\\n    }[];\\r\\n    /**\\r\\n     * @param componentDef The component definition.\\r\\n     * @param ngModule The NgModuleRef to which the factory is bound.\\r\\n     */\\r\\n    constructor(componentDef: ɵComponentDef<any>, ngModule?: NgModuleRef<any> | undefined);\\r\\n    create(injector: Injector, projectableNodes?: any[][] | undefined, rootSelectorOrNode?: any, ngModule?: NgModuleRef<any> | undefined): ComponentRef<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents an instance of a Component created via a {@link ComponentFactory}.\\r\\n *\\r\\n * `ComponentRef` provides access to the Component Instance as well other objects related to this\\r\\n * Component Instance and allows you to destroy the Component Instance via the {@link #destroy}\\r\\n * method.\\r\\n *\\r\\n */\\r\\nexport declare class ɵRender3ComponentRef<T> extends ComponentRef<T> {\\r\\n    location: ElementRef;\\r\\n    private _rootLView;\\r\\n    private _tNode;\\r\\n    destroyCbs: (() => void)[] | null;\\r\\n    instance: T;\\r\\n    hostView: ViewRef_2<T>;\\r\\n    changeDetectorRef: ChangeDetectorRef;\\r\\n    componentType: Type<T>;\\r\\n    constructor(componentType: Type<T>, instance: T, location: ElementRef, _rootLView: ɵangular_packages_core_core_bm, _tNode: ɵangular_packages_core_core_bh | TContainerNode | TElementContainerNode);\\r\\n    readonly injector: Injector;\\r\\n    destroy(): void;\\r\\n    onDestroy(callback: () => void): void;\\r\\n}\\r\\n\\r\\nexport declare class ɵRender3NgModuleRef<T> extends NgModuleRef<T> implements InternalNgModuleRef<T> {\\r\\n    _parent: Injector | null;\\r\\n    _bootstrapComponents: Type<any>[];\\r\\n    _r3Injector: R3Injector;\\r\\n    injector: Injector;\\r\\n    instance: T;\\r\\n    destroyCbs: (() => void)[] | null;\\r\\n    constructor(ngModuleType: Type<T>, _parent: Injector | null);\\r\\n    get(token: any, notFoundValue?: any, injectFlags?: InjectFlags): any;\\r\\n    readonly componentFactoryResolver: ComponentFactoryResolver;\\r\\n    destroy(): void;\\r\\n    onDestroy(callback: () => void): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Bootstraps a Component into an existing host element and returns an instance\\r\\n * of the component.\\r\\n *\\r\\n * Use this function to bootstrap a component into the DOM tree. Each invocation\\r\\n * of this function will create a separate tree of components, injectors and\\r\\n * change detection cycles and lifetimes. To dynamically insert a new component\\r\\n * into an existing tree such that it shares the same injection, change detection\\r\\n * and object lifetime, use {@link ViewContainer#createComponent}.\\r\\n *\\r\\n * @param componentType Component to bootstrap\\r\\n * @param options Optional parameters which control bootstrapping\\r\\n */\\r\\nexport declare function ɵrenderComponent<T>(componentType: ɵComponentType<T> | Type<T>, opts?: CreateComponentOptions): T;\\r\\n\\r\\n/**\\r\\n * Flags passed into template functions to determine which blocks (i.e. creation, update)\\r\\n * should be executed.\\r\\n *\\r\\n * Typically, a template runs both the creation block and the update block on initialization and\\r\\n * subsequent runs only execute the update block. However, dynamically created views require that\\r\\n * the creation block be executed separately from the update block (for backwards compat).\\r\\n */\\r\\nexport declare const enum ɵRenderFlags {\\r\\n    Create = 1,\\r\\n    Update = 2\\r\\n}\\r\\n\\r\\nexport declare function ɵresetCompiledComponents(): void;\\r\\n\\r\\n/**\\r\\n * Used to resolve resource URLs on `@Component` when used with JIT compilation.\\r\\n *\\r\\n * Example:\\r\\n * ```\\r\\n * @Component({\\r\\n *   selector: 'my-comp',\\r\\n *   templateUrl: 'my-comp.html', // This requires asynchronous resolution\\r\\n * })\\r\\n * class MyComponent{\\r\\n * }\\r\\n *\\r\\n * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process\\r\\n * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.\\r\\n *\\r\\n * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into\\r\\n * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.\\r\\n *\\r\\n * // Use browser's `fetch()` function as the default resource resolution strategy.\\r\\n * resolveComponentResources(fetch).then(() => {\\r\\n *   // After resolution all URLs have been converted into `template` strings.\\r\\n *   renderComponent(MyComponent);\\r\\n * });\\r\\n *\\r\\n * ```\\r\\n *\\r\\n * NOTE: In AOT the resolution happens during compilation, and so there should be no need\\r\\n * to call this method outside JIT mode.\\r\\n *\\r\\n * @param resourceResolver a function which is responsible for returning a `Promise` to the\\r\\n * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.\\r\\n */\\r\\nexport declare function ɵresolveComponentResources(resourceResolver: (url: string) => (Promise<string | {\\r\\n    text(): Promise<string>;\\r\\n}>)): Promise<void>;\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as HTML.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵSafeHtml extends ɵSafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as a URL to load executable code from.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵSafeResourceUrl extends ɵSafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as JavaScript.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵSafeScript extends ɵSafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as style (CSS).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵSafeStyle extends ɵSafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as a URL linking to a document.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵSafeUrl extends ɵSafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use in a particular context.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵSafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Adds decorator, constructor, and property metadata to a given type via static metadata fields\\r\\n * on the type.\\r\\n *\\r\\n * These metadata fields can later be read with Angular's `ReflectionCapabilities` API.\\r\\n *\\r\\n * Calls to `setClassMetadata` can be marked as pure, resulting in the metadata assignments being\\r\\n * tree-shaken away during production builds.\\r\\n */\\r\\nexport declare function ɵsetClassMetadata(type: Type<any>, decorators: any[] | null, ctorParameters: (() => any[]) | null, propDecorators: {\\r\\n    [field: string]: any;\\r\\n} | null): void;\\r\\n\\r\\nexport declare function ɵsetCurrentInjector(injector: Injector | null | undefined): Injector | undefined | null;\\r\\n\\r\\n/**\\r\\n * Sets the locale id that will be used for translations and ICU expressions.\\r\\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\\r\\n * but is now defined as a global value.\\r\\n *\\r\\n * @param localeId\\r\\n */\\r\\nexport declare function ɵsetLocaleId(localeId: string): void;\\r\\n\\r\\n\\r\\nexport declare type ɵSetterFn = (obj: any, value: any) => void;\\r\\n\\r\\n/** Store a value in the `data` at a given `index`. */\\r\\nexport declare function ɵstore<T>(index: number, value: T): void;\\r\\n\\r\\n\\r\\nexport declare function ɵstringify(token: any): string;\\r\\n\\r\\nexport declare const ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__: typeof injectChangeDetectorRef;\\r\\n\\r\\nexport declare const ɵSWITCH_COMPILE_COMPONENT__POST_R3__: typeof ɵcompileComponent;\\r\\n\\r\\nexport declare const ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__: typeof ɵcompileDirective;\\r\\n\\r\\nexport declare const ɵSWITCH_COMPILE_INJECTABLE__POST_R3__: typeof compileInjectable;\\r\\n\\r\\nexport declare const ɵSWITCH_COMPILE_NGMODULE__POST_R3__: typeof ɵcompileNgModule;\\r\\n\\r\\nexport declare const ɵSWITCH_COMPILE_PIPE__POST_R3__: typeof ɵcompilePipe;\\r\\n\\r\\nexport declare const ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__: typeof injectElementRef;\\r\\n\\r\\n\\r\\nexport declare const ɵSWITCH_IVY_ENABLED__POST_R3__ = true;\\r\\n\\r\\nexport declare const ɵSWITCH_RENDERER2_FACTORY__POST_R3__: typeof injectRenderer2;\\r\\n\\r\\nexport declare const ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__: typeof injectTemplateRef;\\r\\n\\r\\nexport declare const ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__: typeof injectViewContainerRef;\\r\\n\\r\\nexport declare function ɵted(checkIndex: number, ngContentIndex: number | null, staticText: string[]): NodeDef;\\r\\n\\r\\n/**\\r\\n * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.\\r\\n *\\r\\n * This operation is memoized and the result is cached on the module's definition. It can be called\\r\\n * on modules with components that have not fully compiled yet, but the result should not be used\\r\\n * until they have.\\r\\n */\\r\\nexport declare function ɵtransitiveScopesFor<T>(moduleType: Type<T>, processNgModuleFn?: (ngModule: ɵNgModuleType) => void): ɵNgModuleTransitiveScopes;\\r\\n\\r\\nexport declare function ɵunv(view: ViewData, nodeIdx: number, bindingIdx: number, value: any): any;\\r\\n\\r\\nexport declare function ɵunwrapSafeValue(value: string | ɵSafeValue): string;\\r\\n\\r\\nexport declare function ɵvid(flags: ɵViewFlags, nodes: NodeDef[], updateDirectives?: null | ViewUpdateFn, updateRenderer?: null | ViewUpdateFn): ɵViewDefinition;\\r\\n\\r\\nexport declare interface ɵViewDefinition extends Definition<ViewDefinitionFactory> {\\r\\n    flags: ɵViewFlags;\\r\\n    updateDirectives: ViewUpdateFn;\\r\\n    updateRenderer: ViewUpdateFn;\\r\\n    handleEvent: ViewHandleEventFn;\\r\\n    /**\\r\\n     * Order: Depth first.\\r\\n     * Especially providers are before elements / anchors.\\r\\n     */\\r\\n    nodes: NodeDef[];\\r\\n    /** aggregated NodeFlags for all nodes **/\\r\\n    nodeFlags: ɵNodeFlags;\\r\\n    rootNodeFlags: ɵNodeFlags;\\r\\n    lastRenderRootNode: NodeDef | null;\\r\\n    bindingCount: number;\\r\\n    outputCount: number;\\r\\n    /**\\r\\n     * Binary or of all query ids that are matched by one of the nodes.\\r\\n     * This includes query ids from templates as well.\\r\\n     * Used as a bloom filter.\\r\\n     */\\r\\n    nodeMatchedQueries: number;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Bitmask for ViewDefinition.flags.\\r\\n */\\r\\nexport declare const enum ɵViewFlags {\\r\\n    None = 0,\\r\\n    OnPush = 2\\r\\n}\\r\\n\\r\\n/**\\r\\n * Wait on component until it is rendered.\\r\\n *\\r\\n * This function returns a `Promise` which is resolved when the component's\\r\\n * change detection is executed. This is determined by finding the scheduler\\r\\n * associated with the `component`'s render tree and waiting until the scheduler\\r\\n * flushes. If nothing is scheduled, the function returns a resolved promise.\\r\\n *\\r\\n * Example:\\r\\n * ```\\r\\n * await whenRendered(myComponent);\\r\\n * ```\\r\\n *\\r\\n * @param component Component to wait upon\\r\\n * @returns Promise which resolves when the component is rendered.\\r\\n */\\r\\nexport declare function ɵwhenRendered(component: any): Promise<null>;\\r\\n\\r\\n/**\\r\\n * Advances to an element for later binding instructions.\\r\\n *\\r\\n * Used in conjunction with instructions like {@link property} to act on elements with specified\\r\\n * indices, for example those created with {@link element} or {@link elementStart}.\\r\\n *\\r\\n * ```ts\\r\\n * (rf: RenderFlags, ctx: any) => {\\r\\n  *   if (rf & 1) {\\r\\n  *     text(0, 'Hello');\\r\\n  *     text(1, 'Goodbye')\\r\\n  *     element(2, 'div');\\r\\n  *   }\\r\\n  *   if (rf & 2) {\\r\\n  *     advance(2); // Advance twice to the <div>.\\r\\n  *     property('title', 'test');\\r\\n  *   }\\r\\n  *  }\\r\\n  * ```\\r\\n  * @param delta Number of elements to advance forwards by.\\r\\n  *\\r\\n  * @codeGenApi\\r\\n  */\\r\\nexport declare function ɵɵadvance(delta: number): void;\\r\\n\\r\\n\\r\\n/**\\r\\n * Allocates the necessary amount of slots for host vars.\\r\\n *\\r\\n * @param count Amount of vars to be allocated\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵallocHostVars(count: number): void;\\r\\n\\r\\n/**\\r\\n * Updates the value of or removes a bound attribute on an Element.\\r\\n *\\r\\n * Used in the case of `[attr.title]=\\\"value\\\"`\\r\\n *\\r\\n * @param name name The name of the attribute.\\r\\n * @param value value The attribute is removed when value is `null` or `undefined`.\\r\\n *                  Otherwise the attribute value is set to the stringified value.\\r\\n * @param sanitizer An optional function used to sanitize the value.\\r\\n * @param namespace Optional namespace to use when setting the attribute.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattribute(name: string, value: any, sanitizer?: SanitizerFn | null, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with single bound value surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 1 interpolated value in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate1('title', 'prefix', v0, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate1(attrName: string, prefix: string, v0: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 2 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 2 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate2(attrName: string, prefix: string, v0: any, i0: string, v1: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 3 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 3 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}-{{v2}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate3(\\r\\n * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate3(attrName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 4 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 4 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate4(\\r\\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate4(attrName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 5 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 5 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate5(\\r\\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate5(attrName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 6 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 6 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate6(\\r\\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate6(attrName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 7 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 7 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate7(\\r\\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate7(attrName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated attribute on an element with 8 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 8 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div attr.title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolate8(\\r\\n *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param i6 Static value used for concatenation only.\\r\\n * @param v7 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolate8(attrName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, i6: string, v7: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Update an interpolated attribute on an element with 8 or more bound values surrounded by text.\\r\\n *\\r\\n * Used when the number of interpolated values exceeds 7.\\r\\n *\\r\\n * ```html\\r\\n * <div\\r\\n *  title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵattributeInterpolateV(\\r\\n *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\\r\\n *  'suffix']);\\r\\n * ```\\r\\n *\\r\\n * @param attrName The name of the attribute to update.\\r\\n * @param values The a collection of values and the strings in-between those values, beginning with\\r\\n * a string prefix and ending with a string suffix.\\r\\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵattributeInterpolateV(attrName: string, values: any[], sanitizer?: SanitizerFn, namespace?: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Runtime information for classes that are inherited by components or directives\\r\\n * that aren't defined as components or directives.\\r\\n *\\r\\n * This is an internal data structure used by the renderer to determine what inputs\\r\\n * and outputs should be inherited.\\r\\n *\\r\\n * See: {@link defineBase}\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare interface ɵɵBaseDef<T> {\\r\\n    /**\\r\\n     * A dictionary mapping the inputs' minified property names to their public API names, which\\r\\n     * are their aliases if any, or their original unminified property names\\r\\n     * (as in `@Input('alias') propertyName: any;`).\\r\\n     */\\r\\n    readonly inputs: {\\r\\n        [P in keyof T]: string;\\r\\n    };\\r\\n    /**\\r\\n     * @deprecated This is only here because `NgOnChanges` incorrectly uses declared name instead of\\r\\n     * public or minified name.\\r\\n     */\\r\\n    readonly declaredInputs: {\\r\\n        [P in keyof T]: string;\\r\\n    };\\r\\n    /**\\r\\n     * A dictionary mapping the outputs' minified property names to their public API names, which\\r\\n     * are their aliases if any, or their original unminified property names\\r\\n     * (as in `@Output('alias') propertyName: any;`).\\r\\n     */\\r\\n    readonly outputs: {\\r\\n        [P in keyof T]: string;\\r\\n    };\\r\\n    /**\\r\\n     * Function to create and refresh content queries associated with a given directive.\\r\\n     */\\r\\n    contentQueries: ContentQueriesFunction<T> | null;\\r\\n    /**\\r\\n     * Query-related instructions for a directive. Note that while directives don't have a\\r\\n     * view and as such view queries won't necessarily do anything, there might be\\r\\n     * components that extend the directive.\\r\\n     */\\r\\n    viewQuery: ViewQueriesFunction<T> | null;\\r\\n    /**\\r\\n     * Refreshes host bindings on the associated directive.\\r\\n     */\\r\\n    hostBindings: HostBindingsFunction<T> | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Update class bindings using an object literal or class-string on an element.\\r\\n *\\r\\n * This instruction is meant to apply styling via the `[class]=\\\"exp\\\"` template bindings.\\r\\n * When classes are applied to the element they will then be updated with\\r\\n * respect to any styles/classes set via `classProp`. If any\\r\\n * classes are set to falsy then they will be removed from the element.\\r\\n *\\r\\n * Note that the styling instruction will not be applied until `stylingApply` is called.\\r\\n * Note that this will the provided classMap value to the host element if this function is called\\r\\n * within a host binding.\\r\\n *\\r\\n * @param classes A key/value map or string of CSS classes that will be added to the\\r\\n *        given element. Any missing classes (that have already been applied to the element\\r\\n *        beforehand) will be removed (unset) from the element's list of CSS classes.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMap(classes: {\\r\\n    [className: string]: any;\\r\\n} | ɵNO_CHANGE | string | null): void;\\r\\n\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with single bound value surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 1 interpolated value in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate1('prefix', v0, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate1(prefix: string, v0: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 2 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 2 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate2('prefix', v0, '-', v1, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate2(prefix: string, v0: any, i0: string, v1: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 3 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 3 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}-{{v2}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate3(\\r\\n * 'prefix', v0, '-', v1, '-', v2, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate3(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 4 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 4 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate4(\\r\\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate4(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 5 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 5 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate5(\\r\\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate5(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 6 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 6 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate6(\\r\\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate6(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 7 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 7 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate7(\\r\\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate7(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated class on an element with 8 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 8 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div class=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolate8(\\r\\n *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param i6 Static value used for concatenation only.\\r\\n * @param v7 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolate8(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, i6: string, v7: any, suffix: string): void;\\r\\n\\r\\n/**\\r\\n * Update an interpolated class on an element with 8 or more bound values surrounded by text.\\r\\n *\\r\\n * Used when the number of interpolated values exceeds 7.\\r\\n *\\r\\n * ```html\\r\\n * <div\\r\\n *  class=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵclassMapInterpolateV(\\r\\n *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\\r\\n *  'suffix']);\\r\\n * ```\\r\\n *.\\r\\n * @param values The a collection of values and the strings in-between those values, beginning with\\r\\n * a string prefix and ending with a string suffix.\\r\\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassMapInterpolateV(values: any[]): void;\\r\\n\\r\\n/**\\r\\n * Update a class binding on an element with the provided value.\\r\\n *\\r\\n * This instruction is meant to handle the `[class.foo]=\\\"exp\\\"` case and,\\r\\n * therefore, the class binding itself must already be allocated using\\r\\n * `styling` within the creation block.\\r\\n *\\r\\n * @param prop A valid CSS class (only one).\\r\\n * @param value A true/false value which will turn the class on or off.\\r\\n *\\r\\n * Note that this will apply the provided class value to the host element if this function\\r\\n * is called within a host binding function.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵclassProp(className: string, value: boolean | null): void;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare type ɵɵComponentDefWithMeta<T, Selector extends String, ExportAs extends string[], InputMap extends {\\r\\n    [key: string]: string;\\r\\n}, OutputMap extends {\\r\\n    [key: string]: string;\\r\\n}, QueryFields extends string[]> = ɵComponentDef<T>;\\r\\n\\r\\n/**\\r\\n* Registers a synthetic host listener (e.g. `(@foo.start)`) on a component.\\r\\n*\\r\\n* This instruction is for compatibility purposes and is designed to ensure that a\\r\\n* synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered\\r\\n* in the component's renderer. Normally all host listeners are evaluated with the\\r\\n* parent component's renderer, but, in the case of animation @triggers, they need\\r\\n* to be evaluated with the sub component's renderer (because that's where the\\r\\n* animation triggers are defined).\\r\\n*\\r\\n* Do not use this instruction as a replacement for `listener`. This instruction\\r\\n* only exists to ensure compatibility with the ViewEngine's host binding behavior.\\r\\n*\\r\\n* @param eventName Name of the event\\r\\n* @param listenerFn The function to be called when event emits\\r\\n* @param useCapture Whether or not to use capture in event listener\\r\\n* @param eventTargetResolver Function that returns global target information in case this listener\\r\\n* should be attached to a global object like window, document or body\\r\\n *\\r\\n * @codeGenApi\\r\\n*/\\r\\nexport declare function ɵɵcomponentHostSyntheticListener(eventName: string, listenerFn: (e?: any) => any, useCapture?: boolean, eventTargetResolver?: GlobalTargetResolver): void;\\r\\n\\r\\n/**\\r\\n * Creates an LContainer for inline views, e.g.\\r\\n *\\r\\n * % if (showing) {\\r\\n *   <div></div>\\r\\n * % }\\r\\n *\\r\\n * @param index The index of the container in the data array\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵcontainer(index: number): void;\\r\\n\\r\\n/**\\r\\n * Marks the end of the LContainer.\\r\\n *\\r\\n * Marking the end of LContainer is the time when to child views get inserted or removed.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵcontainerRefreshEnd(): void;\\r\\n\\r\\n/**\\r\\n * Sets a container up to receive views.\\r\\n *\\r\\n * @param index The index of the container in the data array\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵcontainerRefreshStart(index: number): void;\\r\\n\\r\\n/**\\r\\n * Registers a QueryList, associated with a content query, for later refresh (part of a view\\r\\n * refresh).\\r\\n *\\r\\n * @param directiveIndex Current directive index\\r\\n * @param predicate The type for which the query will search\\r\\n * @param descend Whether or not to descend into children\\r\\n * @param read What to save in the query\\r\\n * @returns QueryList<T>\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵcontentQuery<T>(directiveIndex: number, predicate: Type<any> | string[], descend: boolean, read?: any): void;\\r\\n\\r\\n/**\\r\\n * The default style sanitizer will handle sanitization for style properties by\\r\\n * sanitizing any CSS property that can include a `url` value (usually image-based properties)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ɵɵdefaultStyleSanitizer: StyleSanitizeFn;\\r\\n\\r\\n/**\\r\\n * Create a base definition\\r\\n *\\r\\n * # Example\\r\\n * ```ts\\r\\n * class ShouldBeInherited {\\r\\n *   static ngBaseDef = ɵɵdefineBase({\\r\\n *      ...\\r\\n *   })\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @param baseDefinition The base definition parameters\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefineBase<T>(baseDefinition: {\\r\\n    /**\\r\\n     * A map of input names.\\r\\n     *\\r\\n     * The format is in: `{[actualPropertyName: string]:(string|[string, string])}`.\\r\\n     *\\r\\n     * Given:\\r\\n     * ```\\r\\n     * class MyComponent {\\r\\n     *   @Input()\\r\\n     *   publicInput1: string;\\r\\n     *\\r\\n     *   @Input('publicInput2')\\r\\n     *   declaredInput2: string;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * is described as:\\r\\n     * ```\\r\\n     * {\\r\\n     *   publicInput1: 'publicInput1',\\r\\n     *   declaredInput2: ['declaredInput2', 'publicInput2'],\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * Which the minifier may translate to:\\r\\n     * ```\\r\\n     * {\\r\\n     *   minifiedPublicInput1: 'publicInput1',\\r\\n     *   minifiedDeclaredInput2: [ 'declaredInput2', 'publicInput2'],\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * This allows the render to re-construct the minified, public, and declared names\\r\\n     * of properties.\\r\\n     *\\r\\n     * NOTE:\\r\\n     *  - Because declared and public name are usually same we only generate the array\\r\\n     *    `['declared', 'public']` format when they differ.\\r\\n     *  - The reason why this API and `outputs` API is not the same is that `NgOnChanges` has\\r\\n     *    inconsistent behavior in that it uses declared names rather than minified or public. For\\r\\n     *    this reason `NgOnChanges` will be deprecated and removed in future version and this\\r\\n     *    API will be simplified to be consistent with `outputs`.\\r\\n     */\\r\\n    inputs?: {\\r\\n        [P in keyof T]?: string | [string, string];\\r\\n    };\\r\\n    /**\\r\\n     * A map of output names.\\r\\n     *\\r\\n     * The format is in: `{[actualPropertyName: string]:string}`.\\r\\n     *\\r\\n     * Which the minifier may translate to: `{[minifiedPropertyName: string]:string}`.\\r\\n     *\\r\\n     * This allows the render to re-construct the minified and non-minified names\\r\\n     * of properties.\\r\\n     */\\r\\n    outputs?: {\\r\\n        [P in keyof T]?: string;\\r\\n    };\\r\\n    /**\\r\\n     * Function to create instances of content queries associated with a given directive.\\r\\n     */\\r\\n    contentQueries?: ContentQueriesFunction<T> | null;\\r\\n    /**\\r\\n     * Additional set of instructions specific to view query processing. This could be seen as a\\r\\n     * set of instructions to be inserted into the template function.\\r\\n     */\\r\\n    viewQuery?: ViewQueriesFunction<T> | null;\\r\\n    /**\\r\\n     * Function executed by the parent template to allow children to apply host bindings.\\r\\n     */\\r\\n    hostBindings?: HostBindingsFunction<T>;\\r\\n}): ɵɵBaseDef<T>;\\r\\n\\r\\n/**\\r\\n * Create a component definition object.\\r\\n *\\r\\n *\\r\\n * # Example\\r\\n * ```\\r\\n * class MyDirective {\\r\\n *   // Generated by Angular Template Compiler\\r\\n *   // [Symbol] syntax will not be supported by TypeScript until v2.7\\r\\n *   static ɵcmp = defineComponent({\\r\\n *     ...\\r\\n *   });\\r\\n * }\\r\\n * ```\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefineComponent<T>(componentDefinition: {\\r\\n    /**\\r\\n     * Directive type, needed to configure the injector.\\r\\n     */\\r\\n    type: Type<T>;\\r\\n    /** The selectors that will be used to match nodes to this component. */\\r\\n    selectors: ɵCssSelectorList;\\r\\n    /**\\r\\n     * The number of nodes, local refs, and pipes in this component template.\\r\\n     *\\r\\n     * Used to calculate the length of this component's LView array, so we\\r\\n     * can pre-fill the array and set the binding start index.\\r\\n     */\\r\\n    decls: number;\\r\\n    /**\\r\\n     * The number of bindings in this component template (including pure fn bindings).\\r\\n     *\\r\\n     * Used to calculate the length of this component's LView array, so we\\r\\n     * can pre-fill the array and set the host binding start index.\\r\\n     */\\r\\n    vars: number;\\r\\n    /**\\r\\n     * A map of input names.\\r\\n     *\\r\\n     * The format is in: `{[actualPropertyName: string]:(string|[string, string])}`.\\r\\n     *\\r\\n     * Given:\\r\\n     * ```\\r\\n     * class MyComponent {\\r\\n     *   @Input()\\r\\n     *   publicInput1: string;\\r\\n     *\\r\\n     *   @Input('publicInput2')\\r\\n     *   declaredInput2: string;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * is described as:\\r\\n     * ```\\r\\n     * {\\r\\n     *   publicInput1: 'publicInput1',\\r\\n     *   declaredInput2: ['publicInput2', 'declaredInput2'],\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * Which the minifier may translate to:\\r\\n     * ```\\r\\n     * {\\r\\n     *   minifiedPublicInput1: 'publicInput1',\\r\\n     *   minifiedDeclaredInput2: ['publicInput2', 'declaredInput2'],\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * This allows the render to re-construct the minified, public, and declared names\\r\\n     * of properties.\\r\\n     *\\r\\n     * NOTE:\\r\\n     *  - Because declared and public name are usually same we only generate the array\\r\\n     *    `['public', 'declared']` format when they differ.\\r\\n     *  - The reason why this API and `outputs` API is not the same is that `NgOnChanges` has\\r\\n     *    inconsistent behavior in that it uses declared names rather than minified or public. For\\r\\n     *    this reason `NgOnChanges` will be deprecated and removed in future version and this\\r\\n     *    API will be simplified to be consistent with `output`.\\r\\n     */\\r\\n    inputs?: {\\r\\n        [P in keyof T]?: string | [string, string];\\r\\n    };\\r\\n    /**\\r\\n     * A map of output names.\\r\\n     *\\r\\n     * The format is in: `{[actualPropertyName: string]:string}`.\\r\\n     *\\r\\n     * Which the minifier may translate to: `{[minifiedPropertyName: string]:string}`.\\r\\n     *\\r\\n     * This allows the render to re-construct the minified and non-minified names\\r\\n     * of properties.\\r\\n     */\\r\\n    outputs?: {\\r\\n        [P in keyof T]?: string;\\r\\n    };\\r\\n    /**\\r\\n     * Function executed by the parent template to allow child directive to apply host bindings.\\r\\n     */\\r\\n    hostBindings?: HostBindingsFunction<T>;\\r\\n    /**\\r\\n     * Function to create instances of content queries associated with a given directive.\\r\\n     */\\r\\n    contentQueries?: ContentQueriesFunction<T>;\\r\\n    /**\\r\\n     * Defines the name that can be used in the template to assign this directive to a variable.\\r\\n     *\\r\\n     * See: {@link Directive.exportAs}\\r\\n     */\\r\\n    exportAs?: string[];\\r\\n    /**\\r\\n     * Template function use for rendering DOM.\\r\\n     *\\r\\n     * This function has following structure.\\r\\n     *\\r\\n     * ```\\r\\n     * function Template<T>(ctx:T, creationMode: boolean) {\\r\\n     *   if (creationMode) {\\r\\n     *     // Contains creation mode instructions.\\r\\n     *   }\\r\\n     *   // Contains binding update instructions\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * Common instructions are:\\r\\n     * Creation mode instructions:\\r\\n     *  - `elementStart`, `elementEnd`\\r\\n     *  - `text`\\r\\n     *  - `container`\\r\\n     *  - `listener`\\r\\n     *\\r\\n     * Binding update instructions:\\r\\n     * - `bind`\\r\\n     * - `elementAttribute`\\r\\n     * - `elementProperty`\\r\\n     * - `elementClass`\\r\\n     * - `elementStyle`\\r\\n     *\\r\\n     */\\r\\n    template: ComponentTemplate<T>;\\r\\n    /** Constants for the nodes in the component's view. */\\r\\n    consts?: TAttributes[];\\r\\n    /**\\r\\n     * An array of `ngContent[selector]` values that were found in the template.\\r\\n     */\\r\\n    ngContentSelectors?: string[];\\r\\n    /**\\r\\n     * Additional set of instructions specific to view query processing. This could be seen as a\\r\\n     * set of instruction to be inserted into the template function.\\r\\n     *\\r\\n     * Query-related instructions need to be pulled out to a specific function as a timing of\\r\\n     * execution is different as compared to all other instructions (after change detection hooks but\\r\\n     * before view hooks).\\r\\n     */\\r\\n    viewQuery?: ViewQueriesFunction<T> | null;\\r\\n    /**\\r\\n     * A list of optional features to apply.\\r\\n     *\\r\\n     * See: {@link NgOnChangesFeature}, {@link ProvidersFeature}\\r\\n     */\\r\\n    features?: ComponentDefFeature[];\\r\\n    /**\\r\\n     * Defines template and style encapsulation options available for Component's {@link Component}.\\r\\n     */\\r\\n    encapsulation?: ViewEncapsulation;\\r\\n    /**\\r\\n     * Defines arbitrary developer-defined data to be stored on a renderer instance.\\r\\n     * This is useful for renderers that delegate to other renderers.\\r\\n     *\\r\\n     * see: animation\\r\\n     */\\r\\n    data?: {\\r\\n        [kind: string]: any;\\r\\n    };\\r\\n    /**\\r\\n     * A set of styles that the component needs to be present for component to render correctly.\\r\\n     */\\r\\n    styles?: string[];\\r\\n    /**\\r\\n     * The strategy that the default change detector uses to detect changes.\\r\\n     * When set, takes effect the next time change detection is triggered.\\r\\n     */\\r\\n    changeDetection?: ChangeDetectionStrategy;\\r\\n    /**\\r\\n     * Registry of directives and components that may be found in this component's view.\\r\\n     *\\r\\n     * The property is either an array of `DirectiveDef`s or a function which returns the array of\\r\\n     * `DirectiveDef`s. The function is necessary to be able to support forward declarations.\\r\\n     */\\r\\n    directives?: DirectiveTypesOrFactory | null;\\r\\n    /**\\r\\n     * Registry of pipes that may be found in this component's view.\\r\\n     *\\r\\n     * The property is either an array of `PipeDefs`s or a function which returns the array of\\r\\n     * `PipeDefs`s. The function is necessary to be able to support forward declarations.\\r\\n     */\\r\\n    pipes?: PipeTypesOrFactory | null;\\r\\n    /**\\r\\n     * The set of schemas that declare elements to be allowed in the component's template.\\r\\n     */\\r\\n    schemas?: SchemaMetadata[] | null;\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * Create a directive definition object.\\r\\n *\\r\\n * # Example\\r\\n * ```ts\\r\\n * class MyDirective {\\r\\n *   // Generated by Angular Template Compiler\\r\\n *   // [Symbol] syntax will not be supported by TypeScript until v2.7\\r\\n *   static ɵdir = ɵɵdefineDirective({\\r\\n *     ...\\r\\n *   });\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare const ɵɵdefineDirective: <T>(directiveDefinition: {\\r\\n    /**\\r\\n     * Directive type, needed to configure the injector.\\r\\n     */\\r\\n    type: Type<T>;\\r\\n    /** The selectors that will be used to match nodes to this directive. */\\r\\n    selectors: (string | SelectorFlags)[][];\\r\\n    /**\\r\\n     * A map of input names.\\r\\n     *\\r\\n     * The format is in: `{[actualPropertyName: string]:(string|[string, string])}`.\\r\\n     *\\r\\n     * Given:\\r\\n     * ```\\r\\n     * class MyComponent {\\r\\n     *   @Input()\\r\\n     *   publicInput1: string;\\r\\n     *\\r\\n     *   @Input('publicInput2')\\r\\n     *   declaredInput2: string;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * is described as:\\r\\n     * ```\\r\\n     * {\\r\\n     *   publicInput1: 'publicInput1',\\r\\n     *   declaredInput2: ['declaredInput2', 'publicInput2'],\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * Which the minifier may translate to:\\r\\n     * ```\\r\\n     * {\\r\\n     *   minifiedPublicInput1: 'publicInput1',\\r\\n     *   minifiedDeclaredInput2: [ 'publicInput2', 'declaredInput2'],\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * This allows the render to re-construct the minified, public, and declared names\\r\\n     * of properties.\\r\\n     *\\r\\n     * NOTE:\\r\\n     *  - Because declared and public name are usually same we only generate the array\\r\\n     *    `['declared', 'public']` format when they differ.\\r\\n     *  - The reason why this API and `outputs` API is not the same is that `NgOnChanges` has\\r\\n     *    inconsistent behavior in that it uses declared names rather than minified or public. For\\r\\n     *    this reason `NgOnChanges` will be deprecated and removed in future version and this\\r\\n     *    API will be simplified to be consistent with `output`.\\r\\n     */\\r\\n    inputs?: { [P in keyof T]?: string | [string, string] | undefined; } | undefined;\\r\\n    /**\\r\\n     * A map of output names.\\r\\n     *\\r\\n     * The format is in: `{[actualPropertyName: string]:string}`.\\r\\n     *\\r\\n     * Which the minifier may translate to: `{[minifiedPropertyName: string]:string}`.\\r\\n     *\\r\\n     * This allows the render to re-construct the minified and non-minified names\\r\\n     * of properties.\\r\\n     */\\r\\n    outputs?: { [P_1 in keyof T]?: string | undefined; } | undefined;\\r\\n    /**\\r\\n     * A list of optional features to apply.\\r\\n     *\\r\\n     * See: {@link NgOnChangesFeature}, {@link ProvidersFeature}, {@link InheritDefinitionFeature}\\r\\n     */\\r\\n    features?: DirectiveDefFeature[] | undefined;\\r\\n    /**\\r\\n     * Function executed by the parent template to allow child directive to apply host bindings.\\r\\n     */\\r\\n    hostBindings?: HostBindingsFunction<T> | undefined;\\r\\n    /**\\r\\n     * Function to create instances of content queries associated with a given directive.\\r\\n     */\\r\\n    contentQueries?: ContentQueriesFunction<T> | undefined;\\r\\n    /**\\r\\n     * Additional set of instructions specific to view query processing. This could be seen as a\\r\\n     * set of instructions to be inserted into the template function.\\r\\n     */\\r\\n    viewQuery?: ViewQueriesFunction<T> | null | undefined;\\r\\n    /**\\r\\n     * Defines the name that can be used in the template to assign this directive to a variable.\\r\\n     *\\r\\n     * See: {@link Directive.exportAs}\\r\\n     */\\r\\n    exportAs?: string[] | undefined;\\r\\n}) => never;\\r\\n\\r\\n/**\\r\\n * Construct an `InjectableDef` which defines how a token will be constructed by the DI system, and\\r\\n * in which injectors (if any) it will be available.\\r\\n *\\r\\n * This should be assigned to a static `ɵprov` field on a type, which will then be an\\r\\n * `InjectableType`.\\r\\n *\\r\\n * Options:\\r\\n * * `providedIn` determines which injectors will include the injectable, by either associating it\\r\\n *   with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be\\r\\n *   provided in the `'root'` injector, which will be the application-level injector in most apps.\\r\\n * * `factory` gives the zero argument function which will create an instance of the injectable.\\r\\n *   The factory can call `inject` to access the `Injector` and request injection of dependencies.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefineInjectable<T>(opts: {\\r\\n    token: unknown;\\r\\n    providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n    factory: () => T;\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * Construct an `InjectorDef` which configures an injector.\\r\\n *\\r\\n * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an\\r\\n * `InjectorType`.\\r\\n *\\r\\n * Options:\\r\\n *\\r\\n * * `factory`: an `InjectorType` is an instantiable type, so a zero argument `factory` function to\\r\\n *   create the type must be provided. If that factory function needs to inject arguments, it can\\r\\n *   use the `inject` function.\\r\\n * * `providers`: an optional array of providers to add to the injector. Each provider must\\r\\n *   either have a factory or point to a type which has a `ɵprov` static property (the\\r\\n *   type must be an `InjectableType`).\\r\\n * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s\\r\\n *   whose providers will also be added to the injector. Locally provided types will override\\r\\n *   providers from imports.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵdefineInjector(options: {\\r\\n    factory: () => any;\\r\\n    providers?: any[];\\r\\n    imports?: any[];\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefineNgModule<T>(def: {\\r\\n    /** Token representing the module. Used by DI. */\\r\\n    type: T;\\r\\n    /** List of components to bootstrap. */\\r\\n    bootstrap?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of components, directives, and pipes declared by this module. */\\r\\n    declarations?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of modules or `ModuleWithProviders` imported by this module. */\\r\\n    imports?: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * List of modules, `ModuleWithProviders`, components, directives, or pipes exported by this\\r\\n     * module.\\r\\n     */\\r\\n    exports?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** The set of schemas that declare elements to be allowed in the NgModule. */\\r\\n    schemas?: SchemaMetadata[] | null;\\r\\n    /** Unique ID for the module that is used with `getModuleFactory`. */\\r\\n    id?: string | null;\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * Create a pipe definition object.\\r\\n *\\r\\n * # Example\\r\\n * ```\\r\\n * class MyPipe implements PipeTransform {\\r\\n *   // Generated by Angular Template Compiler\\r\\n *   static ɵpipe = definePipe({\\r\\n *     ...\\r\\n *   });\\r\\n * }\\r\\n * ```\\r\\n * @param pipeDef Pipe definition generated by the compiler\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefinePipe<T>(pipeDef: {\\r\\n    /** Name of the pipe. Used for matching pipes in template to pipe defs. */\\r\\n    name: string;\\r\\n    /** Pipe class reference. Needed to extract pipe lifecycle hooks. */\\r\\n    type: Type<T>;\\r\\n    /** Whether the pipe is pure. */\\r\\n    pure?: boolean;\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare type ɵɵDirectiveDefWithMeta<T, Selector extends string, ExportAs extends string[], InputMap extends {\\r\\n    [key: string]: string;\\r\\n}, OutputMap extends {\\r\\n    [key: string]: string;\\r\\n}, QueryFields extends string[]> = ɵDirectiveDef<T>;\\r\\n\\r\\n/**\\r\\n * Returns the value associated to the given token from the injectors.\\r\\n *\\r\\n * `directiveInject` is intended to be used for directive, component and pipe factories.\\r\\n *  All other injection use `inject` which does not walk the node injector tree.\\r\\n *\\r\\n * Usage example (in factory function):\\r\\n *\\r\\n * ```ts\\r\\n * class SomeDirective {\\r\\n *   constructor(directive: DirectiveA) {}\\r\\n *\\r\\n *   static ɵdir = ɵɵdefineDirective({\\r\\n *     type: SomeDirective,\\r\\n *     factory: () => new SomeDirective(ɵɵdirectiveInject(DirectiveA))\\r\\n *   });\\r\\n * }\\r\\n * ```\\r\\n * @param token the type or token to inject\\r\\n * @param flags Injection flags\\r\\n * @returns the value from the injector or `null` when not found\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdirectiveInject<T>(token: Type<T> | InjectionToken<T>): T;\\r\\n\\r\\nexport declare function ɵɵdirectiveInject<T>(token: Type<T> | InjectionToken<T>, flags: InjectFlags): T;\\r\\n\\r\\n/**\\r\\n * Disables directive matching on element.\\r\\n *\\r\\n *  * Example:\\r\\n * ```\\r\\n * <my-comp my-directive>\\r\\n *   Should match component / directive.\\r\\n * </my-comp>\\r\\n * <div ngNonBindable>\\r\\n *   <!-- ɵɵdisableBindings() -->\\r\\n *   <my-comp my-directive>\\r\\n *     Should not match component / directive because we are in ngNonBindable.\\r\\n *   </my-comp>\\r\\n *   <!-- ɵɵenableBindings() -->\\r\\n * </div>\\r\\n * ```\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdisableBindings(): void;\\r\\n\\r\\n/**\\r\\n * Creates an empty element using {@link elementStart} and {@link elementEnd}\\r\\n *\\r\\n * @param index Index of the element in the data array\\r\\n * @param name Name of the DOM Node\\r\\n * @param constsIndex Index of the element in the `consts` array.\\r\\n * @param localRefs A set of local reference bindings on the element.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelement(index: number, name: string, constsIndex?: number | null, localRefs?: string[] | null): void;\\r\\n\\r\\n/**\\r\\n * Creates an empty logical container using {@link elementContainerStart}\\r\\n * and {@link elementContainerEnd}\\r\\n *\\r\\n * @param index Index of the element in the LView array\\r\\n * @param constsIndex Index of the container in the `consts` array.\\r\\n * @param localRefs A set of local reference bindings on the element.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelementContainer(index: number, constsIndex?: number | null, localRefs?: string[] | null): void;\\r\\n\\r\\n/**\\r\\n * Mark the end of the <ng-container>.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelementContainerEnd(): void;\\r\\n\\r\\n/**\\r\\n * Creates a logical container for other nodes (<ng-container>) backed by a comment node in the DOM.\\r\\n * The instruction must later be followed by `elementContainerEnd()` call.\\r\\n *\\r\\n * @param index Index of the element in the LView array\\r\\n * @param constsIndex Index of the container in the `consts` array.\\r\\n * @param localRefs A set of local reference bindings on the element.\\r\\n *\\r\\n * Even if this instruction accepts a set of attributes no actual attribute values are propagated to\\r\\n * the DOM (as a comment node can't have attributes). Attributes are here only for directive\\r\\n * matching purposes and setting initial inputs of directives.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelementContainerStart(index: number, constsIndex?: number | null, localRefs?: string[] | null): void;\\r\\n\\r\\n/**\\r\\n * Mark the end of the element.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelementEnd(): void;\\r\\n\\r\\n/**\\r\\n * Assign static attribute values to a host element.\\r\\n *\\r\\n * This instruction will assign static attribute values as well as class and style\\r\\n * values to an element within the host bindings function. Since attribute values\\r\\n * can consist of different types of values, the `attrs` array must include the values in\\r\\n * the following format:\\r\\n *\\r\\n * attrs = [\\r\\n *   // static attributes (like `title`, `name`, `id`...)\\r\\n *   attr1, value1, attr2, value,\\r\\n *\\r\\n *   // a single namespace value (like `x:id`)\\r\\n *   NAMESPACE_MARKER, namespaceUri1, name1, value1,\\r\\n *\\r\\n *   // another single namespace value (like `x:name`)\\r\\n *   NAMESPACE_MARKER, namespaceUri2, name2, value2,\\r\\n *\\r\\n *   // a series of CSS classes that will be applied to the element (no spaces)\\r\\n *   CLASSES_MARKER, class1, class2, class3,\\r\\n *\\r\\n *   // a series of CSS styles (property + value) that will be applied to the element\\r\\n *   STYLES_MARKER, prop1, value1, prop2, value2\\r\\n * ]\\r\\n *\\r\\n * All non-class and non-style attributes must be defined at the start of the list\\r\\n * first before all class and style values are set. When there is a change in value\\r\\n * type (like when classes and styles are introduced) a marker must be used to separate\\r\\n * the entries. The marker values themselves are set via entries found in the\\r\\n * [AttributeMarker] enum.\\r\\n *\\r\\n * NOTE: This instruction is meant to used from `hostBindings` function only.\\r\\n *\\r\\n * @param directive A directive instance the styling is associated with.\\r\\n * @param attrs An array of static values (attributes, classes and styles) with the correct marker\\r\\n * values.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelementHostAttrs(attrs: TAttributes): void;\\r\\n\\r\\n/**\\r\\n * Create DOM element. The instruction must later be followed by `elementEnd()` call.\\r\\n *\\r\\n * @param index Index of the element in the LView array\\r\\n * @param name Name of the DOM Node\\r\\n * @param constsIndex Index of the element in the `consts` array.\\r\\n * @param localRefs A set of local reference bindings on the element.\\r\\n *\\r\\n * Attributes and localRefs are passed as an array of strings where elements with an even index\\r\\n * hold an attribute name and elements with an odd index hold an attribute value, ex.:\\r\\n * ['id', 'warning5', 'class', 'alert']\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵelementStart(index: number, name: string, constsIndex?: number | null, localRefs?: string[] | null): void;\\r\\n\\r\\n/**\\r\\n * Marks the end of an embedded view.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵembeddedViewEnd(): void;\\r\\n\\r\\n/**\\r\\n * Marks the start of an embedded view.\\r\\n *\\r\\n * @param viewBlockId The ID of this view\\r\\n * @return boolean Whether or not this view is in creation mode\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵembeddedViewStart(viewBlockId: number, decls: number, vars: number): ɵRenderFlags;\\r\\n\\r\\n/**\\r\\n * Enables directive matching on elements.\\r\\n *\\r\\n *  * Example:\\r\\n * ```\\r\\n * <my-comp my-directive>\\r\\n *   Should match component / directive.\\r\\n * </my-comp>\\r\\n * <div ngNonBindable>\\r\\n *   <!-- ɵɵdisableBindings() -->\\r\\n *   <my-comp my-directive>\\r\\n *     Should not match component / directive because we are in ngNonBindable.\\r\\n *   </my-comp>\\r\\n *   <!-- ɵɵenableBindings() -->\\r\\n * </div>\\r\\n * ```\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵenableBindings(): void;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare type ɵɵFactoryDef<T> = () => T;\\r\\n\\r\\n/**\\r\\n * Returns the current OpaqueViewState instance.\\r\\n *\\r\\n * Used in conjunction with the restoreView() instruction to save a snapshot\\r\\n * of the current view and restore it when listeners are invoked. This allows\\r\\n * walking the declaration view tree in listeners to get vars from parent views.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵgetCurrentView(): OpaqueViewState;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵgetFactoryOf<T>(type: Type<any>): FactoryFn<T> | null;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵgetInheritedFactory<T>(type: Type<any>): (type: Type<T>) => T;\\r\\n\\r\\n/**\\r\\n * Update a property on a host element. Only applies to native node properties, not inputs.\\r\\n *\\r\\n * Operates on the element selected by index via the {@link select} instruction.\\r\\n *\\r\\n * @param propName Name of property. Because it is going to DOM, this is not subject to\\r\\n *        renaming as part of minification.\\r\\n * @param value New value to write.\\r\\n * @param sanitizer An optional function used to sanitize the value.\\r\\n * @returns This function returns itself so that it may be chained\\r\\n * (e.g. `property('name', ctx.name)('title', ctx.title)`)\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵhostProperty<T>(propName: string, value: T, sanitizer?: SanitizerFn | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Use this instruction to create a translation block that doesn't contain any placeholder.\\r\\n * It calls both {@link i18nStart} and {@link i18nEnd} in one instruction.\\r\\n *\\r\\n * The translation `message` is the value which is locale specific. The translation string may\\r\\n * contain placeholders which associate inner elements and sub-templates within the translation.\\r\\n *\\r\\n * The translation `message` placeholders are:\\r\\n * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be\\r\\n *   interpolated into. The placeholder `index` points to the expression binding index. An optional\\r\\n *   `block` that matches the sub-template in which it was declared.\\r\\n * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning\\r\\n *   and end of DOM element that were embedded in the original translation block. The placeholder\\r\\n *   `index` points to the element index in the template instructions set. An optional `block` that\\r\\n *   matches the sub-template in which it was declared.\\r\\n * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be\\r\\n *   split up and translated separately in each angular template function. The `index` points to the\\r\\n *   `template` instruction index. A `block` that matches the sub-template in which it was declared.\\r\\n *\\r\\n * @param index A unique index of the translation in the static block.\\r\\n * @param message The translation message.\\r\\n * @param subTemplateIndex Optional sub-template index in the `message`.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18n(index: number, message: string, subTemplateIndex?: number): void;\\r\\n\\r\\n/**\\r\\n * Updates a translation block or an i18n attribute when the bindings have changed.\\r\\n *\\r\\n * @param index Index of either {@link i18nStart} (translation block) or {@link i18nAttributes}\\r\\n * (i18n attribute) on which it should update the content.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18nApply(index: number): void;\\r\\n\\r\\n/**\\r\\n * Marks a list of attributes as translatable.\\r\\n *\\r\\n * @param index A unique index in the static block\\r\\n * @param values\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18nAttributes(index: number, values: string[]): void;\\r\\n\\r\\n/**\\r\\n * Translates a translation block marked by `i18nStart` and `i18nEnd`. It inserts the text/ICU nodes\\r\\n * into the render tree, moves the placeholder nodes and removes the deleted nodes.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18nEnd(): void;\\r\\n\\r\\n/**\\r\\n * Stores the values of the bindings during each update cycle in order to determine if we need to\\r\\n * update the translated nodes.\\r\\n *\\r\\n * @param value The binding's value\\r\\n * @returns This function returns itself so that it may be chained\\r\\n * (e.g. `i18nExp(ctx.name)(ctx.title)`)\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18nExp<T>(value: T): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Handles message string post-processing for internationalization.\\r\\n *\\r\\n * Handles message string post-processing by transforming it from intermediate\\r\\n * format (that might contain some markers that we need to replace) to the final\\r\\n * form, consumable by i18nStart instruction. Post processing steps include:\\r\\n *\\r\\n * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])\\r\\n * 2. Replace all ICU vars (like \\\"VAR_PLURAL\\\")\\r\\n * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\\r\\n * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)\\r\\n *    in case multiple ICUs have the same placeholder name\\r\\n *\\r\\n * @param message Raw translation string for post processing\\r\\n * @param replacements Set of replacements that should be applied\\r\\n *\\r\\n * @returns Transformed string that can be consumed by i18nStart instruction\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18nPostprocess(message: string, replacements?: {\\r\\n    [key: string]: (string | string[]);\\r\\n}): string;\\r\\n\\r\\n/**\\r\\n * Marks a block of text as translatable.\\r\\n *\\r\\n * The instructions `i18nStart` and `i18nEnd` mark the translation block in the template.\\r\\n * The translation `message` is the value which is locale specific. The translation string may\\r\\n * contain placeholders which associate inner elements and sub-templates within the translation.\\r\\n *\\r\\n * The translation `message` placeholders are:\\r\\n * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be\\r\\n *   interpolated into. The placeholder `index` points to the expression binding index. An optional\\r\\n *   `block` that matches the sub-template in which it was declared.\\r\\n * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning\\r\\n *   and end of DOM element that were embedded in the original translation block. The placeholder\\r\\n *   `index` points to the element index in the template instructions set. An optional `block` that\\r\\n *   matches the sub-template in which it was declared.\\r\\n * - `�!{index}(:{block})�`/`�/!{index}(:{block})�`: *Projection Placeholder*:  Marks the\\r\\n *   beginning and end of <ng-content> that was embedded in the original translation block.\\r\\n *   The placeholder `index` points to the element index in the template instructions set.\\r\\n *   An optional `block` that matches the sub-template in which it was declared.\\r\\n * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be\\r\\n *   split up and translated separately in each angular template function. The `index` points to the\\r\\n *   `template` instruction index. A `block` that matches the sub-template in which it was declared.\\r\\n *\\r\\n * @param index A unique index of the translation in the static block.\\r\\n * @param message The translation message.\\r\\n * @param subTemplateIndex Optional sub-template index in the `message`.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵi18nStart(index: number, message: string, subTemplateIndex?: number): void;\\r\\n\\r\\n/**\\r\\n * Merges the definition from a super class to a sub class.\\r\\n * @param definition The definition that is a SubClass of another directive of component\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵInheritDefinitionFeature(definition: ɵDirectiveDef<any> | ɵComponentDef<any>): void;\\r\\n\\r\\n/**\\r\\n * Generated instruction: Injects a token from the currently active injector.\\r\\n *\\r\\n * Must be used in the context of a factory function such as one defined for an\\r\\n * `InjectionToken`. Throws an error if not called from such a context.\\r\\n *\\r\\n * (Additional documentation moved to `inject`, as it is the public API, and an alias for this instruction)\\r\\n *\\r\\n * @see inject\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵinject<T>(token: Type<T> | InjectionToken<T>): T;\\r\\n\\r\\nexport declare function ɵɵinject<T>(token: Type<T> | InjectionToken<T>, flags?: InjectFlags): T | null;\\r\\n\\r\\n/**\\r\\n * Information about how a type or `InjectionToken` interfaces with the DI system.\\r\\n *\\r\\n * At a minimum, this includes a `factory` which defines how to create the given type `T`, possibly\\r\\n * requesting injection of other types if necessary.\\r\\n *\\r\\n * Optionally, a `providedIn` parameter specifies that the given type belongs to a particular\\r\\n * `InjectorDef`, `NgModule`, or a special scope (e.g. `'root'`). A value of `null` indicates\\r\\n * that the injectable does not belong to any scope.\\r\\n *\\r\\n * NOTE: This is a private type and should not be exported\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵɵInjectableDef<T> {\\r\\n    /**\\r\\n     * Specifies that the given type belongs to a particular injector:\\r\\n     * - `InjectorType` such as `NgModule`,\\r\\n     * - `'root'` the root injector\\r\\n     * - `'any'` all injectors.\\r\\n     * - `null`, does not belong to any injector. Must be explicitly listed in the injector\\r\\n     *   `providers`.\\r\\n     */\\r\\n    providedIn: InjectorType<any> | 'root' | 'platform' | 'any' | null;\\r\\n    /**\\r\\n     * The token to which this definition belongs.\\r\\n     *\\r\\n     * Note that this may not be the same as the type that the `factory` will create.\\r\\n     */\\r\\n    token: unknown;\\r\\n    /**\\r\\n     * Factory method to execute to create an instance of the injectable.\\r\\n     */\\r\\n    factory: (t?: Type<any>) => T;\\r\\n    /**\\r\\n     * In a case of no explicit injector, a location where the instance of the injectable is stored.\\r\\n     */\\r\\n    value: T | undefined;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Facade for the attribute injection from DI.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵinjectAttribute(attrNameToInject: string): string | null;\\r\\n\\r\\n/**\\r\\n * Information about the providers to be included in an `Injector` as well as how the given type\\r\\n * which carries the information should be created by the DI system.\\r\\n *\\r\\n * An `InjectorDef` can import other types which have `InjectorDefs`, forming a deep nested\\r\\n * structure of providers with a defined priority (identically to how `NgModule`s also have\\r\\n * an import/dependency structure).\\r\\n *\\r\\n * NOTE: This is a private type and should not be exported\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵɵInjectorDef<T> {\\r\\n    factory: () => T;\\r\\n    providers: (Type<any> | ValueProvider | ExistingProvider | FactoryProvider | ConstructorProvider | StaticClassProvider | ClassProvider | any[])[];\\r\\n    imports: (InjectorType<any> | InjectorTypeWithProviders<any>)[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns the appropriate `ChangeDetectorRef` for a pipe.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵinjectPipeChangeDetectorRef(flags?: InjectFlags): ChangeDetectorRef | null;\\r\\n\\r\\n/**\\r\\n * Adds an event listener to the current node.\\r\\n *\\r\\n * If an output exists on one of the node's directives, it also subscribes to the output\\r\\n * and saves the subscription for later cleanup.\\r\\n *\\r\\n * @param eventName Name of the event\\r\\n * @param listenerFn The function to be called when event emits\\r\\n * @param useCapture Whether or not to use capture in event listener\\r\\n * @param eventTargetResolver Function that returns global target information in case this listener\\r\\n * should be attached to a global object like window, document or body\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵlistener(eventName: string, listenerFn: (e?: any) => any, useCapture?: boolean, eventTargetResolver?: GlobalTargetResolver): void;\\r\\n\\r\\n/**\\r\\n * Loads a QueryList corresponding to the current view or content query.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵloadQuery<T>(): QueryList<T>;\\r\\n\\r\\n/**\\r\\n * Sets the namespace used to create elements to `null`, which forces element creation to use\\r\\n * `createElement` rather than `createElementNS`.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵnamespaceHTML(): void;\\r\\n\\r\\n/**\\r\\n * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵnamespaceMathML(): void;\\r\\n\\r\\n/**\\r\\n * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵnamespaceSVG(): void;\\r\\n\\r\\n/**\\r\\n * Retrieves a context at the level specified and saves it as the global, contextViewData.\\r\\n * Will get the next level up if level is not specified.\\r\\n *\\r\\n * This is used to save contexts of parent views so they can be bound in embedded views, or\\r\\n * in conjunction with reference() to bind a ref from a parent view.\\r\\n *\\r\\n * @param level The relative level of the view from which to grab context compared to contextVewData\\r\\n * @returns context\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵnextContext<T = any>(level?: number): T;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ɵɵNgModuleDefWithMeta<T, Declarations, Imports, Exports> = ɵNgModuleDef<T>;\\r\\n\\r\\n/**\\r\\n * The NgOnChangesFeature decorates a component with support for the ngOnChanges\\r\\n * lifecycle hook, so it should be included in any component that implements\\r\\n * that hook.\\r\\n *\\r\\n * If the component or directive uses inheritance, the NgOnChangesFeature MUST\\r\\n * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise\\r\\n * inherited properties will not be propagated to the ngOnChanges lifecycle\\r\\n * hook.\\r\\n *\\r\\n * Example usage:\\r\\n *\\r\\n * ```\\r\\n * static ɵcmp = defineComponent({\\r\\n *   ...\\r\\n *   inputs: {name: 'publicName'},\\r\\n *   features: [NgOnChangesFeature()]\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵNgOnChangesFeature<T>(): DirectiveDefFeature;\\r\\n\\r\\n\\r\\n/**\\r\\n * Create a pipe.\\r\\n *\\r\\n * @param index Pipe index where the pipe will be stored.\\r\\n * @param pipeName The name of the pipe\\r\\n * @returns T the instance of the pipe.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpipe(index: number, pipeName: string): any;\\r\\n\\r\\n/**\\r\\n * Invokes a pipe with 1 arguments.\\r\\n *\\r\\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\\r\\n * the pipe only when an input to the pipe changes.\\r\\n *\\r\\n * @param index Pipe index where the pipe was stored on creation.\\r\\n * @param slotOffset the offset in the reserved slot space\\r\\n * @param v1 1st argument to {@link PipeTransform#transform}.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpipeBind1(index: number, slotOffset: number, v1: any): any;\\r\\n\\r\\n/**\\r\\n * Invokes a pipe with 2 arguments.\\r\\n *\\r\\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\\r\\n * the pipe only when an input to the pipe changes.\\r\\n *\\r\\n * @param index Pipe index where the pipe was stored on creation.\\r\\n * @param slotOffset the offset in the reserved slot space\\r\\n * @param v1 1st argument to {@link PipeTransform#transform}.\\r\\n * @param v2 2nd argument to {@link PipeTransform#transform}.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpipeBind2(index: number, slotOffset: number, v1: any, v2: any): any;\\r\\n\\r\\n/**\\r\\n * Invokes a pipe with 3 arguments.\\r\\n *\\r\\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\\r\\n * the pipe only when an input to the pipe changes.\\r\\n *\\r\\n * @param index Pipe index where the pipe was stored on creation.\\r\\n * @param slotOffset the offset in the reserved slot space\\r\\n * @param v1 1st argument to {@link PipeTransform#transform}.\\r\\n * @param v2 2nd argument to {@link PipeTransform#transform}.\\r\\n * @param v3 4rd argument to {@link PipeTransform#transform}.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpipeBind3(index: number, slotOffset: number, v1: any, v2: any, v3: any): any;\\r\\n\\r\\n/**\\r\\n * Invokes a pipe with 4 arguments.\\r\\n *\\r\\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\\r\\n * the pipe only when an input to the pipe changes.\\r\\n *\\r\\n * @param index Pipe index where the pipe was stored on creation.\\r\\n * @param slotOffset the offset in the reserved slot space\\r\\n * @param v1 1st argument to {@link PipeTransform#transform}.\\r\\n * @param v2 2nd argument to {@link PipeTransform#transform}.\\r\\n * @param v3 3rd argument to {@link PipeTransform#transform}.\\r\\n * @param v4 4th argument to {@link PipeTransform#transform}.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpipeBind4(index: number, slotOffset: number, v1: any, v2: any, v3: any, v4: any): any;\\r\\n\\r\\n/**\\r\\n * Invokes a pipe with variable number of arguments.\\r\\n *\\r\\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\\r\\n * the pipe only when an input to the pipe changes.\\r\\n *\\r\\n * @param index Pipe index where the pipe was stored on creation.\\r\\n * @param slotOffset the offset in the reserved slot space\\r\\n * @param values Array of arguments to pass to {@link PipeTransform#transform} method.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpipeBindV(index: number, slotOffset: number, values: [any, ...any[]]): any;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare type ɵɵPipeDefWithMeta<T, Name extends string> = ɵPipeDef<T>;\\r\\n\\r\\n/**\\r\\n * Inserts previously re-distributed projected nodes. This instruction must be preceded by a call\\r\\n * to the projectionDef instruction.\\r\\n *\\r\\n * @param nodeIndex\\r\\n * @param selectorIndex:\\r\\n *        - 0 when the selector is `*` (or unspecified as this is the default value),\\r\\n *        - 1 based index of the selector from the {@link projectionDef}\\r\\n *\\r\\n * @codeGenApi\\r\\n*/\\r\\nexport declare function ɵɵprojection(nodeIndex: number, selectorIndex?: number, attrs?: TAttributes): void;\\r\\n\\r\\n/**\\r\\n * Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.\\r\\n * It takes all the selectors from the entire component's template and decides where\\r\\n * each projected node belongs (it re-distributes nodes among \\\"buckets\\\" where each \\\"bucket\\\" is\\r\\n * backed by a selector).\\r\\n *\\r\\n * This function requires CSS selectors to be provided in 2 forms: parsed (by a compiler) and text,\\r\\n * un-parsed form.\\r\\n *\\r\\n * The parsed form is needed for efficient matching of a node against a given CSS selector.\\r\\n * The un-parsed, textual form is needed for support of the ngProjectAs attribute.\\r\\n *\\r\\n * Having a CSS selector in 2 different formats is not ideal, but alternatives have even more\\r\\n * drawbacks:\\r\\n * - having only a textual form would require runtime parsing of CSS selectors;\\r\\n * - we can't have only a parsed as we can't re-construct textual form from it (as entered by a\\r\\n * template author).\\r\\n *\\r\\n * @param projectionSlots? A collection of projection slots. A projection slot can be based\\r\\n *        on a parsed CSS selectors or set to the wildcard selector (\\\"*\\\") in order to match\\r\\n *        all nodes which do not match any selector. If not specified, a single wildcard\\r\\n *        selector projection slot will be defined.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵprojectionDef(projectionSlots?: ProjectionSlots): void;\\r\\n\\r\\n/**\\r\\n * Update a property on a selected element.\\r\\n *\\r\\n * Operates on the element selected by index via the {@link select} instruction.\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled\\r\\n *\\r\\n * @param propName Name of property. Because it is going to DOM, this is not subject to\\r\\n *        renaming as part of minification.\\r\\n * @param value New value to write.\\r\\n * @param sanitizer An optional function used to sanitize the value.\\r\\n * @returns This function returns itself so that it may be chained\\r\\n * (e.g. `property('name', ctx.name)('title', ctx.title)`)\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵproperty<T>(propName: string, value: T, sanitizer?: SanitizerFn | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with a lone bound value\\r\\n *\\r\\n * Used when the value passed to a property has 1 interpolated value in it, an no additional text\\r\\n * surrounds that interpolated value:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"{{v0}}\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate('title', v0);\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate(propName: string, v0: any, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with single bound value surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 1 interpolated value in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate1('title', 'prefix', v0, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate1(propName: string, prefix: string, v0: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 2 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 2 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate2(propName: string, prefix: string, v0: any, i0: string, v1: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 3 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 3 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}-{{v2}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate3(\\r\\n * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate3(propName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 4 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 4 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate4(\\r\\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate4(propName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 5 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 5 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate5(\\r\\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate5(propName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 6 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 6 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate6(\\r\\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate6(propName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 7 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 7 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate7(\\r\\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate7(propName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated property on an element with 8 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 8 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolate8(\\r\\n *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param i6 Static value used for concatenation only.\\r\\n * @param v7 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolate8(propName: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, i6: string, v7: any, suffix: string, sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Update an interpolated property on an element with 8 or more bound values surrounded by text.\\r\\n *\\r\\n * Used when the number of interpolated values exceeds 7.\\r\\n *\\r\\n * ```html\\r\\n * <div\\r\\n *  title=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is::\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵpropertyInterpolateV(\\r\\n *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\\r\\n *  'suffix']);\\r\\n * ```\\r\\n *\\r\\n * If the property name also exists as an input property on one of the element's directives,\\r\\n * the component property will be set instead of the element property. This check must\\r\\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\\r\\n *\\r\\n * @param propName The name of the property to update.\\r\\n * @param values The a collection of values and the strings inbetween those values, beginning with a\\r\\n * string prefix and ending with a string suffix.\\r\\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\\r\\n * @param sanitizer An optional sanitizer function\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpropertyInterpolateV(propName: string, values: any[], sanitizer?: SanitizerFn): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * This feature resolves the providers of a directive (or component),\\r\\n * and publish them into the DI system, making it visible to others for injection.\\r\\n *\\r\\n * For example:\\r\\n * ```ts\\r\\n * class ComponentWithProviders {\\r\\n *   constructor(private greeter: GreeterDE) {}\\r\\n *\\r\\n *   static ɵcmp = defineComponent({\\r\\n *     type: ComponentWithProviders,\\r\\n *     selectors: [['component-with-providers']],\\r\\n *    factory: () => new ComponentWithProviders(directiveInject(GreeterDE as any)),\\r\\n *    decls: 1,\\r\\n *    vars: 1,\\r\\n *    template: function(fs: RenderFlags, ctx: ComponentWithProviders) {\\r\\n *      if (fs & RenderFlags.Create) {\\r\\n *        ɵɵtext(0);\\r\\n *      }\\r\\n *      if (fs & RenderFlags.Update) {\\r\\n *        ɵɵtextInterpolate(ctx.greeter.greet());\\r\\n *      }\\r\\n *    },\\r\\n *    features: [ProvidersFeature([GreeterDE])]\\r\\n *  });\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @param definition\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵProvidersFeature<T>(providers: Provider[], viewProviders?: Provider[]): (definition: ɵDirectiveDef<T>) => void;\\r\\n\\r\\n\\r\\n/**\\r\\n * Bindings for pure functions are stored after regular bindings.\\r\\n *\\r\\n * |-------decls------|---------vars---------|                 |----- hostVars (dir1) ------|\\r\\n * ------------------------------------------------------------------------------------------\\r\\n * | nodes/refs/pipes | bindings | fn slots  | injector | dir1 | host bindings | host slots |\\r\\n * ------------------------------------------------------------------------------------------\\r\\n *                    ^                      ^\\r\\n *      TView.bindingStartIndex      TView.expandoStartIndex\\r\\n *\\r\\n * Pure function instructions are given an offset from the binding root. Adding the offset to the\\r\\n * binding root gives the first index where the bindings are stored. In component views, the binding\\r\\n * root is the bindingStartIndex. In host bindings, the binding root is the expandoStartIndex +\\r\\n * any directive instances + any hostVars in directives evaluated before it.\\r\\n *\\r\\n * See VIEW_DATA.md for more information about host binding resolution.\\r\\n */\\r\\n/**\\r\\n * If the value hasn't been saved, calls the pure function to store and return the\\r\\n * value. If it has been saved, returns the saved value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn Function that returns a value\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction0<T>(slotOffset: number, pureFn: () => T, thisArg?: any): T;\\r\\n\\r\\n/**\\r\\n * If the value of the provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if the value has not changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn Function that returns an updated value\\r\\n * @param exp Updated expression value\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction1(slotOffset: number, pureFn: (v: any) => any, exp: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction2(slotOffset: number, pureFn: (v1: any, v2: any) => any, exp1: any, exp2: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param exp3\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction3(slotOffset: number, pureFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param exp3\\r\\n * @param exp4\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction4(slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param exp3\\r\\n * @param exp4\\r\\n * @param exp5\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction5(slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param exp3\\r\\n * @param exp4\\r\\n * @param exp5\\r\\n * @param exp6\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction6(slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param exp3\\r\\n * @param exp4\\r\\n * @param exp5\\r\\n * @param exp6\\r\\n * @param exp7\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction7(slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn\\r\\n * @param exp1\\r\\n * @param exp2\\r\\n * @param exp3\\r\\n * @param exp4\\r\\n * @param exp5\\r\\n * @param exp6\\r\\n * @param exp7\\r\\n * @param exp8\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunction8(slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, exp8: any, thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * pureFunction instruction that can support any number of bindings.\\r\\n *\\r\\n * If the value of any provided exp has changed, calls the pure function to return\\r\\n * an updated value. Or if no values have changed, returns cached value.\\r\\n *\\r\\n * @param slotOffset the offset from binding root to the reserved slot\\r\\n * @param pureFn A pure function that takes binding values and builds an object or array\\r\\n * containing those values.\\r\\n * @param exps An array of binding values\\r\\n * @param thisArg Optional calling context of pureFn\\r\\n * @returns Updated or cached value\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵpureFunctionV(slotOffset: number, pureFn: (...v: any[]) => any, exps: any[], thisArg?: any): any;\\r\\n\\r\\n/**\\r\\n * Refreshes a query by combining matches from all active views and removing matches from deleted\\r\\n * views.\\r\\n *\\r\\n * @returns `true` if a query got dirty during change detection or if this is a static query\\r\\n * resolving in creation mode, `false` otherwise.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵqueryRefresh(queryList: QueryList<any>): boolean;\\r\\n\\r\\n/**\\r\\n * Retrieves a local reference from the current contextViewData.\\r\\n *\\r\\n * If the reference to retrieve is in a parent view, this instruction is used in conjunction\\r\\n * with a nextContext() call, which walks up the tree and updates the contextViewData instance.\\r\\n *\\r\\n * @param index The index of the local ref in contextViewData.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵreference<T>(index: number): T;\\r\\n\\r\\n/**\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵresolveBody(element: RElement & {\\r\\n    ownerDocument: Document;\\r\\n}): {\\r\\n    name: string;\\r\\n    target: HTMLElement;\\r\\n};\\r\\n\\r\\n/**\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵresolveDocument(element: RElement & {\\r\\n    ownerDocument: Document;\\r\\n}): {\\r\\n    name: string;\\r\\n    target: Document;\\r\\n};\\r\\n\\r\\n/**\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵresolveWindow(element: RElement & {\\r\\n    ownerDocument: Document;\\r\\n}): {\\r\\n    name: string;\\r\\n    target: Window | null;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Restores `contextViewData` to the given OpaqueViewState instance.\\r\\n *\\r\\n * Used in conjunction with the getCurrentView() instruction to save a snapshot\\r\\n * of the current view and restore it when listeners are invoked. This allows\\r\\n * walking the declaration view tree in listeners to get vars from parent views.\\r\\n *\\r\\n * @param viewToRestore The OpaqueViewState instance to restore.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵrestoreView(viewToRestore: OpaqueViewState): void;\\r\\n\\r\\n/**\\r\\n * An `html` sanitizer which converts untrusted `html` **string** into trusted string by removing\\r\\n * dangerous content.\\r\\n *\\r\\n * This method parses the `html` and locates potentially dangerous content (such as urls and\\r\\n * javascript) and removes it.\\r\\n *\\r\\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustHtml}.\\r\\n *\\r\\n * @param unsafeHtml untrusted `html`, typically from the user.\\r\\n * @returns `html` string which is safe to display to user, because all of the dangerous javascript\\r\\n * and urls have been removed.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵsanitizeHtml(unsafeHtml: any): string;\\r\\n\\r\\n/**\\r\\n * A `url` sanitizer which only lets trusted `url`s through.\\r\\n *\\r\\n * This passes only `url`s marked trusted by calling {@link bypassSanitizationTrustResourceUrl}.\\r\\n *\\r\\n * @param unsafeResourceUrl untrusted `url`, typically from the user.\\r\\n * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because\\r\\n * only trusted `url`s have been allowed to pass.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵsanitizeResourceUrl(unsafeResourceUrl: any): string;\\r\\n\\r\\n/**\\r\\n * A `script` sanitizer which only lets trusted javascript through.\\r\\n *\\r\\n * This passes only `script`s marked trusted by calling {@link\\r\\n * bypassSanitizationTrustScript}.\\r\\n *\\r\\n * @param unsafeScript untrusted `script`, typically from the user.\\r\\n * @returns `url` string which is safe to bind to the `<script>` element such as `<img src>`,\\r\\n * because only trusted `scripts` have been allowed to pass.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵsanitizeScript(unsafeScript: any): string;\\r\\n\\r\\n/**\\r\\n * A `style` sanitizer which converts untrusted `style` **string** into trusted string by removing\\r\\n * dangerous content.\\r\\n *\\r\\n * This method parses the `style` and locates potentially dangerous content (such as urls and\\r\\n * javascript) and removes it.\\r\\n *\\r\\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustStyle}.\\r\\n *\\r\\n * @param unsafeStyle untrusted `style`, typically from the user.\\r\\n * @returns `style` string which is safe to bind to the `style` properties, because all of the\\r\\n * dangerous javascript and urls have been removed.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵsanitizeStyle(unsafeStyle: any): string;\\r\\n\\r\\n/**\\r\\n * A `url` sanitizer which converts untrusted `url` **string** into trusted string by removing\\r\\n * dangerous\\r\\n * content.\\r\\n *\\r\\n * This method parses the `url` and locates potentially dangerous content (such as javascript) and\\r\\n * removes it.\\r\\n *\\r\\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustUrl}.\\r\\n *\\r\\n * @param unsafeUrl untrusted `url`, typically from the user.\\r\\n * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because\\r\\n * all of the dangerous javascript has been removed.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵsanitizeUrl(unsafeUrl: any): string;\\r\\n\\r\\n/**\\r\\n * Sanitizes URL, selecting sanitizer function based on tag and property names.\\r\\n *\\r\\n * This function is used in case we can't define security context at compile time, when only prop\\r\\n * name is available. This happens when we generate host bindings for Directives/Components. The\\r\\n * host element is unknown at compile time, so we defer calculation of specific sanitizer to\\r\\n * runtime.\\r\\n *\\r\\n * @param unsafeUrl untrusted `url`, typically from the user.\\r\\n * @param tag target element tag name.\\r\\n * @param prop name of the property that contains the value.\\r\\n * @returns `url` string which is safe to bind.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵsanitizeUrlOrResourceUrl(unsafeUrl: any, tag: string, prop: string): any;\\r\\n\\r\\n/**\\r\\n * Selects an element for later binding instructions.\\r\\n * @deprecated No longer being generated, but still used in unit tests.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵselect(index: number): void;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵsetComponentScope(type: ɵComponentType<any>, directives: Type<any>[], pipes: Type<any>[]): void;\\r\\n\\r\\n/**\\r\\n * Adds the module metadata that is necessary to compute the module's transitive scope to an\\r\\n * existing module definition.\\r\\n *\\r\\n * Scope metadata of modules is not used in production builds, so calls to this function can be\\r\\n * marked pure to tree-shake it from the bundle, allowing for all referenced declarations\\r\\n * to become eligible for tree-shaking as well.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵsetNgModuleScope(type: any, scope: {\\r\\n    /** List of components, directives, and pipes declared by this module. */\\r\\n    declarations?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of modules or `ModuleWithProviders` imported by this module. */\\r\\n    imports?: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * List of modules, `ModuleWithProviders`, components, directives, or pipes exported by this\\r\\n     * module.\\r\\n     */\\r\\n    exports?: Type<any>[] | (() => Type<any>[]);\\r\\n}): void;\\r\\n\\r\\n/**\\r\\n * Registers a QueryList, associated with a static content query, for later refresh\\r\\n * (part of a view refresh).\\r\\n *\\r\\n * @param directiveIndex Current directive index\\r\\n * @param predicate The type for which the query will search\\r\\n * @param descend Whether or not to descend into children\\r\\n * @param read What to save in the query\\r\\n * @returns QueryList<T>\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstaticContentQuery<T>(directiveIndex: number, predicate: Type<any> | string[], descend: boolean, read?: any): void;\\r\\n\\r\\n/**\\r\\n * Creates new QueryList for a static view query.\\r\\n *\\r\\n * @param predicate The type for which the query will search\\r\\n * @param descend Whether or not to descend into children\\r\\n * @param read What to save in the query\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstaticViewQuery<T>(predicate: Type<any> | string[], descend: boolean, read?: any): void;\\r\\n\\r\\n/**\\r\\n * Update style bindings using an object literal on an element.\\r\\n *\\r\\n * This instruction is meant to apply styling via the `[style]=\\\"exp\\\"` template bindings.\\r\\n * When styles are applied to the element they will then be updated with respect to\\r\\n * any styles/classes set via `styleProp`. If any styles are set to falsy\\r\\n * then they will be removed from the element.\\r\\n *\\r\\n * Note that the styling instruction will not be applied until `stylingApply` is called.\\r\\n *\\r\\n * @param styles A key/value style map of the styles that will be applied to the given element.\\r\\n *        Any missing styles (that have already been applied to the element beforehand) will be\\r\\n *        removed (unset) from the element's styling.\\r\\n *\\r\\n * Note that this will apply the provided styleMap value to the host element if this function\\r\\n * is called within a host binding.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstyleMap(styles: {\\r\\n    [styleName: string]: any;\\r\\n} | ɵNO_CHANGE | null): void;\\r\\n\\r\\n/**\\r\\n * Update a style binding on an element with the provided value.\\r\\n *\\r\\n * If the style value is falsy then it will be removed from the element\\r\\n * (or assigned a different value depending if there are any styles placed\\r\\n * on the element with `styleMap` or any static styles that are\\r\\n * present from when the element was created with `styling`).\\r\\n *\\r\\n * Note that the styling element is updated as part of `stylingApply`.\\r\\n *\\r\\n * @param prop A valid CSS property.\\r\\n * @param value New value to write (`null` or an empty string to remove).\\r\\n * @param suffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n *        Note that when a suffix is provided then the underlying sanitizer will\\r\\n *        be ignored.\\r\\n *\\r\\n * Note that this will apply the provided style value to the host element if this function is called\\r\\n * within a host binding function.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstyleProp(prop: string, value: string | number | ɵSafeValue | null, suffix?: string | null): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with single bound value surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 1 interpolated value in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate1(0, 'prefix', v0, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate1(prop: string, prefix: string, v0: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 2 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 2 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate2(0, 'prefix', v0, '-', v1, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate2(prop: string, prefix: string, v0: any, i0: string, v1: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 3 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 3 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate3(0, 'prefix', v0, '-', v1, '-', v2, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate3(prop: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 4 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 4 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate4(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate4(prop: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 5 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 5 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate5(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate5(prop: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 6 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 6 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate6(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate6(prop: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 7 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 7 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate7(\\r\\n *    0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate7(prop: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update an interpolated style property on an element with 8 bound values surrounded by text.\\r\\n *\\r\\n * Used when the value passed to a property has 8 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\\\"></div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolate8(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6,\\r\\n * '-', v7, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`.\\r\\n * @param prefix Static value used for concatenation only.\\r\\n * @param v0 Value checked for change.\\r\\n * @param i0 Static value used for concatenation only.\\r\\n * @param v1 Value checked for change.\\r\\n * @param i1 Static value used for concatenation only.\\r\\n * @param v2 Value checked for change.\\r\\n * @param i2 Static value used for concatenation only.\\r\\n * @param v3 Value checked for change.\\r\\n * @param i3 Static value used for concatenation only.\\r\\n * @param v4 Value checked for change.\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change.\\r\\n * @param i5 Static value used for concatenation only.\\r\\n * @param v6 Value checked for change.\\r\\n * @param i6 Static value used for concatenation only.\\r\\n * @param v7 Value checked for change.\\r\\n * @param suffix Static value used for concatenation only.\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolate8(prop: string, prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, i6: string, v7: any, suffix: string, valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Update an interpolated style property on an element with 8 or more bound values surrounded by\\r\\n * text.\\r\\n *\\r\\n * Used when the number of interpolated values exceeds 7.\\r\\n *\\r\\n * ```html\\r\\n * <div\\r\\n *  style.color=\\\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\\\">\\r\\n * </div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵstylePropInterpolateV(\\r\\n *  0, ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\\r\\n *  'suffix']);\\r\\n * ```\\r\\n *\\r\\n * @param styleIndex Index of style to update. This index value refers to the\\r\\n *        index of the style in the style bindings array that was passed into\\r\\n *        `styling`..\\r\\n * @param values The a collection of values and the strings in-between those values, beginning with\\r\\n * a string prefix and ending with a string suffix.\\r\\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\\r\\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstylePropInterpolateV(prop: string, values: any[], valueSuffix?: string | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * --------\\r\\n *\\r\\n * This file contains the core logic for how styling instructions are processed in Angular.\\r\\n *\\r\\n * To learn more about the algorithm see `TStylingContext`.\\r\\n *\\r\\n * --------\\r\\n */\\r\\n/**\\r\\n * Sets the current style sanitizer function which will then be used\\r\\n * within all follow-up prop and map-based style binding instructions\\r\\n * for the given element.\\r\\n *\\r\\n * Note that once styling has been applied to the element (i.e. once\\r\\n * `advance(n)` is executed or the hostBindings/template function exits)\\r\\n * then the active `sanitizerFn` will be set to `null`. This means that\\r\\n * once styling is applied to another element then a another call to\\r\\n * `styleSanitizer` will need to be made.\\r\\n *\\r\\n * @param sanitizerFn The sanitization function that will be used to\\r\\n *       process style prop/value entries.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵstyleSanitizer(sanitizer: StyleSanitizeFn | null): void;\\r\\n\\r\\n/**\\r\\n * Creates an LContainer for an ng-template (dynamically-inserted view), e.g.\\r\\n *\\r\\n * <ng-template #foo>\\r\\n *    <div></div>\\r\\n * </ng-template>\\r\\n *\\r\\n * @param index The index of the container in the data array\\r\\n * @param templateFn Inline template\\r\\n * @param decls The number of nodes, local refs, and pipes for this template\\r\\n * @param vars The number of bindings for this template\\r\\n * @param tagName The name of the container element, if applicable\\r\\n * @param constsIndex Index of template in the `consts` array.\\r\\n * @param localRefs A set of local reference bindings on the element.\\r\\n * @param localRefExtractor A function which extracts local-refs values from the template.\\r\\n *        Defaults to the current element associated with the local-ref.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtemplate(index: number, templateFn: ComponentTemplate<any> | null, decls: number, vars: number, tagName?: string | null, constsIndex?: number | null, localRefs?: string[] | null, localRefExtractor?: LocalRefExtractor): void;\\r\\n\\r\\n/**\\r\\n * Retrieves `TemplateRef` instance from `Injector` when a local reference is placed on the\\r\\n * `<ng-template>` element.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: ɵangular_packages_core_core_bm): TemplateRef<unknown> | null;\\r\\n\\r\\n/**\\r\\n * Create static text node\\r\\n *\\r\\n * @param index Index of the node in the data array\\r\\n * @param value Static string value to write.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtext(index: number, value?: string): void;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with a lone bound value\\r\\n *\\r\\n * Used when a text node has 1 interpolated value in it, an no additional text\\r\\n * surrounds that interpolated value:\\r\\n *\\r\\n * ```html\\r\\n * <div>{{v0}}</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate(v0);\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate(v0: any): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with single bound value surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 1 interpolated value in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate1('prefix', v0, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate1(prefix: string, v0: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 2 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 2 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate2('prefix', v0, '-', v1, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate2(prefix: string, v0: any, i0: string, v1: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 3 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 3 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate3(\\r\\n * 'prefix', v0, '-', v1, '-', v2, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate3(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 4 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 4 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate4(\\r\\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see ɵɵtextInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate4(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 5 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 5 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate5(\\r\\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate5(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 6 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 6 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate6(\\r\\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\\r\\n * ```\\r\\n *\\r\\n * @param i4 Static value used for concatenation only.\\r\\n * @param v5 Value checked for change. @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate6(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 7 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 7 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate7(\\r\\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate7(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Update text content with 8 bound values surrounded by other text.\\r\\n *\\r\\n * Used when a text node has 8 interpolated values in it:\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolate8(\\r\\n *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\\r\\n * ```\\r\\n * @returns itself, so that it may be chained.\\r\\n * @see textInterpolateV\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolate8(prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any, i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, i6: string, v7: any, suffix: string): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Update text content with 9 or more bound values other surrounded by text.\\r\\n *\\r\\n * Used when the number of interpolated values exceeds 8.\\r\\n *\\r\\n * ```html\\r\\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix</div>\\r\\n * ```\\r\\n *\\r\\n * Its compiled representation is:\\r\\n *\\r\\n * ```ts\\r\\n * ɵɵtextInterpolateV(\\r\\n *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\\r\\n *  'suffix']);\\r\\n * ```\\r\\n *.\\r\\n * @param values The a collection of values and the strings in between those values, beginning with\\r\\n * a string prefix and ending with a string suffix.\\r\\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\\r\\n *\\r\\n * @returns itself, so that it may be chained.\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵtextInterpolateV(values: any[]): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Updates a synthetic host binding (e.g. `[@foo]`) on a component.\\r\\n *\\r\\n * This instruction is for compatibility purposes and is designed to ensure that a\\r\\n * synthetic host binding (e.g. `@HostBinding('@foo')`) properly gets rendered in\\r\\n * the component's renderer. Normally all host bindings are evaluated with the parent\\r\\n * component's renderer, but, in the case of animation @triggers, they need to be\\r\\n * evaluated with the sub component's renderer (because that's where the animation\\r\\n * triggers are defined).\\r\\n *\\r\\n * Do not use this instruction as a replacement for `elementProperty`. This instruction\\r\\n * only exists to ensure compatibility with the ViewEngine's host binding behavior.\\r\\n *\\r\\n * @param index The index of the element to update in the data array\\r\\n * @param propName Name of property. Because it is going to DOM, this is not subject to\\r\\n *        renaming as part of minification.\\r\\n * @param value New value to write.\\r\\n * @param sanitizer An optional function used to sanitize the value.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵupdateSyntheticHostBinding<T>(propName: string, value: T | ɵNO_CHANGE, sanitizer?: SanitizerFn | null): TsickleIssue1009;\\r\\n\\r\\n/**\\r\\n * Creates new QueryList, stores the reference in LView and returns QueryList.\\r\\n *\\r\\n * @param predicate The type for which the query will search\\r\\n * @param descend Whether or not to descend into children\\r\\n * @param read What to save in the query\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵviewQuery<T>(predicate: Type<any> | string[], descend: boolean, read?: any): void;\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=core.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/dynamic-queries/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/dynamic-queries\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/**\\n * Runs the dynamic queries migration for all TypeScript projects in the current CLI workspace.\\n */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/dynamic-queries/util.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/dynamic-queries/util\\\" />\\nimport * as ts from 'typescript';\\n/**\\n * Identifies the nodes that should be migrated by the dynamic\\n * queries schematic. Splits the nodes into the following categories:\\n * - `removeProperty` - queries from which we should only remove the `static` property of the\\n *  `options` parameter (e.g. `@ViewChild('child', {static: false, read: ElementRef})`).\\n * - `removeParameter` - queries from which we should drop the entire `options` parameter.\\n *  (e.g. `@ViewChild('child', {static: false})`).\\n */\\nexport declare function identifyDynamicQueryNodes(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile): {\\n    removeProperty: ts.ObjectLiteralExpression[];\\n    removeParameter: ts.CallExpression[];\\n};\\n/** Removes the `options` parameter from the call expression of a query decorator. */\\nexport declare function removeOptionsParameter(node: ts.CallExpression): ts.CallExpression;\\n/** Removes the `static` property from an object literal expression. */\\nexport declare function removeStaticFlag(node: ts.ObjectLiteralExpression): ts.ObjectLiteralExpression;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/missing-injectable/definition_collector.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/missing-injectable/definition_collector\\\" />\\nimport * as ts from 'typescript';\\nimport { NgDecorator } from '../../utils/ng_decorators';\\nexport interface ResolvedNgModule {\\n    name: string;\\n    node: ts.ClassDeclaration;\\n    decorator: NgDecorator;\\n    providersExpr: ts.Expression | null;\\n}\\nexport interface ResolvedDirective {\\n    name: string;\\n    node: ts.ClassDeclaration;\\n    decorator: NgDecorator;\\n    providersExpr: ts.Expression | null;\\n    viewProvidersExpr: ts.Expression | null;\\n}\\n/**\\n * Visitor that walks through specified TypeScript nodes and collects all\\n * found NgModule, Directive or Component definitions.\\n */\\nexport declare class NgDefinitionCollector {\\n    typeChecker: ts.TypeChecker;\\n    resolvedModules: ResolvedNgModule[];\\n    resolvedDirectives: ResolvedDirective[];\\n    constructor(typeChecker: ts.TypeChecker);\\n    visitNode(node: ts.Node): void;\\n    private visitClassDeclaration;\\n    private _visitDirectiveClass;\\n    private _visitNgModuleClass;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/missing-injectable/import_manager.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/missing-injectable/import_manager\\\" />\\nimport * as ts from 'typescript';\\nimport { UpdateRecorder } from './update_recorder';\\n/**\\n * Import manager that can be used to add TypeScript imports to given source\\n * files. The manager ensures that multiple transformations are applied properly\\n * without shifted offsets and that similar existing import declarations are re-used.\\n */\\nexport declare class ImportManager {\\n    private getUpdateRecorder;\\n    private printer;\\n    /** Map of import declarations that need to be updated to include the given symbols. */\\n    private updatedImports;\\n    /** Map of source-files and their previously used identifier names. */\\n    private usedIdentifierNames;\\n    /**\\n     * Array of previously resolved symbol imports. Cache can be re-used to return\\n     * the same identifier without checking the source-file again.\\n     */\\n    private importCache;\\n    constructor(getUpdateRecorder: (sf: ts.SourceFile) => UpdateRecorder, printer: ts.Printer);\\n    /**\\n     * Adds an import to the given source-file and returns the TypeScript\\n     * identifier that can be used to access the newly imported symbol.\\n     */\\n    addImportToSourceFile(sourceFile: ts.SourceFile, symbolName: string | null, moduleName: string, typeImport?: boolean): ts.Expression;\\n    /**\\n     * Stores the collected import changes within the appropriate update recorders. The\\n     * updated imports can only be updated *once* per source-file because previous updates\\n     * could otherwise shift the source-file offsets.\\n     */\\n    recordChanges(): void;\\n    /** Gets an unique identifier with a base name for the given source file. */\\n    private _getUniqueIdentifier;\\n    /**\\n     * Checks whether the specified identifier name is used within the given\\n     * source file.\\n     */\\n    private isUniqueIdentifierName;\\n    private _recordUsedIdentifier;\\n    /**\\n     * Determines the full end of a given node. By default the end position of a node is\\n     * before all trailing comments. This could mean that generated imports shift comments.\\n     */\\n    private _getEndPositionOfNode;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/missing-injectable/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/missing-injectable\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Entry point for the V9 \\\"missing @Injectable\\\" schematic. */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/missing-injectable/transform.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/missing-injectable/transform\\\" />\\nimport * as ts from 'typescript';\\nimport { ResolvedDirective, ResolvedNgModule } from './definition_collector';\\nimport { UpdateRecorder } from './update_recorder';\\nexport interface AnalysisFailure {\\n    node: ts.Node;\\n    message: string;\\n}\\nexport declare class MissingInjectableTransform {\\n    private typeChecker;\\n    private getUpdateRecorder;\\n    private printer;\\n    private importManager;\\n    private partialEvaluator;\\n    /** Set of provider class declarations which were already checked or migrated. */\\n    private visitedProviderClasses;\\n    constructor(typeChecker: ts.TypeChecker, getUpdateRecorder: (sf: ts.SourceFile) => UpdateRecorder);\\n    recordChanges(): void;\\n    /**\\n     * Migrates all specified NgModule's by walking through referenced providers\\n     * and decorating them with \\\"@Injectable\\\" if needed.\\n     */\\n    migrateModules(modules: ResolvedNgModule[]): AnalysisFailure[];\\n    /**\\n     * Migrates all specified directives by walking through referenced providers\\n     * and decorating them with \\\"@Injectable\\\" if needed.\\n     */\\n    migrateDirectives(directives: ResolvedDirective[]): AnalysisFailure[];\\n    /** Migrates a given NgModule by walking through the referenced providers. */\\n    migrateModule(module: ResolvedNgModule): AnalysisFailure[];\\n    /**\\n     * Migrates a given directive by walking through defined providers. This method\\n     * also handles components with \\\"viewProviders\\\" defined.\\n     */\\n    migrateDirective(directive: ResolvedDirective): AnalysisFailure[];\\n    /**\\n     * Migrates a given provider class if it is not decorated with\\n     * any Angular decorator.\\n     */\\n    migrateProviderClass(node: ts.ClassDeclaration, context: ResolvedNgModule | ResolvedDirective): void;\\n    /**\\n     * Visits the given resolved value of a provider. Providers can be nested in\\n     * arrays and we need to recursively walk through the providers to be able to\\n     * migrate all referenced provider classes. e.g. \\\"providers: [[A, [B]]]\\\".\\n     */\\n    private _visitProviderResolvedValue;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/missing-injectable/update_recorder.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/missing-injectable/update_recorder\\\" />\\nimport * as ts from 'typescript';\\n/**\\n * Update recorder interface that is used to transform source files in a non-colliding\\n * way. Also this indirection makes it possible to re-use logic for both TSLint rules\\n * and CLI devkit schematic updates.\\n */\\nexport interface UpdateRecorder {\\n    addNewImport(start: number, importText: string): void;\\n    updateExistingImport(namedBindings: ts.NamedImports, newNamedBindings: string): void;\\n    addClassDecorator(node: ts.ClassDeclaration, text: string, className: string): void;\\n    replaceDecorator(node: ts.Decorator, newText: string, className: string): void;\\n    commitUpdate(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/move-document/document_import_visitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/move-document/document_import_visitor\\\" />\\nimport * as ts from 'typescript';\\nexport declare const COMMON_IMPORT = \\\"@angular/common\\\";\\nexport declare const PLATFORM_BROWSER_IMPORT = \\\"@angular/platform-browser\\\";\\nexport declare const DOCUMENT_TOKEN_NAME = \\\"DOCUMENT\\\";\\n/** This contains the metadata necessary to move items from one import to another */\\nexport interface ResolvedDocumentImport {\\n    platformBrowserImport: ts.NamedImports | null;\\n    commonImport: ts.NamedImports | null;\\n    documentElement: ts.ImportSpecifier | null;\\n}\\n/** Visitor that can be used to find a set of imports in a TypeScript file. */\\nexport declare class DocumentImportVisitor {\\n    typeChecker: ts.TypeChecker;\\n    importsMap: Map<ts.SourceFile, ResolvedDocumentImport>;\\n    constructor(typeChecker: ts.TypeChecker);\\n    visitNode(node: ts.Node): void;\\n    private visitNamedImport;\\n    private getDocumentElement;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/move-document/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/move-document\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Entry point for the V8 move-document migration. */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/move-document/move-import.d.ts\"\n    ],\n    \"content\": \"/// <amd-module name=\\\"@angular/core/schematics/migrations/move-document/move-import\\\" />\\n/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ts from 'typescript';\\nexport declare function removeFromImport(importNode: ts.NamedImports, sourceFile: ts.SourceFile, importName: string): string;\\nexport declare function addToImport(importNode: ts.NamedImports, sourceFile: ts.SourceFile, name: ts.Identifier, propertyName?: ts.Identifier): string;\\nexport declare function createImport(importSource: string, sourceFile: ts.SourceFile, name: ts.Identifier, propertyName?: ts.Identifier): string;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/postinstall-ngcc/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/postinstall-ngcc\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/**\\n * Runs the ngcc postinstall migration for the current CLI workspace.\\n */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/renderer-to-renderer2/helpers.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/renderer-to-renderer2/helpers\\\" />\\nimport * as ts from 'typescript';\\n/** Names of the helper functions that are supported for this migration. */\\nexport declare const enum HelperFunction {\\n    any = \\\"AnyDuringRendererMigration\\\",\\n    createElement = \\\"__ngRendererCreateElementHelper\\\",\\n    createText = \\\"__ngRendererCreateTextHelper\\\",\\n    createTemplateAnchor = \\\"__ngRendererCreateTemplateAnchorHelper\\\",\\n    projectNodes = \\\"__ngRendererProjectNodesHelper\\\",\\n    animate = \\\"__ngRendererAnimateHelper\\\",\\n    destroyView = \\\"__ngRendererDestroyViewHelper\\\",\\n    detachView = \\\"__ngRendererDetachViewHelper\\\",\\n    attachViewAfter = \\\"__ngRendererAttachViewAfterHelper\\\",\\n    splitNamespace = \\\"__ngRendererSplitNamespaceHelper\\\",\\n    setElementAttribute = \\\"__ngRendererSetElementAttributeHelper\\\"\\n}\\n/** Gets the string representation of a helper function. */\\nexport declare function getHelper(name: HelperFunction, sourceFile: ts.SourceFile, printer: ts.Printer): string;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/renderer-to-renderer2/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/renderer-to-renderer2\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/**\\n * Migration that switches from `Renderer` to `Renderer2`. More information on how it works:\\n * https://hackmd.angular.io/UTzUZTnPRA-cSa_4mHyfYw\\n */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/renderer-to-renderer2/migration.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/renderer-to-renderer2/migration\\\" />\\nimport * as ts from 'typescript';\\nimport { HelperFunction } from './helpers';\\n/** Replaces an import inside an import statement with a different one. */\\nexport declare function replaceImport(node: ts.NamedImports, oldImport: string, newImport: string): ts.NamedImports;\\n/**\\n * Migrates a function call expression from `Renderer` to `Renderer2`.\\n * Returns null if the expression should be dropped.\\n */\\nexport declare function migrateExpression(node: ts.CallExpression, typeChecker: ts.TypeChecker): {\\n    node: ts.Node | null;\\n    requiredHelpers?: HelperFunction[];\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/renderer-to-renderer2/util.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/renderer-to-renderer2/util\\\" />\\nimport * as ts from 'typescript';\\n/**\\n * Finds typed nodes (e.g. function parameters or class properties) that are referencing the old\\n * `Renderer`, as well as calls to the `Renderer` methods.\\n */\\nexport declare function findRendererReferences(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker, rendererImport: ts.NamedImports): {\\n    typedNodes: Set<ts.ParameterDeclaration | ts.PropertyDeclaration | ts.AsExpression>;\\n    methodCalls: Set<ts.CallExpression>;\\n    forwardRefs: Set<ts.Identifier>;\\n};\\n/** Finds the import from @angular/core that has a symbol with a particular name. */\\nexport declare function findCoreImport(sourceFile: ts.SourceFile, symbolName: string): ts.NamedImports | null;\\n/** Finds an import specifier with a particular name, accounting for aliases. */\\nexport declare function findImportSpecifier(elements: ts.NodeArray<ts.ImportSpecifier>, importName: string): ts.ImportSpecifier | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/angular/directive_inputs.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/angular/directive_inputs\\\" />\\nimport * as ts from 'typescript';\\n/** Analyzes the given class and resolves the name of all inputs which are declared. */\\nexport declare function getInputNamesOfClass(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker): string[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/angular/ng_query_visitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/angular/ng_query_visitor\\\" />\\nimport * as ts from 'typescript';\\nimport { ResolvedTemplate } from '../../../utils/ng_component_template';\\nimport { NgQueryDefinition } from './query-definition';\\n/** Resolved metadata of a given class. */\\nexport interface ClassMetadata {\\n    /** List of class declarations that derive from the given class. */\\n    derivedClasses: ts.ClassDeclaration[];\\n    /** Super class of the given class. */\\n    superClass: ts.ClassDeclaration | null;\\n    /** List of property names that declare an Angular input within the given class. */\\n    ngInputNames: string[];\\n    /** Component template that belongs to that class if present. */\\n    template?: ResolvedTemplate;\\n}\\n/** Type that describes a map which can be used to get a class declaration's metadata. */\\nexport declare type ClassMetadataMap = Map<ts.ClassDeclaration, ClassMetadata>;\\n/**\\n * Visitor that can be used to determine Angular queries within given TypeScript nodes.\\n * Besides resolving queries, the visitor also records class relations and searches for\\n * Angular input setters which can be used to analyze the timing usage of a given query.\\n */\\nexport declare class NgQueryResolveVisitor {\\n    typeChecker: ts.TypeChecker;\\n    /** Resolved Angular query definitions. */\\n    resolvedQueries: Map<ts.SourceFile, NgQueryDefinition[]>;\\n    /** Maps a class declaration to its class metadata. */\\n    classMetadata: ClassMetadataMap;\\n    constructor(typeChecker: ts.TypeChecker);\\n    visitNode(node: ts.Node): void;\\n    private visitPropertyDeclaration;\\n    private visitAccessorDeclaration;\\n    private visitClassDeclaration;\\n    private _recordQueryDeclaration;\\n    private _recordClassInputSetters;\\n    private _recordClassInheritances;\\n    private _getClassMetadata;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/angular/query-definition.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/angular/query-definition\\\" />\\nimport * as ts from 'typescript';\\nimport { NgDecorator } from '../../../utils/ng_decorators';\\n/** Timing of a given query. Either static or dynamic. */\\nexport declare enum QueryTiming {\\n    STATIC = 0,\\n    DYNAMIC = 1\\n}\\n/** Type of a given query. */\\nexport declare enum QueryType {\\n    ViewChild = 0,\\n    ContentChild = 1\\n}\\nexport interface NgQueryDefinition {\\n    /** Name of the query. Set to \\\"null\\\" in case the query name is not statically analyzable. */\\n    name: string | null;\\n    /** Type of the query definition. */\\n    type: QueryType;\\n    /** Node that declares this query. */\\n    node: ts.Node;\\n    /**\\n     * Property declaration that refers to the query value. For accessors there\\n     * is no property that is guaranteed to access the query value.\\n     */\\n    property: ts.PropertyDeclaration | null;\\n    /** Decorator that declares this as a query. */\\n    decorator: NgDecorator;\\n    /** Class declaration that holds this query. */\\n    container: ts.ClassDeclaration;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/angular/super_class.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/angular/super_class\\\" />\\nimport * as ts from 'typescript';\\nimport { ClassMetadataMap } from './ng_query_visitor';\\n/**\\n * Gets all chained super-class TypeScript declarations for the given class\\n * by using the specified class metadata map.\\n */\\nexport declare function getSuperClassDeclarations(classDecl: ts.ClassDeclaration, classMetadataMap: ClassMetadataMap): ts.ClassDeclaration[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Entry point for the V8 static-query migration. */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/template_strategy/template_strategy\\\" />\\nimport * as ts from 'typescript';\\nimport { ClassMetadataMap } from '../../angular/ng_query_visitor';\\nimport { NgQueryDefinition } from '../../angular/query-definition';\\nimport { TimingResult, TimingStrategy } from '../timing-strategy';\\nexport declare class QueryTemplateStrategy implements TimingStrategy {\\n    private projectPath;\\n    private classMetadata;\\n    private host;\\n    private compiler;\\n    private metadataResolver;\\n    private analyzedQueries;\\n    constructor(projectPath: string, classMetadata: ClassMetadataMap, host: ts.CompilerHost);\\n    /**\\n     * Sets up the template strategy by creating the AngularCompilerProgram. Returns false if\\n     * the AOT compiler program could not be created due to failure diagnostics.\\n     */\\n    setup(): void;\\n    /** Analyzes a given directive by determining the timing of all matched view queries. */\\n    private _analyzeDirective;\\n    /** Detects the timing of the query definition. */\\n    detectTiming(query: NgQueryDefinition): TimingResult;\\n    /**\\n     * Gets the timing that has been resolved for a given query when it's used within the\\n     * specified class declaration. e.g. queries from an inherited class can be used.\\n     */\\n    private _getQueryTimingFromClass;\\n    private _parseTemplate;\\n    private _createDiagnosticsError;\\n    private _getViewQueryUniqueKey;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/test_strategy/test_strategy\\\" />\\nimport { NgQueryDefinition } from '../../angular/query-definition';\\nimport { TimingResult, TimingStrategy } from '../timing-strategy';\\n/**\\n * Query timing strategy that is used for queries used within test files. The query\\n * timing is not analyzed for test files as the template strategy cannot work within\\n * spec files (due to missing component modules) and the usage strategy is not capable\\n * of detecting the timing of queries based on how they are used in tests.\\n */\\nexport declare class QueryTestStrategy implements TimingStrategy {\\n    setup(): void;\\n    /**\\n     * Detects the timing for a given query. For queries within tests, we always\\n     * add a TODO and print a message saying that the timing can't be detected for tests.\\n     */\\n    detectTiming(query: NgQueryDefinition): TimingResult;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/timing-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/timing-strategy\\\" />\\nimport { NgQueryDefinition, QueryTiming } from '../angular/query-definition';\\nexport interface TimingStrategy {\\n    /** Sets up the given strategy. Throws if the strategy could not be set up. */\\n    setup(): void;\\n    /** Detects the timing result for a given query. */\\n    detectTiming(query: NgQueryDefinition): TimingResult;\\n}\\nexport declare type TimingResult = {\\n    timing: QueryTiming | null;\\n    message?: string;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor\\\" />\\nimport * as ts from 'typescript';\\nexport declare type FunctionContext = Map<ts.Node, ts.Node>;\\nexport declare enum ResolvedUsage {\\n    SYNCHRONOUS = 0,\\n    ASYNCHRONOUS = 1,\\n    AMBIGUOUS = 2\\n}\\n/**\\n * Class that can be used to determine if a given TypeScript node is used within\\n * other given TypeScript nodes. This is achieved by walking through all children\\n * of the given node and checking for usages of the given declaration. The visitor\\n * also handles potential control flow changes caused by call/new expressions.\\n */\\nexport declare class DeclarationUsageVisitor {\\n    private declaration;\\n    private typeChecker;\\n    private baseContext;\\n    /** Set of visited symbols that caused a jump in control flow. */\\n    private visitedJumpExprNodes;\\n    /**\\n     * Queue of nodes that need to be checked for declaration usage and\\n     * are guaranteed to be executed synchronously.\\n     */\\n    private nodeQueue;\\n    /**\\n     * Nodes which need to be checked for declaration usage but aren't\\n     * guaranteed to execute synchronously.\\n     */\\n    private ambiguousNodeQueue;\\n    /**\\n     * Function context that holds the TypeScript node values for all parameters\\n     * of the currently analyzed function block.\\n     */\\n    private context;\\n    constructor(declaration: ts.Node, typeChecker: ts.TypeChecker, baseContext?: FunctionContext);\\n    private isReferringToSymbol;\\n    private addJumpExpressionToQueue;\\n    private addNewExpressionToQueue;\\n    private visitPropertyAccessors;\\n    private visitBinaryExpression;\\n    getResolvedNodeUsage(searchNode: ts.Node): ResolvedUsage;\\n    private isSynchronouslyUsedInNode;\\n    /**\\n     * Peeks into the given jump expression by adding all function like declarations\\n     * which are referenced in the jump expression arguments to the ambiguous node\\n     * queue. These arguments could technically access the given declaration but it's\\n     * not guaranteed that the jump expression is executed. In that case the resolved\\n     * usage is ambiguous.\\n     */\\n    private peekIntoJumpExpression;\\n    /**\\n     * Resolves a given node from the context. In case the node is not mapped in\\n     * the context, the original node is returned.\\n     */\\n    private _resolveNodeFromContext;\\n    /**\\n     * Updates the context to reflect the newly set parameter values. This allows future\\n     * references to function parameters to be resolved to the actual node through the context.\\n     */\\n    private _updateContext;\\n    /**\\n     * Resolves the declaration of a given TypeScript node. For example an identifier can\\n     * refer to a function parameter. This parameter can then be resolved through the\\n     * function context.\\n     */\\n    private _resolveDeclarationOfNode;\\n    /**\\n     * Gets the declaration symbol of a given TypeScript node. Resolves aliased\\n     * symbols to the symbol containing the value declaration.\\n     */\\n    private _getDeclarationSymbolOfNode;\\n    /** Gets the symbol of the given property access expression. */\\n    private _getPropertyAccessSymbol;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context\\\" />\\nimport * as ts from 'typescript';\\nimport { ClassMetadataMap } from '../../angular/ng_query_visitor';\\nimport { FunctionContext } from './declaration_usage_visitor';\\n/**\\n * Updates the specified function context to map abstract super-class class members\\n * to their implementation TypeScript nodes. This allows us to run the declaration visitor\\n * for the super class with the context of the \\\"baseClass\\\" (e.g. with implemented abstract\\n * class members)\\n */\\nexport declare function updateSuperClassAbstractMembersContext(baseClass: ts.ClassDeclaration, context: FunctionContext, classMetadataMap: ClassMetadataMap): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor\\\" />\\nimport { BoundAttribute, BoundEvent, BoundText, Element, Node, NullVisitor, Template } from '@angular/compiler/src/render3/r3_ast';\\n/**\\n * AST visitor that traverses the Render3 HTML AST in order to check if the given\\n * query property is accessed statically in the template.\\n */\\nexport declare class TemplateUsageVisitor extends NullVisitor {\\n    queryPropertyName: string;\\n    private hasQueryTemplateReference;\\n    private expressionAstVisitor;\\n    constructor(queryPropertyName: string);\\n    /** Checks whether the given query is statically accessed within the specified HTML nodes. */\\n    isQueryUsedStatically(htmlNodes: Node[]): boolean;\\n    visitElement(element: Element): void;\\n    visitTemplate(template: Template): void;\\n    visitBoundAttribute(attribute: BoundAttribute): void;\\n    visitBoundText(text: BoundText): void;\\n    visitBoundEvent(node: BoundEvent): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy\\\" />\\nimport * as ts from 'typescript';\\nimport { ClassMetadataMap } from '../../angular/ng_query_visitor';\\nimport { NgQueryDefinition } from '../../angular/query-definition';\\nimport { TimingResult, TimingStrategy } from '../timing-strategy';\\n/**\\n * Query timing strategy that determines the timing of a given query by inspecting how\\n * the query is accessed within the project's TypeScript source files. Read more about\\n * this strategy here: https://hackmd.io/s/Hymvc2OKE\\n */\\nexport declare class QueryUsageStrategy implements TimingStrategy {\\n    private classMetadata;\\n    private typeChecker;\\n    constructor(classMetadata: ClassMetadataMap, typeChecker: ts.TypeChecker);\\n    setup(): void;\\n    /**\\n     * Analyzes the usage of the given query and determines the query timing based\\n     * on the current usage of the query.\\n     */\\n    detectTiming(query: NgQueryDefinition): TimingResult;\\n    /**\\n     * Checks whether a given query is used statically within the given class, its super\\n     * class or derived classes.\\n     */\\n    private analyzeQueryUsage;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/static-queries/transform.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/static-queries/transform\\\" />\\nimport * as ts from 'typescript';\\nimport { NgQueryDefinition, QueryTiming } from './angular/query-definition';\\nexport declare type TransformedQueryResult = null | {\\n    /** Transformed call expression. */\\n    node: ts.CallExpression;\\n    /** Failure message which is set when the query could not be transformed successfully. */\\n    failureMessage: string | null;\\n};\\n/**\\n * Transforms the given query decorator by explicitly specifying the timing based on the\\n * determined timing. The updated decorator call expression node will be returned.\\n */\\nexport declare function getTransformedQueryCallExpr(query: NgQueryDefinition, timing: QueryTiming | null, createTodo: boolean): TransformedQueryResult;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/template-var-assignment/analyze_template.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/template-var-assignment/analyze_template\\\" />\\nimport { PropertyWrite } from '@angular/compiler';\\nimport { ResolvedTemplate } from '../../utils/ng_component_template';\\nexport interface TemplateVariableAssignment {\\n    node: PropertyWrite;\\n    start: number;\\n    end: number;\\n}\\n/**\\n * Analyzes a given resolved template by looking for property assignments to local\\n * template variables within bound events.\\n */\\nexport declare function analyzeResolvedTemplate(template: ResolvedTemplate): TemplateVariableAssignment[] | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor\\\" />\\nimport { PropertyWrite } from '@angular/compiler';\\nimport { BoundEvent, Element, NullVisitor, Template } from '@angular/compiler/src/render3/r3_ast';\\nexport interface TemplateVariableAssignment {\\n    start: number;\\n    end: number;\\n    node: PropertyWrite;\\n}\\n/**\\n * HTML AST visitor that traverses the Render3 HTML AST in order to find all\\n * expressions that write to local template variables within bound events.\\n */\\nexport declare class HtmlVariableAssignmentVisitor extends NullVisitor {\\n    variableAssignments: TemplateVariableAssignment[];\\n    private currentVariables;\\n    private expressionAstVisitor;\\n    visitElement(element: Element): void;\\n    visitTemplate(template: Template): void;\\n    visitBoundEvent(node: BoundEvent): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/template-var-assignment/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/template-var-assignment\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Entry point for the V8 template variable assignment schematic. */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-decorated-fields/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-decorated-fields\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/**\\n * Migration that adds an Angular decorator to classes that have Angular field decorators.\\n * https://hackmd.io/vuQfavzfRG6KUCtU7oK_EA\\n */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-decorated-fields/utils.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-decorated-fields/utils\\\" />\\nimport * as ts from 'typescript';\\n/** Name of the decorator that should be added to undecorated classes. */\\nexport declare const FALLBACK_DECORATOR = \\\"Directive\\\";\\n/** Finds all of the undecorated classes that have decorated fields within a file. */\\nexport declare function getUndecoratedClassesWithDecoratedFields(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker): UndecoratedClassWithDecoratedFields[];\\n/** Checks whether an import declaration has an import with a certain name. */\\nexport declare function hasNamedImport(declaration: ts.ImportDeclaration, symbolName: string): boolean;\\n/** Extracts the NamedImports node from an import declaration. */\\nexport declare function getNamedImports(declaration: ts.ImportDeclaration): ts.NamedImports | null;\\n/** Adds a new import to a NamedImports node. */\\nexport declare function addImport(declaration: ts.NamedImports, symbolName: string): ts.NamedImports;\\ninterface UndecoratedClassWithDecoratedFields {\\n    classDeclaration: ts.ClassDeclaration;\\n    importDeclaration: ts.ImportDeclaration;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/create_ngc_program.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/create_ngc_program\\\" />\\nimport { AotCompiler } from '@angular/compiler';\\nimport { CompilerHost } from '@angular/compiler-cli';\\nimport * as ts from 'typescript';\\n/** Creates an NGC program that can be used to read and parse metadata for files. */\\nexport declare function createNgcProgram(createHost: (options: ts.CompilerOptions) => CompilerHost, tsconfigPath: string): {\\n    host: CompilerHost;\\n    ngcProgram: import(\\\"@angular/compiler-cli\\\").Program;\\n    program: ts.Program;\\n    compiler: AotCompiler;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata\\\" />\\nimport { StaticSymbol } from '@angular/compiler';\\nimport * as ts from 'typescript';\\n/** Error that will be thrown if an unexpected value needs to be converted. */\\nexport declare class UnexpectedMetadataValueError extends Error {\\n}\\n/**\\n * Converts a directive metadata object into a TypeScript expression. Throws\\n * if metadata cannot be cleanly converted.\\n */\\nexport declare function convertDirectiveMetadataToExpression(metadata: any, resolveSymbolImport: (symbol: StaticSymbol) => string | null, createImport: (moduleName: string, name: string) => ts.Expression, convertProperty?: (key: string, value: any) => ts.Expression | null): ts.Expression;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.d.ts\"\n    ],\n    \"content\": \"/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter\\\" />\\n/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AotCompiler } from '@angular/compiler';\\nimport { PartialEvaluator } from '@angular/compiler-cli/src/ngtsc/partial_evaluator';\\nimport * as ts from 'typescript';\\nimport { NgDecorator } from '../../../utils/ng_decorators';\\nimport { ImportManager } from '../import_manager';\\n/**\\n * Class that can be used to copy decorators to a new location. The rewriter ensures that\\n * identifiers and imports are rewritten to work in the new file location. Fields in a\\n * decorator that cannot be cleanly copied will be copied with a comment explaining that\\n * imports and identifiers need to be adjusted manually.\\n */\\nexport declare class DecoratorRewriter {\\n    private importManager;\\n    private typeChecker;\\n    private evaluator;\\n    private compiler;\\n    previousSourceFile: ts.SourceFile | null;\\n    newSourceFile: ts.SourceFile | null;\\n    newProperties: ts.ObjectLiteralElementLike[];\\n    nonCopyableProperties: ts.ObjectLiteralElementLike[];\\n    private importRewriterFactory;\\n    constructor(importManager: ImportManager, typeChecker: ts.TypeChecker, evaluator: PartialEvaluator, compiler: AotCompiler);\\n    rewrite(ngDecorator: NgDecorator, newSourceFile: ts.SourceFile): ts.Decorator;\\n    /** Creates a new decorator with the given expression. */\\n    private _createDecorator;\\n    /**\\n     * Sanitizes a metadata property by ensuring that all contained identifiers\\n     * are imported in the target source file.\\n     */\\n    private _sanitizeMetadataProperty;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor\\\" />\\nimport { AotCompilerHost } from '@angular/compiler';\\nimport * as ts from 'typescript';\\nimport { ImportManager } from '../import_manager';\\n/**\\n * Factory that creates a TypeScript transformer which ensures that\\n * referenced identifiers are available at the target file location.\\n *\\n * Imports cannot be just added as sometimes identifiers collide in the\\n * target source file and the identifier needs to be aliased.\\n */\\nexport declare class ImportRewriteTransformerFactory {\\n    private importManager;\\n    private typeChecker;\\n    private compilerHost;\\n    private sourceFileExports;\\n    constructor(importManager: ImportManager, typeChecker: ts.TypeChecker, compilerHost: AotCompilerHost);\\n    create<T extends ts.Node>(ctx: ts.TransformationContext, newSourceFile: ts.SourceFile): ts.Transformer<T>;\\n    private _recordIdentifierReference;\\n    /**\\n     * Gets the resolved exports of a given source file. Exports are cached\\n     * for subsequent calls.\\n     */\\n    private _getSourceFileExports;\\n    /** Rewrites a module import to be relative to the target file location. */\\n    private _rewriteModuleImport;\\n}\\n/** Error that will be thrown if a given identifier cannot be resolved. */\\nexport declare class UnresolvedIdentifierError extends Error {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format\\\" />\\n/** Normalizes the specified path to conform with the posix path format. */\\nexport declare function getPosixPath(pathString: string): string;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports\\\" />\\nimport * as ts from 'typescript';\\nexport interface ResolvedExport {\\n    symbol: ts.Symbol;\\n    exportName: string;\\n    identifier: ts.Identifier;\\n}\\n/** Computes the resolved exports of a given source file. */\\nexport declare function getExportSymbolsOfFile(sf: ts.SourceFile, typeChecker: ts.TypeChecker): ResolvedExport[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/find_base_classes.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/find_base_classes\\\" />\\nimport * as ts from 'typescript';\\n/** Gets all base class declarations of the specified class declaration. */\\nexport declare function findBaseClassDeclarations(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker): {\\n    identifier: ts.Identifier;\\n    node: ts.ClassDeclaration;\\n}[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/import_manager.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/import_manager\\\" />\\nimport * as ts from 'typescript';\\nimport { UpdateRecorder } from './update_recorder';\\n/**\\n * Import manager that can be used to add TypeScript imports to given source\\n * files. The manager ensures that multiple transformations are applied properly\\n * without shifted offsets and that similar existing import declarations are re-used.\\n */\\nexport declare class ImportManager {\\n    private getUpdateRecorder;\\n    private printer;\\n    /** Map of import declarations that need to be updated to include the given symbols. */\\n    private updatedImports;\\n    /** Map of source-files and their previously used identifier names. */\\n    private usedIdentifierNames;\\n    /**\\n     * Array of previously resolved symbol imports. Cache can be re-used to return\\n     * the same identifier without checking the source-file again.\\n     */\\n    private importCache;\\n    constructor(getUpdateRecorder: (sf: ts.SourceFile) => UpdateRecorder, printer: ts.Printer);\\n    /**\\n     * Adds an import to the given source-file and returns the TypeScript\\n     * identifier that can be used to access the newly imported symbol.\\n     */\\n    addImportToSourceFile(sourceFile: ts.SourceFile, symbolName: string | null, moduleName: string, typeImport?: boolean): ts.Expression;\\n    /**\\n     * Stores the collected import changes within the appropriate update recorders. The\\n     * updated imports can only be updated *once* per source-file because previous updates\\n     * could otherwise shift the source-file offsets.\\n     */\\n    recordChanges(): void;\\n    /** Gets an unique identifier with a base name for the given source file. */\\n    private _getUniqueIdentifier;\\n    /**\\n     * Checks whether the specified identifier name is used within the given\\n     * source file.\\n     */\\n    private isUniqueIdentifierName;\\n    private _recordUsedIdentifier;\\n    /**\\n     * Determines the full end of a given node. By default the end position of a node is\\n     * before all trailing comments. This could mean that generated imports shift comments.\\n     */\\n    private _getEndPositionOfNode;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Entry point for the V9 \\\"undecorated-classes-with-di\\\" migration. */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector\\\" />\\nimport { PartialEvaluator } from '@angular/compiler-cli/src/ngtsc/partial_evaluator';\\nimport * as ts from 'typescript';\\nimport { NgDecorator } from '../../utils/ng_decorators';\\n/**\\n * Visitor that walks through specified TypeScript nodes and collects all defined\\n * directives and provider classes. Directives are separated by decorated and\\n * undecorated directives.\\n */\\nexport declare class NgDeclarationCollector {\\n    typeChecker: ts.TypeChecker;\\n    private evaluator;\\n    /** List of resolved directives which are decorated. */\\n    decoratedDirectives: ts.ClassDeclaration[];\\n    /** List of resolved providers which are decorated. */\\n    decoratedProviders: ts.ClassDeclaration[];\\n    /** Set of resolved Angular declarations which are not decorated. */\\n    undecoratedDeclarations: Set<ts.ClassDeclaration>;\\n    constructor(typeChecker: ts.TypeChecker, evaluator: PartialEvaluator);\\n    visitNode(node: ts.Node): void;\\n    private _visitClassDeclaration;\\n    private _visitNgModuleDecorator;\\n}\\n/** Checks whether the given node has the \\\"@Directive\\\" or \\\"@Component\\\" decorator set. */\\nexport declare function hasDirectiveDecorator(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker, ngDecorators?: NgDecorator[]): boolean;\\n/** Checks whether the given node has the \\\"@Injectable\\\" decorator set. */\\nexport declare function hasInjectableDecorator(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker, ngDecorators?: NgDecorator[]): boolean;\\n/** Whether the given node has an explicit decorator that describes an Angular declaration. */\\nexport declare function hasNgDeclarationDecorator(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker): boolean;\\n/** Gets all Angular decorators of a given class declaration. */\\nexport declare function getNgClassDecorators(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker): NgDecorator[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/transform.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/transform\\\" />\\nimport { AotCompiler } from '@angular/compiler';\\nimport { PartialEvaluator } from '@angular/compiler-cli/src/ngtsc/partial_evaluator';\\nimport * as ts from 'typescript';\\nimport { UpdateRecorder } from './update_recorder';\\nexport interface TransformFailure {\\n    node: ts.Node;\\n    message: string;\\n}\\nexport declare class UndecoratedClassesTransform {\\n    private typeChecker;\\n    private compiler;\\n    private evaluator;\\n    private getUpdateRecorder;\\n    private printer;\\n    private importManager;\\n    private decoratorRewriter;\\n    private compilerHost;\\n    private symbolResolver;\\n    private metadataResolver;\\n    /** Set of class declarations which have been decorated with \\\"@Directive\\\". */\\n    private decoratedDirectives;\\n    /** Set of class declarations which have been decorated with \\\"@Injectable\\\" */\\n    private decoratedProviders;\\n    /**\\n     * Set of class declarations which have been analyzed and need to specify\\n     * an explicit constructor.\\n     */\\n    private missingExplicitConstructorClasses;\\n    constructor(typeChecker: ts.TypeChecker, compiler: AotCompiler, evaluator: PartialEvaluator, getUpdateRecorder: (sf: ts.SourceFile) => UpdateRecorder);\\n    /**\\n     * Migrates decorated directives which can potentially inherit a constructor\\n     * from an undecorated base class. All base classes until the first one\\n     * with an explicit constructor will be decorated with the abstract \\\"@Directive()\\\"\\n     * decorator. See case 1 in the migration plan: https://hackmd.io/@alx/S1XKqMZeS\\n     */\\n    migrateDecoratedDirectives(directives: ts.ClassDeclaration[]): TransformFailure[];\\n    /**\\n     * Migrates decorated providers which can potentially inherit a constructor\\n     * from an undecorated base class. All base classes until the first one\\n     * with an explicit constructor will be decorated with the \\\"@Injectable()\\\".\\n     */\\n    migrateDecoratedProviders(providers: ts.ClassDeclaration[]): TransformFailure[];\\n    private _migrateProviderBaseClass;\\n    private _migrateDirectiveBaseClass;\\n    private _migrateDecoratedClassWithInheritedCtor;\\n    /**\\n     * Adds the abstract \\\"@Directive()\\\" decorator to the given class in case there\\n     * is no existing directive decorator.\\n     */\\n    private _addAbstractDirectiveDecorator;\\n    /**\\n     * Adds the abstract \\\"@Injectable()\\\" decorator to the given class in case there\\n     * is no existing directive decorator.\\n     */\\n    private _addInjectableDecorator;\\n    /** Adds a comment for adding an explicit constructor to the given class declaration. */\\n    private _addMissingExplicitConstructorTodo;\\n    /**\\n     * Migrates undecorated directives which were referenced in NgModule declarations.\\n     * These directives inherit the metadata from a parent base class, but with Ivy\\n     * these classes need to explicitly have a decorator for locality. The migration\\n     * determines the inherited decorator and copies it to the undecorated declaration.\\n     *\\n     * Note that the migration serializes the metadata for external declarations\\n     * where the decorator is not part of the source file AST.\\n     *\\n     * See case 2 in the migration plan: https://hackmd.io/@alx/S1XKqMZeS\\n     */\\n    migrateUndecoratedDeclarations(directives: ts.ClassDeclaration[]): TransformFailure[];\\n    private _migrateDerivedDeclaration;\\n    /** Records all changes that were made in the import manager. */\\n    recordChanges(): void;\\n    /**\\n     * Constructs a TypeScript decorator node from the specified declaration metadata. Returns\\n     * null if the metadata could not be simplified/resolved.\\n     */\\n    private _constructDecoratorFromMetadata;\\n    /**\\n     * Resolves the declaration metadata of a given static symbol. The metadata\\n     * is determined by resolving metadata for the static symbol.\\n     */\\n    private _resolveDeclarationMetadata;\\n    private _getStaticSymbolOfIdentifier;\\n    /**\\n     * Disables that static symbols are resolved through summaries. Summaries\\n     * cannot be used for decorator analysis as decorators are omitted in summaries.\\n     */\\n    private _disableSummaryResolution;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/migrations/undecorated-classes-with-di/update_recorder.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/migrations/undecorated-classes-with-di/update_recorder\\\" />\\nimport * as ts from 'typescript';\\n/**\\n * Update recorder interface that is used to transform source files in a non-colliding\\n * way. Also this indirection makes it possible to re-use transformation logic with\\n * different replacement tools (e.g. TSLint or CLI devkit).\\n */\\nexport interface UpdateRecorder {\\n    addNewImport(start: number, importText: string): void;\\n    updateExistingImport(namedBindings: ts.NamedImports, newNamedBindings: string): void;\\n    addClassDecorator(node: ts.ClassDeclaration, text: string): void;\\n    addClassComment(node: ts.ClassDeclaration, text: string): void;\\n    commitUpdate(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/line_mappings.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/line_mappings\\\" />\\n/** Gets the line and character for the given position from the line starts map. */\\nexport declare function getLineAndCharacterFromPosition(lineStartsMap: number[], position: number): {\\n    character: number;\\n    line: number;\\n};\\n/**\\n * Computes the line start map of the given text. This can be used in order to\\n * retrieve the line and character of a given text position index.\\n */\\nexport declare function computeLineStartsMap(text: string): number[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/ng_component_template.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/ng_component_template\\\" />\\nimport * as ts from 'typescript';\\nexport interface ResolvedTemplate {\\n    /** Class declaration that contains this template. */\\n    container: ts.ClassDeclaration;\\n    /** File content of the given template. */\\n    content: string;\\n    /** Start offset of the template content (e.g. in the inline source file) */\\n    start: number;\\n    /** Whether the given template is inline or not. */\\n    inline: boolean;\\n    /** Path to the file that contains this template. */\\n    filePath: string;\\n    /**\\n     * Gets the character and line of a given position index in the template.\\n     * If the template is declared inline within a TypeScript source file, the line and\\n     * character are based on the full source file content.\\n     */\\n    getCharacterAndLineOfPosition: (pos: number) => {\\n        character: number;\\n        line: number;\\n    };\\n}\\n/**\\n * Visitor that can be used to determine Angular templates referenced within given\\n * TypeScript source files (inline templates or external referenced templates)\\n */\\nexport declare class NgComponentTemplateVisitor {\\n    typeChecker: ts.TypeChecker;\\n    resolvedTemplates: ResolvedTemplate[];\\n    constructor(typeChecker: ts.TypeChecker);\\n    visitNode(node: ts.Node): void;\\n    private visitClassDeclaration;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/ng_decorators.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/ng_decorators\\\" />\\nimport * as ts from 'typescript';\\nexport declare type CallExpressionDecorator = ts.Decorator & {\\n    expression: ts.CallExpression;\\n};\\nexport interface NgDecorator {\\n    name: string;\\n    moduleName: string;\\n    node: CallExpressionDecorator;\\n    importNode: ts.ImportDeclaration;\\n}\\n/**\\n * Gets all decorators which are imported from an Angular package (e.g. \\\"@angular/core\\\")\\n * from a list of decorators.\\n */\\nexport declare function getAngularDecorators(typeChecker: ts.TypeChecker, decorators: ReadonlyArray<ts.Decorator>): NgDecorator[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/parse_html.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/parse_html\\\" />\\nimport { Node } from '@angular/compiler/src/render3/r3_ast';\\n/**\\n * Parses the given HTML content using the Angular compiler. In case the parsing\\n * fails, null is being returned.\\n */\\nexport declare function parseHtmlGracefully(htmlContent: string, filePath: string): Node[] | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/project_tsconfig_paths.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/project_tsconfig_paths\\\" />\\nimport { Tree } from '@angular-devkit/schematics';\\n/**\\n * Gets all tsconfig paths from a CLI project by reading the workspace configuration\\n * and looking for common tsconfig locations.\\n */\\nexport declare function getProjectTsConfigPaths(tree: Tree): {\\n    buildPaths: string[];\\n    testPaths: string[];\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/schematics_prompt.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/schematics_prompt\\\" />\\ndeclare type Inquirer = typeof import('inquirer');\\n/** Whether prompts are currently supported. */\\nexport declare function supportsPrompt(): boolean;\\n/**\\n * Gets the resolved instance of \\\"inquirer\\\" which can be used to programmatically\\n * create prompts.\\n */\\nexport declare function getInquirer(): Inquirer;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/class_declaration.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/class_declaration\\\" />\\nimport * as ts from 'typescript';\\n/** Determines the base type identifiers of a specified class declaration. */\\nexport declare function getBaseTypeIdentifiers(node: ts.ClassDeclaration): ts.Identifier[] | null;\\n/** Gets the first found parent class declaration of a given node. */\\nexport declare function findParentClassDeclaration(node: ts.Node): ts.ClassDeclaration | null;\\n/** Checks whether the given class declaration has an explicit constructor or not. */\\nexport declare function hasExplicitConstructor(node: ts.ClassDeclaration): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/compiler_host.d.ts\"\n    ],\n    \"content\": \"/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/compiler_host\\\" />\\n/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Tree } from '@angular-devkit/schematics';\\nimport * as ts from 'typescript';\\nexport declare function createMigrationCompilerHost(tree: Tree, options: ts.CompilerOptions, basePath: string): ts.CompilerHost;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/decorators.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/decorators\\\" />\\nimport * as ts from 'typescript';\\nimport { Import } from './imports';\\nexport declare function getCallDecoratorImport(typeChecker: ts.TypeChecker, decorator: ts.Decorator): Import | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/functions.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/functions\\\" />\\nimport * as ts from 'typescript';\\n/** Checks whether a given node is a function like declaration. */\\nexport declare function isFunctionLikeDeclaration(node: ts.Node): node is ts.FunctionLikeDeclaration;\\n/**\\n * Unwraps a given expression TypeScript node. Expressions can be wrapped within multiple\\n * parentheses. e.g. \\\"(((({exp}))))()\\\". The function should return the TypeScript node\\n * referring to the inner expression. e.g \\\"exp\\\".\\n */\\nexport declare function unwrapExpression(node: ts.Expression | ts.ParenthesizedExpression): ts.Expression;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/imports.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/imports\\\" />\\nimport * as ts from 'typescript';\\nexport declare type Import = {\\n    name: string;\\n    importModule: string;\\n    node: ts.ImportDeclaration;\\n};\\n/** Gets import information about the specified identifier by using the Type checker. */\\nexport declare function getImportOfIdentifier(typeChecker: ts.TypeChecker, node: ts.Identifier): Import | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/nodes.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/nodes\\\" />\\nimport * as ts from 'typescript';\\n/** Checks whether the given TypeScript node has the specified modifier set. */\\nexport declare function hasModifier(node: ts.Node, modifierKind: ts.SyntaxKind): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/parse_tsconfig.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/parse_tsconfig\\\" />\\nimport * as ts from 'typescript';\\nexport declare function parseTsconfigFile(tsconfigPath: string, basePath: string): ts.ParsedCommandLine;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/property_name.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/property_name\\\" />\\nimport * as ts from 'typescript';\\n/** Type that describes a property name with an obtainable text. */\\ndeclare type PropertyNameWithText = Exclude<ts.PropertyName, ts.ComputedPropertyName>;\\n/**\\n * Gets the text of the given property name. Returns null if the property\\n * name couldn't be determined statically.\\n */\\nexport declare function getPropertyNameText(node: ts.PropertyName): string | null;\\n/** Checks whether the given property name has a text. */\\nexport declare function hasPropertyNameText(node: ts.PropertyName): node is PropertyNameWithText;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/schematics/utils/typescript/symbol.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google Inc. All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/core/schematics/utils/typescript/symbol\\\" />\\nimport * as ts from 'typescript';\\nexport declare function getValueSymbolOfDeclaration(node: ts.Node, typeChecker: ts.TypeChecker): ts.Symbol | undefined;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/src/r3_symbols.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents an abstract class `T`, if applied to a concrete class it would stop being\\r\\n * instantiatable.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface AbstractType<T> extends Function {\\r\\n    prototype: T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Base class for Angular Views, provides change detection functionality.\\r\\n * A change-detection tree collects all views that are to be checked for changes.\\r\\n * Use the methods to add and remove views from the tree, initiate change-detection,\\r\\n * and explicitly mark views as _dirty_, meaning that they have changed and need to be rerendered.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * The following examples demonstrate how to modify default change-detection behavior\\r\\n * to perform explicit detection when needed.\\r\\n *\\r\\n * ### Use `markForCheck()` with `CheckOnce` strategy\\r\\n *\\r\\n * The following example sets the `OnPush` change-detection strategy for a component\\r\\n * (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check\\r\\n * after an interval. See [live demo](http://plnkr.co/edit/GC512b?p=preview).\\r\\n *\\r\\n * <code-example path=\\\"core/ts/change_detect/change-detection.ts\\\"\\r\\n * region=\\\"mark-for-check\\\"></code-example>\\r\\n *\\r\\n * ### Detach change detector to limit how often check occurs\\r\\n *\\r\\n * The following example defines a component with a large list of read-only data\\r\\n * that is expected to change constantly, many times per second.\\r\\n * To improve performance, we want to check and update the list\\r\\n * less often than the changes actually occur. To do that, we detach\\r\\n * the component's change detector and perform an explicit local check every five seconds.\\r\\n *\\r\\n * <code-example path=\\\"core/ts/change_detect/change-detection.ts\\\" region=\\\"detach\\\"></code-example>\\r\\n *\\r\\n *\\r\\n * ### Reattaching a detached component\\r\\n *\\r\\n * The following example creates a component displaying live data.\\r\\n * The component detaches its change detector from the main change detector tree\\r\\n * when the `live` property is set to false, and reattaches it when the property\\r\\n * becomes true.\\r\\n *\\r\\n * <code-example path=\\\"core/ts/change_detect/change-detection.ts\\\" region=\\\"reattach\\\"></code-example>\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class ChangeDetectorRef {\\r\\n    /**\\r\\n     * When a view uses the {@link ChangeDetectionStrategy#OnPush OnPush} (checkOnce)\\r\\n     * change detection strategy, explicitly marks the view as changed so that\\r\\n     * it can be checked again.\\r\\n     *\\r\\n     * Components are normally marked as dirty (in need of rerendering) when inputs\\r\\n     * have changed or events have fired in the view. Call this method to ensure that\\r\\n     * a component is checked even if these triggers have not occured.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on OnPush components -->\\r\\n     *\\r\\n     */\\r\\n    abstract markForCheck(): void;\\r\\n    /**\\r\\n     * Detaches this view from the change-detection tree.\\r\\n     * A detached view is  not checked until it is reattached.\\r\\n     * Use in combination with `detectChanges()` to implement local change detection checks.\\r\\n     *\\r\\n     * Detached views are not checked during change detection runs until they are\\r\\n     * re-attached, even if they are marked as dirty.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\\r\\n     *\\r\\n     */\\r\\n    abstract detach(): void;\\r\\n    /**\\r\\n     * Checks this view and its children. Use in combination with {@link ChangeDetectorRef#detach\\r\\n     * detach}\\r\\n     * to implement local change detection checks.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\\r\\n     *\\r\\n     */\\r\\n    abstract detectChanges(): void;\\r\\n    /**\\r\\n     * Checks the change detector and its children, and throws if any changes are detected.\\r\\n     *\\r\\n     * Use in development mode to verify that running change detection doesn't introduce\\r\\n     * other changes.\\r\\n     */\\r\\n    abstract checkNoChanges(): void;\\r\\n    /**\\r\\n     * Re-attaches the previously detached view to the change detection tree.\\r\\n     * Views are attached to the tree by default.\\r\\n     *\\r\\n     * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\\r\\n     *\\r\\n     */\\r\\n    abstract reattach(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `useClass` for a token.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ClassProvider'}\\r\\n *\\r\\n * Note that following two providers are not equal:\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ClassProviderDifference'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ClassProvider extends ClassSansProvider {\\r\\n    /**\\r\\n     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value by invoking a `useClass` function.\\r\\n * Base for `ClassProvider` decorator.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ClassSansProvider {\\r\\n    /**\\r\\n     * Class to instantiate for the `token`.\\r\\n     */\\r\\n    useClass: Type<any>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Base class for a factory that can create a component dynamically.\\r\\n * Instantiate a factory for a given type of component with `resolveComponentFactory()`.\\r\\n * Use the resulting `ComponentFactory.create()` method to create a component of that type.\\r\\n *\\r\\n * @see [Dynamic Components](guide/dynamic-component-loader)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class ComponentFactory<C> {\\r\\n    /**\\r\\n     * The component's HTML selector.\\r\\n     */\\r\\n    abstract readonly selector: string;\\r\\n    /**\\r\\n     * The type of component the factory will create.\\r\\n     */\\r\\n    abstract readonly componentType: Type<any>;\\r\\n    /**\\r\\n     * Selector for all <ng-content> elements in the component.\\r\\n     */\\r\\n    abstract readonly ngContentSelectors: string[];\\r\\n    /**\\r\\n     * The inputs of the component.\\r\\n     */\\r\\n    abstract readonly inputs: {\\r\\n        propName: string;\\r\\n        templateName: string;\\r\\n    }[];\\r\\n    /**\\r\\n     * The outputs of the component.\\r\\n     */\\r\\n    abstract readonly outputs: {\\r\\n        propName: string;\\r\\n        templateName: string;\\r\\n    }[];\\r\\n    /**\\r\\n     * Creates a new component.\\r\\n     */\\r\\n    abstract create(injector: Injector, projectableNodes?: any[][], rootSelectorOrNode?: string | any, ngModule?: NgModuleRef<any>): ComponentRef<C>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A simple registry that maps `Components` to generated `ComponentFactory` classes\\r\\n * that can be used to create instances of components.\\r\\n * Use to obtain the factory for a given component type,\\r\\n * then use the factory's `create()` method to create a component of that type.\\r\\n *\\r\\n * @see [Dynamic Components](guide/dynamic-component-loader)\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class ComponentFactoryResolver {\\r\\n    static NULL: ComponentFactoryResolver;\\r\\n    /**\\r\\n     * Retrieves the factory object that creates a component of the given type.\\r\\n     * @param component The component type.\\r\\n     */\\r\\n    abstract resolveComponentFactory<T>(component: Type<T>): ComponentFactory<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents a component created by a `ComponentFactory`.\\r\\n * Provides access to the component instance and related objects,\\r\\n * and provides the means of destroying the instance.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class ComponentRef<C> {\\r\\n    /**\\r\\n     * The host or anchor [element](guide/glossary#element) for this component instance.\\r\\n     */\\r\\n    abstract readonly location: ElementRef;\\r\\n    /**\\r\\n     * The [dependency injector](guide/glossary#injector) for this component instance.\\r\\n     */\\r\\n    abstract readonly injector: Injector;\\r\\n    /**\\r\\n     * This component instance.\\r\\n     */\\r\\n    abstract readonly instance: C;\\r\\n    /**\\r\\n     * The [host view](guide/glossary#view-tree) defined by the template\\r\\n     * for this component instance.\\r\\n     */\\r\\n    abstract readonly hostView: ViewRef;\\r\\n    /**\\r\\n     * The change detector for this component instance.\\r\\n     */\\r\\n    abstract readonly changeDetectorRef: ChangeDetectorRef;\\r\\n    /**\\r\\n     * The type of this component (as created by a `ComponentFactory` class).\\r\\n     */\\r\\n    abstract readonly componentType: Type<any>;\\r\\n    /**\\r\\n     * Destroys the component instance and all of the data structures associated with it.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * A lifecycle hook that provides additional developer-defined cleanup\\r\\n     * functionality for the component.\\r\\n     * @param callback A handler function that cleans up developer-defined data\\r\\n     * associated with this component. Called when the `destroy()` method is invoked.\\r\\n     */\\r\\n    abstract onDestroy(callback: Function): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of a token.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ConstructorProvider extends ConstructorSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: Type<any>;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of a token.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ```ts\\r\\n * @Injectable(SomeModule, {deps: []})\\r\\n * class MyService {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ConstructorSansProvider {\\r\\n    /**\\r\\n     * A list of `token`s to be resolved by the injector.\\r\\n     */\\r\\n    deps?: any[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * A wrapper around a native element inside of a View.\\r\\n *\\r\\n * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM\\r\\n * element.\\r\\n *\\r\\n * @security Permitting direct access to the DOM can make your application more vulnerable to\\r\\n * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the\\r\\n * [Security Guide](http://g.co/ng/security).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare class ElementRef<T extends any = any> {\\r\\n    /**\\r\\n     * The underlying native element or `null` if direct access to native elements is not supported\\r\\n     * (e.g. when the application runs in a web worker).\\r\\n     *\\r\\n     * <div class=\\\"callout is-critical\\\">\\r\\n     *   <header>Use with caution</header>\\r\\n     *   <p>\\r\\n     *    Use this API as the last resort when direct access to DOM is needed. Use templating and\\r\\n     *    data-binding provided by Angular instead. Alternatively you can take a look at {@link\\r\\n     * Renderer2}\\r\\n     *    which provides API that can safely be used even when direct access to native elements is not\\r\\n     *    supported.\\r\\n     *   </p>\\r\\n     *   <p>\\r\\n     *    Relying on direct DOM access creates tight coupling between your application and rendering\\r\\n     *    layers which will make it impossible to separate the two and deploy your application into a\\r\\n     *    web worker.\\r\\n     *   </p>\\r\\n     * </div>\\r\\n     *\\r\\n     */\\r\\n    nativeElement: T;\\r\\n    constructor(nativeElement: T);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value of another `useExisting` token.\\r\\n *\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ExistingProvider'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ExistingProvider extends ExistingSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value of another `useExisting` token.\\r\\n *\\r\\n * @see `ExistingProvider`\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ExistingSansProvider {\\r\\n    /**\\r\\n     * Existing `token` to return. (Equivalent to `injector.get(useExisting)`)\\r\\n     */\\r\\n    useExisting: any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value by invoking a `useFactory` function.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='FactoryProvider'}\\r\\n *\\r\\n * Dependencies can also be marked as optional:\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='FactoryProviderOptionalDeps'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface FactoryProvider extends FactorySansProvider {\\r\\n    /**\\r\\n     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value by invoking a `useFactory` function.\\r\\n *\\r\\n * @see `FactoryProvider`\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface FactorySansProvider {\\r\\n    /**\\r\\n     * A function to invoke to create a value for this `token`. The function is invoked with\\r\\n     * resolved values of `token`s in the `deps` field.\\r\\n     */\\r\\n    useFactory: Function;\\r\\n    /**\\r\\n     * A list of `token`s to be resolved by the injector. The list of values is then\\r\\n     * used as arguments to the `useFactory` function.\\r\\n     */\\r\\n    deps?: any[];\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Injection flags for DI.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare enum InjectFlags {\\r\\n    /** Check self and check parent injector if needed */\\r\\n    Default = 0,\\r\\n    /**\\r\\n     * Specifies that an injector should retrieve a dependency from any injector until reaching the\\r\\n     * host element of the current component. (Only used with Element Injector)\\r\\n     */\\r\\n    Host = 1,\\r\\n    /** Don't ascend to ancestors of the node requesting injection. */\\r\\n    Self = 2,\\r\\n    /** Skip the node that is requesting injection. */\\r\\n    SkipSelf = 4,\\r\\n    /** Inject `defaultValue` instead if token not found. */\\r\\n    Optional = 8\\r\\n}\\r\\n\\r\\n/**\\r\\n * Creates a token that can be used in a DI Provider.\\r\\n *\\r\\n * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a\\r\\n * runtime representation) such as when injecting an interface, callable type, array or\\r\\n * parameterized type.\\r\\n *\\r\\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\\r\\n * the `Injector`. This provides additional level of type safety.\\r\\n *\\r\\n * ```\\r\\n * interface MyInterface {...}\\r\\n * var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));\\r\\n * // myInterface is inferred to be MyInterface.\\r\\n * ```\\r\\n *\\r\\n * When creating an `InjectionToken`, you can optionally specify a factory function which returns\\r\\n * (possibly by creating) a default value of the parameterized type `T`. This sets up the\\r\\n * `InjectionToken` using this factory as a provider as if it was defined explicitly in the\\r\\n * application's root injector. If the factory function, which takes zero arguments, needs to inject\\r\\n * dependencies, it can do so using the `inject` function. See below for an example.\\r\\n *\\r\\n * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which\\r\\n * overrides the above behavior and marks the token as belonging to a particular `@NgModule`. As\\r\\n * mentioned above, `'root'` is the default value for `providedIn`.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Basic Example\\r\\n *\\r\\n * ### Plain InjectionToken\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='InjectionToken'}\\r\\n *\\r\\n * ### Tree-shakable InjectionToken\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\\r\\n *\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare class InjectionToken<T> {\\r\\n    protected _desc: string;\\r\\n    readonly ɵprov: never | undefined;\\r\\n    constructor(_desc: string, options?: {\\r\\n        providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n        factory: () => T;\\r\\n    });\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Concrete injectors implement this interface.\\r\\n *\\r\\n * For more details, see the [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='Injector'}\\r\\n *\\r\\n * `Injector` returns itself when given `Injector` as a token:\\r\\n *\\r\\n * {@example core/di/ts/injector_spec.ts region='injectInjector'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class Injector {\\r\\n    static THROW_IF_NOT_FOUND: Object;\\r\\n    static NULL: Injector;\\r\\n    /**\\r\\n     * Retrieves an instance from the injector based on the provided token.\\r\\n     * @returns The instance from the injector if defined, otherwise the `notFoundValue`.\\r\\n     * @throws When the `notFoundValue` is `undefined` or `Injector.THROW_IF_NOT_FOUND`.\\r\\n     */\\r\\n    abstract get<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    /**\\r\\n     * @deprecated from v4.0.0 use Type<T> or InjectionToken<T>\\r\\n     * @suppress {duplicate}\\r\\n     */\\r\\n    abstract get(token: any, notFoundValue?: any): any;\\r\\n    /**\\r\\n     * @deprecated from v5 use the new signature Injector.create(options)\\r\\n     */\\r\\n    static create(providers: StaticProvider[], parent?: Injector): Injector;\\r\\n    static create(options: {\\r\\n        providers: StaticProvider[];\\r\\n        parent?: Injector;\\r\\n        name?: string;\\r\\n    }): Injector;\\r\\n    /** @nocollapse */\\r\\n    static ɵprov: never;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A type which has an `InjectorDef` static field.\\r\\n *\\r\\n * `InjectorDefTypes` can be used to configure a `StaticInjector`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface InjectorType<T> extends Type<T> {\\r\\n    /**\\r\\n     * Opaque type whose structure is highly version dependent. Do not rely on any properties.\\r\\n     */\\r\\n    ɵinj: never;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Describes the `InjectorDef` equivalent of a `ModuleWithProviders`, an `InjectorDefType` with an\\r\\n * associated array of providers.\\r\\n *\\r\\n * Objects of this type can be listed in the imports section of an `InjectorDef`.\\r\\n *\\r\\n * NOTE: This is a private type and should not be exported\\r\\n */\\r\\ndeclare interface InjectorTypeWithProviders<T> {\\r\\n    ngModule: InjectorType<T>;\\r\\n    providers?: (Type<any> | ValueProvider | ExistingProvider | FactoryProvider | ConstructorProvider | StaticClassProvider | ClassProvider | any[])[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * The existence of this constant (in this particular file) informs the Angular compiler that the\\r\\n * current program is actually @angular/core, which needs to be compiled specially.\\r\\n */\\r\\nexport declare const ITS_JUST_ANGULAR = true;\\r\\n\\r\\n/**\\r\\n * Runtime link information for NgModules.\\r\\n *\\r\\n * This is the internal data structure used by the runtime to assemble components, directives,\\r\\n * pipes, and injectors.\\r\\n *\\r\\n * NOTE: Always use `ɵɵdefineNgModule` function to create this object,\\r\\n * never create the object directly since the shape of this object\\r\\n * can change between versions.\\r\\n */\\r\\nexport declare interface NgModuleDef<T> {\\r\\n    /** Token representing the module. Used by DI. */\\r\\n    type: T;\\r\\n    /** List of components to bootstrap. */\\r\\n    bootstrap: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of components, directives, and pipes declared by this module. */\\r\\n    declarations: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of modules or `ModuleWithProviders` imported by this module. */\\r\\n    imports: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * List of modules, `ModuleWithProviders`, components, directives, or pipes exported by this\\r\\n     * module.\\r\\n     */\\r\\n    exports: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * Cached value of computed `transitiveCompileScopes` for this module.\\r\\n     *\\r\\n     * This should never be read directly, but accessed via `transitiveScopesFor`.\\r\\n     */\\r\\n    transitiveCompileScopes: NgModuleTransitiveScopes | null;\\r\\n    /** The set of schemas that declare elements to be allowed in the NgModule. */\\r\\n    schemas: SchemaMetadata[] | null;\\r\\n    /** Unique ID for the module with which it should be registered.  */\\r\\n    id: string | null;\\r\\n}\\r\\n\\r\\nexport declare class NgModuleFactory<T> extends NgModuleFactory_2<T> {\\r\\n    moduleType: Type<T>;\\r\\n    constructor(moduleType: Type<T>);\\r\\n    create(parentInjector: Injector | null): NgModuleRef<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class NgModuleFactory_2<T> {\\r\\n    abstract readonly moduleType: Type<T>;\\r\\n    abstract create(parentInjector: Injector | null): NgModuleRef<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents an instance of an NgModule created via a {@link NgModuleFactory}.\\r\\n *\\r\\n * `NgModuleRef` provides access to the NgModule Instance as well other objects related to this\\r\\n * NgModule Instance.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class NgModuleRef<T> {\\r\\n    /**\\r\\n     * The injector that contains all of the providers of the NgModule.\\r\\n     */\\r\\n    abstract readonly injector: Injector;\\r\\n    /**\\r\\n     * The ComponentFactoryResolver to get hold of the ComponentFactories\\r\\n     * declared in the `entryComponents` property of the module.\\r\\n     */\\r\\n    abstract readonly componentFactoryResolver: ComponentFactoryResolver;\\r\\n    /**\\r\\n     * The NgModule instance.\\r\\n     */\\r\\n    abstract readonly instance: T;\\r\\n    /**\\r\\n     * Destroys the module instance and all of the data structures associated with it.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * Allows to register a callback that will be called when the module is destroyed.\\r\\n     */\\r\\n    abstract onDestroy(callback: () => void): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents the expansion of an `NgModule` into its scopes.\\r\\n *\\r\\n * A scope is a set of directives and pipes that are visible in a particular context. Each\\r\\n * `NgModule` has two scopes. The `compilation` scope is the set of directives and pipes that will\\r\\n * be recognized in the templates of components declared by the module. The `exported` scope is the\\r\\n * set of directives and pipes exported by a module (that is, module B's exported scope gets added\\r\\n * to module A's compilation scope when module A imports B).\\r\\n */\\r\\ndeclare interface NgModuleTransitiveScopes {\\r\\n    compilation: {\\r\\n        directives: Set<any>;\\r\\n        pipes: Set<any>;\\r\\n    };\\r\\n    exported: {\\r\\n        directives: Set<any>;\\r\\n        pipes: Set<any>;\\r\\n    };\\r\\n    schemas: SchemaMetadata[] | null;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * A schema definition associated with an NgModule.\\r\\n *\\r\\n * @see `@NgModule`, `CUSTOM_ELEMENTS_SCHEMA`, `NO_ERRORS_SCHEMA`\\r\\n *\\r\\n * @param name The name of a defined schema.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface SchemaMetadata {\\r\\n    name: string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Adds decorator, constructor, and property metadata to a given type via static metadata fields\\r\\n * on the type.\\r\\n *\\r\\n * These metadata fields can later be read with Angular's `ReflectionCapabilities` API.\\r\\n *\\r\\n * Calls to `setClassMetadata` can be marked as pure, resulting in the metadata assignments being\\r\\n * tree-shaken away during production builds.\\r\\n */\\r\\nexport declare function setClassMetadata(type: Type<any>, decorators: any[] | null, ctorParameters: (() => any[]) | null, propDecorators: {\\r\\n    [field: string]: any;\\r\\n} | null): void;\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `useClass` for a token.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='StaticClassProvider'}\\r\\n *\\r\\n * Note that following two providers are not equal:\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='StaticClassProviderDifference'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface StaticClassProvider extends StaticClassSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return an instance of `useClass` for a token.\\r\\n * Base for `StaticClassProvider` decorator.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface StaticClassSansProvider {\\r\\n    /**\\r\\n     * An optional class to instantiate for the `token`. By default, the `provide`\\r\\n     * class is instantiated.\\r\\n     */\\r\\n    useClass: Type<any>;\\r\\n    /**\\r\\n     * A list of `token`s to be resolved by the injector. The list of values is then\\r\\n     * used as arguments to the `useClass` constructor.\\r\\n     */\\r\\n    deps: any[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Describes how the `Injector` should be configured as static (that is, without reflection).\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare type StaticProvider = ValueProvider | ExistingProvider | StaticClassProvider | ConstructorProvider | FactoryProvider | any[];\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents a type that a Component or other object is instances of.\\r\\n *\\r\\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by\\r\\n * the `MyCustomComponent` constructor function.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare const Type: FunctionConstructor;\\r\\n\\r\\ndeclare interface Type<T> extends Function {\\r\\n    new (...args: any[]): T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value for a token.\\r\\n * @see [\\\"Dependency Injection Guide\\\"](guide/dependency-injection).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='ValueProvider'}\\r\\n *\\r\\n * ### Multi-value example\\r\\n *\\r\\n * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ValueProvider extends ValueSansProvider {\\r\\n    /**\\r\\n     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.\\r\\n     */\\r\\n    provide: any;\\r\\n    /**\\r\\n     * When true, injector returns an array of instances. This is useful to allow multiple\\r\\n     * providers spread across many files to provide configuration information to a common token.\\r\\n     */\\r\\n    multi?: boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Configures the `Injector` to return a value for a token.\\r\\n * Base for `ValueProvider` decorator.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare interface ValueSansProvider {\\r\\n    /**\\r\\n     * The value to inject.\\r\\n     */\\r\\n    useValue: any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents an Angular [view](guide/glossary#view),\\r\\n * specifically the [host view](guide/glossary#view-tree) that is defined by a component.\\r\\n * Also serves as the base class\\r\\n * that adds destroy methods for [embedded views](guide/glossary#view-tree).\\r\\n *\\r\\n * @see `EmbeddedViewRef`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare abstract class ViewRef extends ChangeDetectorRef {\\r\\n    /**\\r\\n     * Destroys this view and all of the data structures associated with it.\\r\\n     */\\r\\n    abstract destroy(): void;\\r\\n    /**\\r\\n     * Reports whether this view has been destroyed.\\r\\n     * @returns True after the `destroy()` method has been called, false otherwise.\\r\\n     */\\r\\n    abstract readonly destroyed: boolean;\\r\\n    /**\\r\\n     * A lifecycle hook that provides additional developer-defined cleanup\\r\\n     * functionality for views.\\r\\n     * @param callback A handler function that cleans up developer-defined data\\r\\n     * associated with a view. Called when the `destroy()` method is invoked.\\r\\n     */\\r\\n    abstract onDestroy(callback: Function): any /** TODO #9100 */;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Construct an `InjectableDef` which defines how a token will be constructed by the DI system, and\\r\\n * in which injectors (if any) it will be available.\\r\\n *\\r\\n * This should be assigned to a static `ɵprov` field on a type, which will then be an\\r\\n * `InjectableType`.\\r\\n *\\r\\n * Options:\\r\\n * * `providedIn` determines which injectors will include the injectable, by either associating it\\r\\n *   with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be\\r\\n *   provided in the `'root'` injector, which will be the application-level injector in most apps.\\r\\n * * `factory` gives the zero argument function which will create an instance of the injectable.\\r\\n *   The factory can call `inject` to access the `Injector` and request injection of dependencies.\\r\\n *\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefineInjectable<T>(opts: {\\r\\n    token: unknown;\\r\\n    providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;\\r\\n    factory: () => T;\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * Construct an `InjectorDef` which configures an injector.\\r\\n *\\r\\n * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an\\r\\n * `InjectorType`.\\r\\n *\\r\\n * Options:\\r\\n *\\r\\n * * `factory`: an `InjectorType` is an instantiable type, so a zero argument `factory` function to\\r\\n *   create the type must be provided. If that factory function needs to inject arguments, it can\\r\\n *   use the `inject` function.\\r\\n * * `providers`: an optional array of providers to add to the injector. Each provider must\\r\\n *   either have a factory or point to a type which has a `ɵprov` static property (the\\r\\n *   type must be an `InjectableType`).\\r\\n * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s\\r\\n *   whose providers will also be added to the injector. Locally provided types will override\\r\\n *   providers from imports.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function ɵɵdefineInjector(options: {\\r\\n    factory: () => any;\\r\\n    providers?: any[];\\r\\n    imports?: any[];\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵdefineNgModule<T>(def: {\\r\\n    /** Token representing the module. Used by DI. */\\r\\n    type: T;\\r\\n    /** List of components to bootstrap. */\\r\\n    bootstrap?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of components, directives, and pipes declared by this module. */\\r\\n    declarations?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** List of modules or `ModuleWithProviders` imported by this module. */\\r\\n    imports?: Type<any>[] | (() => Type<any>[]);\\r\\n    /**\\r\\n     * List of modules, `ModuleWithProviders`, components, directives, or pipes exported by this\\r\\n     * module.\\r\\n     */\\r\\n    exports?: Type<any>[] | (() => Type<any>[]);\\r\\n    /** The set of schemas that declare elements to be allowed in the NgModule. */\\r\\n    schemas?: SchemaMetadata[] | null;\\r\\n    /** Unique ID for the module that is used with `getModuleFactory`. */\\r\\n    id?: string | null;\\r\\n}): never;\\r\\n\\r\\n/**\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare type ɵɵFactoryDef<T> = () => T;\\r\\n\\r\\n/**\\r\\n * Generated instruction: Injects a token from the currently active injector.\\r\\n *\\r\\n * Must be used in the context of a factory function such as one defined for an\\r\\n * `InjectionToken`. Throws an error if not called from such a context.\\r\\n *\\r\\n * (Additional documentation moved to `inject`, as it is the public API, and an alias for this instruction)\\r\\n *\\r\\n * @see inject\\r\\n * @codeGenApi\\r\\n */\\r\\nexport declare function ɵɵinject<T>(token: Type<T> | InjectionToken<T>): T;\\r\\n\\r\\nexport declare function ɵɵinject<T>(token: Type<T> | InjectionToken<T>, flags?: InjectFlags): T | null;\\r\\n\\r\\n/**\\r\\n * Information about how a type or `InjectionToken` interfaces with the DI system.\\r\\n *\\r\\n * At a minimum, this includes a `factory` which defines how to create the given type `T`, possibly\\r\\n * requesting injection of other types if necessary.\\r\\n *\\r\\n * Optionally, a `providedIn` parameter specifies that the given type belongs to a particular\\r\\n * `InjectorDef`, `NgModule`, or a special scope (e.g. `'root'`). A value of `null` indicates\\r\\n * that the injectable does not belong to any scope.\\r\\n *\\r\\n * NOTE: This is a private type and should not be exported\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵɵInjectableDef<T> {\\r\\n    /**\\r\\n     * Specifies that the given type belongs to a particular injector:\\r\\n     * - `InjectorType` such as `NgModule`,\\r\\n     * - `'root'` the root injector\\r\\n     * - `'any'` all injectors.\\r\\n     * - `null`, does not belong to any injector. Must be explicitly listed in the injector\\r\\n     *   `providers`.\\r\\n     */\\r\\n    providedIn: InjectorType<any> | 'root' | 'platform' | 'any' | null;\\r\\n    /**\\r\\n     * The token to which this definition belongs.\\r\\n     *\\r\\n     * Note that this may not be the same as the type that the `factory` will create.\\r\\n     */\\r\\n    token: unknown;\\r\\n    /**\\r\\n     * Factory method to execute to create an instance of the injectable.\\r\\n     */\\r\\n    factory: (t?: Type<any>) => T;\\r\\n    /**\\r\\n     * In a case of no explicit injector, a location where the instance of the injectable is stored.\\r\\n     */\\r\\n    value: T | undefined;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Information about the providers to be included in an `Injector` as well as how the given type\\r\\n * which carries the information should be created by the DI system.\\r\\n *\\r\\n * An `InjectorDef` can import other types which have `InjectorDefs`, forming a deep nested\\r\\n * structure of providers with a defined priority (identically to how `NgModule`s also have\\r\\n * an import/dependency structure).\\r\\n *\\r\\n * NOTE: This is a private type and should not be exported\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ɵɵInjectorDef<T> {\\r\\n    factory: () => T;\\r\\n    providers: (Type<any> | ValueProvider | ExistingProvider | FactoryProvider | ConstructorProvider | StaticClassProvider | ClassProvider | any[])[];\\r\\n    imports: (InjectorType<any> | InjectorTypeWithProviders<any>)[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ɵɵNgModuleDefWithMeta<T, Declarations, Imports, Exports> = NgModuleDef<T>;\\r\\n\\r\\nexport { }\\r\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nexport * from './testing/testing';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/core/testing/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { AbstractType } from '@angular/core';\\r\\nimport { ChangeDetectorRef } from '@angular/core';\\r\\nimport { Compiler } from '@angular/core';\\r\\nimport { CompilerOptions } from '@angular/core';\\r\\nimport { Component } from '@angular/core';\\r\\nimport { ComponentFactory } from '@angular/core';\\r\\nimport { ComponentRef } from '@angular/core';\\r\\nimport { DebugElement } from '@angular/core';\\r\\nimport { Directive } from '@angular/core';\\r\\nimport { ElementRef } from '@angular/core';\\r\\nimport { InjectFlags } from '@angular/core';\\r\\nimport { InjectionToken } from '@angular/core';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { NgModule } from '@angular/core';\\r\\nimport { NgZone } from '@angular/core';\\r\\nimport { Pipe } from '@angular/core';\\r\\nimport { PlatformRef } from '@angular/core';\\r\\nimport { SchemaMetadata } from '@angular/core';\\r\\nimport { Type } from '@angular/core';\\r\\n\\r\\n\\r\\nexport declare const __core_private_testing_placeholder__ = \\\"\\\";\\r\\n\\r\\n\\r\\n/**\\r\\n * Wraps a test function in an asynchronous test zone. The test will automatically\\r\\n * complete when all asynchronous calls within this zone are done. Can be used\\r\\n * to wrap an {@link inject} call.\\r\\n *\\r\\n * Example:\\r\\n *\\r\\n * ```\\r\\n * it('...', async(inject([AClass], (object) => {\\r\\n *   object.doSomething.then(() => {\\r\\n *     expect(...);\\r\\n *   })\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function async(fn: Function): (done: any) => any;\\r\\n\\r\\n/**\\r\\n * Fixture for debugging and testing a component.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ComponentFixture<T> {\\r\\n    componentRef: ComponentRef<T>;\\r\\n    ngZone: NgZone | null;\\r\\n    private _autoDetect;\\r\\n    /**\\r\\n     * The DebugElement associated with the root element of this component.\\r\\n     */\\r\\n    debugElement: DebugElement;\\r\\n    /**\\r\\n     * The instance of the root component class.\\r\\n     */\\r\\n    componentInstance: T;\\r\\n    /**\\r\\n     * The native element at the root of the component.\\r\\n     */\\r\\n    nativeElement: any;\\r\\n    /**\\r\\n     * The ElementRef for the element at the root of the component.\\r\\n     */\\r\\n    elementRef: ElementRef;\\r\\n    /**\\r\\n     * The ChangeDetectorRef for the component\\r\\n     */\\r\\n    changeDetectorRef: ChangeDetectorRef;\\r\\n    private _renderer;\\r\\n    private _isStable;\\r\\n    private _isDestroyed;\\r\\n    private _resolve;\\r\\n    private _promise;\\r\\n    private _onUnstableSubscription;\\r\\n    private _onStableSubscription;\\r\\n    private _onMicrotaskEmptySubscription;\\r\\n    private _onErrorSubscription;\\r\\n    constructor(componentRef: ComponentRef<T>, ngZone: NgZone | null, _autoDetect: boolean);\\r\\n    private _tick;\\r\\n    /**\\r\\n     * Trigger a change detection cycle for the component.\\r\\n     */\\r\\n    detectChanges(checkNoChanges?: boolean): void;\\r\\n    /**\\r\\n     * Do a change detection run to make sure there were no changes.\\r\\n     */\\r\\n    checkNoChanges(): void;\\r\\n    /**\\r\\n     * Set whether the fixture should autodetect changes.\\r\\n     *\\r\\n     * Also runs detectChanges once so that any existing change is detected.\\r\\n     */\\r\\n    autoDetectChanges(autoDetect?: boolean): void;\\r\\n    /**\\r\\n     * Return whether the fixture is currently stable or has async tasks that have not been completed\\r\\n     * yet.\\r\\n     */\\r\\n    isStable(): boolean;\\r\\n    /**\\r\\n     * Get a promise that resolves when the fixture is stable.\\r\\n     *\\r\\n     * This can be used to resume testing after events have triggered asynchronous activity or\\r\\n     * asynchronous change detection.\\r\\n     */\\r\\n    whenStable(): Promise<any>;\\r\\n    private _getRenderer;\\r\\n    /**\\r\\n      * Get a promise that resolves when the ui state is stable following animations.\\r\\n      */\\r\\n    whenRenderingDone(): Promise<any>;\\r\\n    /**\\r\\n     * Trigger component destruction.\\r\\n     */\\r\\n    destroy(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ComponentFixtureAutoDetect: InjectionToken<boolean[]>;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ComponentFixtureNoNgZone: InjectionToken<boolean[]>;\\r\\n\\r\\n/**\\r\\n * Discard all remaining periodic tasks.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function discardPeriodicTasks(): void;\\r\\n\\r\\n/**\\r\\n * Wraps a function to be executed in the fakeAsync zone:\\r\\n * - microtasks are manually executed by calling `flushMicrotasks()`,\\r\\n * - timers are synchronous, `tick()` simulates the asynchronous passage of time.\\r\\n *\\r\\n * If there are any pending timers at the end of the function, an exception will be thrown.\\r\\n *\\r\\n * Can be used to wrap inject() calls.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/testing/ts/fake_async.ts region='basic'}\\r\\n *\\r\\n * @param fn\\r\\n * @returns The function wrapped to be executed in the fakeAsync zone\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function fakeAsync(fn: Function): (...args: any[]) => any;\\r\\n\\r\\n/**\\r\\n * Simulates the asynchronous passage of time for the timers in the fakeAsync zone by\\r\\n * draining the macrotask queue until it is empty. The returned value is the milliseconds\\r\\n * of time that would have been elapsed.\\r\\n *\\r\\n * @param maxTurns\\r\\n * @returns The simulated time elapsed, in millis.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function flush(maxTurns?: number): number;\\r\\n\\r\\n/**\\r\\n * Flush any pending microtasks.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function flushMicrotasks(): void;\\r\\n\\r\\n/**\\r\\n * Returns a singleton of the applicable `TestBed`.\\r\\n *\\r\\n * It will be either an instance of `TestBedViewEngine` or `TestBedRender3`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const getTestBed: () => TestBed;\\r\\n\\r\\n/**\\r\\n * Allows injecting dependencies in `beforeEach()` and `it()`.\\r\\n *\\r\\n * Example:\\r\\n *\\r\\n * ```\\r\\n * beforeEach(inject([Dependency, AClass], (dep, object) => {\\r\\n *   // some code that uses `dep` and `object`\\r\\n *   // ...\\r\\n * }));\\r\\n *\\r\\n * it('...', inject([AClass], (object) => {\\r\\n *   object.doSomething();\\r\\n *   expect(...);\\r\\n * })\\r\\n * ```\\r\\n *\\r\\n * Notes:\\r\\n * - inject is currently a function because of some Traceur limitation the syntax should\\r\\n * eventually\\r\\n *   becomes `it('...', @Inject (object: AClass, async: AsyncTestCompleter) => { ... });`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function inject(tokens: any[], fn: Function): () => any;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class InjectSetupWrapper {\\r\\n    private _moduleDef;\\r\\n    constructor(_moduleDef: () => TestModuleMetadata);\\r\\n    private _addModule;\\r\\n    inject(tokens: any[], fn: Function): () => any;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Type used for modifications to metadata\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type MetadataOverride<T> = {\\r\\n    add?: Partial<T>;\\r\\n    remove?: Partial<T>;\\r\\n    set?: Partial<T>;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Clears out the shared fake async zone for a test.\\r\\n * To be called in a global `beforeEach`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function resetFakeAsyncZone(): void;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface TestBed {\\r\\n    platform: PlatformRef;\\r\\n    ngModule: Type<any> | Type<any>[];\\r\\n    /**\\r\\n     * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\\r\\n     * angular module. These are common to every test in the suite.\\r\\n     *\\r\\n     * This may only be called once, to set up the common providers for the current test\\r\\n     * suite on the current platform. If you absolutely need to change the providers,\\r\\n     * first use `resetTestEnvironment`.\\r\\n     *\\r\\n     * Test modules and platforms for individual platforms are available from\\r\\n     * '@angular/<platform_name>/testing'.\\r\\n     */\\r\\n    initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): void;\\r\\n    /**\\r\\n     * Reset the providers for the test injector.\\r\\n     */\\r\\n    resetTestEnvironment(): void;\\r\\n    resetTestingModule(): void;\\r\\n    configureCompiler(config: {\\r\\n        providers?: any[];\\r\\n        useJit?: boolean;\\r\\n    }): void;\\r\\n    configureTestingModule(moduleDef: TestModuleMetadata): void;\\r\\n    compileComponents(): Promise<any>;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue: null, flags?: InjectFlags): T | null;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get(token: any, notFoundValue?: any): any;\\r\\n    execute(tokens: any[], fn: Function, context?: any): any;\\r\\n    overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void;\\r\\n    overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void;\\r\\n    overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void;\\r\\n    overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void;\\r\\n    /**\\r\\n     * Overwrites all providers for the given token with the given provider definition.\\r\\n     */\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useFactory: Function;\\r\\n        deps: any[];\\r\\n    }): void;\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useValue: any;\\r\\n    }): void;\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useFactory?: Function;\\r\\n        useValue?: any;\\r\\n        deps?: any[];\\r\\n    }): void;\\r\\n    overrideTemplateUsingTestingModule(component: Type<any>, template: string): void;\\r\\n    createComponent<T>(component: Type<T>): ComponentFixture<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Configures and initializes environment for unit testing and provides methods for\\r\\n * creating components and services in unit tests.\\r\\n *\\r\\n * `TestBed` is the primary api for writing unit tests for Angular applications and libraries.\\r\\n *\\r\\n * Note: Use `TestBed` in tests. It will be set to either `TestBedViewEngine` or `TestBedRender3`\\r\\n * according to the compiler used.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const TestBed: TestBedStatic;\\r\\n\\r\\n/**\\r\\n * Static methods implemented by the `TestBedViewEngine` and `TestBedRender3`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface TestBedStatic {\\r\\n    new (...args: any[]): TestBed;\\r\\n    initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): TestBed;\\r\\n    /**\\r\\n     * Reset the providers for the test injector.\\r\\n     */\\r\\n    resetTestEnvironment(): void;\\r\\n    resetTestingModule(): TestBedStatic;\\r\\n    /**\\r\\n     * Allows overriding default compiler providers and settings\\r\\n     * which are defined in test_injector.js\\r\\n     */\\r\\n    configureCompiler(config: {\\r\\n        providers?: any[];\\r\\n        useJit?: boolean;\\r\\n    }): TestBedStatic;\\r\\n    /**\\r\\n     * Allows overriding default providers, directives, pipes, modules of the test injector,\\r\\n     * which are defined in test_injector.js\\r\\n     */\\r\\n    configureTestingModule(moduleDef: TestModuleMetadata): TestBedStatic;\\r\\n    /**\\r\\n     * Compile components with a `templateUrl` for the test's NgModule.\\r\\n     * It is necessary to call this function\\r\\n     * as fetching urls is asynchronous.\\r\\n     */\\r\\n    compileComponents(): Promise<any>;\\r\\n    overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): TestBedStatic;\\r\\n    overrideComponent(component: Type<any>, override: MetadataOverride<Component>): TestBedStatic;\\r\\n    overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): TestBedStatic;\\r\\n    overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): TestBedStatic;\\r\\n    overrideTemplate(component: Type<any>, template: string): TestBedStatic;\\r\\n    /**\\r\\n     * Overrides the template of the given component, compiling the template\\r\\n     * in the context of the TestingModule.\\r\\n     *\\r\\n     * Note: This works for JIT and AOTed components as well.\\r\\n     */\\r\\n    overrideTemplateUsingTestingModule(component: Type<any>, template: string): TestBedStatic;\\r\\n    /**\\r\\n     * Overwrites all providers for the given token with the given provider definition.\\r\\n     *\\r\\n     * Note: This works for JIT and AOTed components as well.\\r\\n     */\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useFactory: Function;\\r\\n        deps: any[];\\r\\n    }): TestBedStatic;\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useValue: any;\\r\\n    }): TestBedStatic;\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useFactory?: Function;\\r\\n        useValue?: any;\\r\\n        deps?: any[];\\r\\n    }): TestBedStatic;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue: null, flags?: InjectFlags): T | null;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get(token: any, notFoundValue?: any): any;\\r\\n    createComponent<T>(component: Type<T>): ComponentFixture<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An abstract class for inserting the root test component element in a platform independent way.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class TestComponentRenderer {\\r\\n    insertRootElement(rootElementId: string): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type TestModuleMetadata = {\\r\\n    providers?: any[];\\r\\n    declarations?: any[];\\r\\n    imports?: any[];\\r\\n    schemas?: Array<SchemaMetadata | any[]>;\\r\\n    aotSummaries?: () => any[];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Simulates the asynchronous passage of time for the timers in the fakeAsync zone.\\r\\n *\\r\\n * The microtasks queue is drained at the very start of this function and after any timer callback\\r\\n * has been executed.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * {@example core/testing/ts/fake_async.ts region='basic'}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function tick(millis?: number): void;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function withModule(moduleDef: TestModuleMetadata): InjectSetupWrapper;\\r\\n\\r\\nexport declare function withModule(moduleDef: TestModuleMetadata, fn: Function): () => any;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Configures and initializes environment for unit testing and provides methods for\\r\\n * creating components and services in unit tests.\\r\\n *\\r\\n * `TestBed` is the primary api for writing unit tests for Angular applications and libraries.\\r\\n *\\r\\n * Note: Use `TestBed` in tests. It will be set to either `TestBedViewEngine` or `TestBedRender3`\\r\\n * according to the compiler used.\\r\\n */\\r\\nexport declare class ɵangular_packages_core_testing_testing_a implements TestBed {\\r\\n    /**\\r\\n     * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\\r\\n     * angular module. These are common to every test in the suite.\\r\\n     *\\r\\n     * This may only be called once, to set up the common providers for the current test\\r\\n     * suite on the current platform. If you absolutely need to change the providers,\\r\\n     * first use `resetTestEnvironment`.\\r\\n     *\\r\\n     * Test modules and platforms for individual platforms are available from\\r\\n     * '@angular/<platform_name>/testing'.\\r\\n     */\\r\\n    static initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): ɵangular_packages_core_testing_testing_a;\\r\\n    /**\\r\\n     * Reset the providers for the test injector.\\r\\n     */\\r\\n    static resetTestEnvironment(): void;\\r\\n    static resetTestingModule(): TestBedStatic;\\r\\n    /**\\r\\n     * Allows overriding default compiler providers and settings\\r\\n     * which are defined in test_injector.js\\r\\n     */\\r\\n    static configureCompiler(config: {\\r\\n        providers?: any[];\\r\\n        useJit?: boolean;\\r\\n    }): TestBedStatic;\\r\\n    /**\\r\\n     * Allows overriding default providers, directives, pipes, modules of the test injector,\\r\\n     * which are defined in test_injector.js\\r\\n     */\\r\\n    static configureTestingModule(moduleDef: TestModuleMetadata): TestBedStatic;\\r\\n    /**\\r\\n     * Compile components with a `templateUrl` for the test's NgModule.\\r\\n     * It is necessary to call this function\\r\\n     * as fetching urls is asynchronous.\\r\\n     */\\r\\n    static compileComponents(): Promise<any>;\\r\\n    static overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): TestBedStatic;\\r\\n    static overrideComponent(component: Type<any>, override: MetadataOverride<Component>): TestBedStatic;\\r\\n    static overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): TestBedStatic;\\r\\n    static overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): TestBedStatic;\\r\\n    static overrideTemplate(component: Type<any>, template: string): TestBedStatic;\\r\\n    /**\\r\\n     * Overrides the template of the given component, compiling the template\\r\\n     * in the context of the TestingModule.\\r\\n     *\\r\\n     * Note: This works for JIT and AOTed components as well.\\r\\n     */\\r\\n    static overrideTemplateUsingTestingModule(component: Type<any>, template: string): TestBedStatic;\\r\\n    /**\\r\\n     * Overwrites all providers for the given token with the given provider definition.\\r\\n     *\\r\\n     * Note: This works for JIT and AOTed components as well.\\r\\n     */\\r\\n    static overrideProvider(token: any, provider: {\\r\\n        useFactory: Function;\\r\\n        deps: any[];\\r\\n    }): TestBedStatic;\\r\\n    static overrideProvider(token: any, provider: {\\r\\n        useValue: any;\\r\\n    }): TestBedStatic;\\r\\n    static inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    static inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue: null, flags?: InjectFlags): T | null;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    static get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\\r\\n    /**\\r\\n     * @deprecated from v9.0.0 use TestBed.inject\\r\\n     * @suppress {duplicate}\\r\\n     */\\r\\n    static get(token: any, notFoundValue?: any): any;\\r\\n    static createComponent<T>(component: Type<T>): ComponentFixture<T>;\\r\\n    private _instantiated;\\r\\n    private _compiler;\\r\\n    private _moduleRef;\\r\\n    private _moduleFactory;\\r\\n    private _compilerOptions;\\r\\n    private _moduleOverrides;\\r\\n    private _componentOverrides;\\r\\n    private _directiveOverrides;\\r\\n    private _pipeOverrides;\\r\\n    private _providers;\\r\\n    private _declarations;\\r\\n    private _imports;\\r\\n    private _schemas;\\r\\n    private _activeFixtures;\\r\\n    private _testEnvAotSummaries;\\r\\n    private _aotSummaries;\\r\\n    private _templateOverrides;\\r\\n    private _isRoot;\\r\\n    private _rootProviderOverrides;\\r\\n    platform: PlatformRef;\\r\\n    ngModule: Type<any> | Type<any>[];\\r\\n    /**\\r\\n     * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\\r\\n     * angular module. These are common to every test in the suite.\\r\\n     *\\r\\n     * This may only be called once, to set up the common providers for the current test\\r\\n     * suite on the current platform. If you absolutely need to change the providers,\\r\\n     * first use `resetTestEnvironment`.\\r\\n     *\\r\\n     * Test modules and platforms for individual platforms are available from\\r\\n     * '@angular/<platform_name>/testing'.\\r\\n     */\\r\\n    initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): void;\\r\\n    /**\\r\\n     * Reset the providers for the test injector.\\r\\n     */\\r\\n    resetTestEnvironment(): void;\\r\\n    resetTestingModule(): void;\\r\\n    configureCompiler(config: {\\r\\n        providers?: any[];\\r\\n        useJit?: boolean;\\r\\n    }): void;\\r\\n    configureTestingModule(moduleDef: TestModuleMetadata): void;\\r\\n    compileComponents(): Promise<any>;\\r\\n    private _initIfNeeded;\\r\\n    private _createCompilerAndModule;\\r\\n    private _assertNotInstantiated;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue: null, flags?: InjectFlags): T | null;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get(token: any, notFoundValue?: any): any;\\r\\n    execute(tokens: any[], fn: Function, context?: any): any;\\r\\n    overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void;\\r\\n    overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void;\\r\\n    overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void;\\r\\n    overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void;\\r\\n    /**\\r\\n     * Overwrites all providers for the given token with the given provider definition.\\r\\n     */\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useFactory: Function;\\r\\n        deps: any[];\\r\\n    }): void;\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useValue: any;\\r\\n    }): void;\\r\\n    private overrideProviderImpl;\\r\\n    overrideTemplateUsingTestingModule(component: Type<any>, template: string): void;\\r\\n    createComponent<T>(component: Type<T>): ComponentFixture<T>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Configures and initializes environment for unit testing and provides methods for\\r\\n * creating components and services in unit tests.\\r\\n *\\r\\n * TestBed is the primary api for writing unit tests for Angular applications and libraries.\\r\\n *\\r\\n * Note: Use `TestBed` in tests. It will be set to either `TestBedViewEngine` or `TestBedRender3`\\r\\n * according to the compiler used.\\r\\n */\\r\\nexport declare class ɵangular_packages_core_testing_testing_b implements TestBed {\\r\\n    /**\\r\\n     * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\\r\\n     * angular module. These are common to every test in the suite.\\r\\n     *\\r\\n     * This may only be called once, to set up the common providers for the current test\\r\\n     * suite on the current platform. If you absolutely need to change the providers,\\r\\n     * first use `resetTestEnvironment`.\\r\\n     *\\r\\n     * Test modules and platforms for individual platforms are available from\\r\\n     * '@angular/<platform_name>/testing'.\\r\\n     *\\r\\n     * @publicApi\\r\\n     */\\r\\n    static initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): TestBed;\\r\\n    /**\\r\\n     * Reset the providers for the test injector.\\r\\n     *\\r\\n     * @publicApi\\r\\n     */\\r\\n    static resetTestEnvironment(): void;\\r\\n    static configureCompiler(config: {\\r\\n        providers?: any[];\\r\\n        useJit?: boolean;\\r\\n    }): TestBedStatic;\\r\\n    /**\\r\\n     * Allows overriding default providers, directives, pipes, modules of the test injector,\\r\\n     * which are defined in test_injector.js\\r\\n     */\\r\\n    static configureTestingModule(moduleDef: TestModuleMetadata): TestBedStatic;\\r\\n    /**\\r\\n     * Compile components with a `templateUrl` for the test's NgModule.\\r\\n     * It is necessary to call this function\\r\\n     * as fetching urls is asynchronous.\\r\\n     */\\r\\n    static compileComponents(): Promise<any>;\\r\\n    static overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): TestBedStatic;\\r\\n    static overrideComponent(component: Type<any>, override: MetadataOverride<Component>): TestBedStatic;\\r\\n    static overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): TestBedStatic;\\r\\n    static overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): TestBedStatic;\\r\\n    static overrideTemplate(component: Type<any>, template: string): TestBedStatic;\\r\\n    /**\\r\\n     * Overrides the template of the given component, compiling the template\\r\\n     * in the context of the TestingModule.\\r\\n     *\\r\\n     * Note: This works for JIT and AOTed components as well.\\r\\n     */\\r\\n    static overrideTemplateUsingTestingModule(component: Type<any>, template: string): TestBedStatic;\\r\\n    static overrideProvider(token: any, provider: {\\r\\n        useFactory: Function;\\r\\n        deps: any[];\\r\\n    }): TestBedStatic;\\r\\n    static overrideProvider(token: any, provider: {\\r\\n        useValue: any;\\r\\n    }): TestBedStatic;\\r\\n    static inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    static inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue: null, flags?: InjectFlags): T | null;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    static get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    static get(token: any, notFoundValue?: any): any;\\r\\n    static createComponent<T>(component: Type<T>): ComponentFixture<T>;\\r\\n    static resetTestingModule(): TestBedStatic;\\r\\n    platform: PlatformRef;\\r\\n    ngModule: Type<any> | Type<any>[];\\r\\n    private _compiler;\\r\\n    private _testModuleRef;\\r\\n    private _activeFixtures;\\r\\n    private _globalCompilationChecked;\\r\\n    /**\\r\\n     * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\\r\\n     * angular module. These are common to every test in the suite.\\r\\n     *\\r\\n     * This may only be called once, to set up the common providers for the current test\\r\\n     * suite on the current platform. If you absolutely need to change the providers,\\r\\n     * first use `resetTestEnvironment`.\\r\\n     *\\r\\n     * Test modules and platforms for individual platforms are available from\\r\\n     * '@angular/<platform_name>/testing'.\\r\\n     *\\r\\n     * @publicApi\\r\\n     */\\r\\n    initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): void;\\r\\n    /**\\r\\n     * Reset the providers for the test injector.\\r\\n     *\\r\\n     * @publicApi\\r\\n     */\\r\\n    resetTestEnvironment(): void;\\r\\n    resetTestingModule(): void;\\r\\n    configureCompiler(config: {\\r\\n        providers?: any[];\\r\\n        useJit?: boolean;\\r\\n    }): void;\\r\\n    configureTestingModule(moduleDef: TestModuleMetadata): void;\\r\\n    compileComponents(): Promise<any>;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue?: T, flags?: InjectFlags): T;\\r\\n    inject<T>(token: Type<T> | InjectionToken<T> | AbstractType<T>, notFoundValue: null, flags?: InjectFlags): T | null;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\\r\\n    /** @deprecated from v9.0.0 use TestBed.inject */\\r\\n    get(token: any, notFoundValue?: any): any;\\r\\n    execute(tokens: any[], fn: Function, context?: any): any;\\r\\n    overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void;\\r\\n    overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void;\\r\\n    overrideTemplateUsingTestingModule(component: Type<any>, template: string): void;\\r\\n    overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void;\\r\\n    overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void;\\r\\n    /**\\r\\n     * Overwrites all providers for the given token with the given provider definition.\\r\\n     */\\r\\n    overrideProvider(token: any, provider: {\\r\\n        useFactory?: Function;\\r\\n        useValue?: any;\\r\\n        deps?: any[];\\r\\n    }): void;\\r\\n    createComponent<T>(type: Type<T>): ComponentFixture<T>;\\r\\n    private readonly compiler;\\r\\n    private readonly testModuleRef;\\r\\n    private assertNotInstantiated;\\r\\n    /**\\r\\n     * Check whether the module scoping queue should be flushed, and flush it if needed.\\r\\n     *\\r\\n     * When the TestBed is reset, it clears the JIT module compilation queue, cancelling any\\r\\n     * in-progress module compilation. This creates a potential hazard - the very first time the\\r\\n     * TestBed is initialized (or if it's reset without being initialized), there may be pending\\r\\n     * compilations of modules declared in global scope. These compilations should be finished.\\r\\n     *\\r\\n     * To ensure that globally declared modules have their components scoped properly, this function\\r\\n     * is called whenever TestBed is initialized or reset. The _first_ time that this happens, prior\\r\\n     * to any other operations, the scoping queue is flushed.\\r\\n     */\\r\\n    private checkGlobalCompilationFinished;\\r\\n    private destroyActiveFixtures;\\r\\n}\\r\\n\\r\\nexport declare function ɵangular_packages_core_testing_testing_c(): ɵangular_packages_core_testing_testing_b;\\r\\n\\r\\nexport declare class ɵMetadataOverrider {\\r\\n    private _references;\\r\\n    /**\\r\\n     * Creates a new instance for the given metadata class\\r\\n     * based on an old instance and overrides.\\r\\n     */\\r\\n    overrideMetadata<C extends T, T>(metadataClass: {\\r\\n        new (options: T): C;\\r\\n    }, oldMetadata: C, override: MetadataOverride<T>): C;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Special interface to the compiler only used by testing\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ɵTestingCompiler extends Compiler {\\r\\n    readonly injector: Injector;\\r\\n    overrideModule(module: Type<any>, overrides: MetadataOverride<NgModule>): void;\\r\\n    overrideDirective(directive: Type<any>, overrides: MetadataOverride<Directive>): void;\\r\\n    overrideComponent(component: Type<any>, overrides: MetadataOverride<Component>): void;\\r\\n    overridePipe(directive: Type<any>, overrides: MetadataOverride<Pipe>): void;\\r\\n    /**\\r\\n     * Allows to pass the compile summary from AOT compilation to the JIT compiler,\\r\\n     * so that it can use the code generated by AOT.\\r\\n     */\\r\\n    loadAotSummaries(summaries: () => any[]): void;\\r\\n    /**\\r\\n     * Gets the component factory for the given component.\\r\\n     * This assumes that the component has been compiled before calling this call using\\r\\n     * `compileModuleAndAllComponents*`.\\r\\n     */\\r\\n    getComponentFactory<T>(component: Type<T>): ComponentFactory<T>;\\r\\n    /**\\r\\n     * Returns the component type that is stored in the given error.\\r\\n     * This can be used for errors created by compileModule...\\r\\n     */\\r\\n    getComponentFromError(error: Error): Type<any> | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A factory for creating a Compiler\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ɵTestingCompilerFactory {\\r\\n    abstract createTestingCompiler(options?: CompilerOptions[]): ɵTestingCompiler;\\r\\n}\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=testing.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser/animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nexport * from './animations/animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser/animations/animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { AnimationBuilder } from '@angular/animations';\\r\\nimport { AnimationDriver } from '@angular/animations/browser';\\r\\nimport { AnimationFactory } from '@angular/animations';\\r\\nimport { AnimationMetadata } from '@angular/animations';\\r\\nimport { AnimationOptions } from '@angular/animations';\\r\\nimport { AnimationPlayer } from '@angular/animations';\\r\\nimport { InjectionToken } from '@angular/core';\\r\\nimport { NgZone } from '@angular/core';\\r\\nimport { Provider } from '@angular/core';\\r\\nimport { Renderer2 } from '@angular/core';\\r\\nimport { RendererFactory2 } from '@angular/core';\\r\\nimport { RendererStyleFlags2 } from '@angular/core';\\r\\nimport { RendererType2 } from '@angular/core';\\r\\nimport { ɵAnimationEngine } from '@angular/animations/browser';\\r\\nimport { ɵAnimationStyleNormalizer } from '@angular/animations/browser';\\r\\nimport { ɵCssKeyframesDriver } from '@angular/animations/browser';\\r\\nimport { ɵDomRendererFactory2 } from '@angular/platform-browser';\\r\\nimport { ɵWebAnimationsDriver } from '@angular/animations/browser';\\r\\nimport { ɵWebAnimationsStyleNormalizer } from '@angular/animations/browser';\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '@angular/platform-browser';\\nexport declare const ANIMATION_MODULE_TYPE: InjectionToken<\\\"NoopAnimations\\\" | \\\"BrowserAnimations\\\">;\\r\\n\\r\\n/**\\r\\n * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)\\r\\n * for use with animations. See [Animations](guide/animations).\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class BrowserAnimationsModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<BrowserAnimationsModule, never, never, [typeof ɵngcc1.BrowserModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<BrowserAnimationsModule>;\\n}\\r\\n\\r\\n/**\\r\\n * A null player that must be imported to allow disabling of animations.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NoopAnimationsModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<NoopAnimationsModule, never, never, [typeof ɵngcc1.BrowserModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<NoopAnimationsModule>;\\n}\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_animations_animations_a(): ɵWebAnimationsDriver | ɵCssKeyframesDriver;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_animations_animations_b(): ɵWebAnimationsStyleNormalizer;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_animations_animations_c(renderer: ɵDomRendererFactory2, engine: ɵAnimationEngine, zone: NgZone): ɵAnimationRendererFactory;\\r\\n\\r\\n/**\\r\\n * Separate providers from the actual module so that we can do a local modification in Google3 to\\r\\n * include them in the BrowserModule.\\r\\n */\\r\\nexport declare const ɵangular_packages_platform_browser_animations_animations_d: Provider[];\\r\\n\\r\\n/**\\r\\n * Separate providers from the actual module so that we can do a local modification in Google3 to\\r\\n * include them in the BrowserTestingModule.\\r\\n */\\r\\nexport declare const ɵangular_packages_platform_browser_animations_animations_e: Provider[];\\r\\n\\r\\nexport declare class ɵangular_packages_platform_browser_animations_animations_f implements Renderer2 {\\r\\n    protected namespaceId: string;\\r\\n    delegate: Renderer2;\\r\\n    engine: ɵAnimationEngine;\\r\\n    constructor(namespaceId: string, delegate: Renderer2, engine: ɵAnimationEngine);\\r\\n    readonly data: {\\r\\n        [key: string]: any;\\r\\n    };\\r\\n    destroyNode: ((n: any) => void) | null;\\r\\n    destroy(): void;\\r\\n    createElement(name: string, namespace?: string | null | undefined): any;\\r\\n    createComment(value: string): any;\\r\\n    createText(value: string): any;\\r\\n    appendChild(parent: any, newChild: any): void;\\r\\n    insertBefore(parent: any, newChild: any, refChild: any): void;\\r\\n    removeChild(parent: any, oldChild: any, isHostElement: boolean): void;\\r\\n    selectRootElement(selectorOrNode: any, preserveContent?: boolean): any;\\r\\n    parentNode(node: any): any;\\r\\n    nextSibling(node: any): any;\\r\\n    setAttribute(el: any, name: string, value: string, namespace?: string | null | undefined): void;\\r\\n    removeAttribute(el: any, name: string, namespace?: string | null | undefined): void;\\r\\n    addClass(el: any, name: string): void;\\r\\n    removeClass(el: any, name: string): void;\\r\\n    setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2 | undefined): void;\\r\\n    removeStyle(el: any, style: string, flags?: RendererStyleFlags2 | undefined): void;\\r\\n    setProperty(el: any, name: string, value: any): void;\\r\\n    setValue(node: any, value: string): void;\\r\\n    listen(target: any, eventName: string, callback: (event: any) => boolean | void): () => void;\\r\\n    protected disableAnimations(element: any, value: boolean): void;\\r\\n}\\r\\n\\r\\nexport declare class ɵAnimationRenderer extends ɵangular_packages_platform_browser_animations_animations_f implements Renderer2 {\\r\\n    factory: ɵAnimationRendererFactory;\\r\\n    constructor(factory: ɵAnimationRendererFactory, namespaceId: string, delegate: Renderer2, engine: ɵAnimationEngine);\\r\\n    setProperty(el: any, name: string, value: any): void;\\r\\n    listen(target: 'window' | 'document' | 'body' | any, eventName: string, callback: (event: any) => any): () => void;\\r\\n}\\r\\n\\r\\nexport declare class ɵAnimationRendererFactory implements RendererFactory2 {\\r\\n    private delegate;\\r\\n    private engine;\\r\\n    private _zone;\\r\\n    private _currentId;\\r\\n    private _microtaskId;\\r\\n    private _animationCallbacksBuffer;\\r\\n    private _rendererCache;\\r\\n    private _cdRecurDepth;\\r\\n    private promise;\\r\\n    constructor(delegate: RendererFactory2, engine: ɵAnimationEngine, _zone: NgZone);\\r\\n    createRenderer(hostElement: any, type: RendererType2): Renderer2;\\r\\n    begin(): void;\\r\\n    private _scheduleCountTask;\\r\\n    end(): void;\\r\\n    whenRenderingDone(): Promise<any>;\\r\\n}\\r\\n\\r\\nexport declare class ɵBrowserAnimationBuilder extends AnimationBuilder {\\r\\n    private _nextAnimationId;\\r\\n    private _renderer;\\r\\n    constructor(rootRenderer: RendererFactory2, doc: any);\\r\\n    build(animation: AnimationMetadata | AnimationMetadata[]): AnimationFactory;\\r\\n}\\r\\n\\r\\nexport declare class ɵBrowserAnimationFactory extends AnimationFactory {\\r\\n    private _id;\\r\\n    private _renderer;\\r\\n    constructor(_id: string, _renderer: ɵAnimationRenderer);\\r\\n    create(element: any, options?: AnimationOptions): AnimationPlayer;\\r\\n}\\r\\n\\r\\nexport declare class ɵInjectableAnimationEngine extends ɵAnimationEngine {\\r\\n    constructor(doc: any, driver: AnimationDriver, normalizer: ɵAnimationStyleNormalizer);\\r\\n}\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=animations.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser/platform-browser.d.ts\",\n      \"node_modules/@angular/platform-browser/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { ComponentRef } from '@angular/core';\\r\\nimport { DebugElement } from '@angular/core';\\r\\nimport { DebugNode } from '@angular/core';\\r\\nimport { ErrorHandler } from '@angular/core';\\r\\nimport { GetTestability } from '@angular/core';\\r\\nimport { InjectionToken } from '@angular/core';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { ModuleWithProviders } from '@angular/core';\\r\\nimport { NgProbeToken } from '@angular/core';\\r\\nimport { NgZone } from '@angular/core';\\r\\nimport { OnDestroy } from '@angular/core';\\r\\nimport { PlatformRef } from '@angular/core';\\r\\nimport { Predicate } from '@angular/core';\\r\\nimport { Provider } from '@angular/core';\\r\\nimport { Renderer2 } from '@angular/core';\\r\\nimport { RendererFactory2 } from '@angular/core';\\r\\nimport { RendererType2 } from '@angular/core';\\r\\nimport { Sanitizer } from '@angular/core';\\r\\nimport { SecurityContext } from '@angular/core';\\r\\nimport { StaticProvider } from '@angular/core';\\r\\nimport { Testability } from '@angular/core';\\r\\nimport { TestabilityRegistry } from '@angular/core';\\r\\nimport { Type } from '@angular/core';\\r\\nimport { Version } from '@angular/core';\\r\\nimport { ɵConsole } from '@angular/core';\\r\\nimport { ɵDomAdapter } from '@angular/common';\\r\\nimport { ɵgetDOM } from '@angular/common';\\r\\n\\r\\n/**\\r\\n * Exports required infrastructure for all Angular apps.\\r\\n * Included by default in all Angular apps created with the CLI\\r\\n * `new` command.\\r\\n * Re-exports `CommonModule` and `ApplicationModule`, making their\\r\\n * exports and providers available to all apps.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '@angular/common';\\nexport declare class BrowserModule {\\r\\n    constructor(parentModule: BrowserModule | null);\\r\\n    /**\\r\\n     * Configures a browser-based app to transition from a server-rendered app, if\\r\\n     * one is present on the page.\\r\\n     *\\r\\n     * @param params An object containing an identifier for the app to transition.\\r\\n     * The ID must match between the client and server versions of the app.\\r\\n     * @returns The reconfigured `BrowserModule` to import into the app's root `AppModule`.\\r\\n     */\\r\\n    static withServerTransition(params: {\\r\\n        appId: string;\\r\\n    }): ModuleWithProviders<BrowserModule>;\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<BrowserModule, never, never, [typeof ɵngcc1.CommonModule, typeof ɵngcc0.ApplicationModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<BrowserModule>;\\n}\\r\\n\\r\\n/**\\r\\n * NgModule to install on the client side while using the `TransferState` to transfer state from\\r\\n * server to client.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class BrowserTransferStateModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<BrowserTransferStateModule, never, never, never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<BrowserTransferStateModule>;\\n}\\r\\n\\r\\n/**\\r\\n * Predicates for use with {@link DebugElement}'s query functions.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class By {\\r\\n    /**\\r\\n     * Match all nodes.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\\r\\n     */\\r\\n    static all(): Predicate<DebugNode>;\\r\\n    /**\\r\\n     * Match elements by the given CSS selector.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\\r\\n     */\\r\\n    static css(selector: string): Predicate<DebugElement>;\\r\\n    /**\\r\\n     * Match nodes that have the given directive present.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Example\\r\\n     *\\r\\n     * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\\r\\n     */\\r\\n    static directive(type: Type<any>): Predicate<DebugNode>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Disables Angular tools.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function disableDebugTools(): void;\\r\\n\\r\\n/**\\r\\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\\r\\n * values to be safe to use in the different DOM contexts.\\r\\n *\\r\\n * For example, when binding a URL in an `<a [href]=\\\"someValue\\\">` hyperlink, `someValue` will be\\r\\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\\r\\n * the website.\\r\\n *\\r\\n * In specific situations, it might be necessary to disable sanitization, for example if the\\r\\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\\r\\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\\r\\n * methods, and then binding to that value from the template.\\r\\n *\\r\\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\\r\\n * Cross Site Scripting (XSS) security bug!\\r\\n *\\r\\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\\r\\n * close as possible to the source of the value, to make it easy to verify no security bug is\\r\\n * created by its use.\\r\\n *\\r\\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\\r\\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\\r\\n * code. The sanitizer leaves safe values intact.\\r\\n *\\r\\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\\r\\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\\r\\n * into this call. Make sure any user data is appropriately escaped for this security context.\\r\\n * For more detail, see the [Security Guide](http://g.co/ng/security).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class DomSanitizer implements Sanitizer {\\r\\n    /**\\r\\n     * Sanitizes a value for use in the given SecurityContext.\\r\\n     *\\r\\n     * If value is trusted for the context, this method will unwrap the contained safe value and use\\r\\n     * it directly. Otherwise, value will be sanitized to be safe in the given context, for example\\r\\n     * by replacing URLs that have an unsafe protocol part (such as `javascript:`). The implementation\\r\\n     * is responsible to make sure that the value can definitely be safely used in the given context.\\r\\n     */\\r\\n    abstract sanitize(context: SecurityContext, value: SafeValue | string | null): string | null;\\r\\n    /**\\r\\n     * Bypass security and trust the given value to be safe HTML. Only use this when the bound HTML\\r\\n     * is unsafe (e.g. contains `<script>` tags) and the code should be executed. The sanitizer will\\r\\n     * leave safe HTML intact, so in most situations this method should not be used.\\r\\n     *\\r\\n     * **WARNING:** calling this method with untrusted user data exposes your application to XSS\\r\\n     * security risks!\\r\\n     */\\r\\n    abstract bypassSecurityTrustHtml(value: string): SafeHtml;\\r\\n    /**\\r\\n     * Bypass security and trust the given value to be safe style value (CSS).\\r\\n     *\\r\\n     * **WARNING:** calling this method with untrusted user data exposes your application to XSS\\r\\n     * security risks!\\r\\n     */\\r\\n    abstract bypassSecurityTrustStyle(value: string): SafeStyle;\\r\\n    /**\\r\\n     * Bypass security and trust the given value to be safe JavaScript.\\r\\n     *\\r\\n     * **WARNING:** calling this method with untrusted user data exposes your application to XSS\\r\\n     * security risks!\\r\\n     */\\r\\n    abstract bypassSecurityTrustScript(value: string): SafeScript;\\r\\n    /**\\r\\n     * Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used\\r\\n     * in hyperlinks or `<img src>`.\\r\\n     *\\r\\n     * **WARNING:** calling this method with untrusted user data exposes your application to XSS\\r\\n     * security risks!\\r\\n     */\\r\\n    abstract bypassSecurityTrustUrl(value: string): SafeUrl;\\r\\n    /**\\r\\n     * Bypass security and trust the given value to be a safe resource URL, i.e. a location that may\\r\\n     * be used to load executable code from, like `<script src>`, or `<iframe src>`.\\r\\n     *\\r\\n     * **WARNING:** calling this method with untrusted user data exposes your application to XSS\\r\\n     * security risks!\\r\\n     */\\r\\n    abstract bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<DomSanitizer>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<DomSanitizer>;\\n}\\r\\n\\r\\n/**\\r\\n * Enabled Angular debug tools that are accessible via your browser's\\r\\n * developer console.\\r\\n *\\r\\n * Usage:\\r\\n *\\r\\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\\r\\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\\r\\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\\r\\n *    then hit Enter.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T>;\\r\\n\\r\\n/**\\r\\n * The injection token for the event-manager plug-in service.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const EVENT_MANAGER_PLUGINS: InjectionToken<ɵangular_packages_platform_browser_platform_browser_g[]>;\\r\\n\\r\\n/**\\r\\n * An injectable service that provides event management for Angular\\r\\n * through a browser plug-in.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class EventManager {\\r\\n    private _zone;\\r\\n    private _plugins;\\r\\n    private _eventNameToPlugin;\\r\\n    /**\\r\\n     * Initializes an instance of the event-manager service.\\r\\n     */\\r\\n    constructor(plugins: ɵangular_packages_platform_browser_platform_browser_g[], _zone: NgZone);\\r\\n    /**\\r\\n     * Registers a handler for a specific element and event.\\r\\n     *\\r\\n     * @param element The HTML element to receive event notifications.\\r\\n     * @param eventName The name of the event to listen for.\\r\\n     * @param handler A function to call when the notification occurs. Receives the\\r\\n     * event object as an argument.\\r\\n     * @returns  A callback function that can be used to remove the handler.\\r\\n     */\\r\\n    addEventListener(element: HTMLElement, eventName: string, handler: Function): Function;\\r\\n    /**\\r\\n     * Registers a global handler for an event in a target view.\\r\\n     *\\r\\n     * @param target A target for global event notifications. One of \\\"window\\\", \\\"document\\\", or \\\"body\\\".\\r\\n     * @param eventName The name of the event to listen for.\\r\\n     * @param handler A function to call when the notification occurs. Receives the\\r\\n     * event object as an argument.\\r\\n     * @returns A callback function that can be used to remove the handler.\\r\\n     */\\r\\n    addGlobalEventListener(target: string, eventName: string, handler: Function): Function;\\r\\n    /**\\r\\n     * Retrieves the compilation zone in which event listeners are registered.\\r\\n     */\\r\\n    getZone(): NgZone;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<EventManager>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<EventManager>;\\n}\\r\\n\\r\\n/**\\r\\n * DI token for providing [HammerJS](http://hammerjs.github.io/) support to Angular.\\r\\n * @see `HammerGestureConfig`\\r\\n *\\r\\n * @ngModule HammerModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const HAMMER_GESTURE_CONFIG: InjectionToken<HammerGestureConfig>;\\r\\n\\r\\n/**\\r\\n * Injection token used to provide a {@link HammerLoader} to Angular.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const HAMMER_LOADER: InjectionToken<HammerLoader>;\\r\\n\\r\\n/**\\r\\n * An injectable [HammerJS Manager](http://hammerjs.github.io/api/#hammer.manager)\\r\\n * for gesture recognition. Configures specific event recognition.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class HammerGestureConfig {\\r\\n    /**\\r\\n     * A set of supported event names for gestures to be used in Angular.\\r\\n     * Angular supports all built-in recognizers, as listed in\\r\\n     * [HammerJS documentation](http://hammerjs.github.io/).\\r\\n     */\\r\\n    events: string[];\\r\\n    /**\\r\\n    * Maps gesture event names to a set of configuration options\\r\\n    * that specify overrides to the default values for specific properties.\\r\\n    *\\r\\n    * The key is a supported event name to be configured,\\r\\n    * and the options object contains a set of properties, with override values\\r\\n    * to be applied to the named recognizer event.\\r\\n    * For example, to disable recognition of the rotate event, specify\\r\\n    *  `{\\\"rotate\\\": {\\\"enable\\\": false}}`.\\r\\n    *\\r\\n    * Properties that are not present take the HammerJS default values.\\r\\n    * For information about which properties are supported for which events,\\r\\n    * and their allowed and default values, see\\r\\n    * [HammerJS documentation](http://hammerjs.github.io/).\\r\\n    *\\r\\n    */\\r\\n    overrides: {\\r\\n        [key: string]: Object;\\r\\n    };\\r\\n    /**\\r\\n     * Properties whose default values can be overridden for a given event.\\r\\n     * Different sets of properties apply to different events.\\r\\n     * For information about which properties are supported for which events,\\r\\n     * and their allowed and default values, see\\r\\n     * [HammerJS documentation](http://hammerjs.github.io/).\\r\\n     */\\r\\n    options?: {\\r\\n        cssProps?: any;\\r\\n        domEvents?: boolean;\\r\\n        enable?: boolean | ((manager: any) => boolean);\\r\\n        preset?: any[];\\r\\n        touchAction?: string;\\r\\n        recognizers?: any[];\\r\\n        inputClass?: any;\\r\\n        inputTarget?: EventTarget;\\r\\n    };\\r\\n    /**\\r\\n     * Creates a [HammerJS Manager](http://hammerjs.github.io/api/#hammer.manager)\\r\\n     * and attaches it to a given HTML element.\\r\\n     * @param element The element that will recognize gestures.\\r\\n     * @returns A HammerJS event-manager object.\\r\\n     */\\r\\n    buildHammer(element: HTMLElement): HammerInstance;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<HammerGestureConfig>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<HammerGestureConfig>;\\n}\\r\\n\\r\\ndeclare interface HammerInstance {\\r\\n    on(eventName: string, callback?: Function): void;\\r\\n    off(eventName: string, callback?: Function): void;\\r\\n    destroy?(): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Function that loads HammerJS, returning a promise that is resolved once HammerJs is loaded.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type HammerLoader = () => Promise<void>;\\r\\n\\r\\n/**\\r\\n * Adds support for HammerJS.\\r\\n *\\r\\n * Import this module at the root of your application so that Angular can work with\\r\\n * HammerJS to detect gesture events.\\r\\n *\\r\\n * Note that applications still need to include the HammerJS script itself. This module\\r\\n * simply sets up the coordination layer between HammerJS and Angular's EventManager.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class HammerModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<HammerModule, never, never, never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<HammerModule>;\\n}\\r\\n\\r\\n/**\\r\\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\\r\\n *\\r\\n * Example:\\r\\n *\\r\\n * ```\\r\\n * const COUNTER_KEY = makeStateKey<number>('counter');\\r\\n * let value = 10;\\r\\n *\\r\\n * transferState.set(COUNTER_KEY, value);\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function makeStateKey<T = void>(key: string): StateKey<T>;\\r\\n\\r\\n/**\\r\\n * A service that can be used to get and add meta tags.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Meta {\\r\\n    private _doc;\\r\\n    private _dom;\\r\\n    constructor(_doc: any);\\r\\n    addTag(tag: MetaDefinition, forceCreation?: boolean): HTMLMetaElement | null;\\r\\n    addTags(tags: MetaDefinition[], forceCreation?: boolean): HTMLMetaElement[];\\r\\n    getTag(attrSelector: string): HTMLMetaElement | null;\\r\\n    getTags(attrSelector: string): HTMLMetaElement[];\\r\\n    updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement | null;\\r\\n    removeTag(attrSelector: string): void;\\r\\n    removeTagElement(meta: HTMLMetaElement): void;\\r\\n    private _getOrCreateElement;\\r\\n    private _setMetaElementAttributes;\\r\\n    private _parseSelector;\\r\\n    private _containsAttributes;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Meta>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Meta>;\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * Represents a meta element.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type MetaDefinition = {\\r\\n    charset?: string;\\r\\n    content?: string;\\r\\n    httpEquiv?: string;\\r\\n    id?: string;\\r\\n    itemprop?: string;\\r\\n    name?: string;\\r\\n    property?: string;\\r\\n    scheme?: string;\\r\\n    url?: string;\\r\\n} & {\\r\\n    [prop: string]: string;\\r\\n};\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const platformBrowser: (extraProviders?: StaticProvider[]) => PlatformRef;\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as HTML.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SafeHtml extends SafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as a URL to load executable code from.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SafeResourceUrl extends SafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as JavaScript.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SafeScript extends SafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as style (CSS).\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SafeStyle extends SafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use as a URL linking to a document.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SafeUrl extends SafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * Marker interface for a value that's safe to use in a particular context.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface SafeValue {\\r\\n}\\r\\n\\r\\n/**\\r\\n * A type-safe key to use with `TransferState`.\\r\\n *\\r\\n * Example:\\r\\n *\\r\\n * ```\\r\\n * const COUNTER_KEY = makeStateKey<number>('counter');\\r\\n * let value = 10;\\r\\n *\\r\\n * transferState.set(COUNTER_KEY, value);\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type StateKey<T> = string & {\\r\\n    __not_a_string: never;\\r\\n};\\r\\n\\r\\n/**\\r\\n * A service that can be used to get and set the title of a current HTML document.\\r\\n *\\r\\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\\r\\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\\r\\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\\r\\n * title value.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Title {\\r\\n    private _doc;\\r\\n    constructor(_doc: any);\\r\\n    /**\\r\\n     * Get the title of the current HTML document.\\r\\n     */\\r\\n    getTitle(): string;\\r\\n    /**\\r\\n     * Set the title of the current HTML document.\\r\\n     * @param newTitle\\r\\n     */\\r\\n    setTitle(newTitle: string): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Title>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Title>;\\n}\\r\\n\\r\\n/**\\r\\n * A key value store that is transferred from the application on the server side to the application\\r\\n * on the client side.\\r\\n *\\r\\n * `TransferState` will be available as an injectable token. To use it import\\r\\n * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.\\r\\n *\\r\\n * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only\\r\\n * boolean, number, string, null and non-class objects will be serialized and deserialzied in a\\r\\n * non-lossy manner.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class TransferState {\\r\\n    private store;\\r\\n    private onSerializeCallbacks;\\r\\n    /**\\r\\n     * Get the value corresponding to a key. Return `defaultValue` if key is not found.\\r\\n     */\\r\\n    get<T>(key: StateKey<T>, defaultValue: T): T;\\r\\n    /**\\r\\n     * Set the value corresponding to a key.\\r\\n     */\\r\\n    set<T>(key: StateKey<T>, value: T): void;\\r\\n    /**\\r\\n     * Remove a key from the store.\\r\\n     */\\r\\n    remove<T>(key: StateKey<T>): void;\\r\\n    /**\\r\\n     * Test whether a key exists in the store.\\r\\n     */\\r\\n    hasKey<T>(key: StateKey<T>): boolean;\\r\\n    /**\\r\\n     * Register a callback to provide the value for a key when `toJson` is called.\\r\\n     */\\r\\n    onSerialize<T>(key: StateKey<T>, callback: () => T): void;\\r\\n    /**\\r\\n     * Serialize the current state of the store to JSON.\\r\\n     */\\r\\n    toJson(): string;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<TransferState>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<TransferState>;\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const VERSION: Version;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_a(): ErrorHandler;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_b(): any;\\r\\n\\r\\nexport declare const ɵangular_packages_platform_browser_platform_browser_c: StaticProvider[];\\r\\n\\r\\n/**\\r\\n * Factory to create Meta service.\\r\\n */\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_d(): Meta;\\r\\n\\r\\n\\r\\n/**\\r\\n * Factory to create Title service.\\r\\n */\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_e(): Title;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_f(doc: Document, appId: string): TransferState;\\r\\n\\r\\nexport declare abstract class ɵangular_packages_platform_browser_platform_browser_g {\\r\\n    private _doc;\\r\\n    constructor(_doc: any);\\r\\n    manager: EventManager;\\r\\n    abstract supports(eventName: string): boolean;\\r\\n    abstract addEventListener(element: HTMLElement, eventName: string, handler: Function): Function;\\r\\n    addGlobalEventListener(element: string, eventName: string, handler: Function): Function;\\r\\n}\\r\\n\\r\\n/**\\r\\n * In View Engine, support for Hammer gestures is built-in by default.\\r\\n */\\r\\nexport declare const ɵangular_packages_platform_browser_platform_browser_h: Provider[];\\r\\n\\r\\nexport declare const ɵangular_packages_platform_browser_platform_browser_i: Provider[];\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_j(injector: Injector): ɵDomSanitizerImpl;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_k(transitionId: string, document: any, injector: Injector): () => void;\\r\\n\\r\\nexport declare const ɵangular_packages_platform_browser_platform_browser_l: StaticProvider[];\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_platform_browser_m(coreTokens: NgProbeToken[]): any;\\r\\n\\r\\n/**\\r\\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\\r\\n */\\r\\nexport declare const ɵangular_packages_platform_browser_platform_browser_n: Provider[];\\r\\n\\r\\n/**\\r\\n * Provides DOM operations in any browser environment.\\r\\n *\\r\\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\\r\\n * can introduce XSS risks.\\r\\n */\\r\\nexport declare abstract class ɵangular_packages_platform_browser_platform_browser_o extends ɵDomAdapter {\\r\\n    constructor();\\r\\n    supportsDOMEvents(): boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @security Replacing built-in sanitization providers exposes the application to XSS risks.\\r\\n * Attacker-controlled data introduced by an unsanitized provider could expose your\\r\\n * application to XSS risks. For more detail, see the [Security Guide](http://g.co/ng/security).\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ɵBROWSER_SANITIZATION_PROVIDERS: StaticProvider[];\\r\\n\\r\\nexport declare const ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__: never[];\\r\\n\\r\\n/**\\r\\n * A `DomAdapter` powered by full browser DOM APIs.\\r\\n *\\r\\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\\r\\n * can introduce XSS risks.\\r\\n */\\r\\nexport declare class ɵBrowserDomAdapter extends ɵangular_packages_platform_browser_platform_browser_o {\\r\\n    static makeCurrent(): void;\\r\\n    getProperty(el: Node, name: string): any;\\r\\n    log(error: string): void;\\r\\n    logGroup(error: string): void;\\r\\n    logGroupEnd(): void;\\r\\n    onAndCancel(el: Node, evt: any, listener: any): Function;\\r\\n    dispatchEvent(el: Node, evt: any): void;\\r\\n    remove(node: Node): Node;\\r\\n    getValue(el: any): string;\\r\\n    createElement(tagName: string, doc?: Document): HTMLElement;\\r\\n    createHtmlDocument(): HTMLDocument;\\r\\n    getDefaultDocument(): Document;\\r\\n    isElementNode(node: Node): boolean;\\r\\n    isShadowRoot(node: any): boolean;\\r\\n    getGlobalEventTarget(doc: Document, target: string): EventTarget | null;\\r\\n    getHistory(): History;\\r\\n    getLocation(): Location;\\r\\n    getBaseHref(doc: Document): string | null;\\r\\n    resetBaseElement(): void;\\r\\n    getUserAgent(): string;\\r\\n    performanceNow(): number;\\r\\n    supportsCookies(): boolean;\\r\\n    getCookie(name: string): string | null;\\r\\n}\\r\\n\\r\\nexport declare class ɵBrowserGetTestability implements GetTestability {\\r\\n    static init(): void;\\r\\n    addToWindow(registry: TestabilityRegistry): void;\\r\\n    findTestabilityInTree(registry: TestabilityRegistry, elem: any, findInAncestors: boolean): Testability | null;\\r\\n}\\r\\n\\r\\nexport declare class ɵDomEventsPlugin extends ɵangular_packages_platform_browser_platform_browser_g {\\r\\n    private ngZone;\\r\\n    constructor(doc: any, ngZone: NgZone, platformId: {} | null);\\r\\n    private patchEvent;\\r\\n    supports(eventName: string): boolean;\\r\\n    addEventListener(element: HTMLElement, eventName: string, handler: Function): Function;\\r\\n    removeEventListener(target: any, eventName: string, callback: Function): void;\\r\\n}\\r\\n\\r\\nexport declare class ɵDomRendererFactory2 implements RendererFactory2 {\\r\\n    private eventManager;\\r\\n    private sharedStylesHost;\\r\\n    private appId;\\r\\n    private rendererByCompId;\\r\\n    private defaultRenderer;\\r\\n    constructor(eventManager: EventManager, sharedStylesHost: ɵDomSharedStylesHost, appId: string);\\r\\n    createRenderer(element: any, type: RendererType2 | null): Renderer2;\\r\\n    begin(): void;\\r\\n    end(): void;\\r\\n}\\r\\n\\r\\nexport declare class ɵDomSanitizerImpl extends DomSanitizer {\\r\\n    private _doc;\\r\\n    constructor(_doc: any);\\r\\n    sanitize(ctx: SecurityContext, value: SafeValue | string | null): string | null;\\r\\n    bypassSecurityTrustHtml(value: string): SafeHtml;\\r\\n    bypassSecurityTrustStyle(value: string): SafeStyle;\\r\\n    bypassSecurityTrustScript(value: string): SafeScript;\\r\\n    bypassSecurityTrustUrl(value: string): SafeUrl;\\r\\n    bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;\\r\\n}\\r\\n\\r\\nexport declare class ɵDomSharedStylesHost extends ɵSharedStylesHost implements OnDestroy {\\r\\n    private _doc;\\r\\n    private _hostNodes;\\r\\n    private _styleNodes;\\r\\n    constructor(_doc: any);\\r\\n    private _addStylesToHost;\\r\\n    addHost(hostNode: Node): void;\\r\\n    removeHost(hostNode: Node): void;\\r\\n    onStylesAdded(additions: Set<string>): void;\\r\\n    ngOnDestroy(): void;\\r\\n}\\r\\n\\r\\nexport declare const ɵELEMENT_PROBE_PROVIDERS: Provider[];\\r\\n\\r\\n/**\\r\\n * In Ivy, we don't support NgProbe because we have our own set of testing utilities\\r\\n * with more robust functionality.\\r\\n *\\r\\n * We shouldn't bring in NgProbe because it prevents DebugNode and friends from\\r\\n * tree-shaking properly.\\r\\n */\\r\\nexport declare const ɵELEMENT_PROBE_PROVIDERS__POST_R3__: never[];\\r\\n\\r\\n\\r\\nexport declare function ɵescapeHtml(text: string): string;\\r\\n\\r\\nexport declare function ɵflattenStyles(compId: string, styles: Array<any | any[]>, target: string[]): string[];\\r\\nexport { ɵgetDOM }\\r\\n\\r\\n/**\\r\\n * In Ivy, support for Hammer gestures is optional, so applications must\\r\\n * import the `HammerModule` at root to turn on support. This means that\\r\\n * Hammer-specific code can be tree-shaken away if not needed.\\r\\n */\\r\\nexport declare const ɵHAMMER_PROVIDERS__POST_R3__: never[];\\r\\n\\r\\n/**\\r\\n * Event plugin that adds Hammer support to an application.\\r\\n *\\r\\n * @ngModule HammerModule\\r\\n */\\r\\nexport declare class ɵHammerGesturesPlugin extends ɵangular_packages_platform_browser_platform_browser_g {\\r\\n    private _config;\\r\\n    private console;\\r\\n    private loader?;\\r\\n    constructor(doc: any, _config: HammerGestureConfig, console: ɵConsole, loader?: HammerLoader | null | undefined);\\r\\n    supports(eventName: string): boolean;\\r\\n    addEventListener(element: HTMLElement, eventName: string, handler: Function): Function;\\r\\n    isCustomEvent(eventName: string): boolean;\\r\\n}\\r\\n\\r\\nexport declare function ɵinitDomAdapter(): void;\\r\\n\\r\\nexport declare const ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS: StaticProvider[];\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n * A browser plug-in that provides support for handling of key events in Angular.\\r\\n */\\r\\nexport declare class ɵKeyEventsPlugin extends ɵangular_packages_platform_browser_platform_browser_g {\\r\\n    /**\\r\\n     * Initializes an instance of the browser plug-in.\\r\\n     * @param doc The document in which key events will be detected.\\r\\n     */\\r\\n    constructor(doc: any);\\r\\n    /**\\r\\n      * Reports whether a named key event is supported.\\r\\n      * @param eventName The event name to query.\\r\\n      * @return True if the named key event is supported.\\r\\n     */\\r\\n    supports(eventName: string): boolean;\\r\\n    /**\\r\\n     * Registers a handler for a specific element and key event.\\r\\n     * @param element The HTML element to receive event notifications.\\r\\n     * @param eventName The name of the key event to listen for.\\r\\n     * @param handler A function to call when the notification occurs. Receives the\\r\\n     * event object as an argument.\\r\\n     * @returns The key event that was registered.\\r\\n    */\\r\\n    addEventListener(element: HTMLElement, eventName: string, handler: Function): Function;\\r\\n    static parseEventName(eventName: string): {\\r\\n        [key: string]: string;\\r\\n    } | null;\\r\\n    static getEventFullKey(event: KeyboardEvent): string;\\r\\n    /**\\r\\n     * Configures a handler callback for a key event.\\r\\n     * @param fullKey The event name that combines all simultaneous keystrokes.\\r\\n     * @param handler The function that responds to the key event.\\r\\n     * @param zone The zone in which the event occurred.\\r\\n     * @returns A callback function.\\r\\n     */\\r\\n    static eventCallback(fullKey: any, handler: Function, zone: NgZone): Function;\\r\\n}\\r\\n\\r\\nexport declare const ɵNAMESPACE_URIS: {\\r\\n    [ns: string]: string;\\r\\n};\\r\\n\\r\\nexport declare class ɵSharedStylesHost {\\r\\n    addStyles(styles: string[]): void;\\r\\n    onStylesAdded(additions: Set<string>): void;\\r\\n    getAllStyles(): string[];\\r\\n}\\r\\n\\r\\nexport declare function ɵshimContentAttribute(componentShortId: string): string;\\r\\n\\r\\nexport declare function ɵshimHostAttribute(componentShortId: string): string;\\r\\n\\r\\n/**\\r\\n * An id that identifies a particular application being bootstrapped, that should\\r\\n * match across the client/server boundary.\\r\\n */\\r\\nexport declare const ɵTRANSITION_ID: InjectionToken<unknown>;\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=platform-browser.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nexport * from './testing/testing';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser/testing/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { NgZone } from '@angular/core';\\r\\nimport { PlatformRef } from '@angular/core';\\r\\nimport { StaticProvider } from '@angular/core';\\r\\n\\r\\n/**\\r\\n * NgModule for testing.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '@angular/platform-browser';\\nexport declare class BrowserTestingModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<BrowserTestingModule, never, never, [typeof ɵngcc1.BrowserModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<BrowserTestingModule>;\\n}\\r\\n\\r\\n/**\\r\\n * Platform for testing\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const platformBrowserTesting: (extraProviders?: StaticProvider[] | undefined) => PlatformRef;\\r\\n\\r\\nexport declare function ɵangular_packages_platform_browser_testing_testing_a(): NgZone;\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=testing.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser-dynamic/platform-browser-dynamic.d.ts\",\n      \"node_modules/@angular/platform-browser-dynamic/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { CompileMetadataResolver } from '@angular/compiler';\\r\\nimport { Compiler } from '@angular/core';\\r\\nimport { CompilerConfig } from '@angular/compiler';\\r\\nimport { CompileReflector } from '@angular/compiler';\\r\\nimport { CompilerFactory } from '@angular/core';\\r\\nimport { CompilerOptions } from '@angular/core';\\r\\nimport { ComponentFactory } from '@angular/core';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { JitEvaluator } from '@angular/compiler';\\r\\nimport { ModuleWithComponentFactories } from '@angular/core';\\r\\nimport { NgModuleCompiler } from '@angular/compiler';\\r\\nimport { NgModuleFactory } from '@angular/core';\\r\\nimport { PlatformRef } from '@angular/core';\\r\\nimport { Provider } from '@angular/core';\\r\\nimport { ResourceLoader } from '@angular/compiler';\\r\\nimport { StaticProvider } from '@angular/core';\\r\\nimport { StyleCompiler } from '@angular/compiler';\\r\\nimport { SummaryResolver } from '@angular/compiler';\\r\\nimport { TemplateParser } from '@angular/compiler';\\r\\nimport { Type } from '@angular/core';\\r\\nimport { Version } from '@angular/core';\\r\\nimport { ViewCompiler } from '@angular/compiler';\\r\\nimport { ɵConsole } from '@angular/core';\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class JitCompilerFactory implements CompilerFactory {\\r\\n    private _defaultOptions;\\r\\n    createCompiler(options?: CompilerOptions[]): Compiler;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const platformBrowserDynamic: (extraProviders?: StaticProvider[] | undefined) => PlatformRef;\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const RESOURCE_CACHE_PROVIDER: Provider[];\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const VERSION: Version;\\r\\n\\r\\n/**\\r\\n * An implementation of ResourceLoader that uses a template cache to avoid doing an actual\\r\\n * ResourceLoader.\\r\\n *\\r\\n * The template cache needs to be built and loaded into window.$templateCache\\r\\n * via a separate mechanism.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ɵangular_packages_platform_browser_dynamic_platform_browser_dynamic_a extends ResourceLoader {\\r\\n    private _cache;\\r\\n    constructor();\\r\\n    get(url: string): Promise<string>;\\r\\n}\\r\\n\\r\\nexport declare const ɵCOMPILER_PROVIDERS__POST_R3__: StaticProvider[];\\r\\n\\r\\nexport declare class ɵCompilerImpl implements Compiler {\\r\\n    private _metadataResolver;\\r\\n    private _delegate;\\r\\n    readonly injector: Injector;\\r\\n    constructor(injector: Injector, _metadataResolver: CompileMetadataResolver, templateParser: TemplateParser, styleCompiler: StyleCompiler, viewCompiler: ViewCompiler, ngModuleCompiler: NgModuleCompiler, summaryResolver: SummaryResolver<Type<any>>, compileReflector: CompileReflector, jitEvaluator: JitEvaluator, compilerConfig: CompilerConfig, console: ɵConsole);\\r\\n    private getExtraNgModuleProviders;\\r\\n    compileModuleSync<T>(moduleType: Type<T>): NgModuleFactory<T>;\\r\\n    compileModuleAsync<T>(moduleType: Type<T>): Promise<NgModuleFactory<T>>;\\r\\n    compileModuleAndAllComponentsSync<T>(moduleType: Type<T>): ModuleWithComponentFactories<T>;\\r\\n    compileModuleAndAllComponentsAsync<T>(moduleType: Type<T>): Promise<ModuleWithComponentFactories<T>>;\\r\\n    loadAotSummaries(summaries: () => any[]): void;\\r\\n    hasAotSummary(ref: Type<any>): boolean;\\r\\n    getComponentFactory<T>(component: Type<T>): ComponentFactory<T>;\\r\\n    clearCache(): void;\\r\\n    clearCacheFor(type: Type<any>): void;\\r\\n    getModuleId(moduleType: Type<any>): string | undefined;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS: StaticProvider[];\\r\\n\\r\\n/**\\r\\n * A platform that included corePlatform and the compiler.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ɵplatformCoreDynamic: (extraProviders?: StaticProvider[] | undefined) => PlatformRef;\\r\\n\\r\\nexport declare class ɵResourceLoaderImpl extends ResourceLoader {\\r\\n    get(url: string): Promise<string>;\\r\\n}\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=platform-browser-dynamic.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser-dynamic/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nexport * from './testing/testing';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/platform-browser-dynamic/testing/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { CompilerFactory } from '@angular/core';\\r\\nimport { CompilerOptions } from '@angular/core';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { PlatformRef } from '@angular/core';\\r\\nimport { StaticProvider } from '@angular/core';\\r\\nimport { TestComponentRenderer } from '@angular/core/testing';\\r\\nimport { ɵTestingCompiler } from '@angular/core/testing';\\r\\nimport { ɵTestingCompilerFactory } from '@angular/core/testing';\\r\\n\\r\\n/**\\r\\n * NgModule for testing.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '@angular/platform-browser/testing';\\nexport declare class BrowserDynamicTestingModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<BrowserDynamicTestingModule, never, never, [typeof ɵngcc1.BrowserTestingModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<BrowserDynamicTestingModule>;\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const platformBrowserDynamicTesting: (extraProviders?: StaticProvider[] | undefined) => PlatformRef;\\r\\n\\r\\nexport declare const ɵangular_packages_platform_browser_dynamic_testing_testing_a: StaticProvider[];\\r\\n\\r\\nexport declare class ɵangular_packages_platform_browser_dynamic_testing_testing_b implements ɵTestingCompilerFactory {\\r\\n    private _injector;\\r\\n    private _compilerFactory;\\r\\n    constructor(_injector: Injector, _compilerFactory: CompilerFactory);\\r\\n    createTestingCompiler(options: CompilerOptions[]): ɵTestingCompiler;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A DOM based implementation of the TestComponentRenderer.\\r\\n */\\r\\nexport declare class ɵDOMTestComponentRenderer extends TestComponentRenderer {\\r\\n    private _doc;\\r\\n    constructor(_doc: any);\\r\\n    insertRootElement(rootElId: string): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Platform for dynamic tests\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ɵplatformCoreDynamicTesting: (extraProviders?: any[]) => PlatformRef;\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=testing.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/router/router.d.ts\",\n      \"node_modules/@angular/router/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { AfterContentInit } from '@angular/core';\\r\\nimport { ApplicationRef } from '@angular/core';\\r\\nimport { ChangeDetectorRef } from '@angular/core';\\r\\nimport { Compiler } from '@angular/core';\\r\\nimport { ComponentFactoryResolver } from '@angular/core';\\r\\nimport { ComponentRef } from '@angular/core';\\r\\nimport { ElementRef } from '@angular/core';\\r\\nimport { EventEmitter } from '@angular/core';\\r\\nimport { HashLocationStrategy } from '@angular/common';\\r\\nimport { InjectionToken } from '@angular/core';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { Location } from '@angular/common';\\r\\nimport { LocationStrategy } from '@angular/common';\\r\\nimport { ModuleWithProviders } from '@angular/core';\\r\\nimport { NgModuleFactory } from '@angular/core';\\r\\nimport { NgModuleFactoryLoader } from '@angular/core';\\r\\nimport { NgProbeToken } from '@angular/core';\\r\\nimport { Observable } from 'rxjs';\\r\\nimport { OnChanges } from '@angular/core';\\r\\nimport { OnDestroy } from '@angular/core';\\r\\nimport { OnInit } from '@angular/core';\\r\\nimport { PathLocationStrategy } from '@angular/common';\\r\\nimport { PlatformLocation } from '@angular/common';\\r\\nimport { Provider } from '@angular/core';\\r\\nimport { QueryList } from '@angular/core';\\r\\nimport { Renderer2 } from '@angular/core';\\r\\nimport { SimpleChanges } from '@angular/core';\\r\\nimport { Type } from '@angular/core';\\r\\nimport { Version } from '@angular/core';\\r\\nimport { ViewContainerRef } from '@angular/core';\\r\\nimport { ViewportScroller } from '@angular/common';\\r\\n\\r\\n/**\\r\\n * Provides access to information about a route associated with a component\\r\\n * that is loaded in an outlet.\\r\\n * Use to traverse the `RouterState` tree and extract information from nodes.\\r\\n *\\r\\n * {@example router/activated-route/module.ts region=\\\"activated-route\\\"\\r\\n *     header=\\\"activated-route.component.ts\\\"}\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class ActivatedRoute {\\r\\n    /** An observable of the URL segments matched by this route. */\\r\\n    url: Observable<UrlSegment[]>;\\r\\n    /** An observable of the matrix parameters scoped to this route. */\\r\\n    params: Observable<Params>;\\r\\n    /** An observable of the query parameters shared by all the routes. */\\r\\n    queryParams: Observable<Params>;\\r\\n    /** An observable of the URL fragment shared by all the routes. */\\r\\n    fragment: Observable<string>;\\r\\n    /** An observable of the static and resolved data of this route. */\\r\\n    data: Observable<Data>;\\r\\n    /** The outlet name of the route, a constant. */\\r\\n    outlet: string;\\r\\n    /** The component of the route, a constant. */\\r\\n    component: Type<any> | string | null;\\r\\n    /** The current snapshot of this route */\\r\\n    snapshot: ActivatedRouteSnapshot;\\r\\n    /** The configuration used to match this route. */\\r\\n    readonly routeConfig: Route | null;\\r\\n    /** The root of the router state. */\\r\\n    readonly root: ActivatedRoute;\\r\\n    /** The parent of this route in the router state tree. */\\r\\n    readonly parent: ActivatedRoute | null;\\r\\n    /** The first child of this route in the router state tree. */\\r\\n    readonly firstChild: ActivatedRoute | null;\\r\\n    /** The children of this route in the router state tree. */\\r\\n    readonly children: ActivatedRoute[];\\r\\n    /** The path from the root of the router state tree to this route. */\\r\\n    readonly pathFromRoot: ActivatedRoute[];\\r\\n    /** An Observable that contains a map of the required and optional parameters\\r\\n     * specific to the route.\\r\\n     * The map supports retrieving single and multiple values from the same parameter. */\\r\\n    readonly paramMap: Observable<ParamMap>;\\r\\n    /**\\r\\n     * An Observable that contains a map of the query parameters available to all routes.\\r\\n     * The map supports retrieving single and multiple values from the query parameter.\\r\\n     */\\r\\n    readonly queryParamMap: Observable<ParamMap>;\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Contains the information about a route associated with a component loaded in an\\r\\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\\r\\n * traverse the router state tree.\\r\\n *\\r\\n * ```\\r\\n * @Component({templateUrl:'./my-component.html'})\\r\\n * class MyComponent {\\r\\n *   constructor(route: ActivatedRoute) {\\r\\n *     const id: string = route.snapshot.params.id;\\r\\n *     const url: string = route.snapshot.url.join('');\\r\\n *     const user = route.snapshot.data.user;\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ActivatedRouteSnapshot {\\r\\n    /** The URL segments matched by this route */\\r\\n    url: UrlSegment[];\\r\\n    /** The matrix parameters scoped to this route */\\r\\n    params: Params;\\r\\n    /** The query parameters shared by all the routes */\\r\\n    queryParams: Params;\\r\\n    /** The URL fragment shared by all the routes */\\r\\n    fragment: string;\\r\\n    /** The static and resolved data of this route */\\r\\n    data: Data;\\r\\n    /** The outlet name of the route */\\r\\n    outlet: string;\\r\\n    /** The component of the route */\\r\\n    component: Type<any> | string | null;\\r\\n    /** The configuration used to match this route **/\\r\\n    readonly routeConfig: Route | null;\\r\\n    /** The root of the router state */\\r\\n    readonly root: ActivatedRouteSnapshot;\\r\\n    /** The parent of this route in the router state tree */\\r\\n    readonly parent: ActivatedRouteSnapshot | null;\\r\\n    /** The first child of this route in the router state tree */\\r\\n    readonly firstChild: ActivatedRouteSnapshot | null;\\r\\n    /** The children of this route in the router state tree */\\r\\n    readonly children: ActivatedRouteSnapshot[];\\r\\n    /** The path from the root of the router state tree to this route */\\r\\n    readonly pathFromRoot: ActivatedRouteSnapshot[];\\r\\n    readonly paramMap: ParamMap;\\r\\n    readonly queryParamMap: ParamMap;\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the end of the activation part\\r\\n * of the Resolve phase of routing.\\r\\n * @see `ActivationStart`\\r\\n * @see `ResolveStart`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ActivationEnd {\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the start of the activation part\\r\\n * of the Resolve phase of routing.\\r\\n * @see ActivationEnd`\\r\\n * @see `ResolveStart`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ActivationStart {\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Interface that a class can implement to be a guard deciding if a route can be activated.\\r\\n * If all guards return `true`, navigation will continue. If any guard returns `false`,\\r\\n * navigation will be cancelled. If any guard returns a `UrlTree`, current navigation will\\r\\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\\r\\n * guard.\\r\\n *\\r\\n * ```\\r\\n * class UserToken {}\\r\\n * class Permissions {\\r\\n *   canActivate(user: UserToken, id: string): boolean {\\r\\n *     return true;\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @Injectable()\\r\\n * class CanActivateTeam implements CanActivate {\\r\\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\\r\\n *\\r\\n *   canActivate(\\r\\n *     route: ActivatedRouteSnapshot,\\r\\n *     state: RouterStateSnapshot\\r\\n *   ): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree {\\r\\n *     return this.permissions.canActivate(this.currentUser, route.params.id);\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'team/:id',\\r\\n *         component: TeamComponent,\\r\\n *         canActivate: [CanActivateTeam]\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [CanActivateTeam, UserToken, Permissions]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * You can alternatively provide a function with the `canActivate` signature:\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'team/:id',\\r\\n *         component: TeamComponent,\\r\\n *         canActivate: ['canActivateTeam']\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [\\r\\n *     {\\r\\n *       provide: 'canActivateTeam',\\r\\n *       useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => true\\r\\n *     }\\r\\n *   ]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface CanActivate {\\r\\n    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Interface that a class can implement to be a guard deciding if a child route can be activated.\\r\\n * If all guards return `true`, navigation will continue. If any guard returns `false`,\\r\\n * navigation will be cancelled. If any guard returns a `UrlTree`, current navigation will\\r\\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\\r\\n * guard.\\r\\n *\\r\\n * ```\\r\\n * class UserToken {}\\r\\n * class Permissions {\\r\\n *   canActivate(user: UserToken, id: string): boolean {\\r\\n *     return true;\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @Injectable()\\r\\n * class CanActivateTeam implements CanActivateChild {\\r\\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\\r\\n *\\r\\n *   canActivateChild(\\r\\n *     route: ActivatedRouteSnapshot,\\r\\n *     state: RouterStateSnapshot\\r\\n *   ): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree {\\r\\n *     return this.permissions.canActivate(this.currentUser, route.params.id);\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'root',\\r\\n *         canActivateChild: [CanActivateTeam],\\r\\n *         children: [\\r\\n *           {\\r\\n *              path: 'team/:id',\\r\\n *              component: TeamComponent\\r\\n *           }\\r\\n *         ]\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [CanActivateTeam, UserToken, Permissions]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * You can alternatively provide a function with the `canActivateChild` signature:\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'root',\\r\\n *         canActivateChild: ['canActivateTeam'],\\r\\n *         children: [\\r\\n *           {\\r\\n *             path: 'team/:id',\\r\\n *             component: TeamComponent\\r\\n *           }\\r\\n *         ]\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [\\r\\n *     {\\r\\n *       provide: 'canActivateTeam',\\r\\n *       useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => true\\r\\n *     }\\r\\n *   ]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface CanActivateChild {\\r\\n    canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Interface that a class can implement to be a guard deciding if a route can be deactivated.\\r\\n * If all guards return `true`, navigation will continue. If any guard returns `false`,\\r\\n * navigation will be cancelled. If any guard returns a `UrlTree`, current navigation will\\r\\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\\r\\n * guard.\\r\\n *\\r\\n * ```\\r\\n * class UserToken {}\\r\\n * class Permissions {\\r\\n *   canDeactivate(user: UserToken, id: string): boolean {\\r\\n *     return true;\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @Injectable()\\r\\n * class CanDeactivateTeam implements CanDeactivate<TeamComponent> {\\r\\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\\r\\n *\\r\\n *   canDeactivate(\\r\\n *     component: TeamComponent,\\r\\n *     currentRoute: ActivatedRouteSnapshot,\\r\\n *     currentState: RouterStateSnapshot,\\r\\n *     nextState: RouterStateSnapshot\\r\\n *   ): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree {\\r\\n *     return this.permissions.canDeactivate(this.currentUser, route.params.id);\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'team/:id',\\r\\n *         component: TeamComponent,\\r\\n *         canDeactivate: [CanDeactivateTeam]\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [CanDeactivateTeam, UserToken, Permissions]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * You can alternatively provide a function with the `canDeactivate` signature:\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'team/:id',\\r\\n *         component: TeamComponent,\\r\\n *         canDeactivate: ['canDeactivateTeam']\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [\\r\\n *     {\\r\\n *       provide: 'canDeactivateTeam',\\r\\n *       useValue: (component: TeamComponent, currentRoute: ActivatedRouteSnapshot, currentState:\\r\\n * RouterStateSnapshot, nextState: RouterStateSnapshot) => true\\r\\n *     }\\r\\n *   ]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface CanDeactivate<T> {\\r\\n    canDeactivate(component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Interface that a class can implement to be a guard deciding if children can be loaded.\\r\\n *\\r\\n * ```\\r\\n * class UserToken {}\\r\\n * class Permissions {\\r\\n *   canLoadChildren(user: UserToken, id: string, segments: UrlSegment[]): boolean {\\r\\n *     return true;\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @Injectable()\\r\\n * class CanLoadTeamSection implements CanLoad {\\r\\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\\r\\n *\\r\\n *   canLoad(route: Route, segments: UrlSegment[]): Observable<boolean>|Promise<boolean>|boolean {\\r\\n *     return this.permissions.canLoadChildren(this.currentUser, route, segments);\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'team/:id',\\r\\n *         component: TeamComponent,\\r\\n *         loadChildren: 'team.js',\\r\\n *         canLoad: [CanLoadTeamSection]\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [CanLoadTeamSection, UserToken, Permissions]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * You can alternatively provide a function with the `canLoad` signature:\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'team/:id',\\r\\n *         component: TeamComponent,\\r\\n *         loadChildren: 'team.js',\\r\\n *         canLoad: ['canLoadTeamSection']\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [\\r\\n *     {\\r\\n *       provide: 'canLoadTeamSection',\\r\\n *       useValue: (route: Route, segments: UrlSegment[]) => true\\r\\n *     }\\r\\n *   ]\\r\\n * })\\r\\n * class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface CanLoad {\\r\\n    canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the end of the child-activation part\\r\\n * of the Resolve phase of routing.\\r\\n * @see `ChildActivationStart`\\r\\n * @see `ResolveStart` *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ChildActivationEnd {\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the start of the child-activation\\r\\n * part of the Resolve phase of routing.\\r\\n * @see  `ChildActivationEnd`\\r\\n * @see `ResolveStart`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ChildActivationStart {\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    snapshot: ActivatedRouteSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Store contextual information about the children (= nested) `RouterOutlet`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ChildrenOutletContexts {\\r\\n    private contexts;\\r\\n    /** Called when a `RouterOutlet` directive is instantiated */\\r\\n    onChildOutletCreated(childName: string, outlet: RouterOutlet): void;\\r\\n    /**\\r\\n     * Called when a `RouterOutlet` directive is destroyed.\\r\\n     * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\\r\\n     * re-created later.\\r\\n     */\\r\\n    onChildOutletDestroyed(childName: string): void;\\r\\n    /**\\r\\n     * Called when the corresponding route is deactivated during navigation.\\r\\n     * Because the component get destroyed, all children outlet are destroyed.\\r\\n     */\\r\\n    onOutletDeactivated(): Map<string, OutletContext>;\\r\\n    onOutletReAttached(contexts: Map<string, OutletContext>): void;\\r\\n    getOrCreateContext(childName: string): OutletContext;\\r\\n    getContext(childName: string): OutletContext | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Converts a `Params` instance to a `ParamMap`.\\r\\n * @param params The instance to convert.\\r\\n * @returns The new map instance.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function convertToParamMap(params: Params): ParamMap;\\r\\n\\r\\n/**\\r\\n *\\r\\n * Represents static data associated with a particular route.\\r\\n *\\r\\n * @see `Route#data`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type Data = {\\r\\n    [name: string]: any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * A default implementation of the `UrlSerializer`.\\r\\n *\\r\\n * Example URLs:\\r\\n *\\r\\n * ```\\r\\n * /inbox/33(popup:compose)\\r\\n * /inbox/33;open=true/messages/44\\r\\n * ```\\r\\n *\\r\\n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\\r\\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\\r\\n * specify route specific parameters.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class DefaultUrlSerializer implements UrlSerializer {\\r\\n    /** Parses a url into a `UrlTree` */\\r\\n    parse(url: string): UrlTree;\\r\\n    /** Converts a `UrlTree` into a url */\\r\\n    serialize(tree: UrlTree): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A string of the form `path/to/file#exportName` that acts as a URL for a set of routes to load.\\r\\n *\\r\\n * @see `Route#loadChildren`\\r\\n * @publicApi\\r\\n * @deprecated the `string` form of `loadChildren` is deprecated in favor of the proposed ES dynamic\\r\\n * `import()` expression, which offers a more natural and standards-based mechanism to dynamically\\r\\n * load an ES module at runtime.\\r\\n */\\r\\nexport declare type DeprecatedLoadChildren = string;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents the detached route tree.\\r\\n *\\r\\n * This is an opaque value the router will give to a custom route reuse strategy\\r\\n * to store and retrieve later on.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type DetachedRouteHandle = {};\\r\\n\\r\\n/**\\r\\n * Error handler that is invoked when a navigation error occurs.\\r\\n *\\r\\n * If the handler returns a value, the navigation promise is resolved with this value.\\r\\n * If the handler throws an exception, the navigation promise is rejected with\\r\\n * the exception.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\ndeclare type ErrorHandler = (error: any) => any;\\r\\n\\r\\n/**\\r\\n * Router events that allow you to track the lifecycle of the router.\\r\\n *\\r\\n * The sequence of router events is as follows:\\r\\n *\\r\\n * - `NavigationStart`,\\r\\n * - `RouteConfigLoadStart`,\\r\\n * - `RouteConfigLoadEnd`,\\r\\n * - `RoutesRecognized`,\\r\\n * - `GuardsCheckStart`,\\r\\n * - `ChildActivationStart`,\\r\\n * - `ActivationStart`,\\r\\n * - `GuardsCheckEnd`,\\r\\n * - `ResolveStart`,\\r\\n * - `ResolveEnd`,\\r\\n * - `ActivationEnd`\\r\\n * - `ChildActivationEnd`\\r\\n * - `NavigationEnd`,\\r\\n * - `NavigationCancel`,\\r\\n * - `NavigationError`\\r\\n * - `Scroll`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type Event = RouterEvent | RouteConfigLoadStart | RouteConfigLoadEnd | ChildActivationStart | ChildActivationEnd | ActivationStart | ActivationEnd | Scroll;\\r\\n\\r\\n/**\\r\\n * A set of configuration options for a router module, provided in the\\r\\n * `forRoot()` method.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ExtraOptions {\\r\\n    /**\\r\\n     * When true, log all internal navigation events to the console.\\r\\n     * Use for debugging.\\r\\n     */\\r\\n    enableTracing?: boolean;\\r\\n    /**\\r\\n     * When true, enable the location strategy that uses the URL fragment\\r\\n     * instead of the history API.\\r\\n     */\\r\\n    useHash?: boolean;\\r\\n    /**\\r\\n     * One of `enabled` or `disabled`.\\r\\n     * When set to `enabled`, the initial navigation starts before the root component is created.\\r\\n     * The bootstrap is blocked until the initial navigation is complete. This value is required for\\r\\n     * [server-side rendering](guide/universal) to work.\\r\\n     * When set to `disabled`, the initial navigation is not performed.\\r\\n     * The location listener is set up before the root component gets created.\\r\\n     * Use if there is a reason to have more control over when the router\\r\\n     * starts its initial navigation due to some complex initialization logic.\\r\\n     *\\r\\n     * Legacy values are deprecated since v4 and should not be used for new applications:\\r\\n     *\\r\\n     * * `legacy_enabled` - Default for compatibility.\\r\\n     * The initial navigation starts after the root component has been created,\\r\\n     * but the bootstrap is not blocked until the initial navigation is complete.\\r\\n     * * `legacy_disabled` - The initial navigation is not performed.\\r\\n     * The location listener is set up after the root component gets created.\\r\\n     * * `true` - same as `legacy_enabled`.\\r\\n     * * `false` - same as `legacy_disabled`.\\r\\n     */\\r\\n    initialNavigation?: InitialNavigation;\\r\\n    /**\\r\\n     * A custom error handler for failed navigations.\\r\\n     */\\r\\n    errorHandler?: ErrorHandler;\\r\\n    /**\\r\\n     * Configures a preloading strategy.\\r\\n     * One of `PreloadAllModules` or `NoPreloading` (the default).\\r\\n     */\\r\\n    preloadingStrategy?: any;\\r\\n    /**\\r\\n     * Define what the router should do if it receives a navigation request to the current URL.\\r\\n     * Default is `ignore`, which causes the router ignores the navigation.\\r\\n     * This can disable features such as a \\\"refresh\\\" button.\\r\\n     * Use this option to configure the behavior when navigating to the\\r\\n     * current URL. Default is 'ignore'.\\r\\n     */\\r\\n    onSameUrlNavigation?: 'reload' | 'ignore';\\r\\n    /**\\r\\n     * Configures if the scroll position needs to be restored when navigating back.\\r\\n     *\\r\\n     * * 'disabled'- (Default) Does nothing. Scroll position is maintained on navigation.\\r\\n     * * 'top'- Sets the scroll position to x = 0, y = 0 on all navigation.\\r\\n     * * 'enabled'- Restores the previous scroll position on backward navigation, else sets the\\r\\n     * position to the anchor if one is provided, or sets the scroll position to [0, 0] (forward\\r\\n     * navigation). This option will be the default in the future.\\r\\n     *\\r\\n     * You can implement custom scroll restoration behavior by adapting the enabled behavior as\\r\\n     * in the following example.\\r\\n     *\\r\\n     * ```typescript\\r\\n     * class AppModule {\\r\\n     *   constructor(router: Router, viewportScroller: ViewportScroller) {\\r\\n     *     router.events.pipe(\\r\\n     *       filter((e: Event): e is Scroll => e instanceof Scroll)\\r\\n     *     ).subscribe(e => {\\r\\n     *       if (e.position) {\\r\\n     *         // backward navigation\\r\\n     *         viewportScroller.scrollToPosition(e.position);\\r\\n     *       } else if (e.anchor) {\\r\\n     *         // anchor navigation\\r\\n     *         viewportScroller.scrollToAnchor(e.anchor);\\r\\n     *       } else {\\r\\n     *         // forward navigation\\r\\n     *         viewportScroller.scrollToPosition([0, 0]);\\r\\n     *       }\\r\\n     *     });\\r\\n     *   }\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\\r\\n    /**\\r\\n     * When set to 'enabled', scrolls to the anchor element when the URL has a fragment.\\r\\n     * Anchor scrolling is disabled by default.\\r\\n     *\\r\\n     * Anchor scrolling does not happen on 'popstate'. Instead, we restore the position\\r\\n     * that we stored or scroll to the top.\\r\\n     */\\r\\n    anchorScrolling?: 'disabled' | 'enabled';\\r\\n    /**\\r\\n     * Configures the scroll offset the router will use when scrolling to an element.\\r\\n     *\\r\\n     * When given a tuple with x and y position value,\\r\\n     * the router uses that offset each time it scrolls.\\r\\n     * When given a function, the router invokes the function every time\\r\\n     * it restores scroll position.\\r\\n     */\\r\\n    scrollOffset?: [number, number] | (() => [number, number]);\\r\\n    /**\\r\\n     * Defines how the router merges parameters, data, and resolved data from parent to child\\r\\n     * routes. By default ('emptyOnly'), inherits parent parameters only for\\r\\n     * path-less or component-less routes.\\r\\n     * Set to 'always' to enable unconditional inheritance of parent parameters.\\r\\n     */\\r\\n    paramsInheritanceStrategy?: 'emptyOnly' | 'always';\\r\\n    /**\\r\\n     * A custom handler for malformed URI errors. The handler is invoked when `encodedURI` contains\\r\\n     * invalid character sequences.\\r\\n     * The default implementation is to redirect to the root URL, dropping\\r\\n     * any path or parameter information. The function takes three parameters:\\r\\n     *\\r\\n     * - `'URIError'` - Error thrown when parsing a bad URL.\\r\\n     * - `'UrlSerializer'` - UrlSerializer that’s configured with the router.\\r\\n     * - `'url'` -  The malformed URL that caused the URIError\\r\\n     * */\\r\\n    malformedUriErrorHandler?: (error: URIError, urlSerializer: UrlSerializer, url: string) => UrlTree;\\r\\n    /**\\r\\n     * Defines when the router updates the browser URL. By default ('deferred'),\\r\\n     * update after successful navigation.\\r\\n     * Set to 'eager' if prefer to update the URL at the beginning of navigation.\\r\\n     * Updating the URL early allows you to handle a failure of navigation by\\r\\n     * showing an error message with the URL that failed.\\r\\n     */\\r\\n    urlUpdateStrategy?: 'deferred' | 'eager';\\r\\n    /**\\r\\n     * Enables a bug fix that corrects relative link resolution in components with empty paths.\\r\\n     * Example:\\r\\n     *\\r\\n     * ```\\r\\n     * const routes = [\\r\\n     *   {\\r\\n     *     path: '',\\r\\n     *     component: ContainerComponent,\\r\\n     *     children: [\\r\\n     *       { path: 'a', component: AComponent },\\r\\n     *       { path: 'b', component: BComponent },\\r\\n     *     ]\\r\\n     *   }\\r\\n     * ];\\r\\n     * ```\\r\\n     *\\r\\n     * From the `ContainerComponent`, this will not work:\\r\\n     *\\r\\n     * `<a [routerLink]=\\\"['./a']\\\">Link to A</a>`\\r\\n     *\\r\\n     * However, this will work:\\r\\n     *\\r\\n     * `<a [routerLink]=\\\"['../a']\\\">Link to A</a>`\\r\\n     *\\r\\n     * In other words, you're required to use `../` rather than `./`. This is currently the default\\r\\n     * behavior. Setting this option to `corrected` enables the fix.\\r\\n     */\\r\\n    relativeLinkResolution?: 'legacy' | 'corrected';\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the end of the Guard phase of routing.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class GuardsCheckEnd extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string;\\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot;\\r\\n    /** @docsNotRequired */\\r\\n    shouldActivate: boolean;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string, \\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot, \\r\\n    /** @docsNotRequired */\\r\\n    shouldActivate: boolean);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the start of the Guard phase of routing.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class GuardsCheckStart extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string;\\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string, \\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Allowed values in an `ExtraOptions` object that configure\\r\\n * when the router performs the initial navigation operation.\\r\\n *\\r\\n * * 'enabled' - The initial navigation starts before the root component is created.\\r\\n * The bootstrap is blocked until the initial navigation is complete. This value is required\\r\\n * for [server-side rendering](guide/universal) to work.\\r\\n * * 'disabled' - The initial navigation is not performed. The location listener is set up before\\r\\n * the root component gets created. Use if there is a reason to have\\r\\n * more control over when the router starts its initial navigation due to some complex\\r\\n * initialization logic.\\r\\n * * 'legacy_enabled'- (Default, for compatibility.) The initial navigation starts after the root component has been created.\\r\\n * The bootstrap is not blocked until the initial navigation is complete. @deprecated\\r\\n * * 'legacy_disabled'- The initial navigation is not performed. The location listener is set up\\r\\n * after the root component gets created. @deprecated since v4\\r\\n * * `true` - same as 'legacy_enabled'. @deprecated since v4\\r\\n * * `false` - same as 'legacy_disabled'. @deprecated since v4\\r\\n *\\r\\n * The 'legacy_enabled' and 'legacy_disabled' should not be used for new applications.\\r\\n *\\r\\n * @see `forRoot()`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type InitialNavigation = true | false | 'enabled' | 'disabled' | 'legacy_enabled' | 'legacy_disabled';\\r\\n\\r\\n/**\\r\\n *\\r\\n * A string of the form `path/to/file#exportName` that acts as a URL for a set of routes to load,\\r\\n * or a function that returns such a set.\\r\\n *\\r\\n * The string form of `LoadChildren` is deprecated (see `DeprecatedLoadChildren`). The function\\r\\n * form (`LoadChildrenCallback`) should be used instead.\\r\\n *\\r\\n * @see `Route#loadChildren`.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type LoadChildren = LoadChildrenCallback | DeprecatedLoadChildren;\\r\\n\\r\\n/**\\r\\n *\\r\\n * A function that is called to resolve a collection of lazy-loaded routes.\\r\\n *\\r\\n * Often this function will be implemented using an ES dynamic `import()` expression. For example:\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'lazy',\\r\\n *   loadChildren: () => import('./lazy-route/lazy.module').then(mod => mod.LazyModule),\\r\\n * }];\\r\\n * ```\\r\\n *\\r\\n * This function _must_ match the form above: an arrow function of the form\\r\\n * `() => import('...').then(mod => mod.MODULE)`.\\r\\n *\\r\\n * @see `Route#loadChildren`.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type LoadChildrenCallback = () => Type<any> | NgModuleFactory<any> | Observable<Type<any>> | Promise<NgModuleFactory<any> | Type<any> | any>;\\r\\n\\r\\n/**\\r\\n * Information about a navigation operation. Retrieve the most recent\\r\\n * navigation object with the `router.getCurrentNavigation()` method.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type Navigation = {\\r\\n    /**\\r\\n     * The ID of the current navigation.\\r\\n     */\\r\\n    id: number;\\r\\n    /**\\r\\n     * The target URL passed into the `Router#navigateByUrl()` call before navigation. This is\\r\\n     * the value before the router has parsed or applied redirects to it.\\r\\n     */\\r\\n    initialUrl: string | UrlTree;\\r\\n    /**\\r\\n     * The initial target URL after being parsed with `UrlSerializer.extract()`.\\r\\n     */\\r\\n    extractedUrl: UrlTree;\\r\\n    /**\\r\\n     * The extracted URL after redirects have been applied.\\r\\n     * This URL may not be available immediately, therefore this property can be `undefined`.\\r\\n     * It is guaranteed to be set after the `RoutesRecognized` event fires.\\r\\n     */\\r\\n    finalUrl?: UrlTree;\\r\\n    /**\\r\\n     * Identifies how this navigation was triggered.\\r\\n     *\\r\\n     * * 'imperative'--Triggered by `router.navigateByUrl` or `router.navigate`.\\r\\n     * * 'popstate'--Triggered by a popstate event.\\r\\n     * * 'hashchange'--Triggered by a hashchange event.\\r\\n     */\\r\\n    trigger: 'imperative' | 'popstate' | 'hashchange';\\r\\n    /**\\r\\n     * Options that controlled the strategy used for this navigation.\\r\\n     * See `NavigationExtras`.\\r\\n     */\\r\\n    extras: NavigationExtras;\\r\\n    /**\\r\\n     * The previously successful `Navigation` object. Only one previous navigation\\r\\n     * is available, therefore this previous `Navigation` object has a `null` value\\r\\n     * for its own `previousNavigation`.\\r\\n     */\\r\\n    previousNavigation: Navigation | null;\\r\\n};\\r\\n\\r\\n/**\\r\\n * An event triggered when a navigation is canceled, directly or indirectly.\\r\\n *\\r\\n * This can happen when a [route guard](guide/router#milestone-5-route-guards)\\r\\n * returns `false` or initiates a redirect by returning a `UrlTree`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NavigationCancel extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    reason: string;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    reason: string);\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered when a navigation ends successfully.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NavigationEnd extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string);\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered when a navigation fails due to an unexpected error.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NavigationError extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    error: any;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    error: any);\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Options that modify the navigation strategy.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface NavigationExtras {\\r\\n    /**\\r\\n     * Specifies a root URI to use for relative navigation.\\r\\n     *\\r\\n     * For example, consider the following route configuration where the parent route\\r\\n     * has two children.\\r\\n     *\\r\\n     * ```\\r\\n     * [{\\r\\n    *   path: 'parent',\\r\\n    *   component: ParentComponent,\\r\\n    *   children: [{\\r\\n    *     path: 'list',\\r\\n    *     component: ListComponent\\r\\n    *   },{\\r\\n    *     path: 'child',\\r\\n    *     component: ChildComponent\\r\\n    *   }]\\r\\n    * }]\\r\\n     * ```\\r\\n     *\\r\\n     * The following `go()` function navigates to the `list` route by\\r\\n     * interpreting the destination URI as relative to the activated `child`  route\\r\\n     *\\r\\n     * ```\\r\\n     *  @Component({...})\\r\\n     *  class ChildComponent {\\r\\n    *    constructor(private router: Router, private route: ActivatedRoute) {}\\r\\n    *\\r\\n    *    go() {\\r\\n    *      this.router.navigate(['../list'], { relativeTo: this.route });\\r\\n    *    }\\r\\n    *  }\\r\\n     * ```\\r\\n     */\\r\\n    relativeTo?: ActivatedRoute | null;\\r\\n    /**\\r\\n     * Sets query parameters to the URL.\\r\\n     *\\r\\n     * ```\\r\\n     * // Navigate to /results?page=1\\r\\n     * this.router.navigate(['/results'], { queryParams: { page: 1 } });\\r\\n     * ```\\r\\n     */\\r\\n    queryParams?: Params | null;\\r\\n    /**\\r\\n     * Sets the hash fragment for the URL.\\r\\n     *\\r\\n     * ```\\r\\n     * // Navigate to /results#top\\r\\n     * this.router.navigate(['/results'], { fragment: 'top' });\\r\\n     * ```\\r\\n     */\\r\\n    fragment?: string;\\r\\n    /**\\r\\n     * **DEPRECATED**: Use `queryParamsHandling: \\\"preserve\\\"` instead to preserve\\r\\n     * query parameters for the next navigation.\\r\\n     *\\r\\n     * @deprecated since v4\\r\\n     */\\r\\n    preserveQueryParams?: boolean;\\r\\n    /**\\r\\n     * How to handle query parameters in the router link for the next navigation.\\r\\n     * One of:\\r\\n     * * `merge` : Merge new with current parameters.\\r\\n     * * `preserve` : Preserve current parameters.\\r\\n     *\\r\\n     * ```\\r\\n     * // from /results?page=1 to /view?page=1&page=2\\r\\n     * this.router.navigate(['/view'], { queryParams: { page: 2 },  queryParamsHandling: \\\"merge\\\" });\\r\\n     * ```\\r\\n     */\\r\\n    queryParamsHandling?: QueryParamsHandling | null;\\r\\n    /**\\r\\n     * When true, preserves the URL fragment for the next navigation\\r\\n     *\\r\\n     * ```\\r\\n     * // Preserve fragment from /results#top to /view#top\\r\\n     * this.router.navigate(['/view'], { preserveFragment: true });\\r\\n     * ```\\r\\n     */\\r\\n    preserveFragment?: boolean;\\r\\n    /**\\r\\n     * When true, navigates without pushing a new state into history.\\r\\n     *\\r\\n     * ```\\r\\n     * // Navigate silently to /view\\r\\n     * this.router.navigate(['/view'], { skipLocationChange: true });\\r\\n     * ```\\r\\n     */\\r\\n    skipLocationChange?: boolean;\\r\\n    /**\\r\\n     * When true, navigates while replacing the current state in history.\\r\\n     *\\r\\n     * ```\\r\\n     * // Navigate to /view\\r\\n     * this.router.navigate(['/view'], { replaceUrl: true });\\r\\n     * ```\\r\\n     */\\r\\n    replaceUrl?: boolean;\\r\\n    /**\\r\\n     * Developer-defined state that can be passed to any navigation.\\r\\n     * Access this value through the `Navigation.extras` object\\r\\n     * returned from `router.getCurrentNavigation()` while a navigation is executing.\\r\\n     *\\r\\n     * After a navigation completes, the router writes an object containing this\\r\\n     * value together with a `navigationId` to `history.state`.\\r\\n     * The value is written when `location.go()` or `location.replaceState()`\\r\\n     * is called before activating this route.\\r\\n     *\\r\\n     * Note that `history.state` does not pass an object equality test because\\r\\n     * the router adds the `navigationId` on each navigation.\\r\\n     */\\r\\n    state?: {\\r\\n        [k: string]: any;\\r\\n    };\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered when a navigation starts.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NavigationStart extends RouterEvent {\\r\\n    /**\\r\\n     * Identifies the call or event that triggered the navigation.\\r\\n     * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.\\r\\n     *\\r\\n     */\\r\\n    navigationTrigger?: 'imperative' | 'popstate' | 'hashchange';\\r\\n    /**\\r\\n     * The navigation state that was previously supplied to the `pushState` call,\\r\\n     * when the navigation is triggered by a `popstate` event. Otherwise null.\\r\\n     *\\r\\n     * The state object is defined by `NavigationExtras`, and contains any\\r\\n     * developer-defined state value, as well as a unique ID that\\r\\n     * the router assigns to every router transition/navigation.\\r\\n     *\\r\\n     * From the perspective of the router, the router never \\\"goes back\\\".\\r\\n     * When the user clicks on the back button in the browser,\\r\\n     * a new navigation ID is created.\\r\\n     *\\r\\n     * Use the ID in this previous-state object to differentiate between a newly created\\r\\n     * state and one returned to by a `popstate` event, so that you can restore some\\r\\n     * remembered state, such as scroll position.\\r\\n     *\\r\\n     */\\r\\n    restoredState?: {\\r\\n        [k: string]: any;\\r\\n        navigationId: number;\\r\\n    } | null;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    navigationTrigger?: 'imperative' | 'popstate' | 'hashchange', \\r\\n    /** @docsNotRequired */\\r\\n    restoredState?: {\\r\\n        [k: string]: any;\\r\\n        navigationId: number;\\r\\n    } | null);\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Provides a preloading strategy that does not preload any modules.\\r\\n *\\r\\n * This strategy is enabled by default.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NoPreloading implements PreloadingStrategy {\\r\\n    preload(route: Route, fn: () => Observable<any>): Observable<any>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Store contextual information about a `RouterOutlet`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class OutletContext {\\r\\n    outlet: RouterOutlet | null;\\r\\n    route: ActivatedRoute | null;\\r\\n    resolver: ComponentFactoryResolver | null;\\r\\n    children: ChildrenOutletContexts;\\r\\n    attachRef: ComponentRef<any> | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A map that provides access to the required and optional parameters\\r\\n * specific to a route.\\r\\n * The map supports retrieving a single value with `get()`\\r\\n * or multiple values with `getAll()`.\\r\\n *\\r\\n * @see [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ParamMap {\\r\\n    /**\\r\\n     * Reports whether the map contains a given parameter.\\r\\n     * @param name The parameter name.\\r\\n     * @returns True if the map contains the given parameter, false otherwise.\\r\\n     */\\r\\n    has(name: string): boolean;\\r\\n    /**\\r\\n     * Retrieves a single value for a parameter.\\r\\n     * @param name The parameter name.\\r\\n     * @return The parameter's single value,\\r\\n     * or the first value if the parameter has multiple values,\\r\\n     * or `null` when there is no such parameter.\\r\\n     */\\r\\n    get(name: string): string | null;\\r\\n    /**\\r\\n     * Retrieves multiple values for a parameter.\\r\\n     * @param name The parameter name.\\r\\n     * @return An array containing one or more values,\\r\\n     * or an empty array if there is no such parameter.\\r\\n     *\\r\\n     */\\r\\n    getAll(name: string): string[];\\r\\n    /** Names of the parameters in the map. */\\r\\n    readonly keys: string[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * A collection of matrix and query URL parameters.\\r\\n * @see `convertToParamMap()`\\r\\n * @see `ParamMap`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type Params = {\\r\\n    [key: string]: any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Provides a preloading strategy that preloads all modules as quickly as possible.\\r\\n *\\r\\n * ```\\r\\n * RouteModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class PreloadAllModules implements PreloadingStrategy {\\r\\n    preload(route: Route, fn: () => Observable<any>): Observable<any>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Provides a preloading strategy.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class PreloadingStrategy {\\r\\n    abstract preload(route: Route, fn: () => Observable<any>): Observable<any>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The primary routing outlet.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const PRIMARY_OUTLET = \\\"primary\\\";\\r\\n\\r\\n/**\\r\\n * Registers a [DI provider](guide/glossary#provider) for a set of routes.\\r\\n * @param routes The route configuration to provide.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [RouterModule.forChild(ROUTES)],\\r\\n *   providers: [provideRoutes(EXTRA_ROUTES)]\\r\\n * })\\r\\n * class MyNgModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function provideRoutes(routes: Routes): any;\\r\\n\\r\\n/**\\r\\n *\\r\\n * How to handle query parameters in a router link.\\r\\n * One of:\\r\\n * - `merge` : Merge new with current parameters.\\r\\n * - `preserve` : Preserve current parameters.\\r\\n *\\r\\n * @see `NavigationExtras#queryParamsHandling`\\r\\n * @see `RouterLink`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type QueryParamsHandling = 'merge' | 'preserve' | '';\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Interface that classes can implement to be a data provider.\\r\\n * A data provider class can be used with the router to resolve data during navigation.\\r\\n * The interface defines a `resolve()` method that will be invoked when the navigation starts.\\r\\n * The router will then wait for the data to be resolved before the route is finally activated.\\r\\n *\\r\\n * ```\\r\\n * @Injectable({ providedIn: 'root' })\\r\\n * export class HeroResolver implements Resolve<Hero> {\\r\\n *   constructor(private service: HeroService) {}\\r\\n *\\r\\n *   resolve(\\r\\n *     route: ActivatedRouteSnapshot,\\r\\n *     state: RouterStateSnapshot\\r\\n *   ): Observable<any>|Promise<any>|any {\\r\\n *     return this.service.getHero(route.paramMap.get('id'));\\r\\n *   }\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'detail/:id',\\r\\n *         component: HeroDetailComponent,\\r\\n *         resolve: {\\r\\n *           hero: HeroResolver\\r\\n *         }\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   exports: [RouterModule]\\r\\n * })\\r\\n * export class AppRoutingModule {}\\r\\n * ```\\r\\n *\\r\\n * You can alternatively provide a function with the `resolve` signature:\\r\\n *\\r\\n * ```\\r\\n * export const myHero: Hero = {\\r\\n *   // ...\\r\\n * }\\r\\n *\\r\\n * @NgModule({\\r\\n *   imports: [\\r\\n *     RouterModule.forRoot([\\r\\n *       {\\r\\n *         path: 'detail/:id',\\r\\n *         component: HeroComponent,\\r\\n *         resolve: {\\r\\n *           hero: 'heroResolver'\\r\\n *         }\\r\\n *       }\\r\\n *     ])\\r\\n *   ],\\r\\n *   providers: [\\r\\n *     {\\r\\n *       provide: 'heroResolver',\\r\\n *       useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => myHero\\r\\n *     }\\r\\n *   ]\\r\\n * })\\r\\n * export class AppModule {}\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Resolve<T> {\\r\\n    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<T> | Promise<T> | T;\\r\\n}\\r\\n\\r\\n/**\\r\\n *\\r\\n * Represents the resolved data associated with a particular route.\\r\\n *\\r\\n * @see `Route#resolve`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ResolveData = {\\r\\n    [name: string]: any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * An event triggered at the end of the Resolve phase of routing.\\r\\n * @see `ResolveStart`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ResolveEnd extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string;\\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string, \\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered at the the start of the Resolve phase of routing.\\r\\n *\\r\\n * Runs in the \\\"resolve\\\" phase whether or not there is anything to resolve.\\r\\n * In future, may change to only run when there are things to be resolved.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ResolveStart extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string;\\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string, \\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A configuration object that defines a single route.\\r\\n * A set of routes are collected in a `Routes` array to define a `Router` configuration.\\r\\n * The router attempts to match segments of a given URL against each route,\\r\\n * using the configuration options defined in this object.\\r\\n *\\r\\n * Supports static, parameterized, redirect, and wildcard routes, as well as\\r\\n * custom route data and resolve methods.\\r\\n *\\r\\n * For detailed usage information, see the [Routing Guide](guide/router).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Simple Configuration\\r\\n *\\r\\n * The following route specifies that when navigating to, for example,\\r\\n * `/team/11/user/bob`, the router creates the 'Team' component\\r\\n * with the 'User' child component in it.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'team/:id',\\r\\n  *  component: Team,\\r\\n *   children: [{\\r\\n *     path: 'user/:name',\\r\\n *     component: User\\r\\n *   }]\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * ### Multiple Outlets\\r\\n *\\r\\n * The following route creates sibling components with multiple outlets.\\r\\n * When navigating to `/team/11(aux:chat/jim)`, the router creates the 'Team' component next to\\r\\n * the 'Chat' component. The 'Chat' component is placed into the 'aux' outlet.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'team/:id',\\r\\n *   component: Team\\r\\n * }, {\\r\\n *   path: 'chat/:user',\\r\\n *   component: Chat\\r\\n *   outlet: 'aux'\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * ### Wild Cards\\r\\n *\\r\\n * The following route uses wild-card notation to specify a component\\r\\n * that is always instantiated regardless of where you navigate to.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: '**',\\r\\n *   component: WildcardComponent\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * ### Redirects\\r\\n *\\r\\n * The following route uses the `redirectTo` property to ignore a segment of\\r\\n * a given URL when looking for a child path.\\r\\n *\\r\\n * When navigating to '/team/11/legacy/user/jim', the router changes the URL segment\\r\\n * '/team/11/legacy/user/jim' to '/team/11/user/jim', and then instantiates\\r\\n * the Team component with the User child component in it.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'team/:id',\\r\\n *   component: Team,\\r\\n *   children: [{\\r\\n *     path: 'legacy/user/:name',\\r\\n *     redirectTo: 'user/:name'\\r\\n *   }, {\\r\\n *     path: 'user/:name',\\r\\n *     component: User\\r\\n *   }]\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * The redirect path can be relative, as shown in this example, or absolute.\\r\\n * If we change the `redirectTo` value in the example to the absolute URL segment '/user/:name',\\r\\n * the result URL is also absolute, '/user/jim'.\\r\\n\\r\\n * ### Empty Path\\r\\n *\\r\\n * Empty-path route configurations can be used to instantiate components that do not 'consume'\\r\\n * any URL segments.\\r\\n *\\r\\n * In the following configuration, when navigating to\\r\\n * `/team/11`, the router instantiates the 'AllUsers' component.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'team/:id',\\r\\n *   component: Team,\\r\\n *   children: [{\\r\\n *     path: '',\\r\\n *     component: AllUsers\\r\\n *   }, {\\r\\n *     path: 'user/:name',\\r\\n *     component: User\\r\\n *   }]\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * Empty-path routes can have children. In the following example, when navigating\\r\\n * to `/team/11/user/jim`, the router instantiates the wrapper component with\\r\\n * the user component in it.\\r\\n *\\r\\n * Note that an empty path route inherits its parent's parameters and data.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'team/:id',\\r\\n *   component: Team,\\r\\n *   children: [{\\r\\n *     path: '',\\r\\n *     component: WrapperCmp,\\r\\n *     children: [{\\r\\n *       path: 'user/:name',\\r\\n *       component: User\\r\\n *     }]\\r\\n *   }]\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * ### Matching Strategy\\r\\n *\\r\\n * The default path-match strategy is 'prefix', which means that the router\\r\\n * checks URL elements from the left to see if the URL matches a specified path.\\r\\n * For example, '/team/11/user' matches 'team/:id'.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: '',\\r\\n *   pathMatch: 'prefix', //default\\r\\n *   redirectTo: 'main'\\r\\n * }, {\\r\\n *   path: 'main',\\r\\n *   component: Main\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * You can specify the path-match strategy 'full' to make sure that the path\\r\\n * covers the whole unconsumed URL. It is important to do this when redirecting\\r\\n * empty-path routes. Otherwise, because an empty path is a prefix of any URL,\\r\\n * the router would apply the redirect even when navigating to the redirect destination,\\r\\n * creating an endless loop.\\r\\n *\\r\\n * In the following example, supplying the 'full' `pathMatch` strategy ensures\\r\\n * that the router applies the redirect if and only if navigating to '/'.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: '',\\r\\n *   pathMatch: 'full',\\r\\n *   redirectTo: 'main'\\r\\n * }, {\\r\\n *   path: 'main',\\r\\n *   component: Main\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * ### Componentless Routes\\r\\n *\\r\\n * You can share parameters between sibling components.\\r\\n * For example, suppose that two sibling components should go next to each other,\\r\\n * and both of them require an ID parameter. You can accomplish this using a route\\r\\n * that does not specify a component at the top level.\\r\\n *\\r\\n * In the following example, 'MainChild' and 'AuxChild' are siblings.\\r\\n * When navigating to 'parent/10/(a//aux:b)', the route instantiates\\r\\n * the main child and aux child components next to each other.\\r\\n * For this to work, the application component must have the primary and aux outlets defined.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *    path: 'parent/:id',\\r\\n *    children: [\\r\\n *      { path: 'a', component: MainChild },\\r\\n *      { path: 'b', component: AuxChild, outlet: 'aux' }\\r\\n *    ]\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * The router merges the parameters, data, and resolve of the componentless\\r\\n * parent into the parameters, data, and resolve of the children.\\r\\n *\\r\\n * This is especially useful when child components are defined\\r\\n * with an empty path string, as in the following example.\\r\\n * With this configuration, navigating to '/parent/10' creates\\r\\n * the main child and aux components.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *    path: 'parent/:id',\\r\\n *    children: [\\r\\n *      { path: '', component: MainChild },\\r\\n *      { path: '', component: AuxChild, outlet: 'aux' }\\r\\n *    ]\\r\\n * }]\\r\\n * ```\\r\\n *\\r\\n * ### Lazy Loading\\r\\n *\\r\\n * Lazy loading speeds up application load time by splitting the application\\r\\n * into multiple bundles and loading them on demand.\\r\\n * To use lazy loading, provide the `loadChildren` property  instead of the `children` property.\\r\\n *\\r\\n * Given the following example route, the router will lazy load\\r\\n * the associated module on demand using the browser native import system.\\r\\n *\\r\\n * ```\\r\\n * [{\\r\\n *   path: 'lazy',\\r\\n *   loadChildren: () => import('./lazy-route/lazy.module').then(mod => mod.LazyModule),\\r\\n * }];\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Route {\\r\\n    /**\\r\\n     * The path to match against. Cannot be used together with a custom `matcher` function.\\r\\n     * A URL string that uses router matching notation.\\r\\n     * Can be a wild card (`**`) that matches any URL (see Usage Notes below).\\r\\n     * Default is \\\"/\\\" (the root path).\\r\\n     *\\r\\n     */\\r\\n    path?: string;\\r\\n    /**\\r\\n     * The path-matching strategy, one of 'prefix' or 'full'.\\r\\n     * Default is 'prefix'.\\r\\n     *\\r\\n     * By default, the router checks URL elements from the left to see if the URL\\r\\n     * matches a given  path, and stops when there is a match. For example,\\r\\n     * '/team/11/user' matches 'team/:id'.\\r\\n     *\\r\\n     * The path-match strategy 'full' matches against the entire URL.\\r\\n     * It is important to do this when redirecting empty-path routes.\\r\\n     * Otherwise, because an empty path is a prefix of any URL,\\r\\n     * the router would apply the redirect even when navigating\\r\\n     * to the redirect destination, creating an endless loop.\\r\\n     *\\r\\n     */\\r\\n    pathMatch?: string;\\r\\n    /**\\r\\n     * A custom URL-matching function. Cannot be used together with `path`.\\r\\n     */\\r\\n    matcher?: UrlMatcher;\\r\\n    /**\\r\\n     * The component to instantiate when the path matches.\\r\\n     * Can be empty if child routes specify components.\\r\\n     */\\r\\n    component?: Type<any>;\\r\\n    /**\\r\\n     * A URL to which to redirect when a the path matches.\\r\\n     * Absolute if the URL begins with a slash (/), otherwise relative to the path URL.\\r\\n     * When not present, router does not redirect.\\r\\n     */\\r\\n    redirectTo?: string;\\r\\n    /**\\r\\n     * Name of a `RouterOutlet` object where the component can be placed\\r\\n     * when the path matches.\\r\\n     */\\r\\n    outlet?: string;\\r\\n    /**\\r\\n     * An array of dependency-injection tokens used to look up `CanActivate()`\\r\\n     * handlers, in order to determine if the current user is allowed to\\r\\n     * activate the component. By default, any user can activate.\\r\\n     */\\r\\n    canActivate?: any[];\\r\\n    /**\\r\\n     * An array of DI tokens used to look up `CanActivateChild()` handlers,\\r\\n     * in order to determine if the current user is allowed to activate\\r\\n     * a child of the component. By default, any user can activate a child.\\r\\n     */\\r\\n    canActivateChild?: any[];\\r\\n    /**\\r\\n     * An array of DI tokens used to look up `CanDeactivate()`\\r\\n     * handlers, in order to determine if the current user is allowed to\\r\\n     * deactivate the component. By default, any user can deactivate.\\r\\n     *\\r\\n     */\\r\\n    canDeactivate?: any[];\\r\\n    /**\\r\\n     * An array of DI tokens used to look up `CanLoad()`\\r\\n     * handlers, in order to determine if the current user is allowed to\\r\\n     * load the component. By default, any user can load.\\r\\n     */\\r\\n    canLoad?: any[];\\r\\n    /**\\r\\n     * Additional developer-defined data provided to the component via\\r\\n     * `ActivatedRoute`. By default, no additional data is passed.\\r\\n     */\\r\\n    data?: Data;\\r\\n    /**\\r\\n     * A map of DI tokens used to look up data resolvers. See `Resolve`.\\r\\n     */\\r\\n    resolve?: ResolveData;\\r\\n    /**\\r\\n     * An array of child `Route` objects that specifies a nested route\\r\\n     * configuration.\\r\\n     */\\r\\n    children?: Routes;\\r\\n    /**\\r\\n     * A `LoadChildren` object specifying lazy-loaded child routes.\\r\\n     */\\r\\n    loadChildren?: LoadChildren;\\r\\n    /**\\r\\n     * Defines when guards and resolvers will be run. One of\\r\\n     * - `paramsOrQueryParamsChange` : Run when query parameters change.\\r\\n     * - `always` : Run on every execution.\\r\\n     * By default, guards and resolvers run only when the matrix\\r\\n     * parameters of the route change.\\r\\n     */\\r\\n    runGuardsAndResolvers?: RunGuardsAndResolvers;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered when a route has been lazy loaded.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouteConfigLoadEnd {\\r\\n    /** @docsNotRequired */\\r\\n    route: Route;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    route: Route);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An event triggered before lazy loading a route configuration.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouteConfigLoadStart {\\r\\n    /** @docsNotRequired */\\r\\n    route: Route;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    route: Route);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * A service that provides navigation and URL manipulation capabilities.\\r\\n *\\r\\n * @see `Route`.\\r\\n * @see [Routing and Navigation Guide](guide/router).\\r\\n *\\r\\n * @ngModule RouterModule\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Router {\\r\\n    private rootComponentType;\\r\\n    private urlSerializer;\\r\\n    private rootContexts;\\r\\n    private location;\\r\\n    config: Routes;\\r\\n    private currentUrlTree;\\r\\n    private rawUrlTree;\\r\\n    private browserUrlTree;\\r\\n    private readonly transitions;\\r\\n    private navigations;\\r\\n    private lastSuccessfulNavigation;\\r\\n    private currentNavigation;\\r\\n    private locationSubscription;\\r\\n    private navigationId;\\r\\n    private configLoader;\\r\\n    private ngModule;\\r\\n    private console;\\r\\n    private isNgZoneEnabled;\\r\\n    /**\\r\\n     * An event stream for routing events in this NgModule.\\r\\n     */\\r\\n    readonly events: Observable<Event>;\\r\\n    /**\\r\\n     * The current state of routing in this NgModule.\\r\\n     */\\r\\n    readonly routerState: RouterState;\\r\\n    /**\\r\\n     * A handler for navigation errors in this NgModule.\\r\\n     */\\r\\n    errorHandler: ErrorHandler;\\r\\n    /**\\r\\n     * A handler for errors thrown by `Router.parseUrl(url)`\\r\\n     * when `url` contains an invalid character.\\r\\n     * The most common case is a `%` sign\\r\\n     * that's not encoded and is not part of a percent encoded sequence.\\r\\n     */\\r\\n    malformedUriErrorHandler: (error: URIError, urlSerializer: UrlSerializer, url: string) => UrlTree;\\r\\n    /**\\r\\n     * True if at least one navigation event has occurred,\\r\\n     * false otherwise.\\r\\n     */\\r\\n    navigated: boolean;\\r\\n    private lastSuccessfulId;\\r\\n    /**\\r\\n     * A strategy for extracting and merging URLs.\\r\\n     * Used for AngularJS to Angular migrations.\\r\\n     */\\r\\n    urlHandlingStrategy: UrlHandlingStrategy;\\r\\n    /**\\r\\n     * A strategy for re-using routes.\\r\\n     */\\r\\n    routeReuseStrategy: RouteReuseStrategy;\\r\\n    /**\\r\\n     * How to handle a navigation request to the current URL. One of:\\r\\n     * - `'ignore'` :  The router ignores the request.\\r\\n     * - `'reload'` : The router reloads the URL. Use to implement a \\\"refresh\\\" feature.\\r\\n     */\\r\\n    onSameUrlNavigation: 'reload' | 'ignore';\\r\\n    /**\\r\\n     * How to merge parameters, data, and resolved data from parent to child\\r\\n     * routes. One of:\\r\\n     *\\r\\n     * - `'emptyOnly'` : Inherit parent parameters, data, and resolved data\\r\\n     * for path-less or component-less routes.\\r\\n     * - `'always'` : Inherit parent parameters, data, and resolved data\\r\\n     * for all child routes.\\r\\n     */\\r\\n    paramsInheritanceStrategy: 'emptyOnly' | 'always';\\r\\n    /**\\r\\n     * Determines when the router updates the browser URL.\\r\\n     * By default (`\\\"deferred\\\"`), updates the browser URL after navigation has finished.\\r\\n     * Set to `'eager'` to update the browser URL at the beginning of navigation.\\r\\n     * You can choose to update early so that, if navigation fails,\\r\\n     * you can show an error message with the URL that failed.\\r\\n     */\\r\\n    urlUpdateStrategy: 'deferred' | 'eager';\\r\\n    /**\\r\\n     * Enables a bug fix that corrects relative link resolution in components with empty paths.\\r\\n     * @see `RouterModule`\\r\\n     */\\r\\n    relativeLinkResolution: 'legacy' | 'corrected';\\r\\n    /**\\r\\n     * Creates the router service.\\r\\n     */\\r\\n    constructor(rootComponentType: Type<any> | null, urlSerializer: UrlSerializer, rootContexts: ChildrenOutletContexts, location: Location, injector: Injector, loader: NgModuleFactoryLoader, compiler: Compiler, config: Routes);\\r\\n    private setupNavigations;\\r\\n    private getTransition;\\r\\n    private setTransition;\\r\\n    /**\\r\\n     * Sets up the location change listener and performs the initial navigation.\\r\\n     */\\r\\n    initialNavigation(): void;\\r\\n    /**\\r\\n     * Sets up the location change listener.\\r\\n     */\\r\\n    setUpLocationChangeListener(): void;\\r\\n    /** The current URL. */\\r\\n    readonly url: string;\\r\\n    /** The current Navigation object if one exists */\\r\\n    getCurrentNavigation(): Navigation | null;\\r\\n    /**\\r\\n     * Resets the configuration used for navigation and generating links.\\r\\n     *\\r\\n     * @param config The route array for the new configuration.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ```\\r\\n     * router.resetConfig([\\r\\n     *  { path: 'team/:id', component: TeamCmp, children: [\\r\\n     *    { path: 'simple', component: SimpleCmp },\\r\\n     *    { path: 'user/:name', component: UserCmp }\\r\\n     *  ]}\\r\\n     * ]);\\r\\n     * ```\\r\\n     */\\r\\n    resetConfig(config: Routes): void;\\r\\n    /** @docsNotRequired */\\r\\n    ngOnDestroy(): void;\\r\\n    /** Disposes of the router. */\\r\\n    dispose(): void;\\r\\n    /**\\r\\n     * Applies an array of commands to the current URL tree and creates a new URL tree.\\r\\n     *\\r\\n     * When given an activated route, applies the given commands starting from the route.\\r\\n     * Otherwise, applies the given command starting from the root.\\r\\n     *\\r\\n     * @param commands An array of commands to apply.\\r\\n     * @param navigationExtras Options that control the navigation strategy. This function\\r\\n     * only utilizes properties in `NavigationExtras` that would change the provided URL.\\r\\n     * @returns The new URL tree.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ```\\r\\n     * // create /team/33/user/11\\r\\n     * router.createUrlTree(['/team', 33, 'user', 11]);\\r\\n     *\\r\\n     * // create /team/33;expand=true/user/11\\r\\n     * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\\r\\n     *\\r\\n     * // you can collapse static segments like this (this works only with the first passed-in value):\\r\\n     * router.createUrlTree(['/team/33/user', userId]);\\r\\n     *\\r\\n     * // If the first segment can contain slashes, and you do not want the router to split it,\\r\\n     * // you can do the following:\\r\\n     * router.createUrlTree([{segmentPath: '/one/two'}]);\\r\\n     *\\r\\n     * // create /team/33/(user/11//right:chat)\\r\\n     * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\\r\\n     *\\r\\n     * // remove the right secondary node\\r\\n     * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\\r\\n     *\\r\\n     * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\\r\\n     *\\r\\n     * // navigate to /team/33/user/11/details\\r\\n     * router.createUrlTree(['details'], {relativeTo: route});\\r\\n     *\\r\\n     * // navigate to /team/33/user/22\\r\\n     * router.createUrlTree(['../22'], {relativeTo: route});\\r\\n     *\\r\\n     * // navigate to /team/44/user/22\\r\\n     * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\\r\\n     * ```\\r\\n     */\\r\\n    createUrlTree(commands: any[], navigationExtras?: NavigationExtras): UrlTree;\\r\\n    /**\\r\\n     * Navigate based on the provided URL, which must be absolute.\\r\\n     *\\r\\n     * @param url An absolute URL. The function does not apply any delta to the current URL.\\r\\n     * @param extras An object containing properties that modify the navigation strategy.\\r\\n     * The function ignores any properties in the `NavigationExtras` that would change the\\r\\n     * provided URL.\\r\\n     *\\r\\n     * @returns A Promise that resolves to 'true' when navigation succeeds,\\r\\n     * to 'false' when navigation fails, or is rejected on error.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ```\\r\\n     * router.navigateByUrl(\\\"/team/33/user/11\\\");\\r\\n     *\\r\\n     * // Navigate without updating the URL\\r\\n     * router.navigateByUrl(\\\"/team/33/user/11\\\", { skipLocationChange: true });\\r\\n     * ```\\r\\n     *\\r\\n     */\\r\\n    navigateByUrl(url: string | UrlTree, extras?: NavigationExtras): Promise<boolean>;\\r\\n    /**\\r\\n     * Navigate based on the provided array of commands and a starting point.\\r\\n     * If no starting route is provided, the navigation is absolute.\\r\\n     *\\r\\n     * Returns a promise that:\\r\\n     * - resolves to 'true' when navigation succeeds,\\r\\n     * - resolves to 'false' when navigation fails,\\r\\n     * - is rejected when an error happens.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ```\\r\\n     * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\\r\\n     *\\r\\n     * // Navigate without updating the URL\\r\\n     * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\\r\\n     * ```\\r\\n     *\\r\\n     * The first parameter of `navigate()` is a delta to be applied to the current URL\\r\\n     * or the one provided in the `relativeTo` property of the second parameter (the\\r\\n     * `NavigationExtras`).\\r\\n     *\\r\\n     * In order to affect this browser's `history.state` entry, the `state`\\r\\n     * parameter can be passed. This must be an object because the router\\r\\n     * will add the `navigationId` property to this object before creating\\r\\n     * the new history item.\\r\\n     */\\r\\n    navigate(commands: any[], extras?: NavigationExtras): Promise<boolean>;\\r\\n    /** Serializes a `UrlTree` into a string */\\r\\n    serializeUrl(url: UrlTree): string;\\r\\n    /** Parses a string into a `UrlTree` */\\r\\n    parseUrl(url: string): UrlTree;\\r\\n    /** Returns whether the url is activated */\\r\\n    isActive(url: string | UrlTree, exact: boolean): boolean;\\r\\n    private removeEmptyProps;\\r\\n    private processNavigations;\\r\\n    private scheduleNavigation;\\r\\n    private setBrowserUrl;\\r\\n    private resetStateAndUrl;\\r\\n    private resetUrlToCurrentUrlTree;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A [DI token](guide/glossary/#di-token) for the router service.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ROUTER_CONFIGURATION: InjectionToken<ExtraOptions>;\\r\\n\\r\\n/**\\r\\n * A [DI token](guide/glossary/#di-token) for the router initializer that\\r\\n * is called after the app is bootstrapped.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ROUTER_INITIALIZER: InjectionToken<(compRef: ComponentRef<any>) => void>;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Provides a way to customize when activated routes get reused.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class RouteReuseStrategy {\\r\\n    /** Determines if this route (and its subtree) should be detached to be reused later */\\r\\n    abstract shouldDetach(route: ActivatedRouteSnapshot): boolean;\\r\\n    /**\\r\\n     * Stores the detached route.\\r\\n     *\\r\\n     * Storing a `null` value should erase the previously stored value.\\r\\n     */\\r\\n    abstract store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle | null): void;\\r\\n    /** Determines if this route (and its subtree) should be reattached */\\r\\n    abstract shouldAttach(route: ActivatedRouteSnapshot): boolean;\\r\\n    /** Retrieves the previously stored route */\\r\\n    abstract retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null;\\r\\n    /** Determines if a route should be reused */\\r\\n    abstract shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Base for events the router goes through, as opposed to events tied to a specific\\r\\n * route. Fired one time for any given navigation.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ```ts\\r\\n * class MyService {\\r\\n *   constructor(public router: Router, logger: Logger) {\\r\\n *     router.events.pipe(\\r\\n *       filter(e => e instanceof RouterEvent)\\r\\n *     ).subscribe(e => {\\r\\n *       logger.log(e.id, e.url);\\r\\n *     });\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @see `Event`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterEvent {\\r\\n    /** A unique ID that the router assigns to every router navigation. */\\r\\n    id: number;\\r\\n    /** The URL that is the destination for this navigation. */\\r\\n    url: string;\\r\\n    constructor(\\r\\n    /** A unique ID that the router assigns to every router navigation. */\\r\\n    id: number, \\r\\n    /** The URL that is the destination for this navigation. */\\r\\n    url: string);\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Lets you link to specific routes in your app.\\r\\n *\\r\\n * Consider the following route configuration:\\r\\n * `[{ path: 'user/:name', component: UserCmp }]`.\\r\\n * When linking to this `user/:name` route, you use the `RouterLink` directive.\\r\\n *\\r\\n * If the link is static, you can use the directive as follows:\\r\\n * `<a routerLink=\\\"/user/bob\\\">link to user component</a>`\\r\\n *\\r\\n * If you use dynamic values to generate the link, you can pass an array of path\\r\\n * segments, followed by the params for each segment.\\r\\n *\\r\\n * For instance `['/team', teamId, 'user', userName, {details: true}]`\\r\\n * means that we want to generate a link to `/team/11/user/bob;details=true`.\\r\\n *\\r\\n * Multiple static segments can be merged into one\\r\\n * (e.g., `['/team/11/user', userName, {details: true}]`).\\r\\n *\\r\\n * The first segment name can be prepended with `/`, `./`, or `../`:\\r\\n * * If the first segment begins with `/`, the router will look up the route from the root of the\\r\\n *   app.\\r\\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router will\\r\\n *   instead look in the children of the current activated route.\\r\\n * * And if the first segment begins with `../`, the router will go up one level.\\r\\n *\\r\\n * You can set query params and fragment as follows:\\r\\n *\\r\\n * ```\\r\\n * <a [routerLink]=\\\"['/user/bob']\\\" [queryParams]=\\\"{debug: true}\\\" fragment=\\\"education\\\">\\r\\n *   link to user component\\r\\n * </a>\\r\\n * ```\\r\\n * RouterLink will use these to generate this link: `/user/bob#education?debug=true`.\\r\\n *\\r\\n * (Deprecated in v4.0.0 use `queryParamsHandling` instead) You can also tell the\\r\\n * directive to preserve the current query params and fragment:\\r\\n *\\r\\n * ```\\r\\n * <a [routerLink]=\\\"['/user/bob']\\\" preserveQueryParams preserveFragment>\\r\\n *   link to user component\\r\\n * </a>\\r\\n * ```\\r\\n *\\r\\n * You can tell the directive how to handle queryParams. Available options are:\\r\\n *  - `'merge'`: merge the queryParams into the current queryParams\\r\\n *  - `'preserve'`: preserve the current queryParams\\r\\n *  - default/`''`: use the queryParams only\\r\\n *\\r\\n * Same options for {@link NavigationExtras#queryParamsHandling\\r\\n * NavigationExtras#queryParamsHandling}.\\r\\n *\\r\\n * ```\\r\\n * <a [routerLink]=\\\"['/user/bob']\\\" [queryParams]=\\\"{debug: true}\\\" queryParamsHandling=\\\"merge\\\">\\r\\n *   link to user component\\r\\n * </a>\\r\\n * ```\\r\\n *\\r\\n * You can provide a `state` value to be persisted to the browser's History.state\\r\\n * property (See https://developer.mozilla.org/en-US/docs/Web/API/History#Properties). It's\\r\\n * used as follows:\\r\\n *\\r\\n * ```\\r\\n * <a [routerLink]=\\\"['/user/bob']\\\" [state]=\\\"{tracingId: 123}\\\">\\r\\n *   link to user component\\r\\n * </a>\\r\\n * ```\\r\\n *\\r\\n * And later the value can be read from the router through `router.getCurrentNavigation`.\\r\\n * For example, to capture the `tracingId` above during the `NavigationStart` event:\\r\\n *\\r\\n * ```\\r\\n * // Get NavigationStart events\\r\\n * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {\\r\\n *   const navigation = router.getCurrentNavigation();\\r\\n *   tracingService.trace({id: navigation.extras.state.tracingId});\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * The router link directive always treats the provided input as a delta to the current url.\\r\\n *\\r\\n * For instance, if the current url is `/user/(box//aux:team)`.\\r\\n *\\r\\n * Then the following link `<a [routerLink]=\\\"['/user/jim']\\\">Jim</a>` will generate the link\\r\\n * `/user/(jim//aux:team)`.\\r\\n *\\r\\n * See {@link Router#createUrlTree createUrlTree} for more information.\\r\\n *\\r\\n * @ngModule RouterModule\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterLink {\\r\\n    private router;\\r\\n    private route;\\r\\n    queryParams: {\\r\\n        [k: string]: any;\\r\\n    };\\r\\n    fragment: string;\\r\\n    queryParamsHandling: QueryParamsHandling;\\r\\n    preserveFragment: boolean;\\r\\n    skipLocationChange: boolean;\\r\\n    replaceUrl: boolean;\\r\\n    state?: {\\r\\n        [k: string]: any;\\r\\n    };\\r\\n    private commands;\\r\\n    private preserve;\\r\\n    constructor(router: Router, route: ActivatedRoute, tabIndex: string, renderer: Renderer2, el: ElementRef);\\r\\n    routerLink: any[] | string;\\r\\n    /**\\r\\n     * @deprecated 4.0.0 use `queryParamsHandling` instead.\\r\\n     */\\r\\n    preserveQueryParams: boolean;\\r\\n    onClick(): boolean;\\r\\n    readonly urlTree: UrlTree;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RouterLink>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RouterLink, \\\":not(a):not(area)[routerLink]\\\", never, { 'routerLink': \\\"routerLink\\\", 'preserveQueryParams': \\\"preserveQueryParams\\\", 'queryParams': \\\"queryParams\\\", 'fragment': \\\"fragment\\\", 'queryParamsHandling': \\\"queryParamsHandling\\\", 'preserveFragment': \\\"preserveFragment\\\", 'skipLocationChange': \\\"skipLocationChange\\\", 'replaceUrl': \\\"replaceUrl\\\", 'state': \\\"state\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n *\\r\\n * @description\\r\\n *\\r\\n * Lets you add a CSS class to an element when the link's route becomes active.\\r\\n *\\r\\n * This directive lets you add a CSS class to an element when the link's route\\r\\n * becomes active.\\r\\n *\\r\\n * Consider the following example:\\r\\n *\\r\\n * ```\\r\\n * <a routerLink=\\\"/user/bob\\\" routerLinkActive=\\\"active-link\\\">Bob</a>\\r\\n * ```\\r\\n *\\r\\n * When the url is either '/user' or '/user/bob', the active-link class will\\r\\n * be added to the `a` tag. If the url changes, the class will be removed.\\r\\n *\\r\\n * You can set more than one class, as follows:\\r\\n *\\r\\n * ```\\r\\n * <a routerLink=\\\"/user/bob\\\" routerLinkActive=\\\"class1 class2\\\">Bob</a>\\r\\n * <a routerLink=\\\"/user/bob\\\" [routerLinkActive]=\\\"['class1', 'class2']\\\">Bob</a>\\r\\n * ```\\r\\n *\\r\\n * You can configure RouterLinkActive by passing `exact: true`. This will add the classes\\r\\n * only when the url matches the link exactly.\\r\\n *\\r\\n * ```\\r\\n * <a routerLink=\\\"/user/bob\\\" routerLinkActive=\\\"active-link\\\" [routerLinkActiveOptions]=\\\"{exact:\\r\\n * true}\\\">Bob</a>\\r\\n * ```\\r\\n *\\r\\n * You can assign the RouterLinkActive instance to a template variable and directly check\\r\\n * the `isActive` status.\\r\\n * ```\\r\\n * <a routerLink=\\\"/user/bob\\\" routerLinkActive #rla=\\\"routerLinkActive\\\">\\r\\n *   Bob {{ rla.isActive ? '(already open)' : ''}}\\r\\n * </a>\\r\\n * ```\\r\\n *\\r\\n * Finally, you can apply the RouterLinkActive directive to an ancestor of a RouterLink.\\r\\n *\\r\\n * ```\\r\\n * <div routerLinkActive=\\\"active-link\\\" [routerLinkActiveOptions]=\\\"{exact: true}\\\">\\r\\n *   <a routerLink=\\\"/user/jim\\\">Jim</a>\\r\\n *   <a routerLink=\\\"/user/bob\\\">Bob</a>\\r\\n * </div>\\r\\n * ```\\r\\n *\\r\\n * This will set the active-link class on the div tag if the url is either '/user/jim' or\\r\\n * '/user/bob'.\\r\\n *\\r\\n * @ngModule RouterModule\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit {\\r\\n    private router;\\r\\n    private element;\\r\\n    private renderer;\\r\\n    private link?;\\r\\n    private linkWithHref?;\\r\\n    links: QueryList<RouterLink>;\\r\\n    linksWithHrefs: QueryList<RouterLinkWithHref>;\\r\\n    private classes;\\r\\n    private subscription;\\r\\n    readonly isActive: boolean;\\r\\n    routerLinkActiveOptions: {\\r\\n        exact: boolean;\\r\\n    };\\r\\n    constructor(router: Router, element: ElementRef, renderer: Renderer2, link?: RouterLink | undefined, linkWithHref?: RouterLinkWithHref | undefined);\\r\\n    ngAfterContentInit(): void;\\r\\n    routerLinkActive: string[] | string;\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    ngOnDestroy(): void;\\r\\n    private update;\\r\\n    private isLinkActive;\\r\\n    private hasActiveLinks;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RouterLinkActive>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RouterLinkActive, \\\"[routerLinkActive]\\\", [\\\"routerLinkActive\\\"], { 'routerLinkActiveOptions': \\\"routerLinkActiveOptions\\\", 'routerLinkActive': \\\"routerLinkActive\\\" }, {}, [\\\"links\\\", \\\"linksWithHrefs\\\"]>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Lets you link to specific routes in your app.\\r\\n *\\r\\n * See `RouterLink` for more information.\\r\\n *\\r\\n * @ngModule RouterModule\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterLinkWithHref implements OnChanges, OnDestroy {\\r\\n    private router;\\r\\n    private route;\\r\\n    private locationStrategy;\\r\\n    target: string;\\r\\n    queryParams: {\\r\\n        [k: string]: any;\\r\\n    };\\r\\n    fragment: string;\\r\\n    queryParamsHandling: QueryParamsHandling;\\r\\n    preserveFragment: boolean;\\r\\n    skipLocationChange: boolean;\\r\\n    replaceUrl: boolean;\\r\\n    state?: {\\r\\n        [k: string]: any;\\r\\n    };\\r\\n    private commands;\\r\\n    private subscription;\\r\\n    private preserve;\\r\\n    href: string;\\r\\n    constructor(router: Router, route: ActivatedRoute, locationStrategy: LocationStrategy);\\r\\n    routerLink: any[] | string;\\r\\n    preserveQueryParams: boolean;\\r\\n    ngOnChanges(changes: {}): any;\\r\\n    ngOnDestroy(): any;\\r\\n    onClick(button: number, ctrlKey: boolean, metaKey: boolean, shiftKey: boolean): boolean;\\r\\n    private updateTargetUrlAndHref;\\r\\n    readonly urlTree: UrlTree;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RouterLinkWithHref>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RouterLinkWithHref, \\\"a[routerLink],area[routerLink]\\\", never, { 'routerLink': \\\"routerLink\\\", 'preserveQueryParams': \\\"preserveQueryParams\\\", 'target': \\\"target\\\", 'queryParams': \\\"queryParams\\\", 'fragment': \\\"fragment\\\", 'queryParamsHandling': \\\"queryParamsHandling\\\", 'preserveFragment': \\\"preserveFragment\\\", 'skipLocationChange': \\\"skipLocationChange\\\", 'replaceUrl': \\\"replaceUrl\\\", 'state': \\\"state\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @usageNotes\\r\\n *\\r\\n * RouterModule can be imported multiple times: once per lazily-loaded bundle.\\r\\n * Since the router deals with a global shared resource--location, we cannot have\\r\\n * more than one router service active.\\r\\n *\\r\\n * That is why there are two ways to create the module: `RouterModule.forRoot` and\\r\\n * `RouterModule.forChild`.\\r\\n *\\r\\n * * `forRoot` creates a module that contains all the directives, the given routes, and the router\\r\\n *   service itself.\\r\\n * * `forChild` creates a module that contains all the directives and the given routes, but does not\\r\\n *   include the router service.\\r\\n *\\r\\n * When registered at the root, the module should be used as follows\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [RouterModule.forRoot(ROUTES)]\\r\\n * })\\r\\n * class MyNgModule {}\\r\\n * ```\\r\\n *\\r\\n * For submodules and lazy loaded submodules the module should be used as follows:\\r\\n *\\r\\n * ```\\r\\n * @NgModule({\\r\\n *   imports: [RouterModule.forChild(ROUTES)]\\r\\n * })\\r\\n * class MyNgModule {}\\r\\n * ```\\r\\n *\\r\\n * @description\\r\\n *\\r\\n * Adds router directives and providers.\\r\\n *\\r\\n * Managing state transitions is one of the hardest parts of building applications. This is\\r\\n * especially true on the web, where you also need to ensure that the state is reflected in the URL.\\r\\n * In addition, we often want to split applications into multiple bundles and load them on demand.\\r\\n * Doing this transparently is not trivial.\\r\\n *\\r\\n * The Angular router service solves these problems. Using the router, you can declaratively specify\\r\\n * application states, manage state transitions while taking care of the URL, and load bundles on\\r\\n * demand.\\r\\n *\\r\\n * @see [Routing and Navigation](guide/router.html) for an\\r\\n * overview of how the router service should be used.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterModule {\\r\\n    constructor(guard: any, router: Router);\\r\\n    /**\\r\\n     * Creates and configures a module with all the router providers and directives.\\r\\n     * Optionally sets up an application listener to perform an initial navigation.\\r\\n     *\\r\\n     * @param routes An array of `Route` objects that define the navigation paths for the application.\\r\\n     * @param config An `ExtraOptions` configuration object that controls how navigation is performed.\\r\\n     * @return The new router module.\\r\\n    */\\r\\n    static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders<RouterModule>;\\r\\n    /**\\r\\n     * Creates a module with all the router directives and a provider registering routes.\\r\\n     */\\r\\n    static forChild(routes: Routes): ModuleWithProviders<RouterModule>;\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<RouterModule, [typeof RouterOutlet, typeof RouterLink, typeof RouterLinkWithHref, typeof RouterLinkActive, typeof ɵEmptyOutletComponent], never, [typeof RouterOutlet, typeof RouterLink, typeof RouterLinkWithHref, typeof RouterLinkActive, typeof ɵEmptyOutletComponent]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<RouterModule>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\\r\\n *\\r\\n * Each outlet can have a unique name, determined by the optional `name` attribute.\\r\\n * The name cannot be set or changed dynamically. If not set, default value is \\\"primary\\\".\\r\\n *\\r\\n * ```\\r\\n * <router-outlet></router-outlet>\\r\\n * <router-outlet name='left'></router-outlet>\\r\\n * <router-outlet name='right'></router-outlet>\\r\\n * ```\\r\\n *\\r\\n * A router outlet emits an activate event when a new component is instantiated,\\r\\n * and a deactivate event when a component is destroyed.\\r\\n *\\r\\n * ```\\r\\n * <router-outlet\\r\\n *   (activate)='onActivate($event)'\\r\\n *   (deactivate)='onDeactivate($event)'></router-outlet>\\r\\n * ```\\r\\n * @ngModule RouterModule\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterOutlet implements OnDestroy, OnInit {\\r\\n    private parentContexts;\\r\\n    private location;\\r\\n    private resolver;\\r\\n    private changeDetector;\\r\\n    private activated;\\r\\n    private _activatedRoute;\\r\\n    private name;\\r\\n    activateEvents: EventEmitter<any>;\\r\\n    deactivateEvents: EventEmitter<any>;\\r\\n    constructor(parentContexts: ChildrenOutletContexts, location: ViewContainerRef, resolver: ComponentFactoryResolver, name: string, changeDetector: ChangeDetectorRef);\\r\\n    ngOnDestroy(): void;\\r\\n    ngOnInit(): void;\\r\\n    readonly isActivated: boolean;\\r\\n    readonly component: Object;\\r\\n    readonly activatedRoute: ActivatedRoute;\\r\\n    readonly activatedRouteData: Data;\\r\\n    /**\\r\\n     * Called when the `RouteReuseStrategy` instructs to detach the subtree\\r\\n     */\\r\\n    detach(): ComponentRef<any>;\\r\\n    /**\\r\\n     * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\\r\\n     */\\r\\n    attach(ref: ComponentRef<any>, activatedRoute: ActivatedRoute): void;\\r\\n    deactivate(): void;\\r\\n    activateWith(activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver | null): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RouterOutlet>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RouterOutlet, \\\"router-outlet\\\", [\\\"outlet\\\"], {}, { 'activateEvents': \\\"activate\\\", 'deactivateEvents': \\\"deactivate\\\" }, never>;\\n}\\r\\n\\r\\n/**\\r\\n * The preloader optimistically loads all router configurations to\\r\\n * make navigations into lazily-loaded sections of the application faster.\\r\\n *\\r\\n * The preloader runs in the background. When the router bootstraps, the preloader\\r\\n * starts listening to all navigation events. After every such event, the preloader\\r\\n * will check if any configurations can be loaded lazily.\\r\\n *\\r\\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterPreloader implements OnDestroy {\\r\\n    private router;\\r\\n    private injector;\\r\\n    private preloadingStrategy;\\r\\n    private loader;\\r\\n    private subscription;\\r\\n    constructor(router: Router, moduleLoader: NgModuleFactoryLoader, compiler: Compiler, injector: Injector, preloadingStrategy: PreloadingStrategy);\\r\\n    setUpPreloading(): void;\\r\\n    preload(): Observable<any>;\\r\\n    ngOnDestroy(): void;\\r\\n    private processRoutes;\\r\\n    private preloadConfig;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RouterPreloader>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<RouterPreloader>;\\n}\\r\\n\\r\\n/**\\r\\n * Represents the state of the router as a tree of activated routes.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * Every node in the route tree is an `ActivatedRoute` instance\\r\\n * that knows about the \\\"consumed\\\" URL segments, the extracted parameters,\\r\\n * and the resolved data.\\r\\n * Use the `ActivatedRoute` properties to traverse the tree from any node.\\r\\n *\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * @Component({templateUrl:'template.html'})\\r\\n * class MyComponent {\\r\\n *   constructor(router: Router) {\\r\\n *     const state: RouterState = router.routerState;\\r\\n *     const root: ActivatedRoute = state.root;\\r\\n *     const child = root.firstChild;\\r\\n *     const id: Observable<string> = child.params.map(p => p.id);\\r\\n *     //...\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @see `ActivatedRoute`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterState extends ɵangular_packages_router_router_m<ActivatedRoute> {\\r\\n    /** The current snapshot of the router state */\\r\\n    snapshot: RouterStateSnapshot;\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents the state of the router at a moment in time.\\r\\n *\\r\\n * This is a tree of activated route snapshots. Every node in this tree knows about\\r\\n * the \\\"consumed\\\" URL segments, the extracted parameters, and the resolved data.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * @Component({templateUrl:'template.html'})\\r\\n * class MyComponent {\\r\\n *   constructor(router: Router) {\\r\\n *     const state: RouterState = router.routerState;\\r\\n *     const snapshot: RouterStateSnapshot = state.snapshot;\\r\\n *     const root: ActivatedRouteSnapshot = snapshot.root;\\r\\n *     const child = root.firstChild;\\r\\n *     const id: Observable<string> = child.params.map(p => p.id);\\r\\n *     //...\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterStateSnapshot extends ɵangular_packages_router_router_m<ActivatedRouteSnapshot> {\\r\\n    /** The url from which this snapshot was created */\\r\\n    url: string;\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The [DI token](guide/glossary/#di-token) for a router configuration.\\r\\n * @see `ROUTES`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const ROUTES: InjectionToken<Route[][]>;\\r\\n\\r\\n/**\\r\\n * Represents a route configuration for the Router service.\\r\\n * An array of `Route` objects, used in `Router.config` and for nested route configurations\\r\\n * in `Route.children`.\\r\\n *\\r\\n * @see `Route`\\r\\n * @see `Router`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type Routes = Route[];\\r\\n\\r\\n/**\\r\\n *An event triggered when routes are recognized.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RoutesRecognized extends RouterEvent {\\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string;\\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    id: number, \\r\\n    /** @docsNotRequired */\\r\\n    url: string, \\r\\n    /** @docsNotRequired */\\r\\n    urlAfterRedirects: string, \\r\\n    /** @docsNotRequired */\\r\\n    state: RouterStateSnapshot);\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n *\\r\\n * A policy for when to run guards and resolvers on a route.\\r\\n *\\r\\n * @see `Route#runGuardsAndResolvers`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type RunGuardsAndResolvers = 'pathParamsChange' | 'pathParamsOrQueryParamsChange' | 'paramsChange' | 'paramsOrQueryParamsChange' | 'always' | ((from: ActivatedRouteSnapshot, to: ActivatedRouteSnapshot) => boolean);\\r\\n\\r\\n/**\\r\\n * An event triggered by scrolling.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Scroll {\\r\\n    /** @docsNotRequired */\\r\\n    readonly routerEvent: NavigationEnd;\\r\\n    /** @docsNotRequired */\\r\\n    readonly position: [number, number] | null;\\r\\n    /** @docsNotRequired */\\r\\n    readonly anchor: string | null;\\r\\n    constructor(\\r\\n    /** @docsNotRequired */\\r\\n    routerEvent: NavigationEnd, \\r\\n    /** @docsNotRequired */\\r\\n    position: [number, number] | null, \\r\\n    /** @docsNotRequired */\\r\\n    anchor: string | null);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Provides a way to migrate AngularJS applications to Angular.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class UrlHandlingStrategy {\\r\\n    /**\\r\\n     * Tells the router if this URL should be processed.\\r\\n     *\\r\\n     * When it returns true, the router will execute the regular navigation.\\r\\n     * When it returns false, the router will set the router state to an empty state.\\r\\n     * As a result, all the active components will be destroyed.\\r\\n     *\\r\\n     */\\r\\n    abstract shouldProcessUrl(url: UrlTree): boolean;\\r\\n    /**\\r\\n     * Extracts the part of the URL that should be handled by the router.\\r\\n     * The rest of the URL will remain untouched.\\r\\n     */\\r\\n    abstract extract(url: UrlTree): UrlTree;\\r\\n    /**\\r\\n     * Merges the URL fragment with the rest of the URL.\\r\\n     */\\r\\n    abstract merge(newUrlPart: UrlTree, rawUrl: UrlTree): UrlTree;\\r\\n}\\r\\n\\r\\n/**\\r\\n * A function for matching a route against URLs. Implement a custom URL matcher\\r\\n * for `Route.matcher` when a combination of `path` and `pathMatch`\\r\\n * is not expressive enough. Cannot be used together with `path` and `pathMatch`.\\r\\n *\\r\\n * @param segments An array of URL segments.\\r\\n * @param group A segment group.\\r\\n * @param route The route to match against.\\r\\n * @returns The match-result.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * The following matcher matches HTML files.\\r\\n *\\r\\n * ```\\r\\n * export function htmlFiles(url: UrlSegment[]) {\\r\\n *   return url.length === 1 && url[0].path.endsWith('.html') ? ({consumed: url}) : null;\\r\\n * }\\r\\n *\\r\\n * export const routes = [{ matcher: htmlFiles, component: AnyComponent }];\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type UrlMatcher = (segments: UrlSegment[], group: UrlSegmentGroup, route: Route) => UrlMatchResult;\\r\\n\\r\\n/**\\r\\n * Represents the result of matching URLs with a custom matching function.\\r\\n *\\r\\n * * `consumed` is an array of the consumed URL segments.\\r\\n * * `posParams` is a map of positional parameters.\\r\\n *\\r\\n * @see `UrlMatcher()`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type UrlMatchResult = {\\r\\n    consumed: UrlSegment[];\\r\\n    posParams?: {\\r\\n        [name: string]: UrlSegment;\\r\\n    };\\r\\n};\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents a single URL segment.\\r\\n *\\r\\n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\\r\\n * parameters associated with the segment.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * @Component({templateUrl:'template.html'})\\r\\n * class MyComponent {\\r\\n *   constructor(router: Router) {\\r\\n *     const tree: UrlTree = router.parseUrl('/team;id=33');\\r\\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\\r\\n *     const s: UrlSegment[] = g.segments;\\r\\n *     s[0].path; // returns 'team'\\r\\n *     s[0].parameters; // returns {id: 33}\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class UrlSegment {\\r\\n    /** The path part of a URL segment */\\r\\n    path: string;\\r\\n    /** The matrix parameters associated with a segment */\\r\\n    parameters: {\\r\\n        [name: string]: string;\\r\\n    };\\r\\n    constructor(\\r\\n    /** The path part of a URL segment */\\r\\n    path: string, \\r\\n    /** The matrix parameters associated with a segment */\\r\\n    parameters: {\\r\\n        [name: string]: string;\\r\\n    });\\r\\n    readonly parameterMap: ParamMap;\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents the parsed URL segment group.\\r\\n *\\r\\n * See `UrlTree` for more information.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class UrlSegmentGroup {\\r\\n    /** The URL segments of this group. See `UrlSegment` for more information */\\r\\n    segments: UrlSegment[];\\r\\n    /** The list of children of this group */\\r\\n    children: {\\r\\n        [key: string]: UrlSegmentGroup;\\r\\n    };\\r\\n    /** The parent node in the url tree */\\r\\n    parent: UrlSegmentGroup | null;\\r\\n    constructor(\\r\\n    /** The URL segments of this group. See `UrlSegment` for more information */\\r\\n    segments: UrlSegment[], \\r\\n    /** The list of children of this group */\\r\\n    children: {\\r\\n        [key: string]: UrlSegmentGroup;\\r\\n    });\\r\\n    /** Whether the segment has child segments */\\r\\n    hasChildren(): boolean;\\r\\n    /** Number of child segments */\\r\\n    readonly numberOfChildren: number;\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Serializes and deserializes a URL string into a URL tree.\\r\\n *\\r\\n * The url serialization strategy is customizable. You can\\r\\n * make all URLs case insensitive by providing a custom UrlSerializer.\\r\\n *\\r\\n * See `DefaultUrlSerializer` for an example of a URL serializer.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class UrlSerializer {\\r\\n    /** Parse a url into a `UrlTree` */\\r\\n    abstract parse(url: string): UrlTree;\\r\\n    /** Converts a `UrlTree` into a url */\\r\\n    abstract serialize(tree: UrlTree): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Represents the parsed URL.\\r\\n *\\r\\n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\\r\\n * serialized tree.\\r\\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * @Component({templateUrl:'template.html'})\\r\\n * class MyComponent {\\r\\n *   constructor(router: Router) {\\r\\n *     const tree: UrlTree =\\r\\n *       router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\\r\\n *     const f = tree.fragment; // return 'fragment'\\r\\n *     const q = tree.queryParams; // returns {debug: 'true'}\\r\\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\\r\\n *     const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\\r\\n *     g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\\r\\n *     g.children['support'].segments; // return 1 segment 'help'\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class UrlTree {\\r\\n    /** The root segment group of the URL tree */\\r\\n    root: UrlSegmentGroup;\\r\\n    /** The query params of the URL */\\r\\n    queryParams: Params;\\r\\n    /** The fragment of the URL */\\r\\n    fragment: string | null;\\r\\n    readonly queryParamMap: ParamMap;\\r\\n    /** @docsNotRequired */\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const VERSION: Version;\\r\\n\\r\\n/**\\r\\n * @docsNotRequired\\r\\n */\\r\\nexport declare const ɵangular_packages_router_router_a: InjectionToken<void>;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_b(): NgProbeToken;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_c(router: Router, viewportScroller: ViewportScroller, config: ExtraOptions): ɵangular_packages_router_router_o;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_d(platformLocationStrategy: PlatformLocation, baseHref: string, options?: ExtraOptions): HashLocationStrategy | PathLocationStrategy;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_e(router: Router): any;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_f(ref: ApplicationRef, urlSerializer: UrlSerializer, contexts: ChildrenOutletContexts, location: Location, injector: Injector, loader: NgModuleFactoryLoader, compiler: Compiler, config: Route[][], opts?: ExtraOptions, urlHandlingStrategy?: UrlHandlingStrategy, routeReuseStrategy?: RouteReuseStrategy): Router;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_g(router: Router): ActivatedRoute;\\r\\n\\r\\n/**\\r\\n * Router initialization requires two steps:\\r\\n *\\r\\n * First, we start the navigation in a `APP_INITIALIZER` to block the bootstrap if\\r\\n * a resolver or a guard executes asynchronously.\\r\\n *\\r\\n * Next, we actually run activation in a `BOOTSTRAP_LISTENER`, using the\\r\\n * `afterPreactivation` hook provided by the router.\\r\\n * The router navigation starts, reaches the point when preactivation is done, and then\\r\\n * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.\\r\\n */\\r\\nexport declare class ɵangular_packages_router_router_h {\\r\\n    private injector;\\r\\n    private initNavigation;\\r\\n    private resultOfPreactivationDone;\\r\\n    constructor(injector: Injector);\\r\\n    appInitializer(): Promise<any>;\\r\\n    bootstrapListener(bootstrappedComponentRef: ComponentRef<any>): void;\\r\\n    private isLegacyEnabled;\\r\\n    private isLegacyDisabled;\\r\\n}\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_i(r: ɵangular_packages_router_router_h): () => Promise<any>;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_j(r: ɵangular_packages_router_router_h): (bootstrappedComponentRef: ComponentRef<any>) => void;\\r\\n\\r\\nexport declare function ɵangular_packages_router_router_k(): (typeof ɵangular_packages_router_router_h | {\\r\\n    provide: InjectionToken<(() => void)[]>;\\r\\n    multi: boolean;\\r\\n    useFactory: typeof ɵangular_packages_router_router_i;\\r\\n    deps: (typeof ɵangular_packages_router_router_h)[];\\r\\n    useExisting?: undefined;\\r\\n} | {\\r\\n    provide: InjectionToken<(compRef: ComponentRef<any>) => void>;\\r\\n    useFactory: typeof ɵangular_packages_router_router_j;\\r\\n    deps: (typeof ɵangular_packages_router_router_h)[];\\r\\n    multi?: undefined;\\r\\n    useExisting?: undefined;\\r\\n} | {\\r\\n    provide: InjectionToken<((compRef: ComponentRef<any>) => void)[]>;\\r\\n    multi: boolean;\\r\\n    useExisting: InjectionToken<(compRef: ComponentRef<any>) => void>;\\r\\n    useFactory?: undefined;\\r\\n    deps?: undefined;\\r\\n})[];\\r\\n\\r\\n\\r\\nexport declare class ɵangular_packages_router_router_m<T> {\\r\\n    constructor(root: ɵangular_packages_router_router_n<T>);\\r\\n    readonly root: T;\\r\\n}\\r\\n\\r\\nexport declare class ɵangular_packages_router_router_n<T> {\\r\\n    value: T;\\r\\n    children: ɵangular_packages_router_router_n<T>[];\\r\\n    constructor(value: T, children: ɵangular_packages_router_router_n<T>[]);\\r\\n    toString(): string;\\r\\n}\\r\\n\\r\\nexport declare class ɵangular_packages_router_router_o implements OnDestroy {\\r\\n    private router;\\r\\n    /** @docsNotRequired */ readonly viewportScroller: ViewportScroller;\\r\\n    private options;\\r\\n    private routerEventsSubscription;\\r\\n    private scrollEventsSubscription;\\r\\n    private lastId;\\r\\n    private lastSource;\\r\\n    private restoredId;\\r\\n    private store;\\r\\n    constructor(router: Router, \\r\\n    /** @docsNotRequired */ viewportScroller: ViewportScroller, options?: {\\r\\n        scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\\r\\n        anchorScrolling?: 'disabled' | 'enabled';\\r\\n    });\\r\\n    init(): void;\\r\\n    private createScrollEvents;\\r\\n    private consumeScrollEvents;\\r\\n    private scheduleScrollEvent;\\r\\n    ngOnDestroy(): void;\\r\\n}\\r\\n\\r\\n\\r\\n/**\\r\\n * This component is used internally within the router to be a placeholder when an empty\\r\\n * router-outlet is needed. For example, with a config such as:\\r\\n *\\r\\n * `{path: 'parent', outlet: 'nav', children: [...]}`\\r\\n *\\r\\n * In order to render, there needs to be a component on this config, which will default\\r\\n * to this `EmptyOutletComponent`.\\r\\n */\\r\\ndeclare class ɵEmptyOutletComponent {\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ɵEmptyOutletComponent>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<ɵEmptyOutletComponent, \\\"ng-component\\\", never, {}, {}, never>;\\n}\\r\\nexport { ɵEmptyOutletComponent }\\r\\nexport { ɵEmptyOutletComponent as ɵangular_packages_router_router_l }\\r\\n\\r\\n/**\\r\\n * Flattens single-level nested arrays.\\r\\n */\\r\\nexport declare function ɵflatten<T>(arr: T[][]): T[];\\r\\n\\r\\nexport declare const ɵROUTER_PROVIDERS: Provider[];\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=router.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/router/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nexport * from './testing/testing';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/router/testing/testing.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { ChildrenOutletContexts } from '@angular/router';\\r\\nimport { Compiler } from '@angular/core';\\r\\nimport { ExtraOptions } from '@angular/router';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { Location } from '@angular/common';\\r\\nimport { ModuleWithProviders } from '@angular/core';\\r\\nimport { NgModuleFactory } from '@angular/core';\\r\\nimport { NgModuleFactoryLoader } from '@angular/core';\\r\\nimport { Route } from '@angular/router';\\r\\nimport { Router } from '@angular/router';\\r\\nimport { Routes } from '@angular/router';\\r\\nimport { UrlHandlingStrategy } from '@angular/router';\\r\\nimport { UrlSerializer } from '@angular/router';\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Sets up the router to be used for testing.\\r\\n *\\r\\n * The modules sets up the router to be used for testing.\\r\\n * It provides spy implementations of `Location`, `LocationStrategy`, and {@link\\r\\n * NgModuleFactoryLoader}.\\r\\n *\\r\\n * @usageNotes\\r\\n * ### Example\\r\\n *\\r\\n * ```\\r\\n * beforeEach(() => {\\r\\n *   TestBed.configureTestModule({\\r\\n *     imports: [\\r\\n *       RouterTestingModule.withRoutes(\\r\\n *         [{path: '', component: BlankCmp}, {path: 'simple', component: SimpleCmp}]\\r\\n *       )\\r\\n *     ]\\r\\n *   });\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RouterTestingModule {\\r\\n    static withRoutes(routes: Routes, config?: ExtraOptions): ModuleWithProviders<RouterTestingModule>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Router setup factory function used for testing.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function setupTestingRouter(urlSerializer: UrlSerializer, contexts: ChildrenOutletContexts, location: Location, loader: NgModuleFactoryLoader, compiler: Compiler, injector: Injector, routes: Route[][], opts?: ExtraOptions, urlHandlingStrategy?: UrlHandlingStrategy): Router;\\r\\n\\r\\n/**\\r\\n * Router setup factory function used for testing.\\r\\n *\\r\\n * @deprecated As of v5.2. The 2nd-to-last argument should be `ExtraOptions`, not\\r\\n * `UrlHandlingStrategy`\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function setupTestingRouter(urlSerializer: UrlSerializer, contexts: ChildrenOutletContexts, location: Location, loader: NgModuleFactoryLoader, compiler: Compiler, injector: Injector, routes: Route[][], urlHandlingStrategy?: UrlHandlingStrategy): Router;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Allows to simulate the loading of ng modules in tests.\\r\\n *\\r\\n * ```\\r\\n * const loader = TestBed.inject(NgModuleFactoryLoader);\\r\\n *\\r\\n * @Component({template: 'lazy-loaded'})\\r\\n * class LazyLoadedComponent {}\\r\\n * @NgModule({\\r\\n *   declarations: [LazyLoadedComponent],\\r\\n *   imports: [RouterModule.forChild([{path: 'loaded', component: LazyLoadedComponent}])]\\r\\n * })\\r\\n *\\r\\n * class LoadedModule {}\\r\\n *\\r\\n * // sets up stubbedModules\\r\\n * loader.stubbedModules = {lazyModule: LoadedModule};\\r\\n *\\r\\n * router.resetConfig([\\r\\n *   {path: 'lazy', loadChildren: 'lazyModule'},\\r\\n * ]);\\r\\n *\\r\\n * router.navigateByUrl('/lazy/loaded');\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class SpyNgModuleFactoryLoader implements NgModuleFactoryLoader {\\r\\n    private compiler;\\r\\n    /**\\r\\n     * @docsNotRequired\\r\\n     */\\r\\n    private _stubbedModules;\\r\\n    /**\\r\\n     * @docsNotRequired\\r\\n     */\\r\\n    /**\\r\\n    * @docsNotRequired\\r\\n    */\\r\\n    stubbedModules: {\\r\\n        [path: string]: any;\\r\\n    };\\r\\n    constructor(compiler: Compiler);\\r\\n    load(path: string): Promise<NgModuleFactory<any>>;\\r\\n}\\r\\n\\r\\nexport { }\\r\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/router/upgrade.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nexport * from './upgrade/upgrade';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/router/upgrade/upgrade.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { ComponentRef } from '@angular/core';\\r\\nimport { InjectionToken } from '@angular/core';\\r\\nimport { UpgradeModule } from '@angular/upgrade/static';\\r\\n\\r\\n/**\\r\\n * Creates an initializer that sets up `ngRoute` integration\\r\\n * along with setting up the Angular router.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * <code-example language=\\\"typescript\\\">\\r\\n * @NgModule({\\r\\n *  imports: [\\r\\n *   RouterModule.forRoot(SOME_ROUTES),\\r\\n *   UpgradeModule\\r\\n * ],\\r\\n * providers: [\\r\\n *   RouterUpgradeInitializer\\r\\n * ]\\r\\n * })\\r\\n * export class AppModule {\\r\\n *   ngDoBootstrap() {}\\r\\n * }\\r\\n * </code-example>\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const RouterUpgradeInitializer: {\\r\\n    provide: InjectionToken<((compRef: ComponentRef<any>) => void)[]>;\\r\\n    multi: boolean;\\r\\n    useFactory: (ngUpgrade: UpgradeModule) => () => void;\\r\\n    deps: (typeof UpgradeModule)[];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Sets up a location change listener to trigger `history.pushState`.\\r\\n * Works around the problem that `onPopState` does not trigger `history.pushState`.\\r\\n * Must be called *after* calling `UpgradeModule.bootstrap`.\\r\\n *\\r\\n * @param ngUpgrade The upgrade NgModule.\\r\\n * @param urlType The location strategy.\\r\\n * @see `HashLocationStrategy`\\r\\n * @see `PathLocationStrategy`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare function setUpLocationSync(ngUpgrade: UpgradeModule, urlType?: 'path' | 'hash'): void;\\r\\n\\r\\nexport { }\\r\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/a11y-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './live-announcer/live-announcer';\\nimport * as ɵngcc2 from './focus-trap/focus-trap';\\nimport * as ɵngcc3 from './focus-monitor/focus-monitor';\\nimport * as ɵngcc4 from '@angular/common';\\nimport * as ɵngcc5 from '@angular/cdk/platform';\\nimport * as ɵngcc6 from '@angular/cdk/observers';\\nexport declare class A11yModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<A11yModule, [typeof ɵngcc1.CdkAriaLive, typeof ɵngcc2.CdkTrapFocus, typeof ɵngcc3.CdkMonitorFocus], [typeof ɵngcc4.CommonModule, typeof ɵngcc5.PlatformModule, typeof ɵngcc6.ObserversModule], [typeof ɵngcc1.CdkAriaLive, typeof ɵngcc2.CdkTrapFocus, typeof ɵngcc3.CdkMonitorFocus]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<A11yModule>;\\n}\\n\\n//# sourceMappingURL=a11y-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/aria-describer/aria-describer.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken, OnDestroy, Optional } from '@angular/core';\\n/**\\n * Interface used to register message elements and keep a count of how many registrations have\\n * the same message and the reference to the message element used for the `aria-describedby`.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface RegisteredMessage {\\n    /** The element containing the message. */\\n    messageElement: Element;\\n    /** The number of elements that reference this message element via `aria-describedby`. */\\n    referenceCount: number;\\n}\\n/** ID used for the body container where all messages are appended. */\\nexport declare const MESSAGES_CONTAINER_ID = \\\"cdk-describedby-message-container\\\";\\n/** ID prefix used for each created message element. */\\nexport declare const CDK_DESCRIBEDBY_ID_PREFIX = \\\"cdk-describedby-message\\\";\\n/** Attribute given to each host element that is described by a message element. */\\nexport declare const CDK_DESCRIBEDBY_HOST_ATTRIBUTE = \\\"cdk-describedby-host\\\";\\n/**\\n * Utility that creates visually hidden elements with a message content. Useful for elements that\\n * want to use aria-describedby to further describe themselves without adding additional visual\\n * content.\\n */\\nexport declare class AriaDescriber implements OnDestroy {\\n    private _document;\\n    constructor(_document: any);\\n    /**\\n     * Adds to the host element an aria-describedby reference to a hidden element that contains\\n     * the message. If the same message has already been registered, then it will reuse the created\\n     * message element.\\n     */\\n    describe(hostElement: Element, message: string | HTMLElement): void;\\n    /** Removes the host element's aria-describedby reference to the message element. */\\n    removeDescription(hostElement: Element, message: string | HTMLElement): void;\\n    /** Unregisters all created message elements and removes the message container. */\\n    ngOnDestroy(): void;\\n    /**\\n     * Creates a new element in the visually hidden message container element with the message\\n     * as its content and adds it to the message registry.\\n     */\\n    private _createMessageElement;\\n    /** Assigns a unique ID to an element, if it doesn't have one already. */\\n    private _setMessageId;\\n    /** Deletes the message element from the global messages container. */\\n    private _deleteMessageElement;\\n    /** Creates the global container for all aria-describedby messages. */\\n    private _createMessagesContainer;\\n    /** Deletes the global messages container. */\\n    private _deleteMessagesContainer;\\n    /** Removes all cdk-describedby messages that are hosted through the element. */\\n    private _removeCdkDescribedByReferenceIds;\\n    /**\\n     * Adds a message reference to the element using aria-describedby and increments the registered\\n     * message's reference count.\\n     */\\n    private _addMessageReference;\\n    /**\\n     * Removes a message reference from the element using aria-describedby\\n     * and decrements the registered message's reference count.\\n     */\\n    private _removeMessageReference;\\n    /** Returns true if the element has been described by the provided message ID. */\\n    private _isElementDescribedByMessage;\\n    /** Determines whether a message can be described on a particular element. */\\n    private _canBeDescribed;\\n    /** Checks whether a node is an Element node. */\\n    private _isElementNode;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<AriaDescriber>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<AriaDescriber>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function ARIA_DESCRIBER_PROVIDER_FACTORY(parentDispatcher: AriaDescriber, _document: any): AriaDescriber;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const ARIA_DESCRIBER_PROVIDER: {\\n    provide: typeof AriaDescriber;\\n    deps: (Optional[] | InjectionToken<any>)[];\\n    useFactory: typeof ARIA_DESCRIBER_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=aria-describer.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/aria-describer/aria-reference.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Adds the given ID to the specified ARIA attribute on an element.\\n * Used for attributes such as aria-labelledby, aria-owns, etc.\\n */\\nexport declare function addAriaReferencedId(el: Element, attr: string, id: string): void;\\n/**\\n * Removes the given ID from the specified ARIA attribute on an element.\\n * Used for attributes such as aria-labelledby, aria-owns, etc.\\n */\\nexport declare function removeAriaReferencedId(el: Element, attr: string, id: string): void;\\n/**\\n * Gets the list of IDs referenced by the given ARIA attribute on an element.\\n * Used for attributes such as aria-labelledby, aria-owns, etc.\\n */\\nexport declare function getAriaReferenceIds(el: Element, attr: string): string[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/fake-mousedown.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Screenreaders will often fire fake mousedown events when a focusable element\\n * is activated using the keyboard. We can typically distinguish between these faked\\n * mousedown events and real mousedown events using the \\\"buttons\\\" property. While\\n * real mousedowns will indicate the mouse button that was pressed (e.g. \\\"1\\\" for\\n * the left mouse button), faked mousedowns will usually set the property value to 0.\\n */\\nexport declare function isFakeMousedownFromScreenReader(event: MouseEvent): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/focus-monitor/focus-monitor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ElementRef, EventEmitter, NgZone, OnDestroy, Optional } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const TOUCH_BUFFER_MS = 650;\\nexport declare type FocusOrigin = 'touch' | 'mouse' | 'keyboard' | 'program' | null;\\n/**\\n * Corresponds to the options that can be passed to the native `focus` event.\\n * via https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus\\n */\\nexport interface FocusOptions {\\n    /** Whether the browser should scroll to the element when it is focused. */\\n    preventScroll?: boolean;\\n}\\n/** Monitors mouse and keyboard events to determine the cause of focus events. */\\nexport declare class FocusMonitor implements OnDestroy {\\n    private _ngZone;\\n    private _platform;\\n    /** The focus origin that the next focus event is a result of. */\\n    private _origin;\\n    /** The FocusOrigin of the last focus event tracked by the FocusMonitor. */\\n    private _lastFocusOrigin;\\n    /** Whether the window has just been focused. */\\n    private _windowFocused;\\n    /** The target of the last touch event. */\\n    private _lastTouchTarget;\\n    /** The timeout id of the touch timeout, used to cancel timeout later. */\\n    private _touchTimeoutId;\\n    /** The timeout id of the window focus timeout. */\\n    private _windowFocusTimeoutId;\\n    /** The timeout id of the origin clearing timeout. */\\n    private _originTimeoutId;\\n    /** Map of elements being monitored to their info. */\\n    private _elementInfo;\\n    /** The number of elements currently being monitored. */\\n    private _monitoredElementCount;\\n    /**\\n     * Event listener for `keydown` events on the document.\\n     * Needs to be an arrow function in order to preserve the context when it gets bound.\\n     */\\n    private _documentKeydownListener;\\n    /**\\n     * Event listener for `mousedown` events on the document.\\n     * Needs to be an arrow function in order to preserve the context when it gets bound.\\n     */\\n    private _documentMousedownListener;\\n    /**\\n     * Event listener for `touchstart` events on the document.\\n     * Needs to be an arrow function in order to preserve the context when it gets bound.\\n     */\\n    private _documentTouchstartListener;\\n    /**\\n     * Event listener for `focus` events on the window.\\n     * Needs to be an arrow function in order to preserve the context when it gets bound.\\n     */\\n    private _windowFocusListener;\\n    constructor(_ngZone: NgZone, _platform: Platform);\\n    /**\\n     * Monitors focus on an element and applies appropriate CSS classes.\\n     * @param element The element to monitor\\n     * @param checkChildren Whether to count the element as focused when its children are focused.\\n     * @returns An observable that emits when the focus state of the element changes.\\n     *     When the element is blurred, null will be emitted.\\n     */\\n    monitor(element: HTMLElement, checkChildren?: boolean): Observable<FocusOrigin>;\\n    /**\\n     * Monitors focus on an element and applies appropriate CSS classes.\\n     * @param element The element to monitor\\n     * @param checkChildren Whether to count the element as focused when its children are focused.\\n     * @returns An observable that emits when the focus state of the element changes.\\n     *     When the element is blurred, null will be emitted.\\n     */\\n    monitor(element: ElementRef<HTMLElement>, checkChildren?: boolean): Observable<FocusOrigin>;\\n    /**\\n     * Stops monitoring an element and removes all focus classes.\\n     * @param element The element to stop monitoring.\\n     */\\n    stopMonitoring(element: HTMLElement): void;\\n    /**\\n     * Stops monitoring an element and removes all focus classes.\\n     * @param element The element to stop monitoring.\\n     */\\n    stopMonitoring(element: ElementRef<HTMLElement>): void;\\n    /**\\n     * Focuses the element via the specified focus origin.\\n     * @param element Element to focus.\\n     * @param origin Focus origin.\\n     * @param options Options that can be used to configure the focus behavior.\\n     */\\n    focusVia(element: HTMLElement, origin: FocusOrigin, options?: FocusOptions): void;\\n    /**\\n     * Focuses the element via the specified focus origin.\\n     * @param element Element to focus.\\n     * @param origin Focus origin.\\n     * @param options Options that can be used to configure the focus behavior.\\n     */\\n    focusVia(element: ElementRef<HTMLElement>, origin: FocusOrigin, options?: FocusOptions): void;\\n    ngOnDestroy(): void;\\n    private _toggleClass;\\n    /**\\n     * Sets the focus classes on the element based on the given focus origin.\\n     * @param element The element to update the classes on.\\n     * @param origin The focus origin.\\n     */\\n    private _setClasses;\\n    /**\\n     * Sets the origin and schedules an async function to clear it at the end of the event queue.\\n     * @param origin The origin to set.\\n     */\\n    private _setOriginForCurrentEventQueue;\\n    /**\\n     * Checks whether the given focus event was caused by a touchstart event.\\n     * @param event The focus event to check.\\n     * @returns Whether the event was caused by a touch.\\n     */\\n    private _wasCausedByTouch;\\n    /**\\n     * Handles focus events on a registered element.\\n     * @param event The focus event.\\n     * @param element The monitored element.\\n     */\\n    private _onFocus;\\n    /**\\n     * Handles blur events on a registered element.\\n     * @param event The blur event.\\n     * @param element The monitored element.\\n     */\\n    _onBlur(event: FocusEvent, element: HTMLElement): void;\\n    private _emitOrigin;\\n    private _incrementMonitoredElementCount;\\n    private _decrementMonitoredElementCount;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FocusMonitor>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<FocusMonitor>;\\n}\\n/**\\n * Directive that determines how a particular element was focused (via keyboard, mouse, touch, or\\n * programmatically) and adds corresponding classes to the element.\\n *\\n * There are two variants of this directive:\\n * 1) cdkMonitorElementFocus: does not consider an element to be focused if one of its children is\\n *    focused.\\n * 2) cdkMonitorSubtreeFocus: considers an element focused if it or any of its children are focused.\\n */\\nexport declare class CdkMonitorFocus implements OnDestroy {\\n    private _elementRef;\\n    private _focusMonitor;\\n    private _monitorSubscription;\\n    cdkFocusChange: EventEmitter<FocusOrigin>;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _focusMonitor: FocusMonitor);\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkMonitorFocus>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkMonitorFocus, \\\"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\\\", never, {}, { 'cdkFocusChange': \\\"cdkFocusChange\\\" }, never>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function FOCUS_MONITOR_PROVIDER_FACTORY(parentDispatcher: FocusMonitor, ngZone: NgZone, platform: Platform): FocusMonitor;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const FOCUS_MONITOR_PROVIDER: {\\n    provide: typeof FocusMonitor;\\n    deps: (Optional[] | typeof NgZone | typeof Platform)[];\\n    useFactory: typeof FOCUS_MONITOR_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=focus-monitor.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/focus-trap/focus-trap.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ElementRef, NgZone, OnDestroy, DoCheck } from '@angular/core';\\nimport { InteractivityChecker } from '../interactivity-checker/interactivity-checker';\\n/**\\n * Class that allows for trapping focus within a DOM element.\\n *\\n * This class currently uses a relatively simple approach to focus trapping.\\n * It assumes that the tab order is the same as DOM order, which is not necessarily true.\\n * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause to two to misalign.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class FocusTrap {\\n    private _element;\\n    private _checker;\\n    private _ngZone;\\n    private _document;\\n    private _startAnchor;\\n    private _endAnchor;\\n    private _hasAttached;\\n    protected startAnchorListener: () => boolean;\\n    protected endAnchorListener: () => boolean;\\n    /** Whether the focus trap is active. */\\n    enabled: boolean;\\n    private _enabled;\\n    constructor(_element: HTMLElement, _checker: InteractivityChecker, _ngZone: NgZone, _document: Document, deferAnchors?: boolean);\\n    /** Destroys the focus trap by cleaning up the anchors. */\\n    destroy(): void;\\n    /**\\n     * Inserts the anchors into the DOM. This is usually done automatically\\n     * in the constructor, but can be deferred for cases like directives with `*ngIf`.\\n     * @returns Whether the focus trap managed to attach successfuly. This may not be the case\\n     * if the target element isn't currently in the DOM.\\n     */\\n    attachAnchors(): boolean;\\n    /**\\n     * Waits for the zone to stabilize, then either focuses the first element that the\\n     * user specified, or the first tabbable element.\\n     * @returns Returns a promise that resolves with a boolean, depending\\n     * on whether focus was moved successfuly.\\n     */\\n    focusInitialElementWhenReady(): Promise<boolean>;\\n    /**\\n     * Waits for the zone to stabilize, then focuses\\n     * the first tabbable element within the focus trap region.\\n     * @returns Returns a promise that resolves with a boolean, depending\\n     * on whether focus was moved successfuly.\\n     */\\n    focusFirstTabbableElementWhenReady(): Promise<boolean>;\\n    /**\\n     * Waits for the zone to stabilize, then focuses\\n     * the last tabbable element within the focus trap region.\\n     * @returns Returns a promise that resolves with a boolean, depending\\n     * on whether focus was moved successfuly.\\n     */\\n    focusLastTabbableElementWhenReady(): Promise<boolean>;\\n    /**\\n     * Get the specified boundary element of the trapped region.\\n     * @param bound The boundary to get (start or end of trapped region).\\n     * @returns The boundary element.\\n     */\\n    private _getRegionBoundary;\\n    /**\\n     * Focuses the element that should be focused when the focus trap is initialized.\\n     * @returns Whether focus was moved successfuly.\\n     */\\n    focusInitialElement(): boolean;\\n    /**\\n     * Focuses the first tabbable element within the focus trap region.\\n     * @returns Whether focus was moved successfuly.\\n     */\\n    focusFirstTabbableElement(): boolean;\\n    /**\\n     * Focuses the last tabbable element within the focus trap region.\\n     * @returns Whether focus was moved successfuly.\\n     */\\n    focusLastTabbableElement(): boolean;\\n    /**\\n     * Checks whether the focus trap has successfuly been attached.\\n     */\\n    hasAttached(): boolean;\\n    /** Get the first tabbable element from a DOM subtree (inclusive). */\\n    private _getFirstTabbableElement;\\n    /** Get the last tabbable element from a DOM subtree (inclusive). */\\n    private _getLastTabbableElement;\\n    /** Creates an anchor element. */\\n    private _createAnchor;\\n    /**\\n     * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.\\n     * @param isEnabled Whether the focus trap is enabled.\\n     * @param anchor Anchor on which to toggle the tabindex.\\n     */\\n    private _toggleAnchorTabIndex;\\n    /** Executes a function when the zone is stable. */\\n    private _executeOnStable;\\n}\\n/** Factory that allows easy instantiation of focus traps. */\\nexport declare class FocusTrapFactory {\\n    private _checker;\\n    private _ngZone;\\n    private _document;\\n    constructor(_checker: InteractivityChecker, _ngZone: NgZone, _document: any);\\n    /**\\n     * Creates a focus-trapped region around the given element.\\n     * @param element The element around which focus will be trapped.\\n     * @param deferCaptureElements Defers the creation of focus-capturing elements to be done\\n     *     manually by the user.\\n     * @returns The created focus trap instance.\\n     */\\n    create(element: HTMLElement, deferCaptureElements?: boolean): FocusTrap;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FocusTrapFactory>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<FocusTrapFactory>;\\n}\\n/** Directive for trapping focus within a region. */\\nexport declare class CdkTrapFocus implements OnDestroy, AfterContentInit, DoCheck {\\n    private _elementRef;\\n    private _focusTrapFactory;\\n    private _document;\\n    /** Underlying FocusTrap instance. */\\n    focusTrap: FocusTrap;\\n    /** Previously focused element to restore focus to upon destroy when using autoCapture. */\\n    private _previouslyFocusedElement;\\n    /** Whether the focus trap is active. */\\n    enabled: boolean;\\n    /**\\n     * Whether the directive should automatially move focus into the trapped region upon\\n     * initialization and return focus to the previous activeElement upon destruction.\\n     */\\n    autoCapture: boolean;\\n    private _autoCapture;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _focusTrapFactory: FocusTrapFactory, _document: any);\\n    ngOnDestroy(): void;\\n    ngAfterContentInit(): void;\\n    ngDoCheck(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkTrapFocus>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkTrapFocus, \\\"[cdkTrapFocus]\\\", [\\\"cdkTrapFocus\\\"], { 'enabled': \\\"cdkTrapFocus\\\", 'autoCapture': \\\"cdkTrapFocusAutoCapture\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=focus-trap.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/index.d.ts\",\n      \"node_modules/@angular/cdk/a11y/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/interactivity-checker/interactivity-checker.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\n/**\\n * Utility for checking the interactivity of an element, such as whether is is focusable or\\n * tabbable.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class InteractivityChecker {\\n    private _platform;\\n    constructor(_platform: Platform);\\n    /**\\n     * Gets whether an element is disabled.\\n     *\\n     * @param element Element to be checked.\\n     * @returns Whether the element is disabled.\\n     */\\n    isDisabled(element: HTMLElement): boolean;\\n    /**\\n     * Gets whether an element is visible for the purposes of interactivity.\\n     *\\n     * This will capture states like `display: none` and `visibility: hidden`, but not things like\\n     * being clipped by an `overflow: hidden` parent or being outside the viewport.\\n     *\\n     * @returns Whether the element is visible.\\n     */\\n    isVisible(element: HTMLElement): boolean;\\n    /**\\n     * Gets whether an element can be reached via Tab key.\\n     * Assumes that the element has already been checked with isFocusable.\\n     *\\n     * @param element Element to be checked.\\n     * @returns Whether the element is tabbable.\\n     */\\n    isTabbable(element: HTMLElement): boolean;\\n    /**\\n     * Gets whether an element can be focused by the user.\\n     *\\n     * @param element Element to be checked.\\n     * @returns Whether the element is focusable.\\n     */\\n    isFocusable(element: HTMLElement): boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<InteractivityChecker>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<InteractivityChecker>;\\n}\\n\\n//# sourceMappingURL=interactivity-checker.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/key-manager/activedescendant-key-manager.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ListKeyManager, ListKeyManagerOption } from './list-key-manager';\\n/**\\n * This is the interface for highlightable items (used by the ActiveDescendantKeyManager).\\n * Each item must know how to style itself as active or inactive and whether or not it is\\n * currently disabled.\\n */\\nexport interface Highlightable extends ListKeyManagerOption {\\n    /** Applies the styles for an active item to this item. */\\n    setActiveStyles(): void;\\n    /** Applies the styles for an inactive item to this item. */\\n    setInactiveStyles(): void;\\n}\\nexport declare class ActiveDescendantKeyManager<T> extends ListKeyManager<Highlightable & T> {\\n    /**\\n     * Sets the active item to the item at the specified index and adds the\\n     * active styles to the newly active item. Also removes active styles\\n     * from the previously active item.\\n     * @param index Index of the item to be set as active.\\n     */\\n    setActiveItem(index: number): void;\\n    /**\\n     * Sets the active item to the item to the specified one and adds the\\n     * active styles to the it. Also removes active styles from the\\n     * previously active item.\\n     * @param item Item to be set as active.\\n     */\\n    setActiveItem(item: T): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/key-manager/focus-key-manager.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ListKeyManager, ListKeyManagerOption } from './list-key-manager';\\nimport { FocusOrigin } from '../focus-monitor/focus-monitor';\\n/**\\n * This is the interface for focusable items (used by the FocusKeyManager).\\n * Each item must know how to focus itself, whether or not it is currently disabled\\n * and be able to supply its label.\\n */\\nexport interface FocusableOption extends ListKeyManagerOption {\\n    /** Focuses the `FocusableOption`. */\\n    focus(origin?: FocusOrigin): void;\\n}\\nexport declare class FocusKeyManager<T> extends ListKeyManager<FocusableOption & T> {\\n    private _origin;\\n    /**\\n     * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls.\\n     * @param origin Focus origin to be used when focusing items.\\n     */\\n    setFocusOrigin(origin: FocusOrigin): this;\\n    /**\\n     * Sets the active item to the item at the specified\\n     * index and focuses the newly active item.\\n     * @param index Index of the item to be set as active.\\n     */\\n    setActiveItem(index: number): void;\\n    /**\\n     * Sets the active item to the item that is specified and focuses it.\\n     * @param item Item to be set as active.\\n     */\\n    setActiveItem(item: T): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/key-manager/list-key-manager.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { QueryList } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/** This interface is for items that can be passed to a ListKeyManager. */\\nexport interface ListKeyManagerOption {\\n    /** Whether the option is disabled. */\\n    disabled?: boolean;\\n    /** Gets the label for this option. */\\n    getLabel?(): string;\\n}\\n/** Modifier keys handled by the ListKeyManager. */\\nexport declare type ListKeyManagerModifierKey = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey';\\n/**\\n * This class manages keyboard events for selectable lists. If you pass it a query list\\n * of items, it will set the active item correctly when arrow events occur.\\n */\\nexport declare class ListKeyManager<T extends ListKeyManagerOption> {\\n    private _items;\\n    private _activeItemIndex;\\n    private _activeItem;\\n    private _wrap;\\n    private _letterKeyStream;\\n    private _typeaheadSubscription;\\n    private _vertical;\\n    private _horizontal;\\n    private _allowedModifierKeys;\\n    /**\\n     * Predicate function that can be used to check whether an item should be skipped\\n     * by the key manager. By default, disabled items are skipped.\\n     */\\n    private _skipPredicateFn;\\n    private _pressedLetters;\\n    constructor(_items: QueryList<T> | T[]);\\n    /**\\n     * Stream that emits any time the TAB key is pressed, so components can react\\n     * when focus is shifted off of the list.\\n     */\\n    tabOut: Subject<void>;\\n    /** Stream that emits whenever the active item of the list manager changes. */\\n    change: Subject<number>;\\n    /**\\n     * Sets the predicate function that determines which items should be skipped by the\\n     * list key manager.\\n     * @param predicate Function that determines whether the given item should be skipped.\\n     */\\n    skipPredicate(predicate: (item: T) => boolean): this;\\n    /**\\n     * Configures wrapping mode, which determines whether the active item will wrap to\\n     * the other end of list when there are no more items in the given direction.\\n     * @param shouldWrap Whether the list should wrap when reaching the end.\\n     */\\n    withWrap(shouldWrap?: boolean): this;\\n    /**\\n     * Configures whether the key manager should be able to move the selection vertically.\\n     * @param enabled Whether vertical selection should be enabled.\\n     */\\n    withVerticalOrientation(enabled?: boolean): this;\\n    /**\\n     * Configures the key manager to move the selection horizontally.\\n     * Passing in `null` will disable horizontal movement.\\n     * @param direction Direction in which the selection can be moved.\\n     */\\n    withHorizontalOrientation(direction: 'ltr' | 'rtl' | null): this;\\n    /**\\n     * Modifier keys which are allowed to be held down and whose default actions will be prevented\\n     * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.\\n     */\\n    withAllowedModifierKeys(keys: ListKeyManagerModifierKey[]): this;\\n    /**\\n     * Turns on typeahead mode which allows users to set the active item by typing.\\n     * @param debounceInterval Time to wait after the last keystroke before setting the active item.\\n     */\\n    withTypeAhead(debounceInterval?: number): this;\\n    /**\\n     * Sets the active item to the item at the index specified.\\n     * @param index The index of the item to be set as active.\\n     */\\n    setActiveItem(index: number): void;\\n    /**\\n     * Sets the active item to the specified item.\\n     * @param item The item to be set as active.\\n     */\\n    setActiveItem(item: T): void;\\n    /**\\n     * Sets the active item depending on the key event passed in.\\n     * @param event Keyboard event to be used for determining which element should be active.\\n     */\\n    onKeydown(event: KeyboardEvent): void;\\n    /** Index of the currently active item. */\\n    readonly activeItemIndex: number | null;\\n    /** The active item. */\\n    readonly activeItem: T | null;\\n    /** Sets the active item to the first enabled item in the list. */\\n    setFirstItemActive(): void;\\n    /** Sets the active item to the last enabled item in the list. */\\n    setLastItemActive(): void;\\n    /** Sets the active item to the next enabled item in the list. */\\n    setNextItemActive(): void;\\n    /** Sets the active item to a previous enabled item in the list. */\\n    setPreviousItemActive(): void;\\n    /**\\n     * Allows setting the active without any other effects.\\n     * @param index Index of the item to be set as active.\\n     */\\n    updateActiveItem(index: number): void;\\n    /**\\n     * Allows setting the active item without any other effects.\\n     * @param item Item to be set as active.\\n     */\\n    updateActiveItem(item: T): void;\\n    /**\\n     * Allows setting of the activeItemIndex without any other effects.\\n     * @param index The new activeItemIndex.\\n     * @deprecated Use `updateActiveItem` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    updateActiveItemIndex(index: number): void;\\n    /**\\n     * This method sets the active item, given a list of items and the delta between the\\n     * currently active item and the new active item. It will calculate differently\\n     * depending on whether wrap mode is turned on.\\n     */\\n    private _setActiveItemByDelta;\\n    /**\\n     * Sets the active item properly given \\\"wrap\\\" mode. In other words, it will continue to move\\n     * down the list until it finds an item that is not disabled, and it will wrap if it\\n     * encounters either end of the list.\\n     */\\n    private _setActiveInWrapMode;\\n    /**\\n     * Sets the active item properly given the default mode. In other words, it will\\n     * continue to move down the list until it finds an item that is not disabled. If\\n     * it encounters either end of the list, it will stop and not wrap.\\n     */\\n    private _setActiveInDefaultMode;\\n    /**\\n     * Sets the active item to the first enabled item starting at the index specified. If the\\n     * item is disabled, it will move in the fallbackDelta direction until it either\\n     * finds an enabled item or encounters the end of the list.\\n     */\\n    private _setActiveItemByIndex;\\n    /** Returns the items as an array. */\\n    private _getItemsArray;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/live-announcer/live-announcer-tokens.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/** Possible politeness levels. */\\nexport declare type AriaLivePoliteness = 'off' | 'polite' | 'assertive';\\nexport declare const LIVE_ANNOUNCER_ELEMENT_TOKEN: InjectionToken<HTMLElement | null>;\\n/** @docs-private */\\nexport declare function LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY(): null;\\n/** Object that can be used to configure the default options for the LiveAnnouncer. */\\nexport interface LiveAnnouncerDefaultOptions {\\n    /** Default politeness for the announcements. */\\n    politeness?: AriaLivePoliteness;\\n    /** Default duration for the announcement messages. */\\n    duration?: number;\\n}\\n/** Injection token that can be used to configure the default options for the LiveAnnouncer. */\\nexport declare const LIVE_ANNOUNCER_DEFAULT_OPTIONS: InjectionToken<LiveAnnouncerDefaultOptions>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/live-announcer/live-announcer.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ContentObserver } from '@angular/cdk/observers';\\nimport { ElementRef, NgZone, OnDestroy, Provider } from '@angular/core';\\nimport { AriaLivePoliteness, LiveAnnouncerDefaultOptions } from './live-announcer-tokens';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class LiveAnnouncer implements OnDestroy {\\n    private _ngZone;\\n    private _defaultOptions?;\\n    private _liveElement;\\n    private _document;\\n    private _previousTimeout?;\\n    constructor(elementToken: any, _ngZone: NgZone, _document: any, _defaultOptions?: LiveAnnouncerDefaultOptions | undefined);\\n    /**\\n     * Announces a message to screenreaders.\\n     * @param message Message to be announced to the screenreader.\\n     * @returns Promise that will be resolved when the message is added to the DOM.\\n     */\\n    announce(message: string): Promise<void>;\\n    /**\\n     * Announces a message to screenreaders.\\n     * @param message Message to be announced to the screenreader.\\n     * @param politeness The politeness of the announcer element.\\n     * @returns Promise that will be resolved when the message is added to the DOM.\\n     */\\n    announce(message: string, politeness?: AriaLivePoliteness): Promise<void>;\\n    /**\\n     * Announces a message to screenreaders.\\n     * @param message Message to be announced to the screenreader.\\n     * @param duration Time in milliseconds after which to clear out the announcer element. Note\\n     *   that this takes effect after the message has been added to the DOM, which can be up to\\n     *   100ms after `announce` has been called.\\n     * @returns Promise that will be resolved when the message is added to the DOM.\\n     */\\n    announce(message: string, duration?: number): Promise<void>;\\n    /**\\n     * Announces a message to screenreaders.\\n     * @param message Message to be announced to the screenreader.\\n     * @param politeness The politeness of the announcer element.\\n     * @param duration Time in milliseconds after which to clear out the announcer element. Note\\n     *   that this takes effect after the message has been added to the DOM, which can be up to\\n     *   100ms after `announce` has been called.\\n     * @returns Promise that will be resolved when the message is added to the DOM.\\n     */\\n    announce(message: string, politeness?: AriaLivePoliteness, duration?: number): Promise<void>;\\n    /**\\n     * Clears the current text from the announcer element. Can be used to prevent\\n     * screen readers from reading the text out again while the user is going\\n     * through the page landmarks.\\n     */\\n    clear(): void;\\n    ngOnDestroy(): void;\\n    private _createLiveElement;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<LiveAnnouncer>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<LiveAnnouncer>;\\n}\\n/**\\n * A directive that works similarly to aria-live, but uses the LiveAnnouncer to ensure compatibility\\n * with a wider range of browsers and screen readers.\\n */\\nexport declare class CdkAriaLive implements OnDestroy {\\n    private _elementRef;\\n    private _liveAnnouncer;\\n    private _contentObserver;\\n    private _ngZone;\\n    /** The aria-live politeness level to use when announcing messages. */\\n    politeness: AriaLivePoliteness;\\n    private _politeness;\\n    private _previousAnnouncedText?;\\n    private _subscription;\\n    constructor(_elementRef: ElementRef, _liveAnnouncer: LiveAnnouncer, _contentObserver: ContentObserver, _ngZone: NgZone);\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkAriaLive>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkAriaLive, \\\"[cdkAriaLive]\\\", [\\\"cdkAriaLive\\\"], { 'politeness': \\\"cdkAriaLive\\\" }, {}, never>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function LIVE_ANNOUNCER_PROVIDER_FACTORY(parentAnnouncer: LiveAnnouncer, liveElement: any, _document: any, ngZone: NgZone): LiveAnnouncer;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const LIVE_ANNOUNCER_PROVIDER: Provider;\\n\\n//# sourceMappingURL=live-announcer.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/a11y/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './aria-describer/aria-describer';\\nexport * from './key-manager/activedescendant-key-manager';\\nexport * from './key-manager/focus-key-manager';\\nexport * from './key-manager/list-key-manager';\\nexport * from './focus-trap/focus-trap';\\nexport * from './interactivity-checker/interactivity-checker';\\nexport * from './live-announcer/live-announcer';\\nexport * from './live-announcer/live-announcer-tokens';\\nexport * from './focus-monitor/focus-monitor';\\nexport * from './fake-mousedown';\\nexport * from './a11y-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/accordion/accordion-item.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { EventEmitter, OnDestroy, ChangeDetectorRef } from '@angular/core';\\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\\nimport { CdkAccordion } from './accordion';\\n/**\\n * An basic directive expected to be extended and decorated as a component.  Sets up all\\n * events and attributes needed to be managed by a CdkAccordion parent.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class CdkAccordionItem implements OnDestroy {\\n    accordion: CdkAccordion;\\n    private _changeDetectorRef;\\n    protected _expansionDispatcher: UniqueSelectionDispatcher;\\n    /** Subscription to openAll/closeAll events. */\\n    private _openCloseAllSubscription;\\n    /** Event emitted every time the AccordionItem is closed. */\\n    closed: EventEmitter<void>;\\n    /** Event emitted every time the AccordionItem is opened. */\\n    opened: EventEmitter<void>;\\n    /** Event emitted when the AccordionItem is destroyed. */\\n    destroyed: EventEmitter<void>;\\n    /**\\n     * Emits whenever the expanded state of the accordion changes.\\n     * Primarily used to facilitate two-way binding.\\n     * @docs-private\\n     */\\n    expandedChange: EventEmitter<boolean>;\\n    /** The unique AccordionItem id. */\\n    readonly id: string;\\n    /** Whether the AccordionItem is expanded. */\\n    expanded: any;\\n    private _expanded;\\n    /** Whether the AccordionItem is disabled. */\\n    disabled: any;\\n    private _disabled;\\n    /** Unregister function for _expansionDispatcher. */\\n    private _removeUniqueSelectionListener;\\n    constructor(accordion: CdkAccordion, _changeDetectorRef: ChangeDetectorRef, _expansionDispatcher: UniqueSelectionDispatcher);\\n    /** Emits an event for the accordion item being destroyed. */\\n    ngOnDestroy(): void;\\n    /** Toggles the expanded state of the accordion item. */\\n    toggle(): void;\\n    /** Sets the expanded state of the accordion item to false. */\\n    close(): void;\\n    /** Sets the expanded state of the accordion item to true. */\\n    open(): void;\\n    private _subscribeToOpenCloseAllActions;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkAccordionItem>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkAccordionItem, \\\"cdk-accordion-item, [cdkAccordionItem]\\\", [\\\"cdkAccordionItem\\\"], { 'expanded': \\\"expanded\\\", 'disabled': \\\"disabled\\\" }, { 'closed': \\\"closed\\\", 'opened': \\\"opened\\\", 'destroyed': \\\"destroyed\\\", 'expandedChange': \\\"expandedChange\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=accordion-item.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/accordion/accordion-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './accordion';\\nimport * as ɵngcc2 from './accordion-item';\\nexport declare class CdkAccordionModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<CdkAccordionModule, [typeof ɵngcc1.CdkAccordion, typeof ɵngcc2.CdkAccordionItem], never, [typeof ɵngcc1.CdkAccordion, typeof ɵngcc2.CdkAccordionItem]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<CdkAccordionModule>;\\n}\\n\\n//# sourceMappingURL=accordion-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/accordion/accordion.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/**\\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class CdkAccordion implements OnDestroy, OnChanges {\\n    /** Emits when the state of the accordion changes */\\n    readonly _stateChanges: Subject<SimpleChanges>;\\n    /** Stream that emits true/false when openAll/closeAll is triggered. */\\n    readonly _openCloseAllActions: Subject<boolean>;\\n    /** A readonly id value to use for unique selection coordination. */\\n    readonly id: string;\\n    /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\\n    multi: boolean;\\n    private _multi;\\n    /** Opens all enabled accordion items in an accordion where multi is enabled. */\\n    openAll(): void;\\n    /** Closes all enabled accordion items in an accordion where multi is enabled. */\\n    closeAll(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    private _openCloseAll;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkAccordion>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkAccordion, \\\"cdk-accordion, [cdkAccordion]\\\", [\\\"cdkAccordion\\\"], { 'multi': \\\"multi\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=accordion.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/accordion/index.d.ts\",\n      \"node_modules/@angular/cdk/accordion/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/accordion/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { CdkAccordionItem } from './accordion-item';\\nexport { CdkAccordion } from './accordion';\\nexport * from './accordion-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/bidi/bidi-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './dir';\\nexport declare class BidiModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<BidiModule, [typeof ɵngcc1.Dir], never, [typeof ɵngcc1.Dir]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<BidiModule>;\\n}\\n\\n//# sourceMappingURL=bidi-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/bidi/dir-document-token.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/**\\n * Injection token used to inject the document into Directionality.\\n * This is used so that the value can be faked in tests.\\n *\\n * We can't use the real document in tests because changing the real `dir` causes geometry-based\\n * tests in Safari to fail.\\n *\\n * We also can't re-provide the DOCUMENT token from platform-brower because the unit tests\\n * themselves use things like `querySelector` in test code.\\n *\\n * This token is defined in a separate file from Directionality as a workaround for\\n * https://github.com/angular/angular/issues/22559\\n *\\n * @docs-private\\n */\\nexport declare const DIR_DOCUMENT: InjectionToken<Document>;\\n/** @docs-private */\\nexport declare function DIR_DOCUMENT_FACTORY(): Document;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/bidi/dir.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { EventEmitter, AfterContentInit, OnDestroy } from '@angular/core';\\nimport { Direction, Directionality } from './directionality';\\n/**\\n * Directive to listen for changes of direction of part of the DOM.\\n *\\n * Provides itself as Directionality such that descendant directives only need to ever inject\\n * Directionality to get the closest direction.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class Dir implements Directionality, AfterContentInit, OnDestroy {\\n    /** Normalized direction that accounts for invalid/unsupported values. */\\n    private _dir;\\n    /** Whether the `value` has been set to its initial value. */\\n    private _isInitialized;\\n    /** Direction as passed in by the consumer. */\\n    _rawDir: string;\\n    /** Event emitted when the direction changes. */\\n    change: EventEmitter<Direction>;\\n    /** @docs-private */\\n    dir: Direction;\\n    /** Current layout direction of the element. */\\n    readonly value: Direction;\\n    /** Initialize once default value has been set. */\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Dir>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<Dir, \\\"[dir]\\\", [\\\"dir\\\"], { 'dir': \\\"dir\\\" }, { 'change': \\\"dirChange\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=dir.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/bidi/directionality.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { EventEmitter, OnDestroy } from '@angular/core';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type Direction = 'ltr' | 'rtl';\\n/**\\n * The directionality (LTR / RTL) context for the application (or a subtree of it).\\n * Exposes the current direction and a stream of direction changes.\\n */\\nexport declare class Directionality implements OnDestroy {\\n    /** The current 'ltr' or 'rtl' value. */\\n    readonly value: Direction;\\n    /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */\\n    readonly change: EventEmitter<Direction>;\\n    constructor(_document?: any);\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Directionality>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Directionality>;\\n}\\n\\n//# sourceMappingURL=directionality.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/bidi/index.d.ts\",\n      \"node_modules/@angular/cdk/bidi/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { DIR_DOCUMENT_FACTORY as ɵangular_material_src_cdk_bidi_bidi_a } from './dir-document-token';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/bidi/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { Directionality, Direction } from './directionality';\\nexport { DIR_DOCUMENT } from './dir-document-token';\\nexport { Dir } from './dir';\\nexport * from './bidi-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/array.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Wraps the provided value in an array, unless the provided value is an array. */\\nexport declare function coerceArray<T>(value: T | T[]): T[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/boolean-property.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Coerces a data-bound value (typically a string) to a boolean. */\\nexport declare function coerceBooleanProperty(value: any): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/css-pixel-value.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Coerces a value to a CSS pixel value. */\\nexport declare function coerceCssPixelValue(value: any): string;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef } from '@angular/core';\\n/**\\n * Coerces an ElementRef or an Element into an element.\\n * Useful for APIs that can accept either a ref or the native element itself.\\n */\\nexport declare function coerceElement<T>(elementOrRef: ElementRef<T> | T): T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/index.d.ts\",\n      \"node_modules/@angular/cdk/coercion/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/number-property.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Coerces a data-bound value (typically a string) to a number. */\\nexport declare function coerceNumberProperty(value: any): number;\\nexport declare function coerceNumberProperty<D>(value: any, fallback: D): number | D;\\n/**\\n * Whether the provided value is considered a number.\\n * @docs-private\\n */\\nexport declare function _isNumberValue(value: any): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/coercion/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './boolean-property';\\nexport * from './number-property';\\nexport * from './array';\\nexport * from './css-pixel-value';\\nexport * from './element';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/array-data-source.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Observable } from 'rxjs';\\nimport { DataSource } from './data-source';\\n/** DataSource wrapper for a native array. */\\nexport declare class ArrayDataSource<T> extends DataSource<T> {\\n    private _data;\\n    constructor(_data: T[] | ReadonlyArray<T> | Observable<T[] | ReadonlyArray<T>>);\\n    connect(): Observable<T[] | ReadonlyArray<T>>;\\n    disconnect(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/collection-viewer.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Observable } from 'rxjs';\\n/** Represents a range of numbers with a specified start and end. */\\nexport declare type ListRange = {\\n    start: number;\\n    end: number;\\n};\\n/**\\n * Interface for any component that provides a view of some data collection and wants to provide\\n * information regarding the view and any changes made.\\n */\\nexport interface CollectionViewer {\\n    /**\\n     * A stream that emits whenever the `CollectionViewer` starts looking at a new portion of the\\n     * data. The `start` index is inclusive, while the `end` is exclusive.\\n     */\\n    viewChange: Observable<ListRange>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/data-source.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Observable } from 'rxjs';\\nimport { CollectionViewer } from './collection-viewer';\\nexport declare abstract class DataSource<T> {\\n    /**\\n     * Connects a collection viewer (such as a data-table) to this data source. Note that\\n     * the stream provided will be accessed during change detection and should not directly change\\n     * values that are bound in template views.\\n     * @param collectionViewer The component that exposes a view over the data provided by this\\n     *     data source.\\n     * @returns Observable that emits a new value when the data changes.\\n     */\\n    abstract connect(collectionViewer: CollectionViewer): Observable<T[] | ReadonlyArray<T>>;\\n    /**\\n     * Disconnects a collection viewer (such as a data-table) from this data source. Can be used\\n     * to perform any clean-up or tear-down operations when a view is being destroyed.\\n     *\\n     * @param collectionViewer The component that exposes a view over the data provided by this\\n     *     data source.\\n     */\\n    abstract disconnect(collectionViewer: CollectionViewer): void;\\n}\\n/** Checks whether an object is a data source. */\\nexport declare function isDataSource(value: any): value is DataSource<any>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/index.d.ts\",\n      \"node_modules/@angular/cdk/collections/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './array-data-source';\\nexport * from './collection-viewer';\\nexport * from './data-source';\\nexport * from './selection';\\nexport { UniqueSelectionDispatcher, UniqueSelectionDispatcherListener, } from './unique-selection-dispatcher';\\nexport * from './tree-adapter';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/selection.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Subject } from 'rxjs';\\n/**\\n * Class to be used to power selecting one or more options from a list.\\n */\\nexport declare class SelectionModel<T> {\\n    private _multiple;\\n    private _emitChanges;\\n    /** Currently-selected values. */\\n    private _selection;\\n    /** Keeps track of the deselected options that haven't been emitted by the change event. */\\n    private _deselectedToEmit;\\n    /** Keeps track of the selected options that haven't been emitted by the change event. */\\n    private _selectedToEmit;\\n    /** Cache for the array value of the selected items. */\\n    private _selected;\\n    /** Selected values. */\\n    readonly selected: T[];\\n    /** Event emitted when the value has changed. */\\n    changed: Subject<SelectionChange<T>>;\\n    /**\\n     * Event emitted when the value has changed.\\n     * @deprecated Use `changed` instead.\\n     * @breaking-change 8.0.0 To be changed to `changed`\\n     */\\n    onChange: Subject<SelectionChange<T>>;\\n    constructor(_multiple?: boolean, initiallySelectedValues?: T[], _emitChanges?: boolean);\\n    /**\\n     * Selects a value or an array of values.\\n     */\\n    select(...values: T[]): void;\\n    /**\\n     * Deselects a value or an array of values.\\n     */\\n    deselect(...values: T[]): void;\\n    /**\\n     * Toggles a value between selected and deselected.\\n     */\\n    toggle(value: T): void;\\n    /**\\n     * Clears all of the selected values.\\n     */\\n    clear(): void;\\n    /**\\n     * Determines whether a value is selected.\\n     */\\n    isSelected(value: T): boolean;\\n    /**\\n     * Determines whether the model does not have a value.\\n     */\\n    isEmpty(): boolean;\\n    /**\\n     * Determines whether the model has a value.\\n     */\\n    hasValue(): boolean;\\n    /**\\n     * Sorts the selected values based on a predicate function.\\n     */\\n    sort(predicate?: (a: T, b: T) => number): void;\\n    /**\\n     * Gets whether multiple values can be selected.\\n     */\\n    isMultipleSelection(): boolean;\\n    /** Emits a change event and clears the records of selected and deselected values. */\\n    private _emitChangeEvent;\\n    /** Selects a value. */\\n    private _markSelected;\\n    /** Deselects a value. */\\n    private _unmarkSelected;\\n    /** Clears out the selected values. */\\n    private _unmarkAll;\\n    /**\\n     * Verifies the value assignment and throws an error if the specified value array is\\n     * including multiple values while the selection model is not supporting multiple values.\\n     */\\n    private _verifyValueAssignment;\\n}\\n/**\\n * Event emitted when the value of a MatSelectionModel has changed.\\n * @docs-private\\n */\\nexport interface SelectionChange<T> {\\n    /** Model that dispatched the event. */\\n    source: SelectionModel<T>;\\n    /** Options that were added to the model. */\\n    added: T[];\\n    /** Options that were removed from the model. */\\n    removed: T[];\\n}\\n/**\\n * Returns an error that reports that multiple values are passed into a selection model\\n * with a single value.\\n * @docs-private\\n */\\nexport declare function getMultipleValuesInSingleSelectionError(): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/tree-adapter.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { SelectionModel } from './selection';\\n/**\\n * Interface for a class that can flatten hierarchical structured data and re-expand the flattened\\n * data back into its original structure. Should be used in conjunction with the cdk-tree.\\n */\\nexport interface TreeDataNodeFlattener<T> {\\n    /** Transforms a set of hierarchical structured data into a flattened data array. */\\n    flattenNodes(structuredData: any[]): T[];\\n    /**\\n     * Expands a flattened array of data into its hierarchical form using the provided expansion\\n     * model.\\n     */\\n    expandFlattenedNodes(nodes: T[], expansionModel: SelectionModel<T>): T[];\\n    /**\\n     * Put node descendants of node in array.\\n     * If `onlyExpandable` is true, then only process expandable descendants.\\n     */\\n    nodeDescendents(node: T, nodes: T[], onlyExpandable: boolean): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/collections/unique-selection-dispatcher.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OnDestroy } from '@angular/core';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type UniqueSelectionDispatcherListener = (id: string, name: string) => void;\\n/**\\n * Class to coordinate unique selection based on name.\\n * Intended to be consumed as an Angular service.\\n * This service is needed because native radio change events are only fired on the item currently\\n * being selected, and we still need to uncheck the previous selection.\\n *\\n * This service does not *store* any IDs and names because they may change at any time, so it is\\n * less error-prone if they are simply passed through when the events occur.\\n */\\nexport declare class UniqueSelectionDispatcher implements OnDestroy {\\n    private _listeners;\\n    /**\\n     * Notify other items that selection for the given name has been set.\\n     * @param id ID of the item.\\n     * @param name Name of the item.\\n     */\\n    notify(id: string, name: string): void;\\n    /**\\n     * Listen for future changes to item selection.\\n     * @return Function used to deregister listener\\n     */\\n    listen(listener: UniqueSelectionDispatcherListener): () => void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<UniqueSelectionDispatcher>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<UniqueSelectionDispatcher>;\\n}\\n\\n//# sourceMappingURL=unique-selection-dispatcher.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, OnDestroy } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/** Handle that can be used to drag and CdkDrag instance. */\\nexport declare class CdkDragHandle implements OnDestroy {\\n    element: ElementRef<HTMLElement>;\\n    /** Closest parent draggable instance. */\\n    _parentDrag: {} | undefined;\\n    /** Emits when the state of the handle has changed. */\\n    _stateChanges: Subject<CdkDragHandle>;\\n    /** Whether starting to drag through this handle is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    constructor(element: ElementRef<HTMLElement>, parentDrag?: any);\\n    ngOnDestroy(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\n/**\\n * Element that will be used as a template for the placeholder of a CdkDrag when\\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\\n */\\nexport declare class CdkDragPlaceholder<T = any> {\\n    templateRef: TemplateRef<T>;\\n    /** Context data to be added to the placeholder template instance. */\\n    data: T;\\n    constructor(templateRef: TemplateRef<T>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\n/**\\n * Element that will be used as a template for the preview\\n * of a CdkDrag when it is being dragged.\\n */\\nexport declare class CdkDragPreview<T = any> {\\n    templateRef: TemplateRef<T>;\\n    /** Context data to be added to the preview template instance. */\\n    data: T;\\n    constructor(templateRef: TemplateRef<T>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/directives/drag.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { AfterViewInit, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, QueryList, ViewContainerRef, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport { CdkDragDrop, CdkDragEnd, CdkDragEnter, CdkDragExit, CdkDragMove, CdkDragStart, CdkDragRelease } from '../drag-events';\\nimport { CdkDragHandle } from './drag-handle';\\nimport { CdkDragPlaceholder } from './drag-placeholder';\\nimport { CdkDragPreview } from './drag-preview';\\nimport { DragRef, DragRefConfig, Point } from '../drag-ref';\\nimport { CdkDropListInternal as CdkDropList } from './drop-list';\\nimport { DragDrop } from '../drag-drop';\\n/**\\n * Injection token that is used to provide a CdkDropList instance to CdkDrag.\\n * Used for avoiding circular imports.\\n */\\nexport declare const CDK_DROP_LIST: InjectionToken<CdkDropList>;\\n/** Injection token that can be used to configure the behavior of `CdkDrag`. */\\nexport declare const CDK_DRAG_CONFIG: InjectionToken<DragRefConfig>;\\n/** @docs-private */\\nexport declare function CDK_DRAG_CONFIG_FACTORY(): DragRefConfig;\\n/** Element that can be moved inside a CdkDropList container. */\\nexport declare class CdkDrag<T = any> implements AfterViewInit, OnChanges, OnDestroy {\\n    /** Element that the draggable is attached to. */\\n    element: ElementRef<HTMLElement>;\\n    /** Droppable container that the draggable is a part of. */\\n    dropContainer: CdkDropList;\\n    private _document;\\n    private _ngZone;\\n    private _viewContainerRef;\\n    private _dir;\\n    private _changeDetectorRef;\\n    private _destroyed;\\n    /** Reference to the underlying drag instance. */\\n    _dragRef: DragRef<CdkDrag<T>>;\\n    /** Elements that can be used to drag the draggable item. */\\n    _handles: QueryList<CdkDragHandle>;\\n    /** Element that will be used as a template to create the draggable item's preview. */\\n    _previewTemplate: CdkDragPreview;\\n    /** Template for placeholder element rendered to show where a draggable would be dropped. */\\n    _placeholderTemplate: CdkDragPlaceholder;\\n    /** Arbitrary data to attach to this drag instance. */\\n    data: T;\\n    /** Locks the position of the dragged element along the specified axis. */\\n    lockAxis: 'x' | 'y';\\n    /**\\n     * Selector that will be used to determine the root draggable element, starting from\\n     * the `cdkDrag` element and going up the DOM. Passing an alternate root element is useful\\n     * when trying to enable dragging on an element that you might not have access to.\\n     */\\n    rootElementSelector: string;\\n    /**\\n     * Node or selector that will be used to determine the element to which the draggable's\\n     * position will be constrained. If a string is passed in, it'll be used as a selector that\\n     * will be matched starting from the element's parent and going up the DOM until a match\\n     * has been found.\\n     */\\n    boundaryElement: string | ElementRef<HTMLElement> | HTMLElement;\\n    /**\\n     * Amount of milliseconds to wait after the user has put their\\n     * pointer down before starting to drag the element.\\n     */\\n    dragStartDelay: number;\\n    /**\\n     * Sets the position of a `CdkDrag` that is outside of a drop container.\\n     * Can be used to restore the element's position for a returning user.\\n     */\\n    freeDragPosition: {\\n        x: number;\\n        y: number;\\n    };\\n    /** Whether starting to drag this element is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /**\\n     * Function that can be used to customize the logic of how the position of the drag item\\n     * is limited while it's being dragged. Gets called with a point containing the current position\\n     * of the user's pointer on the page and should return a point describing where the item should\\n     * be rendered.\\n     */\\n    constrainPosition?: (point: Point, dragRef: DragRef) => Point;\\n    /** Emits when the user starts dragging the item. */\\n    started: EventEmitter<CdkDragStart>;\\n    /** Emits when the user has released a drag item, before any animations have started. */\\n    released: EventEmitter<CdkDragRelease>;\\n    /** Emits when the user stops dragging an item in the container. */\\n    ended: EventEmitter<CdkDragEnd>;\\n    /** Emits when the user has moved the item into a new container. */\\n    entered: EventEmitter<CdkDragEnter<any>>;\\n    /** Emits when the user removes the item its container by dragging it into another container. */\\n    exited: EventEmitter<CdkDragExit<any>>;\\n    /** Emits when the user drops the item inside a container. */\\n    dropped: EventEmitter<CdkDragDrop<any>>;\\n    /**\\n     * Emits as the user is dragging the item. Use with caution,\\n     * because this event will fire for every pixel that the user has dragged.\\n     */\\n    moved: Observable<CdkDragMove<T>>;\\n    constructor(\\n    /** Element that the draggable is attached to. */\\n    element: ElementRef<HTMLElement>, \\n    /** Droppable container that the draggable is a part of. */\\n    dropContainer: CdkDropList, _document: any, _ngZone: NgZone, _viewContainerRef: ViewContainerRef, config: DragRefConfig, _dir: Directionality, dragDrop: DragDrop, _changeDetectorRef: ChangeDetectorRef);\\n    /**\\n     * Returns the element that is being used as a placeholder\\n     * while the current element is being dragged.\\n     */\\n    getPlaceholderElement(): HTMLElement;\\n    /** Returns the root draggable element. */\\n    getRootElement(): HTMLElement;\\n    /** Resets a standalone drag item to its initial position. */\\n    reset(): void;\\n    /**\\n     * Gets the pixel coordinates of the draggable outside of a drop container.\\n     */\\n    getFreeDragPosition(): {\\n        readonly x: number;\\n        readonly y: number;\\n    };\\n    ngAfterViewInit(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    /** Syncs the root element with the `DragRef`. */\\n    private _updateRootElement;\\n    /** Gets the boundary element, based on the `boundaryElement` value. */\\n    private _getBoundaryElement;\\n    /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\\n    private _syncInputs;\\n    /** Handles the events from the underlying `DragRef`. */\\n    private _handleEvents;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OnDestroy } from '@angular/core';\\n/**\\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\\n * from `cdkDropList`.\\n */\\nexport declare class CdkDropListGroup<T> implements OnDestroy {\\n    /** Drop lists registered inside the group. */\\n    readonly _items: Set<T>;\\n    /** Whether starting a dragging sequence from inside this group is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    ngOnDestroy(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, EventEmitter, OnDestroy, QueryList, ChangeDetectorRef, AfterContentInit } from '@angular/core';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { CdkDrag } from './drag';\\nimport { CdkDragDrop, CdkDragEnter, CdkDragExit, CdkDragSortEvent } from '../drag-events';\\nimport { CdkDropListGroup } from './drop-list-group';\\nimport { DropListRef } from '../drop-list-ref';\\nimport { DragDrop } from '../drag-drop';\\n/**\\n * Internal compile-time-only representation of a `CdkDropList`.\\n * Used to avoid circular import issues between the `CdkDropList` and the `CdkDrag`.\\n * @docs-private\\n */\\nexport interface CdkDropListInternal extends CdkDropList {\\n}\\n/** Container that wraps a set of draggable items. */\\nexport declare class CdkDropList<T = any> implements AfterContentInit, OnDestroy {\\n    /** Element that the drop list is attached to. */\\n    element: ElementRef<HTMLElement>;\\n    private _changeDetectorRef;\\n    private _dir?;\\n    private _group?;\\n    /** Emits when the list has been destroyed. */\\n    private _destroyed;\\n    /** Keeps track of the drop lists that are currently on the page. */\\n    private static _dropLists;\\n    /** Reference to the underlying drop list instance. */\\n    _dropListRef: DropListRef<CdkDropList<T>>;\\n    /** Draggable items in the container. */\\n    _draggables: QueryList<CdkDrag>;\\n    /**\\n     * Other draggable containers that this container is connected to and into which the\\n     * container's items can be transferred. Can either be references to other drop containers,\\n     * or their unique IDs.\\n     */\\n    connectedTo: (CdkDropList | string)[] | CdkDropList | string;\\n    /** Arbitrary data to attach to this container. */\\n    data: T;\\n    /** Direction in which the list is oriented. */\\n    orientation: 'horizontal' | 'vertical';\\n    /**\\n     * Unique ID for the drop zone. Can be used as a reference\\n     * in the `connectedTo` of another `CdkDropList`.\\n     */\\n    id: string;\\n    /** Locks the position of the draggable elements inside the container along the specified axis. */\\n    lockAxis: 'x' | 'y';\\n    /** Whether starting a dragging sequence from this container is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** Whether sorting within this drop list is disabled. */\\n    sortingDisabled: boolean;\\n    private _sortingDisabled;\\n    /**\\n     * Function that is used to determine whether an item\\n     * is allowed to be moved into a drop container.\\n     */\\n    enterPredicate: (drag: CdkDrag, drop: CdkDropList) => boolean;\\n    /** Whether to auto-scroll the view when the user moves their pointer close to the edges. */\\n    autoScrollDisabled: boolean;\\n    /** Emits when the user drops an item inside the container. */\\n    dropped: EventEmitter<CdkDragDrop<T, any>>;\\n    /**\\n     * Emits when the user has moved a new drag item into this container.\\n     */\\n    entered: EventEmitter<CdkDragEnter<T>>;\\n    /**\\n     * Emits when the user removes an item from the container\\n     * by dragging it into another container.\\n     */\\n    exited: EventEmitter<CdkDragExit<T>>;\\n    /** Emits as the user is swapping items while actively dragging. */\\n    sorted: EventEmitter<CdkDragSortEvent<T>>;\\n    constructor(\\n    /** Element that the drop list is attached to. */\\n    element: ElementRef<HTMLElement>, dragDrop: DragDrop, _changeDetectorRef: ChangeDetectorRef, _dir?: Directionality | undefined, _group?: CdkDropListGroup<CdkDropList<any>> | undefined);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Starts dragging an item.\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    start(): void;\\n    /**\\n     * Drops an item into this container.\\n     * @param item Item being dropped into the container.\\n     * @param currentIndex Index at which the item should be inserted.\\n     * @param previousContainer Container from which the item got dragged in.\\n     * @param isPointerOverContainer Whether the user's pointer was over the\\n     *    container when the item was dropped.\\n     *\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    drop(item: CdkDrag, currentIndex: number, previousContainer: CdkDropList, isPointerOverContainer: boolean): void;\\n    /**\\n     * Emits an event to indicate that the user moved an item into the container.\\n     * @param item Item that was moved into the container.\\n     * @param pointerX Position of the item along the X axis.\\n     * @param pointerY Position of the item along the Y axis.\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    enter(item: CdkDrag, pointerX: number, pointerY: number): void;\\n    /**\\n     * Removes an item from the container after it was dragged into another container by the user.\\n     * @param item Item that was dragged out.\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    exit(item: CdkDrag): void;\\n    /**\\n     * Figures out the index of an item in the container.\\n     * @param item Item whose index should be determined.\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    getItemIndex(item: CdkDrag): number;\\n    /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\\n    private _syncInputs;\\n    /** Handles events from the underlying DropListRef. */\\n    private _handleEvents;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class DragDropModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { NgZone, OnDestroy } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/**\\n * Service that keeps track of all the drag item and drop container\\n * instances, and manages global event listeners on the `document`.\\n * @docs-private\\n */\\nexport declare class DragDropRegistry<I, C> implements OnDestroy {\\n    private _ngZone;\\n    private _document;\\n    /** Registered drop container instances. */\\n    private _dropInstances;\\n    /** Registered drag item instances. */\\n    private _dragInstances;\\n    /** Drag item instances that are currently being dragged. */\\n    private _activeDragInstances;\\n    /** Keeps track of the event listeners that we've bound to the `document`. */\\n    private _globalListeners;\\n    /**\\n     * Emits the `touchmove` or `mousemove` events that are dispatched\\n     * while the user is dragging a drag item instance.\\n     */\\n    readonly pointerMove: Subject<TouchEvent | MouseEvent>;\\n    /**\\n     * Emits the `touchend` or `mouseup` events that are dispatched\\n     * while the user is dragging a drag item instance.\\n     */\\n    readonly pointerUp: Subject<TouchEvent | MouseEvent>;\\n    /** Emits when the viewport has been scrolled while the user is dragging an item. */\\n    readonly scroll: Subject<Event>;\\n    constructor(_ngZone: NgZone, _document: any);\\n    /** Adds a drop container to the registry. */\\n    registerDropContainer(drop: C): void;\\n    /** Adds a drag item instance to the registry. */\\n    registerDragItem(drag: I): void;\\n    /** Removes a drop container from the registry. */\\n    removeDropContainer(drop: C): void;\\n    /** Removes a drag item instance from the registry. */\\n    removeDragItem(drag: I): void;\\n    /**\\n     * Starts the dragging sequence for a drag instance.\\n     * @param drag Drag instance which is being dragged.\\n     * @param event Event that initiated the dragging.\\n     */\\n    startDragging(drag: I, event: TouchEvent | MouseEvent): void;\\n    /** Stops dragging a drag item instance. */\\n    stopDragging(drag: I): void;\\n    /** Gets whether a drag item instance is currently being dragged. */\\n    isDragging(drag: I): boolean;\\n    ngOnDestroy(): void;\\n    /**\\n     * Event listener that will prevent the default browser action while the user is dragging.\\n     * @param event Event whose default action should be prevented.\\n     */\\n    private _preventDefaultWhileDragging;\\n    /** Clears out the global event listeners from the `document`. */\\n    private _clearGlobalListeners;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-drop.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { NgZone, ElementRef } from '@angular/core';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { DragRef, DragRefConfig } from './drag-ref';\\nimport { DropListRef } from './drop-list-ref';\\nimport { DragDropRegistry } from './drag-drop-registry';\\n/**\\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\\n */\\nexport declare class DragDrop {\\n    private _document;\\n    private _ngZone;\\n    private _viewportRuler;\\n    private _dragDropRegistry;\\n    constructor(_document: any, _ngZone: NgZone, _viewportRuler: ViewportRuler, _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>);\\n    /**\\n     * Turns an element into a draggable item.\\n     * @param element Element to which to attach the dragging functionality.\\n     * @param config Object used to configure the dragging behavior.\\n     */\\n    createDrag<T = any>(element: ElementRef<HTMLElement> | HTMLElement, config?: DragRefConfig): DragRef<T>;\\n    /**\\n     * Turns an element into a drop list.\\n     * @param element Element to which to attach the drop list functionality.\\n     */\\n    createDropList<T = any>(element: ElementRef<HTMLElement> | HTMLElement): DropListRef<T>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-events.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkDrag } from './directives/drag';\\nimport { CdkDropList } from './directives/drop-list';\\n/** Event emitted when the user starts dragging a draggable. */\\nexport interface CdkDragStart<T = any> {\\n    /** Draggable that emitted the event. */\\n    source: CdkDrag<T>;\\n}\\n/** Event emitted when the user releases an item, before any animations have started. */\\nexport interface CdkDragRelease<T = any> {\\n    /** Draggable that emitted the event. */\\n    source: CdkDrag<T>;\\n}\\n/** Event emitted when the user stops dragging a draggable. */\\nexport interface CdkDragEnd<T = any> {\\n    /** Draggable that emitted the event. */\\n    source: CdkDrag<T>;\\n    /** Distance in pixels that the user has dragged since the drag sequence started. */\\n    distance: {\\n        x: number;\\n        y: number;\\n    };\\n}\\n/** Event emitted when the user moves an item into a new drop container. */\\nexport interface CdkDragEnter<T = any, I = T> {\\n    /** Container into which the user has moved the item. */\\n    container: CdkDropList<T>;\\n    /** Item that was removed from the container. */\\n    item: CdkDrag<I>;\\n    /** Index at which the item has entered the container. */\\n    currentIndex: number;\\n}\\n/**\\n * Event emitted when the user removes an item from a\\n * drop container by moving it into another one.\\n */\\nexport interface CdkDragExit<T = any, I = T> {\\n    /** Container from which the user has a removed an item. */\\n    container: CdkDropList<T>;\\n    /** Item that was removed from the container. */\\n    item: CdkDrag<I>;\\n}\\n/** Event emitted when the user drops a draggable item inside a drop container. */\\nexport interface CdkDragDrop<T, O = T> {\\n    /** Index of the item when it was picked up. */\\n    previousIndex: number;\\n    /** Current index of the item. */\\n    currentIndex: number;\\n    /** Item that is being dropped. */\\n    item: CdkDrag;\\n    /** Container in which the item was dropped. */\\n    container: CdkDropList<T>;\\n    /** Container from which the item was picked up. Can be the same as the `container`. */\\n    previousContainer: CdkDropList<O>;\\n    /** Whether the user's pointer was over the container when the item was dropped. */\\n    isPointerOverContainer: boolean;\\n    /** Distance in pixels that the user has dragged since the drag sequence started. */\\n    distance: {\\n        x: number;\\n        y: number;\\n    };\\n}\\n/** Event emitted as the user is dragging a draggable item. */\\nexport interface CdkDragMove<T = any> {\\n    /** Item that is being dragged. */\\n    source: CdkDrag<T>;\\n    /** Position of the user's pointer on the page. */\\n    pointerPosition: {\\n        x: number;\\n        y: number;\\n    };\\n    /** Native event that is causing the dragging. */\\n    event: MouseEvent | TouchEvent;\\n    /** Distance in pixels that the user has dragged since the drag sequence started. */\\n    distance: {\\n        x: number;\\n        y: number;\\n    };\\n    /**\\n     * Indicates the direction in which the user is dragging the element along each axis.\\n     * `1` means that the position is increasing (e.g. the user is moving to the right or downwards),\\n     * whereas `-1` means that it's decreasing (they're moving to the left or upwards). `0` means\\n     * that the position hasn't changed.\\n     */\\n    delta: {\\n        x: -1 | 0 | 1;\\n        y: -1 | 0 | 1;\\n    };\\n}\\n/** Event emitted when the user swaps the position of two drag items. */\\nexport interface CdkDragSortEvent<T = any, I = T> {\\n    /** Index from which the item was sorted previously. */\\n    previousIndex: number;\\n    /** Index that the item is currently in. */\\n    currentIndex: number;\\n    /** Container that the item belongs to. */\\n    container: CdkDropList<T>;\\n    /** Item that is being sorted. */\\n    item: CdkDrag<I>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-parent.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/**\\n * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the\\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\\n * to avoid circular imports.\\n * @docs-private\\n */\\nexport declare const CDK_DRAG_PARENT: InjectionToken<{}>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, NgZone, ViewContainerRef, TemplateRef } from '@angular/core';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { Direction } from '@angular/cdk/bidi';\\nimport { Subject, Observable } from 'rxjs';\\nimport { DropListRefInternal as DropListRef } from './drop-list-ref';\\nimport { DragDropRegistry } from './drag-drop-registry';\\n/** Object that can be used to configure the behavior of DragRef. */\\nexport interface DragRefConfig {\\n    /**\\n     * Minimum amount of pixels that the user should\\n     * drag, before the CDK initiates a drag sequence.\\n     */\\n    dragStartThreshold: number;\\n    /**\\n     * Amount the pixels the user should drag before the CDK\\n     * considers them to have changed the drag direction.\\n     */\\n    pointerDirectionChangeThreshold: number;\\n}\\n/**\\n * Internal compile-time-only representation of a `DragRef`.\\n * Used to avoid circular import issues between the `DragRef` and the `DropListRef`.\\n * @docs-private\\n */\\nexport interface DragRefInternal extends DragRef {\\n}\\n/** Template that can be used to create a drag helper element (e.g. a preview or a placeholder). */\\ninterface DragHelperTemplate<T = any> {\\n    template: TemplateRef<T> | null;\\n    viewContainer: ViewContainerRef;\\n    context: T;\\n}\\n/**\\n * Reference to a draggable item. Used to manipulate or dispose of the item.\\n * @docs-private\\n */\\nexport declare class DragRef<T = any> {\\n    private _config;\\n    private _document;\\n    private _ngZone;\\n    private _viewportRuler;\\n    private _dragDropRegistry;\\n    /** Element displayed next to the user's pointer while the element is dragged. */\\n    private _preview;\\n    /** Reference to the view of the preview element. */\\n    private _previewRef;\\n    /** Reference to the view of the placeholder element. */\\n    private _placeholderRef;\\n    /** Element that is rendered instead of the draggable item while it is being sorted. */\\n    private _placeholder;\\n    /** Coordinates within the element at which the user picked up the element. */\\n    private _pickupPositionInElement;\\n    /** Coordinates on the page at which the user picked up the element. */\\n    private _pickupPositionOnPage;\\n    /**\\n     * Reference to the element that comes after the draggable in the DOM, at the time\\n     * it was picked up. Used for restoring its initial position when it's dropped.\\n     */\\n    private _nextSibling;\\n    /**\\n     * CSS `transform` applied to the element when it isn't being dragged. We need a\\n     * passive transform in order for the dragged element to retain its new position\\n     * after the user has stopped dragging and because we need to know the relative\\n     * position in case they start dragging again. This corresponds to `element.style.transform`.\\n     */\\n    private _passiveTransform;\\n    /** CSS `transform` that is applied to the element while it's being dragged. */\\n    private _activeTransform;\\n    /** Inline `transform` value that the element had before the first dragging sequence. */\\n    private _initialTransform?;\\n    /**\\n     * Whether the dragging sequence has been started. Doesn't\\n     * necessarily mean that the element has been moved.\\n     */\\n    private _hasStartedDragging;\\n    /** Whether the element has moved since the user started dragging it. */\\n    private _hasMoved;\\n    /** Drop container in which the DragRef resided when dragging began. */\\n    private _initialContainer;\\n    /** Cached scroll position on the page when the element was picked up. */\\n    private _scrollPosition;\\n    /** Emits when the item is being moved. */\\n    private _moveEvents;\\n    /** Keeps track of the direction in which the user is dragging along each axis. */\\n    private _pointerDirectionDelta;\\n    /** Pointer position at which the last change in the delta occurred. */\\n    private _pointerPositionAtLastDirectionChange;\\n    /**\\n     * Root DOM node of the drag instance. This is the element that will\\n     * be moved around as the user is dragging.\\n     */\\n    private _rootElement;\\n    /**\\n     * Inline style value of `-webkit-tap-highlight-color` at the time the\\n     * dragging was started. Used to restore the value once we're done dragging.\\n     */\\n    private _rootElementTapHighlight;\\n    /** Subscription to pointer movement events. */\\n    private _pointerMoveSubscription;\\n    /** Subscription to the event that is dispatched when the user lifts their pointer. */\\n    private _pointerUpSubscription;\\n    /** Subscription to the viewport being scrolled. */\\n    private _scrollSubscription;\\n    /** Subscription to the viewport being resized. */\\n    private _resizeSubscription;\\n    /**\\n     * Time at which the last touch event occurred. Used to avoid firing the same\\n     * events multiple times on touch devices where the browser will fire a fake\\n     * mouse event for each touch event, after a certain time.\\n     */\\n    private _lastTouchEventTime;\\n    /** Time at which the last dragging sequence was started. */\\n    private _dragStartTime;\\n    /** Cached reference to the boundary element. */\\n    private _boundaryElement;\\n    /** Whether the native dragging interactions have been enabled on the root element. */\\n    private _nativeInteractionsEnabled;\\n    /** Cached dimensions of the preview element. */\\n    private _previewRect?;\\n    /** Cached dimensions of the boundary element. */\\n    private _boundaryRect?;\\n    /** Element that will be used as a template to create the draggable item's preview. */\\n    private _previewTemplate?;\\n    /** Template for placeholder element rendered to show where a draggable would be dropped. */\\n    private _placeholderTemplate?;\\n    /** Elements that can be used to drag the draggable item. */\\n    private _handles;\\n    /** Registered handles that are currently disabled. */\\n    private _disabledHandles;\\n    /** Droppable container that the draggable is a part of. */\\n    private _dropContainer?;\\n    /** Layout direction of the item. */\\n    private _direction;\\n    /** Axis along which dragging is locked. */\\n    lockAxis: 'x' | 'y';\\n    /**\\n     * Amount of milliseconds to wait after the user has put their\\n     * pointer down before starting to drag the element.\\n     */\\n    dragStartDelay: number;\\n    /** Whether starting to drag this element is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** Emits as the drag sequence is being prepared. */\\n    beforeStarted: Subject<void>;\\n    /** Emits when the user starts dragging the item. */\\n    started: Subject<{\\n        source: DragRef<any>;\\n    }>;\\n    /** Emits when the user has released a drag item, before any animations have started. */\\n    released: Subject<{\\n        source: DragRef<any>;\\n    }>;\\n    /** Emits when the user stops dragging an item in the container. */\\n    ended: Subject<{\\n        source: DragRef<any>;\\n        distance: Point;\\n    }>;\\n    /** Emits when the user has moved the item into a new container. */\\n    entered: Subject<{\\n        container: DropListRef;\\n        item: DragRef<any>;\\n        currentIndex: number;\\n    }>;\\n    /** Emits when the user removes the item its container by dragging it into another container. */\\n    exited: Subject<{\\n        container: DropListRef;\\n        item: DragRef<any>;\\n    }>;\\n    /** Emits when the user drops the item inside a container. */\\n    dropped: Subject<{\\n        previousIndex: number;\\n        currentIndex: number;\\n        item: DragRef<any>;\\n        container: DropListRef;\\n        previousContainer: DropListRef;\\n        distance: Point;\\n        isPointerOverContainer: boolean;\\n    }>;\\n    /**\\n     * Emits as the user is dragging the item. Use with caution,\\n     * because this event will fire for every pixel that the user has dragged.\\n     */\\n    moved: Observable<{\\n        source: DragRef;\\n        pointerPosition: {\\n            x: number;\\n            y: number;\\n        };\\n        event: MouseEvent | TouchEvent;\\n        distance: Point;\\n        delta: {\\n            x: -1 | 0 | 1;\\n            y: -1 | 0 | 1;\\n        };\\n    }>;\\n    /** Arbitrary data that can be attached to the drag item. */\\n    data: T;\\n    /**\\n     * Function that can be used to customize the logic of how the position of the drag item\\n     * is limited while it's being dragged. Gets called with a point containing the current position\\n     * of the user's pointer on the page and should return a point describing where the item should\\n     * be rendered.\\n     */\\n    constrainPosition?: (point: Point, dragRef: DragRef) => Point;\\n    constructor(element: ElementRef<HTMLElement> | HTMLElement, _config: DragRefConfig, _document: Document, _ngZone: NgZone, _viewportRuler: ViewportRuler, _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>);\\n    /**\\n     * Returns the element that is being used as a placeholder\\n     * while the current element is being dragged.\\n     */\\n    getPlaceholderElement(): HTMLElement;\\n    /** Returns the root draggable element. */\\n    getRootElement(): HTMLElement;\\n    /** Registers the handles that can be used to drag the element. */\\n    withHandles(handles: (HTMLElement | ElementRef<HTMLElement>)[]): this;\\n    /**\\n     * Registers the template that should be used for the drag preview.\\n     * @param template Template that from which to stamp out the preview.\\n     */\\n    withPreviewTemplate(template: DragHelperTemplate | null): this;\\n    /**\\n     * Registers the template that should be used for the drag placeholder.\\n     * @param template Template that from which to stamp out the placeholder.\\n     */\\n    withPlaceholderTemplate(template: DragHelperTemplate | null): this;\\n    /**\\n     * Sets an alternate drag root element. The root element is the element that will be moved as\\n     * the user is dragging. Passing an alternate root element is useful when trying to enable\\n     * dragging on an element that you might not have access to.\\n     */\\n    withRootElement(rootElement: ElementRef<HTMLElement> | HTMLElement): this;\\n    /**\\n     * Element to which the draggable's position will be constrained.\\n     */\\n    withBoundaryElement(boundaryElement: ElementRef<HTMLElement> | HTMLElement | null): this;\\n    /** Removes the dragging functionality from the DOM element. */\\n    dispose(): void;\\n    /** Checks whether the element is currently being dragged. */\\n    isDragging(): boolean;\\n    /** Resets a standalone drag item to its initial position. */\\n    reset(): void;\\n    /**\\n     * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\\n     * @param handle Handle element that should be disabled.\\n     */\\n    disableHandle(handle: HTMLElement): void;\\n    /**\\n     * Enables a handle, if it has been disabled.\\n     * @param handle Handle element to be enabled.\\n     */\\n    enableHandle(handle: HTMLElement): void;\\n    /** Sets the layout direction of the draggable item. */\\n    withDirection(direction: Direction): this;\\n    /** Sets the container that the item is part of. */\\n    _withDropContainer(container: DropListRef): void;\\n    /**\\n     * Gets the current position in pixels the draggable outside of a drop container.\\n     */\\n    getFreeDragPosition(): Readonly<Point>;\\n    /**\\n     * Sets the current position in pixels the draggable outside of a drop container.\\n     * @param value New position to be set.\\n     */\\n    setFreeDragPosition(value: Point): this;\\n    /** Updates the item's sort order based on the last-known pointer position. */\\n    _sortFromLastPointerPosition(): void;\\n    /** Unsubscribes from the global subscriptions. */\\n    private _removeSubscriptions;\\n    /** Destroys the preview element and its ViewRef. */\\n    private _destroyPreview;\\n    /** Destroys the placeholder element and its ViewRef. */\\n    private _destroyPlaceholder;\\n    /** Handler for the `mousedown`/`touchstart` events. */\\n    private _pointerDown;\\n    /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\\n    private _pointerMove;\\n    /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\\n    private _pointerUp;\\n    /**\\n     * Clears subscriptions and stops the dragging sequence.\\n     * @param event Browser event object that ended the sequence.\\n     */\\n    private _endDragSequence;\\n    /** Starts the dragging sequence. */\\n    private _startDragSequence;\\n    /**\\n     * Sets up the different variables and subscriptions\\n     * that will be necessary for the dragging sequence.\\n     * @param referenceElement Element that started the drag sequence.\\n     * @param event Browser event object that started the sequence.\\n     */\\n    private _initializeDragSequence;\\n    /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\\n    private _cleanupDragArtifacts;\\n    /**\\n     * Updates the item's position in its drop container, or moves it\\n     * into a new one, depending on its current drag position.\\n     */\\n    private _updateActiveDropContainer;\\n    /**\\n     * Creates the element that will be rendered next to the user's pointer\\n     * and will be used as a preview of the element that is being dragged.\\n     */\\n    private _createPreviewElement;\\n    /**\\n     * Animates the preview element from its current position to the location of the drop placeholder.\\n     * @returns Promise that resolves when the animation completes.\\n     */\\n    private _animatePreviewToPlaceholder;\\n    /** Creates an element that will be shown instead of the current element while dragging. */\\n    private _createPlaceholderElement;\\n    /**\\n     * Figures out the coordinates at which an element was picked up.\\n     * @param referenceElement Element that initiated the dragging.\\n     * @param event Event that initiated the dragging.\\n     */\\n    private _getPointerPositionInElement;\\n    /** Determines the point of the page that was touched by the user. */\\n    private _getPointerPositionOnPage;\\n    /** Gets the pointer position on the page, accounting for any position constraints. */\\n    private _getConstrainedPointerPosition;\\n    /** Updates the current drag delta, based on the user's current pointer position on the page. */\\n    private _updatePointerDirectionDelta;\\n    /** Toggles the native drag interactions, based on how many handles are registered. */\\n    private _toggleNativeDragInteractions;\\n    /** Removes the manually-added event listeners from the root element. */\\n    private _removeRootElementListeners;\\n    /**\\n     * Applies a `transform` to the root element, taking into account any existing transforms on it.\\n     * @param x New transform value along the X axis.\\n     * @param y New transform value along the Y axis.\\n     */\\n    private _applyRootElementTransform;\\n    /**\\n     * Gets the distance that the user has dragged during the current drag sequence.\\n     * @param currentPosition Current position of the user's pointer.\\n     */\\n    private _getDragDistance;\\n    /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\\n    private _cleanupCachedDimensions;\\n    /**\\n     * Checks whether the element is still inside its boundary after the viewport has been resized.\\n     * If not, the position is adjusted so that the element fits again.\\n     */\\n    private _containInsideBoundaryOnResize;\\n}\\n/** Point on the page or within an element. */\\nexport interface Point {\\n    x: number;\\n    y: number;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-styling.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\ndeclare type Writeable<T> = {\\n    -readonly [P in keyof T]-?: T[P];\\n};\\n/**\\n * Extended CSSStyleDeclaration that includes a couple of drag-related\\n * properties that aren't in the built-in TS typings.\\n */\\ninterface DragCSSStyleDeclaration extends CSSStyleDeclaration {\\n    webkitUserDrag: string;\\n    MozUserSelect: string;\\n}\\n/**\\n * Shallow-extends a stylesheet object with another stylesheet object.\\n * @docs-private\\n */\\nexport declare function extendStyles(dest: Writeable<CSSStyleDeclaration>, source: Partial<DragCSSStyleDeclaration>): Writeable<CSSStyleDeclaration>;\\n/**\\n * Toggles whether the native drag interactions should be enabled for an element.\\n * @param element Element on which to toggle the drag interactions.\\n * @param enable Whether the drag interactions should be enabled.\\n * @docs-private\\n */\\nexport declare function toggleNativeDragInteractions(element: HTMLElement, enable: boolean): void;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drag-utils.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Moves an item one index in an array to another.\\n * @param array Array in which to move the item.\\n * @param fromIndex Starting index of the item.\\n * @param toIndex Index to which the item should be moved.\\n */\\nexport declare function moveItemInArray<T = any>(array: T[], fromIndex: number, toIndex: number): void;\\n/**\\n * Moves an item from one array to another.\\n * @param currentArray Array from which to transfer the item.\\n * @param targetArray Array into which to put the item.\\n * @param currentIndex Index of the item in its current array.\\n * @param targetIndex Index at which to insert the item.\\n */\\nexport declare function transferArrayItem<T = any>(currentArray: T[], targetArray: T[], currentIndex: number, targetIndex: number): void;\\n/**\\n * Copies an item from one array to another, leaving it in its\\n * original position in current array.\\n * @param currentArray Array from which to copy the item.\\n * @param targetArray Array into which is copy the item.\\n * @param currentIndex Index of the item in its current array.\\n * @param targetIndex Index at which to insert the item.\\n *\\n */\\nexport declare function copyArrayItem<T = any>(currentArray: T[], targetArray: T[], currentIndex: number, targetIndex: number): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/drop-list-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, NgZone } from '@angular/core';\\nimport { Direction } from '@angular/cdk/bidi';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { Subject } from 'rxjs';\\nimport { DragDropRegistry } from './drag-drop-registry';\\nimport { DragRefInternal as DragRef, Point } from './drag-ref';\\n/**\\n * Internal compile-time-only representation of a `DropListRef`.\\n * Used to avoid circular import issues between the `DropListRef` and the `DragRef`.\\n * @docs-private\\n */\\nexport interface DropListRefInternal extends DropListRef {\\n}\\n/**\\n * Reference to a drop list. Used to manipulate or dispose of the container.\\n * @docs-private\\n */\\nexport declare class DropListRef<T = any> {\\n    private _dragDropRegistry;\\n    private _ngZone;\\n    private _viewportRuler;\\n    /** Element that the drop list is attached to. */\\n    element: HTMLElement | ElementRef<HTMLElement>;\\n    /** Whether starting a dragging sequence from this container is disabled. */\\n    disabled: boolean;\\n    /** Whether sorting items within the list is disabled. */\\n    sortingDisabled: boolean;\\n    /** Locks the position of the draggable elements inside the container along the specified axis. */\\n    lockAxis: 'x' | 'y';\\n    /**\\n     * Whether auto-scrolling the view when the user\\n     * moves their pointer close to the edges is disabled.\\n     */\\n    autoScrollDisabled: boolean;\\n    /**\\n     * Function that is used to determine whether an item\\n     * is allowed to be moved into a drop container.\\n     */\\n    enterPredicate: (drag: DragRef, drop: DropListRef) => boolean;\\n    /** Emits right before dragging has started. */\\n    beforeStarted: Subject<void>;\\n    /**\\n     * Emits when the user has moved a new drag item into this container.\\n     */\\n    entered: Subject<{\\n        item: DragRef;\\n        container: DropListRef<any>;\\n        currentIndex: number;\\n    }>;\\n    /**\\n     * Emits when the user removes an item from the container\\n     * by dragging it into another container.\\n     */\\n    exited: Subject<{\\n        item: DragRef;\\n        container: DropListRef<any>;\\n    }>;\\n    /** Emits when the user drops an item inside the container. */\\n    dropped: Subject<{\\n        item: DragRef;\\n        currentIndex: number;\\n        previousIndex: number;\\n        container: DropListRef<any>;\\n        previousContainer: DropListRef<any>;\\n        isPointerOverContainer: boolean;\\n        distance: Point;\\n    }>;\\n    /** Emits as the user is swapping items while actively dragging. */\\n    sorted: Subject<{\\n        previousIndex: number;\\n        currentIndex: number;\\n        container: DropListRef<any>;\\n        item: DragRef;\\n    }>;\\n    /** Arbitrary data that can be attached to the drop list. */\\n    data: T;\\n    /** Whether an item in the list is being dragged. */\\n    private _isDragging;\\n    /** Cache of the dimensions of all the items inside the container. */\\n    private _itemPositions;\\n    /** Keeps track of the container's scroll position. */\\n    private _scrollPosition;\\n    /** Keeps track of the scroll position of the viewport. */\\n    private _viewportScrollPosition;\\n    /** Cached `ClientRect` of the drop list. */\\n    private _clientRect;\\n    /**\\n     * Draggable items that are currently active inside the container. Includes the items\\n     * from `_draggables`, as well as any items that have been dragged in, but haven't\\n     * been dropped yet.\\n     */\\n    private _activeDraggables;\\n    /**\\n     * Keeps track of the item that was last swapped with the dragged item, as\\n     * well as what direction the pointer was moving in when the swap occured.\\n     */\\n    private _previousSwap;\\n    /** Draggable items in the container. */\\n    private _draggables;\\n    /** Drop lists that are connected to the current one. */\\n    private _siblings;\\n    /** Direction in which the list is oriented. */\\n    private _orientation;\\n    /** Connected siblings that currently have a dragged item. */\\n    private _activeSiblings;\\n    /** Layout direction of the drop list. */\\n    private _direction;\\n    /** Subscription to the window being scrolled. */\\n    private _viewportScrollSubscription;\\n    /** Vertical direction in which the list is currently scrolling. */\\n    private _verticalScrollDirection;\\n    /** Horizontal direction in which the list is currently scrolling. */\\n    private _horizontalScrollDirection;\\n    /** Node that is being auto-scrolled. */\\n    private _scrollNode;\\n    /** Used to signal to the current auto-scroll sequence when to stop. */\\n    private _stopScrollTimers;\\n    /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */\\n    private _shadowRoot;\\n    constructor(element: ElementRef<HTMLElement> | HTMLElement, _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>, _document: any, _ngZone: NgZone, _viewportRuler: ViewportRuler);\\n    /** Removes the drop list functionality from the DOM element. */\\n    dispose(): void;\\n    /** Whether an item from this list is currently being dragged. */\\n    isDragging(): boolean;\\n    /** Starts dragging an item. */\\n    start(): void;\\n    /**\\n     * Emits an event to indicate that the user moved an item into the container.\\n     * @param item Item that was moved into the container.\\n     * @param pointerX Position of the item along the X axis.\\n     * @param pointerY Position of the item along the Y axis.\\n     */\\n    enter(item: DragRef, pointerX: number, pointerY: number): void;\\n    /**\\n     * Removes an item from the container after it was dragged into another container by the user.\\n     * @param item Item that was dragged out.\\n     */\\n    exit(item: DragRef): void;\\n    /**\\n     * Drops an item into this container.\\n     * @param item Item being dropped into the container.\\n     * @param currentIndex Index at which the item should be inserted.\\n     * @param previousContainer Container from which the item got dragged in.\\n     * @param isPointerOverContainer Whether the user's pointer was over the\\n     *    container when the item was dropped.\\n     * @param distance Distance the user has dragged since the start of the dragging sequence.\\n     */\\n    drop(item: DragRef, currentIndex: number, previousContainer: DropListRef, isPointerOverContainer: boolean, distance: Point): void;\\n    /**\\n     * Sets the draggable items that are a part of this list.\\n     * @param items Items that are a part of this list.\\n     */\\n    withItems(items: DragRef[]): this;\\n    /** Sets the layout direction of the drop list. */\\n    withDirection(direction: Direction): this;\\n    /**\\n     * Sets the containers that are connected to this one. When two or more containers are\\n     * connected, the user will be allowed to transfer items between them.\\n     * @param connectedTo Other containers that the current containers should be connected to.\\n     */\\n    connectedTo(connectedTo: DropListRef[]): this;\\n    /**\\n     * Sets the orientation of the container.\\n     * @param orientation New orientation for the container.\\n     */\\n    withOrientation(orientation: 'vertical' | 'horizontal'): this;\\n    /**\\n     * Figures out the index of an item in the container.\\n     * @param item Item whose index should be determined.\\n     */\\n    getItemIndex(item: DragRef): number;\\n    /**\\n     * Whether the list is able to receive the item that\\n     * is currently being dragged inside a connected drop list.\\n     */\\n    isReceiving(): boolean;\\n    /**\\n     * Sorts an item inside the container based on its position.\\n     * @param item Item to be sorted.\\n     * @param pointerX Position of the item along the X axis.\\n     * @param pointerY Position of the item along the Y axis.\\n     * @param pointerDelta Direction in which the pointer is moving along each axis.\\n     */\\n    _sortItem(item: DragRef, pointerX: number, pointerY: number, pointerDelta: {\\n        x: number;\\n        y: number;\\n    }): void;\\n    /**\\n     * Checks whether the user's pointer is close to the edges of either the\\n     * viewport or the drop list and starts the auto-scroll sequence.\\n     * @param pointerX User's pointer position along the x axis.\\n     * @param pointerY User's pointer position along the y axis.\\n     */\\n    _startScrollingIfNecessary(pointerX: number, pointerY: number): void;\\n    /** Stops any currently-running auto-scroll sequences. */\\n    _stopScrolling(): void;\\n    /** Caches the position of the drop list. */\\n    private _cacheOwnPosition;\\n    /** Refreshes the position cache of the items and sibling containers. */\\n    private _cacheItemPositions;\\n    /** Resets the container to its initial state. */\\n    private _reset;\\n    /**\\n     * Gets the offset in pixels by which the items that aren't being dragged should be moved.\\n     * @param currentIndex Index of the item currently being dragged.\\n     * @param siblings All of the items in the list.\\n     * @param delta Direction in which the user is moving.\\n     */\\n    private _getSiblingOffsetPx;\\n    /**\\n     * Checks whether the pointer coordinates are close to the drop container.\\n     * @param pointerX Coordinates along the X axis.\\n     * @param pointerY Coordinates along the Y axis.\\n     */\\n    private _isPointerNearDropContainer;\\n    /**\\n     * Gets the offset in pixels by which the item that is being dragged should be moved.\\n     * @param currentPosition Current position of the item.\\n     * @param newPosition Position of the item where the current item should be moved.\\n     * @param delta Direction in which the user is moving.\\n     */\\n    private _getItemOffsetPx;\\n    /**\\n     * Gets the index of an item in the drop container, based on the position of the user's pointer.\\n     * @param item Item that is being sorted.\\n     * @param pointerX Position of the user's pointer along the X axis.\\n     * @param pointerY Position of the user's pointer along the Y axis.\\n     * @param delta Direction in which the user is moving their pointer.\\n     */\\n    private _getItemIndexFromPointerPosition;\\n    /** Caches the current items in the list and their positions. */\\n    private _cacheItems;\\n    /**\\n     * Updates the internal state of the container after a scroll event has happened.\\n     * @param scrollPosition Object that is keeping track of the scroll position.\\n     * @param newTop New top scroll position.\\n     * @param newLeft New left scroll position.\\n     * @param extraClientRect Extra `ClientRect` object that should be updated, in addition to the\\n     *  ones of the drag items. Useful when the viewport has been scrolled and we also need to update\\n     *  the `ClientRect` of the list.\\n     */\\n    private _updateAfterScroll;\\n    /** Handles the container being scrolled. Has to be an arrow function to preserve the context. */\\n    private _handleScroll;\\n    /** Removes the event listeners associated with this drop list. */\\n    private _removeListeners;\\n    /** Starts the interval that'll auto-scroll the element. */\\n    private _startScrollInterval;\\n    /**\\n     * Checks whether the user's pointer is positioned over the container.\\n     * @param x Pointer position along the X axis.\\n     * @param y Pointer position along the Y axis.\\n     */\\n    _isOverContainer(x: number, y: number): boolean;\\n    /**\\n     * Figures out whether an item should be moved into a sibling\\n     * drop container, based on its current position.\\n     * @param item Drag item that is being moved.\\n     * @param x Position of the item along the X axis.\\n     * @param y Position of the item along the Y axis.\\n     */\\n    _getSiblingContainerFromPosition(item: DragRef, x: number, y: number): DropListRef | undefined;\\n    /**\\n     * Checks whether the drop list can receive the passed-in item.\\n     * @param item Item that is being dragged into the list.\\n     * @param x Position of the item along the X axis.\\n     * @param y Position of the item along the Y axis.\\n     */\\n    _canReceive(item: DragRef, x: number, y: number): boolean;\\n    /**\\n     * Called by one of the connected drop lists when a dragging sequence has started.\\n     * @param sibling Sibling in which dragging has started.\\n     */\\n    _startReceiving(sibling: DropListRef): void;\\n    /**\\n     * Called by a connected drop list when dragging has stopped.\\n     * @param sibling Sibling whose dragging has stopped.\\n     */\\n    _stopReceiving(sibling: DropListRef): void;\\n    /**\\n     * Starts listening to scroll events on the viewport.\\n     * Used for updating the internal state of the list.\\n     */\\n    private _listenToScrollEvents;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/index.d.ts\",\n      \"node_modules/@angular/cdk/drag-drop/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { CdkDropListInternal as ɵangular_material_src_cdk_drag_drop_drag_drop_a } from './directives/drop-list';\\nexport { CDK_DRAG_PARENT as ɵangular_material_src_cdk_drag_drop_drag_drop_b } from './drag-parent';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { DragDrop } from './drag-drop';\\nexport { DragRef, DragRefConfig } from './drag-ref';\\nexport { DropListRef } from './drop-list-ref';\\nexport * from './drag-events';\\nexport * from './drag-utils';\\nexport * from './drag-drop-module';\\nexport * from './drag-drop-registry';\\nexport { CdkDropList } from './directives/drop-list';\\nexport * from './directives/drop-list-group';\\nexport * from './directives/drag';\\nexport * from './directives/drag-handle';\\nexport * from './directives/drag-preview';\\nexport * from './directives/drag-placeholder';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/drag-drop/transition-duration.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\\nexport declare function getTransformTransitionDurationInMs(element: HTMLElement): number;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/index.d.ts\",\n      \"node_modules/@angular/cdk/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/keycodes/index.d.ts\",\n      \"node_modules/@angular/cdk/keycodes/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/keycodes/keycodes.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare const MAC_ENTER = 3;\\nexport declare const BACKSPACE = 8;\\nexport declare const TAB = 9;\\nexport declare const NUM_CENTER = 12;\\nexport declare const ENTER = 13;\\nexport declare const SHIFT = 16;\\nexport declare const CONTROL = 17;\\nexport declare const ALT = 18;\\nexport declare const PAUSE = 19;\\nexport declare const CAPS_LOCK = 20;\\nexport declare const ESCAPE = 27;\\nexport declare const SPACE = 32;\\nexport declare const PAGE_UP = 33;\\nexport declare const PAGE_DOWN = 34;\\nexport declare const END = 35;\\nexport declare const HOME = 36;\\nexport declare const LEFT_ARROW = 37;\\nexport declare const UP_ARROW = 38;\\nexport declare const RIGHT_ARROW = 39;\\nexport declare const DOWN_ARROW = 40;\\nexport declare const PLUS_SIGN = 43;\\nexport declare const PRINT_SCREEN = 44;\\nexport declare const INSERT = 45;\\nexport declare const DELETE = 46;\\nexport declare const ZERO = 48;\\nexport declare const ONE = 49;\\nexport declare const TWO = 50;\\nexport declare const THREE = 51;\\nexport declare const FOUR = 52;\\nexport declare const FIVE = 53;\\nexport declare const SIX = 54;\\nexport declare const SEVEN = 55;\\nexport declare const EIGHT = 56;\\nexport declare const NINE = 57;\\nexport declare const FF_SEMICOLON = 59;\\nexport declare const FF_EQUALS = 61;\\nexport declare const QUESTION_MARK = 63;\\nexport declare const AT_SIGN = 64;\\nexport declare const A = 65;\\nexport declare const B = 66;\\nexport declare const C = 67;\\nexport declare const D = 68;\\nexport declare const E = 69;\\nexport declare const F = 70;\\nexport declare const G = 71;\\nexport declare const H = 72;\\nexport declare const I = 73;\\nexport declare const J = 74;\\nexport declare const K = 75;\\nexport declare const L = 76;\\nexport declare const M = 77;\\nexport declare const N = 78;\\nexport declare const O = 79;\\nexport declare const P = 80;\\nexport declare const Q = 81;\\nexport declare const R = 82;\\nexport declare const S = 83;\\nexport declare const T = 84;\\nexport declare const U = 85;\\nexport declare const V = 86;\\nexport declare const W = 87;\\nexport declare const X = 88;\\nexport declare const Y = 89;\\nexport declare const Z = 90;\\nexport declare const META = 91;\\nexport declare const MAC_WK_CMD_LEFT = 91;\\nexport declare const MAC_WK_CMD_RIGHT = 93;\\nexport declare const CONTEXT_MENU = 93;\\nexport declare const NUMPAD_ZERO = 96;\\nexport declare const NUMPAD_ONE = 97;\\nexport declare const NUMPAD_TWO = 98;\\nexport declare const NUMPAD_THREE = 99;\\nexport declare const NUMPAD_FOUR = 100;\\nexport declare const NUMPAD_FIVE = 101;\\nexport declare const NUMPAD_SIX = 102;\\nexport declare const NUMPAD_SEVEN = 103;\\nexport declare const NUMPAD_EIGHT = 104;\\nexport declare const NUMPAD_NINE = 105;\\nexport declare const NUMPAD_MULTIPLY = 106;\\nexport declare const NUMPAD_PLUS = 107;\\nexport declare const NUMPAD_MINUS = 109;\\nexport declare const NUMPAD_PERIOD = 110;\\nexport declare const NUMPAD_DIVIDE = 111;\\nexport declare const F1 = 112;\\nexport declare const F2 = 113;\\nexport declare const F3 = 114;\\nexport declare const F4 = 115;\\nexport declare const F5 = 116;\\nexport declare const F6 = 117;\\nexport declare const F7 = 118;\\nexport declare const F8 = 119;\\nexport declare const F9 = 120;\\nexport declare const F10 = 121;\\nexport declare const F11 = 122;\\nexport declare const F12 = 123;\\nexport declare const NUM_LOCK = 144;\\nexport declare const SCROLL_LOCK = 145;\\nexport declare const FIRST_MEDIA = 166;\\nexport declare const FF_MINUS = 173;\\nexport declare const MUTE = 173;\\nexport declare const VOLUME_DOWN = 174;\\nexport declare const VOLUME_UP = 175;\\nexport declare const FF_MUTE = 181;\\nexport declare const FF_VOLUME_DOWN = 182;\\nexport declare const LAST_MEDIA = 183;\\nexport declare const FF_VOLUME_UP = 183;\\nexport declare const SEMICOLON = 186;\\nexport declare const EQUALS = 187;\\nexport declare const COMMA = 188;\\nexport declare const DASH = 189;\\nexport declare const SLASH = 191;\\nexport declare const APOSTROPHE = 192;\\nexport declare const TILDE = 192;\\nexport declare const OPEN_SQUARE_BRACKET = 219;\\nexport declare const BACKSLASH = 220;\\nexport declare const CLOSE_SQUARE_BRACKET = 221;\\nexport declare const SINGLE_QUOTE = 222;\\nexport declare const MAC_META = 224;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/keycodes/modifiers.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\ndeclare type ModifierKey = 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey';\\n/**\\n * Checks whether a modifier key is pressed.\\n * @param event Event to be checked.\\n */\\nexport declare function hasModifierKey(event: KeyboardEvent, ...modifiers: ModifierKey[]): boolean;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/keycodes/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './keycodes';\\nexport * from './modifiers';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/layout/breakpoints-observer.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { NgZone, OnDestroy } from '@angular/core';\\nimport { MediaMatcher } from './media-matcher';\\nimport { Observable } from 'rxjs';\\n/** The current state of a layout breakpoint. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface BreakpointState {\\n    /** Whether the breakpoint is currently matching. */\\n    matches: boolean;\\n    /**\\n     * A key boolean pair for each query provided to the observe method,\\n     * with its current matched state.\\n     */\\n    breakpoints: {\\n        [key: string]: boolean;\\n    };\\n}\\n/** Utility for checking the matching state of @media queries. */\\nexport declare class BreakpointObserver implements OnDestroy {\\n    private _mediaMatcher;\\n    private _zone;\\n    /**  A map of all media queries currently being listened for. */\\n    private _queries;\\n    /** A subject for all other observables to takeUntil based on. */\\n    private _destroySubject;\\n    constructor(_mediaMatcher: MediaMatcher, _zone: NgZone);\\n    /** Completes the active subject, signalling to all other observables to complete. */\\n    ngOnDestroy(): void;\\n    /**\\n     * Whether one or more media queries match the current viewport size.\\n     * @param value One or more media queries to check.\\n     * @returns Whether any of the media queries match.\\n     */\\n    isMatched(value: string | string[]): boolean;\\n    /**\\n     * Gets an observable of results for the given queries that will emit new results for any changes\\n     * in matching of the given queries.\\n     * @param value One or more media queries to check.\\n     * @returns A stream of matches for the given queries.\\n     */\\n    observe(value: string | string[]): Observable<BreakpointState>;\\n    /** Registers a specific query to be listened for. */\\n    private _registerQuery;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<BreakpointObserver>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<BreakpointObserver>;\\n}\\n\\n//# sourceMappingURL=breakpoints-observer.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/layout/breakpoints.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare const Breakpoints: {\\n    XSmall: string;\\n    Small: string;\\n    Medium: string;\\n    Large: string;\\n    XLarge: string;\\n    Handset: string;\\n    Tablet: string;\\n    Web: string;\\n    HandsetPortrait: string;\\n    TabletPortrait: string;\\n    WebPortrait: string;\\n    HandsetLandscape: string;\\n    TabletLandscape: string;\\n    WebLandscape: string;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/layout/index.d.ts\",\n      \"node_modules/@angular/cdk/layout/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/layout/layout-module.d.ts\"\n    ],\n    \"content\": \"import * as ɵngcc0 from '@angular/core';\\nexport declare class LayoutModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<LayoutModule, never, never, never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<LayoutModule>;\\n}\\n\\n//# sourceMappingURL=layout-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/layout/media-matcher.d.ts\"\n    ],\n    \"content\": \"import { Platform } from '@angular/cdk/platform';\\n/** A utility for calling matchMedia queries. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MediaMatcher {\\n    private _platform;\\n    /** The internal matchMedia method to return back a MediaQueryList like object. */\\n    private _matchMedia;\\n    constructor(_platform: Platform);\\n    /**\\n     * Evaluates the given media query and returns the native MediaQueryList from which results\\n     * can be retrieved.\\n     * Confirms the layout engine will trigger for the selector query provided and returns the\\n     * MediaQueryList for the query provided.\\n     */\\n    matchMedia(query: string): MediaQueryList;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MediaMatcher>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MediaMatcher>;\\n}\\n\\n//# sourceMappingURL=media-matcher.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/layout/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { LayoutModule } from './layout-module';\\nexport { BreakpointObserver, BreakpointState } from './breakpoints-observer';\\nexport { Breakpoints } from './breakpoints';\\nexport { MediaMatcher } from './media-matcher';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/observers/index.d.ts\",\n      \"node_modules/@angular/cdk/observers/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/observers/observe-content.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ElementRef, EventEmitter, NgZone, OnDestroy } from '@angular/core';\\nimport { Observable } from 'rxjs';\\n/**\\n * Factory that creates a new MutationObserver and allows us to stub it out in unit tests.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MutationObserverFactory {\\n    create(callback: MutationCallback): MutationObserver | null;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MutationObserverFactory>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MutationObserverFactory>;\\n}\\n/** An injectable service that allows watching elements for changes to their content. */\\nexport declare class ContentObserver implements OnDestroy {\\n    private _mutationObserverFactory;\\n    /** Keeps track of the existing MutationObservers so they can be reused. */\\n    private _observedElements;\\n    constructor(_mutationObserverFactory: MutationObserverFactory);\\n    ngOnDestroy(): void;\\n    /**\\n     * Observe content changes on an element.\\n     * @param element The element to observe for content changes.\\n     */\\n    observe(element: Element): Observable<MutationRecord[]>;\\n    /**\\n     * Observe content changes on an element.\\n     * @param element The element to observe for content changes.\\n     */\\n    observe(element: ElementRef<Element>): Observable<MutationRecord[]>;\\n    /**\\n     * Observes the given element by using the existing MutationObserver if available, or creating a\\n     * new one if not.\\n     */\\n    private _observeElement;\\n    /**\\n     * Un-observes the given element and cleans up the underlying MutationObserver if nobody else is\\n     * observing this element.\\n     */\\n    private _unobserveElement;\\n    /** Clean up the underlying MutationObserver for the specified element. */\\n    private _cleanupObserver;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ContentObserver>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ContentObserver>;\\n}\\n/**\\n * Directive that triggers a callback whenever the content of\\n * its associated element has changed.\\n */\\nexport declare class CdkObserveContent implements AfterContentInit, OnDestroy {\\n    private _contentObserver;\\n    private _elementRef;\\n    private _ngZone;\\n    /** Event emitted for each change in the element's content. */\\n    event: EventEmitter<MutationRecord[]>;\\n    /**\\n     * Whether observing content is disabled. This option can be used\\n     * to disconnect the underlying MutationObserver until it is needed.\\n     */\\n    disabled: any;\\n    private _disabled;\\n    /** Debounce interval for emitting the changes. */\\n    debounce: number;\\n    private _debounce;\\n    private _currentSubscription;\\n    constructor(_contentObserver: ContentObserver, _elementRef: ElementRef<HTMLElement>, _ngZone: NgZone);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    private _subscribe;\\n    private _unsubscribe;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkObserveContent>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkObserveContent, \\\"[cdkObserveContent]\\\", [\\\"cdkObserveContent\\\"], { 'disabled': \\\"cdkObserveContentDisabled\\\", 'debounce': \\\"debounce\\\" }, { 'event': \\\"cdkObserveContent\\\" }, never>;\\n}\\nexport declare class ObserversModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ObserversModule, [typeof CdkObserveContent], never, [typeof CdkObserveContent]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<ObserversModule>;\\n}\\n\\n//# sourceMappingURL=observe-content.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/observers/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './observe-content';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/fullscreen-overlay-container.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OnDestroy } from '@angular/core';\\nimport { OverlayContainer } from './overlay-container';\\n/**\\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\\n * Fullscreen mode\\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\\n *\\n * Should be provided in the root component.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class FullscreenOverlayContainer extends OverlayContainer implements OnDestroy {\\n    private _fullScreenEventName;\\n    private _fullScreenListener;\\n    constructor(_document: any);\\n    ngOnDestroy(): void;\\n    protected _createContainer(): void;\\n    private _adjustParentForFullscreenChange;\\n    private _addFullscreenChangeListener;\\n    private _getEventName;\\n    /**\\n     * When the page is put into fullscreen mode, a specific element is specified.\\n     * Only that element and its children are visible when in fullscreen mode.\\n     */\\n    getFullscreenElement(): Element;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FullscreenOverlayContainer>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<FullscreenOverlayContainer>;\\n}\\n\\n//# sourceMappingURL=fullscreen-overlay-container.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/index.d.ts\",\n      \"node_modules/@angular/cdk/overlay/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { OVERLAY_KEYBOARD_DISPATCHER_PROVIDER as ɵangular_material_src_cdk_overlay_overlay_g, OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY as ɵangular_material_src_cdk_overlay_overlay_f } from './keyboard/overlay-keyboard-dispatcher';\\nexport { OVERLAY_CONTAINER_PROVIDER as ɵangular_material_src_cdk_overlay_overlay_b, OVERLAY_CONTAINER_PROVIDER_FACTORY as ɵangular_material_src_cdk_overlay_overlay_a } from './overlay-container';\\nexport { CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY as ɵangular_material_src_cdk_overlay_overlay_c, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER as ɵangular_material_src_cdk_overlay_overlay_e, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_cdk_overlay_overlay_d } from './overlay-directives';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/keyboard/overlay-keyboard-dispatcher.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken, OnDestroy, Optional } from '@angular/core';\\nimport { OverlayRef } from '../overlay-ref';\\n/**\\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\\n * if any. It maintains a list of attached overlays to determine best suited overlay based\\n * on event target and order of overlay opens.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class OverlayKeyboardDispatcher implements OnDestroy {\\n    /** Currently attached overlays in the order they were attached. */\\n    _attachedOverlays: OverlayRef[];\\n    private _document;\\n    private _isAttached;\\n    constructor(document: any);\\n    ngOnDestroy(): void;\\n    /** Add a new overlay to the list of attached overlay refs. */\\n    add(overlayRef: OverlayRef): void;\\n    /** Remove an overlay from the list of attached overlay refs. */\\n    remove(overlayRef: OverlayRef): void;\\n    /** Detaches the global keyboard event listener. */\\n    private _detach;\\n    /** Keyboard event listener that will be attached to the body. */\\n    private _keydownListener;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<OverlayKeyboardDispatcher>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<OverlayKeyboardDispatcher>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY(dispatcher: OverlayKeyboardDispatcher, _document: any): OverlayKeyboardDispatcher;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const OVERLAY_KEYBOARD_DISPATCHER_PROVIDER: {\\n    provide: typeof OverlayKeyboardDispatcher;\\n    deps: (Optional[] | InjectionToken<any>)[];\\n    useFactory: typeof OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=overlay-keyboard-dispatcher.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { PositionStrategy } from './position/position-strategy';\\nimport { Direction, Directionality } from '@angular/cdk/bidi';\\nimport { ScrollStrategy } from './scroll/index';\\n/** Initial configuration used when creating an overlay. */\\nexport declare class OverlayConfig {\\n    /** Strategy with which to position the overlay. */\\n    positionStrategy?: PositionStrategy;\\n    /** Strategy to be used when handling scroll events while the overlay is open. */\\n    scrollStrategy?: ScrollStrategy;\\n    /** Custom class to add to the overlay pane. */\\n    panelClass?: string | string[];\\n    /** Whether the overlay has a backdrop. */\\n    hasBackdrop?: boolean;\\n    /** Custom class to add to the backdrop */\\n    backdropClass?: string | string[];\\n    /** The width of the overlay panel. If a number is provided, pixel units are assumed. */\\n    width?: number | string;\\n    /** The height of the overlay panel. If a number is provided, pixel units are assumed. */\\n    height?: number | string;\\n    /** The min-width of the overlay panel. If a number is provided, pixel units are assumed. */\\n    minWidth?: number | string;\\n    /** The min-height of the overlay panel. If a number is provided, pixel units are assumed. */\\n    minHeight?: number | string;\\n    /** The max-width of the overlay panel. If a number is provided, pixel units are assumed. */\\n    maxWidth?: number | string;\\n    /** The max-height of the overlay panel. If a number is provided, pixel units are assumed. */\\n    maxHeight?: number | string;\\n    /**\\n     * Direction of the text in the overlay panel. If a `Directionality` instance\\n     * is passed in, the overlay will handle changes to its value automatically.\\n     */\\n    direction?: Direction | Directionality;\\n    /**\\n     * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\\n     * Note that this usually doesn't include clicking on links (unless the user is using\\n     * the `HashLocationStrategy`).\\n     */\\n    disposeOnNavigation?: boolean;\\n    constructor(config?: OverlayConfig);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay-container.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken, OnDestroy, Optional } from '@angular/core';\\n/** Container inside which all overlays will render. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class OverlayContainer implements OnDestroy {\\n    protected _containerElement: HTMLElement;\\n    protected _document: Document;\\n    constructor(document: any);\\n    ngOnDestroy(): void;\\n    /**\\n     * This method returns the overlay container element. It will lazily\\n     * create the element the first time  it is called to facilitate using\\n     * the container in non-browser environments.\\n     * @returns the container element\\n     */\\n    getContainerElement(): HTMLElement;\\n    /**\\n     * Create the overlay container element, which is simply a div\\n     * with the 'cdk-overlay-container' class on the document body.\\n     */\\n    protected _createContainer(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<OverlayContainer>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<OverlayContainer>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function OVERLAY_CONTAINER_PROVIDER_FACTORY(parentContainer: OverlayContainer, _document: any): OverlayContainer;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const OVERLAY_CONTAINER_PROVIDER: {\\n    provide: typeof OverlayContainer;\\n    deps: (Optional[] | InjectionToken<any>)[];\\n    useFactory: typeof OVERLAY_CONTAINER_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=overlay-container.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay-directives.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Direction, Directionality } from '@angular/cdk/bidi';\\nimport { ElementRef, EventEmitter, InjectionToken, OnChanges, OnDestroy, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\\nimport { Overlay } from './overlay';\\nimport { OverlayRef } from './overlay-ref';\\nimport { ConnectedOverlayPositionChange } from './position/connected-position';\\nimport { ConnectedPosition } from './position/flexible-connected-position-strategy';\\nimport { RepositionScrollStrategy, ScrollStrategy } from './scroll/index';\\n/** Injection token that determines the scroll handling while the connected overlay is open. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/**\\n * Directive applied to an element to make it usable as an origin for an Overlay using a\\n * ConnectedPositionStrategy.\\n */\\nexport declare class CdkOverlayOrigin {\\n    /** Reference to the element on which the directive is applied. */\\n    elementRef: ElementRef;\\n    constructor(\\n    /** Reference to the element on which the directive is applied. */\\n    elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkOverlayOrigin>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkOverlayOrigin, \\\"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\\\", [\\\"cdkOverlayOrigin\\\"], {}, {}, never>;\\n}\\n/**\\n * Directive to facilitate declarative creation of an\\n * Overlay using a FlexibleConnectedPositionStrategy.\\n */\\nexport declare class CdkConnectedOverlay implements OnDestroy, OnChanges {\\n    private _overlay;\\n    private _dir;\\n    private _overlayRef;\\n    private _templatePortal;\\n    private _hasBackdrop;\\n    private _lockPosition;\\n    private _growAfterOpen;\\n    private _flexibleDimensions;\\n    private _push;\\n    private _backdropSubscription;\\n    private _offsetX;\\n    private _offsetY;\\n    private _position;\\n    private _scrollStrategyFactory;\\n    /** Origin for the connected overlay. */\\n    origin: CdkOverlayOrigin;\\n    /** Registered connected position pairs. */\\n    positions: ConnectedPosition[];\\n    /** The offset in pixels for the overlay connection point on the x-axis */\\n    offsetX: number;\\n    /** The offset in pixels for the overlay connection point on the y-axis */\\n    offsetY: number;\\n    /** The width of the overlay panel. */\\n    width: number | string;\\n    /** The height of the overlay panel. */\\n    height: number | string;\\n    /** The min width of the overlay panel. */\\n    minWidth: number | string;\\n    /** The min height of the overlay panel. */\\n    minHeight: number | string;\\n    /** The custom class to be set on the backdrop element. */\\n    backdropClass: string;\\n    /** The custom class to add to the overlay pane element. */\\n    panelClass: string | string[];\\n    /** Margin between the overlay and the viewport edges. */\\n    viewportMargin: number;\\n    /** Strategy to be used when handling scroll events while the overlay is open. */\\n    scrollStrategy: ScrollStrategy;\\n    /** Whether the overlay is open. */\\n    open: boolean;\\n    /** Whether or not the overlay should attach a backdrop. */\\n    hasBackdrop: any;\\n    /** Whether or not the overlay should be locked when scrolling. */\\n    lockPosition: any;\\n    /** Whether the overlay's width and height can be constrained to fit within the viewport. */\\n    flexibleDimensions: boolean;\\n    /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\\n    growAfterOpen: boolean;\\n    /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\\n    push: boolean;\\n    /** Event emitted when the backdrop is clicked. */\\n    backdropClick: EventEmitter<MouseEvent>;\\n    /** Event emitted when the position has changed. */\\n    positionChange: EventEmitter<ConnectedOverlayPositionChange>;\\n    /** Event emitted when the overlay has been attached. */\\n    attach: EventEmitter<void>;\\n    /** Event emitted when the overlay has been detached. */\\n    detach: EventEmitter<void>;\\n    /** Emits when there are keyboard events that are targeted at the overlay. */\\n    overlayKeydown: EventEmitter<KeyboardEvent>;\\n    constructor(_overlay: Overlay, templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, scrollStrategyFactory: any, _dir: Directionality);\\n    /** The associated overlay reference. */\\n    readonly overlayRef: OverlayRef;\\n    /** The element's layout direction. */\\n    readonly dir: Direction;\\n    ngOnDestroy(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    /** Creates an overlay */\\n    private _createOverlay;\\n    /** Builds the overlay config based on the directive's inputs */\\n    private _buildConfig;\\n    /** Updates the state of a position strategy, based on the values of the directive inputs. */\\n    private _updatePositionStrategy;\\n    /** Returns the position strategy of the overlay to be set on the overlay config */\\n    private _createPositionStrategy;\\n    /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\\n    private _attachOverlay;\\n    /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\\n    private _detachOverlay;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkConnectedOverlay>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkConnectedOverlay, \\\"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\\\", [\\\"cdkConnectedOverlay\\\"], { 'viewportMargin': \\\"cdkConnectedOverlayViewportMargin\\\", 'open': \\\"cdkConnectedOverlayOpen\\\", 'scrollStrategy': \\\"cdkConnectedOverlayScrollStrategy\\\", 'offsetX': \\\"cdkConnectedOverlayOffsetX\\\", 'offsetY': \\\"cdkConnectedOverlayOffsetY\\\", 'hasBackdrop': \\\"cdkConnectedOverlayHasBackdrop\\\", 'lockPosition': \\\"cdkConnectedOverlayLockPosition\\\", 'flexibleDimensions': \\\"cdkConnectedOverlayFlexibleDimensions\\\", 'growAfterOpen': \\\"cdkConnectedOverlayGrowAfterOpen\\\", 'push': \\\"cdkConnectedOverlayPush\\\", 'positions': \\\"cdkConnectedOverlayPositions\\\", 'origin': \\\"cdkConnectedOverlayOrigin\\\", 'width': \\\"cdkConnectedOverlayWidth\\\", 'height': \\\"cdkConnectedOverlayHeight\\\", 'minWidth': \\\"cdkConnectedOverlayMinWidth\\\", 'minHeight': \\\"cdkConnectedOverlayMinHeight\\\", 'backdropClass': \\\"cdkConnectedOverlayBackdropClass\\\", 'panelClass': \\\"cdkConnectedOverlayPanelClass\\\" }, { 'backdropClick': \\\"backdropClick\\\", 'positionChange': \\\"positionChange\\\", 'attach': \\\"attach\\\", 'detach': \\\"detach\\\", 'overlayKeydown': \\\"overlayKeydown\\\" }, never>;\\n}\\n/** @docs-private */\\nexport declare function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => RepositionScrollStrategy;\\n/** @docs-private */\\nexport declare const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=overlay-directives.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Provider } from '@angular/core';\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './overlay-directives';\\nimport * as ɵngcc2 from '@angular/cdk/bidi';\\nimport * as ɵngcc3 from '@angular/cdk/portal';\\nimport * as ɵngcc4 from '@angular/cdk/scrolling';\\nexport declare class OverlayModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<OverlayModule, [typeof ɵngcc1.CdkConnectedOverlay, typeof ɵngcc1.CdkOverlayOrigin], [typeof ɵngcc2.BidiModule, typeof ɵngcc3.PortalModule, typeof ɵngcc4.ScrollingModule], [typeof ɵngcc1.CdkConnectedOverlay, typeof ɵngcc1.CdkOverlayOrigin, typeof ɵngcc4.ScrollingModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<OverlayModule>;\\n}\\n/**\\n * @deprecated Use `OverlayModule` instead.\\n * @breaking-change 8.0.0\\n * @docs-private\\n */\\nexport declare const OVERLAY_PROVIDERS: Provider[];\\n\\n//# sourceMappingURL=overlay-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Direction, Directionality } from '@angular/cdk/bidi';\\nimport { ComponentPortal, PortalOutlet, TemplatePortal } from '@angular/cdk/portal';\\nimport { ComponentRef, EmbeddedViewRef, NgZone } from '@angular/core';\\nimport { Location } from '@angular/common';\\nimport { Observable, Subject } from 'rxjs';\\nimport { OverlayKeyboardDispatcher } from './keyboard/overlay-keyboard-dispatcher';\\nimport { OverlayConfig } from './overlay-config';\\nimport { OverlayReference } from './overlay-reference';\\nimport { PositionStrategy } from './position/position-strategy';\\nimport { ScrollStrategy } from './scroll';\\n/** An object where all of its properties cannot be written. */\\nexport declare type ImmutableObject<T> = {\\n    readonly [P in keyof T]: T[P];\\n};\\n/**\\n * Reference to an overlay that has been created with the Overlay service.\\n * Used to manipulate or dispose of said overlay.\\n */\\nexport declare class OverlayRef implements PortalOutlet, OverlayReference {\\n    private _portalOutlet;\\n    private _host;\\n    private _pane;\\n    private _config;\\n    private _ngZone;\\n    private _keyboardDispatcher;\\n    private _document;\\n    private _location?;\\n    private _backdropElement;\\n    private _backdropClick;\\n    private _attachments;\\n    private _detachments;\\n    private _positionStrategy;\\n    private _scrollStrategy;\\n    private _locationChanges;\\n    private _backdropClickHandler;\\n    /**\\n     * Reference to the parent of the `_host` at the time it was detached. Used to restore\\n     * the `_host` to its original position in the DOM when it gets re-attached.\\n     */\\n    private _previousHostParent;\\n    private _keydownEventsObservable;\\n    /** Stream of keydown events dispatched to this overlay. */\\n    _keydownEvents: Subject<KeyboardEvent>;\\n    /** Amount of subscriptions to the keydown events. */\\n    _keydownEventSubscriptions: number;\\n    constructor(_portalOutlet: PortalOutlet, _host: HTMLElement, _pane: HTMLElement, _config: ImmutableObject<OverlayConfig>, _ngZone: NgZone, _keyboardDispatcher: OverlayKeyboardDispatcher, _document: Document, _location?: Location | undefined);\\n    /** The overlay's HTML element */\\n    readonly overlayElement: HTMLElement;\\n    /** The overlay's backdrop HTML element. */\\n    readonly backdropElement: HTMLElement | null;\\n    /**\\n     * Wrapper around the panel element. Can be used for advanced\\n     * positioning where a wrapper with specific styling is\\n     * required around the overlay pane.\\n     */\\n    readonly hostElement: HTMLElement;\\n    attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    attach<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;\\n    attach(portal: any): any;\\n    /**\\n     * Detaches an overlay from a portal.\\n     * @returns The portal detachment result.\\n     */\\n    detach(): any;\\n    /** Cleans up the overlay from the DOM. */\\n    dispose(): void;\\n    /** Whether the overlay has attached content. */\\n    hasAttached(): boolean;\\n    /** Gets an observable that emits when the backdrop has been clicked. */\\n    backdropClick(): Observable<MouseEvent>;\\n    /** Gets an observable that emits when the overlay has been attached. */\\n    attachments(): Observable<void>;\\n    /** Gets an observable that emits when the overlay has been detached. */\\n    detachments(): Observable<void>;\\n    /** Gets an observable of keydown events targeted to this overlay. */\\n    keydownEvents(): Observable<KeyboardEvent>;\\n    /** Gets the current overlay configuration, which is immutable. */\\n    getConfig(): OverlayConfig;\\n    /** Updates the position of the overlay based on the position strategy. */\\n    updatePosition(): void;\\n    /** Switches to a new position strategy and updates the overlay position. */\\n    updatePositionStrategy(strategy: PositionStrategy): void;\\n    /** Update the size properties of the overlay. */\\n    updateSize(sizeConfig: OverlaySizeConfig): void;\\n    /** Sets the LTR/RTL direction for the overlay. */\\n    setDirection(dir: Direction | Directionality): void;\\n    /** Add a CSS class or an array of classes to the overlay pane. */\\n    addPanelClass(classes: string | string[]): void;\\n    /** Remove a CSS class or an array of classes from the overlay pane. */\\n    removePanelClass(classes: string | string[]): void;\\n    /**\\n     * Returns the layout direction of the overlay panel.\\n     */\\n    getDirection(): Direction;\\n    /** Switches to a new scroll strategy. */\\n    updateScrollStrategy(strategy: ScrollStrategy): void;\\n    /** Updates the text direction of the overlay panel. */\\n    private _updateElementDirection;\\n    /** Updates the size of the overlay element based on the overlay config. */\\n    private _updateElementSize;\\n    /** Toggles the pointer events for the overlay pane element. */\\n    private _togglePointerEvents;\\n    /** Attaches a backdrop for this overlay. */\\n    private _attachBackdrop;\\n    /**\\n     * Updates the stacking order of the element, moving it to the top if necessary.\\n     * This is required in cases where one overlay was detached, while another one,\\n     * that should be behind it, was destroyed. The next time both of them are opened,\\n     * the stacking will be wrong, because the detached element's pane will still be\\n     * in its original DOM position.\\n     */\\n    private _updateStackingOrder;\\n    /** Detaches the backdrop (if any) associated with the overlay. */\\n    detachBackdrop(): void;\\n    /** Toggles a single CSS class or an array of classes on an element. */\\n    private _toggleClasses;\\n    /** Detaches the overlay content next time the zone stabilizes. */\\n    private _detachContentWhenStable;\\n    /** Disposes of a scroll strategy. */\\n    private _disposeScrollStrategy;\\n}\\n/** Size properties for an overlay. */\\nexport interface OverlaySizeConfig {\\n    width?: number | string;\\n    height?: number | string;\\n    minWidth?: number | string;\\n    minHeight?: number | string;\\n    maxWidth?: number | string;\\n    maxHeight?: number | string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay-reference.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Portal } from '@angular/cdk/portal';\\nimport { Direction, Directionality } from '@angular/cdk/bidi';\\n/**\\n * Basic interface for an overlay. Used to avoid circular type references between\\n * `OverlayRef`, `PositionStrategy` and `ScrollStrategy`, and `OverlayConfig`.\\n * @docs-private\\n */\\nexport interface OverlayReference {\\n    attach: (portal: Portal<any>) => any;\\n    detach: () => any;\\n    dispose: () => void;\\n    overlayElement: HTMLElement;\\n    hostElement: HTMLElement;\\n    getConfig: () => any;\\n    hasAttached: () => boolean;\\n    updateSize: (config: any) => void;\\n    updatePosition: () => void;\\n    getDirection: () => Direction;\\n    setDirection: (dir: Direction | Directionality) => void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/overlay.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { Location } from '@angular/common';\\nimport { ComponentFactoryResolver, Injector, NgZone } from '@angular/core';\\nimport { OverlayKeyboardDispatcher } from './keyboard/overlay-keyboard-dispatcher';\\nimport { OverlayConfig } from './overlay-config';\\nimport { OverlayContainer } from './overlay-container';\\nimport { OverlayRef } from './overlay-ref';\\nimport { OverlayPositionBuilder } from './position/overlay-position-builder';\\nimport { ScrollStrategyOptions } from './scroll/index';\\n/**\\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\\n * of re-usable components rather than developers building end-user applications.\\n *\\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class Overlay {\\n    /** Scrolling strategies that can be used when creating an overlay. */\\n    scrollStrategies: ScrollStrategyOptions;\\n    private _overlayContainer;\\n    private _componentFactoryResolver;\\n    private _positionBuilder;\\n    private _keyboardDispatcher;\\n    private _injector;\\n    private _ngZone;\\n    private _document;\\n    private _directionality;\\n    private _location?;\\n    private _appRef;\\n    constructor(\\n    /** Scrolling strategies that can be used when creating an overlay. */\\n    scrollStrategies: ScrollStrategyOptions, _overlayContainer: OverlayContainer, _componentFactoryResolver: ComponentFactoryResolver, _positionBuilder: OverlayPositionBuilder, _keyboardDispatcher: OverlayKeyboardDispatcher, _injector: Injector, _ngZone: NgZone, _document: any, _directionality: Directionality, _location?: Location | undefined);\\n    /**\\n     * Creates an overlay.\\n     * @param config Configuration applied to the overlay.\\n     * @returns Reference to the created overlay.\\n     */\\n    create(config?: OverlayConfig): OverlayRef;\\n    /**\\n     * Gets a position builder that can be used, via fluent API,\\n     * to construct and configure a position strategy.\\n     * @returns An overlay position builder.\\n     */\\n    position(): OverlayPositionBuilder;\\n    /**\\n     * Creates the DOM element for an overlay and appends it to the overlay container.\\n     * @returns Newly-created pane element\\n     */\\n    private _createPaneElement;\\n    /**\\n     * Creates the host element that wraps around an overlay\\n     * and can be used for advanced positioning.\\n     * @returns Newly-create host element.\\n     */\\n    private _createHostElement;\\n    /**\\n     * Create a DomPortalOutlet into which the overlay content can be loaded.\\n     * @param pane The DOM element to turn into a portal outlet.\\n     * @returns A portal outlet for the given DOM element.\\n     */\\n    private _createPortalOutlet;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Overlay>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Overlay>;\\n}\\n\\n//# sourceMappingURL=overlay.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/connected-position-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { CdkScrollable, ViewportRuler } from '@angular/cdk/scrolling';\\nimport { ElementRef } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport { OverlayContainer } from '../overlay-container';\\nimport { OverlayReference } from '../overlay-reference';\\nimport { ConnectedOverlayPositionChange, ConnectionPositionPair, OriginConnectionPosition, OverlayConnectionPosition } from './connected-position';\\nimport { FlexibleConnectedPositionStrategy } from './flexible-connected-position-strategy';\\nimport { PositionStrategy } from './position-strategy';\\n/**\\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\\n * implicit position relative to some origin element. The relative position is defined in terms of\\n * a point on the origin element that is connected to a point on the overlay element. For example,\\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\\n * of the overlay.\\n * @deprecated Use `FlexibleConnectedPositionStrategy` instead.\\n * @breaking-change 8.0.0\\n */\\nexport declare class ConnectedPositionStrategy implements PositionStrategy {\\n    /**\\n     * Reference to the underlying position strategy to which all the API calls are proxied.\\n     * @docs-private\\n     */\\n    _positionStrategy: FlexibleConnectedPositionStrategy;\\n    /** The overlay to which this strategy is attached. */\\n    private _overlayRef;\\n    private _direction;\\n    /** Whether the we're dealing with an RTL context */\\n    readonly _isRtl: boolean;\\n    /** Ordered list of preferred positions, from most to least desirable. */\\n    _preferredPositions: ConnectionPositionPair[];\\n    /** Emits an event when the connection point changes. */\\n    readonly onPositionChange: Observable<ConnectedOverlayPositionChange>;\\n    constructor(originPos: OriginConnectionPosition, overlayPos: OverlayConnectionPosition, connectedTo: ElementRef<HTMLElement>, viewportRuler: ViewportRuler, document: Document, platform: Platform, overlayContainer: OverlayContainer);\\n    /** Ordered list of preferred positions, from most to least desirable. */\\n    readonly positions: ConnectionPositionPair[];\\n    /** Attach this position strategy to an overlay. */\\n    attach(overlayRef: OverlayReference): void;\\n    /** Disposes all resources used by the position strategy. */\\n    dispose(): void;\\n    /** @docs-private */\\n    detach(): void;\\n    /**\\n     * Updates the position of the overlay element, using whichever preferred position relative\\n     * to the origin fits on-screen.\\n     * @docs-private\\n     */\\n    apply(): void;\\n    /**\\n     * Re-positions the overlay element with the trigger in its last calculated position,\\n     * even if a position higher in the \\\"preferred positions\\\" list would now fit. This\\n     * allows one to re-align the panel without changing the orientation of the panel.\\n     */\\n    recalculateLastPosition(): void;\\n    /**\\n     * Sets the list of Scrollable containers that host the origin element so that\\n     * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\\n     * Scrollable must be an ancestor element of the strategy's origin element.\\n     */\\n    withScrollableContainers(scrollables: CdkScrollable[]): void;\\n    /**\\n     * Adds a new preferred fallback position.\\n     * @param originPos\\n     * @param overlayPos\\n     */\\n    withFallbackPosition(originPos: OriginConnectionPosition, overlayPos: OverlayConnectionPosition, offsetX?: number, offsetY?: number): this;\\n    /**\\n     * Sets the layout direction so the overlay's position can be adjusted to match.\\n     * @param dir New layout direction.\\n     */\\n    withDirection(dir: 'ltr' | 'rtl'): this;\\n    /**\\n     * Sets an offset for the overlay's connection point on the x-axis\\n     * @param offset New offset in the X axis.\\n     */\\n    withOffsetX(offset: number): this;\\n    /**\\n     * Sets an offset for the overlay's connection point on the y-axis\\n     * @param  offset New offset in the Y axis.\\n     */\\n    withOffsetY(offset: number): this;\\n    /**\\n     * Sets whether the overlay's position should be locked in after it is positioned\\n     * initially. When an overlay is locked in, it won't attempt to reposition itself\\n     * when the position is re-applied (e.g. when the user scrolls away).\\n     * @param isLocked Whether the overlay should locked in.\\n     */\\n    withLockedPosition(isLocked: boolean): this;\\n    /**\\n     * Overwrites the current set of positions with an array of new ones.\\n     * @param positions Position pairs to be set on the strategy.\\n     */\\n    withPositions(positions: ConnectionPositionPair[]): this;\\n    /**\\n     * Sets the origin element, relative to which to position the overlay.\\n     * @param origin Reference to the new origin element.\\n     */\\n    setOrigin(origin: ElementRef): this;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/connected-position.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare type HorizontalConnectionPos = 'start' | 'center' | 'end';\\n/** Vertical dimension of a connection point on the perimeter of the origin or overlay element. */\\nexport declare type VerticalConnectionPos = 'top' | 'center' | 'bottom';\\n/** A connection point on the origin element. */\\nexport interface OriginConnectionPosition {\\n    originX: HorizontalConnectionPos;\\n    originY: VerticalConnectionPos;\\n}\\n/** A connection point on the overlay element. */\\nexport interface OverlayConnectionPosition {\\n    overlayX: HorizontalConnectionPos;\\n    overlayY: VerticalConnectionPos;\\n}\\n/** The points of the origin element and the overlay element to connect. */\\nexport declare class ConnectionPositionPair {\\n    /** Offset along the X axis. */\\n    offsetX?: number | undefined;\\n    /** Offset along the Y axis. */\\n    offsetY?: number | undefined;\\n    /** Class(es) to be applied to the panel while this position is active. */\\n    panelClass?: string | string[] | undefined;\\n    /** X-axis attachment point for connected overlay origin. Can be 'start', 'end', or 'center'. */\\n    originX: HorizontalConnectionPos;\\n    /** Y-axis attachment point for connected overlay origin. Can be 'top', 'bottom', or 'center'. */\\n    originY: VerticalConnectionPos;\\n    /** X-axis attachment point for connected overlay. Can be 'start', 'end', or 'center'. */\\n    overlayX: HorizontalConnectionPos;\\n    /** Y-axis attachment point for connected overlay. Can be 'top', 'bottom', or 'center'. */\\n    overlayY: VerticalConnectionPos;\\n    constructor(origin: OriginConnectionPosition, overlay: OverlayConnectionPosition, \\n    /** Offset along the X axis. */\\n    offsetX?: number | undefined, \\n    /** Offset along the Y axis. */\\n    offsetY?: number | undefined, \\n    /** Class(es) to be applied to the panel while this position is active. */\\n    panelClass?: string | string[] | undefined);\\n}\\n/**\\n * Set of properties regarding the position of the origin and overlay relative to the viewport\\n * with respect to the containing Scrollable elements.\\n *\\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\\n *\\n * The overlay and origin are outside view if there is no overlap between their bounding client\\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\\n *\\n *       -----------                    -----------\\n *       | outside |                    | clipped |\\n *       |  view   |              --------------------------\\n *       |         |              |     |         |        |\\n *       ----------               |     -----------        |\\n *  --------------------------    |                        |\\n *  |                        |    |      Scrollable        |\\n *  |                        |    |                        |\\n *  |                        |     --------------------------\\n *  |      Scrollable        |\\n *  |                        |\\n *  --------------------------\\n *\\n *  @docs-private\\n */\\nexport declare class ScrollingVisibility {\\n    isOriginClipped: boolean;\\n    isOriginOutsideView: boolean;\\n    isOverlayClipped: boolean;\\n    isOverlayOutsideView: boolean;\\n}\\n/** The change event emitted by the strategy when a fallback position is used. */\\nexport declare class ConnectedOverlayPositionChange {\\n    /** The position used as a result of this change. */\\n    connectionPair: ConnectionPositionPair;\\n    /** @docs-private */\\n    scrollableViewProperties: ScrollingVisibility;\\n    constructor(\\n    /** The position used as a result of this change. */\\n    connectionPair: ConnectionPositionPair, \\n    /** @docs-private */\\n    scrollableViewProperties: ScrollingVisibility);\\n}\\n/**\\n * Validates whether a vertical position property matches the expected values.\\n * @param property Name of the property being validated.\\n * @param value Value of the property being validated.\\n * @docs-private\\n */\\nexport declare function validateVerticalPosition(property: string, value: VerticalConnectionPos): void;\\n/**\\n * Validates whether a horizontal position property matches the expected values.\\n * @param property Name of the property being validated.\\n * @param value Value of the property being validated.\\n * @docs-private\\n */\\nexport declare function validateHorizontalPosition(property: string, value: HorizontalConnectionPos): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/flexible-connected-position-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { PositionStrategy } from './position-strategy';\\nimport { ElementRef } from '@angular/core';\\nimport { ViewportRuler, CdkScrollable } from '@angular/cdk/scrolling';\\nimport { ConnectedOverlayPositionChange, ConnectionPositionPair } from './connected-position';\\nimport { Observable } from 'rxjs';\\nimport { OverlayReference } from '../overlay-reference';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { OverlayContainer } from '../overlay-container';\\n/** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */\\nexport declare type FlexibleConnectedPositionStrategyOrigin = ElementRef | HTMLElement | Point & {\\n    width?: number;\\n    height?: number;\\n};\\n/**\\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\\n * implicit position relative some origin element. The relative position is defined in terms of\\n * a point on the origin element that is connected to a point on the overlay element. For example,\\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\\n * of the overlay.\\n */\\nexport declare class FlexibleConnectedPositionStrategy implements PositionStrategy {\\n    private _viewportRuler;\\n    private _document;\\n    private _platform;\\n    private _overlayContainer;\\n    /** The overlay to which this strategy is attached. */\\n    private _overlayRef;\\n    /** Whether we're performing the very first positioning of the overlay. */\\n    private _isInitialRender;\\n    /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\\n    private _lastBoundingBoxSize;\\n    /** Whether the overlay was pushed in a previous positioning. */\\n    private _isPushed;\\n    /** Whether the overlay can be pushed on-screen on the initial open. */\\n    private _canPush;\\n    /** Whether the overlay can grow via flexible width/height after the initial open. */\\n    private _growAfterOpen;\\n    /** Whether the overlay's width and height can be constrained to fit within the viewport. */\\n    private _hasFlexibleDimensions;\\n    /** Whether the overlay position is locked. */\\n    private _positionLocked;\\n    /** Cached origin dimensions */\\n    private _originRect;\\n    /** Cached overlay dimensions */\\n    private _overlayRect;\\n    /** Cached viewport dimensions */\\n    private _viewportRect;\\n    /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\\n    private _viewportMargin;\\n    /** The Scrollable containers used to check scrollable view properties on position change. */\\n    private _scrollables;\\n    /** Ordered list of preferred positions, from most to least desirable. */\\n    _preferredPositions: ConnectionPositionPair[];\\n    /** The origin element against which the overlay will be positioned. */\\n    private _origin;\\n    /** The overlay pane element. */\\n    private _pane;\\n    /** Whether the strategy has been disposed of already. */\\n    private _isDisposed;\\n    /**\\n     * Parent element for the overlay panel used to constrain the overlay panel's size to fit\\n     * within the viewport.\\n     */\\n    private _boundingBox;\\n    /** The last position to have been calculated as the best fit position. */\\n    private _lastPosition;\\n    /** Subject that emits whenever the position changes. */\\n    private _positionChanges;\\n    /** Subscription to viewport size changes. */\\n    private _resizeSubscription;\\n    /** Default offset for the overlay along the x axis. */\\n    private _offsetX;\\n    /** Default offset for the overlay along the y axis. */\\n    private _offsetY;\\n    /** Selector to be used when finding the elements on which to set the transform origin. */\\n    private _transformOriginSelector;\\n    /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\\n    private _appliedPanelClasses;\\n    /** Amount by which the overlay was pushed in each axis during the last time it was positioned. */\\n    private _previousPushAmount;\\n    /** Observable sequence of position changes. */\\n    positionChanges: Observable<ConnectedOverlayPositionChange>;\\n    /** Ordered list of preferred positions, from most to least desirable. */\\n    readonly positions: ConnectionPositionPair[];\\n    constructor(connectedTo: FlexibleConnectedPositionStrategyOrigin, _viewportRuler: ViewportRuler, _document: Document, _platform: Platform, _overlayContainer: OverlayContainer);\\n    /** Attaches this position strategy to an overlay. */\\n    attach(overlayRef: OverlayReference): void;\\n    /**\\n     * Updates the position of the overlay element, using whichever preferred position relative\\n     * to the origin best fits on-screen.\\n     *\\n     * The selection of a position goes as follows:\\n     *  - If any positions fit completely within the viewport as-is,\\n     *      choose the first position that does so.\\n     *  - If flexible dimensions are enabled and at least one satifies the given minimum width/height,\\n     *      choose the position with the greatest available size modified by the positions' weight.\\n     *  - If pushing is enabled, take the position that went off-screen the least and push it\\n     *      on-screen.\\n     *  - If none of the previous criteria were met, use the position that goes off-screen the least.\\n     * @docs-private\\n     */\\n    apply(): void;\\n    detach(): void;\\n    /** Cleanup after the element gets destroyed. */\\n    dispose(): void;\\n    /**\\n     * This re-aligns the overlay element with the trigger in its last calculated position,\\n     * even if a position higher in the \\\"preferred positions\\\" list would now fit. This\\n     * allows one to re-align the panel without changing the orientation of the panel.\\n     */\\n    reapplyLastPosition(): void;\\n    /**\\n     * Sets the list of Scrollable containers that host the origin element so that\\n     * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\\n     * Scrollable must be an ancestor element of the strategy's origin element.\\n     */\\n    withScrollableContainers(scrollables: CdkScrollable[]): this;\\n    /**\\n     * Adds new preferred positions.\\n     * @param positions List of positions options for this overlay.\\n     */\\n    withPositions(positions: ConnectedPosition[]): this;\\n    /**\\n     * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\\n     * @param margin Required margin between the overlay and the viewport edge in pixels.\\n     */\\n    withViewportMargin(margin: number): this;\\n    /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\\n    withFlexibleDimensions(flexibleDimensions?: boolean): this;\\n    /** Sets whether the overlay can grow after the initial open via flexible width/height. */\\n    withGrowAfterOpen(growAfterOpen?: boolean): this;\\n    /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\\n    withPush(canPush?: boolean): this;\\n    /**\\n     * Sets whether the overlay's position should be locked in after it is positioned\\n     * initially. When an overlay is locked in, it won't attempt to reposition itself\\n     * when the position is re-applied (e.g. when the user scrolls away).\\n     * @param isLocked Whether the overlay should locked in.\\n     */\\n    withLockedPosition(isLocked?: boolean): this;\\n    /**\\n     * Sets the origin, relative to which to position the overlay.\\n     * Using an element origin is useful for building components that need to be positioned\\n     * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\\n     * used for cases like contextual menus which open relative to the user's pointer.\\n     * @param origin Reference to the new origin.\\n     */\\n    setOrigin(origin: FlexibleConnectedPositionStrategyOrigin): this;\\n    /**\\n     * Sets the default offset for the overlay's connection point on the x-axis.\\n     * @param offset New offset in the X axis.\\n     */\\n    withDefaultOffsetX(offset: number): this;\\n    /**\\n     * Sets the default offset for the overlay's connection point on the y-axis.\\n     * @param offset New offset in the Y axis.\\n     */\\n    withDefaultOffsetY(offset: number): this;\\n    /**\\n     * Configures that the position strategy should set a `transform-origin` on some elements\\n     * inside the overlay, depending on the current position that is being applied. This is\\n     * useful for the cases where the origin of an animation can change depending on the\\n     * alignment of the overlay.\\n     * @param selector CSS selector that will be used to find the target\\n     *    elements onto which to set the transform origin.\\n     */\\n    withTransformOriginOn(selector: string): this;\\n    /**\\n     * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\\n     */\\n    private _getOriginPoint;\\n    /**\\n     * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\\n     * origin point to which the overlay should be connected.\\n     */\\n    private _getOverlayPoint;\\n    /** Gets how well an overlay at the given point will fit within the viewport. */\\n    private _getOverlayFit;\\n    /**\\n     * Whether the overlay can fit within the viewport when it may resize either its width or height.\\n     * @param fit How well the overlay fits in the viewport at some position.\\n     * @param point The (x, y) coordinates of the overlat at some position.\\n     * @param viewport The geometry of the viewport.\\n     */\\n    private _canFitWithFlexibleDimensions;\\n    /**\\n     * Gets the point at which the overlay can be \\\"pushed\\\" on-screen. If the overlay is larger than\\n     * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\\n     * right and bottom).\\n     *\\n     * @param start Starting point from which the overlay is pushed.\\n     * @param overlay Dimensions of the overlay.\\n     * @param scrollPosition Current viewport scroll position.\\n     * @returns The point at which to position the overlay after pushing. This is effectively a new\\n     *     originPoint.\\n     */\\n    private _pushOverlayOnScreen;\\n    /**\\n     * Applies a computed position to the overlay and emits a position change.\\n     * @param position The position preference\\n     * @param originPoint The point on the origin element where the overlay is connected.\\n     */\\n    private _applyPosition;\\n    /** Sets the transform origin based on the configured selector and the passed-in position.  */\\n    private _setTransformOrigin;\\n    /**\\n     * Gets the position and size of the overlay's sizing container.\\n     *\\n     * This method does no measuring and applies no styles so that we can cheaply compute the\\n     * bounds for all positions and choose the best fit based on these results.\\n     */\\n    private _calculateBoundingBoxRect;\\n    /**\\n     * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\\n     * origin's connection point and stetches to the bounds of the viewport.\\n     *\\n     * @param origin The point on the origin element where the overlay is connected.\\n     * @param position The position preference\\n     */\\n    private _setBoundingBoxStyles;\\n    /** Resets the styles for the bounding box so that a new positioning can be computed. */\\n    private _resetBoundingBoxStyles;\\n    /** Resets the styles for the overlay pane so that a new positioning can be computed. */\\n    private _resetOverlayElementStyles;\\n    /** Sets positioning styles to the overlay element. */\\n    private _setOverlayElementStyles;\\n    /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\\n    private _getExactOverlayY;\\n    /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\\n    private _getExactOverlayX;\\n    /**\\n     * Gets the view properties of the trigger and overlay, including whether they are clipped\\n     * or completely outside the view of any of the strategy's scrollables.\\n     */\\n    private _getScrollVisibility;\\n    /** Subtracts the amount that an element is overflowing on an axis from its length. */\\n    private _subtractOverflows;\\n    /** Narrows the given viewport rect by the current _viewportMargin. */\\n    private _getNarrowedViewportRect;\\n    /** Whether the we're dealing with an RTL context */\\n    private _isRtl;\\n    /** Determines whether the overlay uses exact or flexible positioning. */\\n    private _hasExactPosition;\\n    /** Retrieves the offset of a position along the x or y axis. */\\n    private _getOffset;\\n    /** Validates that the current position match the expected values. */\\n    private _validatePositions;\\n    /** Adds a single CSS class or an array of classes on the overlay panel. */\\n    private _addPanelClasses;\\n    /** Clears the classes that the position strategy has applied from the overlay panel. */\\n    private _clearPanelClasses;\\n    /** Returns the ClientRect of the current origin. */\\n    private _getOriginRect;\\n}\\n/** A simple (x, y) coordinate. */\\ninterface Point {\\n    x: number;\\n    y: number;\\n}\\n/** A connected position as specified by the user. */\\nexport interface ConnectedPosition {\\n    originX: 'start' | 'center' | 'end';\\n    originY: 'top' | 'center' | 'bottom';\\n    overlayX: 'start' | 'center' | 'end';\\n    overlayY: 'top' | 'center' | 'bottom';\\n    weight?: number;\\n    offsetX?: number;\\n    offsetY?: number;\\n    panelClass?: string | string[];\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/global-position-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { PositionStrategy } from './position-strategy';\\nimport { OverlayReference } from '../overlay-reference';\\n/**\\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\\n * explicit position relative to the browser's viewport. We use flexbox, instead of\\n * transforms, in order to avoid issues with subpixel rendering which can cause the\\n * element to become blurry.\\n */\\nexport declare class GlobalPositionStrategy implements PositionStrategy {\\n    /** The overlay to which this strategy is attached. */\\n    private _overlayRef;\\n    private _cssPosition;\\n    private _topOffset;\\n    private _bottomOffset;\\n    private _leftOffset;\\n    private _rightOffset;\\n    private _alignItems;\\n    private _justifyContent;\\n    private _width;\\n    private _height;\\n    private _isDisposed;\\n    attach(overlayRef: OverlayReference): void;\\n    /**\\n     * Sets the top position of the overlay. Clears any previously set vertical position.\\n     * @param value New top offset.\\n     */\\n    top(value?: string): this;\\n    /**\\n     * Sets the left position of the overlay. Clears any previously set horizontal position.\\n     * @param value New left offset.\\n     */\\n    left(value?: string): this;\\n    /**\\n     * Sets the bottom position of the overlay. Clears any previously set vertical position.\\n     * @param value New bottom offset.\\n     */\\n    bottom(value?: string): this;\\n    /**\\n     * Sets the right position of the overlay. Clears any previously set horizontal position.\\n     * @param value New right offset.\\n     */\\n    right(value?: string): this;\\n    /**\\n     * Sets the overlay width and clears any previously set width.\\n     * @param value New width for the overlay\\n     * @deprecated Pass the `width` through the `OverlayConfig`.\\n     * @breaking-change 8.0.0\\n     */\\n    width(value?: string): this;\\n    /**\\n     * Sets the overlay height and clears any previously set height.\\n     * @param value New height for the overlay\\n     * @deprecated Pass the `height` through the `OverlayConfig`.\\n     * @breaking-change 8.0.0\\n     */\\n    height(value?: string): this;\\n    /**\\n     * Centers the overlay horizontally with an optional offset.\\n     * Clears any previously set horizontal position.\\n     *\\n     * @param offset Overlay offset from the horizontal center.\\n     */\\n    centerHorizontally(offset?: string): this;\\n    /**\\n     * Centers the overlay vertically with an optional offset.\\n     * Clears any previously set vertical position.\\n     *\\n     * @param offset Overlay offset from the vertical center.\\n     */\\n    centerVertically(offset?: string): this;\\n    /**\\n     * Apply the position to the element.\\n     * @docs-private\\n     */\\n    apply(): void;\\n    /**\\n     * Cleans up the DOM changes from the position strategy.\\n     * @docs-private\\n     */\\n    dispose(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/overlay-position-builder.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { ElementRef } from '@angular/core';\\nimport { OverlayContainer } from '../overlay-container';\\nimport { OriginConnectionPosition, OverlayConnectionPosition } from './connected-position';\\nimport { ConnectedPositionStrategy } from './connected-position-strategy';\\nimport { FlexibleConnectedPositionStrategy, FlexibleConnectedPositionStrategyOrigin } from './flexible-connected-position-strategy';\\nimport { GlobalPositionStrategy } from './global-position-strategy';\\n/** Builder for overlay position strategy. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class OverlayPositionBuilder {\\n    private _viewportRuler;\\n    private _document;\\n    private _platform;\\n    private _overlayContainer;\\n    constructor(_viewportRuler: ViewportRuler, _document: any, _platform: Platform, _overlayContainer: OverlayContainer);\\n    /**\\n     * Creates a global position strategy.\\n     */\\n    global(): GlobalPositionStrategy;\\n    /**\\n     * Creates a relative position strategy.\\n     * @param elementRef\\n     * @param originPos\\n     * @param overlayPos\\n     * @deprecated Use `flexibleConnectedTo` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    connectedTo(elementRef: ElementRef, originPos: OriginConnectionPosition, overlayPos: OverlayConnectionPosition): ConnectedPositionStrategy;\\n    /**\\n     * Creates a flexible position strategy.\\n     * @param origin Origin relative to which to position the overlay.\\n     */\\n    flexibleConnectedTo(origin: FlexibleConnectedPositionStrategyOrigin): FlexibleConnectedPositionStrategy;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<OverlayPositionBuilder>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<OverlayPositionBuilder>;\\n}\\n\\n//# sourceMappingURL=overlay-position-builder.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/position-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OverlayReference } from '../overlay-reference';\\n/** Strategy for setting the position on an overlay. */\\nexport interface PositionStrategy {\\n    /** Attaches this position strategy to an overlay. */\\n    attach(overlayRef: OverlayReference): void;\\n    /** Updates the position of the overlay element. */\\n    apply(): void;\\n    /** Called when the overlay is detached. */\\n    detach?(): void;\\n    /** Cleans up any DOM modifications made by the position strategy, if necessary. */\\n    dispose(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/position/scroll-clip.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\\n * @param element Dimensions of the element (from getBoundingClientRect)\\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\\n * @returns Whether the element is scrolled out of view\\n * @docs-private\\n */\\nexport declare function isElementScrolledOutsideView(element: ClientRect, scrollContainers: ClientRect[]): boolean;\\n/**\\n * Gets whether an element is clipped by any of its scrolling containers.\\n * @param element Dimensions of the element (from getBoundingClientRect)\\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\\n * @returns Whether the element is clipped\\n * @docs-private\\n */\\nexport declare function isElementClippedByScrolling(element: ClientRect, scrollContainers: ClientRect[]): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './overlay-config';\\nexport * from './position/connected-position';\\nexport * from './scroll/index';\\nexport * from './overlay-module';\\nexport { Overlay } from './overlay';\\nexport { OverlayContainer } from './overlay-container';\\nexport { CdkOverlayOrigin, CdkConnectedOverlay } from './overlay-directives';\\nexport { FullscreenOverlayContainer } from './fullscreen-overlay-container';\\nexport { OverlayRef, OverlaySizeConfig } from './overlay-ref';\\nexport { ViewportRuler } from '@angular/cdk/scrolling';\\nexport { ComponentType } from '@angular/cdk/portal';\\nexport { OverlayKeyboardDispatcher } from './keyboard/overlay-keyboard-dispatcher';\\nexport { OverlayPositionBuilder } from './position/overlay-position-builder';\\nexport { PositionStrategy } from './position/position-strategy';\\nexport { GlobalPositionStrategy } from './position/global-position-strategy';\\nexport { ConnectedPositionStrategy } from './position/connected-position-strategy';\\nexport { ConnectedPosition, FlexibleConnectedPositionStrategy, FlexibleConnectedPositionStrategyOrigin, } from './position/flexible-connected-position-strategy';\\nexport { VIEWPORT_RULER_PROVIDER } from '@angular/cdk/scrolling';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/block-scroll-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ScrollStrategy } from './scroll-strategy';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\n/**\\n * Strategy that will prevent the user from scrolling while the overlay is visible.\\n */\\nexport declare class BlockScrollStrategy implements ScrollStrategy {\\n    private _viewportRuler;\\n    private _previousHTMLStyles;\\n    private _previousScrollPosition;\\n    private _isEnabled;\\n    private _document;\\n    constructor(_viewportRuler: ViewportRuler, document: any);\\n    /** Attaches this scroll strategy to an overlay. */\\n    attach(): void;\\n    /** Blocks page-level scroll while the attached overlay is open. */\\n    enable(): void;\\n    /** Unblocks page-level scroll while the attached overlay is open. */\\n    disable(): void;\\n    private _canBeEnabled;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/close-scroll-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { NgZone } from '@angular/core';\\nimport { ScrollStrategy } from './scroll-strategy';\\nimport { OverlayReference } from '../overlay-reference';\\nimport { ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\\n/**\\n * Config options for the CloseScrollStrategy.\\n */\\nexport interface CloseScrollStrategyConfig {\\n    /** Amount of pixels the user has to scroll before the overlay is closed. */\\n    threshold?: number;\\n}\\n/**\\n * Strategy that will close the overlay as soon as the user starts scrolling.\\n */\\nexport declare class CloseScrollStrategy implements ScrollStrategy {\\n    private _scrollDispatcher;\\n    private _ngZone;\\n    private _viewportRuler;\\n    private _config?;\\n    private _scrollSubscription;\\n    private _overlayRef;\\n    private _initialScrollPosition;\\n    constructor(_scrollDispatcher: ScrollDispatcher, _ngZone: NgZone, _viewportRuler: ViewportRuler, _config?: CloseScrollStrategyConfig | undefined);\\n    /** Attaches this scroll strategy to an overlay. */\\n    attach(overlayRef: OverlayReference): void;\\n    /** Enables the closing of the attached overlay on scroll. */\\n    enable(): void;\\n    /** Disables the closing the attached overlay on scroll. */\\n    disable(): void;\\n    detach(): void;\\n    /** Detaches the overlay ref and disables the scroll strategy. */\\n    private _detach;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/index.d.ts\",\n      \"node_modules/@angular/cdk/overlay/scroll/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { CdkScrollable, ScrollDispatcher } from '@angular/cdk/scrolling';\\nexport { ScrollStrategy } from './scroll-strategy';\\nexport { ScrollStrategyOptions } from './scroll-strategy-options';\\nexport { RepositionScrollStrategy, RepositionScrollStrategyConfig } from './reposition-scroll-strategy';\\nexport { CloseScrollStrategy } from './close-scroll-strategy';\\nexport { NoopScrollStrategy } from './noop-scroll-strategy';\\nexport { BlockScrollStrategy } from './block-scroll-strategy';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/noop-scroll-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ScrollStrategy } from './scroll-strategy';\\n/** Scroll strategy that doesn't do anything. */\\nexport declare class NoopScrollStrategy implements ScrollStrategy {\\n    /** Does nothing, as this scroll strategy is a no-op. */\\n    enable(): void;\\n    /** Does nothing, as this scroll strategy is a no-op. */\\n    disable(): void;\\n    /** Does nothing, as this scroll strategy is a no-op. */\\n    attach(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/reposition-scroll-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { NgZone } from '@angular/core';\\nimport { ScrollStrategy } from './scroll-strategy';\\nimport { OverlayReference } from '../overlay-reference';\\nimport { ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\\n/**\\n * Config options for the RepositionScrollStrategy.\\n */\\nexport interface RepositionScrollStrategyConfig {\\n    /** Time in milliseconds to throttle the scroll events. */\\n    scrollThrottle?: number;\\n    /** Whether to close the overlay once the user has scrolled away completely. */\\n    autoClose?: boolean;\\n}\\n/**\\n * Strategy that will update the element position as the user is scrolling.\\n */\\nexport declare class RepositionScrollStrategy implements ScrollStrategy {\\n    private _scrollDispatcher;\\n    private _viewportRuler;\\n    private _ngZone;\\n    private _config?;\\n    private _scrollSubscription;\\n    private _overlayRef;\\n    constructor(_scrollDispatcher: ScrollDispatcher, _viewportRuler: ViewportRuler, _ngZone: NgZone, _config?: RepositionScrollStrategyConfig | undefined);\\n    /** Attaches this scroll strategy to an overlay. */\\n    attach(overlayRef: OverlayReference): void;\\n    /** Enables repositioning of the attached overlay on scroll. */\\n    enable(): void;\\n    /** Disables repositioning of the attached overlay on scroll. */\\n    disable(): void;\\n    detach(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/scroll-strategy-options.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\\nimport { NgZone } from '@angular/core';\\nimport { BlockScrollStrategy } from './block-scroll-strategy';\\nimport { CloseScrollStrategy, CloseScrollStrategyConfig } from './close-scroll-strategy';\\nimport { NoopScrollStrategy } from './noop-scroll-strategy';\\nimport { RepositionScrollStrategy, RepositionScrollStrategyConfig } from './reposition-scroll-strategy';\\n/**\\n * Options for how an overlay will handle scrolling.\\n *\\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class ScrollStrategyOptions {\\n    private _scrollDispatcher;\\n    private _viewportRuler;\\n    private _ngZone;\\n    private _document;\\n    constructor(_scrollDispatcher: ScrollDispatcher, _viewportRuler: ViewportRuler, _ngZone: NgZone, document: any);\\n    /** Do nothing on scroll. */\\n    noop: () => NoopScrollStrategy;\\n    /**\\n     * Close the overlay as soon as the user scrolls.\\n     * @param config Configuration to be used inside the scroll strategy.\\n     */\\n    close: (config?: CloseScrollStrategyConfig | undefined) => CloseScrollStrategy;\\n    /** Block scrolling. */\\n    block: () => BlockScrollStrategy;\\n    /**\\n     * Update the overlay's position on scroll.\\n     * @param config Configuration to be used inside the scroll strategy.\\n     * Allows debouncing the reposition calls.\\n     */\\n    reposition: (config?: RepositionScrollStrategyConfig | undefined) => RepositionScrollStrategy;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ScrollStrategyOptions>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ScrollStrategyOptions>;\\n}\\n\\n//# sourceMappingURL=scroll-strategy-options.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/overlay/scroll/scroll-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OverlayReference } from '../overlay-reference';\\n/**\\n * Describes a strategy that will be used by an overlay to handle scroll events while it is open.\\n */\\nexport interface ScrollStrategy {\\n    /** Enable this scroll strategy (called when the attached overlay is attached to a portal). */\\n    enable: () => void;\\n    /** Disable this scroll strategy (called when the attached overlay is detached from a portal). */\\n    disable: () => void;\\n    /** Attaches this `ScrollStrategy` to an overlay. */\\n    attach: (overlayRef: OverlayReference) => void;\\n    /** Detaches the scroll strategy from the current overlay. */\\n    detach?: () => void;\\n}\\n/**\\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\\n */\\nexport declare function getMatScrollStrategyAlreadyAttachedError(): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/features/input-types.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @returns The input types supported by this browser. */\\nexport declare function getSupportedInputTypes(): Set<string>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/features/passive-listeners.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Checks whether the user's browser supports passive event listeners.\\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\\n */\\nexport declare function supportsPassiveEventListeners(): boolean;\\n/**\\n * Normalizes an `AddEventListener` object to something that can be passed\\n * to `addEventListener` on any browser, no matter whether it supports the\\n * `options` parameter.\\n * @param options Object to be normalized.\\n */\\nexport declare function normalizePassiveListenerOptions(options: AddEventListenerOptions): AddEventListenerOptions | boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/features/scrolling.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\\nexport declare enum RtlScrollAxisType {\\n    /**\\n     * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\\n     * all the way right.\\n     */\\n    NORMAL = 0,\\n    /**\\n     * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\\n     * all the way right.\\n     */\\n    NEGATED = 1,\\n    /**\\n     * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\\n     * all the way right.\\n     */\\n    INVERTED = 2\\n}\\n/** Check whether the browser supports scroll behaviors. */\\nexport declare function supportsScrollBehavior(): boolean;\\n/**\\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\\n */\\nexport declare function getRtlScrollAxisType(): RtlScrollAxisType;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/features/shadow-dom.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Checks whether the user's browser support Shadow DOM. */\\nexport declare function _supportsShadowDom(): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/index.d.ts\",\n      \"node_modules/@angular/cdk/platform/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/platform-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class PlatformModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<PlatformModule, never, never, never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<PlatformModule>;\\n}\\n\\n//# sourceMappingURL=platform-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/platform.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Service to detect the current platform by comparing the userAgent strings and\\n * checking browser-specific global properties.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class Platform {\\n    private _platformId?;\\n    /**\\n     * Whether the Angular application is being rendered in the browser.\\n     * We want to use the Angular platform check because if the Document is shimmed\\n     * without the navigator, the following checks will fail. This is preferred because\\n     * sometimes the Document may be shimmed without the user's knowledge or intention\\n     */\\n    isBrowser: boolean;\\n    /** Whether the current browser is Microsoft Edge. */\\n    EDGE: boolean;\\n    /** Whether the current rendering engine is Microsoft Trident. */\\n    TRIDENT: boolean;\\n    /** Whether the current rendering engine is Blink. */\\n    BLINK: boolean;\\n    /** Whether the current rendering engine is WebKit. */\\n    WEBKIT: boolean;\\n    /** Whether the current platform is Apple iOS. */\\n    IOS: boolean;\\n    /** Whether the current browser is Firefox. */\\n    FIREFOX: boolean;\\n    /** Whether the current platform is Android. */\\n    ANDROID: boolean;\\n    /** Whether the current browser is Safari. */\\n    SAFARI: boolean;\\n    /**\\n     * @breaking-change 8.0.0 remove optional decorator\\n     */\\n    constructor(_platformId?: Object | undefined);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<Platform>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<Platform>;\\n}\\n\\n//# sourceMappingURL=platform.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/platform/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './platform';\\nexport * from './platform-module';\\nexport * from './features/input-types';\\nexport * from './features/passive-listeners';\\nexport * from './features/scrolling';\\nexport * from './features/shadow-dom';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/dom-portal-outlet.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, ApplicationRef, Injector } from '@angular/core';\\nimport { BasePortalOutlet, ComponentPortal, TemplatePortal } from './portal';\\n/**\\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\\n * application context.\\n */\\nexport declare class DomPortalOutlet extends BasePortalOutlet {\\n    /** Element into which the content is projected. */\\n    outletElement: Element;\\n    private _componentFactoryResolver;\\n    private _appRef;\\n    private _defaultInjector;\\n    constructor(\\n    /** Element into which the content is projected. */\\n    outletElement: Element, _componentFactoryResolver: ComponentFactoryResolver, _appRef: ApplicationRef, _defaultInjector: Injector);\\n    /**\\n     * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\\n     * @param portal Portal to be attached\\n     * @returns Reference to the created component.\\n     */\\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    /**\\n     * Attaches a template portal to the DOM as an embedded view.\\n     * @param portal Portal to be attached.\\n     * @returns Reference to the created embedded view.\\n     */\\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\\n    /**\\n     * Clears out a portal from the DOM.\\n     */\\n    dispose(): void;\\n    /** Gets the root HTMLElement for an instantiated component. */\\n    private _getComponentRootNode;\\n}\\n/**\\n * @deprecated Use `DomPortalOutlet` instead.\\n * @breaking-change 9.0.0\\n */\\nexport declare class DomPortalHost extends DomPortalOutlet {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/index.d.ts\",\n      \"node_modules/@angular/cdk/portal/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/portal-directives.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, EventEmitter, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\\nimport { BasePortalOutlet, ComponentPortal, Portal, TemplatePortal } from './portal';\\n/**\\n * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,\\n * the directive instance itself can be attached to a host, enabling declarative use of portals.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class CdkPortal extends TemplatePortal {\\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkPortal>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkPortal, \\\"[cdkPortal]\\\", [\\\"cdkPortal\\\"], {}, {}, never>;\\n}\\n/**\\n * @deprecated Use `CdkPortal` instead.\\n * @breaking-change 9.0.0\\n */\\nexport declare class TemplatePortalDirective extends CdkPortal {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<TemplatePortalDirective>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<TemplatePortalDirective, \\\"[cdk-portal], [portal]\\\", [\\\"cdkPortal\\\"], {}, {}, never>;\\n}\\n/**\\n * Possible attached references to the CdkPortalOutlet.\\n */\\nexport declare type CdkPortalOutletAttachedRef = ComponentRef<any> | EmbeddedViewRef<any> | null;\\n/**\\n * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be\\n * directly attached to it, enabling declarative use.\\n *\\n * Usage:\\n * `<ng-template [cdkPortalOutlet]=\\\"greeting\\\"></ng-template>`\\n */\\nexport declare class CdkPortalOutlet extends BasePortalOutlet implements OnInit, OnDestroy {\\n    private _componentFactoryResolver;\\n    private _viewContainerRef;\\n    /** Whether the portal component is initialized. */\\n    private _isInitialized;\\n    /** Reference to the currently-attached component/view ref. */\\n    private _attachedRef;\\n    constructor(_componentFactoryResolver: ComponentFactoryResolver, _viewContainerRef: ViewContainerRef);\\n    /** Portal associated with the Portal outlet. */\\n    portal: Portal<any> | null;\\n    /** Emits when a portal is attached to the outlet. */\\n    attached: EventEmitter<CdkPortalOutletAttachedRef>;\\n    /** Component or view reference that is attached to the portal. */\\n    readonly attachedRef: CdkPortalOutletAttachedRef;\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\\n     *\\n     * @param portal Portal to be attached to the portal outlet.\\n     * @returns Reference to the created component.\\n     */\\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    /**\\n     * Attach the given TemplatePortal to this PortlHost as an embedded View.\\n     * @param portal Portal to be attached.\\n     * @returns Reference to the created embedded view.\\n     */\\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkPortalOutlet>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkPortalOutlet, \\\"[cdkPortalOutlet]\\\", [\\\"cdkPortalOutlet\\\"], { 'portal': \\\"cdkPortalOutlet\\\" }, { 'attached': \\\"attached\\\" }, never>;\\n}\\n/**\\n * @deprecated Use `CdkPortalOutlet` instead.\\n * @breaking-change 9.0.0\\n */\\nexport declare class PortalHostDirective extends CdkPortalOutlet {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<PortalHostDirective>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<PortalHostDirective, \\\"[cdkPortalHost], [portalHost]\\\", [\\\"cdkPortalHost\\\"], { 'portal': \\\"cdkPortalHost\\\" }, {}, never>;\\n}\\nexport declare class PortalModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<PortalModule, [typeof CdkPortal, typeof CdkPortalOutlet, typeof TemplatePortalDirective, typeof PortalHostDirective], never, [typeof CdkPortal, typeof CdkPortalOutlet, typeof TemplatePortalDirective, typeof PortalHostDirective]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<PortalModule>;\\n}\\n\\n//# sourceMappingURL=portal-directives.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/portal-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Throws an exception when attempting to attach a null portal to a host.\\n * @docs-private\\n */\\nexport declare function throwNullPortalError(): void;\\n/**\\n * Throws an exception when attempting to attach a portal to a host that is already attached.\\n * @docs-private\\n */\\nexport declare function throwPortalAlreadyAttachedError(): void;\\n/**\\n * Throws an exception when attempting to attach a portal to an already-disposed host.\\n * @docs-private\\n */\\nexport declare function throwPortalOutletAlreadyDisposedError(): void;\\n/**\\n * Throws an exception when attempting to attach an unknown portal type.\\n * @docs-private\\n */\\nexport declare function throwUnknownPortalTypeError(): void;\\n/**\\n * Throws an exception when attempting to attach a portal to a null host.\\n * @docs-private\\n */\\nexport declare function throwNullPortalOutletError(): void;\\n/**\\n * Throws an exception when attempting to detach a portal that is not attached.\\n * @docs-private\\n */\\nexport declare function throwNoPortalAttachedError(): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/portal-injector.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Injector } from '@angular/core';\\n/**\\n * Custom injector to be used when providing custom\\n * injection tokens to components inside a portal.\\n * @docs-private\\n */\\nexport declare class PortalInjector implements Injector {\\n    private _parentInjector;\\n    private _customTokens;\\n    constructor(_parentInjector: Injector, _customTokens: WeakMap<any, any>);\\n    get(token: any, notFoundValue?: any): any;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/portal.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef, ViewContainerRef, ElementRef, ComponentRef, EmbeddedViewRef, Injector, ComponentFactoryResolver } from '@angular/core';\\n/** Interface that can be used to generically type a class. */\\nexport interface ComponentType<T> {\\n    new (...args: any[]): T;\\n}\\n/**\\n * A `Portal` is something that you want to render somewhere else.\\n * It can be attach to / detached from a `PortalOutlet`.\\n */\\nexport declare abstract class Portal<T> {\\n    private _attachedHost;\\n    /** Attach this portal to a host. */\\n    attach(host: PortalOutlet): T;\\n    /** Detach this portal from its host */\\n    detach(): void;\\n    /** Whether this portal is attached to a host. */\\n    readonly isAttached: boolean;\\n    /**\\n     * Sets the PortalOutlet reference without performing `attach()`. This is used directly by\\n     * the PortalOutlet when it is performing an `attach()` or `detach()`.\\n     */\\n    setAttachedHost(host: PortalOutlet | null): void;\\n}\\n/**\\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\\n */\\nexport declare class ComponentPortal<T> extends Portal<ComponentRef<T>> {\\n    /** The type of the component that will be instantiated for attachment. */\\n    component: ComponentType<T>;\\n    /**\\n     * [Optional] Where the attached component should live in Angular's *logical* component tree.\\n     * This is different from where the component *renders*, which is determined by the PortalOutlet.\\n     * The origin is necessary when the host is outside of the Angular application context.\\n     */\\n    viewContainerRef?: ViewContainerRef | null;\\n    /** [Optional] Injector used for the instantiation of the component. */\\n    injector?: Injector | null;\\n    /**\\n     * Alternate `ComponentFactoryResolver` to use when resolving the associated component.\\n     * Defaults to using the resolver from the outlet that the portal is attached to.\\n     */\\n    componentFactoryResolver?: ComponentFactoryResolver | null;\\n    constructor(component: ComponentType<T>, viewContainerRef?: ViewContainerRef | null, injector?: Injector | null, componentFactoryResolver?: ComponentFactoryResolver | null);\\n}\\n/**\\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\\n */\\nexport declare class TemplatePortal<C = any> extends Portal<EmbeddedViewRef<C>> {\\n    /** The embedded template that will be used to instantiate an embedded View in the host. */\\n    templateRef: TemplateRef<C>;\\n    /** Reference to the ViewContainer into which the template will be stamped out. */\\n    viewContainerRef: ViewContainerRef;\\n    /** Contextual data to be passed in to the embedded view. */\\n    context: C | undefined;\\n    constructor(template: TemplateRef<C>, viewContainerRef: ViewContainerRef, context?: C);\\n    readonly origin: ElementRef;\\n    /**\\n     * Attach the portal to the provided `PortalOutlet`.\\n     * When a context is provided it will override the `context` property of the `TemplatePortal`\\n     * instance.\\n     */\\n    attach(host: PortalOutlet, context?: C | undefined): EmbeddedViewRef<C>;\\n    detach(): void;\\n}\\n/** A `PortalOutlet` is an space that can contain a single `Portal`. */\\nexport interface PortalOutlet {\\n    /** Attaches a portal to this outlet. */\\n    attach(portal: Portal<any>): any;\\n    /** Detaches the currently attached portal from this outlet. */\\n    detach(): any;\\n    /** Performs cleanup before the outlet is destroyed. */\\n    dispose(): void;\\n    /** Whether there is currently a portal attached to this outlet. */\\n    hasAttached(): boolean;\\n}\\n/**\\n * @deprecated Use `PortalOutlet` instead.\\n * @breaking-change 9.0.0\\n */\\nexport declare type PortalHost = PortalOutlet;\\n/**\\n * Partial implementation of PortalOutlet that handles attaching\\n * ComponentPortal and TemplatePortal.\\n */\\nexport declare abstract class BasePortalOutlet implements PortalOutlet {\\n    /** The portal currently attached to the host. */\\n    protected _attachedPortal: Portal<any> | null;\\n    /** A function that will permanently dispose this host. */\\n    private _disposeFn;\\n    /** Whether this host has already been permanently disposed. */\\n    private _isDisposed;\\n    /** Whether this host has an attached portal. */\\n    hasAttached(): boolean;\\n    attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    attach<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;\\n    attach(portal: any): any;\\n    abstract attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    abstract attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\\n    /** Detaches a previously attached portal. */\\n    detach(): void;\\n    /** Permanently dispose of this portal host. */\\n    dispose(): void;\\n    /** @docs-private */\\n    setDisposeFn(fn: () => void): void;\\n    private _invokeDisposeFn;\\n}\\n/**\\n * @deprecated Use `BasePortalOutlet` instead.\\n * @breaking-change 9.0.0\\n */\\nexport declare abstract class BasePortalHost extends BasePortalOutlet {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/portal/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './portal';\\nexport * from './dom-portal-outlet';\\nexport * from './portal-directives';\\nexport * from './portal-injector';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './version';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics\\\" />\\nexport * from './utils';\\nexport * from './ng-update/public-api';\\nexport * from './update-tool/public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-add/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/ng-add/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-add/index\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Name of the Angular CDK version that is shipped together with the schematics. */\\nexport declare const cdkVersion: string | null;\\n/**\\n * Schematic factory entry-point for the `ng-add` schematic. The ng-add schematic will be\\n * automatically executed if developers run `ng add @angular/cdk`.\\n *\\n * By default, the CLI already installs the package that has been specified with `ng add`.\\n * We just store the version in the `package.json` in case the package manager didn't. Also\\n * this ensures that there will be no error that says that the CDK does not support `ng add`.\\n */\\nexport default function (): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-add/package-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-add/package-config\\\" />\\nimport { Tree } from '@angular-devkit/schematics';\\n/** Adds a package to the package.json in the given host tree. */\\nexport declare function addPackageToPackageJson(host: Tree, pkg: string, version: string): Tree;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-add/schema.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-add/schema\\\" />\\nexport interface Schema {\\n    /** Name of the project to target. */\\n    project: string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-generate/drag-drop/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/ng-generate/drag-drop/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-generate/drag-drop/index\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\nimport { Schema } from './schema';\\n/** Scaffolds a new Angular component that uses the Drag and Drop module. */\\nexport default function (options: Schema): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-generate/drag-drop/schema.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-generate/drag-drop/schema\\\" />\\nimport { Schema as ComponentSchema } from '@schematics/angular/component/schema';\\nexport interface Schema extends ComponentSchema {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/attribute-selectors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/attribute-selectors\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface AttributeSelectorUpgradeData {\\n    /** The attribute name to replace. */\\n    replace: string;\\n    /** The new name for the attribute. */\\n    replaceWith: string;\\n}\\nexport declare const attributeSelectors: VersionChanges<AttributeSelectorUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/class-names.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/class-names\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface ClassNameUpgradeData {\\n    /** The Class name to replace. */\\n    replace: string;\\n    /** The new name for the Class. */\\n    replaceWith: string;\\n}\\nexport declare const classNames: VersionChanges<ClassNameUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/constructor-checks.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/constructor-checks\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport declare type ConstructorChecksUpgradeData = string;\\n/**\\n * List of class names for which the constructor signature has been changed. The new constructor\\n * signature types don't need to be stored here because the signature will be determined\\n * automatically through type checking.\\n */\\nexport declare const constructorChecks: VersionChanges<ConstructorChecksUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/css-selectors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/css-selectors\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface CssSelectorUpgradeData {\\n    /** The CSS selector to replace. */\\n    replace: string;\\n    /** The new CSS selector. */\\n    replaceWith: string;\\n    /** Whitelist where this replacement is made. If omitted it is made in all files. */\\n    whitelist?: {\\n        /** Replace this name in stylesheet files. */\\n        stylesheet?: boolean;\\n        /** Replace this name in HTML files. */\\n        html?: boolean;\\n        /** Replace this name in TypeScript strings. */\\n        strings?: boolean;\\n    };\\n}\\nexport declare const cssSelectors: VersionChanges<CssSelectorUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/element-selectors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/element-selectors\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface ElementSelectorUpgradeData {\\n    /** The element name to replace. */\\n    replace: string;\\n    /** The new name for the element. */\\n    replaceWith: string;\\n}\\nexport declare const elementSelectors: VersionChanges<ElementSelectorUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/ng-update/data/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/index\\\" />\\nexport * from './attribute-selectors';\\nexport * from './class-names';\\nexport * from './constructor-checks';\\nexport * from './css-selectors';\\nexport * from './element-selectors';\\nexport * from './input-names';\\nexport * from './method-call-checks';\\nexport * from './output-names';\\nexport * from './property-names';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/input-names.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/input-names\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface InputNameUpgradeData {\\n    /** The @Input() name to replace. */\\n    replace: string;\\n    /** The new name for the @Input(). */\\n    replaceWith: string;\\n    /** Whitelist where this replacement is made. If omitted it is made in all HTML & CSS */\\n    whitelist: {\\n        /** Limit to elements with any of these element tags. */\\n        elements?: string[];\\n        /** Limit to elements with any of these attributes. */\\n        attributes?: string[];\\n    };\\n}\\nexport declare const inputNames: VersionChanges<InputNameUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/method-call-checks.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/method-call-checks\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface MethodCallUpgradeData {\\n    className: string;\\n    method: string;\\n    invalidArgCounts: {\\n        count: number;\\n        message: string;\\n    }[];\\n}\\nexport declare const methodCallChecks: VersionChanges<MethodCallUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/output-names.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/output-names\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface OutputNameUpgradeData {\\n    /** The @Output() name to replace. */\\n    replace: string;\\n    /** The new name for the @Output(). */\\n    replaceWith: string;\\n    /** Whitelist where this replacement is made. If omitted it is made in all HTML & CSS */\\n    whitelist: {\\n        /** Limit to elements with any of these element tags. */\\n        elements?: string[];\\n        /** Limit to elements with any of these attributes. */\\n        attributes?: string[];\\n    };\\n}\\nexport declare const outputNames: VersionChanges<OutputNameUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/data/property-names.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/data/property-names\\\" />\\nimport { VersionChanges } from '../../update-tool/version-changes';\\nexport interface PropertyNameUpgradeData {\\n    /** The property name to replace. */\\n    replace: string;\\n    /** The new name for the property. */\\n    replaceWith: string;\\n    /** Whitelist where this replacement is made. If omitted it is made for all Classes. */\\n    whitelist: {\\n        /** Replace the property only when its type is one of the given Classes. */\\n        classes: string[];\\n    };\\n}\\nexport declare const propertyNames: VersionChanges<PropertyNameUpgradeData>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/html-parsing/angular.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/html-parsing/angular\\\" />\\n/** Finds the specified Angular @Input in the given elements with tag name. */\\nexport declare function findInputsOnElementWithTag(html: string, inputName: string, tagNames: string[]): number[];\\n/** Finds the specified Angular @Input in elements that have one of the specified attributes. */\\nexport declare function findInputsOnElementWithAttr(html: string, inputName: string, attrs: string[]): number[];\\n/** Finds the specified Angular @Output in the given elements with tag name. */\\nexport declare function findOutputsOnElementWithTag(html: string, outputName: string, tagNames: string[]): number[];\\n/** Finds the specified Angular @Output in elements that have one of the specified attributes. */\\nexport declare function findOutputsOnElementWithAttr(html: string, outputName: string, attrs: string[]): number[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/html-parsing/elements.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/html-parsing/elements\\\" />\\n/**\\n * Parses a HTML fragment and traverses all AST nodes in order find elements that\\n * include the specified attribute.\\n */\\nexport declare function findElementsWithAttribute(html: string, attributeName: string): any[];\\n/**\\n * Finds elements with explicit tag names that also contain the specified attribute. Returns the\\n * attribute start offset based on the specified HTML.\\n */\\nexport declare function findAttributeOnElementWithTag(html: string, name: string, tagNames: string[]): number[];\\n/**\\n * Finds elements that contain the given attribute and contain at least one of the other\\n * specified attributes. Returns the primary attribute's start offset based on the specified HTML.\\n */\\nexport declare function findAttributeOnElementWithAttrs(html: string, name: string, attrs: string[]): number[];\\n/** Gets the start offset of the given attribute from a Parse5 element. */\\nexport declare function getStartOffsetOfAttribute(element: any, attributeName: string): number;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/ng-update/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/index\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\n/** Entry point for the migration schematics with target of Angular CDK 6.0.0 */\\nexport declare function updateToV6(): Rule;\\n/** Entry point for the migration schematics with target of Angular CDK 7.0.0 */\\nexport declare function updateToV7(): Rule;\\n/** Entry point for the migration schematics with target of Angular CDK 8.0.0 */\\nexport declare function updateToV8(): Rule;\\n/** Entry point for the migration schematics with target of Angular CDK 9.0.0 */\\nexport declare function updateToV9(): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/public-api\\\" />\\nexport * from './upgrade-data';\\nexport * from './data/index';\\nexport * from './html-parsing/angular';\\nexport * from './html-parsing/elements';\\nexport * from './upgrade-rules/index';\\nexport * from './typescript/base-types';\\nexport * from './typescript/imports';\\nexport * from './typescript/literal';\\nexport * from './typescript/module-specifiers';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/typescript/base-types.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/typescript/base-types\\\" />\\nimport * as ts from 'typescript';\\n/** Determines the base types of the specified class declaration. */\\nexport declare function determineBaseTypes(node: ts.ClassDeclaration): string[] | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/typescript/imports.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/typescript/imports\\\" />\\nimport * as ts from 'typescript';\\n/** Checks whether the given node is part of an import specifier node. */\\nexport declare function isImportSpecifierNode(node: ts.Node): boolean;\\n/** Checks whether the given node is part of an export specifier node. */\\nexport declare function isExportSpecifierNode(node: ts.Node): boolean;\\n/** Checks whether the given node is part of a namespace import. */\\nexport declare function isNamespaceImportNode(node: ts.Node): boolean;\\n/** Finds the parent import declaration of a given TypeScript node. */\\nexport declare function getImportDeclaration(node: ts.Node): ts.ImportDeclaration;\\n/** Finds the parent export declaration of a given TypeScript node */\\nexport declare function getExportDeclaration(node: ts.Node): ts.ExportDeclaration;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/typescript/literal.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/typescript/literal\\\" />\\nimport * as ts from 'typescript';\\n/** Finds all start indices of the given search string in the input string. */\\nexport declare function findAllSubstringIndices(input: string, search: string): number[];\\n/**\\n * Checks whether the given node is either a string literal or a no-substitution template\\n * literal. Note that we cannot use `ts.isStringLiteralLike()` because if developers update\\n * an outdated project, their TypeScript version is not automatically being updated\\n * and therefore could throw because the function is not available yet.\\n * https://github.com/Microsoft/TypeScript/commit/8518343dc8762475a5e92c9f80b5c5725bd81796\\n */\\nexport declare function isStringLiteralLike(node: ts.Node): node is (ts.StringLiteral | ts.NoSubstitutionTemplateLiteral);\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/typescript/module-specifiers.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/typescript/module-specifiers\\\" />\\nimport * as ts from 'typescript';\\n/** Name of the Angular Material module specifier. */\\nexport declare const materialModuleSpecifier = \\\"@angular/material\\\";\\n/** Name of the Angular CDK module specifier. */\\nexport declare const cdkModuleSpecifier = \\\"@angular/cdk\\\";\\n/** Whether the specified node is part of an Angular Material or CDK import declaration. */\\nexport declare function isMaterialImportDeclaration(node: ts.Node): boolean;\\n/** Whether the specified node is part of an Angular Material or CDK import declaration. */\\nexport declare function isMaterialExportDeclaration(node: ts.Node): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-data.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-data\\\" />\\nimport { MigrationRule } from '../update-tool/migration-rule';\\nimport { ValueOfChanges, VersionChanges } from '../update-tool/version-changes';\\nimport { AttributeSelectorUpgradeData, ClassNameUpgradeData, ConstructorChecksUpgradeData, CssSelectorUpgradeData, ElementSelectorUpgradeData, InputNameUpgradeData, MethodCallUpgradeData, OutputNameUpgradeData, PropertyNameUpgradeData } from './data';\\n/** Upgrade data for the Angular CDK. */\\nexport declare const cdkUpgradeData: RuleUpgradeData;\\n/**\\n * Interface that describes the upgrade data that needs to be defined when using the CDK\\n * upgrade rules.\\n */\\nexport interface RuleUpgradeData {\\n    attributeSelectors: VersionChanges<AttributeSelectorUpgradeData>;\\n    classNames: VersionChanges<ClassNameUpgradeData>;\\n    constructorChecks: VersionChanges<ConstructorChecksUpgradeData>;\\n    cssSelectors: VersionChanges<CssSelectorUpgradeData>;\\n    elementSelectors: VersionChanges<ElementSelectorUpgradeData>;\\n    inputNames: VersionChanges<InputNameUpgradeData>;\\n    methodCallChecks: VersionChanges<MethodCallUpgradeData>;\\n    outputNames: VersionChanges<OutputNameUpgradeData>;\\n    propertyNames: VersionChanges<PropertyNameUpgradeData>;\\n}\\n/**\\n * Gets the reduced upgrade data for the specified data key from the rule walker options.\\n *\\n * The function reads out the target version and upgrade data object from the rule options and\\n * resolves the specified data portion that is specifically tied to the target version.\\n */\\nexport declare function getVersionUpgradeData<T extends keyof RuleUpgradeData, U = ValueOfChanges<RuleUpgradeData[T]>>(r: MigrationRule<RuleUpgradeData>, dataName: T): U[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/attribute-selectors-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/attribute-selectors-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { ResolvedResource } from '../../update-tool/component-resource-collector';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Migration rule that walks through every string literal, template and stylesheet\\n * in order to switch deprecated attribute selectors to the updated selector.\\n */\\nexport declare class AttributeSelectorsRule extends MigrationRule<RuleUpgradeData> {\\n    /** Required upgrade changes for specified target version. */\\n    data: any;\\n    ruleEnabled: any;\\n    visitNode(node: ts.Node): void;\\n    visitTemplate(template: ResolvedResource): void;\\n    visitStylesheet(stylesheet: ResolvedResource): void;\\n    private _visitStringLiteralLike;\\n    private _replaceSelector;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/class-inheritance-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/class-inheritance-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { PropertyNameUpgradeData } from '../data/property-names';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that identifies class declarations that extend CDK or Material classes\\n * which had a public property change.\\n */\\nexport declare class ClassInheritanceRule extends MigrationRule<RuleUpgradeData> {\\n    /**\\n     * Map of classes that have been updated. Each class name maps to the according property\\n     * change data.\\n     */\\n    propertyNames: Map<string, PropertyNameUpgradeData>;\\n    ruleEnabled: boolean;\\n    init(): void;\\n    visitNode(node: ts.Node): void;\\n    private _visitClassDeclaration;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/class-names-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/class-names-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { ClassNameUpgradeData } from '../data';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every identifier that is part of Angular Material or thr CDK\\n * and replaces the outdated name with the new one if specified in the upgrade data.\\n */\\nexport declare class ClassNamesRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: ClassNameUpgradeData[];\\n    /**\\n     * List of identifier names that have been imported from `@angular/material` or `@angular/cdk`\\n     * in the current source file and therefore can be considered trusted.\\n     */\\n    trustedIdentifiers: Set<string>;\\n    /** List of namespaces that have been imported from `@angular/material` or `@angular/cdk`. */\\n    trustedNamespaces: Set<string>;\\n    ruleEnabled: boolean;\\n    visitNode(node: ts.Node): void;\\n    /** Method that is called for every identifier inside of the specified project. */\\n    private _visitIdentifier;\\n    /** Creates a failure and replacement for the specified identifier. */\\n    private _createFailureWithReplacement;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/constructor-signature-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/constructor-signature-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that visits every TypeScript new expression or super call and checks if\\n * the parameter type signature is invalid and needs to be updated manually.\\n */\\nexport declare class ConstructorSignatureRule extends MigrationRule<RuleUpgradeData> {\\n    data: string[];\\n    ruleEnabled: boolean;\\n    visitNode(node: ts.Node): void;\\n    /**\\n     * Method that will be called for each source file of the upgrade project. In order to\\n     * properly determine invalid constructor signatures, we take advantage of the pre-emit\\n     * diagnostics from TypeScript.\\n     *\\n     * By using the diagnostics, the migration can handle type assignability. Not using\\n     * diagnostics would mean that we need to use simple type equality checking which is\\n     * too strict. See related issue: https://github.com/Microsoft/TypeScript/issues/9879\\n     */\\n    private _visitSourceFile;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/css-selectors-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/css-selectors-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { ResolvedResource } from '../../update-tool/component-resource-collector';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every string literal, template and stylesheet in\\n * order to migrate outdated CSS selectors to the new selector.\\n */\\nexport declare class CssSelectorsRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: any;\\n    ruleEnabled: any;\\n    visitNode(node: ts.Node): void;\\n    visitTemplate(template: ResolvedResource): void;\\n    visitStylesheet(stylesheet: ResolvedResource): void;\\n    private _visitStringLiteralLike;\\n    private _replaceSelector;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/element-selectors-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/element-selectors-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { ResolvedResource } from '../../update-tool/component-resource-collector';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every string literal, template and stylesheet in order\\n * to migrate outdated element selectors to the new one.\\n */\\nexport declare class ElementSelectorsRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: any;\\n    ruleEnabled: any;\\n    visitNode(node: ts.Node): void;\\n    visitTemplate(template: ResolvedResource): void;\\n    visitStylesheet(stylesheet: ResolvedResource): void;\\n    private _visitStringLiteralLike;\\n    private _replaceSelector;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/index\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\nimport { Constructor } from '../../update-tool';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { TargetVersion } from '../../update-tool/target-version';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/** List of migration rules which run for the CDK update. */\\nexport declare const cdkMigrationRules: Constructor<MigrationRule<RuleUpgradeData>>[];\\ndeclare type NullableMigrationRule = Constructor<MigrationRule<RuleUpgradeData | null>>;\\n/**\\n * Creates a Angular schematic rule that runs the upgrade for the\\n * specified target version.\\n */\\nexport declare function createUpgradeRule(targetVersion: TargetVersion, extraRules: NullableMigrationRule[], upgradeData: RuleUpgradeData, onMigrationCompleteFn?: (targetVersion: TargetVersion, hasFailures: boolean) => void): Rule;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/input-names-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/input-names-rule\\\" />\\nimport { ResolvedResource } from '../../update-tool/component-resource-collector';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { InputNameUpgradeData } from '../data';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every template or stylesheet and replaces outdated input\\n * names to the new input name. Selectors in stylesheets could also target input\\n * bindings declared as static attribute. See for example:\\n *\\n * e.g. `<my-component color=\\\"primary\\\">` becomes `my-component[color]`\\n */\\nexport declare class InputNamesRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: InputNameUpgradeData[];\\n    ruleEnabled: boolean;\\n    visitStylesheet(stylesheet: ResolvedResource): void;\\n    visitTemplate(template: ResolvedResource): void;\\n    private _replaceInputName;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/method-call-arguments-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/method-call-arguments-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { MethodCallUpgradeData } from '../data';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that visits every TypeScript method call expression and checks if the\\n * argument count is invalid and needs to be *manually* updated.\\n */\\nexport declare class MethodCallArgumentsRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: MethodCallUpgradeData[];\\n    ruleEnabled: boolean;\\n    visitNode(node: ts.Node): void;\\n    private _checkPropertyAccessMethodCall;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/misc-template-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/misc-template-rule\\\" />\\nimport { ResolvedResource } from '../../update-tool/component-resource-collector';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every template and reports if there are\\n * instances of outdated Angular CDK API that can't be migrated automatically.\\n */\\nexport declare class MiscTemplateRule extends MigrationRule<RuleUpgradeData> {\\n    ruleEnabled: boolean;\\n    visitTemplate(template: ResolvedResource): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/output-names-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/output-names-rule\\\" />\\nimport { ResolvedResource } from '../../update-tool/component-resource-collector';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { OutputNameUpgradeData } from '../data';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every inline or external HTML template and switches\\n * changed output binding names to the proper new output name.\\n */\\nexport declare class OutputNamesRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: OutputNameUpgradeData[];\\n    ruleEnabled: boolean;\\n    visitTemplate(template: ResolvedResource): void;\\n    private _replaceOutputName;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/ng-update/upgrade-rules/property-names-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/ng-update/upgrade-rules/property-names-rule\\\" />\\nimport * as ts from 'typescript';\\nimport { MigrationRule } from '../../update-tool/migration-rule';\\nimport { PropertyNameUpgradeData } from '../data';\\nimport { RuleUpgradeData } from '../upgrade-data';\\n/**\\n * Rule that walks through every property access expression and updates\\n * accessed properties that have been updated to a new name.\\n */\\nexport declare class PropertyNamesRule extends MigrationRule<RuleUpgradeData> {\\n    /** Change data that upgrades to the specified target version. */\\n    data: PropertyNameUpgradeData[];\\n    ruleEnabled: boolean;\\n    visitNode(node: ts.Node): void;\\n    private _visitPropertyAccessExpression;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/component-resource-collector.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/component-resource-collector\\\" />\\nimport * as ts from 'typescript';\\nimport { LineAndCharacter } from './utils/line-mappings';\\nexport interface ResolvedResource {\\n    /** Class declaration that contains this resource. */\\n    container: ts.ClassDeclaration | null;\\n    /** File content of the given template. */\\n    content: string;\\n    /** Start offset of the resource content (e.g. in the inline source file) */\\n    start: number;\\n    /** Whether the given resource is inline or not. */\\n    inline: boolean;\\n    /** Path to the file that contains this resource. */\\n    filePath: string;\\n    /**\\n     * Gets the character and line of a given position index in the resource.\\n     * If the resource is declared inline within a TypeScript source file, the line and\\n     * character are based on the full source file content.\\n     */\\n    getCharacterAndLineOfPosition: (pos: number) => LineAndCharacter;\\n}\\n/**\\n * Collector that can be used to find Angular templates and stylesheets referenced within\\n * given TypeScript source files (inline or external referenced files)\\n */\\nexport declare class ComponentResourceCollector {\\n    typeChecker: ts.TypeChecker;\\n    resolvedTemplates: ResolvedResource[];\\n    resolvedStylesheets: ResolvedResource[];\\n    constructor(typeChecker: ts.TypeChecker);\\n    visitNode(node: ts.Node): void;\\n    private _visitClassDeclaration;\\n    /** Resolves an external stylesheet by reading its content and computing line mappings. */\\n    resolveExternalStylesheet(filePath: string, container: ts.ClassDeclaration | null): ResolvedResource;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/update-tool/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool\\\" />\\nimport { logging } from '@angular-devkit/core';\\nimport { Tree } from '@angular-devkit/schematics';\\nimport { MigrationRule } from './migration-rule';\\nimport { TargetVersion } from './target-version';\\nexport declare type Constructor<T> = new (...args: any[]) => T;\\nexport declare function runMigrationRules<T>(tree: Tree, logger: logging.LoggerApi, tsconfigPath: string, targetVersion: TargetVersion, ruleTypes: Constructor<MigrationRule<T>>[], upgradeData: T, analyzedFiles: Set<string>): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/migration-rule.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/migration-rule\\\" />\\nimport { UpdateRecorder } from '@angular-devkit/schematics';\\nimport * as ts from 'typescript';\\nimport { ResolvedResource } from './component-resource-collector';\\nimport { TargetVersion } from './target-version';\\nimport { LineAndCharacter } from './utils/line-mappings';\\nexport interface MigrationFailure {\\n    filePath: string;\\n    message: string;\\n    position: LineAndCharacter;\\n}\\nexport declare class MigrationRule<T> {\\n    program: ts.Program;\\n    typeChecker: ts.TypeChecker;\\n    targetVersion: TargetVersion;\\n    upgradeData: T;\\n    /** List of migration failures that need to be reported. */\\n    failures: MigrationFailure[];\\n    /** Whether the migration rule is enabled or not. */\\n    ruleEnabled: boolean;\\n    constructor(program: ts.Program, typeChecker: ts.TypeChecker, targetVersion: TargetVersion, upgradeData: T);\\n    /** Method can be used to perform global analysis of the program. */\\n    init(): void;\\n    /**\\n     * Method that will be called for each node in a given source file. Unlike tslint, this\\n     * function will only retrieve TypeScript nodes that need to be casted manually. This\\n     * allows us to only walk the program source files once per program and not per\\n     * migration rule (significant performance boost).\\n     */\\n    visitNode(node: ts.Node): void;\\n    /** Method that will be called for each Angular template in the program. */\\n    visitTemplate(template: ResolvedResource): void;\\n    /** Method that will be called for each stylesheet in the program. */\\n    visitStylesheet(stylesheet: ResolvedResource): void;\\n    /** Gets the update recorder for a given source file or resolved template. */\\n    getUpdateRecorder(filePath: string): UpdateRecorder;\\n    /** Creates a failure with a specified message at the given node location. */\\n    createFailureAtNode(node: ts.Node, message: string): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/public-api\\\" />\\nexport * from './index';\\nexport * from './target-version';\\nexport * from './version-changes';\\nexport * from './migration-rule';\\nexport * from './component-resource-collector';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/target-version.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/target-version\\\" />\\n/** Possible versions that can be automatically migrated by `ng update`. */\\nexport declare enum TargetVersion {\\n    V6 = \\\"version 6\\\",\\n    V7 = \\\"version 7\\\",\\n    V8 = \\\"version 8\\\",\\n    V9 = \\\"version 9\\\"\\n}\\n/**\\n * Returns all versions that are supported by \\\"ng update\\\". The versions are determined\\n * based on the \\\"TargetVersion\\\" enum.\\n */\\nexport declare function getAllVersionNames(): string[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/utils/decorators.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/utils/decorators\\\" />\\nimport * as ts from 'typescript';\\nimport { Import } from './imports';\\nexport declare type CallExpressionDecorator = ts.Decorator & {\\n    expression: ts.CallExpression;\\n};\\nexport interface NgDecorator {\\n    name: string;\\n    node: CallExpressionDecorator;\\n    importNode: ts.ImportDeclaration;\\n}\\n/**\\n * Gets all decorators which are imported from an Angular package\\n * (e.g. \\\"@angular/core\\\") from a list of decorators.\\n */\\nexport declare function getAngularDecorators(typeChecker: ts.TypeChecker, decorators: ReadonlyArray<ts.Decorator>): NgDecorator[];\\nexport declare function getCallDecoratorImport(typeChecker: ts.TypeChecker, decorator: ts.Decorator): Import | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/utils/functions.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/utils/functions\\\" />\\nimport * as ts from 'typescript';\\n/**\\n * Unwraps a given expression TypeScript node. Expressions can be wrapped within multiple\\n * parentheses. e.g. \\\"(((({exp}))))()\\\". The function should return the TypeScript node\\n * referring to the inner expression. e.g \\\"exp\\\".\\n */\\nexport declare function unwrapExpression(node: ts.Expression | ts.ParenthesizedExpression): ts.Expression;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/utils/imports.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/utils/imports\\\" />\\nimport * as ts from 'typescript';\\nexport declare type Import = {\\n    name: string;\\n    importModule: string;\\n    node: ts.ImportDeclaration;\\n};\\n/** Gets import information about the specified identifier by using the type checker. */\\nexport declare function getImportOfIdentifier(typeChecker: ts.TypeChecker, node: ts.Identifier): Import | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/utils/line-mappings.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/utils/line-mappings\\\" />\\nexport interface LineAndCharacter {\\n    character: number;\\n    line: number;\\n}\\n/** Gets the line and character for the given position from the line starts map. */\\nexport declare function getLineAndCharacterFromPosition(lineStartsMap: number[], position: number): {\\n    character: number;\\n    line: number;\\n};\\n/**\\n * Computes the line start map of the given text. This can be used in order to\\n * retrieve the line and character of a given text position index.\\n */\\nexport declare function computeLineStartsMap(text: string): number[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/utils/parse-tsconfig.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/utils/parse-tsconfig\\\" />\\nimport * as ts from 'typescript';\\nexport declare function parseTsconfigFile(tsconfigPath: string, basePath: string): ts.ParsedCommandLine;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/utils/property-name.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/utils/property-name\\\" />\\nimport * as ts from 'typescript';\\n/** Type that describes a property name with an obtainable text. */\\ndeclare type PropertyNameWithText = Exclude<ts.PropertyName, ts.ComputedPropertyName>;\\n/**\\n * Gets the text of the given property name. Returns null if the property\\n * name couldn't be determined statically.\\n */\\nexport declare function getPropertyNameText(node: ts.PropertyName): string | null;\\n/** Checks whether the given property name has a text. */\\nexport declare function hasPropertyNameText(node: ts.PropertyName): node is PropertyNameWithText;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/update-tool/version-changes.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/update-tool/version-changes\\\" />\\nimport { TargetVersion } from './target-version';\\nexport declare type VersionChanges<T> = {\\n    [target in TargetVersion]?: ReadableChange<T>[];\\n};\\nexport declare type ReadableChange<T> = {\\n    pr: string;\\n    changes: T[];\\n};\\n/** Conditional type that unwraps the value of a version changes type. */\\nexport declare type ValueOfChanges<T> = T extends VersionChanges<infer X> ? X : null;\\n/**\\n * Gets the changes for a given target version from the specified version changes object.\\n *\\n * For readability and a good overview of breaking changes, the version change data always\\n * includes the related Pull Request link. Since this data is not needed when performing the\\n * upgrade, this unused data can be removed and the changes data can be flattened into an\\n * easy iterable array.\\n */\\nexport declare function getChangesForTarget<T>(target: TargetVersion, data: VersionChanges<T>): T[];\\n/**\\n * Gets all changes from the specified version changes object. This is helpful in case a migration\\n * rule does not distinguish data based on the target version, but for readability the\\n * upgrade data is separated for each target version.\\n */\\nexport declare function getAllChanges<T>(data: VersionChanges<T>): T[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/ast.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/ast\\\" />\\nimport { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';\\nimport { Tree } from '@angular-devkit/schematics';\\nimport { Schema as ComponentOptions } from '@schematics/angular/component/schema';\\nimport { typescript } from './version-agnostic-typescript';\\n/** Reads file given path and returns TypeScript source file. */\\nexport declare function getSourceFile(host: Tree, path: string): typescript.SourceFile;\\n/** Import and add module to root app module. */\\nexport declare function addModuleImportToRootModule(host: Tree, moduleName: string, src: string, project: WorkspaceProject): void;\\n/**\\n * Import and add module to specific module path.\\n * @param host the tree we are updating\\n * @param modulePath src location of the module to import\\n * @param moduleName name of module to import\\n * @param src src location to import\\n */\\nexport declare function addModuleImportToModule(host: Tree, modulePath: string, moduleName: string, src: string): void;\\n/** Wraps the internal find module from options with undefined path handling  */\\nexport declare function findModuleFromOptions(host: Tree, options: ComponentOptions): string | undefined;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/ast/ng-module-imports.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/ast/ng-module-imports\\\" />\\nimport { Tree } from '@angular-devkit/schematics';\\n/**\\n * Whether the Angular module in the given path imports the specified module class name.\\n */\\nexport declare function hasNgModuleImport(tree: Tree, modulePath: string, className: string): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/build-component.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/build-component\\\" />\\nimport { Rule } from '@angular-devkit/schematics';\\nimport { Schema as ComponentOptions } from '@schematics/angular/component/schema';\\n/**\\n * Rule that copies and interpolates the files that belong to this schematic context. Additionally\\n * a list of file paths can be passed to this rule in order to expose them inside the EJS\\n * template context.\\n *\\n * This allows inlining the external template or stylesheet files in EJS without having\\n * to manually duplicate the file content.\\n */\\nexport declare function buildComponent(options: ComponentOptions, additionalFiles?: {\\n    [key: string]: string;\\n}): Rule;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/get-project.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/get-project\\\" />\\nimport { WorkspaceSchema, WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';\\n/**\\n * Finds the specified project configuration in the workspace. Throws an error if the project\\n * couldn't be found.\\n */\\nexport declare function getProjectFromWorkspace(workspace: WorkspaceSchema, projectName?: string): WorkspaceProject;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/html-head-element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/html-head-element\\\" />\\nimport { Tree } from '@angular-devkit/schematics';\\nimport { DefaultTreeElement } from 'parse5';\\n/** Appends the given element HTML fragment to the `<head>` element of the specified HTML file. */\\nexport declare function appendHtmlElementToHead(host: Tree, htmlFilePath: string, elementHtml: string): void;\\n/** Parses the given HTML file and returns the head element if available. */\\nexport declare function getHtmlHeadTagElement(htmlContent: string): DefaultTreeElement | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/index.d.ts\",\n      \"node_modules/@angular/cdk/schematics/utils/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/index\\\" />\\nexport * from './ast';\\nexport * from './ast/ng-module-imports';\\nexport * from './build-component';\\nexport * from './get-project';\\nexport * from './html-head-element';\\nexport * from './parse5-element';\\nexport * from './project-main-file';\\nexport * from './project-style-file';\\nexport * from './project-targets';\\nexport * from './schematic-options';\\nexport * from './version-agnostic-typescript';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/parse5-element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/parse5-element\\\" />\\nimport { DefaultTreeElement } from 'parse5';\\n/** Determines the indentation of child elements for the given Parse5 element. */\\nexport declare function getChildElementIndentation(element: DefaultTreeElement): number;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/project-main-file.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/project-main-file\\\" />\\nimport { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';\\n/** Looks for the main TypeScript file in the given project and returns its path. */\\nexport declare function getProjectMainFile(project: WorkspaceProject): string;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/project-style-file.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/project-style-file\\\" />\\nimport { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';\\n/**\\n * Gets a style file with the given extension in a project and returns its path. If no\\n * extension is specified, any style file with a valid extension will be returned.\\n */\\nexport declare function getProjectStyleFile(project: WorkspaceProject, extension?: string): string | null;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/project-targets.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/project-targets\\\" />\\nimport { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';\\n/** Resolves the architect options for the build target of the given project. */\\nexport declare function getProjectTargetOptions(project: WorkspaceProject, buildTarget: string): any;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/project-tsconfig-paths.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/project-tsconfig-paths\\\" />\\nimport { Tree } from '@angular-devkit/schematics';\\n/**\\n * Gets all tsconfig paths from a CLI project by reading the workspace configuration\\n * and looking for common tsconfig locations.\\n */\\nexport declare function getProjectTsConfigPaths(tree: Tree): {\\n    buildPaths: string[];\\n    testPaths: string[];\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/schematic-options.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/schematic-options\\\" />\\nimport { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';\\n/**\\n * Returns the default options for the `@schematics/angular:component` schematic which would\\n * have been specified at project initialization (ng new or ng init).\\n *\\n * This is necessary because the Angular CLI only exposes the default values for the \\\"--style\\\",\\n * \\\"--inlineStyle\\\", \\\"--skipTests\\\" and \\\"--inlineTemplate\\\" options to the \\\"component\\\" schematic.\\n */\\nexport declare function getDefaultComponentOptions(project: WorkspaceProject): {\\n    style: string;\\n    inlineStyle: boolean;\\n    inlineTemplate: boolean;\\n    skipTests: boolean;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/schematics/utils/version-agnostic-typescript.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/schematics/utils/version-agnostic-typescript\\\" />\\n/**\\n * This is just a type import and won't be generated in the release output.\\n *\\n * Note that we always need to adjust this type import based on the location of the Typescript\\n * dependency that will be shipped with `@schematics/angular`.\\n */\\nimport typescript = require('typescript');\\n/**\\n * This is an agnostic re-export of TypeScript. Depending on the context, this module file will\\n * return the TypeScript version that is being shipped within the `@schematics/angular` package,\\n * or fall back to the TypeScript version that has been flattened in the node modules.\\n *\\n * This is necessary because we parse TypeScript files and pass the resolved AST to the\\n * `@schematics/angular` package which might have a different TypeScript version installed.\\n */\\ndeclare let ts: typeof typescript;\\nexport { ts, typescript };\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/fixed-size-virtual-scroll.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OnChanges } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport { VirtualScrollStrategy } from './virtual-scroll-strategy';\\nimport { CdkVirtualScrollViewport } from './virtual-scroll-viewport';\\n/** Virtual scrolling strategy for lists with items of known fixed size. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class FixedSizeVirtualScrollStrategy implements VirtualScrollStrategy {\\n    private _scrolledIndexChange;\\n    /** @docs-private Implemented as part of VirtualScrollStrategy. */\\n    scrolledIndexChange: Observable<number>;\\n    /** The attached viewport. */\\n    private _viewport;\\n    /** The size of the items in the virtually scrolling list. */\\n    private _itemSize;\\n    /** The minimum amount of buffer rendered beyond the viewport (in pixels). */\\n    private _minBufferPx;\\n    /** The number of buffer items to render beyond the edge of the viewport (in pixels). */\\n    private _maxBufferPx;\\n    /**\\n     * @param itemSize The size of the items in the virtually scrolling list.\\n     * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\\n     * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\\n     */\\n    constructor(itemSize: number, minBufferPx: number, maxBufferPx: number);\\n    /**\\n     * Attaches this scroll strategy to a viewport.\\n     * @param viewport The viewport to attach this strategy to.\\n     */\\n    attach(viewport: CdkVirtualScrollViewport): void;\\n    /** Detaches this scroll strategy from the currently attached viewport. */\\n    detach(): void;\\n    /**\\n     * Update the item size and buffer size.\\n     * @param itemSize The size of the items in the virtually scrolling list.\\n     * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\\n     * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\\n     */\\n    updateItemAndBufferSize(itemSize: number, minBufferPx: number, maxBufferPx: number): void;\\n    /** @docs-private Implemented as part of VirtualScrollStrategy. */\\n    onContentScrolled(): void;\\n    /** @docs-private Implemented as part of VirtualScrollStrategy. */\\n    onDataLengthChanged(): void;\\n    /** @docs-private Implemented as part of VirtualScrollStrategy. */\\n    onContentRendered(): void;\\n    /** @docs-private Implemented as part of VirtualScrollStrategy. */\\n    onRenderedOffsetChanged(): void;\\n    /**\\n     * Scroll to the offset for the given index.\\n     * @param index The index of the element to scroll to.\\n     * @param behavior The ScrollBehavior to use when scrolling.\\n     */\\n    scrollToIndex(index: number, behavior: ScrollBehavior): void;\\n    /** Update the viewport's total content size. */\\n    private _updateTotalContentSize;\\n    /** Update the viewport's rendered range. */\\n    private _updateRenderedRange;\\n}\\n/**\\n * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created\\n * `FixedSizeVirtualScrollStrategy` from the given directive.\\n * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the\\n *     `FixedSizeVirtualScrollStrategy` from.\\n */\\nexport declare function _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir: CdkFixedSizeVirtualScroll): FixedSizeVirtualScrollStrategy;\\n/** A virtual scroll strategy that supports fixed-size items. */\\nexport declare class CdkFixedSizeVirtualScroll implements OnChanges {\\n    /** The size of the items in the list (in pixels). */\\n    itemSize: number;\\n    _itemSize: number;\\n    /**\\n     * The minimum amount of buffer rendered beyond the viewport (in pixels).\\n     * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.\\n     */\\n    minBufferPx: number;\\n    _minBufferPx: number;\\n    /**\\n     * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.\\n     */\\n    maxBufferPx: number;\\n    _maxBufferPx: number;\\n    /** The scroll strategy used by this directive. */\\n    _scrollStrategy: FixedSizeVirtualScrollStrategy;\\n    ngOnChanges(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkFixedSizeVirtualScroll>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkFixedSizeVirtualScroll, \\\"cdk-virtual-scroll-viewport[itemSize]\\\", never, { 'itemSize': \\\"itemSize\\\", 'minBufferPx': \\\"minBufferPx\\\", 'maxBufferPx': \\\"maxBufferPx\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=fixed-size-virtual-scroll.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/index.d.ts\",\n      \"node_modules/@angular/cdk/scrolling/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './fixed-size-virtual-scroll';\\nexport * from './scroll-dispatcher';\\nexport * from './scrollable';\\nexport * from './scrolling-module';\\nexport * from './viewport-ruler';\\nexport * from './virtual-for-of';\\nexport * from './virtual-scroll-strategy';\\nexport * from './virtual-scroll-viewport';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/scroll-dispatcher.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ElementRef, NgZone, OnDestroy, Optional } from '@angular/core';\\nimport { Subscription, Observable } from 'rxjs';\\nimport { CdkScrollable } from './scrollable';\\n/** Time in ms to throttle the scrolling events by default. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const DEFAULT_SCROLL_TIME = 20;\\n/**\\n * Service contained all registered Scrollable references and emits an event when any one of the\\n * Scrollable references emit a scrolled event.\\n */\\nexport declare class ScrollDispatcher implements OnDestroy {\\n    private _ngZone;\\n    private _platform;\\n    constructor(_ngZone: NgZone, _platform: Platform);\\n    /** Subject for notifying that a registered scrollable reference element has been scrolled. */\\n    private _scrolled;\\n    /** Keeps track of the global `scroll` and `resize` subscriptions. */\\n    _globalSubscription: Subscription | null;\\n    /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\\n    private _scrolledCount;\\n    /**\\n     * Map of all the scrollable references that are registered with the service and their\\n     * scroll event subscriptions.\\n     */\\n    scrollContainers: Map<CdkScrollable, Subscription>;\\n    /**\\n     * Registers a scrollable instance with the service and listens for its scrolled events. When the\\n     * scrollable is scrolled, the service emits the event to its scrolled observable.\\n     * @param scrollable Scrollable instance to be registered.\\n     */\\n    register(scrollable: CdkScrollable): void;\\n    /**\\n     * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.\\n     * @param scrollable Scrollable instance to be deregistered.\\n     */\\n    deregister(scrollable: CdkScrollable): void;\\n    /**\\n     * Returns an observable that emits an event whenever any of the registered Scrollable\\n     * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\\n     * to override the default \\\"throttle\\\" time.\\n     *\\n     * **Note:** in order to avoid hitting change detection for every scroll event,\\n     * all of the events emitted from this stream will be run outside the Angular zone.\\n     * If you need to update any data bindings as a result of a scroll event, you have\\n     * to run the callback using `NgZone.run`.\\n     */\\n    scrolled(auditTimeInMs?: number): Observable<CdkScrollable | void>;\\n    ngOnDestroy(): void;\\n    /**\\n     * Returns an observable that emits whenever any of the\\n     * scrollable ancestors of an element are scrolled.\\n     * @param elementRef Element whose ancestors to listen for.\\n     * @param auditTimeInMs Time to throttle the scroll events.\\n     */\\n    ancestorScrolled(elementRef: ElementRef, auditTimeInMs?: number): Observable<CdkScrollable | void>;\\n    /** Returns all registered Scrollables that contain the provided element. */\\n    getAncestorScrollContainers(elementRef: ElementRef): CdkScrollable[];\\n    /** Returns true if the element is contained within the provided Scrollable. */\\n    private _scrollableContainsElement;\\n    /** Sets up the global scroll listeners. */\\n    private _addGlobalListener;\\n    /** Cleans up the global scroll listener. */\\n    private _removeGlobalListener;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ScrollDispatcher>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ScrollDispatcher>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function SCROLL_DISPATCHER_PROVIDER_FACTORY(parentDispatcher: ScrollDispatcher, ngZone: NgZone, platform: Platform): ScrollDispatcher;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const SCROLL_DISPATCHER_PROVIDER: {\\n    provide: typeof ScrollDispatcher;\\n    deps: (Optional[] | typeof NgZone | typeof Platform)[];\\n    useFactory: typeof SCROLL_DISPATCHER_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=scroll-dispatcher.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/scrollable.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport { ScrollDispatcher } from './scroll-dispatcher';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type _Without<T> = {\\n    [P in keyof T]?: never;\\n};\\nexport declare type _XOR<T, U> = (_Without<T> & U) | (_Without<U> & T);\\nexport declare type _Top = {\\n    top?: number;\\n};\\nexport declare type _Bottom = {\\n    bottom?: number;\\n};\\nexport declare type _Left = {\\n    left?: number;\\n};\\nexport declare type _Right = {\\n    right?: number;\\n};\\nexport declare type _Start = {\\n    start?: number;\\n};\\nexport declare type _End = {\\n    end?: number;\\n};\\nexport declare type _XAxis = _XOR<_XOR<_Left, _Right>, _XOR<_Start, _End>>;\\nexport declare type _YAxis = _XOR<_Top, _Bottom>;\\n/**\\n * An extended version of ScrollToOptions that allows expressing scroll offsets relative to the\\n * top, bottom, left, right, start, or end of the viewport rather than just the top and left.\\n * Please note: the top and bottom properties are mutually exclusive, as are the left, right,\\n * start, and end properties.\\n */\\nexport declare type ExtendedScrollToOptions = _XAxis & _YAxis & ScrollOptions;\\n/**\\n * Sends an event when the directive's element is scrolled. Registers itself with the\\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\\n * can be listened to through the service.\\n */\\nexport declare class CdkScrollable implements OnInit, OnDestroy {\\n    protected elementRef: ElementRef<HTMLElement>;\\n    protected scrollDispatcher: ScrollDispatcher;\\n    protected ngZone: NgZone;\\n    protected dir?: Directionality | undefined;\\n    private _destroyed;\\n    private _elementScrolled;\\n    constructor(elementRef: ElementRef<HTMLElement>, scrollDispatcher: ScrollDispatcher, ngZone: NgZone, dir?: Directionality | undefined);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /** Returns observable that emits when a scroll event is fired on the host element. */\\n    elementScrolled(): Observable<Event>;\\n    /** Gets the ElementRef for the viewport. */\\n    getElementRef(): ElementRef<HTMLElement>;\\n    /**\\n     * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo\\n     * method, since browsers are not consistent about what scrollLeft means in RTL. For this method\\n     * left and right always refer to the left and right side of the scrolling container irrespective\\n     * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\\n     * in an RTL context.\\n     * @param options specified the offsets to scroll to.\\n     */\\n    scrollTo(options: ExtendedScrollToOptions): void;\\n    private _applyScrollToOptions;\\n    /**\\n     * Measures the scroll offset relative to the specified edge of the viewport. This method can be\\n     * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent\\n     * about what scrollLeft means in RTL. The values returned by this method are normalized such that\\n     * left and right always refer to the left and right side of the scrolling container irrespective\\n     * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\\n     * in an RTL context.\\n     * @param from The edge to measure from.\\n     */\\n    measureScrollOffset(from: 'top' | 'left' | 'right' | 'bottom' | 'start' | 'end'): number;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkScrollable>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkScrollable, \\\"[cdk-scrollable], [cdkScrollable]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=scrollable.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/scrolling-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './fixed-size-virtual-scroll';\\nimport * as ɵngcc2 from './scrollable';\\nimport * as ɵngcc3 from './virtual-for-of';\\nimport * as ɵngcc4 from './virtual-scroll-viewport';\\nimport * as ɵngcc5 from '@angular/cdk/bidi';\\nimport * as ɵngcc6 from '@angular/cdk/platform';\\nexport declare class ScrollingModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ScrollingModule, [typeof ɵngcc1.CdkFixedSizeVirtualScroll, typeof ɵngcc2.CdkScrollable, typeof ɵngcc3.CdkVirtualForOf, typeof ɵngcc4.CdkVirtualScrollViewport], [typeof ɵngcc5.BidiModule, typeof ɵngcc6.PlatformModule], [typeof ɵngcc5.BidiModule, typeof ɵngcc1.CdkFixedSizeVirtualScroll, typeof ɵngcc2.CdkScrollable, typeof ɵngcc3.CdkVirtualForOf, typeof ɵngcc4.CdkVirtualScrollViewport]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<ScrollingModule>;\\n}\\n/**\\n * @deprecated ScrollDispatchModule has been renamed to ScrollingModule.\\n * @breaking-change 8.0.0 delete this alias\\n */\\nexport declare class ScrollDispatchModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ScrollDispatchModule, never, [typeof ScrollingModule], [typeof ScrollingModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<ScrollDispatchModule>;\\n}\\n\\n//# sourceMappingURL=scrolling-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/viewport-ruler.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { NgZone, OnDestroy, Optional } from '@angular/core';\\nimport { Observable } from 'rxjs';\\n/** Time in ms to throttle the resize events by default. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const DEFAULT_RESIZE_TIME = 20;\\n/** Object that holds the scroll position of the viewport in each direction. */\\nexport interface ViewportScrollPosition {\\n    top: number;\\n    left: number;\\n}\\n/**\\n * Simple utility for getting the bounds of the browser viewport.\\n * @docs-private\\n */\\nexport declare class ViewportRuler implements OnDestroy {\\n    private _platform;\\n    /** Cached viewport dimensions. */\\n    private _viewportSize;\\n    /** Stream of viewport change events. */\\n    private _change;\\n    /** Subscription to streams that invalidate the cached viewport dimensions. */\\n    private _invalidateCache;\\n    constructor(_platform: Platform, ngZone: NgZone);\\n    ngOnDestroy(): void;\\n    /** Returns the viewport's width and height. */\\n    getViewportSize(): Readonly<{\\n        width: number;\\n        height: number;\\n    }>;\\n    /** Gets a ClientRect for the viewport's bounds. */\\n    getViewportRect(): ClientRect;\\n    /** Gets the (top, left) scroll position of the viewport. */\\n    getViewportScrollPosition(): ViewportScrollPosition;\\n    /**\\n     * Returns a stream that emits whenever the size of the viewport changes.\\n     * @param throttleTime Time in milliseconds to throttle the stream.\\n     */\\n    change(throttleTime?: number): Observable<Event>;\\n    /** Updates the cached viewport size. */\\n    private _updateViewportSize;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ViewportRuler>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ViewportRuler>;\\n}\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare function VIEWPORT_RULER_PROVIDER_FACTORY(parentRuler: ViewportRuler, platform: Platform, ngZone: NgZone): ViewportRuler;\\n/** @docs-private @deprecated @breaking-change 8.0.0 */\\nexport declare const VIEWPORT_RULER_PROVIDER: {\\n    provide: typeof ViewportRuler;\\n    deps: (Optional[] | typeof NgZone | typeof Platform)[];\\n    useFactory: typeof VIEWPORT_RULER_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=viewport-ruler.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/virtual-for-of.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CollectionViewer, DataSource, ListRange } from '@angular/cdk/collections';\\nimport { DoCheck, IterableDiffers, NgIterable, NgZone, OnDestroy, TemplateRef, TrackByFunction, ViewContainerRef } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\nimport { CdkVirtualScrollViewport } from './virtual-scroll-viewport';\\n/** The context for an item rendered by `CdkVirtualForOf` */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type CdkVirtualForOfContext<T> = {\\n    /** The item value. */\\n    $implicit: T;\\n    /** The DataSource, Observable, or NgIterable that was passed to *cdkVirtualFor. */\\n    cdkVirtualForOf: DataSource<T> | Observable<T[]> | NgIterable<T>;\\n    /** The index of the item in the DataSource. */\\n    index: number;\\n    /** The number of items in the DataSource. */\\n    count: number;\\n    /** Whether this is the first item in the DataSource. */\\n    first: boolean;\\n    /** Whether this is the last item in the DataSource. */\\n    last: boolean;\\n    /** Whether the index is even. */\\n    even: boolean;\\n    /** Whether the index is odd. */\\n    odd: boolean;\\n};\\n/**\\n * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling\\n * container.\\n */\\nexport declare class CdkVirtualForOf<T> implements CollectionViewer, DoCheck, OnDestroy {\\n    /** The view container to add items to. */\\n    private _viewContainerRef;\\n    /** The template to use when stamping out new items. */\\n    private _template;\\n    /** The set of available differs. */\\n    private _differs;\\n    /** The virtual scrolling viewport that these items are being rendered in. */\\n    private _viewport;\\n    /** Emits when the rendered view of the data changes. */\\n    viewChange: Subject<ListRange>;\\n    /** Subject that emits when a new DataSource instance is given. */\\n    private _dataSourceChanges;\\n    /** The DataSource to display. */\\n    cdkVirtualForOf: DataSource<T> | Observable<T[]> | NgIterable<T>;\\n    _cdkVirtualForOf: DataSource<T> | Observable<T[]> | NgIterable<T>;\\n    /**\\n     * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and\\n     * the item and produces a value to be used as the item's identity when tracking changes.\\n     */\\n    cdkVirtualForTrackBy: TrackByFunction<T> | undefined;\\n    private _cdkVirtualForTrackBy;\\n    /** The template used to stamp out new elements. */\\n    cdkVirtualForTemplate: TemplateRef<CdkVirtualForOfContext<T>>;\\n    /**\\n     * The size of the cache used to store templates that are not being used for re-use later.\\n     * Setting the cache size to `0` will disable caching. Defaults to 20 templates.\\n     */\\n    cdkVirtualForTemplateCacheSize: number;\\n    /** Emits whenever the data in the current DataSource changes. */\\n    dataStream: Observable<T[] | ReadonlyArray<T>>;\\n    /** The differ used to calculate changes to the data. */\\n    private _differ;\\n    /** The most recent data emitted from the DataSource. */\\n    private _data;\\n    /** The currently rendered items. */\\n    private _renderedItems;\\n    /** The currently rendered range of indices. */\\n    private _renderedRange;\\n    /**\\n     * The template cache used to hold on ot template instancess that have been stamped out, but don't\\n     * currently need to be rendered. These instances will be reused in the future rather than\\n     * stamping out brand new ones.\\n     */\\n    private _templateCache;\\n    /** Whether the rendered data should be updated during the next ngDoCheck cycle. */\\n    private _needsUpdate;\\n    private _destroyed;\\n    constructor(\\n    /** The view container to add items to. */\\n    _viewContainerRef: ViewContainerRef, \\n    /** The template to use when stamping out new items. */\\n    _template: TemplateRef<CdkVirtualForOfContext<T>>, \\n    /** The set of available differs. */\\n    _differs: IterableDiffers, \\n    /** The virtual scrolling viewport that these items are being rendered in. */\\n    _viewport: CdkVirtualScrollViewport, ngZone: NgZone);\\n    /**\\n     * Measures the combined size (width for horizontal orientation, height for vertical) of all items\\n     * in the specified range. Throws an error if the range includes items that are not currently\\n     * rendered.\\n     */\\n    measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number;\\n    ngDoCheck(): void;\\n    ngOnDestroy(): void;\\n    /** React to scroll state changes in the viewport. */\\n    private _onRenderedDataChange;\\n    /** Swap out one `DataSource` for another. */\\n    private _changeDataSource;\\n    /** Update the `CdkVirtualForOfContext` for all views. */\\n    private _updateContext;\\n    /** Apply changes to the DOM. */\\n    private _applyChanges;\\n    /** Cache the given detached view. */\\n    private _cacheView;\\n    /** Inserts a view for a new item, either from the cache or by creating a new one. */\\n    private _insertViewForNewItem;\\n    /** Update the computed properties on the `CdkVirtualForOfContext`. */\\n    private _updateComputedContextProperties;\\n    /** Creates a new embedded view and moves it to the given index */\\n    private _createEmbeddedViewAt;\\n    /** Inserts a recycled view from the cache at the given index. */\\n    private _insertViewFromCache;\\n    /** Detaches the embedded view at the given index. */\\n    private _detachView;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkVirtualForOf<any>>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkVirtualForOf<any>, \\\"[cdkVirtualFor][cdkVirtualForOf]\\\", never, { 'cdkVirtualForTemplateCacheSize': \\\"cdkVirtualForTemplateCacheSize\\\", 'cdkVirtualForOf': \\\"cdkVirtualForOf\\\", 'cdkVirtualForTrackBy': \\\"cdkVirtualForTrackBy\\\", 'cdkVirtualForTemplate': \\\"cdkVirtualForTemplate\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=virtual-for-of.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/virtual-scroll-strategy.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport { CdkVirtualScrollViewport } from './virtual-scroll-viewport';\\n/** The injection token used to specify the virtual scrolling strategy. */\\nexport declare const VIRTUAL_SCROLL_STRATEGY: InjectionToken<VirtualScrollStrategy>;\\n/** A strategy that dictates which items should be rendered in the viewport. */\\nexport interface VirtualScrollStrategy {\\n    /** Emits when the index of the first element visible in the viewport changes. */\\n    scrolledIndexChange: Observable<number>;\\n    /**\\n     * Attaches this scroll strategy to a viewport.\\n     * @param viewport The viewport to attach this strategy to.\\n     */\\n    attach(viewport: CdkVirtualScrollViewport): void;\\n    /** Detaches this scroll strategy from the currently attached viewport. */\\n    detach(): void;\\n    /** Called when the viewport is scrolled (debounced using requestAnimationFrame). */\\n    onContentScrolled(): void;\\n    /** Called when the length of the data changes. */\\n    onDataLengthChanged(): void;\\n    /** Called when the range of items rendered in the DOM has changed. */\\n    onContentRendered(): void;\\n    /** Called when the offset of the rendered items changed. */\\n    onRenderedOffsetChanged(): void;\\n    /**\\n     * Scroll to the offset for the given index.\\n     * @param index The index of the element to scroll to.\\n     * @param behavior The ScrollBehavior to use when scrolling.\\n     */\\n    scrollToIndex(index: number, behavior: ScrollBehavior): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/scrolling/virtual-scroll-viewport.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { ListRange } from '@angular/cdk/collections';\\nimport { ChangeDetectorRef, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';\\nimport { Observable } from 'rxjs';\\nimport { ScrollDispatcher } from './scroll-dispatcher';\\nimport { CdkScrollable } from './scrollable';\\nimport { CdkVirtualForOf } from './virtual-for-of';\\nimport { VirtualScrollStrategy } from './virtual-scroll-strategy';\\n/** A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class CdkVirtualScrollViewport extends CdkScrollable implements OnInit, OnDestroy {\\n    elementRef: ElementRef<HTMLElement>;\\n    private _changeDetectorRef;\\n    private _scrollStrategy;\\n    /** Emits when the viewport is detached from a CdkVirtualForOf. */\\n    private _detachedSubject;\\n    /** Emits when the rendered range changes. */\\n    private _renderedRangeSubject;\\n    /** The direction the viewport scrolls. */\\n    orientation: 'horizontal' | 'vertical';\\n    private _orientation;\\n    /** Emits when the index of the first element visible in the viewport changes. */\\n    scrolledIndexChange: Observable<number>;\\n    /** The element that wraps the rendered content. */\\n    _contentWrapper: ElementRef<HTMLElement>;\\n    /** A stream that emits whenever the rendered range changes. */\\n    renderedRangeStream: Observable<ListRange>;\\n    /**\\n     * The total size of all content (in pixels), including content that is not currently rendered.\\n     */\\n    private _totalContentSize;\\n    /** A string representing the `style.width` property value to be used for the spacer element. */\\n    _totalContentWidth: string;\\n    /** A string representing the `style.height` property value to be used for the spacer element. */\\n    _totalContentHeight: string;\\n    /**\\n     * The CSS transform applied to the rendered subset of items so that they appear within the bounds\\n     * of the visible viewport.\\n     */\\n    private _renderedContentTransform;\\n    /** The currently rendered range of indices. */\\n    private _renderedRange;\\n    /** The length of the data bound to this viewport (in number of items). */\\n    private _dataLength;\\n    /** The size of the viewport (in pixels). */\\n    private _viewportSize;\\n    /** the currently attached CdkVirtualForOf. */\\n    private _forOf;\\n    /** The last rendered content offset that was set. */\\n    private _renderedContentOffset;\\n    /**\\n     * Whether the last rendered content offset was to the end of the content (and therefore needs to\\n     * be rewritten as an offset to the start of the content).\\n     */\\n    private _renderedContentOffsetNeedsRewrite;\\n    /** Whether there is a pending change detection cycle. */\\n    private _isChangeDetectionPending;\\n    /** A list of functions to run after the next change detection cycle. */\\n    private _runAfterChangeDetection;\\n    constructor(elementRef: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, ngZone: NgZone, _scrollStrategy: VirtualScrollStrategy, dir: Directionality, scrollDispatcher: ScrollDispatcher);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /** Attaches a `CdkVirtualForOf` to this viewport. */\\n    attach(forOf: CdkVirtualForOf<any>): void;\\n    /** Detaches the current `CdkVirtualForOf`. */\\n    detach(): void;\\n    /** Gets the length of the data bound to this viewport (in number of items). */\\n    getDataLength(): number;\\n    /** Gets the size of the viewport (in pixels). */\\n    getViewportSize(): number;\\n    /** Get the current rendered range of items. */\\n    getRenderedRange(): ListRange;\\n    /**\\n     * Sets the total size of all content (in pixels), including content that is not currently\\n     * rendered.\\n     */\\n    setTotalContentSize(size: number): void;\\n    /** Sets the currently rendered range of indices. */\\n    setRenderedRange(range: ListRange): void;\\n    /**\\n     * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).\\n     */\\n    getOffsetToRenderedContentStart(): number | null;\\n    /**\\n     * Sets the offset from the start of the viewport to either the start or end of the rendered data\\n     * (in pixels).\\n     */\\n    setRenderedContentOffset(offset: number, to?: 'to-start' | 'to-end'): void;\\n    /**\\n     * Scrolls to the given offset from the start of the viewport. Please note that this is not always\\n     * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left\\n     * direction, this would be the equivalent of setting a fictional `scrollRight` property.\\n     * @param offset The offset to scroll to.\\n     * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\\n     */\\n    scrollToOffset(offset: number, behavior?: ScrollBehavior): void;\\n    /**\\n     * Scrolls to the offset for the given index.\\n     * @param index The index of the element to scroll to.\\n     * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\\n     */\\n    scrollToIndex(index: number, behavior?: ScrollBehavior): void;\\n    /**\\n     * Gets the current scroll offset from the start of the viewport (in pixels).\\n     * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'\\n     *     in horizontal mode.\\n     */\\n    measureScrollOffset(from?: 'top' | 'left' | 'right' | 'bottom' | 'start' | 'end'): number;\\n    /** Measure the combined size of all of the rendered items. */\\n    measureRenderedContentSize(): number;\\n    /**\\n     * Measure the total combined size of the given range. Throws if the range includes items that are\\n     * not rendered.\\n     */\\n    measureRangeSize(range: ListRange): number;\\n    /** Update the viewport dimensions and re-render. */\\n    checkViewportSize(): void;\\n    /** Measure the viewport size. */\\n    private _measureViewportSize;\\n    /** Queue up change detection to run. */\\n    private _markChangeDetectionNeeded;\\n    /** Run change detection. */\\n    private _doChangeDetection;\\n    /** Calculates the `style.width` and `style.height` for the spacer element. */\\n    private _calculateSpacerSize;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkVirtualScrollViewport>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<CdkVirtualScrollViewport, \\\"cdk-virtual-scroll-viewport\\\", never, { 'orientation': \\\"orientation\\\" }, { 'scrolledIndexChange': \\\"scrolledIndexChange\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=virtual-scroll-viewport.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/index.d.ts\",\n      \"node_modules/@angular/cdk/stepper/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './stepper';\\nexport * from './step-label';\\nexport * from './stepper-button';\\nexport * from './stepper-module';\\nexport * from './step-header';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/step-header.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef } from '@angular/core';\\nimport { FocusableOption } from '@angular/cdk/a11y';\\nexport declare class CdkStepHeader implements FocusableOption {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    constructor(_elementRef: ElementRef<HTMLElement>);\\n    /** Focuses the step header. */\\n    focus(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/step-label.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\nexport declare class CdkStepLabel {\\n    template: TemplateRef<any>;\\n    constructor(/** @docs-private */ template: TemplateRef<any>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/stepper-button.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkStepper } from './stepper';\\n/** Button that moves to the next step in a stepper workflow. */\\nexport declare class CdkStepperNext {\\n    _stepper: CdkStepper;\\n    /** Type of the next button. Defaults to \\\"submit\\\" if not specified. */\\n    type: string;\\n    constructor(_stepper: CdkStepper);\\n    _handleClick(): void;\\n}\\n/** Button that moves to the previous step in a stepper workflow. */\\nexport declare class CdkStepperPrevious {\\n    _stepper: CdkStepper;\\n    /** Type of the previous button. Defaults to \\\"button\\\" if not specified. */\\n    type: string;\\n    constructor(_stepper: CdkStepper);\\n    _handleClick(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/stepper-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class CdkStepperModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/stepper/stepper.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusableOption } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, OnChanges, OnDestroy, QueryList, TemplateRef } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\nimport { CdkStepLabel } from './step-label';\\n/**\\n * Position state of the content of each step in stepper that is used for transitioning\\n * the content into correct position upon step selection change.\\n */\\nexport declare type StepContentPositionState = 'previous' | 'current' | 'next';\\n/** Possible orientation of a stepper. */\\nexport declare type StepperOrientation = 'horizontal' | 'vertical';\\n/** Change event emitted on selection changes. */\\nexport declare class StepperSelectionEvent {\\n    /** Index of the step now selected. */\\n    selectedIndex: number;\\n    /** Index of the step previously selected. */\\n    previouslySelectedIndex: number;\\n    /** The step instance now selected. */\\n    selectedStep: CdkStep;\\n    /** The step instance previously selected. */\\n    previouslySelectedStep: CdkStep;\\n}\\n/** The state of each step. */\\nexport declare type StepState = 'number' | 'edit' | 'done' | 'error' | string;\\n/** Enum to represent the different states of the steps. */\\nexport declare const STEP_STATE: {\\n    NUMBER: string;\\n    EDIT: string;\\n    DONE: string;\\n    ERROR: string;\\n};\\n/** InjectionToken that can be used to specify the global stepper options. */\\nexport declare const STEPPER_GLOBAL_OPTIONS: InjectionToken<StepperOptions>;\\n/**\\n * InjectionToken that can be used to specify the global stepper options.\\n * @deprecated Use `STEPPER_GLOBAL_OPTIONS` instead.\\n * @breaking-change 8.0.0.\\n */\\nexport declare const MAT_STEPPER_GLOBAL_OPTIONS: InjectionToken<StepperOptions>;\\n/** Configurable options for stepper. */\\nexport interface StepperOptions {\\n    /**\\n     * Whether the stepper should display an error state or not.\\n     * Default behavior is assumed to be false.\\n     */\\n    showError?: boolean;\\n    /**\\n     * Whether the stepper should display the default indicator type\\n     * or not.\\n     * Default behavior is assumed to be true.\\n     */\\n    displayDefaultIndicatorType?: boolean;\\n}\\nexport declare class CdkStep implements OnChanges {\\n    private _stepper;\\n    private _stepperOptions;\\n    _showError: boolean;\\n    _displayDefaultIndicatorType: boolean;\\n    /** Template for step label if it exists. */\\n    stepLabel: CdkStepLabel;\\n    /** Template for step content. */\\n    content: TemplateRef<any>;\\n    /** The top level abstract control of the step. */\\n    stepControl: FormControlLike;\\n    /** Whether user has seen the expanded step content or not. */\\n    interacted: boolean;\\n    /** Plain text label of the step. */\\n    label: string;\\n    /** Error message to display when there's an error. */\\n    errorMessage: string;\\n    /** Aria label for the tab. */\\n    ariaLabel: string;\\n    /**\\n     * Reference to the element that the tab is labelled by.\\n     * Will be cleared if `aria-label` is set at the same time.\\n     */\\n    ariaLabelledby: string;\\n    /** State of the step. */\\n    state: StepState;\\n    /** Whether the user can return to this step once it has been marked as completed. */\\n    editable: boolean;\\n    private _editable;\\n    /** Whether the completion of step is optional. */\\n    optional: boolean;\\n    private _optional;\\n    /** Whether step is marked as completed. */\\n    completed: boolean;\\n    _completedOverride: boolean | null;\\n    private _getDefaultCompleted;\\n    /** Whether step has an error. */\\n    hasError: boolean;\\n    private _customError;\\n    private _getDefaultError;\\n    /** @breaking-change 8.0.0 remove the `?` after `stepperOptions` */\\n    constructor(_stepper: CdkStepper, stepperOptions?: StepperOptions);\\n    /** Selects this step component. */\\n    select(): void;\\n    /** Resets the step to its initial state. Note that this includes resetting form data. */\\n    reset(): void;\\n    ngOnChanges(): void;\\n}\\nexport declare class CdkStepper implements AfterViewInit, OnDestroy {\\n    private _dir;\\n    private _changeDetectorRef;\\n    private _elementRef?;\\n    /** Emits when the component is destroyed. */\\n    protected _destroyed: Subject<void>;\\n    /** Used for managing keyboard focus. */\\n    private _keyManager;\\n    /**\\n     * @breaking-change 8.0.0 Remove `| undefined` once the `_document`\\n     * constructor param is required.\\n     */\\n    private _document;\\n    /**\\n     * The list of step components that the stepper is holding.\\n     * @deprecated use `steps` instead\\n     * @breaking-change 9.0.0 remove this property\\n     */\\n    _steps: QueryList<CdkStep>;\\n    /** The list of step components that the stepper is holding. */\\n    readonly steps: QueryList<CdkStep>;\\n    /**\\n     * The list of step headers of the steps in the stepper.\\n     * @deprecated Type to be changed to `QueryList<CdkStepHeader>`.\\n     * @breaking-change 8.0.0\\n     */\\n    _stepHeader: QueryList<FocusableOption>;\\n    /** Whether the validity of previous steps should be checked or not. */\\n    linear: boolean;\\n    private _linear;\\n    /** The index of the selected step. */\\n    selectedIndex: number;\\n    private _selectedIndex;\\n    /** The step that is selected. */\\n    selected: CdkStep;\\n    /** Event emitted when the selected step has changed. */\\n    selectionChange: EventEmitter<StepperSelectionEvent>;\\n    /** Used to track unique ID for each stepper component. */\\n    _groupId: number;\\n    protected _orientation: StepperOrientation;\\n    constructor(_dir: Directionality, _changeDetectorRef: ChangeDetectorRef, _elementRef?: ElementRef<HTMLElement> | undefined, _document?: any);\\n    ngAfterViewInit(): void;\\n    ngOnDestroy(): void;\\n    /** Selects and focuses the next step in list. */\\n    next(): void;\\n    /** Selects and focuses the previous step in list. */\\n    previous(): void;\\n    /** Resets the stepper to its initial state. Note that this includes clearing form data. */\\n    reset(): void;\\n    /** Returns a unique id for each step label element. */\\n    _getStepLabelId(i: number): string;\\n    /** Returns unique id for each step content element. */\\n    _getStepContentId(i: number): string;\\n    /** Marks the component to be change detected. */\\n    _stateChanged(): void;\\n    /** Returns position state of the step with the given index. */\\n    _getAnimationDirection(index: number): StepContentPositionState;\\n    /** Returns the type of icon to be displayed. */\\n    _getIndicatorType(index: number, state?: StepState): StepState;\\n    private _getDefaultIndicatorLogic;\\n    private _getGuidelineLogic;\\n    private _isCurrentStep;\\n    /** Returns the index of the currently-focused step header. */\\n    _getFocusIndex(): number | null;\\n    private _updateSelectedItemIndex;\\n    _onKeydown(event: KeyboardEvent): void;\\n    private _anyControlsInvalidOrPending;\\n    private _layoutDirection;\\n    /** Checks whether the stepper contains the focused element. */\\n    private _containsFocus;\\n}\\n/**\\n * Simplified representation of a FormControl from @angular/forms.\\n * Used to avoid having to bring in @angular/forms for a single optional interface.\\n * @docs-private\\n */\\ninterface FormControlLike {\\n    asyncValidator: () => any | null;\\n    dirty: boolean;\\n    disabled: boolean;\\n    enabled: boolean;\\n    errors: {\\n        [key: string]: any;\\n    } | null;\\n    invalid: boolean;\\n    parent: any;\\n    pending: boolean;\\n    pristine: boolean;\\n    root: FormControlLike;\\n    status: string;\\n    statusChanges: Observable<any>;\\n    touched: boolean;\\n    untouched: boolean;\\n    updateOn: any;\\n    valid: boolean;\\n    validator: () => any | null;\\n    value: any;\\n    valueChanges: Observable<any>;\\n    clearAsyncValidators(): void;\\n    clearValidators(): void;\\n    disable(opts?: any): void;\\n    enable(opts?: any): void;\\n    get(path: (string | number)[] | string): FormControlLike | null;\\n    getError(errorCode: string, path?: (string | number)[] | string): any;\\n    hasError(errorCode: string, path?: (string | number)[] | string): boolean;\\n    markAllAsTouched(): void;\\n    markAsDirty(opts?: any): void;\\n    markAsPending(opts?: any): void;\\n    markAsPristine(opts?: any): void;\\n    markAsTouched(opts?: any): void;\\n    markAsUntouched(opts?: any): void;\\n    patchValue(value: any, options?: Object): void;\\n    reset(value?: any, options?: Object): void;\\n    setAsyncValidators(newValidator: () => any | (() => any)[] | null): void;\\n    setErrors(errors: {\\n        [key: string]: any;\\n    } | null, opts?: any): void;\\n    setParent(parent: any): void;\\n    setValidators(newValidator: () => any | (() => any)[] | null): void;\\n    setValue(value: any, options?: Object): void;\\n    updateValueAndValidity(opts?: any): void;\\n    patchValue(value: any, options?: any): void;\\n    registerOnChange(fn: Function): void;\\n    registerOnDisabledChange(fn: (isDisabled: boolean) => void): void;\\n    reset(formState?: any, options?: any): void;\\n    setValue(value: any, options?: any): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/can-stick.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare type Constructor<T> = new (...args: any[]) => T;\\n/**\\n * Interface for a mixin to provide a directive with a function that checks if the sticky input has\\n * been changed since the last time the function was called. Essentially adds a dirty-check to the\\n * sticky value.\\n * @docs-private\\n */\\nexport interface CanStick {\\n    /** Whether sticky positioning should be applied. */\\n    sticky: boolean;\\n    /** Whether the sticky input has changed since it was last checked. */\\n    _hasStickyChanged: boolean;\\n    /** Whether the sticky value has changed since this was last called. */\\n    hasStickyChanged(): boolean;\\n    /** Resets the dirty check for cases where the sticky state has been used without checking. */\\n    resetStickyChanged(): void;\\n}\\n/** @docs-private */\\nexport declare type CanStickCtor = Constructor<CanStick>;\\n/**\\n * Mixin to provide a directive with a function that checks if the sticky input has been\\n * changed since the last time the function was called. Essentially adds a dirty-check to the\\n * sticky value.\\n * @docs-private\\n */\\nexport declare function mixinHasStickyInput<T extends Constructor<{}>>(base: T): CanStickCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/cell.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, TemplateRef } from '@angular/core';\\nimport { CanStick, CanStickCtor } from './can-stick';\\n/** Base interface for a cell definition. Captures a column's cell template definition. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface CellDef {\\n    template: TemplateRef<any>;\\n}\\n/**\\n * Cell definition for a CDK table.\\n * Captures the template of a column's data row cell as well as cell-specific properties.\\n */\\nexport declare class CdkCellDef implements CellDef {\\n    template: TemplateRef<any>;\\n    constructor(/** @docs-private */ template: TemplateRef<any>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkCellDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkCellDef, \\\"[cdkCellDef]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Header cell definition for a CDK table.\\n * Captures the template of a column's header cell and as well as cell-specific properties.\\n */\\nexport declare class CdkHeaderCellDef implements CellDef {\\n    template: TemplateRef<any>;\\n    constructor(/** @docs-private */ template: TemplateRef<any>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkHeaderCellDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkHeaderCellDef, \\\"[cdkHeaderCellDef]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Footer cell definition for a CDK table.\\n * Captures the template of a column's footer cell and as well as cell-specific properties.\\n */\\nexport declare class CdkFooterCellDef implements CellDef {\\n    template: TemplateRef<any>;\\n    constructor(/** @docs-private */ template: TemplateRef<any>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkFooterCellDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkFooterCellDef, \\\"[cdkFooterCellDef]\\\", never, {}, {}, never>;\\n}\\n/** @docs-private */\\ndeclare class CdkColumnDefBase {\\n}\\ndeclare const _CdkColumnDefBase: CanStickCtor & typeof CdkColumnDefBase;\\n/**\\n * Column definition for the CDK table.\\n * Defines a set of cells available for a table column.\\n */\\nexport declare class CdkColumnDef extends _CdkColumnDefBase implements CanStick {\\n    /** Unique name for this column. */\\n    name: string;\\n    _name: string;\\n    /**\\n     * Whether this column should be sticky positioned on the end of the row. Should make sure\\n     * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\\n     * has been changed.\\n     */\\n    stickyEnd: boolean;\\n    _stickyEnd: boolean;\\n    /** @docs-private */\\n    cell: CdkCellDef;\\n    /** @docs-private */\\n    headerCell: CdkHeaderCellDef;\\n    /** @docs-private */\\n    footerCell: CdkFooterCellDef;\\n    /**\\n     * Transformed version of the column name that can be used as part of a CSS classname. Excludes\\n     * all non-alphanumeric characters and the special characters '-' and '_'. Any characters that\\n     * do not match are replaced by the '-' character.\\n     */\\n    cssClassFriendlyName: string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkColumnDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkColumnDef, \\\"[cdkColumnDef]\\\", never, { 'sticky': \\\"sticky\\\", 'name': \\\"cdkColumnDef\\\", 'stickyEnd': \\\"stickyEnd\\\" }, {}, [\\\"cell\\\", \\\"headerCell\\\", \\\"footerCell\\\"]>;\\n}\\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\\nexport declare class BaseCdkCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef);\\n}\\n/** Header cell template container that adds the right classes and role. */\\nexport declare class CdkHeaderCell extends BaseCdkCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkHeaderCell>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkHeaderCell, \\\"cdk-header-cell, th[cdk-header-cell]\\\", never, {}, {}, never>;\\n}\\n/** Footer cell template container that adds the right classes and role. */\\nexport declare class CdkFooterCell extends BaseCdkCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkFooterCell>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkFooterCell, \\\"cdk-footer-cell, td[cdk-footer-cell]\\\", never, {}, {}, never>;\\n}\\n/** Cell template container that adds the right classes and role. */\\nexport declare class CdkCell extends BaseCdkCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkCell>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkCell, \\\"cdk-cell, td[cdk-cell]\\\", never, {}, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=cell.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/index.d.ts\",\n      \"node_modules/@angular/cdk/table/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './table';\\nexport * from './cell';\\nexport * from './row';\\nexport * from './table-module';\\nexport * from './sticky-styler';\\nexport * from './can-stick';\\nexport * from './text-column';\\n/** Re-export DataSource for a more intuitive experience for users of just the table. */\\nexport { DataSource } from '@angular/cdk/collections';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/row.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { IterableChanges, IterableDiffer, IterableDiffers, OnChanges, OnDestroy, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\\nimport { CanStick, CanStickCtor } from './can-stick';\\nimport { CdkCellDef, CdkColumnDef } from './cell';\\n/**\\n * The row template that can be used by the mat-table. Should not be used outside of the\\n * material library.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const CDK_ROW_TEMPLATE = \\\"<ng-container cdkCellOutlet></ng-container>\\\";\\n/**\\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\\n * for changes and notifying the table.\\n */\\nexport declare abstract class BaseRowDef implements OnChanges {\\n    /** @docs-private */ template: TemplateRef<any>;\\n    protected _differs: IterableDiffers;\\n    /** The columns to be displayed on this row. */\\n    columns: Iterable<string>;\\n    /** Differ used to check if any changes were made to the columns. */\\n    protected _columnsDiffer: IterableDiffer<any>;\\n    constructor(\\n    /** @docs-private */ template: TemplateRef<any>, _differs: IterableDiffers);\\n    ngOnChanges(changes: SimpleChanges): void;\\n    /**\\n     * Returns the difference between the current columns and the columns from the last diff, or null\\n     * if there is no difference.\\n     */\\n    getColumnsDiff(): IterableChanges<any> | null;\\n    /** Gets this row def's relevant cell template from the provided column def. */\\n    extractCellTemplate(column: CdkColumnDef): TemplateRef<any>;\\n}\\n/** @docs-private */\\ndeclare class CdkHeaderRowDefBase extends BaseRowDef {\\n}\\ndeclare const _CdkHeaderRowDefBase: CanStickCtor & typeof CdkHeaderRowDefBase;\\n/**\\n * Header row definition for the CDK table.\\n * Captures the header row's template and other header properties such as the columns to display.\\n */\\nexport declare class CdkHeaderRowDef extends _CdkHeaderRowDefBase implements CanStick, OnChanges {\\n    constructor(template: TemplateRef<any>, _differs: IterableDiffers);\\n    ngOnChanges(changes: SimpleChanges): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkHeaderRowDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkHeaderRowDef, \\\"[cdkHeaderRowDef]\\\", never, { 'columns': \\\"cdkHeaderRowDef\\\", 'sticky': \\\"cdkHeaderRowDefSticky\\\" }, {}, never>;\\n}\\n/** @docs-private */\\ndeclare class CdkFooterRowDefBase extends BaseRowDef {\\n}\\ndeclare const _CdkFooterRowDefBase: CanStickCtor & typeof CdkFooterRowDefBase;\\n/**\\n * Footer row definition for the CDK table.\\n * Captures the footer row's template and other footer properties such as the columns to display.\\n */\\nexport declare class CdkFooterRowDef extends _CdkFooterRowDefBase implements CanStick, OnChanges {\\n    constructor(template: TemplateRef<any>, _differs: IterableDiffers);\\n    ngOnChanges(changes: SimpleChanges): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkFooterRowDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkFooterRowDef, \\\"[cdkFooterRowDef]\\\", never, { 'columns': \\\"cdkFooterRowDef\\\", 'sticky': \\\"cdkFooterRowDefSticky\\\" }, {}, never>;\\n}\\n/**\\n * Data row definition for the CDK table.\\n * Captures the header row's template and other row properties such as the columns to display and\\n * a when predicate that describes when this row should be used.\\n */\\nexport declare class CdkRowDef<T> extends BaseRowDef {\\n    /**\\n     * Function that should return true if this row template should be used for the provided index\\n     * and row data. If left undefined, this row will be considered the default row template to use\\n     * when no other when functions return true for the data.\\n     * For every row, there must be at least one when function that passes or an undefined to default.\\n     */\\n    when: (index: number, rowData: T) => boolean;\\n    constructor(template: TemplateRef<any>, _differs: IterableDiffers);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkRowDef<any>>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkRowDef<any>, \\\"[cdkRowDef]\\\", never, { 'columns': \\\"cdkRowDefColumns\\\", 'when': \\\"cdkRowDefWhen\\\" }, {}, never>;\\n}\\n/** Context provided to the row cells when `multiTemplateDataRows` is false */\\nexport interface CdkCellOutletRowContext<T> {\\n    /** Data for the row that this cell is located within. */\\n    $implicit?: T;\\n    /** Index of the data object in the provided data array. */\\n    index?: number;\\n    /** Length of the number of total rows. */\\n    count?: number;\\n    /** True if this cell is contained in the first row. */\\n    first?: boolean;\\n    /** True if this cell is contained in the last row. */\\n    last?: boolean;\\n    /** True if this cell is contained in a row with an even-numbered index. */\\n    even?: boolean;\\n    /** True if this cell is contained in a row with an odd-numbered index. */\\n    odd?: boolean;\\n}\\n/**\\n * Context provided to the row cells when `multiTemplateDataRows` is true. This context is the same\\n * as CdkCellOutletRowContext except that the single `index` value is replaced by `dataIndex` and\\n * `renderIndex`.\\n */\\nexport interface CdkCellOutletMultiRowContext<T> {\\n    /** Data for the row that this cell is located within. */\\n    $implicit?: T;\\n    /** Index of the data object in the provided data array. */\\n    dataIndex?: number;\\n    /** Index location of the rendered row that this cell is located within. */\\n    renderIndex?: number;\\n    /** Length of the number of total rows. */\\n    count?: number;\\n    /** True if this cell is contained in the first row. */\\n    first?: boolean;\\n    /** True if this cell is contained in the last row. */\\n    last?: boolean;\\n    /** True if this cell is contained in a row with an even-numbered index. */\\n    even?: boolean;\\n    /** True if this cell is contained in a row with an odd-numbered index. */\\n    odd?: boolean;\\n}\\n/**\\n * Outlet for rendering cells inside of a row or header row.\\n * @docs-private\\n */\\nexport declare class CdkCellOutlet implements OnDestroy {\\n    _viewContainer: ViewContainerRef;\\n    /** The ordered list of cells to render within this outlet's view container */\\n    cells: CdkCellDef[];\\n    /** The data context to be provided to each cell */\\n    context: any;\\n    /**\\n     * Static property containing the latest constructed instance of this class.\\n     * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\\n     * createEmbeddedView. After one of these components are created, this property will provide\\n     * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\\n     * construct the cells with the provided context.\\n     */\\n    static mostRecentCellOutlet: CdkCellOutlet | null;\\n    constructor(_viewContainer: ViewContainerRef);\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkCellOutlet>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkCellOutlet, \\\"[cdkCellOutlet]\\\", never, {}, {}, never>;\\n}\\n/** Header template container that contains the cell outlet. Adds the right class and role. */\\nexport declare class CdkHeaderRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkHeaderRow>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<CdkHeaderRow, \\\"cdk-header-row, tr[cdk-header-row]\\\", never, {}, {}, never>;\\n}\\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\\nexport declare class CdkFooterRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkFooterRow>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<CdkFooterRow, \\\"cdk-footer-row, tr[cdk-footer-row]\\\", never, {}, {}, never>;\\n}\\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\\nexport declare class CdkRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkRow>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<CdkRow, \\\"cdk-row, tr[cdk-row]\\\", never, {}, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=row.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/sticky-styler.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Directions that can be used when setting sticky positioning.\\n * @docs-private\\n */\\nimport { Direction } from '@angular/cdk/bidi';\\nexport declare type StickyDirection = 'top' | 'bottom' | 'left' | 'right';\\n/**\\n * List of all possible directions that can be used for sticky positioning.\\n * @docs-private\\n */\\nexport declare const STICKY_DIRECTIONS: StickyDirection[];\\n/**\\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\\n * @docs-private\\n */\\nexport declare class StickyStyler {\\n    private _isNativeHtmlTable;\\n    private _stickCellCss;\\n    direction: Direction;\\n    private _isBrowser;\\n    /**\\n     * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\\n     *     that uses the native `<table>` element.\\n     * @param _stickCellCss The CSS class that will be applied to every row/cell that has\\n     *     sticky positioning applied.\\n     * @param direction The directionality context of the table (ltr/rtl); affects column positioning\\n     *     by reversing left/right positions.\\n     * @param _isBrowser Whether the table is currently being rendered on the server or the client.\\n     */\\n    constructor(_isNativeHtmlTable: boolean, _stickCellCss: string, direction: Direction, _isBrowser?: boolean);\\n    /**\\n     * Clears the sticky positioning styles from the row and its cells by resetting the `position`\\n     * style, setting the zIndex to 0, and unsetting each provided sticky direction.\\n     * @param rows The list of rows that should be cleared from sticking in the provided directions\\n     * @param stickyDirections The directions that should no longer be set as sticky on the rows.\\n     */\\n    clearStickyPositioning(rows: HTMLElement[], stickyDirections: StickyDirection[]): void;\\n    /**\\n     * Applies sticky left and right positions to the cells of each row according to the sticky\\n     * states of the rendered column definitions.\\n     * @param rows The rows that should have its set of cells stuck according to the sticky states.\\n     * @param stickyStartStates A list of boolean states where each state represents whether the cell\\n     *     in this index position should be stuck to the start of the row.\\n     * @param stickyEndStates A list of boolean states where each state represents whether the cell\\n     *     in this index position should be stuck to the end of the row.\\n     */\\n    updateStickyColumns(rows: HTMLElement[], stickyStartStates: boolean[], stickyEndStates: boolean[]): void;\\n    /**\\n     * Applies sticky positioning to the row's cells if using the native table layout, and to the\\n     * row itself otherwise.\\n     * @param rowsToStick The list of rows that should be stuck according to their corresponding\\n     *     sticky state and to the provided top or bottom position.\\n     * @param stickyStates A list of boolean states where each state represents whether the row\\n     *     should be stuck in the particular top or bottom position.\\n     * @param position The position direction in which the row should be stuck if that row should be\\n     *     sticky.\\n     *\\n     */\\n    stickRows(rowsToStick: HTMLElement[], stickyStates: boolean[], position: 'top' | 'bottom'): void;\\n    /**\\n     * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\\n     * footer rows is to apply sticky styling to the tfoot container. This should only be done if\\n     * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\\n     * the tfoot element.\\n     */\\n    updateStickyFooterContainer(tableElement: Element, stickyStates: boolean[]): void;\\n    /**\\n     * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating\\n     * the zIndex, removing each of the provided sticky directions, and removing the\\n     * sticky position if there are no more directions.\\n     */\\n    _removeStickyStyle(element: HTMLElement, stickyDirections: StickyDirection[]): void;\\n    /**\\n     * Adds the sticky styling to the element by adding the sticky style class, changing position\\n     * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\\n     * direction and value.\\n     */\\n    _addStickyStyle(element: HTMLElement, dir: StickyDirection, dirValue: number): void;\\n    /**\\n     * Calculate what the z-index should be for the element, depending on what directions (top,\\n     * bottom, left, right) have been set. It should be true that elements with a top direction\\n     * should have the highest index since these are elements like a table header. If any of those\\n     * elements are also sticky in another direction, then they should appear above other elements\\n     * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\\n     * (e.g. footer rows) should then be next in the ordering such that they are below the header\\n     * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\\n     * should minimally increment so that they are above non-sticky elements but below top and bottom\\n     * elements.\\n     */\\n    _getCalculatedZIndex(element: HTMLElement): string;\\n    /** Gets the widths for each cell in the provided row. */\\n    _getCellWidths(row: HTMLElement): number[];\\n    /**\\n     * Determines the left and right positions of each sticky column cell, which will be the\\n     * accumulation of all sticky column cell widths to the left and right, respectively.\\n     * Non-sticky cells do not need to have a value set since their positions will not be applied.\\n     */\\n    _getStickyStartColumnPositions(widths: number[], stickyStates: boolean[]): number[];\\n    /**\\n     * Determines the left and right positions of each sticky column cell, which will be the\\n     * accumulation of all sticky column cell widths to the left and right, respectively.\\n     * Non-sticky cells do not need to have a value set since their positions will not be applied.\\n     */\\n    _getStickyEndColumnPositions(widths: number[], stickyStates: boolean[]): number[];\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/table-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Returns an error to be thrown when attempting to find an unexisting column.\\n * @param id Id whose lookup failed.\\n * @docs-private\\n */\\nexport declare function getTableUnknownColumnError(id: string): Error;\\n/**\\n * Returns an error to be thrown when two column definitions have the same name.\\n * @docs-private\\n */\\nexport declare function getTableDuplicateColumnNameError(name: string): Error;\\n/**\\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\\n * @docs-private\\n */\\nexport declare function getTableMultipleDefaultRowDefsError(): Error;\\n/**\\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\\n * @docs-private\\n */\\nexport declare function getTableMissingMatchingRowDefError(data: any): Error;\\n/**\\n * Returns an error to be thrown when there is no row definitions present in the content.\\n * @docs-private\\n */\\nexport declare function getTableMissingRowDefsError(): Error;\\n/**\\n * Returns an error to be thrown when the data source does not match the compatible types.\\n * @docs-private\\n */\\nexport declare function getTableUnknownDataSourceError(): Error;\\n/**\\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\\n * @docs-private\\n */\\nexport declare function getTableTextColumnMissingParentTableError(): Error;\\n/**\\n * Returns an error to be thrown when a table text column doesn't have a name.\\n * @docs-private\\n */\\nexport declare function getTableTextColumnMissingNameError(): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/table-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './table';\\nimport * as ɵngcc2 from './row';\\nimport * as ɵngcc3 from './cell';\\nimport * as ɵngcc4 from './text-column';\\nimport * as ɵngcc5 from '@angular/common';\\nexport declare class CdkTableModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<CdkTableModule, [typeof ɵngcc1.CdkTable, typeof ɵngcc2.CdkRowDef, typeof ɵngcc3.CdkCellDef, typeof ɵngcc2.CdkCellOutlet, typeof ɵngcc3.CdkHeaderCellDef, typeof ɵngcc3.CdkFooterCellDef, typeof ɵngcc3.CdkColumnDef, typeof ɵngcc3.CdkCell, typeof ɵngcc2.CdkRow, typeof ɵngcc3.CdkHeaderCell, typeof ɵngcc3.CdkFooterCell, typeof ɵngcc2.CdkHeaderRow, typeof ɵngcc2.CdkHeaderRowDef, typeof ɵngcc2.CdkFooterRow, typeof ɵngcc2.CdkFooterRowDef, typeof ɵngcc1.DataRowOutlet, typeof ɵngcc1.HeaderRowOutlet, typeof ɵngcc1.FooterRowOutlet, typeof ɵngcc4.CdkTextColumn], [typeof ɵngcc5.CommonModule], [typeof ɵngcc1.CdkTable, typeof ɵngcc2.CdkRowDef, typeof ɵngcc3.CdkCellDef, typeof ɵngcc2.CdkCellOutlet, typeof ɵngcc3.CdkHeaderCellDef, typeof ɵngcc3.CdkFooterCellDef, typeof ɵngcc3.CdkColumnDef, typeof ɵngcc3.CdkCell, typeof ɵngcc2.CdkRow, typeof ɵngcc3.CdkHeaderCell, typeof ɵngcc3.CdkFooterCell, typeof ɵngcc2.CdkHeaderRow, typeof ɵngcc2.CdkHeaderRowDef, typeof ɵngcc2.CdkFooterRow, typeof ɵngcc2.CdkFooterRowDef, typeof ɵngcc1.DataRowOutlet, typeof ɵngcc1.HeaderRowOutlet, typeof ɵngcc1.FooterRowOutlet, typeof ɵngcc4.CdkTextColumn]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<CdkTableModule>;\\n}\\n\\n//# sourceMappingURL=table-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/table.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { AfterContentChecked, ChangeDetectorRef, ElementRef, IterableDiffers, OnDestroy, OnInit, QueryList, TrackByFunction, ViewContainerRef } from '@angular/core';\\nimport { BehaviorSubject, Observable } from 'rxjs';\\nimport { CdkColumnDef } from './cell';\\nimport { CdkCellOutletMultiRowContext, CdkCellOutletRowContext, CdkFooterRowDef, CdkHeaderRowDef, CdkRowDef } from './row';\\n/** Interface used to provide an outlet for rows to be inserted into. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface RowOutlet {\\n    viewContainer: ViewContainerRef;\\n}\\n/**\\n * Union of the types that can be set as the data source for a `CdkTable`.\\n * @docs-private\\n */\\ndeclare type CdkTableDataSourceInput<T> = DataSource<T> | Observable<ReadonlyArray<T> | T[]> | ReadonlyArray<T> | T[];\\n/**\\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\\n * @docs-private\\n */\\nexport declare class DataRowOutlet implements RowOutlet {\\n    viewContainer: ViewContainerRef;\\n    elementRef: ElementRef;\\n    constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<DataRowOutlet>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<DataRowOutlet, \\\"[rowOutlet]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\\n * @docs-private\\n */\\nexport declare class HeaderRowOutlet implements RowOutlet {\\n    viewContainer: ViewContainerRef;\\n    elementRef: ElementRef;\\n    constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<HeaderRowOutlet>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<HeaderRowOutlet, \\\"[headerRowOutlet]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\\n * @docs-private\\n */\\nexport declare class FooterRowOutlet implements RowOutlet {\\n    viewContainer: ViewContainerRef;\\n    elementRef: ElementRef;\\n    constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FooterRowOutlet>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<FooterRowOutlet, \\\"[footerRowOutlet]\\\", never, {}, {}, never>;\\n}\\n/**\\n * The table template that can be used by the mat-table. Should not be used outside of the\\n * material library.\\n * @docs-private\\n */\\nexport declare const CDK_TABLE_TEMPLATE = \\\"\\\\n  <ng-content select=\\\\\\\"caption\\\\\\\"></ng-content>\\\\n  <ng-container headerRowOutlet></ng-container>\\\\n  <ng-container rowOutlet></ng-container>\\\\n  <ng-container footerRowOutlet></ng-container>\\\\n\\\";\\n/**\\n * Interface used to conveniently type the possible context interfaces for the render row.\\n * @docs-private\\n */\\nexport interface RowContext<T> extends CdkCellOutletMultiRowContext<T>, CdkCellOutletRowContext<T> {\\n}\\n/**\\n * Set of properties that represents the identity of a single rendered row.\\n *\\n * When the table needs to determine the list of rows to render, it will do so by iterating through\\n * each data object and evaluating its list of row templates to display (when multiTemplateDataRows\\n * is false, there is only one template per data object). For each pair of data object and row\\n * template, a `RenderRow` is added to the list of rows to render. If the data object and row\\n * template pair has already been rendered, the previously used `RenderRow` is added; else a new\\n * `RenderRow` is * created. Once the list is complete and all data objects have been itereated\\n * through, a diff is performed to determine the changes that need to be made to the rendered rows.\\n *\\n * @docs-private\\n */\\nexport interface RenderRow<T> {\\n    data: T;\\n    dataIndex: number;\\n    rowDef: CdkRowDef<T>;\\n}\\n/**\\n * A data table that can render a header row, data rows, and a footer row.\\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\\n * connect function that will return an Observable stream that emits the data array to render.\\n */\\nexport declare class CdkTable<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {\\n    protected readonly _differs: IterableDiffers;\\n    protected readonly _changeDetectorRef: ChangeDetectorRef;\\n    protected readonly _elementRef: ElementRef;\\n    protected readonly _dir: Directionality;\\n    private _platform;\\n    private _document;\\n    /** Latest data provided by the data source. */\\n    protected _data: T[] | ReadonlyArray<T>;\\n    /** Subject that emits when the component has been destroyed. */\\n    private _onDestroy;\\n    /** List of the rendered rows as identified by their `RenderRow` object. */\\n    private _renderRows;\\n    /** Subscription that listens for the data provided by the data source. */\\n    private _renderChangeSubscription;\\n    /**\\n     * Map of all the user's defined columns (header, data, and footer cell template) identified by\\n     * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\\n     * any custom column definitions added to `_customColumnDefs`.\\n     */\\n    private _columnDefsByName;\\n    /**\\n     * Set of all row definitions that can be used by this table. Populated by the rows gathered by\\n     * using `ContentChildren` as well as any custom row definitions added to `_customRowDefs`.\\n     */\\n    private _rowDefs;\\n    /**\\n     * Set of all header row definitions that can be used by this table. Populated by the rows\\n     * gathered by using `ContentChildren` as well as any custom row definitions added to\\n     * `_customHeaderRowDefs`.\\n     */\\n    private _headerRowDefs;\\n    /**\\n     * Set of all row definitions that can be used by this table. Populated by the rows gathered by\\n     * using `ContentChildren` as well as any custom row definitions added to\\n     * `_customFooterRowDefs`.\\n     */\\n    private _footerRowDefs;\\n    /** Differ used to find the changes in the data provided by the data source. */\\n    private _dataDiffer;\\n    /** Stores the row definition that does not have a when predicate. */\\n    private _defaultRowDef;\\n    /**\\n     * Column definitions that were defined outside of the direct content children of the table.\\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has\\n     * column definitions as *its* content child.\\n     */\\n    private _customColumnDefs;\\n    /**\\n     * Data row definitions that were defined outside of the direct content children of the table.\\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has\\n     * built-in data rows as *its* content child.\\n     */\\n    private _customRowDefs;\\n    /**\\n     * Header row definitions that were defined outside of the direct content children of the table.\\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has\\n     * built-in header rows as *its* content child.\\n     */\\n    private _customHeaderRowDefs;\\n    /**\\n     * Footer row definitions that were defined outside of the direct content children of the table.\\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\\n     * built-in footer row as *its* content child.\\n     */\\n    private _customFooterRowDefs;\\n    /**\\n     * Whether the header row definition has been changed. Triggers an update to the header row after\\n     * content is checked. Initialized as true so that the table renders the initial set of rows.\\n     */\\n    private _headerRowDefChanged;\\n    /**\\n     * Whether the footer row definition has been changed. Triggers an update to the footer row after\\n     * content is checked. Initialized as true so that the table renders the initial set of rows.\\n     */\\n    private _footerRowDefChanged;\\n    /**\\n     * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\\n     * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\\n     * the cached `RenderRow` objects when possible, the row identity is preserved when the data\\n     * and row template matches, which allows the `IterableDiffer` to check rows by reference\\n     * and understand which rows are added/moved/removed.\\n     *\\n     * Implemented as a map of maps where the first key is the `data: T` object and the second is the\\n     * `CdkRowDef<T>` object. With the two keys, the cache points to a `RenderRow<T>` object that\\n     * contains an array of created pairs. The array is necessary to handle cases where the data\\n     * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\\n     * stored.\\n     */\\n    private _cachedRenderRowsMap;\\n    /** Whether the table is applied to a native `<table>`. */\\n    private _isNativeHtmlTable;\\n    /**\\n     * Utility class that is responsible for applying the appropriate sticky positioning styles to\\n     * the table's rows and cells.\\n     */\\n    private _stickyStyler;\\n    /**\\n     * CSS class added to any row or cell that has sticky positioning applied. May be overriden by\\n     * table subclasses.\\n     */\\n    protected stickyCssClass: string;\\n    /**\\n     * Tracking function that will be used to check the differences in data changes. Used similarly\\n     * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\\n     * relative to the function to know if a row should be added/removed/moved.\\n     * Accepts a function that takes two parameters, `index` and `item`.\\n     */\\n    trackBy: TrackByFunction<T>;\\n    private _trackByFn;\\n    /**\\n     * The table's source of data, which can be provided in three ways (in order of complexity):\\n     *   - Simple data array (each object represents one table row)\\n     *   - Stream that emits a data array each time the array changes\\n     *   - `DataSource` object that implements the connect/disconnect interface.\\n     *\\n     * If a data array is provided, the table must be notified when the array's objects are\\n     * added, removed, or moved. This can be done by calling the `renderRows()` function which will\\n     * render the diff since the last table render. If the data array reference is changed, the table\\n     * will automatically trigger an update to the rows.\\n     *\\n     * When providing an Observable stream, the table will trigger an update automatically when the\\n     * stream emits a new array of data.\\n     *\\n     * Finally, when providing a `DataSource` object, the table will use the Observable stream\\n     * provided by the connect function and trigger updates when that stream emits new data array\\n     * values. During the table's ngOnDestroy or when the data source is removed from the table, the\\n     * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\\n     * subscriptions registered during the connect process).\\n     */\\n    dataSource: CdkTableDataSourceInput<T>;\\n    private _dataSource;\\n    /**\\n     * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\\n     * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\\n     * dataobject will render the first row that evaluates its when predicate to true, in the order\\n     * defined in the table, or otherwise the default row which does not have a when predicate.\\n     */\\n    multiTemplateDataRows: boolean;\\n    _multiTemplateDataRows: boolean;\\n    /**\\n     * Stream containing the latest information on what rows are being displayed on screen.\\n     * Can be used by the data source to as a heuristic of what data should be provided.\\n     *\\n     * @docs-private\\n     */\\n    viewChange: BehaviorSubject<{\\n        start: number;\\n        end: number;\\n    }>;\\n    _rowOutlet: DataRowOutlet;\\n    _headerRowOutlet: HeaderRowOutlet;\\n    _footerRowOutlet: FooterRowOutlet;\\n    /**\\n     * The column definitions provided by the user that contain what the header, data, and footer\\n     * cells should render for each column.\\n     */\\n    _contentColumnDefs: QueryList<CdkColumnDef>;\\n    /** Set of data row definitions that were provided to the table as content children. */\\n    _contentRowDefs: QueryList<CdkRowDef<T>>;\\n    /** Set of header row definitions that were provided to the table as content children. */\\n    _contentHeaderRowDefs: QueryList<CdkHeaderRowDef>;\\n    /** Set of footer row definitions that were provided to the table as content children. */\\n    _contentFooterRowDefs: QueryList<CdkFooterRowDef>;\\n    constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef, role: string, _dir: Directionality, _document: any, _platform: Platform);\\n    ngOnInit(): void;\\n    ngAfterContentChecked(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Renders rows based on the table's latest set of data, which was either provided directly as an\\n     * input or retrieved through an Observable stream (directly or from a DataSource).\\n     * Checks for differences in the data since the last diff to perform only the necessary\\n     * changes (add/remove/move rows).\\n     *\\n     * If the table's data source is a DataSource or Observable, this will be invoked automatically\\n     * each time the provided Observable stream emits a new data array. Otherwise if your data is\\n     * an array, this function will need to be called to render any changes.\\n     */\\n    renderRows(): void;\\n    /**\\n     * Sets the header row definition to be used. Overrides the header row definition gathered by\\n     * using `ContentChild`, if one exists. Sets a flag that will re-render the header row after the\\n     * table's content is checked.\\n     * @docs-private\\n     * @deprecated Use `addHeaderRowDef` and `removeHeaderRowDef` instead\\n     * @breaking-change 8.0.0\\n     */\\n    setHeaderRowDef(headerRowDef: CdkHeaderRowDef): void;\\n    /**\\n     * Sets the footer row definition to be used. Overrides the footer row definition gathered by\\n     * using `ContentChild`, if one exists. Sets a flag that will re-render the footer row after the\\n     * table's content is checked.\\n     * @docs-private\\n     * @deprecated Use `addFooterRowDef` and `removeFooterRowDef` instead\\n     * @breaking-change 8.0.0\\n     */\\n    setFooterRowDef(footerRowDef: CdkFooterRowDef): void;\\n    /** Adds a column definition that was not included as part of the content children. */\\n    addColumnDef(columnDef: CdkColumnDef): void;\\n    /** Removes a column definition that was not included as part of the content children. */\\n    removeColumnDef(columnDef: CdkColumnDef): void;\\n    /** Adds a row definition that was not included as part of the content children. */\\n    addRowDef(rowDef: CdkRowDef<T>): void;\\n    /** Removes a row definition that was not included as part of the content children. */\\n    removeRowDef(rowDef: CdkRowDef<T>): void;\\n    /** Adds a header row definition that was not included as part of the content children. */\\n    addHeaderRowDef(headerRowDef: CdkHeaderRowDef): void;\\n    /** Removes a header row definition that was not included as part of the content children. */\\n    removeHeaderRowDef(headerRowDef: CdkHeaderRowDef): void;\\n    /** Adds a footer row definition that was not included as part of the content children. */\\n    addFooterRowDef(footerRowDef: CdkFooterRowDef): void;\\n    /** Removes a footer row definition that was not included as part of the content children. */\\n    removeFooterRowDef(footerRowDef: CdkFooterRowDef): void;\\n    /**\\n     * Updates the header sticky styles. First resets all applied styles with respect to the cells\\n     * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\\n     * automatically called when the header row changes its displayed set of columns, or if its\\n     * sticky input changes. May be called manually for cases where the cell content changes outside\\n     * of these events.\\n     */\\n    updateStickyHeaderRowStyles(): void;\\n    /**\\n     * Updates the footer sticky styles. First resets all applied styles with respect to the cells\\n     * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\\n     * automatically called when the footer row changes its displayed set of columns, or if its\\n     * sticky input changes. May be called manually for cases where the cell content changes outside\\n     * of these events.\\n     */\\n    updateStickyFooterRowStyles(): void;\\n    /**\\n     * Updates the column sticky styles. First resets all applied styles with respect to the cells\\n     * sticking to the left and right. Then sticky styles are added for the left and right according\\n     * to the column definitions for each cell in each row. This is automatically called when\\n     * the data source provides a new set of data or when a column definition changes its sticky\\n     * input. May be called manually for cases where the cell content changes outside of these events.\\n     */\\n    updateStickyColumnStyles(): void;\\n    /**\\n     * Get the list of RenderRow objects to render according to the current list of data and defined\\n     * row definitions. If the previous list already contained a particular pair, it should be reused\\n     * so that the differ equates their references.\\n     */\\n    private _getAllRenderRows;\\n    /**\\n     * Gets a list of `RenderRow<T>` for the provided data object and any `CdkRowDef` objects that\\n     * should be rendered for this data. Reuses the cached RenderRow objects if they match the same\\n     * `(T, CdkRowDef)` pair.\\n     */\\n    private _getRenderRowsForData;\\n    /** Update the map containing the content's column definitions. */\\n    private _cacheColumnDefs;\\n    /** Update the list of all available row definitions that can be used. */\\n    private _cacheRowDefs;\\n    /**\\n     * Check if the header, data, or footer rows have changed what columns they want to display or\\n     * whether the sticky states have changed for the header or footer. If there is a diff, then\\n     * re-render that section.\\n     */\\n    private _renderUpdatedColumns;\\n    /**\\n     * Switch to the provided data source by resetting the data and unsubscribing from the current\\n     * render change subscription if one exists. If the data source is null, interpret this by\\n     * clearing the row outlet. Otherwise start listening for new data.\\n     */\\n    private _switchDataSource;\\n    /** Set up a subscription for the data provided by the data source. */\\n    private _observeRenderChanges;\\n    /**\\n     * Clears any existing content in the header row outlet and creates a new embedded view\\n     * in the outlet using the header row definition.\\n     */\\n    private _forceRenderHeaderRows;\\n    /**\\n     * Clears any existing content in the footer row outlet and creates a new embedded view\\n     * in the outlet using the footer row definition.\\n     */\\n    private _forceRenderFooterRows;\\n    /** Adds the sticky column styles for the rows according to the columns' stick states. */\\n    private _addStickyColumnStyles;\\n    /** Gets the list of rows that have been rendered in the row outlet. */\\n    _getRenderedRows(rowOutlet: RowOutlet): HTMLElement[];\\n    /**\\n     * Get the matching row definitions that should be used for this row data. If there is only\\n     * one row definition, it is returned. Otherwise, find the row definitions that has a when\\n     * predicate that returns true with the data. If none return true, return the default row\\n     * definition.\\n     */\\n    _getRowDefs(data: T, dataIndex: number): CdkRowDef<T>[];\\n    /**\\n     * Create the embedded view for the data row template and place it in the correct index location\\n     * within the data row view container.\\n     */\\n    private _insertRow;\\n    /**\\n     * Creates a new row template in the outlet and fills it with the set of cell templates.\\n     * Optionally takes a context to provide to the row and cells, as well as an optional index\\n     * of where to place the new row template in the outlet.\\n     */\\n    private _renderRow;\\n    /**\\n     * Updates the index-related context for each row to reflect any changes in the index of the rows,\\n     * e.g. first/last/even/odd.\\n     */\\n    private _updateRowIndexContext;\\n    /** Gets the column definitions for the provided row def. */\\n    private _getCellTemplates;\\n    /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\\n    private _applyNativeTableSections;\\n    /**\\n     * Forces a re-render of the data rows. Should be called in cases where there has been an input\\n     * change that affects the evaluation of which rows should be rendered, e.g. toggling\\n     * `multiTemplateDataRows` or adding/removing row definitions.\\n     */\\n    private _forceRenderDataRows;\\n    /**\\n     * Checks if there has been a change in sticky states since last check and applies the correct\\n     * sticky styles. Since checking resets the \\\"dirty\\\" state, this should only be performed once\\n     * during a change detection and after the inputs are settled (after content check).\\n     */\\n    private _checkStickyStates;\\n    /**\\n     * Creates the sticky styler that will be used for sticky rows and columns. Listens\\n     * for directionality changes and provides the latest direction to the styler. Re-applies column\\n     * stickiness when directionality changes.\\n     */\\n    private _setupStickyStyler;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkTable<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<CdkTable<any>, \\\"cdk-table, table[cdk-table]\\\", [\\\"cdkTable\\\"], { 'trackBy': \\\"trackBy\\\", 'dataSource': \\\"dataSource\\\", 'multiTemplateDataRows': \\\"multiTemplateDataRows\\\" }, {}, [\\\"_contentColumnDefs\\\", \\\"_contentRowDefs\\\", \\\"_contentHeaderRowDefs\\\", \\\"_contentFooterRowDefs\\\"]>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=table.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/table/text-column.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken, OnDestroy, OnInit } from '@angular/core';\\nimport { CdkCellDef, CdkColumnDef, CdkHeaderCellDef } from './cell';\\nimport { CdkTable } from './table';\\n/** Configurable options for `CdkTextColumn`. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface TextColumnOptions<T> {\\n    /**\\n     * Default function that provides the header text based on the column name if a header\\n     * text is not provided.\\n     */\\n    defaultHeaderTextTransform?: (name: string) => string;\\n    /** Default data accessor to use if one is not provided. */\\n    defaultDataAccessor?: (data: T, name: string) => string;\\n}\\n/** Injection token that can be used to specify the text column options. */\\nexport declare const TEXT_COLUMN_OPTIONS: InjectionToken<TextColumnOptions<any>>;\\n/**\\n * Column that simply shows text content for the header and row cells. Assumes that the table\\n * is using the native table implementation (`<table>`).\\n *\\n * By default, the name of this column will be the header text and data property accessor.\\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\\n * input.\\n */\\nexport declare class CdkTextColumn<T> implements OnDestroy, OnInit {\\n    private _table;\\n    private _options;\\n    /** Column name that should be used to reference this column. */\\n    name: string;\\n    _name: string;\\n    /**\\n     * Text label that should be used for the column header. If this property is not\\n     * set, the header text will default to the column name with its first letter capitalized.\\n     */\\n    headerText: string;\\n    /**\\n     * Accessor function to retrieve the data rendered for each cell. If this\\n     * property is not set, the data cells will render the value found in the data's property matching\\n     * the column's name. For example, if the column is named `id`, then the rendered value will be\\n     * value defined by the data's `id` property.\\n     */\\n    dataAccessor: (data: T, name: string) => string;\\n    /** Alignment of the cell values. */\\n    justify: 'start' | 'end';\\n    /** @docs-private */\\n    columnDef: CdkColumnDef;\\n    /**\\n     * The column cell is provided to the column during `ngOnInit` with a static query.\\n     * Normally, this will be retrieved by the column using `ContentChild`, but that assumes the\\n     * column definition was provided in the same view as the table, which is not the case with this\\n     * component.\\n     * @docs-private\\n     */\\n    cell: CdkCellDef;\\n    /**\\n     * The column headerCell is provided to the column during `ngOnInit` with a static query.\\n     * Normally, this will be retrieved by the column using `ContentChild`, but that assumes the\\n     * column definition was provided in the same view as the table, which is not the case with this\\n     * component.\\n     * @docs-private\\n     */\\n    headerCell: CdkHeaderCellDef;\\n    constructor(_table: CdkTable<T>, _options: TextColumnOptions<T>);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Creates a default header text. Use the options' header text transformation function if one\\n     * has been provided. Otherwise simply capitalize the column name.\\n     */\\n    _createDefaultHeaderText(): string;\\n    /** Synchronizes the column definition name with the text column name. */\\n    private _syncColumnDefName;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkTextColumn<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<CdkTextColumn<any>, \\\"cdk-text-column\\\", never, { 'justify': \\\"justify\\\", 'name': \\\"name\\\", 'headerText': \\\"headerText\\\", 'dataAccessor': \\\"dataAccessor\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=text-column.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/component-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/component-harness\\\" />\\nimport { TestElement } from './test-element';\\n/** An async function that returns a promise when called. */\\nexport declare type AsyncFactoryFn<T> = () => Promise<T>;\\n/** An async function that takes an item and returns a boolean promise */\\nexport declare type AsyncPredicate<T> = (item: T) => Promise<boolean>;\\n/** An async function that takes an item and an option value and returns a boolean promise. */\\nexport declare type AsyncOptionPredicate<T, O> = (item: T, option: O) => Promise<boolean>;\\n/**\\n * Interface used to load ComponentHarness objects. This interface is used by test authors to\\n * instantiate `ComponentHarness`es.\\n */\\nexport interface HarnessLoader {\\n    /**\\n     * Searches for an element with the given selector under the current instances's root element,\\n     * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\\n     * selector, the first is used. If no elements match, an error is thrown.\\n     * @param selector The selector for the root element of the new `HarnessLoader`\\n     * @return A `HarnessLoader` rooted at the element matching the given selector.\\n     * @throws If a matching element can't be found.\\n     */\\n    getChildLoader(selector: string): Promise<HarnessLoader>;\\n    /**\\n     * Searches for all elements with the given selector under the current instances's root element,\\n     * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\\n     * element.\\n     * @param selector The selector for the root element of the new `HarnessLoader`\\n     * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\\n     */\\n    getAllChildLoaders(selector: string): Promise<HarnessLoader[]>;\\n    /**\\n     * Searches for an instance of the component corresponding to the given harness type under the\\n     * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\\n     * matching components are found, a harness for the first one is returned. If no matching\\n     * component is found, an error is thrown.\\n     * @param harnessType The type of harness to create\\n     * @return An instance of the given harness type\\n     * @throws If a matching component instance can't be found.\\n     */\\n    getHarness<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): Promise<T>;\\n    /**\\n     * Searches for all instances of the component corresponding to the given harness type under the\\n     * `HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.\\n     * @param harnessType The type of harness to create\\n     * @return A list instances of the given harness type.\\n     */\\n    getAllHarnesses<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): Promise<T[]>;\\n}\\n/**\\n * Interface used to create asynchronous locator functions used find elements and component\\n * harnesses. This interface is used by `ComponentHarness` authors to create locator functions for\\n * their `ComponentHarenss` subclass.\\n */\\nexport interface LocatorFactory {\\n    /** Gets a locator factory rooted at the document root. */\\n    documentRootLocatorFactory(): LocatorFactory;\\n    /** The root element of this `LocatorFactory` as a `TestElement`. */\\n    rootElement: TestElement;\\n    /**\\n     * Creates an asynchronous locator function that can be used to search for elements with the given\\n     * selector under the root element of this `LocatorFactory`. When the resulting locator function\\n     * is invoked, if multiple matching elements are found, the first element is returned. If no\\n     * elements are found, an error is thrown.\\n     * @param selector The selector for the element that the locator function should search for.\\n     * @return An asynchronous locator function that searches for elements with the given selector,\\n     *     and either finds one or throws an error\\n     */\\n    locatorFor(selector: string): AsyncFactoryFn<TestElement>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to find a `ComponentHarness` for a\\n     * component matching the given harness type under the root element of this `LocatorFactory`.\\n     * When the resulting locator function is invoked, if multiple matching components are found, a\\n     * harness for the first one is returned. If no components are found, an error is thrown.\\n     * @param harnessType The type of harness to search for.\\n     * @return An asynchronous locator function that searches components matching the given harness\\n     *     type, and either returns a `ComponentHarness` for the component, or throws an error.\\n     */\\n    locatorFor<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to search for elements with the given\\n     * selector under the root element of this `LocatorFactory`. When the resulting locator function\\n     * is invoked, if multiple matching elements are found, the first element is returned. If no\\n     * elements are found, null is returned.\\n     * @param selector The selector for the element that the locator function should search for.\\n     * @return An asynchronous locator function that searches for elements with the given selector,\\n     *     and either finds one or returns null.\\n     */\\n    locatorForOptional(selector: string): AsyncFactoryFn<TestElement | null>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to find a `ComponentHarness` for a\\n     * component matching the given harness type under the root element of this `LocatorFactory`.\\n     * When the resulting locator function is invoked, if multiple matching components are found, a\\n     * harness for the first one is returned. If no components are found, null is returned.\\n     * @param harnessType The type of harness to search for.\\n     * @return An asynchronous locator function that searches components matching the given harness\\n     *     type, and either returns a `ComponentHarness` for the component, or null if none is found.\\n     */\\n    locatorForOptional<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T | null>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to search for a list of elements with\\n     * the given selector under the root element of this `LocatorFactory`. When the resulting locator\\n     * function is invoked, a list of matching elements is returned.\\n     * @param selector The selector for the element that the locator function should search for.\\n     * @return An asynchronous locator function that searches for elements with the given selector,\\n     *     and either finds one or throws an error\\n     */\\n    locatorForAll(selector: string): AsyncFactoryFn<TestElement[]>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to find a list of\\n     * `ComponentHarness`es for all components matching the given harness type under the root element\\n     * of this `LocatorFactory`. When the resulting locator function is invoked, a list of\\n     * `ComponentHarness`es for the matching components is returned.\\n     * @param harnessType The type of harness to search for.\\n     * @return An asynchronous locator function that searches components matching the given harness\\n     *     type, and returns a list of `ComponentHarness`es.\\n     */\\n    locatorForAll<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T[]>;\\n    /**\\n     * Flushes change detection and async tasks.\\n     * In most cases it should not be necessary to call this manually. However, there may be some edge\\n     * cases where it is needed to fully flush animation events.\\n     */\\n    forceStabilize(): Promise<void>;\\n}\\n/**\\n * Base class for component harnesses that all component harness authors should extend. This base\\n * component harness provides the basic ability to locate element and sub-component harness. It\\n * should be inherited when defining user's own harness.\\n */\\nexport declare abstract class ComponentHarness {\\n    private readonly locatorFactory;\\n    constructor(locatorFactory: LocatorFactory);\\n    /** Gets a `Promise` for the `TestElement` representing the host element of the component. */\\n    host(): Promise<TestElement>;\\n    /**\\n     * Gets a `LocatorFactory` for the document root element. This factory can be used to create\\n     * locators for elements that a component creates outside of its own root element. (e.g. by\\n     * appending to document.body).\\n     */\\n    protected documentRootLocatorFactory(): LocatorFactory;\\n    /**\\n     * Creates an asynchronous locator function that can be used to search for elements with the given\\n     * selector under the host element of this `ComponentHarness`. When the resulting locator function\\n     * is invoked, if multiple matching elements are found, the first element is returned. If no\\n     * elements are found, an error is thrown.\\n     * @param selector The selector for the element that the locator function should search for.\\n     * @return An asynchronous locator function that searches for elements with the given selector,\\n     *     and either finds one or throws an error\\n     */\\n    protected locatorFor(selector: string): AsyncFactoryFn<TestElement>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to find a `ComponentHarness` for a\\n     * component matching the given harness type under the host element of this `ComponentHarness`.\\n     * When the resulting locator function is invoked, if multiple matching components are found, a\\n     * harness for the first one is returned. If no components are found, an error is thrown.\\n     * @param harnessType The type of harness to search for.\\n     * @return An asynchronous locator function that searches components matching the given harness\\n     *     type, and either returns a `ComponentHarness` for the component, or throws an error.\\n     */\\n    protected locatorFor<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to search for elements with the given\\n     * selector under the host element of this `ComponentHarness`. When the resulting locator function\\n     * is invoked, if multiple matching elements are found, the first element is returned. If no\\n     * elements are found, null is returned.\\n     * @param selector The selector for the element that the locator function should search for.\\n     * @return An asynchronous locator function that searches for elements with the given selector,\\n     *     and either finds one or returns null.\\n     */\\n    protected locatorForOptional(selector: string): AsyncFactoryFn<TestElement | null>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to find a `ComponentHarness` for a\\n     * component matching the given harness type under the host element of this `ComponentHarness`.\\n     * When the resulting locator function is invoked, if multiple matching components are found, a\\n     * harness for the first one is returned. If no components are found, null is returned.\\n     * @param harnessType The type of harness to search for.\\n     * @return An asynchronous locator function that searches components matching the given harness\\n     *     type, and either returns a `ComponentHarness` for the component, or null if none is found.\\n     */\\n    protected locatorForOptional<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T | null>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to search for a list of elements with\\n     * the given selector under the host element of this `ComponentHarness`. When the resulting\\n     * locator function is invoked, a list of matching elements is returned.\\n     * @param selector The selector for the element that the locator function should search for.\\n     * @return An asynchronous locator function that searches for elements with the given selector,\\n     *     and either finds one or throws an error\\n     */\\n    protected locatorForAll(selector: string): AsyncFactoryFn<TestElement[]>;\\n    /**\\n     * Creates an asynchronous locator function that can be used to find a list of\\n     * `ComponentHarness`es for all components matching the given harness type under the host element\\n     * of this `ComponentHarness`. When the resulting locator function is invoked, a list of\\n     * `ComponentHarness`es for the matching components is returned.\\n     * @param harnessType The type of harness to search for.\\n     * @return An asynchronous locator function that searches components matching the given harness\\n     *     type, and returns a list of `ComponentHarness`es.\\n     */\\n    protected locatorForAll<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T[]>;\\n    /**\\n     * Flushes change detection and async tasks.\\n     * In most cases it should not be necessary to call this manually. However, there may be some edge\\n     * cases where it is needed to fully flush animation events.\\n     */\\n    protected forceStabilize(): Promise<void>;\\n}\\n/** Constructor for a ComponentHarness subclass. */\\nexport interface ComponentHarnessConstructor<T extends ComponentHarness> {\\n    new (locatorFactory: LocatorFactory): T;\\n    /**\\n     * `ComponentHarness` subclasses must specify a static `hostSelector` property that is used to\\n     * find the host element for the corresponding component. This property should match the selector\\n     * for the Angular component.\\n     */\\n    hostSelector: string;\\n}\\nexport interface BaseHarnessFilters {\\n    /** Only find component instances whose host element matches the given selector. */\\n    selector?: string;\\n    /** Only find component instances that are nested under an element with the given selector. */\\n    ancestor?: string;\\n}\\n/**\\n * A class used to associate a ComponentHarness class with predicates functions that can be used to\\n * filter instances of the class.\\n */\\nexport declare class HarnessPredicate<T extends ComponentHarness> {\\n    harnessType: ComponentHarnessConstructor<T>;\\n    private _predicates;\\n    private _descriptions;\\n    private _ancestor;\\n    constructor(harnessType: ComponentHarnessConstructor<T>, options: BaseHarnessFilters);\\n    /**\\n     * Checks if a string matches the given pattern.\\n     * @param s The string to check, or a Promise for the string to check.\\n     * @param pattern The pattern the string is expected to match. If `pattern` is a string, `s` is\\n     *   expected to match exactly. If `pattern` is a regex, a partial match is allowed.\\n     * @return A Promise that resolves to whether the string matches the pattern.\\n     */\\n    static stringMatches(s: string | Promise<string>, pattern: string | RegExp): Promise<boolean>;\\n    /**\\n     * Adds a predicate function to be run against candidate harnesses.\\n     * @param description A description of this predicate that may be used in error messages.\\n     * @param predicate An async predicate function.\\n     * @return this (for method chaining).\\n     */\\n    add(description: string, predicate: AsyncPredicate<T>): this;\\n    /**\\n     * Adds a predicate function that depends on an option value to be run against candidate\\n     * harnesses. If the option value is undefined, the predicate will be ignored.\\n     * @param name The name of the option (may be used in error messages).\\n     * @param option The option value.\\n     * @param predicate The predicate function to run if the option value is not undefined.\\n     * @return this (for method chaining).\\n     */\\n    addOption<O>(name: string, option: O | undefined, predicate: AsyncOptionPredicate<T, O>): this;\\n    /**\\n     * Filters a list of harnesses on this predicate.\\n     * @param harnesses The list of harnesses to filter.\\n     * @return A list of harnesses that satisfy this predicate.\\n     */\\n    filter(harnesses: T[]): Promise<T[]>;\\n    /**\\n     * Evaluates whether the given harness satisfies this predicate.\\n     * @param harness The harness to check\\n     * @return A promise that resolves to true if the harness satisfies this predicate,\\n     *   and resolves to false otherwise.\\n     */\\n    evaluate(harness: T): Promise<boolean>;\\n    /** Gets a description of this predicate for use in error messages. */\\n    getDescription(): string;\\n    /** Gets the selector used to find candidate elements. */\\n    getSelector(): string;\\n    /** Adds base options common to all harness types. */\\n    private _addBaseOptions;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/dispatch-events.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/dispatch-events\\\" />\\nimport { ModifierKeys } from './event-objects';\\n/**\\n * Utility to dispatch any event on a Node.\\n * @docs-private\\n */\\nexport declare function dispatchEvent(node: Node | Window, event: Event): Event;\\n/**\\n * Shorthand to dispatch a fake event on a specified node.\\n * @docs-private\\n */\\nexport declare function dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event;\\n/**\\n * Shorthand to dispatch a keyboard event with a specified key code.\\n * @docs-private\\n */\\nexport declare function dispatchKeyboardEvent(node: Node, type: string, keyCode?: number, key?: string, target?: Element, modifiers?: ModifierKeys): KeyboardEvent;\\n/**\\n * Shorthand to dispatch a mouse event on the specified coordinates.\\n * @docs-private\\n */\\nexport declare function dispatchMouseEvent(node: Node, type: string, x?: number, y?: number, event?: MouseEvent): MouseEvent;\\n/**\\n * Shorthand to dispatch a touch event on the specified coordinates.\\n * @docs-private\\n */\\nexport declare function dispatchTouchEvent(node: Node, type: string, x?: number, y?: number): Event;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/element-dimensions.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/element-dimensions\\\" />\\n/**\\n * Dimensions for element size and its position relative to the viewport.\\n */\\nexport interface ElementDimensions {\\n    top: number;\\n    left: number;\\n    width: number;\\n    height: number;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/element-focus.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/element-focus\\\" />\\n/**\\n * Patches an elements focus and blur methods to emit events consistently and predictably.\\n * This is necessary, because some browsers, like IE11, will call the focus handlers asynchronously,\\n * while others won't fire them at all if the browser window is not focused.\\n * @docs-private\\n */\\nexport declare function patchElementFocus(element: HTMLElement): void;\\n/** @docs-private */\\nexport declare function triggerFocus(element: HTMLElement): void;\\n/** @docs-private */\\nexport declare function triggerBlur(element: HTMLElement): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/event-objects.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/event-objects\\\" />\\n/** Modifier keys that may be held while typing. */\\nexport interface ModifierKeys {\\n    control?: boolean;\\n    alt?: boolean;\\n    shift?: boolean;\\n    meta?: boolean;\\n}\\n/**\\n * Creates a browser MouseEvent with the specified options.\\n * @docs-private\\n */\\nexport declare function createMouseEvent(type: string, x?: number, y?: number, button?: number): MouseEvent;\\n/**\\n * Creates a browser TouchEvent with the specified pointer coordinates.\\n * @docs-private\\n */\\nexport declare function createTouchEvent(type: string, pageX?: number, pageY?: number): UIEvent;\\n/**\\n * Dispatches a keydown event from an element.\\n * @docs-private\\n */\\nexport declare function createKeyboardEvent(type: string, keyCode?: number, key?: string, target?: Element, modifiers?: ModifierKeys): any;\\n/**\\n * Creates a fake event object with any desired event type.\\n * @docs-private\\n */\\nexport declare function createFakeEvent(type: string, canBubble?: boolean, cancelable?: boolean): Event;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/harness-environment.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/harness-environment\\\" />\\nimport { AsyncFactoryFn, ComponentHarness, ComponentHarnessConstructor, HarnessLoader, HarnessPredicate, LocatorFactory } from './component-harness';\\nimport { TestElement } from './test-element';\\n/**\\n * Base harness environment class that can be extended to allow `ComponentHarness`es to be used in\\n * different test environments (e.g. testbed, protractor, etc.). This class implements the\\n * functionality of both a `HarnessLoader` and `LocatorFactory`. This class is generic on the raw\\n * element type, `E`, used by the particular test environment.\\n */\\nexport declare abstract class HarnessEnvironment<E> implements HarnessLoader, LocatorFactory {\\n    protected rawRootElement: E;\\n    rootElement: TestElement;\\n    protected constructor(rawRootElement: E);\\n    documentRootLocatorFactory(): LocatorFactory;\\n    locatorFor(selector: string): AsyncFactoryFn<TestElement>;\\n    locatorFor<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T>;\\n    locatorForOptional(selector: string): AsyncFactoryFn<TestElement | null>;\\n    locatorForOptional<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T | null>;\\n    locatorForAll(selector: string): AsyncFactoryFn<TestElement[]>;\\n    locatorForAll<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): AsyncFactoryFn<T[]>;\\n    getHarness<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): Promise<T>;\\n    getAllHarnesses<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T> | HarnessPredicate<T>): Promise<T[]>;\\n    getChildLoader(selector: string): Promise<HarnessLoader>;\\n    getAllChildLoaders(selector: string): Promise<HarnessLoader[]>;\\n    /** Creates a `ComponentHarness` for the given harness type with the given raw host element. */\\n    protected createComponentHarness<T extends ComponentHarness>(harnessType: ComponentHarnessConstructor<T>, element: E): T;\\n    abstract forceStabilize(): Promise<void>;\\n    /** Gets the root element for the document. */\\n    protected abstract getDocumentRoot(): E;\\n    /** Creates a `TestElement` from a raw element. */\\n    protected abstract createTestElement(element: E): TestElement;\\n    /** Creates a `HarnessLoader` rooted at the given raw element. */\\n    protected abstract createEnvironment(element: E): HarnessEnvironment<E>;\\n    /**\\n     * Gets a list of all elements matching the given selector under this environment's root element.\\n     */\\n    protected abstract getAllRawElements(selector: string): Promise<E[]>;\\n    private _getAllHarnesses;\\n    private _assertElementFound;\\n    private _assertHarnessFound;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/index.d.ts\",\n      \"node_modules/@angular/cdk/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing\\\" />\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/protractor/index.d.ts\",\n      \"node_modules/@angular/cdk/testing/protractor/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/protractor\\\" />\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/protractor/protractor-element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/protractor/protractor-element\\\" />\\nimport { ModifierKeys } from '@angular/cdk/testing';\\nimport { ElementFinder } from 'protractor';\\nimport { ElementDimensions } from '../element-dimensions';\\nimport { TestElement, TestKey } from '../test-element';\\n/** A `TestElement` implementation for Protractor. */\\nexport declare class ProtractorElement implements TestElement {\\n    readonly element: ElementFinder;\\n    constructor(element: ElementFinder);\\n    blur(): Promise<void>;\\n    clear(): Promise<void>;\\n    click(relativeX?: number, relativeY?: number): Promise<void>;\\n    focus(): Promise<void>;\\n    getCssValue(property: string): Promise<string>;\\n    hover(): Promise<void>;\\n    sendKeys(...keys: (string | TestKey)[]): Promise<void>;\\n    sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\\n    text(): Promise<string>;\\n    getAttribute(name: string): Promise<string | null>;\\n    hasClass(name: string): Promise<boolean>;\\n    getDimensions(): Promise<ElementDimensions>;\\n    getProperty(name: string): Promise<any>;\\n    matchesSelector(selector: string): Promise<boolean>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/protractor/protractor-harness-environment.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/protractor/protractor-harness-environment\\\" />\\nimport { HarnessEnvironment } from '@angular/cdk/testing';\\nimport { ElementFinder } from 'protractor';\\nimport { HarnessLoader } from '../component-harness';\\nimport { TestElement } from '../test-element';\\n/** A `HarnessEnvironment` implementation for Protractor. */\\nexport declare class ProtractorHarnessEnvironment extends HarnessEnvironment<ElementFinder> {\\n    protected constructor(rawRootElement: ElementFinder);\\n    /** Creates a `HarnessLoader` rooted at the document root. */\\n    static loader(): HarnessLoader;\\n    forceStabilize(): Promise<void>;\\n    protected getDocumentRoot(): ElementFinder;\\n    protected createTestElement(element: ElementFinder): TestElement;\\n    protected createEnvironment(element: ElementFinder): HarnessEnvironment<ElementFinder>;\\n    protected getAllRawElements(selector: string): Promise<ElementFinder[]>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/protractor/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/protractor/public-api\\\" />\\nexport * from './protractor-element';\\nexport * from './protractor-harness-environment';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/public-api\\\" />\\nexport * from './component-harness';\\nexport * from './dispatch-events';\\nexport * from './element-focus';\\nexport * from './event-objects';\\nexport * from './harness-environment';\\nexport * from './test-element';\\nexport * from './type-in-element';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/test-element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/test-element\\\" />\\nimport { ElementDimensions } from './element-dimensions';\\nimport { ModifierKeys } from './event-objects';\\n/** An enum of non-text keys that can be used with the `sendKeys` method. */\\nexport declare enum TestKey {\\n    BACKSPACE = 0,\\n    TAB = 1,\\n    ENTER = 2,\\n    SHIFT = 3,\\n    CONTROL = 4,\\n    ALT = 5,\\n    ESCAPE = 6,\\n    PAGE_UP = 7,\\n    PAGE_DOWN = 8,\\n    END = 9,\\n    HOME = 10,\\n    LEFT_ARROW = 11,\\n    UP_ARROW = 12,\\n    RIGHT_ARROW = 13,\\n    DOWN_ARROW = 14,\\n    INSERT = 15,\\n    DELETE = 16,\\n    F1 = 17,\\n    F2 = 18,\\n    F3 = 19,\\n    F4 = 20,\\n    F5 = 21,\\n    F6 = 22,\\n    F7 = 23,\\n    F8 = 24,\\n    F9 = 25,\\n    F10 = 26,\\n    F11 = 27,\\n    F12 = 28,\\n    META = 29\\n}\\n/**\\n * This acts as a common interface for DOM elements across both unit and e2e tests. It is the\\n * interface through which the ComponentHarness interacts with the component's DOM.\\n */\\nexport interface TestElement {\\n    /** Blur the element. */\\n    blur(): Promise<void>;\\n    /** Clear the element's input (for input elements only). */\\n    clear(): Promise<void>;\\n    /**\\n     * Click the element.\\n     * @param relativeX Coordinate within the element, along the X-axis at which to click.\\n     * @param relativeY Coordinate within the element, along the Y-axis at which to click.\\n     */\\n    click(relativeX?: number, relativeY?: number): Promise<void>;\\n    /** Focus the element. */\\n    focus(): Promise<void>;\\n    /** Get the computed value of the given CSS property for the element. */\\n    getCssValue(property: string): Promise<string>;\\n    /** Hovers the mouse over the element. */\\n    hover(): Promise<void>;\\n    /**\\n     * Sends the given string to the input as a series of key presses. Also fires input events\\n     * and attempts to add the string to the Element's value.\\n     */\\n    sendKeys(...keys: (string | TestKey)[]): Promise<void>;\\n    /**\\n     * Sends the given string to the input as a series of key presses. Also fires input events\\n     * and attempts to add the string to the Element's value.\\n     */\\n    sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\\n    /** Gets the text from the element. */\\n    text(): Promise<string>;\\n    /** Gets the value for the given attribute from the element. */\\n    getAttribute(name: string): Promise<string | null>;\\n    /** Checks whether the element has the given class. */\\n    hasClass(name: string): Promise<boolean>;\\n    /** Gets the dimensions of the element. */\\n    getDimensions(): Promise<ElementDimensions>;\\n    /** Gets the value of a property of an element. */\\n    getProperty(name: string): Promise<any>;\\n    /** Checks whether this element matches the given selector. */\\n    matchesSelector(selector: string): Promise<boolean>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/testbed/index.d.ts\",\n      \"node_modules/@angular/cdk/testing/testbed/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/testbed\\\" />\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/testbed/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/testbed/public-api\\\" />\\nexport * from './testbed-harness-environment';\\nexport * from './unit-test-element';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/testbed/testbed-harness-environment.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/testbed/testbed-harness-environment\\\" />\\nimport { HarnessEnvironment } from '@angular/cdk/testing';\\nimport { ComponentFixture } from '@angular/core/testing';\\nimport { ComponentHarness, ComponentHarnessConstructor, HarnessLoader } from '../component-harness';\\nimport { TestElement } from '../test-element';\\n/** A `HarnessEnvironment` implementation for Angular's Testbed. */\\nexport declare class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {\\n    private _fixture;\\n    private _destroyed;\\n    protected constructor(rawRootElement: Element, _fixture: ComponentFixture<unknown>);\\n    /** Creates a `HarnessLoader` rooted at the given fixture's root element. */\\n    static loader(fixture: ComponentFixture<unknown>): HarnessLoader;\\n    /**\\n     * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\\n     * located outside of a fixture (e.g. overlays appended to the document body).\\n     */\\n    static documentRootLoader(fixture: ComponentFixture<unknown>): HarnessLoader;\\n    /**\\n     * Creates an instance of the given harness type, using the fixture's root element as the\\n     * harness's host element. This method should be used when creating a harness for the root element\\n     * of a fixture, as components do not have the correct selector when they are created as the root\\n     * of the fixture.\\n     */\\n    static harnessForFixture<T extends ComponentHarness>(fixture: ComponentFixture<unknown>, harnessType: ComponentHarnessConstructor<T>): Promise<T>;\\n    forceStabilize(): Promise<void>;\\n    protected getDocumentRoot(): Element;\\n    protected createTestElement(element: Element): TestElement;\\n    protected createEnvironment(element: Element): HarnessEnvironment<Element>;\\n    protected getAllRawElements(selector: string): Promise<Element[]>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/testbed/unit-test-element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/testbed/unit-test-element\\\" />\\nimport { ModifierKeys } from '@angular/cdk/testing';\\nimport { TestElement, TestKey } from '../test-element';\\nimport { ElementDimensions } from '../element-dimensions';\\n/** A `TestElement` implementation for unit tests. */\\nexport declare class UnitTestElement implements TestElement {\\n    readonly element: Element;\\n    private _stabilize;\\n    constructor(element: Element, _stabilize: () => Promise<void>);\\n    blur(): Promise<void>;\\n    clear(): Promise<void>;\\n    click(relativeX?: number, relativeY?: number): Promise<void>;\\n    focus(): Promise<void>;\\n    getCssValue(property: string): Promise<string>;\\n    hover(): Promise<void>;\\n    sendKeys(...keys: (string | TestKey)[]): Promise<void>;\\n    sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\\n    text(): Promise<string>;\\n    getAttribute(name: string): Promise<string | null>;\\n    hasClass(name: string): Promise<boolean>;\\n    getDimensions(): Promise<ElementDimensions>;\\n    getProperty(name: string): Promise<any>;\\n    matchesSelector(selector: string): Promise<boolean>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/testing/type-in-element.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/// <amd-module name=\\\"@angular/cdk/testing/type-in-element\\\" />\\nimport { ModifierKeys } from './event-objects';\\n/**\\n * Checks whether the given Element is a text input element.\\n * @docs-private\\n */\\nexport declare function isTextInput(element: Element): element is HTMLInputElement | HTMLTextAreaElement;\\n/**\\n * Focuses an input, sets its value and dispatches\\n * the `input` event, simulating the user typing.\\n * @param element Element onto which to set the value.\\n * @param keys The keys to send to the element.\\n * @docs-private\\n */\\nexport declare function typeInElement(element: HTMLElement, ...keys: (string | {\\n    keyCode?: number;\\n    key?: string;\\n})[]): void;\\n/**\\n * Focuses an input, sets its value and dispatches\\n * the `input` event, simulating the user typing.\\n * @param element Element onto which to set the value.\\n * @param modifiers Modifier keys that are held while typing.\\n * @param keys The keys to send to the element.\\n * @docs-private\\n */\\nexport declare function typeInElement(element: HTMLElement, modifiers: ModifierKeys, ...keys: (string | {\\n    keyCode?: number;\\n    key?: string;\\n})[]): void;\\n/**\\n * Clears the text in an input or textarea element.\\n * @docs-private\\n */\\nexport declare function clearElement(element: HTMLInputElement | HTMLTextAreaElement): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/text-field/autofill.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ElementRef, EventEmitter, NgZone, OnDestroy, OnInit } from '@angular/core';\\nimport { Observable } from 'rxjs';\\n/** An event that is emitted when the autofill state of an input changes. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type AutofillEvent = {\\n    /** The element whose autofill state changes. */\\n    target: Element;\\n    /** Whether the element is currently autofilled. */\\n    isAutofilled: boolean;\\n};\\n/**\\n * An injectable service that can be used to monitor the autofill state of an input.\\n * Based on the following blog post:\\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\\n */\\nexport declare class AutofillMonitor implements OnDestroy {\\n    private _platform;\\n    private _ngZone;\\n    private _monitoredElements;\\n    constructor(_platform: Platform, _ngZone: NgZone);\\n    /**\\n     * Monitor for changes in the autofill state of the given input element.\\n     * @param element The element to monitor.\\n     * @return A stream of autofill state changes.\\n     */\\n    monitor(element: Element): Observable<AutofillEvent>;\\n    /**\\n     * Monitor for changes in the autofill state of the given input element.\\n     * @param element The element to monitor.\\n     * @return A stream of autofill state changes.\\n     */\\n    monitor(element: ElementRef<Element>): Observable<AutofillEvent>;\\n    /**\\n     * Stop monitoring the autofill state of the given input element.\\n     * @param element The element to stop monitoring.\\n     */\\n    stopMonitoring(element: Element): void;\\n    /**\\n     * Stop monitoring the autofill state of the given input element.\\n     * @param element The element to stop monitoring.\\n     */\\n    stopMonitoring(element: ElementRef<Element>): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<AutofillMonitor>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<AutofillMonitor>;\\n}\\n/** A directive that can be used to monitor the autofill state of an input. */\\nexport declare class CdkAutofill implements OnDestroy, OnInit {\\n    private _elementRef;\\n    private _autofillMonitor;\\n    /** Emits when the autofill state of the element changes. */\\n    cdkAutofill: EventEmitter<AutofillEvent>;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _autofillMonitor: AutofillMonitor);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkAutofill>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkAutofill, \\\"[cdkAutofill]\\\", never, {}, { 'cdkAutofill': \\\"cdkAutofill\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=autofill.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/text-field/autosize.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, AfterViewInit, DoCheck, OnDestroy, NgZone } from '@angular/core';\\nimport { Platform } from '@angular/cdk/platform';\\n/** Directive to automatically resize a textarea to fit its content. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class CdkTextareaAutosize implements AfterViewInit, DoCheck, OnDestroy {\\n    private _elementRef;\\n    private _platform;\\n    private _ngZone;\\n    /** Keep track of the previous textarea value to avoid resizing when the value hasn't changed. */\\n    private _previousValue?;\\n    private _initialHeight;\\n    private readonly _destroyed;\\n    private _minRows;\\n    private _maxRows;\\n    private _enabled;\\n    /**\\n     * Value of minRows as of last resize. If the minRows has decreased, the\\n     * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\\n     * does not have the same problem because it does not affect the textarea's scrollHeight.\\n     */\\n    private _previousMinRows;\\n    private _textareaElement;\\n    /** Minimum amount of rows in the textarea. */\\n    minRows: number;\\n    /** Maximum amount of rows in the textarea. */\\n    maxRows: number;\\n    /** Whether autosizing is enabled or not */\\n    enabled: boolean;\\n    /** Cached height of a textarea with a single row. */\\n    private _cachedLineHeight;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _platform: Platform, _ngZone: NgZone);\\n    /** Sets the minimum height of the textarea as determined by minRows. */\\n    _setMinHeight(): void;\\n    /** Sets the maximum height of the textarea as determined by maxRows. */\\n    _setMaxHeight(): void;\\n    ngAfterViewInit(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Cache the height of a single-row textarea if it has not already been cached.\\n     *\\n     * We need to know how large a single \\\"row\\\" of a textarea is in order to apply minRows and\\n     * maxRows. For the initial version, we will assume that the height of a single line in the\\n     * textarea does not ever change.\\n     */\\n    private _cacheTextareaLineHeight;\\n    ngDoCheck(): void;\\n    /**\\n     * Resize the textarea to fit its content.\\n     * @param force Whether to force a height recalculation. By default the height will be\\n     *    recalculated only if the value changed since the last call.\\n     */\\n    resizeToFitContent(force?: boolean): void;\\n    /**\\n     * Resets the textarea to its original size\\n     */\\n    reset(): void;\\n    _noopInputHandler(): void;\\n    /**\\n     * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\\n     * prevent it from scrolling to the caret position. We need to re-set the selection\\n     * in order for it to scroll to the proper position.\\n     */\\n    private _scrollToCaretPosition;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CdkTextareaAutosize>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CdkTextareaAutosize, \\\"textarea[cdkTextareaAutosize]\\\", [\\\"cdkTextareaAutosize\\\"], { 'minRows': \\\"cdkAutosizeMinRows\\\", 'maxRows': \\\"cdkAutosizeMaxRows\\\", 'enabled': \\\"cdkTextareaAutosize\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=autosize.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/text-field/index.d.ts\",\n      \"node_modules/@angular/cdk/text-field/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/text-field/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './autofill';\\nexport * from './autosize';\\nexport * from './text-field-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/text-field/text-field-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './autofill';\\nimport * as ɵngcc2 from './autosize';\\nimport * as ɵngcc3 from '@angular/cdk/platform';\\nexport declare class TextFieldModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<TextFieldModule, [typeof ɵngcc1.CdkAutofill, typeof ɵngcc2.CdkTextareaAutosize], [typeof ɵngcc3.PlatformModule], [typeof ɵngcc1.CdkAutofill, typeof ɵngcc2.CdkTextareaAutosize]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<TextFieldModule>;\\n}\\n\\n//# sourceMappingURL=text-field-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/control/base-tree-control.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { SelectionModel } from '@angular/cdk/collections';\\nimport { Observable } from 'rxjs';\\nimport { TreeControl } from './tree-control';\\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\\nexport declare abstract class BaseTreeControl<T> implements TreeControl<T> {\\n    /** Gets a list of descendent data nodes of a subtree rooted at given data node recursively. */\\n    abstract getDescendants(dataNode: T): T[];\\n    /** Expands all data nodes in the tree. */\\n    abstract expandAll(): void;\\n    /** Saved data node for `expandAll` action. */\\n    dataNodes: T[];\\n    /** A selection model with multi-selection to track expansion status. */\\n    expansionModel: SelectionModel<T>;\\n    /** Get depth of a given data node, return the level number. This is for flat tree node. */\\n    getLevel: (dataNode: T) => number;\\n    /**\\n     * Whether the data node is expandable. Returns true if expandable.\\n     * This is for flat tree node.\\n     */\\n    isExpandable: (dataNode: T) => boolean;\\n    /** Gets a stream that emits whenever the given data node's children change. */\\n    getChildren: (dataNode: T) => (Observable<T[]> | T[] | undefined | null);\\n    /** Toggles one single data node's expanded/collapsed state. */\\n    toggle(dataNode: T): void;\\n    /** Expands one single data node. */\\n    expand(dataNode: T): void;\\n    /** Collapses one single data node. */\\n    collapse(dataNode: T): void;\\n    /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\\n    isExpanded(dataNode: T): boolean;\\n    /** Toggles a subtree rooted at `node` recursively. */\\n    toggleDescendants(dataNode: T): void;\\n    /** Collapse all dataNodes in the tree. */\\n    collapseAll(): void;\\n    /** Expands a subtree rooted at given data node recursively. */\\n    expandDescendants(dataNode: T): void;\\n    /** Collapses a subtree rooted at given data node recursively. */\\n    collapseDescendants(dataNode: T): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/control/flat-tree-control.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseTreeControl } from './base-tree-control';\\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\\nexport declare class FlatTreeControl<T> extends BaseTreeControl<T> {\\n    getLevel: (dataNode: T) => number;\\n    isExpandable: (dataNode: T) => boolean;\\n    /** Construct with flat tree data node functions getLevel and isExpandable. */\\n    constructor(getLevel: (dataNode: T) => number, isExpandable: (dataNode: T) => boolean);\\n    /**\\n     * Gets a list of the data node's subtree of descendent data nodes.\\n     *\\n     * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\\n     * with correct levels.\\n     */\\n    getDescendants(dataNode: T): T[];\\n    /**\\n     * Expands all data nodes in the tree.\\n     *\\n     * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\\n     * data nodes of the tree.\\n     */\\n    expandAll(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/control/nested-tree-control.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Observable } from 'rxjs';\\nimport { BaseTreeControl } from './base-tree-control';\\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\\nexport declare class NestedTreeControl<T> extends BaseTreeControl<T> {\\n    getChildren: (dataNode: T) => (Observable<T[]> | T[] | undefined | null);\\n    /** Construct with nested tree function getChildren. */\\n    constructor(getChildren: (dataNode: T) => (Observable<T[]> | T[] | undefined | null));\\n    /**\\n     * Expands all dataNodes in the tree.\\n     *\\n     * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\\n     * data nodes of the tree.\\n     */\\n    expandAll(): void;\\n    /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\\n    getDescendants(dataNode: T): T[];\\n    /** A helper function to get descendants recursively. */\\n    protected _getDescendants(descendants: T[], dataNode: T): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/control/tree-control.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { SelectionModel } from '@angular/cdk/collections';\\nimport { Observable } from 'rxjs';\\n/**\\n * Tree control interface. User can implement TreeControl to expand/collapse dataNodes in the tree.\\n * The CDKTree will use this TreeControl to expand/collapse a node.\\n * User can also use it outside the `<cdk-tree>` to control the expansion status of the tree.\\n */\\nexport interface TreeControl<T> {\\n    /** The saved tree nodes data for `expandAll` action. */\\n    dataNodes: T[];\\n    /** The expansion model */\\n    expansionModel: SelectionModel<T>;\\n    /** Whether the data node is expanded or collapsed. Return true if it's expanded. */\\n    isExpanded(dataNode: T): boolean;\\n    /** Get all descendants of a data node */\\n    getDescendants(dataNode: T): any[];\\n    /** Expand or collapse data node */\\n    toggle(dataNode: T): void;\\n    /** Expand one data node */\\n    expand(dataNode: T): void;\\n    /** Collapse one data node */\\n    collapse(dataNode: T): void;\\n    /** Expand all the dataNodes in the tree */\\n    expandAll(): void;\\n    /** Collapse all the dataNodes in the tree */\\n    collapseAll(): void;\\n    /** Toggle a data node by expand/collapse it and all its descendants */\\n    toggleDescendants(dataNode: T): void;\\n    /** Expand a data node and all its descendants */\\n    expandDescendants(dataNode: T): void;\\n    /** Collapse a data node and all its descendants */\\n    collapseDescendants(dataNode: T): void;\\n    /** Get depth of a given data node, return the level number. This is for flat tree node. */\\n    readonly getLevel: (dataNode: T) => number;\\n    /**\\n     * Whether the data node is expandable. Returns true if expandable.\\n     * This is for flat tree node.\\n     */\\n    readonly isExpandable: (dataNode: T) => boolean;\\n    /** Gets a stream that emits whenever the given data node's children change. */\\n    readonly getChildren: (dataNode: T) => Observable<T[]> | T[] | undefined | null;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/index.d.ts\",\n      \"node_modules/@angular/cdk/tree/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/nested-node.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ElementRef, IterableDiffers, OnDestroy, QueryList } from '@angular/core';\\nimport { CdkTreeNodeOutlet } from './outlet';\\nimport { CdkTree, CdkTreeNode } from './tree';\\n/**\\n * Nested node is a child of `<cdk-tree>`. It works with nested tree.\\n * By using `cdk-nested-tree-node` component in tree node template, children of the parent node will\\n * be added in the `cdkTreeNodeOutlet` in tree node template.\\n * For example:\\n *   ```html\\n *   <cdk-nested-tree-node>\\n *     {{node.name}}\\n *     <ng-template cdkTreeNodeOutlet></ng-template>\\n *   </cdk-nested-tree-node>\\n *   ```\\n * The children of node will be automatically added to `cdkTreeNodeOutlet`, the result dom will be\\n * like this:\\n *   ```html\\n *   <cdk-nested-tree-node>\\n *     {{node.name}}\\n *      <cdk-nested-tree-node>{{child1.name}}</cdk-nested-tree-node>\\n *      <cdk-nested-tree-node>{{child2.name}}</cdk-nested-tree-node>\\n *   </cdk-nested-tree-node>\\n *   ```\\n */\\nexport declare class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements AfterContentInit, OnDestroy {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    protected _tree: CdkTree<T>;\\n    protected _differs: IterableDiffers;\\n    /** Differ used to find the changes in the data provided by the data source. */\\n    private _dataDiffer;\\n    /** The children data dataNodes of current node. They will be placed in `CdkTreeNodeOutlet`. */\\n    protected _children: T[];\\n    /** The children node placeholder. */\\n    nodeOutlet: QueryList<CdkTreeNodeOutlet>;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>, _differs: IterableDiffers);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Add children dataNodes to the NodeOutlet */\\n    protected updateChildrenNodes(children?: T[]): void;\\n    /** Clear the children dataNodes. */\\n    protected _clear(): void;\\n    /** Gets the outlet for the current node. */\\n    private _getNodeOutlet;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/node.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\n/** Context provided to the tree node component. */\\nexport declare class CdkTreeNodeOutletContext<T> {\\n    /** Data for the node. */\\n    $implicit: T;\\n    /** Depth of the node. */\\n    level: number;\\n    /** Index location of the node. */\\n    index?: number;\\n    /** Length of the number of total dataNodes. */\\n    count?: number;\\n    constructor(data: T);\\n}\\n/**\\n * Data node definition for the CdkTree.\\n * Captures the node's template and a when predicate that describes when this node should be used.\\n */\\nexport declare class CdkTreeNodeDef<T> {\\n    template: TemplateRef<any>;\\n    /**\\n     * Function that should return true if this node template should be used for the provided node\\n     * data and index. If left undefined, this node will be considered the default node template to\\n     * use when no other when functions return true for the data.\\n     * For every node, there must be at least one when function that passes or an undefined to\\n     * default.\\n     */\\n    when: (index: number, nodeData: T) => boolean;\\n    /** @docs-private */\\n    constructor(template: TemplateRef<any>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/outlet.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken, ViewContainerRef } from '@angular/core';\\n/**\\n * Injection token used to provide a `CdkTreeNode` to its outlet.\\n * Used primarily to avoid circular imports.\\n * @docs-private\\n */\\nexport declare const CDK_TREE_NODE_OUTLET_NODE: InjectionToken<{}>;\\n/**\\n * Outlet for nested CdkNode. Put `[cdkTreeNodeOutlet]` on a tag to place children dataNodes\\n * inside the outlet.\\n */\\nexport declare class CdkTreeNodeOutlet {\\n    viewContainer: ViewContainerRef;\\n    _node?: any;\\n    constructor(viewContainer: ViewContainerRef, _node?: any);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/padding.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { ElementRef, OnDestroy, Renderer2 } from '@angular/core';\\nimport { CdkTree, CdkTreeNode } from './tree';\\n/**\\n * Indent for the children tree dataNodes.\\n * This directive will add left-padding to the node to show hierarchy.\\n */\\nexport declare class CdkTreeNodePadding<T> implements OnDestroy {\\n    private _treeNode;\\n    private _tree;\\n    private _renderer;\\n    private _element;\\n    private _dir;\\n    /** Current padding value applied to the element. Used to avoid unnecessarily hitting the DOM. */\\n    private _currentPadding;\\n    /** Subject that emits when the component has been destroyed. */\\n    private _destroyed;\\n    /** CSS units used for the indentation value. */\\n    indentUnits: string;\\n    /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\\n    level: number;\\n    _level: number;\\n    /**\\n     * The indent for each level. Can be a number or a CSS string.\\n     * Default number 40px from material design menu sub-menu spec.\\n     */\\n    indent: number | string;\\n    _indent: number;\\n    constructor(_treeNode: CdkTreeNode<T>, _tree: CdkTree<T>, _renderer: Renderer2, _element: ElementRef<HTMLElement>, _dir: Directionality);\\n    ngOnDestroy(): void;\\n    /** The padding indent value for the tree node. Returns a string with px numbers if not null. */\\n    _paddingIndent(): string | null;\\n    _setPadding(forceChange?: boolean): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './control/base-tree-control';\\nexport * from './control/flat-tree-control';\\nexport * from './control/nested-tree-control';\\nexport * from './control/tree-control';\\nexport * from './nested-node';\\nexport * from './node';\\nexport * from './padding';\\nexport * from './outlet';\\nexport * from './tree';\\nexport * from './tree-errors';\\nexport * from './tree-module';\\nexport * from './toggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/toggle.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTree, CdkTreeNode } from './tree';\\n/**\\n * Node toggle to expand/collapse the node.\\n */\\nexport declare class CdkTreeNodeToggle<T> {\\n    protected _tree: CdkTree<T>;\\n    protected _treeNode: CdkTreeNode<T>;\\n    /** Whether expand/collapse the node recursively. */\\n    recursive: boolean;\\n    protected _recursive: boolean;\\n    constructor(_tree: CdkTree<T>, _treeNode: CdkTreeNode<T>);\\n    _toggle(event: Event): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/tree-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Returns an error to be thrown when there is no usable data.\\n * @docs-private\\n */\\nexport declare function getTreeNoValidDataSourceError(): Error;\\n/**\\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\\n * @docs-private\\n */\\nexport declare function getTreeMultipleDefaultNodeDefsError(): Error;\\n/**\\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\\n * @docs-private\\n */\\nexport declare function getTreeMissingMatchingNodeDefError(): Error;\\n/**\\n * Returns an error to be thrown when there are tree control.\\n * @docs-private\\n */\\nexport declare function getTreeControlMissingError(): Error;\\n/**\\n * Returns an error to be thrown when tree control did not implement functions for flat/nested node.\\n * @docs-private\\n */\\nexport declare function getTreeControlFunctionsMissingError(): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/tree-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class CdkTreeModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/tree/tree.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusableOption } from '@angular/cdk/a11y';\\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections';\\nimport { AfterContentChecked, ChangeDetectorRef, ElementRef, IterableDiffer, IterableDiffers, OnDestroy, OnInit, QueryList, ViewContainerRef, TrackByFunction } from '@angular/core';\\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\\nimport { TreeControl } from './control/tree-control';\\nimport { CdkTreeNodeDef } from './node';\\nimport { CdkTreeNodeOutlet } from './outlet';\\n/**\\n * CDK tree component that connects with a data source to retrieve data of type `T` and renders\\n * dataNodes with hierarchy. Updates the dataNodes when new data is provided by the data source.\\n */\\nexport declare class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {\\n    private _differs;\\n    private _changeDetectorRef;\\n    /** Subject that emits when the component has been destroyed. */\\n    private _onDestroy;\\n    /** Differ used to find the changes in the data provided by the data source. */\\n    private _dataDiffer;\\n    /** Stores the node definition that does not have a when predicate. */\\n    private _defaultNodeDef;\\n    /** Data subscription */\\n    private _dataSubscription;\\n    /** Level of nodes */\\n    private _levels;\\n    /**\\n     * Provides a stream containing the latest data array to render. Influenced by the tree's\\n     * stream of view window (what dataNodes are currently on screen).\\n     * Data source can be an observable of data array, or a data array to render.\\n     */\\n    dataSource: DataSource<T> | Observable<T[]> | T[];\\n    private _dataSource;\\n    /** The tree controller */\\n    treeControl: TreeControl<T>;\\n    /**\\n     * Tracking function that will be used to check the differences in data changes. Used similarly\\n     * to `ngFor` `trackBy` function. Optimize node operations by identifying a node based on its data\\n     * relative to the function to know if a node should be added/removed/moved.\\n     * Accepts a function that takes two parameters, `index` and `item`.\\n     */\\n    trackBy: TrackByFunction<T>;\\n    _nodeOutlet: CdkTreeNodeOutlet;\\n    /** The tree node template for the tree */\\n    _nodeDefs: QueryList<CdkTreeNodeDef<T>>;\\n    /**\\n     * Stream containing the latest information on what rows are being displayed on screen.\\n     * Can be used by the data source to as a heuristic of what data should be provided.\\n     */\\n    viewChange: BehaviorSubject<{\\n        start: number;\\n        end: number;\\n    }>;\\n    constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    ngAfterContentChecked(): void;\\n    /**\\n     * Switch to the provided data source by resetting the data and unsubscribing from the current\\n     * render change subscription if one exists. If the data source is null, interpret this by\\n     * clearing the node outlet. Otherwise start listening for new data.\\n     */\\n    private _switchDataSource;\\n    /** Set up a subscription for the data provided by the data source. */\\n    private _observeRenderChanges;\\n    /** Check for changes made in the data and render each change (node added/removed/moved). */\\n    renderNodeChanges(data: T[] | ReadonlyArray<T>, dataDiffer?: IterableDiffer<T>, viewContainer?: ViewContainerRef, parentData?: T): void;\\n    /**\\n     * Finds the matching node definition that should be used for this node data. If there is only\\n     * one node definition, it is returned. Otherwise, find the node definition that has a when\\n     * predicate that returns true with the data. If none return true, return the default node\\n     * definition.\\n     */\\n    _getNodeDef(data: T, i: number): CdkTreeNodeDef<T>;\\n    /**\\n     * Create the embedded view for the data node template and place it in the correct index location\\n     * within the data node view container.\\n     */\\n    insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T): void;\\n}\\n/**\\n * Tree node for CdkTree. It contains the data in the tree node.\\n */\\nexport declare class CdkTreeNode<T> implements FocusableOption, OnDestroy {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    protected _tree: CdkTree<T>;\\n    /**\\n     * The most recently created `CdkTreeNode`. We save it in static variable so we can retrieve it\\n     * in `CdkTree` and set the data to it.\\n     */\\n    static mostRecentTreeNode: CdkTreeNode<any> | null;\\n    /** Subject that emits when the component has been destroyed. */\\n    protected _destroyed: Subject<void>;\\n    /** Emits when the node's data has changed. */\\n    _dataChanges: Subject<void>;\\n    /** The tree node's data. */\\n    data: T;\\n    protected _data: T;\\n    readonly isExpanded: boolean;\\n    readonly level: number;\\n    /**\\n     * The role of the node should be 'group' if it's an internal node,\\n     * and 'treeitem' if it's a leaf node.\\n     */\\n    role: 'treeitem' | 'group';\\n    constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>);\\n    ngOnDestroy(): void;\\n    /** Focuses the menu item. Implements for FocusableOption. */\\n    focus(): void;\\n    protected _setRoleFromData(): void;\\n    protected _setRoleFromChildren(children: T[]): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/typings.d.ts\"\n    ],\n    \"content\": \"declare var module: {id: string};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/cdk/version.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Version } from '@angular/core';\\n/** Current version of the Angular Component Development Kit. */\\nexport declare const VERSION: Version;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/autocomplete-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatAutocompleteModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef } from '@angular/core';\\n/**\\n * Directive applied to an element to make it usable\\n * as a connection point for an autocomplete panel.\\n */\\nexport declare class MatAutocompleteOrigin {\\n    /** Reference to the element on which the directive is applied. */\\n    elementRef: ElementRef<HTMLElement>;\\n    constructor(\\n    /** Reference to the element on which the directive is applied. */\\n    elementRef: ElementRef<HTMLElement>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { AfterViewInit, ChangeDetectorRef, ElementRef, InjectionToken, NgZone, OnDestroy, ViewContainerRef, OnChanges, SimpleChanges } from '@angular/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { MatOption, MatOptionSelectionChange } from '@angular/material/core';\\nimport { MatFormField } from '@angular/material/form-field';\\nimport { Observable } from 'rxjs';\\nimport { MatAutocomplete } from './autocomplete';\\nimport { MatAutocompleteOrigin } from './autocomplete-origin';\\n/**\\n * The following style constants are necessary to save here in order\\n * to properly calculate the scrollTop of the panel. Because we are not\\n * actually focusing the active item, scroll must be handled manually.\\n */\\n/** The height of each autocomplete option. */\\nexport declare const AUTOCOMPLETE_OPTION_HEIGHT = 48;\\n/** The total height of the autocomplete panel. */\\nexport declare const AUTOCOMPLETE_PANEL_HEIGHT = 256;\\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\\nexport declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private */\\nexport declare function MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY;\\n};\\n/**\\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\\n * @docs-private\\n */\\nexport declare const MAT_AUTOCOMPLETE_VALUE_ACCESSOR: any;\\n/**\\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\\n * @docs-private\\n */\\nexport declare function getMatAutocompleteMissingPanelError(): Error;\\nexport declare class MatAutocompleteTrigger implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\\n    private _element;\\n    private _overlay;\\n    private _viewContainerRef;\\n    private _zone;\\n    private _changeDetectorRef;\\n    private _dir;\\n    private _formField;\\n    private _document;\\n    private _viewportRuler?;\\n    private _overlayRef;\\n    private _portal;\\n    private _componentDestroyed;\\n    private _autocompleteDisabled;\\n    private _scrollStrategy;\\n    /** Old value of the native input. Used to work around issues with the `input` event on IE. */\\n    private _previousValue;\\n    /** Strategy that is used to position the panel. */\\n    private _positionStrategy;\\n    /** Whether or not the label state is being overridden. */\\n    private _manuallyFloatingLabel;\\n    /** The subscription for closing actions (some are bound to document). */\\n    private _closingActionsSubscription;\\n    /** Subscription to viewport size changes. */\\n    private _viewportSubscription;\\n    /**\\n     * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\\n     * closed autocomplete from being reopened if the user switches to another browser tab and then\\n     * comes back.\\n     */\\n    private _canOpenOnNextFocus;\\n    /** Whether the element is inside of a ShadowRoot component. */\\n    private _isInsideShadowRoot;\\n    /** Stream of keyboard events that can close the panel. */\\n    private readonly _closeKeyEventStream;\\n    /**\\n     * Event handler for when the window is blurred. Needs to be an\\n     * arrow function in order to preserve the context.\\n     */\\n    private _windowBlurHandler;\\n    /** `View -> model callback called when value changes` */\\n    _onChange: (value: any) => void;\\n    /** `View -> model callback called when autocomplete has been touched` */\\n    _onTouched: () => void;\\n    /** The autocomplete panel to be attached to this trigger. */\\n    autocomplete: MatAutocomplete;\\n    /**\\n     * Position of the autocomplete panel relative to the trigger element. A position of `auto`\\n     * will render the panel underneath the trigger if there is enough space for it to fit in\\n     * the viewport, otherwise the panel will be shown above it. If the position is set to\\n     * `above` or `below`, the panel will always be shown above or below the trigger. no matter\\n     * whether it fits completely in the viewport.\\n     */\\n    position: 'auto' | 'above' | 'below';\\n    /**\\n     * Reference relative to which to position the autocomplete panel.\\n     * Defaults to the autocomplete trigger element.\\n     */\\n    connectedTo: MatAutocompleteOrigin;\\n    /**\\n     * `autocomplete` attribute to be set on the input element.\\n     * @docs-private\\n     */\\n    autocompleteAttribute: string;\\n    /**\\n     * Whether the autocomplete is disabled. When disabled, the element will\\n     * act as a regular input and the user won't be able to open the panel.\\n     */\\n    autocompleteDisabled: boolean;\\n    constructor(_element: ElementRef<HTMLInputElement>, _overlay: Overlay, _viewContainerRef: ViewContainerRef, _zone: NgZone, _changeDetectorRef: ChangeDetectorRef, scrollStrategy: any, _dir: Directionality, _formField: MatFormField, _document: any, _viewportRuler?: ViewportRuler | undefined);\\n    ngAfterViewInit(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    /** Whether or not the autocomplete panel is open. */\\n    readonly panelOpen: boolean;\\n    private _overlayAttached;\\n    /** Opens the autocomplete suggestion panel. */\\n    openPanel(): void;\\n    /** Closes the autocomplete suggestion panel. */\\n    closePanel(): void;\\n    /**\\n     * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\\n     * within the viewport.\\n     */\\n    updatePosition(): void;\\n    /**\\n     * A stream of actions that should close the autocomplete panel, including\\n     * when an option is selected, on blur, and when TAB is pressed.\\n     */\\n    readonly panelClosingActions: Observable<MatOptionSelectionChange | null>;\\n    /** Stream of autocomplete option selections. */\\n    readonly optionSelections: Observable<MatOptionSelectionChange>;\\n    /** The currently active option, coerced to MatOption type. */\\n    readonly activeOption: MatOption | null;\\n    /** Stream of clicks outside of the autocomplete panel. */\\n    private _getOutsideClickStream;\\n    writeValue(value: any): void;\\n    registerOnChange(fn: (value: any) => {}): void;\\n    registerOnTouched(fn: () => {}): void;\\n    setDisabledState(isDisabled: boolean): void;\\n    _handleKeydown(event: KeyboardEvent): void;\\n    _handleInput(event: KeyboardEvent): void;\\n    _handleFocus(): void;\\n    /**\\n     * In \\\"auto\\\" mode, the label will animate down as soon as focus is lost.\\n     * This causes the value to jump when selecting an option with the mouse.\\n     * This method manually floats the label until the panel can be closed.\\n     * @param shouldAnimate Whether the label should be animated when it is floated.\\n     */\\n    private _floatLabel;\\n    /** If the label has been manually elevated, return it to its normal state. */\\n    private _resetLabel;\\n    /**\\n     * Given that we are not actually focusing active options, we must manually adjust scroll\\n     * to reveal options below the fold. First, we find the offset of the option from the top\\n     * of the panel. If that offset is below the fold, the new scrollTop will be the offset -\\n     * the panel height + the option height, so the active option will be just visible at the\\n     * bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\\n     * will become the offset. If that offset is visible within the panel already, the scrollTop is\\n     * not adjusted.\\n     */\\n    private _scrollToOption;\\n    /**\\n     * This method listens to a stream of panel closing actions and resets the\\n     * stream every time the option list changes.\\n     */\\n    private _subscribeToClosingActions;\\n    /** Destroys the autocomplete suggestion panel. */\\n    private _destroyPanel;\\n    private _setTriggerValue;\\n    /**\\n     * This method closes the panel, and if a value is specified, also sets the associated\\n     * control to that value. It will also mark the control as dirty if this interaction\\n     * stemmed from the user.\\n     */\\n    private _setValueAndClose;\\n    /**\\n     * Clear any previous selected option and emit a selection change event for this option\\n     */\\n    private _clearPreviousSelectedOption;\\n    private _attachOverlay;\\n    private _getOverlayConfig;\\n    private _getOverlayPosition;\\n    /** Sets the positions on a position strategy based on the directive's input state. */\\n    private _setStrategyPositions;\\n    private _getConnectedElement;\\n    private _getPanelWidth;\\n    /** Returns the width of the input element, so the panel width can match it. */\\n    private _getHostWidth;\\n    /**\\n     * Resets the active item to -1 so arrow events will activate the\\n     * correct options, or to 0 if the consumer opted into it.\\n     */\\n    private _resetActiveItem;\\n    /** Determines whether the panel can be opened. */\\n    private _canOpen;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/autocomplete.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\\nimport { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef } from '@angular/core';\\nimport { CanDisableRipple, CanDisableRippleCtor, MatOptgroup, MatOption } from '@angular/material/core';\\n/** Event object that is emitted when an autocomplete option is selected. */\\nexport declare class MatAutocompleteSelectedEvent {\\n    /** Reference to the autocomplete panel that emitted the event. */\\n    source: MatAutocomplete;\\n    /** Option that was selected. */\\n    option: MatOption;\\n    constructor(\\n    /** Reference to the autocomplete panel that emitted the event. */\\n    source: MatAutocomplete, \\n    /** Option that was selected. */\\n    option: MatOption);\\n}\\n/** @docs-private */\\ndeclare class MatAutocompleteBase {\\n}\\ndeclare const _MatAutocompleteMixinBase: CanDisableRippleCtor & typeof MatAutocompleteBase;\\n/** Default `mat-autocomplete` options that can be overridden. */\\nexport interface MatAutocompleteDefaultOptions {\\n    /** Whether the first option should be highlighted when an autocomplete panel is opened. */\\n    autoActiveFirstOption?: boolean;\\n}\\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\\nexport declare const MAT_AUTOCOMPLETE_DEFAULT_OPTIONS: InjectionToken<MatAutocompleteDefaultOptions>;\\n/** @docs-private */\\nexport declare function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): MatAutocompleteDefaultOptions;\\nexport declare class MatAutocomplete extends _MatAutocompleteMixinBase implements AfterContentInit, CanDisableRipple {\\n    private _changeDetectorRef;\\n    private _elementRef;\\n    /** Manages active item in option list based on key events. */\\n    _keyManager: ActiveDescendantKeyManager<MatOption>;\\n    /** Whether the autocomplete panel should be visible, depending on option length. */\\n    showPanel: boolean;\\n    /** Whether the autocomplete panel is open. */\\n    readonly isOpen: boolean;\\n    _isOpen: boolean;\\n    /** @docs-private */\\n    template: TemplateRef<any>;\\n    /** Element for the panel containing the autocomplete options. */\\n    panel: ElementRef;\\n    /** @docs-private */\\n    options: QueryList<MatOption>;\\n    /** @docs-private */\\n    optionGroups: QueryList<MatOptgroup>;\\n    /** Function that maps an option's control value to its display value in the trigger. */\\n    displayWith: ((value: any) => string) | null;\\n    /**\\n     * Whether the first option should be highlighted when the autocomplete panel is opened.\\n     * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\\n     */\\n    autoActiveFirstOption: boolean;\\n    private _autoActiveFirstOption;\\n    /**\\n     * Specify the width of the autocomplete panel.  Can be any CSS sizing value, otherwise it will\\n     * match the width of its host.\\n     */\\n    panelWidth: string | number;\\n    /** Event that is emitted whenever an option from the list is selected. */\\n    readonly optionSelected: EventEmitter<MatAutocompleteSelectedEvent>;\\n    /** Event that is emitted when the autocomplete panel is opened. */\\n    readonly opened: EventEmitter<void>;\\n    /** Event that is emitted when the autocomplete panel is closed. */\\n    readonly closed: EventEmitter<void>;\\n    /**\\n     * Takes classes set on the host mat-autocomplete element and applies them to the panel\\n     * inside the overlay container to allow for easy styling.\\n     */\\n    classList: string;\\n    _classList: {\\n        [key: string]: boolean;\\n    };\\n    /** Unique ID to be used by autocomplete trigger's \\\"aria-owns\\\" property. */\\n    id: string;\\n    constructor(_changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>, defaults: MatAutocompleteDefaultOptions);\\n    ngAfterContentInit(): void;\\n    /**\\n     * Sets the panel scrollTop. This allows us to manually scroll to display options\\n     * above or below the fold, as they are not actually being focused when active.\\n     */\\n    _setScrollTop(scrollTop: number): void;\\n    /** Returns the panel's scrollTop. */\\n    _getScrollTop(): number;\\n    /** Panel should hide itself when the option list is empty. */\\n    _setVisibility(): void;\\n    /** Emits the `select` event. */\\n    _emitSelectEvent(option: MatOption): void;\\n    /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\\n    private _setVisibilityClasses;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/index.d.ts\",\n      \"node_modules/@angular/material/autocomplete/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './autocomplete';\\nexport * from './autocomplete-module';\\nexport * from './autocomplete-trigger';\\nexport * from './autocomplete-origin';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/testing/autocomplete-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface AutocompleteHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/testing/autocomplete-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate, TestElement } from '@angular/cdk/testing';\\nimport { AutocompleteHarnessFilters } from './autocomplete-harness-filters';\\nimport { MatAutocompleteOptionHarness, MatAutocompleteOptionGroupHarness } from './option-harness';\\n/**\\n * Harness for interacting with a standard mat-autocomplete in tests.\\n * @dynamic\\n */\\nexport declare class MatAutocompleteHarness extends ComponentHarness {\\n    private _documentRootLocator;\\n    private _panel;\\n    private _optionalPanel;\\n    private _options;\\n    private _groups;\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for an autocomplete with\\n     * specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `name` finds an autocomplete with a specific name.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: AutocompleteHarnessFilters): HarnessPredicate<MatAutocompleteHarness>;\\n    getAttribute(attributeName: string): Promise<string | null>;\\n    /** Gets a boolean promise indicating if the autocomplete input is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /** Gets a promise for the autocomplete's text. */\\n    getText(): Promise<string>;\\n    /** Focuses the input and returns a void promise that indicates when the action is complete. */\\n    focus(): Promise<void>;\\n    /** Blurs the input and returns a void promise that indicates when the action is complete. */\\n    blur(): Promise<void>;\\n    /** Enters text into the autocomplete. */\\n    enterText(value: string): Promise<void>;\\n    /** Gets the autocomplete panel. */\\n    getPanel(): Promise<TestElement>;\\n    /** Gets the options inside the autocomplete panel. */\\n    getOptions(): Promise<MatAutocompleteOptionHarness[]>;\\n    /** Gets the groups of options inside the panel. */\\n    getOptionGroups(): Promise<MatAutocompleteOptionGroupHarness[]>;\\n    /** Gets whether the autocomplete panel is visible. */\\n    isPanelVisible(): Promise<boolean>;\\n    /** Gets whether the autocomplete is open. */\\n    isOpen(): Promise<boolean>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/testing/index.d.ts\",\n      \"node_modules/@angular/material/autocomplete/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/testing/option-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate, BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface OptionHarnessFilters extends BaseHarnessFilters {\\n    text?: string;\\n}\\nexport interface OptionGroupHarnessFilters extends BaseHarnessFilters {\\n    labelText?: string;\\n}\\n/**\\n * Harness for interacting with a the `mat-option` for a `mat-autocomplete` in tests.\\n * @dynamic\\n */\\nexport declare class MatAutocompleteOptionHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    static with(options?: OptionHarnessFilters): HarnessPredicate<MatAutocompleteOptionHarness>;\\n    /** Clicks the option. */\\n    click(): Promise<void>;\\n    /** Gets a promise for the option's label text. */\\n    getText(): Promise<string>;\\n}\\n/**\\n * Harness for interacting with a the `mat-optgroup` for a `mat-autocomplete` in tests.\\n * @dynamic\\n */\\nexport declare class MatAutocompleteOptionGroupHarness extends ComponentHarness {\\n    private _label;\\n    static hostSelector: string;\\n    static with(options?: OptionGroupHarnessFilters): HarnessPredicate<MatAutocompleteOptionGroupHarness>;\\n    /** Gets a promise for the option group's label text. */\\n    getLabelText(): Promise<string>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/autocomplete/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './autocomplete-harness';\\nexport * from './autocomplete-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/badge/badge-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatBadgeModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/badge/badge.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AriaDescriber } from '@angular/cdk/a11y';\\nimport { ElementRef, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';\\nimport { CanDisable, CanDisableCtor, ThemePalette } from '@angular/material/core';\\n/** @docs-private */\\ndeclare class MatBadgeBase {\\n}\\ndeclare const _MatBadgeMixinBase: CanDisableCtor & typeof MatBadgeBase;\\nexport declare type MatBadgePosition = 'above after' | 'above before' | 'below before' | 'below after';\\nexport declare type MatBadgeSize = 'small' | 'medium' | 'large';\\n/** Directive to display a text badge. */\\nexport declare class MatBadge extends _MatBadgeMixinBase implements OnDestroy, OnChanges, CanDisable {\\n    private _ngZone;\\n    private _elementRef;\\n    private _ariaDescriber;\\n    private _renderer;\\n    private _animationMode?;\\n    /** Whether the badge has any content. */\\n    _hasContent: boolean;\\n    /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\\n    color: ThemePalette;\\n    private _color;\\n    /** Whether the badge should overlap its contents or not */\\n    overlap: boolean;\\n    private _overlap;\\n    /**\\n     * Position the badge should reside.\\n     * Accepts any combination of 'above'|'below' and 'before'|'after'\\n     */\\n    position: MatBadgePosition;\\n    /** The content for the badge */\\n    content: string;\\n    /** Message used to describe the decorated element via aria-describedby */\\n    description: string;\\n    private _description;\\n    /** Size of the badge. Can be 'small', 'medium', or 'large'. */\\n    size: MatBadgeSize;\\n    /** Whether the badge is hidden. */\\n    hidden: boolean;\\n    private _hidden;\\n    /** Unique id for the badge */\\n    _id: number;\\n    private _badgeElement;\\n    constructor(_ngZone: NgZone, _elementRef: ElementRef<HTMLElement>, _ariaDescriber: AriaDescriber, _renderer: Renderer2, _animationMode?: string | undefined);\\n    /** Whether the badge is above the host or not */\\n    isAbove(): boolean;\\n    /** Whether the badge is after the host or not */\\n    isAfter(): boolean;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Gets the element into which the badge's content is being rendered.\\n     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).\\n     */\\n    getBadgeElement(): HTMLElement | undefined;\\n    /** Injects a span element into the DOM with the content. */\\n    private _updateTextContent;\\n    /** Creates the badge element */\\n    private _createBadgeElement;\\n    /** Sets the aria-label property on the element */\\n    private _updateHostAriaDescription;\\n    /** Adds css theme class given the color to the component host */\\n    private _setColor;\\n    /** Clears any existing badges that might be left over from server-side rendering. */\\n    private _clearExistingBadges;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/badge/index.d.ts\",\n      \"node_modules/@angular/material/badge/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/badge/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './badge-module';\\nexport * from './badge';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/bottom-sheet-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/** Animations used by the Material bottom sheet. */\\nexport declare const matBottomSheetAnimations: {\\n    readonly bottomSheetState: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/bottom-sheet-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Direction } from '@angular/cdk/bidi';\\nimport { ScrollStrategy } from '@angular/cdk/overlay';\\nimport { InjectionToken, ViewContainerRef } from '@angular/core';\\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\\nexport declare const MAT_BOTTOM_SHEET_DATA: InjectionToken<any>;\\n/**\\n * Configuration used when opening a bottom sheet.\\n */\\nexport declare class MatBottomSheetConfig<D = any> {\\n    /** The view container to place the overlay for the bottom sheet into. */\\n    viewContainerRef?: ViewContainerRef;\\n    /** Extra CSS classes to be added to the bottom sheet container. */\\n    panelClass?: string | string[];\\n    /** Text layout direction for the bottom sheet. */\\n    direction?: Direction;\\n    /** Data being injected into the child component. */\\n    data?: D | null;\\n    /** Whether the bottom sheet has a backdrop. */\\n    hasBackdrop?: boolean;\\n    /** Custom class for the backdrop. */\\n    backdropClass?: string;\\n    /** Whether the user can use escape or clicking outside to close the bottom sheet. */\\n    disableClose?: boolean;\\n    /** Aria label to assign to the bottom sheet element. */\\n    ariaLabel?: string | null;\\n    /**\\n     * Whether the bottom sheet should close when the user goes backwards/forwards in history.\\n     * Note that this usually doesn't include clicking on links (unless the user is using\\n     * the `HashLocationStrategy`).\\n     */\\n    closeOnNavigation?: boolean;\\n    /** Whether the bottom sheet should focus the first focusable element on open. */\\n    autoFocus?: boolean;\\n    /**\\n     * Whether the bottom sheet should restore focus to the\\n     * previously-focused element, after it's closed.\\n     */\\n    restoreFocus?: boolean;\\n    /** Scroll strategy to be used for the bottom sheet. */\\n    scrollStrategy?: ScrollStrategy;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/bottom-sheet-container.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentRef, EmbeddedViewRef, OnDestroy, ElementRef, ChangeDetectorRef, EventEmitter } from '@angular/core';\\nimport { AnimationEvent } from '@angular/animations';\\nimport { BasePortalOutlet, ComponentPortal, TemplatePortal, CdkPortalOutlet } from '@angular/cdk/portal';\\nimport { BreakpointObserver } from '@angular/cdk/layout';\\nimport { MatBottomSheetConfig } from './bottom-sheet-config';\\nimport { FocusTrapFactory } from '@angular/cdk/a11y';\\n/**\\n * Internal component that wraps user-provided bottom sheet content.\\n * @docs-private\\n */\\nexport declare class MatBottomSheetContainer extends BasePortalOutlet implements OnDestroy {\\n    private _elementRef;\\n    private _changeDetectorRef;\\n    private _focusTrapFactory;\\n    /** The bottom sheet configuration. */\\n    bottomSheetConfig: MatBottomSheetConfig;\\n    private _breakpointSubscription;\\n    /** The portal outlet inside of this container into which the content will be loaded. */\\n    _portalOutlet: CdkPortalOutlet;\\n    /** The state of the bottom sheet animations. */\\n    _animationState: 'void' | 'visible' | 'hidden';\\n    /** Emits whenever the state of the animation changes. */\\n    _animationStateChanged: EventEmitter<AnimationEvent>;\\n    /** The class that traps and manages focus within the bottom sheet. */\\n    private _focusTrap;\\n    /** Element that was focused before the bottom sheet was opened. */\\n    private _elementFocusedBeforeOpened;\\n    /** Server-side rendering-compatible reference to the global document object. */\\n    private _document;\\n    /** Whether the component has been destroyed. */\\n    private _destroyed;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, _focusTrapFactory: FocusTrapFactory, breakpointObserver: BreakpointObserver, document: any, \\n    /** The bottom sheet configuration. */\\n    bottomSheetConfig: MatBottomSheetConfig);\\n    /** Attach a component portal as content to this bottom sheet container. */\\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    /** Attach a template portal as content to this bottom sheet container. */\\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\\n    /** Begin animation of bottom sheet entrance into view. */\\n    enter(): void;\\n    /** Begin animation of the bottom sheet exiting from view. */\\n    exit(): void;\\n    ngOnDestroy(): void;\\n    _onAnimationDone(event: AnimationEvent): void;\\n    _onAnimationStart(event: AnimationEvent): void;\\n    private _toggleClass;\\n    private _validatePortalAttached;\\n    private _setPanelClass;\\n    /** Moves the focus inside the focus trap. */\\n    private _trapFocus;\\n    /** Restores focus to the element that was focused before the bottom sheet was opened. */\\n    private _restoreFocus;\\n    /** Saves a reference to the element that was focused before the bottom sheet was opened. */\\n    private _savePreviouslyFocusedElement;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/bottom-sheet-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatBottomSheetModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/bottom-sheet-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Location } from '@angular/common';\\nimport { OverlayRef } from '@angular/cdk/overlay';\\nimport { Observable } from 'rxjs';\\nimport { MatBottomSheetContainer } from './bottom-sheet-container';\\n/**\\n * Reference to a bottom sheet dispatched from the bottom sheet service.\\n */\\nexport declare class MatBottomSheetRef<T = any, R = any> {\\n    private _overlayRef;\\n    /** Instance of the component making up the content of the bottom sheet. */\\n    instance: T;\\n    /**\\n     * Instance of the component into which the bottom sheet content is projected.\\n     * @docs-private\\n     */\\n    containerInstance: MatBottomSheetContainer;\\n    /** Whether the user is allowed to close the bottom sheet. */\\n    disableClose: boolean | undefined;\\n    /** Subject for notifying the user that the bottom sheet has been dismissed. */\\n    private readonly _afterDismissed;\\n    /** Subject for notifying the user that the bottom sheet has opened and appeared. */\\n    private readonly _afterOpened;\\n    /** Result to be passed down to the `afterDismissed` stream. */\\n    private _result;\\n    /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\\n    private _closeFallbackTimeout;\\n    constructor(containerInstance: MatBottomSheetContainer, _overlayRef: OverlayRef, _location?: Location);\\n    /**\\n     * Dismisses the bottom sheet.\\n     * @param result Data to be passed back to the bottom sheet opener.\\n     */\\n    dismiss(result?: R): void;\\n    /** Gets an observable that is notified when the bottom sheet is finished closing. */\\n    afterDismissed(): Observable<R | undefined>;\\n    /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\\n    afterOpened(): Observable<void>;\\n    /**\\n     * Gets an observable that emits when the overlay's backdrop has been clicked.\\n     */\\n    backdropClick(): Observable<MouseEvent>;\\n    /**\\n     * Gets an observable that emits when keydown events are targeted on the overlay.\\n     */\\n    keydownEvents(): Observable<KeyboardEvent>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/bottom-sheet.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Overlay } from '@angular/cdk/overlay';\\nimport { ComponentType } from '@angular/cdk/portal';\\nimport { Injector, TemplateRef, InjectionToken, OnDestroy } from '@angular/core';\\nimport { Location } from '@angular/common';\\nimport { MatBottomSheetConfig } from './bottom-sheet-config';\\nimport { MatBottomSheetRef } from './bottom-sheet-ref';\\n/** Injection token that can be used to specify default bottom sheet options. */\\nexport declare const MAT_BOTTOM_SHEET_DEFAULT_OPTIONS: InjectionToken<MatBottomSheetConfig<any>>;\\n/**\\n * Service to trigger Material Design bottom sheets.\\n */\\nexport declare class MatBottomSheet implements OnDestroy {\\n    private _overlay;\\n    private _injector;\\n    private _parentBottomSheet;\\n    private _location?;\\n    private _defaultOptions?;\\n    private _bottomSheetRefAtThisLevel;\\n    /** Reference to the currently opened bottom sheet. */\\n    _openedBottomSheetRef: MatBottomSheetRef<any> | null;\\n    constructor(_overlay: Overlay, _injector: Injector, _parentBottomSheet: MatBottomSheet, _location?: Location | undefined, _defaultOptions?: MatBottomSheetConfig<any> | undefined);\\n    open<T, D = any, R = any>(component: ComponentType<T>, config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\\n    open<T, D = any, R = any>(template: TemplateRef<T>, config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\\n    /**\\n     * Dismisses the currently-visible bottom sheet.\\n     */\\n    dismiss(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Attaches the bottom sheet container component to the overlay.\\n     */\\n    private _attachContainer;\\n    /**\\n     * Creates a new overlay and places it in the correct location.\\n     * @param config The user-specified bottom sheet config.\\n     */\\n    private _createOverlay;\\n    /**\\n     * Creates an injector to be used inside of a bottom sheet component.\\n     * @param config Config that was used to create the bottom sheet.\\n     * @param bottomSheetRef Reference to the bottom sheet.\\n     */\\n    private _createInjector;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/index.d.ts\",\n      \"node_modules/@angular/material/bottom-sheet/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/bottom-sheet/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './bottom-sheet-module';\\nexport * from './bottom-sheet';\\nexport * from './bottom-sheet-config';\\nexport * from './bottom-sheet-container';\\nexport * from './bottom-sheet-animations';\\nexport * from './bottom-sheet-ref';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/button-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './button';\\nimport * as ɵngcc2 from '@angular/common';\\nimport * as ɵngcc3 from '@angular/material/core';\\nexport declare class MatButtonModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatButtonModule, [typeof ɵngcc1.MatButton, typeof ɵngcc1.MatAnchor], [typeof ɵngcc2.CommonModule, typeof ɵngcc3.MatRippleModule, typeof ɵngcc3.MatCommonModule], [typeof ɵngcc1.MatButton, typeof ɵngcc1.MatAnchor, typeof ɵngcc3.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatButtonModule>;\\n}\\n\\n//# sourceMappingURL=button-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/button.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor, FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\\nimport { ElementRef, OnDestroy } from '@angular/core';\\nimport { CanColor, CanDisable, CanDisableRipple, CanColorCtor, CanDisableCtor, CanDisableRippleCtor, MatRipple } from '@angular/material/core';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatButtonBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatButtonMixinBase: CanDisableRippleCtor & CanDisableCtor & CanColorCtor & typeof MatButtonBase;\\n/**\\n * Material design button.\\n */\\nexport declare class MatButton extends _MatButtonMixinBase implements OnDestroy, CanDisable, CanColor, CanDisableRipple, FocusableOption {\\n    private _focusMonitor;\\n    _animationMode: string;\\n    /** Whether the button is round. */\\n    readonly isRoundButton: boolean;\\n    /** Whether the button is icon button. */\\n    readonly isIconButton: boolean;\\n    /** Reference to the MatRipple instance of the button. */\\n    ripple: MatRipple;\\n    constructor(elementRef: ElementRef, _focusMonitor: FocusMonitor, _animationMode: string);\\n    ngOnDestroy(): void;\\n    /** Focuses the button. */\\n    focus(origin?: FocusOrigin, options?: FocusOptions): void;\\n    _getHostElement(): any;\\n    _isRippleDisabled(): boolean;\\n    /** Gets whether the button has one of the given attributes. */\\n    _hasHostAttributes(...attributes: string[]): boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatButton>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatButton, \\\"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]\\\", [\\\"matButton\\\"], { 'disabled': \\\"disabled\\\", 'disableRipple': \\\"disableRipple\\\", 'color': \\\"color\\\" }, {}, never>;\\n}\\n/**\\n * Material design anchor button.\\n */\\nexport declare class MatAnchor extends MatButton {\\n    /** Tabindex of the button. */\\n    tabIndex: number;\\n    constructor(focusMonitor: FocusMonitor, elementRef: ElementRef, animationMode: string);\\n    _haltDisabledEvents(event: Event): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatAnchor>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatAnchor, \\\"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]\\\", [\\\"matButton\\\", \\\"matAnchor\\\"], { 'disabled': \\\"disabled\\\", 'disableRipple': \\\"disableRipple\\\", 'color': \\\"color\\\", 'tabIndex': \\\"tabIndex\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=button.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/index.d.ts\",\n      \"node_modules/@angular/material/button/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './button-module';\\nexport * from './button';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/testing/button-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface ButtonHarnessFilters extends BaseHarnessFilters {\\n    text?: string | RegExp;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/testing/button-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { ButtonHarnessFilters } from './button-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-button in tests.\\n * @dynamic\\n */\\nexport declare class MatButtonHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a button with specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a button whose host element matches the given selector.\\n     *   - `text` finds a button with specific text content.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: ButtonHarnessFilters): HarnessPredicate<MatButtonHarness>;\\n    /** Clicks the button. */\\n    click(): Promise<void>;\\n    /** Gets a boolean promise indicating if the button is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /** Gets a promise for the button's label text. */\\n    getText(): Promise<string>;\\n    /** Focuses the button and returns a void promise that indicates when the action is complete. */\\n    focus(): Promise<void>;\\n    /** Blurs the button and returns a void promise that indicates when the action is complete. */\\n    blur(): Promise<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/testing/index.d.ts\",\n      \"node_modules/@angular/material/button/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './button-harness';\\nexport * from './button-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button-toggle/button-toggle-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatButtonToggleModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button-toggle/button-toggle.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor } from '@angular/cdk/a11y';\\nimport { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList, InjectionToken } from '@angular/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { CanDisableRipple, CanDisableRippleCtor } from '@angular/material/core';\\n/** Acceptable types for a button toggle. */\\nexport declare type ToggleType = 'checkbox' | 'radio';\\n/** Possible appearance styles for the button toggle. */\\nexport declare type MatButtonToggleAppearance = 'legacy' | 'standard';\\n/**\\n * Represents the default options for the button toggle that can be configured\\n * using the `MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS` injection token.\\n */\\nexport interface MatButtonToggleDefaultOptions {\\n    appearance?: MatButtonToggleAppearance;\\n}\\n/**\\n * Injection token that can be used to configure the\\n * default options for all button toggles within an app.\\n */\\nexport declare const MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS: InjectionToken<MatButtonToggleDefaultOptions>;\\n/**\\n * Provider Expression that allows mat-button-toggle-group to register as a ControlValueAccessor.\\n * This allows it to support [(ngModel)].\\n * @docs-private\\n */\\nexport declare const MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any;\\n/**\\n * @deprecated Use `MatButtonToggleGroup` instead.\\n * @breaking-change 8.0.0\\n */\\nexport declare class MatButtonToggleGroupMultiple {\\n}\\n/** Change event object emitted by MatButtonToggle. */\\nexport declare class MatButtonToggleChange {\\n    /** The MatButtonToggle that emits the event. */\\n    source: MatButtonToggle;\\n    /** The value assigned to the MatButtonToggle. */\\n    value: any;\\n    constructor(\\n    /** The MatButtonToggle that emits the event. */\\n    source: MatButtonToggle, \\n    /** The value assigned to the MatButtonToggle. */\\n    value: any);\\n}\\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\\nexport declare class MatButtonToggleGroup implements ControlValueAccessor, OnInit, AfterContentInit {\\n    private _changeDetector;\\n    private _vertical;\\n    private _multiple;\\n    private _disabled;\\n    private _selectionModel;\\n    /**\\n     * Reference to the raw value that the consumer tried to assign. The real\\n     * value will exclude any values from this one that don't correspond to a\\n     * toggle. Useful for the cases where the value is assigned before the toggles\\n     * have been initialized or at the same that they're being swapped out.\\n     */\\n    private _rawValue;\\n    /**\\n     * The method to be called in order to update ngModel.\\n     * Now `ngModel` binding is not supported in multiple selection mode.\\n     */\\n    _controlValueAccessorChangeFn: (value: any) => void;\\n    /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\\n    _onTouched: () => any;\\n    /** Child button toggle buttons. */\\n    _buttonToggles: QueryList<MatButtonToggle>;\\n    /** The appearance for all the buttons in the group. */\\n    appearance: MatButtonToggleAppearance;\\n    /** `name` attribute for the underlying `input` element. */\\n    name: string;\\n    private _name;\\n    /** Whether the toggle group is vertical. */\\n    vertical: boolean;\\n    /** Value of the toggle group. */\\n    value: any;\\n    /**\\n     * Event that emits whenever the value of the group changes.\\n     * Used to facilitate two-way data binding.\\n     * @docs-private\\n     */\\n    readonly valueChange: EventEmitter<any>;\\n    /** Selected button toggles in the group. */\\n    readonly selected: MatButtonToggle | MatButtonToggle[];\\n    /** Whether multiple button toggles can be selected. */\\n    multiple: boolean;\\n    /** Whether multiple button toggle group is disabled. */\\n    disabled: boolean;\\n    /** Event emitted when the group's value changes. */\\n    readonly change: EventEmitter<MatButtonToggleChange>;\\n    constructor(_changeDetector: ChangeDetectorRef, defaultOptions?: MatButtonToggleDefaultOptions);\\n    ngOnInit(): void;\\n    ngAfterContentInit(): void;\\n    /**\\n     * Sets the model value. Implemented as part of ControlValueAccessor.\\n     * @param value Value to be set to the model.\\n     */\\n    writeValue(value: any): void;\\n    registerOnChange(fn: (value: any) => void): void;\\n    registerOnTouched(fn: any): void;\\n    setDisabledState(isDisabled: boolean): void;\\n    /** Dispatch change event with current selection and group value. */\\n    _emitChangeEvent(): void;\\n    /**\\n     * Syncs a button toggle's selected state with the model value.\\n     * @param toggle Toggle to be synced.\\n     * @param select Whether the toggle should be selected.\\n     * @param isUserInput Whether the change was a result of a user interaction.\\n     * @param deferEvents Whether to defer emitting the change events.\\n     */\\n    _syncButtonToggle(toggle: MatButtonToggle, select: boolean, isUserInput?: boolean, deferEvents?: boolean): void;\\n    /** Checks whether a button toggle is selected. */\\n    _isSelected(toggle: MatButtonToggle): boolean;\\n    /** Determines whether a button toggle should be checked on init. */\\n    _isPrechecked(toggle: MatButtonToggle): boolean;\\n    /** Updates the selection state of the toggles in the group based on a value. */\\n    private _setSelectionByValue;\\n    /** Clears the selected toggles. */\\n    private _clearSelection;\\n    /** Selects a value if there's a toggle that corresponds to it. */\\n    private _selectValue;\\n    /** Syncs up the group's value with the model and emits the change event. */\\n    private _updateModelValue;\\n}\\n/** @docs-private */\\ndeclare class MatButtonToggleBase {\\n}\\ndeclare const _MatButtonToggleMixinBase: CanDisableRippleCtor & typeof MatButtonToggleBase;\\n/** Single button inside of a toggle group. */\\nexport declare class MatButtonToggle extends _MatButtonToggleMixinBase implements OnInit, CanDisableRipple, OnDestroy {\\n    private _changeDetectorRef;\\n    private _elementRef;\\n    private _focusMonitor;\\n    private _isSingleSelector;\\n    private _checked;\\n    /**\\n     * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\\n     * take precedence so this may be omitted.\\n     */\\n    ariaLabel: string;\\n    /**\\n     * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\\n     */\\n    ariaLabelledby: string | null;\\n    /** Type of the button toggle. Either 'radio' or 'checkbox'. */\\n    _type: ToggleType;\\n    _buttonElement: ElementRef<HTMLButtonElement>;\\n    /** The parent button toggle group (exclusive selection). Optional. */\\n    buttonToggleGroup: MatButtonToggleGroup;\\n    /** Unique ID for the underlying `button` element. */\\n    readonly buttonId: string;\\n    /** The unique ID for this button toggle. */\\n    id: string;\\n    /** HTML's 'name' attribute used to group radios for unique selection. */\\n    name: string;\\n    /** MatButtonToggleGroup reads this to assign its own value. */\\n    value: any;\\n    /** Tabindex for the toggle. */\\n    tabIndex: number | null;\\n    /** The appearance style of the button. */\\n    appearance: MatButtonToggleAppearance;\\n    private _appearance;\\n    /** Whether the button is checked. */\\n    checked: boolean;\\n    /** Whether the button is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** Event emitted when the group value changes. */\\n    readonly change: EventEmitter<MatButtonToggleChange>;\\n    constructor(toggleGroup: MatButtonToggleGroup, _changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>, _focusMonitor: FocusMonitor, defaultTabIndex: string, defaultOptions?: MatButtonToggleDefaultOptions);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /** Focuses the button. */\\n    focus(options?: FocusOptions): void;\\n    /** Checks the button toggle due to an interaction with the underlying native button. */\\n    _onButtonClick(): void;\\n    /**\\n     * Marks the button toggle as needing checking for change detection.\\n     * This method is exposed because the parent button toggle group will directly\\n     * update bound properties of the radio button.\\n     */\\n    _markForCheck(): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button-toggle/index.d.ts\",\n      \"node_modules/@angular/material/button-toggle/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/button-toggle/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './button-toggle';\\nexport * from './button-toggle-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/card/card-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './card';\\nimport * as ɵngcc2 from '@angular/material/core';\\nexport declare class MatCardModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatCardModule, [typeof ɵngcc1.MatCard, typeof ɵngcc1.MatCardHeader, typeof ɵngcc1.MatCardTitleGroup, typeof ɵngcc1.MatCardContent, typeof ɵngcc1.MatCardTitle, typeof ɵngcc1.MatCardSubtitle, typeof ɵngcc1.MatCardActions, typeof ɵngcc1.MatCardFooter, typeof ɵngcc1.MatCardSmImage, typeof ɵngcc1.MatCardMdImage, typeof ɵngcc1.MatCardLgImage, typeof ɵngcc1.MatCardImage, typeof ɵngcc1.MatCardXlImage, typeof ɵngcc1.MatCardAvatar], [typeof ɵngcc2.MatCommonModule], [typeof ɵngcc1.MatCard, typeof ɵngcc1.MatCardHeader, typeof ɵngcc1.MatCardTitleGroup, typeof ɵngcc1.MatCardContent, typeof ɵngcc1.MatCardTitle, typeof ɵngcc1.MatCardSubtitle, typeof ɵngcc1.MatCardActions, typeof ɵngcc1.MatCardFooter, typeof ɵngcc1.MatCardSmImage, typeof ɵngcc1.MatCardMdImage, typeof ɵngcc1.MatCardLgImage, typeof ɵngcc1.MatCardImage, typeof ɵngcc1.MatCardXlImage, typeof ɵngcc1.MatCardAvatar, typeof ɵngcc2.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatCardModule>;\\n}\\n\\n//# sourceMappingURL=card-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/card/card.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Content of a card, needed as it's used as a selector in the API.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatCardContent {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardContent>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardContent, \\\"mat-card-content\\\", never, {}, {}, never>;\\n}\\n/**\\n * Title of a card, needed as it's used as a selector in the API.\\n * @docs-private\\n */\\nexport declare class MatCardTitle {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardTitle>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardTitle, \\\"mat-card-title, [mat-card-title], [matCardTitle]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Sub-title of a card, needed as it's used as a selector in the API.\\n * @docs-private\\n */\\nexport declare class MatCardSubtitle {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardSubtitle>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardSubtitle, \\\"mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Action section of a card, needed as it's used as a selector in the API.\\n * @docs-private\\n */\\nexport declare class MatCardActions {\\n    /** Position of the actions inside the card. */\\n    align: 'start' | 'end';\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardActions>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardActions, \\\"mat-card-actions\\\", [\\\"matCardActions\\\"], { 'align': \\\"align\\\" }, {}, never>;\\n}\\n/**\\n * Footer of a card, needed as it's used as a selector in the API.\\n * @docs-private\\n */\\nexport declare class MatCardFooter {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardFooter>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardFooter, \\\"mat-card-footer\\\", never, {}, {}, never>;\\n}\\n/**\\n * Image used in a card, needed to add the mat- CSS styling.\\n * @docs-private\\n */\\nexport declare class MatCardImage {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardImage>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardImage, \\\"[mat-card-image], [matCardImage]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Image used in a card, needed to add the mat- CSS styling.\\n * @docs-private\\n */\\nexport declare class MatCardSmImage {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardSmImage>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardSmImage, \\\"[mat-card-sm-image], [matCardImageSmall]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Image used in a card, needed to add the mat- CSS styling.\\n * @docs-private\\n */\\nexport declare class MatCardMdImage {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardMdImage>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardMdImage, \\\"[mat-card-md-image], [matCardImageMedium]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Image used in a card, needed to add the mat- CSS styling.\\n * @docs-private\\n */\\nexport declare class MatCardLgImage {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardLgImage>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardLgImage, \\\"[mat-card-lg-image], [matCardImageLarge]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Large image used in a card, needed to add the mat- CSS styling.\\n * @docs-private\\n */\\nexport declare class MatCardXlImage {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardXlImage>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardXlImage, \\\"[mat-card-xl-image], [matCardImageXLarge]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Avatar image used in a card, needed to add the mat- CSS styling.\\n * @docs-private\\n */\\nexport declare class MatCardAvatar {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardAvatar>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCardAvatar, \\\"[mat-card-avatar], [matCardAvatar]\\\", never, {}, {}, never>;\\n}\\n/**\\n * A basic content container component that adds the styles of a Material design card.\\n *\\n * While this component can be used alone, it also provides a number\\n * of preset styles for common card sections, including:\\n * - mat-card-title\\n * - mat-card-subtitle\\n * - mat-card-content\\n * - mat-card-actions\\n * - mat-card-footer\\n */\\nexport declare class MatCard {\\n    _animationMode?: string | undefined;\\n    constructor(_animationMode?: string | undefined);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCard>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCard, \\\"mat-card\\\", [\\\"matCard\\\"], {}, {}, never>;\\n}\\n/**\\n * Component intended to be used within the `<mat-card>` component. It adds styles for a\\n * preset header section (i.e. a title, subtitle, and avatar layout).\\n * @docs-private\\n */\\nexport declare class MatCardHeader {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardHeader>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCardHeader, \\\"mat-card-header\\\", never, {}, {}, never>;\\n}\\n/**\\n * Component intended to be used within the `<mat-card>` component. It adds styles for a preset\\n * layout that groups an image with a title section.\\n * @docs-private\\n */\\nexport declare class MatCardTitleGroup {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCardTitleGroup>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCardTitleGroup, \\\"mat-card-title-group\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=card.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/card/index.d.ts\",\n      \"node_modules/@angular/material/card/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/card/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './card';\\nexport * from './card-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/checkbox-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/**\\n * Checkbox click action when user click on input element.\\n * noop: Do not toggle checked or indeterminate.\\n * check: Only toggle checked status, ignore indeterminate.\\n * check-indeterminate: Toggle checked status, set indeterminate to false. Default behavior.\\n * undefined: Same as `check-indeterminate`.\\n */\\nexport declare type MatCheckboxClickAction = 'noop' | 'check' | 'check-indeterminate' | undefined;\\n/**\\n * Injection token that can be used to specify the checkbox click behavior.\\n */\\nexport declare const MAT_CHECKBOX_CLICK_ACTION: InjectionToken<MatCheckboxClickAction>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/checkbox-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** This module is used by both original and MDC-based checkbox implementations. */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './checkbox-required-validator';\\nimport * as ɵngcc2 from './checkbox';\\nimport * as ɵngcc3 from '@angular/common';\\nimport * as ɵngcc4 from '@angular/material/core';\\nimport * as ɵngcc5 from '@angular/cdk/observers';\\nexport declare class _MatCheckboxRequiredValidatorModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<_MatCheckboxRequiredValidatorModule, [typeof ɵngcc1.MatCheckboxRequiredValidator], never, [typeof ɵngcc1.MatCheckboxRequiredValidator]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<_MatCheckboxRequiredValidatorModule>;\\n}\\nexport declare class MatCheckboxModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatCheckboxModule, [typeof ɵngcc2.MatCheckbox], [typeof ɵngcc3.CommonModule, typeof ɵngcc4.MatRippleModule, typeof ɵngcc4.MatCommonModule, typeof ɵngcc5.ObserversModule, typeof _MatCheckboxRequiredValidatorModule], [typeof ɵngcc2.MatCheckbox, typeof ɵngcc4.MatCommonModule, typeof _MatCheckboxRequiredValidatorModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatCheckboxModule>;\\n}\\n\\n//# sourceMappingURL=checkbox-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/checkbox-required-validator.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Provider } from '@angular/core';\\nimport { CheckboxRequiredValidator } from '@angular/forms';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_CHECKBOX_REQUIRED_VALIDATOR: Provider;\\n/**\\n * Validator for Material checkbox's required attribute in template-driven checkbox.\\n * Current CheckboxRequiredValidator only work with `input type=checkbox` and does not\\n * work with `mat-checkbox`.\\n */\\nexport declare class MatCheckboxRequiredValidator extends CheckboxRequiredValidator {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCheckboxRequiredValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCheckboxRequiredValidator, \\\"mat-checkbox[required][formControlName],             mat-checkbox[required][formControl], mat-checkbox[required][ngModel]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=checkbox-required-validator.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/checkbox.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor, FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\\nimport { ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnDestroy, AfterViewChecked } from '@angular/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { CanColor, CanColorCtor, CanDisable, CanDisableCtor, CanDisableRipple, CanDisableRippleCtor, HasTabIndex, HasTabIndexCtor, MatRipple } from '@angular/material/core';\\nimport { MatCheckboxClickAction } from './checkbox-config';\\n/**\\n * Provider Expression that allows mat-checkbox to register as a ControlValueAccessor.\\n * This allows it to support [(ngModel)].\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR: any;\\n/**\\n * Represents the different states that require custom transitions between them.\\n * @docs-private\\n */\\nexport declare enum TransitionCheckState {\\n    /** The initial state of the component before any user interaction. */\\n    Init = 0,\\n    /** The state representing the component when it's becoming checked. */\\n    Checked = 1,\\n    /** The state representing the component when it's becoming unchecked. */\\n    Unchecked = 2,\\n    /** The state representing the component when it's becoming indeterminate. */\\n    Indeterminate = 3\\n}\\n/** Change event object emitted by MatCheckbox. */\\nexport declare class MatCheckboxChange {\\n    /** The source MatCheckbox of the event. */\\n    source: MatCheckbox;\\n    /** The new `checked` value of the checkbox. */\\n    checked: boolean;\\n}\\n/** @docs-private */\\ndeclare class MatCheckboxBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatCheckboxMixinBase: HasTabIndexCtor & CanColorCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatCheckboxBase;\\n/**\\n * A material design checkbox component. Supports all of the functionality of an HTML5 checkbox,\\n * and exposes a similar API. A MatCheckbox can be either checked, unchecked, indeterminate, or\\n * disabled. Note that all additional accessibility attributes are taken care of by the component,\\n * so there is no need to provide them yourself. However, if you want to omit a label and still\\n * have the checkbox be accessible, you may supply an [aria-label] input.\\n * See: https://material.io/design/components/selection-controls.html\\n */\\nexport declare class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAccessor, AfterViewChecked, OnDestroy, CanColor, CanDisable, HasTabIndex, CanDisableRipple, FocusableOption {\\n    private _changeDetectorRef;\\n    private _focusMonitor;\\n    private _ngZone;\\n    private _clickAction;\\n    _animationMode?: string | undefined;\\n    /**\\n     * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\\n     * take precedence so this may be omitted.\\n     */\\n    ariaLabel: string;\\n    /**\\n     * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\\n     */\\n    ariaLabelledby: string | null;\\n    private _uniqueId;\\n    /** A unique id for the checkbox input. If none is supplied, it will be auto-generated. */\\n    id: string;\\n    /** Returns the unique id for the visual hidden input. */\\n    readonly inputId: string;\\n    /** Whether the checkbox is required. */\\n    required: boolean;\\n    private _required;\\n    /** Whether the label should appear after or before the checkbox. Defaults to 'after' */\\n    labelPosition: 'before' | 'after';\\n    /** Name value will be applied to the input element if present */\\n    name: string | null;\\n    /** Event emitted when the checkbox's `checked` value changes. */\\n    readonly change: EventEmitter<MatCheckboxChange>;\\n    /** Event emitted when the checkbox's `indeterminate` value changes. */\\n    readonly indeterminateChange: EventEmitter<boolean>;\\n    /** The value attribute of the native input element */\\n    value: string;\\n    /** The native `<input type=\\\"checkbox\\\">` element */\\n    _inputElement: ElementRef<HTMLInputElement>;\\n    /** Reference to the ripple instance of the checkbox. */\\n    ripple: MatRipple;\\n    /**\\n     * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\\n     * @docs-private\\n     */\\n    _onTouched: () => any;\\n    private _currentAnimationClass;\\n    private _currentCheckState;\\n    private _controlValueAccessorChangeFn;\\n    constructor(elementRef: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, _focusMonitor: FocusMonitor, _ngZone: NgZone, tabIndex: string, _clickAction: MatCheckboxClickAction, _animationMode?: string | undefined);\\n    ngAfterViewChecked(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Whether the checkbox is checked.\\n     */\\n    checked: boolean;\\n    private _checked;\\n    /**\\n     * Whether the checkbox is disabled. This fully overrides the implementation provided by\\n     * mixinDisabled, but the mixin is still required because mixinTabIndex requires it.\\n     */\\n    disabled: any;\\n    private _disabled;\\n    /**\\n     * Whether the checkbox is indeterminate. This is also known as \\\"mixed\\\" mode and can be used to\\n     * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\\n     * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\\n     * set to false.\\n     */\\n    indeterminate: boolean;\\n    private _indeterminate;\\n    _isRippleDisabled(): any;\\n    /** Method being called whenever the label text changes. */\\n    _onLabelTextChange(): void;\\n    writeValue(value: any): void;\\n    registerOnChange(fn: (value: any) => void): void;\\n    registerOnTouched(fn: any): void;\\n    setDisabledState(isDisabled: boolean): void;\\n    _getAriaChecked(): 'true' | 'false' | 'mixed';\\n    private _transitionCheckState;\\n    private _emitChangeEvent;\\n    /** Toggles the `checked` state of the checkbox. */\\n    toggle(): void;\\n    /**\\n     * Event handler for checkbox input element.\\n     * Toggles checked state if element is not disabled.\\n     * Do not toggle on (change) event since IE doesn't fire change event when\\n     *   indeterminate checkbox is clicked.\\n     * @param event\\n     */\\n    _onInputClick(event: Event): void;\\n    /** Focuses the checkbox. */\\n    focus(origin?: FocusOrigin, options?: FocusOptions): void;\\n    _onInteractionEvent(event: Event): void;\\n    private _getAnimationClassForCheckStateTransition;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCheckbox>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCheckbox, \\\"mat-checkbox\\\", [\\\"matCheckbox\\\"], { 'disableRipple': \\\"disableRipple\\\", 'color': \\\"color\\\", 'tabIndex': \\\"tabIndex\\\", 'ariaLabel': \\\"aria-label\\\", 'ariaLabelledby': \\\"aria-labelledby\\\", 'id': \\\"id\\\", 'labelPosition': \\\"labelPosition\\\", 'name': \\\"name\\\", 'required': \\\"required\\\", 'checked': \\\"checked\\\", 'disabled': \\\"disabled\\\", 'indeterminate': \\\"indeterminate\\\", 'value': \\\"value\\\" }, { 'change': \\\"change\\\", 'indeterminateChange': \\\"indeterminateChange\\\" }, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=checkbox.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/index.d.ts\",\n      \"node_modules/@angular/material/checkbox/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './checkbox';\\nexport * from './checkbox-config';\\nexport * from './checkbox-module';\\nexport * from './checkbox-required-validator';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/testing/checkbox-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface CheckboxHarnessFilters extends BaseHarnessFilters {\\n    label?: string | RegExp;\\n    name?: string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/testing/checkbox-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { CheckboxHarnessFilters } from './checkbox-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-checkbox in tests.\\n * @dynamic\\n */\\nexport declare class MatCheckboxHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a checkbox with specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a checkbox whose host element matches the given selector.\\n     *   - `label` finds a checkbox with specific label text.\\n     *   - `name` finds a checkbox with specific name.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: CheckboxHarnessFilters): HarnessPredicate<MatCheckboxHarness>;\\n    private _label;\\n    private _input;\\n    private _inputContainer;\\n    /** Gets a boolean promise indicating if the checkbox is checked. */\\n    isChecked(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the checkbox is in an indeterminate state. */\\n    isIndeterminate(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the checkbox is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the checkbox is required. */\\n    isRequired(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the checkbox is valid. */\\n    isValid(): Promise<boolean>;\\n    /** Gets a promise for the checkbox's name. */\\n    getName(): Promise<string | null>;\\n    /** Gets a promise for the checkbox's value. */\\n    getValue(): Promise<string | null>;\\n    /** Gets a promise for the checkbox's aria-label. */\\n    getAriaLabel(): Promise<string | null>;\\n    /** Gets a promise for the checkbox's aria-labelledby. */\\n    getAriaLabelledby(): Promise<string | null>;\\n    /** Gets a promise for the checkbox's label text. */\\n    getLabelText(): Promise<string>;\\n    /** Focuses the checkbox and returns a void promise that indicates when the action is complete. */\\n    focus(): Promise<void>;\\n    /** Blurs the checkbox and returns a void promise that indicates when the action is complete. */\\n    blur(): Promise<void>;\\n    /**\\n     * Toggle the checked state of the checkbox and returns a void promise that indicates when the\\n     * action is complete.\\n     *\\n     * Note: This attempts to toggle the checkbox as a user would, by clicking it. Therefore if you\\n     * are using `MAT_CHECKBOX_CLICK_ACTION` to change the behavior on click, calling this method\\n     * might not have the expected result.\\n     */\\n    toggle(): Promise<void>;\\n    /**\\n     * Puts the checkbox in a checked state by toggling it if it is currently unchecked, or doing\\n     * nothing if it is already checked. Returns a void promise that indicates when the action is\\n     * complete.\\n     *\\n     * Note: This attempts to check the checkbox as a user would, by clicking it. Therefore if you\\n     * are using `MAT_CHECKBOX_CLICK_ACTION` to change the behavior on click, calling this method\\n     * might not have the expected result.\\n     */\\n    check(): Promise<void>;\\n    /**\\n     * Puts the checkbox in an unchecked state by toggling it if it is currently checked, or doing\\n     * nothing if it is already unchecked. Returns a void promise that indicates when the action is\\n     * complete.\\n     *\\n     * Note: This attempts to uncheck the checkbox as a user would, by clicking it. Therefore if you\\n     * are using `MAT_CHECKBOX_CLICK_ACTION` to change the behavior on click, calling this method\\n     * might not have the expected result.\\n     */\\n    uncheck(): Promise<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/testing/index.d.ts\",\n      \"node_modules/@angular/material/checkbox/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/checkbox/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './checkbox-harness';\\nexport * from './checkbox-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/chip-default-options.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/** Default options, for the chips module, that can be overridden. */\\nexport interface MatChipsDefaultOptions {\\n    /** The list of key codes that will trigger a chipEnd event. */\\n    separatorKeyCodes: number[] | Set<number>;\\n}\\n/** Injection token to be used to override the default options for the chips module. */\\nexport declare const MAT_CHIPS_DEFAULT_OPTIONS: InjectionToken<MatChipsDefaultOptions>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/chip-input.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, EventEmitter, OnChanges } from '@angular/core';\\nimport { MatChipsDefaultOptions } from './chip-default-options';\\nimport { MatChipList } from './chip-list';\\nimport { MatChipTextControl } from './chip-text-control';\\n/** Represents an input event on a `matChipInput`. */\\nexport interface MatChipInputEvent {\\n    /** The native `<input>` element that the event is being fired for. */\\n    input: HTMLInputElement;\\n    /** The value of the input. */\\n    value: string;\\n}\\n/**\\n * Directive that adds chip-specific behaviors to an input element inside `<mat-form-field>`.\\n * May be placed inside or outside of an `<mat-chip-list>`.\\n */\\nexport declare class MatChipInput implements MatChipTextControl, OnChanges {\\n    protected _elementRef: ElementRef<HTMLInputElement>;\\n    private _defaultOptions;\\n    /** Whether the control is focused. */\\n    focused: boolean;\\n    _chipList: MatChipList;\\n    /** Register input for chip list */\\n    chipList: MatChipList;\\n    /**\\n     * Whether or not the chipEnd event will be emitted when the input is blurred.\\n     */\\n    addOnBlur: boolean;\\n    _addOnBlur: boolean;\\n    /**\\n     * The list of key codes that will trigger a chipEnd event.\\n     *\\n     * Defaults to `[ENTER]`.\\n     */\\n    separatorKeyCodes: number[] | Set<number>;\\n    /** Emitted when a chip is to be added. */\\n    chipEnd: EventEmitter<MatChipInputEvent>;\\n    /** The input's placeholder text. */\\n    placeholder: string;\\n    /** Unique id for the input. */\\n    id: string;\\n    /** Whether the input is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** Whether the input is empty. */\\n    readonly empty: boolean;\\n    /** The native input element to which this directive is attached. */\\n    protected _inputElement: HTMLInputElement;\\n    constructor(_elementRef: ElementRef<HTMLInputElement>, _defaultOptions: MatChipsDefaultOptions);\\n    ngOnChanges(): void;\\n    /** Utility method to make host definition/tests more clear. */\\n    _keydown(event?: KeyboardEvent): void;\\n    /** Checks to see if the blur should emit the (chipEnd) event. */\\n    _blur(): void;\\n    _focus(): void;\\n    /** Checks to see if the (chipEnd) event needs to be emitted. */\\n    _emitChipEnd(event?: KeyboardEvent): void;\\n    _onInput(): void;\\n    /** Focuses the input. */\\n    focus(options?: FocusOptions): void;\\n    /** Checks whether a keycode is one of the configured separators. */\\n    private _isSeparatorKey;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/chip-list.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusKeyManager } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { SelectionModel } from '@angular/cdk/collections';\\nimport { AfterContentInit, ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList } from '@angular/core';\\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\\nimport { CanUpdateErrorState, CanUpdateErrorStateCtor, ErrorStateMatcher } from '@angular/material/core';\\nimport { MatFormFieldControl } from '@angular/material/form-field';\\nimport { Observable } from 'rxjs';\\nimport { MatChip, MatChipEvent, MatChipSelectionChange } from './chip';\\nimport { MatChipTextControl } from './chip-text-control';\\n/** @docs-private */\\ndeclare class MatChipListBase {\\n    _defaultErrorStateMatcher: ErrorStateMatcher;\\n    _parentForm: NgForm;\\n    _parentFormGroup: FormGroupDirective;\\n    /** @docs-private */\\n    ngControl: NgControl;\\n    constructor(_defaultErrorStateMatcher: ErrorStateMatcher, _parentForm: NgForm, _parentFormGroup: FormGroupDirective, \\n    /** @docs-private */\\n    ngControl: NgControl);\\n}\\ndeclare const _MatChipListMixinBase: CanUpdateErrorStateCtor & typeof MatChipListBase;\\n/** Change event object that is emitted when the chip list value has changed. */\\nexport declare class MatChipListChange {\\n    /** Chip list that emitted the event. */\\n    source: MatChipList;\\n    /** Value of the chip list when the event was emitted. */\\n    value: any;\\n    constructor(\\n    /** Chip list that emitted the event. */\\n    source: MatChipList, \\n    /** Value of the chip list when the event was emitted. */\\n    value: any);\\n}\\n/**\\n * A material design chips component (named ChipList for its similarity to the List component).\\n */\\nexport declare class MatChipList extends _MatChipListMixinBase implements MatFormFieldControl<any>, ControlValueAccessor, AfterContentInit, DoCheck, OnInit, OnDestroy, CanUpdateErrorState {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    private _changeDetectorRef;\\n    private _dir;\\n    /** @docs-private */\\n    ngControl: NgControl;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly controlType: string;\\n    /**\\n     * When a chip is destroyed, we store the index of the destroyed chip until the chips\\n     * query list notifies about the update. This is necessary because we cannot determine an\\n     * appropriate chip that should receive focus until the array of chips updated completely.\\n     */\\n    private _lastDestroyedChipIndex;\\n    /** Subject that emits when the component has been destroyed. */\\n    private _destroyed;\\n    /** Subscription to focus changes in the chips. */\\n    private _chipFocusSubscription;\\n    /** Subscription to blur changes in the chips. */\\n    private _chipBlurSubscription;\\n    /** Subscription to selection changes in chips. */\\n    private _chipSelectionSubscription;\\n    /** Subscription to remove changes in chips. */\\n    private _chipRemoveSubscription;\\n    /** The chip input to add more chips */\\n    protected _chipInput: MatChipTextControl;\\n    /** Uid of the chip list */\\n    _uid: string;\\n    /** The aria-describedby attribute on the chip list for improved a11y. */\\n    _ariaDescribedby: string;\\n    /** Tab index for the chip list. */\\n    _tabIndex: number;\\n    /**\\n     * User defined tab index.\\n     * When it is not null, use user defined tab index. Otherwise use _tabIndex\\n     */\\n    _userTabIndex: number | null;\\n    /** The FocusKeyManager which handles focus. */\\n    _keyManager: FocusKeyManager<MatChip>;\\n    /** Function when touched */\\n    _onTouched: () => void;\\n    /** Function when changed */\\n    _onChange: (value: any) => void;\\n    _selectionModel: SelectionModel<MatChip>;\\n    /** The array of selected chips inside chip list. */\\n    readonly selected: MatChip[] | MatChip;\\n    /** The ARIA role applied to the chip list. */\\n    readonly role: string | null;\\n    /** An object used to control when error messages are shown. */\\n    errorStateMatcher: ErrorStateMatcher;\\n    /** Whether the user should be allowed to select multiple chips. */\\n    multiple: boolean;\\n    private _multiple;\\n    /**\\n     * A function to compare the option values with the selected values. The first argument\\n     * is a value from an option. The second is a value from the selection. A boolean\\n     * should be returned.\\n     */\\n    compareWith: (o1: any, o2: any) => boolean;\\n    private _compareWith;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    value: any;\\n    protected _value: any;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly id: string;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    required: boolean;\\n    protected _required: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    placeholder: string;\\n    protected _placeholder: string;\\n    /** Whether any chips or the matChipInput inside of this chip-list has focus. */\\n    readonly focused: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly empty: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly shouldLabelFloat: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    disabled: boolean;\\n    protected _disabled: boolean;\\n    /** Orientation of the chip list. */\\n    ariaOrientation: 'horizontal' | 'vertical';\\n    /**\\n     * Whether or not this chip list is selectable. When a chip list is not selectable,\\n     * the selected states for all the chips inside the chip list are always ignored.\\n     */\\n    selectable: boolean;\\n    protected _selectable: boolean;\\n    tabIndex: number;\\n    /** Combined stream of all of the child chips' selection change events. */\\n    readonly chipSelectionChanges: Observable<MatChipSelectionChange>;\\n    /** Combined stream of all of the child chips' focus change events. */\\n    readonly chipFocusChanges: Observable<MatChipEvent>;\\n    /** Combined stream of all of the child chips' blur change events. */\\n    readonly chipBlurChanges: Observable<MatChipEvent>;\\n    /** Combined stream of all of the child chips' remove change events. */\\n    readonly chipRemoveChanges: Observable<MatChipEvent>;\\n    /** Event emitted when the selected chip list value has been changed by the user. */\\n    readonly change: EventEmitter<MatChipListChange>;\\n    /**\\n     * Event that emits whenever the raw value of the chip-list changes. This is here primarily\\n     * to facilitate the two-way binding for the `value` input.\\n     * @docs-private\\n     */\\n    readonly valueChange: EventEmitter<any>;\\n    /** The chip components contained within this chip list. */\\n    chips: QueryList<MatChip>;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, _dir: Directionality, _parentForm: NgForm, _parentFormGroup: FormGroupDirective, _defaultErrorStateMatcher: ErrorStateMatcher, \\n    /** @docs-private */\\n    ngControl: NgControl);\\n    ngAfterContentInit(): void;\\n    ngOnInit(): void;\\n    ngDoCheck(): void;\\n    ngOnDestroy(): void;\\n    /** Associates an HTML input element with this chip list. */\\n    registerInput(inputElement: MatChipTextControl): void;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    setDescribedByIds(ids: string[]): void;\\n    writeValue(value: any): void;\\n    registerOnChange(fn: (value: any) => void): void;\\n    registerOnTouched(fn: () => void): void;\\n    setDisabledState(isDisabled: boolean): void;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    onContainerClick(event: MouseEvent): void;\\n    /**\\n     * Focuses the first non-disabled chip in this chip list, or the associated input when there\\n     * are no eligible chips.\\n     */\\n    focus(options?: FocusOptions): void;\\n    /** Attempt to focus an input if we have one. */\\n    _focusInput(options?: FocusOptions): void;\\n    /**\\n     * Pass events to the keyboard manager. Available here for tests.\\n     */\\n    _keydown(event: KeyboardEvent): void;\\n    /**\\n     * Check the tab index as you should not be allowed to focus an empty list.\\n     */\\n    protected _updateTabIndex(): void;\\n    /**\\n     * If the amount of chips changed, we need to update the\\n     * key manager state and focus the next closest chip.\\n     */\\n    protected _updateFocusForDestroyedChips(): void;\\n    /**\\n     * Utility to ensure all indexes are valid.\\n     *\\n     * @param index The index to be checked.\\n     * @returns True if the index is valid for our list of chips.\\n     */\\n    private _isValidIndex;\\n    private _isInputEmpty;\\n    _setSelectionByValue(value: any, isUserInput?: boolean): void;\\n    /**\\n     * Finds and selects the chip based on its value.\\n     * @returns Chip that has the corresponding value.\\n     */\\n    private _selectValue;\\n    private _initializeSelection;\\n    /**\\n     * Deselects every chip in the list.\\n     * @param skip Chip that should not be deselected.\\n     */\\n    private _clearSelection;\\n    /**\\n     * Sorts the model values, ensuring that they keep the same\\n     * order that they have in the panel.\\n     */\\n    private _sortValues;\\n    /** Emits change event to set the model value. */\\n    private _propagateChanges;\\n    /** When blurred, mark the field as touched when focus moved outside the chip list. */\\n    _blur(): void;\\n    /** Mark the field as touched */\\n    _markAsTouched(): void;\\n    /**\\n     * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\\n     * user to tab out of it. This prevents the list from capturing focus and redirecting\\n     * it back to the first chip, creating a focus trap, if it user tries to tab away.\\n     */\\n    _allowFocusEscape(): void;\\n    private _resetChips;\\n    private _dropSubscriptions;\\n    /** Listens to user-generated selection events on each chip. */\\n    private _listenToChipsSelection;\\n    /** Listens to user-generated selection events on each chip. */\\n    private _listenToChipsFocus;\\n    private _listenToChipsRemoved;\\n    /** Checks whether an event comes from inside a chip element. */\\n    private _originatesFromChip;\\n    /** Checks whether any of the chips is focused. */\\n    private _hasFocusedChip;\\n    /** Syncs the list's state with the individual chips. */\\n    private _syncChipsState;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/chip-text-control.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Interface for a text control that is used to drive interaction with a mat-chip-list. */\\nexport interface MatChipTextControl {\\n    /** Unique identifier for the text control. */\\n    id: string;\\n    /** The text control's placeholder text. */\\n    placeholder: string;\\n    /** Whether the text control has browser focus. */\\n    focused: boolean;\\n    /** Whether the text control is empty. */\\n    empty: boolean;\\n    /** Focuses the text control. */\\n    focus(options?: FocusOptions): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/chip.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusableOption } from '@angular/cdk/a11y';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ElementRef, EventEmitter, NgZone, OnDestroy, ChangeDetectorRef } from '@angular/core';\\nimport { CanColor, CanColorCtor, CanDisable, CanDisableCtor, CanDisableRipple, CanDisableRippleCtor, RippleConfig, RippleGlobalOptions, RippleTarget } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\n/** Represents an event fired on an individual `mat-chip`. */\\nexport interface MatChipEvent {\\n    /** The chip the event was fired on. */\\n    chip: MatChip;\\n}\\n/** Event object emitted by MatChip when selected or deselected. */\\nexport declare class MatChipSelectionChange {\\n    /** Reference to the chip that emitted the event. */\\n    source: MatChip;\\n    /** Whether the chip that emitted the event is selected. */\\n    selected: boolean;\\n    /** Whether the selection change was a result of a user interaction. */\\n    isUserInput: boolean;\\n    constructor(\\n    /** Reference to the chip that emitted the event. */\\n    source: MatChip, \\n    /** Whether the chip that emitted the event is selected. */\\n    selected: boolean, \\n    /** Whether the selection change was a result of a user interaction. */\\n    isUserInput?: boolean);\\n}\\n/** @docs-private */\\ndeclare class MatChipBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatChipMixinBase: CanColorCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatChipBase;\\n/**\\n * Dummy directive to add CSS class to chip avatar.\\n * @docs-private\\n */\\nexport declare class MatChipAvatar {\\n}\\n/**\\n * Dummy directive to add CSS class to chip trailing icon.\\n * @docs-private\\n */\\nexport declare class MatChipTrailingIcon {\\n}\\n/**\\n * Material design styled Chip component. Used inside the MatChipList component.\\n */\\nexport declare class MatChip extends _MatChipMixinBase implements FocusableOption, OnDestroy, CanColor, CanDisable, CanDisableRipple, RippleTarget {\\n    _elementRef: ElementRef<HTMLElement>;\\n    private _ngZone;\\n    private _changeDetectorRef?;\\n    /** Reference to the RippleRenderer for the chip. */\\n    private _chipRipple;\\n    /**\\n     * Ripple configuration for ripples that are launched on pointer down. The ripple config\\n     * is set to the global ripple options since we don't have any configurable options for\\n     * the chip ripples.\\n     * @docs-private\\n     */\\n    rippleConfig: RippleConfig & RippleGlobalOptions;\\n    /**\\n     * Whether ripples are disabled on interaction\\n     * @docs-private\\n     */\\n    readonly rippleDisabled: boolean;\\n    /** Whether the chip has focus. */\\n    _hasFocus: boolean;\\n    /** Whether animations for the chip are enabled. */\\n    _animationsDisabled: boolean;\\n    /** Whether the chip list is selectable */\\n    chipListSelectable: boolean;\\n    /** Whether the chip list is in multi-selection mode. */\\n    _chipListMultiple: boolean;\\n    /** The chip avatar */\\n    avatar: MatChipAvatar;\\n    /** The chip's trailing icon. */\\n    trailingIcon: MatChipTrailingIcon;\\n    /** The chip's remove toggler. */\\n    removeIcon: MatChipRemove;\\n    /** Whether the chip is selected. */\\n    selected: boolean;\\n    protected _selected: boolean;\\n    /** The value of the chip. Defaults to the content inside `<mat-chip>` tags. */\\n    value: any;\\n    protected _value: any;\\n    /**\\n     * Whether or not the chip is selectable. When a chip is not selectable,\\n     * changes to its selected state are always ignored. By default a chip is\\n     * selectable, and it becomes non-selectable if its parent chip list is\\n     * not selectable.\\n     */\\n    selectable: boolean;\\n    protected _selectable: boolean;\\n    /**\\n     * Determines whether or not the chip displays the remove styling and emits (removed) events.\\n     */\\n    removable: boolean;\\n    protected _removable: boolean;\\n    /** Emits when the chip is focused. */\\n    readonly _onFocus: Subject<MatChipEvent>;\\n    /** Emits when the chip is blured. */\\n    readonly _onBlur: Subject<MatChipEvent>;\\n    /** Emitted when the chip is selected or deselected. */\\n    readonly selectionChange: EventEmitter<MatChipSelectionChange>;\\n    /** Emitted when the chip is destroyed. */\\n    readonly destroyed: EventEmitter<MatChipEvent>;\\n    /** Emitted when a chip is to be removed. */\\n    readonly removed: EventEmitter<MatChipEvent>;\\n    /** The ARIA selected applied to the chip. */\\n    readonly ariaSelected: string | null;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _ngZone: NgZone, platform: Platform, globalRippleOptions: RippleGlobalOptions | null, animationMode?: string, _changeDetectorRef?: ChangeDetectorRef | undefined);\\n    _addHostClassName(): void;\\n    ngOnDestroy(): void;\\n    /** Selects the chip. */\\n    select(): void;\\n    /** Deselects the chip. */\\n    deselect(): void;\\n    /** Select this chip and emit selected event */\\n    selectViaInteraction(): void;\\n    /** Toggles the current selected state of this chip. */\\n    toggleSelected(isUserInput?: boolean): boolean;\\n    /** Allows for programmatic focusing of the chip. */\\n    focus(): void;\\n    /**\\n     * Allows for programmatic removal of the chip. Called by the MatChipList when the DELETE or\\n     * BACKSPACE keys are pressed.\\n     *\\n     * Informs any listeners of the removal request. Does not remove the chip from the DOM.\\n     */\\n    remove(): void;\\n    /** Handles click events on the chip. */\\n    _handleClick(event: Event): void;\\n    /** Handle custom key presses. */\\n    _handleKeydown(event: KeyboardEvent): void;\\n    _blur(): void;\\n    private _dispatchSelectionChange;\\n    private _markForCheck;\\n}\\n/**\\n * Applies proper (click) support and adds styling for use with the Material Design \\\"cancel\\\" icon\\n * available at https://material.io/icons/#ic_cancel.\\n *\\n * Example:\\n *\\n *     `<mat-chip>\\n *       <mat-icon matChipRemove>cancel</mat-icon>\\n *     </mat-chip>`\\n *\\n * You *may* use a custom icon, but you may need to override the `mat-chip-remove` positioning\\n * styles to properly center the icon within the chip.\\n */\\nexport declare class MatChipRemove {\\n    protected _parentChip: MatChip;\\n    constructor(_parentChip: MatChip);\\n    /** Calls the parent chip's public `remove()` method if applicable. */\\n    _handleClick(event: Event): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/chips-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatChipsModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/index.d.ts\",\n      \"node_modules/@angular/material/chips/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/chips/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './chips-module';\\nexport * from './chip-list';\\nexport * from './chip';\\nexport * from './chip-input';\\nexport * from './chip-default-options';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/animation/animation.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare class AnimationCurves {\\n    static STANDARD_CURVE: string;\\n    static DECELERATION_CURVE: string;\\n    static ACCELERATION_CURVE: string;\\n    static SHARP_CURVE: string;\\n}\\n/** @docs-private */\\nexport declare class AnimationDurations {\\n    static COMPLEX: string;\\n    static ENTERING: string;\\n    static EXITING: string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/color.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Constructor } from './constructor';\\nimport { ElementRef } from '@angular/core';\\n/** @docs-private */\\nexport interface CanColor {\\n    /** Theme color palette for the component. */\\n    color: ThemePalette;\\n}\\n/** @docs-private */\\nexport declare type CanColorCtor = Constructor<CanColor>;\\n/** @docs-private */\\nexport interface HasElementRef {\\n    _elementRef: ElementRef;\\n}\\n/** Possible color palette values. */\\nexport declare type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\\n/** Mixin to augment a directive with a `color` property. */\\nexport declare function mixinColor<T extends Constructor<HasElementRef>>(base: T, defaultColor?: ThemePalette): CanColorCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/common-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '@angular/cdk/bidi';\\nexport declare function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks;\\n/** Injection token that configures whether the Material sanity checks are enabled. */\\nexport declare const MATERIAL_SANITY_CHECKS: InjectionToken<SanityChecks>;\\n/**\\n * Possible sanity checks that can be enabled. If set to\\n * true/false, all checks will be enabled/disabled.\\n */\\nexport declare type SanityChecks = boolean | GranularSanityChecks;\\n/** Object that can be used to configure the sanity checks granularly. */\\nexport interface GranularSanityChecks {\\n    doctype: boolean;\\n    theme: boolean;\\n    version: boolean;\\n    /**\\n     * @deprecated No longer being used.\\n     * @breaking-change 10.0.0\\n     */\\n    hammer: boolean;\\n}\\n/**\\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\\n * components. This includes Bidi, etc.\\n *\\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\\n */\\nexport declare class MatCommonModule {\\n    /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\\n    private _hasDoneGlobalChecks;\\n    /** Reference to the global `document` object. */\\n    private _document;\\n    /** Reference to the global 'window' object. */\\n    private _window;\\n    /** Configured sanity checks. */\\n    private _sanityChecks;\\n    constructor(sanityChecks: any);\\n    /** Whether any sanity checks are enabled. */\\n    private _checksAreEnabled;\\n    /** Whether the code is running in tests. */\\n    private _isTestEnv;\\n    private _checkDoctypeIsDefined;\\n    private _checkThemeIsPresent;\\n    /** Checks whether the material version matches the cdk version */\\n    private _checkCdkVersionMatch;\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatCommonModule, never, [typeof ɵngcc1.BidiModule], [typeof ɵngcc1.BidiModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatCommonModule>;\\n}\\n\\n//# sourceMappingURL=common-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/constructor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare type Constructor<T> = new (...args: any[]) => T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/disable-ripple.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Constructor } from './constructor';\\n/** @docs-private */\\nexport interface CanDisableRipple {\\n    /** Whether ripples are disabled. */\\n    disableRipple: boolean;\\n}\\n/** @docs-private */\\nexport declare type CanDisableRippleCtor = Constructor<CanDisableRipple>;\\n/** Mixin to augment a directive with a `disableRipple` property. */\\nexport declare function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/disabled.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Constructor } from './constructor';\\n/** @docs-private */\\nexport interface CanDisable {\\n    /** Whether the component is disabled. */\\n    disabled: boolean;\\n}\\n/** @docs-private */\\nexport declare type CanDisableCtor = Constructor<CanDisable>;\\n/** Mixin to augment a directive with a `disabled` property. */\\nexport declare function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/error-state.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\\nimport { Subject } from 'rxjs';\\nimport { ErrorStateMatcher } from '../error/error-options';\\nimport { Constructor } from './constructor';\\n/** @docs-private */\\nexport interface CanUpdateErrorState {\\n    updateErrorState(): void;\\n    readonly stateChanges: Subject<void>;\\n    errorState: boolean;\\n    errorStateMatcher: ErrorStateMatcher;\\n}\\n/** @docs-private */\\nexport declare type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState>;\\n/** @docs-private */\\nexport interface HasErrorState {\\n    _parentFormGroup: FormGroupDirective;\\n    _parentForm: NgForm;\\n    _defaultErrorStateMatcher: ErrorStateMatcher;\\n    ngControl: NgControl;\\n}\\n/**\\n * Mixin to augment a directive with updateErrorState method.\\n * For component with `errorState` and need to update `errorState`.\\n */\\nexport declare function mixinErrorState<T extends Constructor<HasErrorState>>(base: T): CanUpdateErrorStateCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/index.d.ts\",\n      \"node_modules/@angular/material/core/common-behaviors/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { MatCommonModule, MATERIAL_SANITY_CHECKS, SanityChecks, GranularSanityChecks, } from './common-module';\\nexport { CanDisable, CanDisableCtor, mixinDisabled } from './disabled';\\nexport { CanColor, CanColorCtor, mixinColor, ThemePalette } from './color';\\nexport { CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple } from './disable-ripple';\\nexport { HasTabIndex, HasTabIndexCtor, mixinTabIndex } from './tabindex';\\nexport { CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState } from './error-state';\\nexport { HasInitialized, HasInitializedCtor, mixinInitialized } from './initialized';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/initialized.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Observable } from 'rxjs';\\nimport { Constructor } from './constructor';\\n/**\\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\\n * value once markInitialized has been called, which should be done during the ngOnInit function.\\n * If the subscription is made after it has already been marked as initialized, then it will trigger\\n * an emit immediately.\\n * @docs-private\\n */\\nexport interface HasInitialized {\\n    /** Stream that emits once during the directive/component's ngOnInit. */\\n    initialized: Observable<void>;\\n    /**\\n     * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\\n     * the directive has been initialized.\\n     * @docs-private\\n     */\\n    _markInitialized: () => void;\\n}\\n/** @docs-private */\\nexport declare type HasInitializedCtor = Constructor<HasInitialized>;\\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\\nexport declare function mixinInitialized<T extends Constructor<{}>>(base: T): HasInitializedCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/common-behaviors/tabindex.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Constructor } from './constructor';\\nimport { CanDisable } from './disabled';\\n/** @docs-private */\\nexport interface HasTabIndex {\\n    /** Tabindex of the component. */\\n    tabIndex: number;\\n}\\n/** @docs-private */\\nexport declare type HasTabIndexCtor = Constructor<HasTabIndex>;\\n/** Mixin to augment a directive with a `tabIndex` property. */\\nexport declare function mixinTabIndex<T extends Constructor<CanDisable>>(base: T, defaultTabIndex?: number): HasTabIndexCtor & T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/datetime/date-adapter.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\n/** InjectionToken for datepicker that can be used to override default locale code. */\\nexport declare const MAT_DATE_LOCALE: InjectionToken<string>;\\n/** @docs-private */\\nexport declare function MAT_DATE_LOCALE_FACTORY(): string;\\n/**\\n * No longer needed since MAT_DATE_LOCALE has been changed to a scoped injectable.\\n * If you are importing and providing this in your code you can simply remove it.\\n * @deprecated\\n * @breaking-change 8.0.0\\n */\\nexport declare const MAT_DATE_LOCALE_PROVIDER: {\\n    provide: InjectionToken<string>;\\n    useExisting: InjectionToken<string>;\\n};\\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\\nexport declare abstract class DateAdapter<D> {\\n    /** The locale to use for all dates. */\\n    protected locale: any;\\n    /** A stream that emits when the locale changes. */\\n    readonly localeChanges: Observable<void>;\\n    protected _localeChanges: Subject<void>;\\n    /**\\n     * Gets the year component of the given date.\\n     * @param date The date to extract the year from.\\n     * @returns The year component.\\n     */\\n    abstract getYear(date: D): number;\\n    /**\\n     * Gets the month component of the given date.\\n     * @param date The date to extract the month from.\\n     * @returns The month component (0-indexed, 0 = January).\\n     */\\n    abstract getMonth(date: D): number;\\n    /**\\n     * Gets the date of the month component of the given date.\\n     * @param date The date to extract the date of the month from.\\n     * @returns The month component (1-indexed, 1 = first of month).\\n     */\\n    abstract getDate(date: D): number;\\n    /**\\n     * Gets the day of the week component of the given date.\\n     * @param date The date to extract the day of the week from.\\n     * @returns The month component (0-indexed, 0 = Sunday).\\n     */\\n    abstract getDayOfWeek(date: D): number;\\n    /**\\n     * Gets a list of names for the months.\\n     * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\\n     * @returns An ordered list of all month names, starting with January.\\n     */\\n    abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\\n    /**\\n     * Gets a list of names for the dates of the month.\\n     * @returns An ordered list of all date of the month names, starting with '1'.\\n     */\\n    abstract getDateNames(): string[];\\n    /**\\n     * Gets a list of names for the days of the week.\\n     * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\\n     * @returns An ordered list of all weekday names, starting with Sunday.\\n     */\\n    abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\\n    /**\\n     * Gets the name for the year of the given date.\\n     * @param date The date to get the year name for.\\n     * @returns The name of the given year (e.g. '2017').\\n     */\\n    abstract getYearName(date: D): string;\\n    /**\\n     * Gets the first day of the week.\\n     * @returns The first day of the week (0-indexed, 0 = Sunday).\\n     */\\n    abstract getFirstDayOfWeek(): number;\\n    /**\\n     * Gets the number of days in the month of the given date.\\n     * @param date The date whose month should be checked.\\n     * @returns The number of days in the month of the given date.\\n     */\\n    abstract getNumDaysInMonth(date: D): number;\\n    /**\\n     * Clones the given date.\\n     * @param date The date to clone\\n     * @returns A new date equal to the given date.\\n     */\\n    abstract clone(date: D): D;\\n    /**\\n     * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\\n     * month and date.\\n     * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\\n     * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\\n     * @param date The date of month of the date. Must be an integer 1 - length of the given month.\\n     * @returns The new date, or null if invalid.\\n     */\\n    abstract createDate(year: number, month: number, date: number): D;\\n    /**\\n     * Gets today's date.\\n     * @returns Today's date.\\n     */\\n    abstract today(): D;\\n    /**\\n     * Parses a date from a user-provided value.\\n     * @param value The value to parse.\\n     * @param parseFormat The expected format of the value being parsed\\n     *     (type is implementation-dependent).\\n     * @returns The parsed date.\\n     */\\n    abstract parse(value: any, parseFormat: any): D | null;\\n    /**\\n     * Formats a date as a string according to the given format.\\n     * @param date The value to format.\\n     * @param displayFormat The format to use to display the date as a string.\\n     * @returns The formatted date string.\\n     */\\n    abstract format(date: D, displayFormat: any): string;\\n    /**\\n     * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\\n     * calendar for each year and then finding the closest date in the new month. For example when\\n     * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\\n     * @param date The date to add years to.\\n     * @param years The number of years to add (may be negative).\\n     * @returns A new date equal to the given one with the specified number of years added.\\n     */\\n    abstract addCalendarYears(date: D, years: number): D;\\n    /**\\n     * Adds the given number of months to the date. Months are counted as if flipping a page on the\\n     * calendar for each month and then finding the closest date in the new month. For example when\\n     * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\\n     * @param date The date to add months to.\\n     * @param months The number of months to add (may be negative).\\n     * @returns A new date equal to the given one with the specified number of months added.\\n     */\\n    abstract addCalendarMonths(date: D, months: number): D;\\n    /**\\n     * Adds the given number of days to the date. Days are counted as if moving one cell on the\\n     * calendar for each day.\\n     * @param date The date to add days to.\\n     * @param days The number of days to add (may be negative).\\n     * @returns A new date equal to the given one with the specified number of days added.\\n     */\\n    abstract addCalendarDays(date: D, days: number): D;\\n    /**\\n     * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\\n     * This method is used to generate date strings that are compatible with native HTML attributes\\n     * such as the `min` or `max` attribute of an `<input>`.\\n     * @param date The date to get the ISO date string for.\\n     * @returns The ISO date string date string.\\n     */\\n    abstract toIso8601(date: D): string;\\n    /**\\n     * Checks whether the given object is considered a date instance by this DateAdapter.\\n     * @param obj The object to check\\n     * @returns Whether the object is a date instance.\\n     */\\n    abstract isDateInstance(obj: any): boolean;\\n    /**\\n     * Checks whether the given date is valid.\\n     * @param date The date to check.\\n     * @returns Whether the date is valid.\\n     */\\n    abstract isValid(date: D): boolean;\\n    /**\\n     * Gets date instance that is not valid.\\n     * @returns An invalid date.\\n     */\\n    abstract invalid(): D;\\n    /**\\n     * Attempts to deserialize a value to a valid date object. This is different from parsing in that\\n     * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\\n     * string). The default implementation does not allow any deserialization, it simply checks that\\n     * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\\n     * method on all of its `@Input()` properties that accept dates. It is therefore possible to\\n     * support passing values from your backend directly to these properties by overriding this method\\n     * to also deserialize the format used by your backend.\\n     * @param value The value to be deserialized into a date object.\\n     * @returns The deserialized date object, either a valid date, null if the value can be\\n     *     deserialized into a null date (e.g. the empty string), or an invalid date.\\n     */\\n    deserialize(value: any): D | null;\\n    /**\\n     * Sets the locale used for all dates.\\n     * @param locale The new locale.\\n     */\\n    setLocale(locale: any): void;\\n    /**\\n     * Compares two dates.\\n     * @param first The first date to compare.\\n     * @param second The second date to compare.\\n     * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\\n     *     a number greater than 0 if the first date is later.\\n     */\\n    compareDate(first: D, second: D): number;\\n    /**\\n     * Checks if two dates are equal.\\n     * @param first The first date to check.\\n     * @param second The second date to check.\\n     * @returns Whether the two dates are equal.\\n     *     Null dates are considered equal to other null dates.\\n     */\\n    sameDate(first: D | null, second: D | null): boolean;\\n    /**\\n     * Clamp the given date between min and max dates.\\n     * @param date The date to clamp.\\n     * @param min The minimum value to allow. If null or omitted no min is enforced.\\n     * @param max The maximum value to allow. If null or omitted no max is enforced.\\n     * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\\n     *     otherwise `date`.\\n     */\\n    clampDate(date: D, min?: D | null, max?: D | null): D;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/datetime/date-formats.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\nexport declare type MatDateFormats = {\\n    parse: {\\n        dateInput: any;\\n    };\\n    display: {\\n        dateInput: any;\\n        monthYearLabel: any;\\n        dateA11yLabel: any;\\n        monthYearA11yLabel: any;\\n    };\\n};\\nexport declare const MAT_DATE_FORMATS: InjectionToken<MatDateFormats>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/datetime/index.d.ts\",\n      \"node_modules/@angular/material/core/datetime/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '@angular/cdk/platform';\\nexport * from './date-adapter';\\nexport * from './date-formats';\\nexport * from './native-date-adapter';\\nexport * from './native-date-formats';\\nexport declare class NativeDateModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<NativeDateModule, never, [typeof ɵngcc1.PlatformModule], never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<NativeDateModule>;\\n}\\nexport declare class MatNativeDateModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatNativeDateModule, never, [typeof NativeDateModule], never>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatNativeDateModule>;\\n}\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/datetime/native-date-adapter.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { DateAdapter } from './date-adapter';\\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class NativeDateAdapter extends DateAdapter<Date> {\\n    /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\\n    private readonly _clampDate;\\n    /**\\n     * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\\n     * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\\n     * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\\n     * will produce `'8/13/1800'`.\\n     *\\n     * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\\n     * getting the string representation of a Date object from its utc representation. We're keeping\\n     * it here for sometime, just for precaution, in case we decide to revert some of these changes\\n     * though.\\n     */\\n    useUtcForDisplay: boolean;\\n    constructor(matDateLocale: string, platform: Platform);\\n    getYear(date: Date): number;\\n    getMonth(date: Date): number;\\n    getDate(date: Date): number;\\n    getDayOfWeek(date: Date): number;\\n    getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\\n    getDateNames(): string[];\\n    getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\\n    getYearName(date: Date): string;\\n    getFirstDayOfWeek(): number;\\n    getNumDaysInMonth(date: Date): number;\\n    clone(date: Date): Date;\\n    createDate(year: number, month: number, date: number): Date;\\n    today(): Date;\\n    parse(value: any): Date | null;\\n    format(date: Date, displayFormat: Object): string;\\n    addCalendarYears(date: Date, years: number): Date;\\n    addCalendarMonths(date: Date, months: number): Date;\\n    addCalendarDays(date: Date, days: number): Date;\\n    toIso8601(date: Date): string;\\n    /**\\n     * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\\n     * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\\n     * invalid date for all other values.\\n     */\\n    deserialize(value: any): Date | null;\\n    isDateInstance(obj: any): boolean;\\n    isValid(date: Date): boolean;\\n    invalid(): Date;\\n    /** Creates a date but allows the month and date to overflow. */\\n    private _createDateWithOverflow;\\n    /**\\n     * Pads a number to make it two digits.\\n     * @param n The number to pad.\\n     * @returns The padded number.\\n     */\\n    private _2digit;\\n    /**\\n     * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\\n     * other browsers do not. We remove them to make output consistent and because they interfere with\\n     * date parsing.\\n     * @param str The string to strip direction characters from.\\n     * @returns The stripped string.\\n     */\\n    private _stripDirectionalityCharacters;\\n    /**\\n     * When converting Date object to string, javascript built-in functions may return wrong\\n     * results because it applies its internal DST rules. The DST rules around the world change\\n     * very frequently, and the current valid rule is not always valid in previous years though.\\n     * We work around this problem building a new Date object which has its internal UTC\\n     * representation with the local date and time.\\n     * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\\n     *    timeZone set to 'utc' to work fine.\\n     * @param date Date from which we want to get the string representation according to dtf\\n     * @returns A Date object with its UTC representation based on the passed in date info\\n     */\\n    private _format;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NativeDateAdapter>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<NativeDateAdapter>;\\n}\\n\\n//# sourceMappingURL=native-date-adapter.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/datetime/native-date-formats.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { MatDateFormats } from './date-formats';\\nexport declare const MAT_NATIVE_DATE_FORMATS: MatDateFormats;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/error/error-options.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FormGroupDirective, NgForm, FormControl } from '@angular/forms';\\n/** Error state matcher that matches when a control is invalid and dirty. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\\n    isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ShowOnDirtyErrorStateMatcher>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ShowOnDirtyErrorStateMatcher>;\\n}\\n/** Provider that defines how form controls behave with regards to displaying error messages. */\\nexport declare class ErrorStateMatcher {\\n    isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ErrorStateMatcher>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<ErrorStateMatcher>;\\n}\\n\\n//# sourceMappingURL=error-options.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/gestures/gesture-annotations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Stripped-down HammerJS annotations to be used within Material, which are necessary,\\n * because HammerJS is an optional dependency. For the full annotations see:\\n * https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/hammerjs/index.d.ts\\n */\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface HammerInput {\\n    preventDefault: () => {};\\n    deltaX: number;\\n    deltaY: number;\\n    center: {\\n        x: number;\\n        y: number;\\n    };\\n}\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface HammerStatic {\\n    new (element: HTMLElement | SVGElement, options?: any): HammerManager;\\n    Pan: Recognizer;\\n    Swipe: Recognizer;\\n    Press: Recognizer;\\n}\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface Recognizer {\\n    new (options?: any): Recognizer;\\n    recognizeWith(otherRecognizer: Recognizer | string): Recognizer;\\n}\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface RecognizerStatic {\\n    new (options?: any): Recognizer;\\n}\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface HammerInstance {\\n    on(eventName: string, callback: Function): void;\\n    off(eventName: string, callback: Function): void;\\n}\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface HammerManager {\\n    add(recogniser: Recognizer | Recognizer[]): Recognizer;\\n    set(options: any): HammerManager;\\n    emit(event: string, data: any): void;\\n    off(events: string, handler?: Function): void;\\n    on(events: string, handler: Function): void;\\n}\\n/**\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n * @docs-private\\n */\\nexport interface HammerOptions {\\n    cssProps?: {\\n        [key: string]: string;\\n    };\\n    domEvents?: boolean;\\n    enable?: boolean | ((manager: HammerManager) => boolean);\\n    preset?: any[];\\n    touchAction?: string;\\n    recognizers?: any[];\\n    inputClass?: HammerInput;\\n    inputTarget?: EventTarget;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/gestures/gesture-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\nimport { HammerGestureConfig } from '@angular/platform-browser';\\nimport { MatCommonModule } from '../common-behaviors/common-module';\\nimport { HammerInstance, HammerOptions } from './gesture-annotations';\\n/**\\n * Injection token that can be used to provide options to the Hammerjs instance.\\n * More info at http://hammerjs.github.io/api/.\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_HAMMER_OPTIONS: InjectionToken<HammerOptions>;\\n/**\\n * Adjusts configuration of our gesture library, Hammer.\\n * @deprecated No longer being used. To be removed.\\n * @breaking-change 10.0.0\\n */\\nexport declare class GestureConfig extends HammerGestureConfig {\\n    private _hammerOptions?;\\n    /** List of new event names to add to the gesture support list */\\n    events: string[];\\n    constructor(_hammerOptions?: HammerOptions | undefined, _commonModule?: MatCommonModule);\\n    /**\\n     * Builds Hammer instance manually to add custom recognizers that match the Material Design spec.\\n     *\\n     * Our gesture names come from the Material Design gestures spec:\\n     * https://material.io/design/#gestures-touch-mechanics\\n     *\\n     * More information on default recognizers can be found in Hammer docs:\\n     * http://hammerjs.github.io/recognizer-pan/\\n     * http://hammerjs.github.io/recognizer-press/\\n     *\\n     * @param element Element to which to assign the new HammerJS gestures.\\n     * @returns Newly-created HammerJS instance.\\n     */\\n    buildHammer(element: HTMLElement): HammerInstance;\\n    /** Creates a new recognizer, without affecting the default recognizers of HammerJS */\\n    private _createRecognizer;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<GestureConfig>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<GestureConfig>;\\n}\\n\\n//# sourceMappingURL=gesture-config.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/index.d.ts\",\n      \"node_modules/@angular/material/core/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a } from './common-behaviors/common-module';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/label/label-options.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/** InjectionToken that can be used to specify the global label options. */\\nexport declare const MAT_LABEL_GLOBAL_OPTIONS: InjectionToken<LabelOptions>;\\n/** Type for the available floatLabel values. */\\nexport declare type FloatLabelType = 'always' | 'never' | 'auto';\\n/** Configurable options for floating labels. */\\nexport interface LabelOptions {\\n    /**\\n     * Whether the label should float `always`, `never`, or `auto` (only when necessary).\\n     * Default behavior is assumed to be `auto`.\\n     */\\n    float?: FloatLabelType;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/line/line.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, QueryList } from '@angular/core';\\n/**\\n * Shared directive to count lines inside a text area, such as a list item.\\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\\n * counted by checking the query list's length.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from '../common-behaviors/common-module';\\nexport declare class MatLine {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatLine>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatLine, \\\"[mat-line], [matLine]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Helper that takes a query list of lines and sets the correct class on the host.\\n * @docs-private\\n */\\nexport declare function setLines(lines: QueryList<MatLine>, element: ElementRef<HTMLElement>): void;\\n/**\\n * Helper that takes a query list of lines and sets the correct class on the host.\\n * @docs-private\\n * @deprecated Use `setLines` instead.\\n * @breaking-change 8.0.0\\n */\\nexport declare class MatLineSetter {\\n    constructor(lines: QueryList<MatLine>, element: ElementRef<HTMLElement>);\\n}\\nexport declare class MatLineModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatLineModule, [typeof MatLine], [typeof ɵngcc1.MatCommonModule], [typeof MatLine, typeof ɵngcc1.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatLineModule>;\\n}\\n\\n//# sourceMappingURL=line.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/month-constants.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * When constructing a Date, the month is zero-based. This can be confusing, since people are\\n * used to seeing them one-based. So we create these aliases to make writing the tests easier.\\n * @docs-private\\n * @breaking-change 8.0.0 Remove this with V8 since it was only targeted for testing.\\n */\\nexport declare const JAN = 0, FEB = 1, MAR = 2, APR = 3, MAY = 4, JUN = 5, JUL = 6, AUG = 7, SEP = 8, OCT = 9, NOV = 10, DEC = 11;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/option/index.d.ts\",\n      \"node_modules/@angular/material/core/option/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './option';\\nimport * as ɵngcc2 from './optgroup';\\nimport * as ɵngcc3 from '../ripple/index';\\nimport * as ɵngcc4 from '@angular/common';\\nimport * as ɵngcc5 from '../selection/index';\\nexport declare class MatOptionModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatOptionModule, [typeof ɵngcc1.MatOption, typeof ɵngcc2.MatOptgroup], [typeof ɵngcc3.MatRippleModule, typeof ɵngcc4.CommonModule, typeof ɵngcc5.MatPseudoCheckboxModule], [typeof ɵngcc1.MatOption, typeof ɵngcc2.MatOptgroup]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatOptionModule>;\\n}\\nexport * from './option';\\nexport * from './optgroup';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/option/optgroup.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CanDisable, CanDisableCtor } from '../common-behaviors/disabled';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatOptgroupBase {\\n}\\ndeclare const _MatOptgroupMixinBase: CanDisableCtor & typeof MatOptgroupBase;\\n/**\\n * Component that is used to group instances of `mat-option`.\\n */\\nexport declare class MatOptgroup extends _MatOptgroupMixinBase implements CanDisable {\\n    /** Label for the option group. */\\n    label: string;\\n    /** Unique id for the underlying label. */\\n    _labelId: string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatOptgroup>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatOptgroup, \\\"mat-optgroup\\\", [\\\"matOptgroup\\\"], { 'disabled': \\\"disabled\\\", 'label': \\\"label\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=optgroup.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/option/option.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterViewChecked, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, OnDestroy, QueryList } from '@angular/core';\\nimport { FocusOptions, FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\\nimport { Subject } from 'rxjs';\\nimport { MatOptgroup } from './optgroup';\\n/** Event object emitted by MatOption when selected or deselected. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatOptionSelectionChange {\\n    /** Reference to the option that emitted the event. */\\n    source: MatOption;\\n    /** Whether the change in the option's value was a result of a user action. */\\n    isUserInput: boolean;\\n    constructor(\\n    /** Reference to the option that emitted the event. */\\n    source: MatOption, \\n    /** Whether the change in the option's value was a result of a user action. */\\n    isUserInput?: boolean);\\n}\\n/**\\n * Describes a parent component that manages a list of options.\\n * Contains properties that the options can inherit.\\n * @docs-private\\n */\\nexport interface MatOptionParentComponent {\\n    disableRipple?: boolean;\\n    multiple?: boolean;\\n}\\n/**\\n * Injection token used to provide the parent component to options.\\n */\\nexport declare const MAT_OPTION_PARENT_COMPONENT: InjectionToken<MatOptionParentComponent>;\\n/**\\n * Single option inside of a `<mat-select>` element.\\n */\\nexport declare class MatOption implements FocusableOption, AfterViewChecked, OnDestroy {\\n    private _element;\\n    private _changeDetectorRef;\\n    private _parent;\\n    readonly group: MatOptgroup;\\n    private _selected;\\n    private _active;\\n    private _disabled;\\n    private _mostRecentViewValue;\\n    /** Whether the wrapping component is in multiple selection mode. */\\n    readonly multiple: boolean | undefined;\\n    /** Whether or not the option is currently selected. */\\n    readonly selected: boolean;\\n    /** The form value of the option. */\\n    value: any;\\n    /** The unique ID of the option. */\\n    id: string;\\n    /** Whether the option is disabled. */\\n    disabled: any;\\n    /** Whether ripples for the option are disabled. */\\n    readonly disableRipple: boolean | undefined;\\n    /** Event emitted when the option is selected or deselected. */\\n    readonly onSelectionChange: EventEmitter<MatOptionSelectionChange>;\\n    /** Emits when the state of the option changes and any parents have to be notified. */\\n    readonly _stateChanges: Subject<void>;\\n    constructor(_element: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, _parent: MatOptionParentComponent, group: MatOptgroup);\\n    /**\\n     * Whether or not the option is currently active and ready to be selected.\\n     * An active option displays styles as if it is focused, but the\\n     * focus is actually retained somewhere else. This comes in handy\\n     * for components like autocomplete where focus must remain on the input.\\n     */\\n    readonly active: boolean;\\n    /**\\n     * The displayed value of the option. It is necessary to show the selected option in the\\n     * select's trigger.\\n     */\\n    readonly viewValue: string;\\n    /** Selects the option. */\\n    select(): void;\\n    /** Deselects the option. */\\n    deselect(): void;\\n    /** Sets focus onto this option. */\\n    focus(_origin?: FocusOrigin, options?: FocusOptions): void;\\n    /**\\n     * This method sets display styles on the option to make it appear\\n     * active. This is used by the ActiveDescendantKeyManager so key\\n     * events will display the proper options as active on arrow key events.\\n     */\\n    setActiveStyles(): void;\\n    /**\\n     * This method removes display styles on the option that made it appear\\n     * active. This is used by the ActiveDescendantKeyManager so key\\n     * events will display the proper options as active on arrow key events.\\n     */\\n    setInactiveStyles(): void;\\n    /** Gets the label to be used when determining whether the option should be focused. */\\n    getLabel(): string;\\n    /** Ensures the option is selected when activated from the keyboard. */\\n    _handleKeydown(event: KeyboardEvent): void;\\n    /**\\n     * `Selects the option while indicating the selection came from the user. Used to\\n     * determine if the select's view -> model callback should be invoked.`\\n     */\\n    _selectViaInteraction(): void;\\n    /**\\n     * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\\n     * attribute from single-selection, unselected options. Including the `aria-selected=\\\"false\\\"`\\n     * attributes adds a significant amount of noise to screen-reader users without providing useful\\n     * information.\\n     */\\n    _getAriaSelected(): boolean | null;\\n    /** Returns the correct tabindex for the option depending on disabled state. */\\n    _getTabIndex(): string;\\n    /** Gets the host DOM element. */\\n    _getHostElement(): HTMLElement;\\n    ngAfterViewChecked(): void;\\n    ngOnDestroy(): void;\\n    /** Emits the selection change event. */\\n    private _emitSelectionChangeEvent;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatOption>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatOption, \\\"mat-option\\\", [\\\"matOption\\\"], { 'id': \\\"id\\\", 'disabled': \\\"disabled\\\", 'value': \\\"value\\\" }, { 'onSelectionChange': \\\"onSelectionChange\\\" }, never>;\\n}\\n/**\\n * Counts the amount of option group labels that precede the specified option.\\n * @param optionIndex Index of the option at which to start counting.\\n * @param options Flat list of all of the options.\\n * @param optionGroups Flat list of all of the option groups.\\n * @docs-private\\n */\\nexport declare function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>, optionGroups: QueryList<MatOptgroup>): number;\\n/**\\n * Determines the position to which to scroll a panel in order for an option to be into view.\\n * @param optionIndex Index of the option to be scrolled into the view.\\n * @param optionHeight Height of the options.\\n * @param currentScrollPosition Current scroll position of the panel.\\n * @param panelHeight Height of the panel.\\n * @docs-private\\n */\\nexport declare function _getOptionScrollPosition(optionIndex: number, optionHeight: number, currentScrollPosition: number, panelHeight: number): number;\\n\\n//# sourceMappingURL=option.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './version';\\nexport * from './animation/animation';\\nexport * from './common-behaviors/index';\\nexport * from './datetime/index';\\nexport * from './error/error-options';\\nexport * from './gestures/gesture-annotations';\\nexport * from './gestures/gesture-config';\\nexport * from './line/line';\\nexport * from './option/index';\\nexport * from './label/label-options';\\nexport * from './ripple/index';\\nexport * from './selection/index';\\nexport * from './month-constants';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/ripple/index.d.ts\",\n      \"node_modules/@angular/material/core/ripple/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './ripple';\\nimport * as ɵngcc2 from '../common-behaviors/common-module';\\nimport * as ɵngcc3 from '@angular/cdk/platform';\\nexport * from './ripple';\\nexport * from './ripple-ref';\\nexport * from './ripple-renderer';\\nexport declare class MatRippleModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatRippleModule, [typeof ɵngcc1.MatRipple], [typeof ɵngcc2.MatCommonModule, typeof ɵngcc3.PlatformModule], [typeof ɵngcc1.MatRipple, typeof ɵngcc2.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatRippleModule>;\\n}\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/ripple/ripple-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { RippleConfig, RippleRenderer } from './ripple-renderer';\\n/** Possible states for a ripple element. */\\nexport declare enum RippleState {\\n    FADING_IN = 0,\\n    VISIBLE = 1,\\n    FADING_OUT = 2,\\n    HIDDEN = 3\\n}\\n/**\\n * Reference to a previously launched ripple element.\\n */\\nexport declare class RippleRef {\\n    private _renderer;\\n    /** Reference to the ripple HTML element. */\\n    element: HTMLElement;\\n    /** Ripple configuration used for the ripple. */\\n    config: RippleConfig;\\n    /** Current state of the ripple. */\\n    state: RippleState;\\n    constructor(_renderer: RippleRenderer, \\n    /** Reference to the ripple HTML element. */\\n    element: HTMLElement, \\n    /** Ripple configuration used for the ripple. */\\n    config: RippleConfig);\\n    /** Fades out the ripple element. */\\n    fadeOut(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/ripple/ripple-renderer.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, NgZone } from '@angular/core';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { RippleRef } from './ripple-ref';\\nexport declare type RippleConfig = {\\n    color?: string;\\n    centered?: boolean;\\n    radius?: number;\\n    persistent?: boolean;\\n    animation?: RippleAnimationConfig;\\n    terminateOnPointerUp?: boolean;\\n};\\n/**\\n * Interface that describes the configuration for the animation of a ripple.\\n * There are two animation phases with different durations for the ripples.\\n */\\nexport interface RippleAnimationConfig {\\n    /** Duration in milliseconds for the enter animation (expansion from point of contact). */\\n    enterDuration?: number;\\n    /** Duration in milliseconds for the exit animation (fade-out). */\\n    exitDuration?: number;\\n}\\n/**\\n * Interface that describes the target for launching ripples.\\n * It defines the ripple configuration and disabled state for interaction ripples.\\n * @docs-private\\n */\\nexport interface RippleTarget {\\n    /** Configuration for ripples that are launched on pointer down. */\\n    rippleConfig: RippleConfig;\\n    /** Whether ripples on pointer down should be disabled. */\\n    rippleDisabled: boolean;\\n}\\n/**\\n * Default ripple animation configuration for ripples without an explicit\\n * animation config specified.\\n */\\nexport declare const defaultRippleAnimationConfig: {\\n    enterDuration: number;\\n    exitDuration: number;\\n};\\n/**\\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\\n * event handlers to be installed on the element that triggers ripple animations.\\n * This will eventually become a custom renderer once Angular support exists.\\n * @docs-private\\n */\\nexport declare class RippleRenderer {\\n    private _target;\\n    private _ngZone;\\n    /** Element where the ripples are being added to. */\\n    private _containerElement;\\n    /** Element which triggers the ripple elements on mouse events. */\\n    private _triggerElement;\\n    /** Whether the pointer is currently down or not. */\\n    private _isPointerDown;\\n    /** Events to be registered on the trigger element. */\\n    private _triggerEvents;\\n    /** Set of currently active ripple references. */\\n    private _activeRipples;\\n    /** Latest non-persistent ripple that was triggered. */\\n    private _mostRecentTransientRipple;\\n    /** Time in milliseconds when the last touchstart event happened. */\\n    private _lastTouchStartEvent;\\n    /**\\n     * Cached dimensions of the ripple container. Set when the first\\n     * ripple is shown and cleared once no more ripples are visible.\\n     */\\n    private _containerRect;\\n    constructor(_target: RippleTarget, _ngZone: NgZone, elementOrElementRef: HTMLElement | ElementRef<HTMLElement>, platform: Platform);\\n    /**\\n     * Fades in a ripple at the given coordinates.\\n     * @param x Coordinate within the element, along the X axis at which to start the ripple.\\n     * @param y Coordinate within the element, along the Y axis at which to start the ripple.\\n     * @param config Extra ripple options.\\n     */\\n    fadeInRipple(x: number, y: number, config?: RippleConfig): RippleRef;\\n    /** Fades out a ripple reference. */\\n    fadeOutRipple(rippleRef: RippleRef): void;\\n    /** Fades out all currently active ripples. */\\n    fadeOutAll(): void;\\n    /** Sets up the trigger event listeners */\\n    setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>): void;\\n    /** Function being called whenever the trigger is being pressed using mouse. */\\n    private _onMousedown;\\n    /** Function being called whenever the trigger is being pressed using touch. */\\n    private _onTouchStart;\\n    /** Function being called whenever the trigger is being released. */\\n    private _onPointerUp;\\n    /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\\n    private _runTimeoutOutsideZone;\\n    /** Removes previously registered event listeners from the trigger element. */\\n    _removeTriggerEvents(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/ripple/ripple.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ElementRef, InjectionToken, NgZone, OnDestroy, OnInit } from '@angular/core';\\nimport { RippleRef } from './ripple-ref';\\nimport { RippleAnimationConfig, RippleConfig, RippleTarget } from './ripple-renderer';\\n/** Configurable options for `matRipple`. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface RippleGlobalOptions {\\n    /**\\n     * Whether ripples should be disabled. Ripples can be still launched manually by using\\n     * the `launch()` method. Therefore focus indicators will still show up.\\n     */\\n    disabled?: boolean;\\n    /**\\n     * Configuration for the animation duration of the ripples. There are two phases with different\\n     * durations for the ripples. The animation durations will be overwritten if the\\n     * `NoopAnimationsModule` is being used.\\n     */\\n    animation?: RippleAnimationConfig;\\n    /**\\n     * Whether ripples should start fading out immediately after the mouse or touch is released. By\\n     * default, ripples will wait for the enter animation to complete and for mouse or touch release.\\n     */\\n    terminateOnPointerUp?: boolean;\\n}\\n/** Injection token that can be used to specify the global ripple options. */\\nexport declare const MAT_RIPPLE_GLOBAL_OPTIONS: InjectionToken<RippleGlobalOptions>;\\nexport declare class MatRipple implements OnInit, OnDestroy, RippleTarget {\\n    private _elementRef;\\n    /** Custom color for all ripples. */\\n    color: string;\\n    /** Whether the ripples should be visible outside the component's bounds. */\\n    unbounded: boolean;\\n    /**\\n     * Whether the ripple always originates from the center of the host element's bounds, rather\\n     * than originating from the location of the click event.\\n     */\\n    centered: boolean;\\n    /**\\n     * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\\n     * will be the distance from the center of the ripple to the furthest corner of the host element's\\n     * bounding rectangle.\\n     */\\n    radius: number;\\n    /**\\n     * Configuration for the ripple animation. Allows modifying the enter and exit animation\\n     * duration of the ripples. The animation durations will be overwritten if the\\n     * `NoopAnimationsModule` is being used.\\n     */\\n    animation: RippleAnimationConfig;\\n    /**\\n     * Whether click events will not trigger the ripple. Ripples can be still launched manually\\n     * by using the `launch()` method.\\n     */\\n    disabled: boolean;\\n    private _disabled;\\n    /**\\n     * The element that triggers the ripple when click events are received.\\n     * Defaults to the directive's host element.\\n     */\\n    trigger: HTMLElement;\\n    private _trigger;\\n    /** Renderer for the ripple DOM manipulations. */\\n    private _rippleRenderer;\\n    /** Options that are set globally for all ripples. */\\n    private _globalOptions;\\n    /** Whether ripple directive is initialized and the input bindings are set. */\\n    private _isInitialized;\\n    constructor(_elementRef: ElementRef<HTMLElement>, ngZone: NgZone, platform: Platform, globalOptions?: RippleGlobalOptions, animationMode?: string);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /** Fades out all currently showing ripple elements. */\\n    fadeOutAll(): void;\\n    /**\\n     * Ripple configuration from the directive's input values.\\n     * @docs-private Implemented as part of RippleTarget\\n     */\\n    readonly rippleConfig: RippleConfig;\\n    /**\\n     * Whether ripples on pointer-down are disabled or not.\\n     * @docs-private Implemented as part of RippleTarget\\n     */\\n    readonly rippleDisabled: boolean;\\n    /** Sets up the trigger event listeners if ripples are enabled. */\\n    private _setupTriggerEventsIfEnabled;\\n    /**\\n     * Launches a manual ripple using the specified ripple configuration.\\n     * @param config Configuration for the manual ripple.\\n     */\\n    launch(config: RippleConfig): RippleRef;\\n    /**\\n     * Launches a manual ripple at the specified coordinates within the element.\\n     * @param x Coordinate within the element, along the X axis at which to fade-in the ripple.\\n     * @param y Coordinate within the element, along the Y axis at which to fade-in the ripple.\\n     * @param config Optional ripple configuration for the manual ripple.\\n     */\\n    launch(x: number, y: number, config?: RippleConfig): RippleRef;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatRipple>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatRipple, \\\"[mat-ripple], [matRipple]\\\", [\\\"matRipple\\\"], { 'radius': \\\"matRippleRadius\\\", 'disabled': \\\"matRippleDisabled\\\", 'trigger': \\\"matRippleTrigger\\\", 'color': \\\"matRippleColor\\\", 'unbounded': \\\"matRippleUnbounded\\\", 'centered': \\\"matRippleCentered\\\", 'animation': \\\"matRippleAnimation\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=ripple.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/selection/index.d.ts\",\n      \"node_modules/@angular/material/core/selection/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './pseudo-checkbox/pseudo-checkbox';\\nexport declare class MatPseudoCheckboxModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatPseudoCheckboxModule, [typeof ɵngcc1.MatPseudoCheckbox], never, [typeof ɵngcc1.MatPseudoCheckbox]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatPseudoCheckboxModule>;\\n}\\nexport * from './pseudo-checkbox/pseudo-checkbox';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Possible states for a pseudo checkbox.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\\n/**\\n * Component that shows a simplified checkbox without including any kind of \\\"real\\\" checkbox.\\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\\n * Note that theming is meant to be handled by the parent element, e.g.\\n * `mat-primary .mat-pseudo-checkbox`.\\n *\\n * Note that this component will be completely invisible to screen-reader users. This is *not*\\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\\n * of more complex components that appropriately handle selected / checked state.\\n * @docs-private\\n */\\nexport declare class MatPseudoCheckbox {\\n    _animationMode?: string | undefined;\\n    /** Display state of the checkbox. */\\n    state: MatPseudoCheckboxState;\\n    /** Whether the checkbox is disabled. */\\n    disabled: boolean;\\n    constructor(_animationMode?: string | undefined);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatPseudoCheckbox>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatPseudoCheckbox, \\\"mat-pseudo-checkbox\\\", never, { 'state': \\\"state\\\", 'disabled': \\\"disabled\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=pseudo-checkbox.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/typings.d.ts\"\n    ],\n    \"content\": \"declare var module: {id: string};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/core/version.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Version } from '@angular/core';\\n/** Current version of Angular Material. */\\nexport declare const VERSION: Version;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/calendar-body.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, EventEmitter, NgZone, OnChanges, SimpleChanges } from '@angular/core';\\n/**\\n * Extra CSS classes that can be associated with a calendar cell.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type MatCalendarCellCssClasses = string | string[] | Set<string> | {\\n    [key: string]: any;\\n};\\n/**\\n * An internal class that represents the data corresponding to a single calendar cell.\\n * @docs-private\\n */\\nexport declare class MatCalendarCell {\\n    value: number;\\n    displayValue: string;\\n    ariaLabel: string;\\n    enabled: boolean;\\n    cssClasses?: string | Set<string> | {\\n        [key: string]: any;\\n    } | string[] | undefined;\\n    constructor(value: number, displayValue: string, ariaLabel: string, enabled: boolean, cssClasses?: string | Set<string> | {\\n        [key: string]: any;\\n    } | string[] | undefined);\\n}\\n/**\\n * An internal component used to display calendar data in a table.\\n * @docs-private\\n */\\nexport declare class MatCalendarBody implements OnChanges {\\n    private _elementRef;\\n    private _ngZone;\\n    /** The label for the table. (e.g. \\\"Jan 2017\\\"). */\\n    label: string;\\n    /** The cells to display in the table. */\\n    rows: MatCalendarCell[][];\\n    /** The value in the table that corresponds to today. */\\n    todayValue: number;\\n    /** The value in the table that is currently selected. */\\n    selectedValue: number;\\n    /** The minimum number of free cells needed to fit the label in the first row. */\\n    labelMinRequiredCells: number;\\n    /** The number of columns in the table. */\\n    numCols: number;\\n    /** The cell number of the active cell in the table. */\\n    activeCell: number;\\n    /**\\n     * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\\n     * maintained even as the table resizes.\\n     */\\n    cellAspectRatio: number;\\n    /** Emits when a new value is selected. */\\n    readonly selectedValueChange: EventEmitter<number>;\\n    /** The number of blank cells to put at the beginning for the first row. */\\n    _firstRowOffset: number;\\n    /** Padding for the individual date cells. */\\n    _cellPadding: string;\\n    /** Width of an individual cell. */\\n    _cellWidth: string;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _ngZone: NgZone);\\n    _cellClicked(cell: MatCalendarCell): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    _isActiveCell(rowIndex: number, colIndex: number): boolean;\\n    /** Focuses the active cell after the microtask queue is empty. */\\n    _focusActiveCell(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCalendarBody>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCalendarBody, \\\"[mat-calendar-body]\\\", [\\\"matCalendarBody\\\"], { 'numCols': \\\"numCols\\\", 'activeCell': \\\"activeCell\\\", 'cellAspectRatio': \\\"cellAspectRatio\\\", 'label': \\\"label\\\", 'rows': \\\"rows\\\", 'todayValue': \\\"todayValue\\\", 'selectedValue': \\\"selectedValue\\\", 'labelMinRequiredCells': \\\"labelMinRequiredCells\\\" }, { 'selectedValueChange': \\\"selectedValueChange\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=calendar-body.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/calendar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentType, Portal } from '@angular/cdk/portal';\\nimport { AfterContentInit, AfterViewChecked, ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\\nimport { DateAdapter, MatDateFormats } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\nimport { MatCalendarCellCssClasses } from './calendar-body';\\nimport { MatDatepickerIntl } from './datepicker-intl';\\nimport { MatMonthView } from './month-view';\\nimport { MatMultiYearView } from './multi-year-view';\\nimport { MatYearView } from './year-view';\\n/**\\n * Possible views for the calendar.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type MatCalendarView = 'month' | 'year' | 'multi-year';\\n/** Default header for MatCalendar */\\nexport declare class MatCalendarHeader<D> {\\n    private _intl;\\n    calendar: MatCalendar<D>;\\n    private _dateAdapter;\\n    private _dateFormats;\\n    constructor(_intl: MatDatepickerIntl, calendar: MatCalendar<D>, _dateAdapter: DateAdapter<D>, _dateFormats: MatDateFormats, changeDetectorRef: ChangeDetectorRef);\\n    /** The label for the current calendar view. */\\n    readonly periodButtonText: string;\\n    readonly periodButtonLabel: string;\\n    /** The label for the previous button. */\\n    readonly prevButtonLabel: string;\\n    /** The label for the next button. */\\n    readonly nextButtonLabel: string;\\n    /** Handles user clicks on the period label. */\\n    currentPeriodClicked(): void;\\n    /** Handles user clicks on the previous button. */\\n    previousClicked(): void;\\n    /** Handles user clicks on the next button. */\\n    nextClicked(): void;\\n    /** Whether the previous period button is enabled. */\\n    previousEnabled(): boolean;\\n    /** Whether the next period button is enabled. */\\n    nextEnabled(): boolean;\\n    /** Whether the two dates represent the same view in the current view mode (month or year). */\\n    private _isSameView;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCalendarHeader<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCalendarHeader<any>, \\\"mat-calendar-header\\\", [\\\"matCalendarHeader\\\"], {}, {}, never>;\\n}\\n/**\\n * A calendar that is used as part of the datepicker.\\n * @docs-private\\n */\\nexport declare class MatCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges {\\n    private _dateAdapter;\\n    private _dateFormats;\\n    private _changeDetectorRef;\\n    /** An input indicating the type of the header component, if set. */\\n    headerComponent: ComponentType<any>;\\n    /** A portal containing the header component type for this calendar. */\\n    _calendarHeaderPortal: Portal<any>;\\n    private _intlChanges;\\n    /**\\n     * Used for scheduling that focus should be moved to the active cell on the next tick.\\n     * We need to schedule it, rather than do it immediately, because we have to wait\\n     * for Angular to re-evaluate the view children.\\n     */\\n    private _moveFocusOnNextTick;\\n    /** A date representing the period (month or year) to start the calendar in. */\\n    startAt: D | null;\\n    private _startAt;\\n    /** Whether the calendar should be started in month or year view. */\\n    startView: MatCalendarView;\\n    /** The currently selected date. */\\n    selected: D | null;\\n    private _selected;\\n    /** The minimum selectable date. */\\n    minDate: D | null;\\n    private _minDate;\\n    /** The maximum selectable date. */\\n    maxDate: D | null;\\n    private _maxDate;\\n    /** Function used to filter which dates are selectable. */\\n    dateFilter: (date: D) => boolean;\\n    /** Function that can be used to add custom CSS classes to dates. */\\n    dateClass: (date: D) => MatCalendarCellCssClasses;\\n    /** Emits when the currently selected date changes. */\\n    readonly selectedChange: EventEmitter<D>;\\n    /**\\n     * Emits the year chosen in multiyear view.\\n     * This doesn't imply a change on the selected date.\\n     */\\n    readonly yearSelected: EventEmitter<D>;\\n    /**\\n     * Emits the month chosen in year view.\\n     * This doesn't imply a change on the selected date.\\n     */\\n    readonly monthSelected: EventEmitter<D>;\\n    /** Emits when any date is selected. */\\n    readonly _userSelection: EventEmitter<void>;\\n    /** Reference to the current month view component. */\\n    monthView: MatMonthView<D>;\\n    /** Reference to the current year view component. */\\n    yearView: MatYearView<D>;\\n    /** Reference to the current multi-year view component. */\\n    multiYearView: MatMultiYearView<D>;\\n    /**\\n     * The current active date. This determines which time period is shown and which date is\\n     * highlighted when using keyboard navigation.\\n     */\\n    activeDate: D;\\n    private _clampedActiveDate;\\n    /** Whether the calendar is in month view. */\\n    currentView: MatCalendarView;\\n    private _currentView;\\n    /**\\n     * Emits whenever there is a state change that the header may need to respond to.\\n     */\\n    stateChanges: Subject<void>;\\n    constructor(_intl: MatDatepickerIntl, _dateAdapter: DateAdapter<D>, _dateFormats: MatDateFormats, _changeDetectorRef: ChangeDetectorRef);\\n    ngAfterContentInit(): void;\\n    ngAfterViewChecked(): void;\\n    ngOnDestroy(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    focusActiveCell(): void;\\n    /** Updates today's date after an update of the active date */\\n    updateTodaysDate(): void;\\n    /** Handles date selection in the month view. */\\n    _dateSelected(date: D): void;\\n    /** Handles year selection in the multiyear view. */\\n    _yearSelectedInMultiYearView(normalizedYear: D): void;\\n    /** Handles month selection in the year view. */\\n    _monthSelectedInYearView(normalizedMonth: D): void;\\n    _userSelected(): void;\\n    /** Handles year/month selection in the multi-year/year views. */\\n    _goToDateInView(date: D, view: 'month' | 'year' | 'multi-year'): void;\\n    /**\\n     * @param obj The object to check.\\n     * @returns The given object if it is both a date instance and valid, otherwise null.\\n     */\\n    private _getValidDateOrNull;\\n    /** Returns the component instance that corresponds to the current calendar view. */\\n    private _getCurrentViewComponent;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCalendar<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatCalendar<any>, \\\"mat-calendar\\\", [\\\"matCalendar\\\"], { 'startView': \\\"startView\\\", 'startAt': \\\"startAt\\\", 'selected': \\\"selected\\\", 'minDate': \\\"minDate\\\", 'maxDate': \\\"maxDate\\\", 'headerComponent': \\\"headerComponent\\\", 'dateFilter': \\\"dateFilter\\\", 'dateClass': \\\"dateClass\\\" }, { 'selectedChange': \\\"selectedChange\\\", 'yearSelected': \\\"yearSelected\\\", 'monthSelected': \\\"monthSelected\\\", '_userSelection': \\\"_userSelection\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=calendar.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the Material datepicker.\\n * @docs-private\\n */\\nexport declare const matDatepickerAnimations: {\\n    readonly transformPanel: AnimationTriggerMetadata;\\n    readonly fadeInCalendar: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare function createMissingDateImplError(provider: string): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker-input.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, EventEmitter, OnDestroy } from '@angular/core';\\nimport { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\\nimport { DateAdapter, MatDateFormats, ThemePalette } from '@angular/material/core';\\nimport { MatFormField } from '@angular/material/form-field';\\nimport { MatDatepicker } from './datepicker';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_DATEPICKER_VALUE_ACCESSOR: any;\\n/** @docs-private */\\nexport declare const MAT_DATEPICKER_VALIDATORS: any;\\n/**\\n * An event used for datepicker input and change events. We don't always have access to a native\\n * input or change event because the event may have been triggered by the user clicking on the\\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\\n */\\nexport declare class MatDatepickerInputEvent<D> {\\n    /** Reference to the datepicker input component that emitted the event. */\\n    target: MatDatepickerInput<D>;\\n    /** Reference to the native input element associated with the datepicker input. */\\n    targetElement: HTMLElement;\\n    /** The new value for the target datepicker input. */\\n    value: D | null;\\n    constructor(\\n    /** Reference to the datepicker input component that emitted the event. */\\n    target: MatDatepickerInput<D>, \\n    /** Reference to the native input element associated with the datepicker input. */\\n    targetElement: HTMLElement);\\n}\\n/** Directive used to connect an input to a MatDatepicker. */\\nexport declare class MatDatepickerInput<D> implements ControlValueAccessor, OnDestroy, Validator {\\n    private _elementRef;\\n    _dateAdapter: DateAdapter<D>;\\n    private _dateFormats;\\n    private _formField;\\n    /** The datepicker that this input is associated with. */\\n    matDatepicker: MatDatepicker<D>;\\n    _datepicker: MatDatepicker<D>;\\n    /** Function that can be used to filter out dates within the datepicker. */\\n    matDatepickerFilter: (date: D | null) => boolean;\\n    _dateFilter: (date: D | null) => boolean;\\n    /** The value of the input. */\\n    value: D | null;\\n    private _value;\\n    /** The minimum valid date. */\\n    min: D | null;\\n    private _min;\\n    /** The maximum valid date. */\\n    max: D | null;\\n    private _max;\\n    /** Whether the datepicker-input is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** Emits when a `change` event is fired on this `<input>`. */\\n    readonly dateChange: EventEmitter<MatDatepickerInputEvent<D>>;\\n    /** Emits when an `input` event is fired on this `<input>`. */\\n    readonly dateInput: EventEmitter<MatDatepickerInputEvent<D>>;\\n    /** Emits when the value changes (either due to user input or programmatic change). */\\n    _valueChange: EventEmitter<D | null>;\\n    /** Emits when the disabled state has changed */\\n    _disabledChange: EventEmitter<boolean>;\\n    _onTouched: () => void;\\n    private _cvaOnChange;\\n    private _validatorOnChange;\\n    private _datepickerSubscription;\\n    private _localeSubscription;\\n    /** The form control validator for whether the input parses. */\\n    private _parseValidator;\\n    /** The form control validator for the min date. */\\n    private _minValidator;\\n    /** The form control validator for the max date. */\\n    private _maxValidator;\\n    /** The form control validator for the date filter. */\\n    private _filterValidator;\\n    /** The combined form control validator for this input. */\\n    private _validator;\\n    /** Whether the last value set on the input was valid. */\\n    private _lastValueValid;\\n    constructor(_elementRef: ElementRef<HTMLInputElement>, _dateAdapter: DateAdapter<D>, _dateFormats: MatDateFormats, _formField: MatFormField);\\n    ngOnDestroy(): void;\\n    /** @docs-private */\\n    registerOnValidatorChange(fn: () => void): void;\\n    /** @docs-private */\\n    validate(c: AbstractControl): ValidationErrors | null;\\n    /**\\n     * @deprecated\\n     * @breaking-change 8.0.0 Use `getConnectedOverlayOrigin` instead\\n     */\\n    getPopupConnectionElementRef(): ElementRef;\\n    /**\\n     * Gets the element that the datepicker popup should be connected to.\\n     * @return The element to connect the popup to.\\n     */\\n    getConnectedOverlayOrigin(): ElementRef;\\n    writeValue(value: D): void;\\n    registerOnChange(fn: (value: any) => void): void;\\n    registerOnTouched(fn: () => void): void;\\n    setDisabledState(isDisabled: boolean): void;\\n    _onKeydown(event: KeyboardEvent): void;\\n    _onInput(value: string): void;\\n    _onChange(): void;\\n    /** Returns the palette used by the input's form field, if any. */\\n    _getThemePalette(): ThemePalette;\\n    /** Handles blur events on the input. */\\n    _onBlur(): void;\\n    /** Formats a value and sets it on the input element. */\\n    private _formatValue;\\n    /**\\n     * @param obj The object to check.\\n     * @returns The given object if it is both a date instance and valid, otherwise null.\\n     */\\n    private _getValidDateOrNull;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDatepickerInput<any>>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatDatepickerInput<any>, \\\"input[matDatepicker]\\\", [\\\"matDatepickerInput\\\"], { 'value': \\\"value\\\", 'matDatepicker': \\\"matDatepicker\\\", 'matDatepickerFilter': \\\"matDatepickerFilter\\\", 'min': \\\"min\\\", 'max': \\\"max\\\", 'disabled': \\\"disabled\\\" }, { 'dateChange': \\\"dateChange\\\", 'dateInput': \\\"dateInput\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=datepicker-input.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker-intl.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Subject } from 'rxjs';\\n/** Datepicker data that requires internationalization. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatDatepickerIntl {\\n    /**\\n     * Stream that emits whenever the labels here are changed. Use this to notify\\n     * components if the labels have changed after initialization.\\n     */\\n    readonly changes: Subject<void>;\\n    /** A label for the calendar popup (used by screen readers). */\\n    calendarLabel: string;\\n    /** A label for the button used to open the calendar popup (used by screen readers). */\\n    openCalendarLabel: string;\\n    /** A label for the previous month button (used by screen readers). */\\n    prevMonthLabel: string;\\n    /** A label for the next month button (used by screen readers). */\\n    nextMonthLabel: string;\\n    /** A label for the previous year button (used by screen readers). */\\n    prevYearLabel: string;\\n    /** A label for the next year button (used by screen readers). */\\n    nextYearLabel: string;\\n    /** A label for the previous multi-year button (used by screen readers). */\\n    prevMultiYearLabel: string;\\n    /** A label for the next multi-year button (used by screen readers). */\\n    nextMultiYearLabel: string;\\n    /** A label for the 'switch to month view' button (used by screen readers). */\\n    switchToMonthViewLabel: string;\\n    /** A label for the 'switch to year view' button (used by screen readers). */\\n    switchToMultiYearViewLabel: string;\\n    /** Formats a range of years. */\\n    formatYearRange(start: string, end: string): string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDatepickerIntl>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MatDatepickerIntl>;\\n}\\n\\n//# sourceMappingURL=datepicker-intl.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './calendar';\\nimport * as ɵngcc2 from './calendar-body';\\nimport * as ɵngcc3 from './datepicker';\\nimport * as ɵngcc4 from './datepicker-input';\\nimport * as ɵngcc5 from './datepicker-toggle';\\nimport * as ɵngcc6 from './month-view';\\nimport * as ɵngcc7 from './year-view';\\nimport * as ɵngcc8 from './multi-year-view';\\nimport * as ɵngcc9 from '@angular/common';\\nimport * as ɵngcc10 from '@angular/material/button';\\nimport * as ɵngcc11 from '@angular/material/dialog';\\nimport * as ɵngcc12 from '@angular/cdk/overlay';\\nimport * as ɵngcc13 from '@angular/cdk/a11y';\\nimport * as ɵngcc14 from '@angular/cdk/portal';\\nexport declare class MatDatepickerModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatDatepickerModule, [typeof ɵngcc1.MatCalendar, typeof ɵngcc2.MatCalendarBody, typeof ɵngcc3.MatDatepicker, typeof ɵngcc3.MatDatepickerContent, typeof ɵngcc4.MatDatepickerInput, typeof ɵngcc5.MatDatepickerToggle, typeof ɵngcc5.MatDatepickerToggleIcon, typeof ɵngcc6.MatMonthView, typeof ɵngcc7.MatYearView, typeof ɵngcc8.MatMultiYearView, typeof ɵngcc1.MatCalendarHeader], [typeof ɵngcc9.CommonModule, typeof ɵngcc10.MatButtonModule, typeof ɵngcc11.MatDialogModule, typeof ɵngcc12.OverlayModule, typeof ɵngcc13.A11yModule, typeof ɵngcc14.PortalModule], [typeof ɵngcc1.MatCalendar, typeof ɵngcc2.MatCalendarBody, typeof ɵngcc3.MatDatepicker, typeof ɵngcc3.MatDatepickerContent, typeof ɵngcc4.MatDatepickerInput, typeof ɵngcc5.MatDatepickerToggle, typeof ɵngcc5.MatDatepickerToggleIcon, typeof ɵngcc6.MatMonthView, typeof ɵngcc7.MatYearView, typeof ɵngcc8.MatMultiYearView, typeof ɵngcc1.MatCalendarHeader]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatDatepickerModule>;\\n}\\n\\n//# sourceMappingURL=datepicker-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker-toggle.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ChangeDetectorRef, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\\nimport { MatButton } from '@angular/material/button';\\nimport { MatDatepicker } from './datepicker';\\nimport { MatDatepickerIntl } from './datepicker-intl';\\n/** Can be used to override the icon of a `matDatepickerToggle`. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatDatepickerToggleIcon {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDatepickerToggleIcon>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatDatepickerToggleIcon, \\\"[matDatepickerToggleIcon]\\\", never, {}, {}, never>;\\n}\\nexport declare class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\\n    _intl: MatDatepickerIntl;\\n    private _changeDetectorRef;\\n    private _stateChanges;\\n    /** Datepicker instance that the button will toggle. */\\n    datepicker: MatDatepicker<D>;\\n    /** Tabindex for the toggle. */\\n    tabIndex: number | null;\\n    /** Whether the toggle button is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** Whether ripples on the toggle should be disabled. */\\n    disableRipple: boolean;\\n    /** Custom icon set by the consumer. */\\n    _customIcon: MatDatepickerToggleIcon;\\n    /** Underlying button element. */\\n    _button: MatButton;\\n    constructor(_intl: MatDatepickerIntl, _changeDetectorRef: ChangeDetectorRef, defaultTabIndex: string);\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    ngAfterContentInit(): void;\\n    _open(event: Event): void;\\n    private _watchStateChanges;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDatepickerToggle<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatDatepickerToggle<any>, \\\"mat-datepicker-toggle\\\", [\\\"matDatepickerToggle\\\"], { 'tabIndex': \\\"tabIndex\\\", 'disabled': \\\"disabled\\\", 'datepicker': \\\"for\\\", 'disableRipple': \\\"disableRipple\\\" }, {}, [\\\"_customIcon\\\"]>;\\n}\\n\\n//# sourceMappingURL=datepicker-toggle.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/datepicker.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { Overlay, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\\nimport { ComponentType } from '@angular/cdk/portal';\\nimport { AfterViewInit, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, ViewContainerRef } from '@angular/core';\\nimport { CanColor, CanColorCtor, DateAdapter, ThemePalette } from '@angular/material/core';\\nimport { MatDialog } from '@angular/material/dialog';\\nimport { Subject } from 'rxjs';\\nimport { MatCalendar } from './calendar';\\nimport { MatDatepickerInput } from './datepicker-input';\\nimport { MatCalendarCellCssClasses } from './calendar-body';\\n/** Injection token that determines the scroll handling while the calendar is open. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_DATEPICKER_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private */\\nexport declare function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY;\\n};\\n/** @docs-private */\\ndeclare class MatDatepickerContentBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatDatepickerContentMixinBase: CanColorCtor & typeof MatDatepickerContentBase;\\n/**\\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\\n * place to put additional features of the popup that are not part of the calendar itself in the\\n * future. (e.g. confirmation buttons).\\n * @docs-private\\n */\\nexport declare class MatDatepickerContent<D> extends _MatDatepickerContentMixinBase implements AfterViewInit, CanColor {\\n    /** Reference to the internal calendar component. */\\n    _calendar: MatCalendar<D>;\\n    /** Reference to the datepicker that created the overlay. */\\n    datepicker: MatDatepicker<D>;\\n    /** Whether the datepicker is above or below the input. */\\n    _isAbove: boolean;\\n    constructor(elementRef: ElementRef);\\n    ngAfterViewInit(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDatepickerContent<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatDatepickerContent<any>, \\\"mat-datepicker-content\\\", [\\\"matDatepickerContent\\\"], { 'color': \\\"color\\\" }, {}, never>;\\n}\\n/** Component responsible for managing the datepicker popup/dialog. */\\nexport declare class MatDatepicker<D> implements OnDestroy, CanColor {\\n    private _dialog;\\n    private _overlay;\\n    private _ngZone;\\n    private _viewContainerRef;\\n    private _dateAdapter;\\n    private _dir;\\n    private _document;\\n    private _scrollStrategy;\\n    /** An input indicating the type of the custom header component for the calendar, if set. */\\n    calendarHeaderComponent: ComponentType<any>;\\n    /** The date to open the calendar to initially. */\\n    startAt: D | null;\\n    private _startAt;\\n    /** The view that the calendar should start in. */\\n    startView: 'month' | 'year' | 'multi-year';\\n    /** Color palette to use on the datepicker's calendar. */\\n    color: ThemePalette;\\n    _color: ThemePalette;\\n    /**\\n     * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\\n     * than a popup and elements have more padding to allow for bigger touch targets.\\n     */\\n    touchUi: boolean;\\n    private _touchUi;\\n    /** Whether the datepicker pop-up should be disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /**\\n     * Emits selected year in multiyear view.\\n     * This doesn't imply a change on the selected date.\\n     */\\n    readonly yearSelected: EventEmitter<D>;\\n    /**\\n     * Emits selected month in year view.\\n     * This doesn't imply a change on the selected date.\\n     */\\n    readonly monthSelected: EventEmitter<D>;\\n    /** Classes to be passed to the date picker panel. Supports the same syntax as `ngClass`. */\\n    panelClass: string | string[];\\n    /** Function that can be used to add custom CSS classes to dates. */\\n    dateClass: (date: D) => MatCalendarCellCssClasses;\\n    /** Emits when the datepicker has been opened. */\\n    openedStream: EventEmitter<void>;\\n    /** Emits when the datepicker has been closed. */\\n    closedStream: EventEmitter<void>;\\n    /** Whether the calendar is open. */\\n    opened: boolean;\\n    private _opened;\\n    /** The id for the datepicker calendar. */\\n    id: string;\\n    /** The currently selected date. */\\n    _selected: D | null;\\n    private _validSelected;\\n    /** The minimum selectable date. */\\n    readonly _minDate: D | null;\\n    /** The maximum selectable date. */\\n    readonly _maxDate: D | null;\\n    readonly _dateFilter: (date: D | null) => boolean;\\n    /** A reference to the overlay when the calendar is opened as a popup. */\\n    _popupRef: OverlayRef;\\n    /** A reference to the dialog when the calendar is opened as a dialog. */\\n    private _dialogRef;\\n    /** A portal containing the calendar for this datepicker. */\\n    private _calendarPortal;\\n    /** Reference to the component instantiated in popup mode. */\\n    private _popupComponentRef;\\n    /** The element that was focused before the datepicker was opened. */\\n    private _focusedElementBeforeOpen;\\n    /** Subscription to value changes in the associated input element. */\\n    private _inputSubscription;\\n    /** The input element this datepicker is associated with. */\\n    _datepickerInput: MatDatepickerInput<D>;\\n    /** Emits when the datepicker is disabled. */\\n    readonly _disabledChange: Subject<boolean>;\\n    /** Emits new selected date when selected date changes. */\\n    readonly _selectedChanged: Subject<D>;\\n    constructor(_dialog: MatDialog, _overlay: Overlay, _ngZone: NgZone, _viewContainerRef: ViewContainerRef, scrollStrategy: any, _dateAdapter: DateAdapter<D>, _dir: Directionality, _document: any);\\n    ngOnDestroy(): void;\\n    /** Selects the given date */\\n    select(date: D): void;\\n    /** Emits the selected year in multiyear view */\\n    _selectYear(normalizedYear: D): void;\\n    /** Emits selected month in year view */\\n    _selectMonth(normalizedMonth: D): void;\\n    /**\\n     * Register an input with this datepicker.\\n     * @param input The datepicker input to register with this datepicker.\\n     */\\n    _registerInput(input: MatDatepickerInput<D>): void;\\n    /** Open the calendar. */\\n    open(): void;\\n    /** Close the calendar. */\\n    close(): void;\\n    /** Open the calendar as a dialog. */\\n    private _openAsDialog;\\n    /** Open the calendar as a popup. */\\n    private _openAsPopup;\\n    /** Create the popup. */\\n    private _createPopup;\\n    /** Create the popup PositionStrategy. */\\n    private _createPopupPositionStrategy;\\n    /**\\n     * @param obj The object to check.\\n     * @returns The given object if it is both a date instance and valid, otherwise null.\\n     */\\n    private _getValidDateOrNull;\\n    /** Passes the current theme color along to the calendar overlay. */\\n    private _setColor;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDatepicker<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatDatepicker<any>, \\\"mat-datepicker\\\", [\\\"matDatepicker\\\"], { 'startView': \\\"startView\\\", 'startAt': \\\"startAt\\\", 'color': \\\"color\\\", 'touchUi': \\\"touchUi\\\", 'disabled': \\\"disabled\\\", 'opened': \\\"opened\\\", 'calendarHeaderComponent': \\\"calendarHeaderComponent\\\", 'panelClass': \\\"panelClass\\\", 'dateClass': \\\"dateClass\\\" }, { 'yearSelected': \\\"yearSelected\\\", 'monthSelected': \\\"monthSelected\\\", 'openedStream': \\\"opened\\\", 'closedStream': \\\"closed\\\" }, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=datepicker.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/index.d.ts\",\n      \"node_modules/@angular/material/datepicker/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/month-view.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ChangeDetectorRef, EventEmitter } from '@angular/core';\\nimport { DateAdapter, MatDateFormats } from '@angular/material/core';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { MatCalendarBody, MatCalendarCell, MatCalendarCellCssClasses } from './calendar-body';\\n/**\\n * An internal component used to display a single month in the datepicker.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatMonthView<D> implements AfterContentInit {\\n    private _changeDetectorRef;\\n    private _dateFormats;\\n    _dateAdapter: DateAdapter<D>;\\n    private _dir?;\\n    /**\\n     * The date to display in this month view (everything other than the month and year is ignored).\\n     */\\n    activeDate: D;\\n    private _activeDate;\\n    /** The currently selected date. */\\n    selected: D | null;\\n    private _selected;\\n    /** The minimum selectable date. */\\n    minDate: D | null;\\n    private _minDate;\\n    /** The maximum selectable date. */\\n    maxDate: D | null;\\n    private _maxDate;\\n    /** Function used to filter which dates are selectable. */\\n    dateFilter: (date: D) => boolean;\\n    /** Function that can be used to add custom CSS classes to dates. */\\n    dateClass: (date: D) => MatCalendarCellCssClasses;\\n    /** Emits when a new date is selected. */\\n    readonly selectedChange: EventEmitter<D | null>;\\n    /** Emits when any date is selected. */\\n    readonly _userSelection: EventEmitter<void>;\\n    /** Emits when any date is activated. */\\n    readonly activeDateChange: EventEmitter<D>;\\n    /** The body of calendar table */\\n    _matCalendarBody: MatCalendarBody;\\n    /** The label for this month (e.g. \\\"January 2017\\\"). */\\n    _monthLabel: string;\\n    /** Grid of calendar cells representing the dates of the month. */\\n    _weeks: MatCalendarCell[][];\\n    /** The number of blank cells in the first row before the 1st of the month. */\\n    _firstWeekOffset: number;\\n    /**\\n     * The date of the month that the currently selected Date falls on.\\n     * Null if the currently selected Date is in another month.\\n     */\\n    _selectedDate: number | null;\\n    /** The date of the month that today falls on. Null if today is in another month. */\\n    _todayDate: number | null;\\n    /** The names of the weekdays. */\\n    _weekdays: {\\n        long: string;\\n        narrow: string;\\n    }[];\\n    constructor(_changeDetectorRef: ChangeDetectorRef, _dateFormats: MatDateFormats, _dateAdapter: DateAdapter<D>, _dir?: Directionality | undefined);\\n    ngAfterContentInit(): void;\\n    /** Handles when a new date is selected. */\\n    _dateSelected(date: number): void;\\n    /** Handles keydown events on the calendar body when calendar is in month view. */\\n    _handleCalendarBodyKeydown(event: KeyboardEvent): void;\\n    /** Initializes this month view. */\\n    _init(): void;\\n    /** Focuses the active cell after the microtask queue is empty. */\\n    _focusActiveCell(): void;\\n    /** Initializes the weekdays. */\\n    private _initWeekdays;\\n    /** Creates MatCalendarCells for the dates in this month. */\\n    private _createWeekCells;\\n    /** Date filter for the month */\\n    private _shouldEnableDate;\\n    /**\\n     * Gets the date in this month that the given Date falls on.\\n     * Returns null if the given Date is in another month.\\n     */\\n    private _getDateInCurrentMonth;\\n    /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\\n    private _hasSameMonthAndYear;\\n    /**\\n     * @param obj The object to check.\\n     * @returns The given object if it is both a date instance and valid, otherwise null.\\n     */\\n    private _getValidDateOrNull;\\n    /** Determines whether the user has the RTL layout direction. */\\n    private _isRtl;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatMonthView<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatMonthView<any>, \\\"mat-month-view\\\", [\\\"matMonthView\\\"], { 'activeDate': \\\"activeDate\\\", 'selected': \\\"selected\\\", 'minDate': \\\"minDate\\\", 'maxDate': \\\"maxDate\\\", 'dateFilter': \\\"dateFilter\\\", 'dateClass': \\\"dateClass\\\" }, { 'selectedChange': \\\"selectedChange\\\", '_userSelection': \\\"_userSelection\\\", 'activeDateChange': \\\"activeDateChange\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=month-view.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/multi-year-view.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ChangeDetectorRef, EventEmitter } from '@angular/core';\\nimport { DateAdapter } from '@angular/material/core';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { MatCalendarBody, MatCalendarCell } from './calendar-body';\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const yearsPerPage = 24;\\nexport declare const yearsPerRow = 4;\\n/**\\n * An internal component used to display a year selector in the datepicker.\\n * @docs-private\\n */\\nexport declare class MatMultiYearView<D> implements AfterContentInit {\\n    private _changeDetectorRef;\\n    _dateAdapter: DateAdapter<D>;\\n    private _dir?;\\n    /** The date to display in this multi-year view (everything other than the year is ignored). */\\n    activeDate: D;\\n    private _activeDate;\\n    /** The currently selected date. */\\n    selected: D | null;\\n    private _selected;\\n    /** The minimum selectable date. */\\n    minDate: D | null;\\n    private _minDate;\\n    /** The maximum selectable date. */\\n    maxDate: D | null;\\n    private _maxDate;\\n    /** A function used to filter which dates are selectable. */\\n    dateFilter: (date: D) => boolean;\\n    /** Emits when a new year is selected. */\\n    readonly selectedChange: EventEmitter<D>;\\n    /** Emits the selected year. This doesn't imply a change on the selected date */\\n    readonly yearSelected: EventEmitter<D>;\\n    /** Emits when any date is activated. */\\n    readonly activeDateChange: EventEmitter<D>;\\n    /** The body of calendar table */\\n    _matCalendarBody: MatCalendarBody;\\n    /** Grid of calendar cells representing the currently displayed years. */\\n    _years: MatCalendarCell[][];\\n    /** The year that today falls on. */\\n    _todayYear: number;\\n    /** The year of the selected date. Null if the selected date is null. */\\n    _selectedYear: number | null;\\n    constructor(_changeDetectorRef: ChangeDetectorRef, _dateAdapter: DateAdapter<D>, _dir?: Directionality | undefined);\\n    ngAfterContentInit(): void;\\n    /** Initializes this multi-year view. */\\n    _init(): void;\\n    /** Handles when a new year is selected. */\\n    _yearSelected(year: number): void;\\n    /** Handles keydown events on the calendar body when calendar is in multi-year view. */\\n    _handleCalendarBodyKeydown(event: KeyboardEvent): void;\\n    _getActiveCell(): number;\\n    /** Focuses the active cell after the microtask queue is empty. */\\n    _focusActiveCell(): void;\\n    /** Creates an MatCalendarCell for the given year. */\\n    private _createCellForYear;\\n    /** Whether the given year is enabled. */\\n    private _shouldEnableYear;\\n    /**\\n     * @param obj The object to check.\\n     * @returns The given object if it is both a date instance and valid, otherwise null.\\n     */\\n    private _getValidDateOrNull;\\n    /** Determines whether the user has the RTL layout direction. */\\n    private _isRtl;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatMultiYearView<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatMultiYearView<any>, \\\"mat-multi-year-view\\\", [\\\"matMultiYearView\\\"], { 'activeDate': \\\"activeDate\\\", 'selected': \\\"selected\\\", 'minDate': \\\"minDate\\\", 'maxDate': \\\"maxDate\\\", 'dateFilter': \\\"dateFilter\\\" }, { 'selectedChange': \\\"selectedChange\\\", 'yearSelected': \\\"yearSelected\\\", 'activeDateChange': \\\"activeDateChange\\\" }, never>;\\n}\\nexport declare function isSameMultiYearView<D>(dateAdapter: DateAdapter<D>, date1: D, date2: D, minDate: D | null, maxDate: D | null): boolean;\\n/**\\n * When the multi-year view is first opened, the active year will be in view.\\n * So we compute how many years are between the active year and the *slot* where our\\n * \\\"startingYear\\\" will render when paged into view.\\n */\\nexport declare function getActiveOffset<D>(dateAdapter: DateAdapter<D>, activeDate: D, minDate: D | null, maxDate: D | null): number;\\n\\n//# sourceMappingURL=multi-year-view.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './datepicker-module';\\nexport * from './calendar';\\nexport * from './calendar-body';\\nexport * from './datepicker';\\nexport * from './datepicker-animations';\\nexport * from './datepicker-input';\\nexport * from './datepicker-intl';\\nexport * from './datepicker-toggle';\\nexport * from './month-view';\\nexport * from './year-view';\\nexport { MatMultiYearView, yearsPerPage, yearsPerRow } from './multi-year-view';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/datepicker/year-view.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ChangeDetectorRef, EventEmitter } from '@angular/core';\\nimport { DateAdapter, MatDateFormats } from '@angular/material/core';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { MatCalendarBody, MatCalendarCell } from './calendar-body';\\n/**\\n * An internal component used to display a single year in the datepicker.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatYearView<D> implements AfterContentInit {\\n    private _changeDetectorRef;\\n    private _dateFormats;\\n    _dateAdapter: DateAdapter<D>;\\n    private _dir?;\\n    /** The date to display in this year view (everything other than the year is ignored). */\\n    activeDate: D;\\n    private _activeDate;\\n    /** The currently selected date. */\\n    selected: D | null;\\n    private _selected;\\n    /** The minimum selectable date. */\\n    minDate: D | null;\\n    private _minDate;\\n    /** The maximum selectable date. */\\n    maxDate: D | null;\\n    private _maxDate;\\n    /** A function used to filter which dates are selectable. */\\n    dateFilter: (date: D) => boolean;\\n    /** Emits when a new month is selected. */\\n    readonly selectedChange: EventEmitter<D>;\\n    /** Emits the selected month. This doesn't imply a change on the selected date */\\n    readonly monthSelected: EventEmitter<D>;\\n    /** Emits when any date is activated. */\\n    readonly activeDateChange: EventEmitter<D>;\\n    /** The body of calendar table */\\n    _matCalendarBody: MatCalendarBody;\\n    /** Grid of calendar cells representing the months of the year. */\\n    _months: MatCalendarCell[][];\\n    /** The label for this year (e.g. \\\"2017\\\"). */\\n    _yearLabel: string;\\n    /** The month in this year that today falls on. Null if today is in a different year. */\\n    _todayMonth: number | null;\\n    /**\\n     * The month in this year that the selected Date falls on.\\n     * Null if the selected Date is in a different year.\\n     */\\n    _selectedMonth: number | null;\\n    constructor(_changeDetectorRef: ChangeDetectorRef, _dateFormats: MatDateFormats, _dateAdapter: DateAdapter<D>, _dir?: Directionality | undefined);\\n    ngAfterContentInit(): void;\\n    /** Handles when a new month is selected. */\\n    _monthSelected(month: number): void;\\n    /** Handles keydown events on the calendar body when calendar is in year view. */\\n    _handleCalendarBodyKeydown(event: KeyboardEvent): void;\\n    /** Initializes this year view. */\\n    _init(): void;\\n    /** Focuses the active cell after the microtask queue is empty. */\\n    _focusActiveCell(): void;\\n    /**\\n     * Gets the month in this year that the given Date falls on.\\n     * Returns null if the given Date is in another year.\\n     */\\n    private _getMonthInCurrentYear;\\n    /** Creates an MatCalendarCell for the given month. */\\n    private _createCellForMonth;\\n    /** Whether the given month is enabled. */\\n    private _shouldEnableMonth;\\n    /**\\n     * Tests whether the combination month/year is after this.maxDate, considering\\n     * just the month and year of this.maxDate\\n     */\\n    private _isYearAndMonthAfterMaxDate;\\n    /**\\n     * Tests whether the combination month/year is before this.minDate, considering\\n     * just the month and year of this.minDate\\n     */\\n    private _isYearAndMonthBeforeMinDate;\\n    /**\\n     * @param obj The object to check.\\n     * @returns The given object if it is both a date instance and valid, otherwise null.\\n     */\\n    private _getValidDateOrNull;\\n    /** Determines whether the user has the RTL layout direction. */\\n    private _isRtl;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatYearView<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatYearView<any>, \\\"mat-year-view\\\", [\\\"matYearView\\\"], { 'activeDate': \\\"activeDate\\\", 'selected': \\\"selected\\\", 'minDate': \\\"minDate\\\", 'maxDate': \\\"maxDate\\\", 'dateFilter': \\\"dateFilter\\\" }, { 'selectedChange': \\\"selectedChange\\\", 'monthSelected': \\\"monthSelected\\\", 'activeDateChange': \\\"activeDateChange\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=year-view.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by MatDialog.\\n * @docs-private\\n */\\nexport declare const matDialogAnimations: {\\n    readonly dialogContainer: AnimationTriggerMetadata;\\n    readonly slideDialog: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ViewContainerRef, ComponentFactoryResolver } from '@angular/core';\\nimport { Direction } from '@angular/cdk/bidi';\\nimport { ScrollStrategy } from '@angular/cdk/overlay';\\n/** Valid ARIA roles for a dialog element. */\\nexport declare type DialogRole = 'dialog' | 'alertdialog';\\n/** Possible overrides for a dialog's position. */\\nexport interface DialogPosition {\\n    /** Override for the dialog's top position. */\\n    top?: string;\\n    /** Override for the dialog's bottom position. */\\n    bottom?: string;\\n    /** Override for the dialog's left position. */\\n    left?: string;\\n    /** Override for the dialog's right position. */\\n    right?: string;\\n}\\n/**\\n * Configuration for opening a modal dialog with the MatDialog service.\\n */\\nexport declare class MatDialogConfig<D = any> {\\n    /**\\n     * Where the attached component should live in Angular's *logical* component tree.\\n     * This affects what is available for injection and the change detection order for the\\n     * component instantiated inside of the dialog. This does not affect where the dialog\\n     * content will be rendered.\\n     */\\n    viewContainerRef?: ViewContainerRef;\\n    /** ID for the dialog. If omitted, a unique one will be generated. */\\n    id?: string;\\n    /** The ARIA role of the dialog element. */\\n    role?: DialogRole;\\n    /** Custom class for the overlay pane. */\\n    panelClass?: string | string[];\\n    /** Whether the dialog has a backdrop. */\\n    hasBackdrop?: boolean;\\n    /** Custom class for the backdrop. */\\n    backdropClass?: string;\\n    /** Whether the user can use escape or clicking on the backdrop to close the modal. */\\n    disableClose?: boolean;\\n    /** Width of the dialog. */\\n    width?: string;\\n    /** Height of the dialog. */\\n    height?: string;\\n    /** Min-width of the dialog. If a number is provided, assumes pixel units. */\\n    minWidth?: number | string;\\n    /** Min-height of the dialog. If a number is provided, assumes pixel units. */\\n    minHeight?: number | string;\\n    /** Max-width of the dialog. If a number is provided, assumes pixel units. Defaults to 80vw. */\\n    maxWidth?: number | string;\\n    /** Max-height of the dialog. If a number is provided, assumes pixel units. */\\n    maxHeight?: number | string;\\n    /** Position overrides. */\\n    position?: DialogPosition;\\n    /** Data being injected into the child component. */\\n    data?: D | null;\\n    /** Layout direction for the dialog's content. */\\n    direction?: Direction;\\n    /** ID of the element that describes the dialog. */\\n    ariaDescribedBy?: string | null;\\n    /** ID of the element that labels the dialog. */\\n    ariaLabelledBy?: string | null;\\n    /** Aria label to assign to the dialog element. */\\n    ariaLabel?: string | null;\\n    /** Whether the dialog should focus the first focusable element on open. */\\n    autoFocus?: boolean;\\n    /**\\n     * Whether the dialog should restore focus to the\\n     * previously-focused element, after it's closed.\\n     */\\n    restoreFocus?: boolean;\\n    /** Scroll strategy to be used for the dialog. */\\n    scrollStrategy?: ScrollStrategy;\\n    /**\\n     * Whether the dialog should close when the user goes backwards/forwards in history.\\n     * Note that this usually doesn't include clicking on links (unless the user is using\\n     * the `HashLocationStrategy`).\\n     */\\n    closeOnNavigation?: boolean;\\n    /** Alternate `ComponentFactoryResolver` to use when resolving the associated component. */\\n    componentFactoryResolver?: ComponentFactoryResolver;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog-container.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentRef, ElementRef, EmbeddedViewRef, EventEmitter, ChangeDetectorRef } from '@angular/core';\\nimport { AnimationEvent } from '@angular/animations';\\nimport { BasePortalOutlet, ComponentPortal, CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\\nimport { FocusTrapFactory } from '@angular/cdk/a11y';\\nimport { MatDialogConfig } from './dialog-config';\\n/**\\n * Throws an exception for the case when a ComponentPortal is\\n * attached to a DomPortalOutlet without an origin.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare function throwMatDialogContentAlreadyAttachedError(): void;\\n/**\\n * Internal component that wraps user-provided dialog content.\\n * Animation is based on https://material.io/guidelines/motion/choreography.html.\\n * @docs-private\\n */\\nexport declare class MatDialogContainer extends BasePortalOutlet {\\n    private _elementRef;\\n    private _focusTrapFactory;\\n    private _changeDetectorRef;\\n    private _document;\\n    /** The dialog configuration. */\\n    _config: MatDialogConfig;\\n    /** The portal outlet inside of this container into which the dialog content will be loaded. */\\n    _portalOutlet: CdkPortalOutlet;\\n    /** The class that traps and manages focus within the dialog. */\\n    private _focusTrap;\\n    /** Element that was focused before the dialog was opened. Save this to restore upon close. */\\n    private _elementFocusedBeforeDialogWasOpened;\\n    /** State of the dialog animation. */\\n    _state: 'void' | 'enter' | 'exit';\\n    /** Emits when an animation state changes. */\\n    _animationStateChanged: EventEmitter<AnimationEvent>;\\n    /** ID of the element that should be considered as the dialog's label. */\\n    _ariaLabelledBy: string | null;\\n    /** ID for the container DOM element. */\\n    _id: string;\\n    constructor(_elementRef: ElementRef, _focusTrapFactory: FocusTrapFactory, _changeDetectorRef: ChangeDetectorRef, _document: any, \\n    /** The dialog configuration. */\\n    _config: MatDialogConfig);\\n    /**\\n     * Attach a ComponentPortal as content to this dialog container.\\n     * @param portal Portal to be attached as the dialog content.\\n     */\\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    /**\\n     * Attach a TemplatePortal as content to this dialog container.\\n     * @param portal Portal to be attached as the dialog content.\\n     */\\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\\n    /** Moves the focus inside the focus trap. */\\n    private _trapFocus;\\n    /** Restores focus to the element that was focused before the dialog opened. */\\n    private _restoreFocus;\\n    /** Saves a reference to the element that was focused before the dialog was opened. */\\n    private _savePreviouslyFocusedElement;\\n    /** Callback, invoked whenever an animation on the host completes. */\\n    _onAnimationDone(event: AnimationEvent): void;\\n    /** Callback, invoked when an animation on the host starts. */\\n    _onAnimationStart(event: AnimationEvent): void;\\n    /** Starts the dialog exit animation. */\\n    _startExitAnimation(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDialogContainer>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatDialogContainer, \\\"mat-dialog-container\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=dialog-container.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog-content-directives.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OnChanges, OnInit, SimpleChanges, ElementRef } from '@angular/core';\\nimport { MatDialog } from './dialog';\\nimport { MatDialogRef } from './dialog-ref';\\n/**\\n * Button that will close the current dialog.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatDialogClose implements OnInit, OnChanges {\\n    dialogRef: MatDialogRef<any>;\\n    private _elementRef;\\n    private _dialog;\\n    /** Screenreader label for the button. */\\n    ariaLabel: string;\\n    /** Default to \\\"button\\\" to prevents accidental form submits. */\\n    type: 'submit' | 'button' | 'reset';\\n    /** Dialog close input. */\\n    dialogResult: any;\\n    _matDialogClose: any;\\n    constructor(dialogRef: MatDialogRef<any>, _elementRef: ElementRef<HTMLElement>, _dialog: MatDialog);\\n    ngOnInit(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDialogClose>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatDialogClose, \\\"[mat-dialog-close], [matDialogClose]\\\", [\\\"matDialogClose\\\"], { 'type': \\\"type\\\", 'dialogResult': \\\"mat-dialog-close\\\", 'ariaLabel': \\\"aria-label\\\", '_matDialogClose': \\\"matDialogClose\\\" }, {}, never>;\\n}\\n/**\\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\\n */\\nexport declare class MatDialogTitle implements OnInit {\\n    private _dialogRef;\\n    private _elementRef;\\n    private _dialog;\\n    id: string;\\n    constructor(_dialogRef: MatDialogRef<any>, _elementRef: ElementRef<HTMLElement>, _dialog: MatDialog);\\n    ngOnInit(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDialogTitle>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatDialogTitle, \\\"[mat-dialog-title], [matDialogTitle]\\\", [\\\"matDialogTitle\\\"], { 'id': \\\"id\\\" }, {}, never>;\\n}\\n/**\\n * Scrollable content container of a dialog.\\n */\\nexport declare class MatDialogContent {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDialogContent>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatDialogContent, \\\"[mat-dialog-content], mat-dialog-content, [matDialogContent]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Container for the bottom action buttons in a dialog.\\n * Stays fixed to the bottom when scrolling.\\n */\\nexport declare class MatDialogActions {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDialogActions>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatDialogActions, \\\"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=dialog-content-directives.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './dialog-container';\\nimport * as ɵngcc2 from './dialog-content-directives';\\nimport * as ɵngcc3 from '@angular/common';\\nimport * as ɵngcc4 from '@angular/cdk/overlay';\\nimport * as ɵngcc5 from '@angular/cdk/portal';\\nimport * as ɵngcc6 from '@angular/material/core';\\nexport declare class MatDialogModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatDialogModule, [typeof ɵngcc1.MatDialogContainer, typeof ɵngcc2.MatDialogClose, typeof ɵngcc2.MatDialogTitle, typeof ɵngcc2.MatDialogActions, typeof ɵngcc2.MatDialogContent], [typeof ɵngcc3.CommonModule, typeof ɵngcc4.OverlayModule, typeof ɵngcc5.PortalModule, typeof ɵngcc6.MatCommonModule], [typeof ɵngcc1.MatDialogContainer, typeof ɵngcc2.MatDialogClose, typeof ɵngcc2.MatDialogTitle, typeof ɵngcc2.MatDialogContent, typeof ɵngcc2.MatDialogActions, typeof ɵngcc6.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatDialogModule>;\\n}\\n\\n//# sourceMappingURL=dialog-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OverlayRef } from '@angular/cdk/overlay';\\nimport { Location } from '@angular/common';\\nimport { Observable } from 'rxjs';\\nimport { DialogPosition } from './dialog-config';\\nimport { MatDialogContainer } from './dialog-container';\\n/** Possible states of the lifecycle of a dialog. */\\nexport declare const enum MatDialogState {\\n    OPEN = 0,\\n    CLOSING = 1,\\n    CLOSED = 2\\n}\\n/**\\n * Reference to a dialog opened via the MatDialog service.\\n */\\nexport declare class MatDialogRef<T, R = any> {\\n    private _overlayRef;\\n    _containerInstance: MatDialogContainer;\\n    readonly id: string;\\n    /** The instance of component opened into the dialog. */\\n    componentInstance: T;\\n    /** Whether the user is allowed to close the dialog. */\\n    disableClose: boolean | undefined;\\n    /** Subject for notifying the user that the dialog has finished opening. */\\n    private readonly _afterOpened;\\n    /** Subject for notifying the user that the dialog has finished closing. */\\n    private readonly _afterClosed;\\n    /** Subject for notifying the user that the dialog has started closing. */\\n    private readonly _beforeClosed;\\n    /** Result to be passed to afterClosed. */\\n    private _result;\\n    /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\\n    private _closeFallbackTimeout;\\n    /** Current state of the dialog. */\\n    private _state;\\n    constructor(_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, _location?: Location, id?: string);\\n    /**\\n     * Close the dialog.\\n     * @param dialogResult Optional result to return to the dialog opener.\\n     */\\n    close(dialogResult?: R): void;\\n    /**\\n     * Gets an observable that is notified when the dialog is finished opening.\\n     */\\n    afterOpened(): Observable<void>;\\n    /**\\n     * Gets an observable that is notified when the dialog is finished closing.\\n     */\\n    afterClosed(): Observable<R | undefined>;\\n    /**\\n     * Gets an observable that is notified when the dialog has started closing.\\n     */\\n    beforeClosed(): Observable<R | undefined>;\\n    /**\\n     * Gets an observable that emits when the overlay's backdrop has been clicked.\\n     */\\n    backdropClick(): Observable<MouseEvent>;\\n    /**\\n     * Gets an observable that emits when keydown events are targeted on the overlay.\\n     */\\n    keydownEvents(): Observable<KeyboardEvent>;\\n    /**\\n     * Updates the dialog's position.\\n     * @param position New dialog position.\\n     */\\n    updatePosition(position?: DialogPosition): this;\\n    /**\\n     * Updates the dialog's width and height.\\n     * @param width New width of the dialog.\\n     * @param height New height of the dialog.\\n     */\\n    updateSize(width?: string, height?: string): this;\\n    /** Add a CSS class or an array of classes to the overlay pane. */\\n    addPanelClass(classes: string | string[]): this;\\n    /** Remove a CSS class or an array of classes from the overlay pane. */\\n    removePanelClass(classes: string | string[]): this;\\n    /**\\n     * Gets an observable that is notified when the dialog is finished opening.\\n     * @deprecated Use `afterOpened` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    afterOpen(): Observable<void>;\\n    /**\\n     * Gets an observable that is notified when the dialog has started closing.\\n     * @deprecated Use `beforeClosed` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    beforeClose(): Observable<R | undefined>;\\n    /** Gets the current state of the dialog's lifecycle. */\\n    getState(): MatDialogState;\\n    /** Fetches the position strategy object from the overlay ref. */\\n    private _getPositionStrategy;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/dialog.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Overlay, OverlayContainer, ScrollStrategy } from '@angular/cdk/overlay';\\nimport { ComponentType } from '@angular/cdk/portal';\\nimport { Location } from '@angular/common';\\nimport { InjectionToken, Injector, OnDestroy, TemplateRef } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\nimport { MatDialogConfig } from './dialog-config';\\nimport { MatDialogRef } from './dialog-ref';\\n/** Injection token that can be used to access the data that was passed in to a dialog. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_DIALOG_DATA: InjectionToken<any>;\\n/** Injection token that can be used to specify default dialog options. */\\nexport declare const MAT_DIALOG_DEFAULT_OPTIONS: InjectionToken<MatDialogConfig<any>>;\\n/** Injection token that determines the scroll handling while the dialog is open. */\\nexport declare const MAT_DIALOG_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private */\\nexport declare function MAT_DIALOG_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY;\\n};\\n/**\\n * Service to open Material Design modal dialogs.\\n */\\nexport declare class MatDialog implements OnDestroy {\\n    private _overlay;\\n    private _injector;\\n    private _location;\\n    private _defaultOptions;\\n    private _parentDialog;\\n    private _overlayContainer;\\n    private _openDialogsAtThisLevel;\\n    private readonly _afterAllClosedAtThisLevel;\\n    private readonly _afterOpenedAtThisLevel;\\n    private _ariaHiddenElements;\\n    private _scrollStrategy;\\n    /** Keeps track of the currently-open dialogs. */\\n    readonly openDialogs: MatDialogRef<any>[];\\n    /** Stream that emits when a dialog has been opened. */\\n    readonly afterOpened: Subject<MatDialogRef<any>>;\\n    /**\\n     * Stream that emits when a dialog has been opened.\\n     * @deprecated Use `afterOpened` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    readonly afterOpen: Subject<MatDialogRef<any>>;\\n    readonly _afterAllClosed: Subject<void>;\\n    /**\\n     * Stream that emits when all open dialog have finished closing.\\n     * Will emit on subscribe if there are no open dialogs to begin with.\\n     */\\n    readonly afterAllClosed: Observable<void>;\\n    constructor(_overlay: Overlay, _injector: Injector, _location: Location, _defaultOptions: MatDialogConfig, scrollStrategy: any, _parentDialog: MatDialog, _overlayContainer: OverlayContainer);\\n    /**\\n     * Opens a modal dialog containing the given component.\\n     * @param componentOrTemplateRef Type of the component to load into the dialog,\\n     *     or a TemplateRef to instantiate as the dialog content.\\n     * @param config Extra configuration options.\\n     * @returns Reference to the newly-opened dialog.\\n     */\\n    open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>, config?: MatDialogConfig<D>): MatDialogRef<T, R>;\\n    /**\\n     * Closes all of the currently-open dialogs.\\n     */\\n    closeAll(): void;\\n    /**\\n     * Finds an open dialog by its id.\\n     * @param id ID to use when looking up the dialog.\\n     */\\n    getDialogById(id: string): MatDialogRef<any> | undefined;\\n    ngOnDestroy(): void;\\n    /**\\n     * Creates the overlay into which the dialog will be loaded.\\n     * @param config The dialog configuration.\\n     * @returns A promise resolving to the OverlayRef for the created overlay.\\n     */\\n    private _createOverlay;\\n    /**\\n     * Creates an overlay config from a dialog config.\\n     * @param dialogConfig The dialog configuration.\\n     * @returns The overlay configuration.\\n     */\\n    private _getOverlayConfig;\\n    /**\\n     * Attaches an MatDialogContainer to a dialog's already-created overlay.\\n     * @param overlay Reference to the dialog's underlying overlay.\\n     * @param config The dialog configuration.\\n     * @returns A promise resolving to a ComponentRef for the attached container.\\n     */\\n    private _attachDialogContainer;\\n    /**\\n     * Attaches the user-provided component to the already-created MatDialogContainer.\\n     * @param componentOrTemplateRef The type of component being loaded into the dialog,\\n     *     or a TemplateRef to instantiate as the content.\\n     * @param dialogContainer Reference to the wrapping MatDialogContainer.\\n     * @param overlayRef Reference to the overlay in which the dialog resides.\\n     * @param config The dialog configuration.\\n     * @returns A promise resolving to the MatDialogRef that should be returned to the user.\\n     */\\n    private _attachDialogContent;\\n    /**\\n     * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\\n     * of a dialog to close itself and, optionally, to return a value.\\n     * @param config Config object that is used to construct the dialog.\\n     * @param dialogRef Reference to the dialog.\\n     * @param container Dialog container element that wraps all of the contents.\\n     * @returns The custom injector that can be used inside the dialog.\\n     */\\n    private _createInjector;\\n    /**\\n     * Removes a dialog from the array of open dialogs.\\n     * @param dialogRef Dialog to be removed.\\n     */\\n    private _removeOpenDialog;\\n    /**\\n     * Hides all of the content that isn't an overlay from assistive technology.\\n     */\\n    private _hideNonDialogContentFromAssistiveTechnology;\\n    /** Closes all of the dialogs in an array. */\\n    private _closeDialogs;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatDialog>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MatDialog>;\\n}\\n\\n//# sourceMappingURL=dialog.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/index.d.ts\",\n      \"node_modules/@angular/material/dialog/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './dialog-module';\\nexport * from './dialog';\\nexport * from './dialog-container';\\nexport * from './dialog-content-directives';\\nexport * from './dialog-config';\\nexport * from './dialog-ref';\\nexport * from './dialog-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/testing/dialog-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface DialogHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/testing/dialog-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { DialogRole } from '@angular/material/dialog';\\nimport { DialogHarnessFilters } from './dialog-harness-filters';\\n/**\\n * Harness for interacting with a standard MatDialog in tests.\\n * @dynamic\\n */\\nexport declare class MatDialogHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a dialog with\\n     * specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `id` finds a dialog with specific id.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: DialogHarnessFilters): HarnessPredicate<MatDialogHarness>;\\n    /** Gets the id of the dialog. */\\n    getId(): Promise<string | null>;\\n    /** Gets the role of the dialog. */\\n    getRole(): Promise<DialogRole | null>;\\n    /** Gets the value of the dialog's \\\"aria-label\\\" attribute. */\\n    getAriaLabel(): Promise<string | null>;\\n    /** Gets the value of the dialog's \\\"aria-labelledby\\\" attribute. */\\n    getAriaLabelledby(): Promise<string | null>;\\n    /** Gets the value of the dialog's \\\"aria-describedby\\\" attribute. */\\n    getAriaDescribedby(): Promise<string | null>;\\n    /**\\n     * Closes the dialog by pressing escape. Note that this method cannot\\n     * be used if \\\"disableClose\\\" has been set to true for the dialog.\\n     */\\n    close(): Promise<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/testing/index.d.ts\",\n      \"node_modules/@angular/material/dialog/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/dialog/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './dialog-harness';\\nexport * from './dialog-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/divider/divider-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatDividerModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/divider/divider.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatDivider {\\n    /** Whether the divider is vertically aligned. */\\n    vertical: boolean;\\n    private _vertical;\\n    /** Whether the divider is an inset divider. */\\n    inset: boolean;\\n    private _inset;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/divider/index.d.ts\",\n      \"node_modules/@angular/material/divider/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/divider/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './divider';\\nexport * from './divider-module';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/accordion-base.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\nimport { CdkAccordion } from '@angular/cdk/accordion';\\n/** MatAccordion's display modes. */\\nexport declare type MatAccordionDisplayMode = 'default' | 'flat';\\n/** MatAccordion's toggle positions. */\\nexport declare type MatAccordionTogglePosition = 'before' | 'after';\\n/**\\n * Base interface for a `MatAccordion`.\\n * @docs-private\\n */\\nexport interface MatAccordionBase extends CdkAccordion {\\n    /** Whether the expansion indicator should be hidden. */\\n    hideToggle: boolean;\\n    /** Display mode used for all expansion panels in the accordion. */\\n    displayMode: MatAccordionDisplayMode;\\n    /** The position of the expansion indicator. */\\n    togglePosition: MatAccordionTogglePosition;\\n    /** Handles keyboard events coming in from the panel headers. */\\n    _handleHeaderKeydown: (event: KeyboardEvent) => void;\\n    /** Handles focus events on the panel headers. */\\n    _handleHeaderFocus: (header: any) => void;\\n}\\n/**\\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\\n */\\nexport declare const MAT_ACCORDION: InjectionToken<MatAccordionBase>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/accordion.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { QueryList, AfterContentInit } from '@angular/core';\\nimport { CdkAccordion } from '@angular/cdk/accordion';\\nimport { MatAccordionBase, MatAccordionDisplayMode, MatAccordionTogglePosition } from './accordion-base';\\nimport { MatExpansionPanelHeader } from './expansion-panel-header';\\n/**\\n * Directive for a Material Design Accordion.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatAccordion extends CdkAccordion implements MatAccordionBase, AfterContentInit {\\n    private _keyManager;\\n    _headers: QueryList<MatExpansionPanelHeader>;\\n    /** Whether the expansion indicator should be hidden. */\\n    hideToggle: boolean;\\n    private _hideToggle;\\n    /**\\n     * Display mode used for all expansion panels in the accordion. Currently two display\\n     * modes exist:\\n     *  default - a gutter-like spacing is placed around any expanded panel, placing the expanded\\n     *     panel at a different elevation from the rest of the accordion.\\n     *  flat - no spacing is placed around expanded panels, showing all panels at the same\\n     *     elevation.\\n     */\\n    displayMode: MatAccordionDisplayMode;\\n    /** The position of the expansion indicator. */\\n    togglePosition: MatAccordionTogglePosition;\\n    ngAfterContentInit(): void;\\n    /** Handles keyboard events coming in from the panel headers. */\\n    _handleHeaderKeydown(event: KeyboardEvent): void;\\n    _handleHeaderFocus(header: MatExpansionPanelHeader): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatAccordion>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatAccordion, \\\"mat-accordion\\\", [\\\"matAccordion\\\"], { 'multi': \\\"multi\\\", 'displayMode': \\\"displayMode\\\", 'togglePosition': \\\"togglePosition\\\", 'hideToggle': \\\"hideToggle\\\" }, {}, [\\\"_headers\\\"]>;\\n}\\n\\n//# sourceMappingURL=accordion.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/expansion-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/** Time and timing curve for expansion panel animations. */\\nexport declare const EXPANSION_PANEL_ANIMATION_TIMING = \\\"225ms cubic-bezier(0.4,0.0,0.2,1)\\\";\\n/**\\n * Animations used by the Material expansion panel.\\n *\\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\\n * causes the animation state of moved components to become `void` upon exit, and not update again\\n * upon reentry into the DOM.  This can lead a to situation for the expansion panel where the state\\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\\n *\\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\\n * are defined to have the same styles. Since angular animates from the current styles to the\\n * destination state's style definition, in situations where we are moving from `void`'s styles to\\n * `collapsed` this acts a noop since no style values change.\\n *\\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\\n * occur as expected.\\n *\\n * Angular Bug: https://github.com/angular/angular/issues/18847\\n *\\n * @docs-private\\n */\\nexport declare const matExpansionAnimations: {\\n    readonly indicatorRotate: AnimationTriggerMetadata;\\n    readonly expansionHeaderHeight: AnimationTriggerMetadata;\\n    readonly bodyExpansion: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/expansion-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './accordion';\\nimport * as ɵngcc2 from './expansion-panel';\\nimport * as ɵngcc3 from './expansion-panel-header';\\nimport * as ɵngcc4 from './expansion-panel-content';\\nimport * as ɵngcc5 from '@angular/common';\\nimport * as ɵngcc6 from '@angular/cdk/accordion';\\nimport * as ɵngcc7 from '@angular/cdk/portal';\\nexport declare class MatExpansionModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatExpansionModule, [typeof ɵngcc1.MatAccordion, typeof ɵngcc2.MatExpansionPanel, typeof ɵngcc2.MatExpansionPanelActionRow, typeof ɵngcc3.MatExpansionPanelHeader, typeof ɵngcc3.MatExpansionPanelTitle, typeof ɵngcc3.MatExpansionPanelDescription, typeof ɵngcc4.MatExpansionPanelContent], [typeof ɵngcc5.CommonModule, typeof ɵngcc6.CdkAccordionModule, typeof ɵngcc7.PortalModule], [typeof ɵngcc1.MatAccordion, typeof ɵngcc2.MatExpansionPanel, typeof ɵngcc2.MatExpansionPanelActionRow, typeof ɵngcc3.MatExpansionPanelHeader, typeof ɵngcc3.MatExpansionPanelTitle, typeof ɵngcc3.MatExpansionPanelDescription, typeof ɵngcc4.MatExpansionPanelContent]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatExpansionModule>;\\n}\\n\\n//# sourceMappingURL=expansion-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/expansion-panel-content.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\n/**\\n * Expansion panel content that will be rendered lazily\\n * after the panel is opened for the first time.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatExpansionPanelContent {\\n    _template: TemplateRef<any>;\\n    constructor(_template: TemplateRef<any>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatExpansionPanelContent>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatExpansionPanelContent, \\\"ng-template[matExpansionPanelContent]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=expansion-panel-content.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/expansion-panel-header.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor, FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\\nimport { ChangeDetectorRef, ElementRef, OnDestroy } from '@angular/core';\\nimport { MatExpansionPanel, MatExpansionPanelDefaultOptions } from './expansion-panel';\\nimport { MatAccordionTogglePosition } from './accordion-base';\\n/**\\n * `<mat-expansion-panel-header>`\\n *\\n * This component corresponds to the header element of an `<mat-expansion-panel>`.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatExpansionPanelHeader implements OnDestroy, FocusableOption {\\n    panel: MatExpansionPanel;\\n    private _element;\\n    private _focusMonitor;\\n    private _changeDetectorRef;\\n    private _parentChangeSubscription;\\n    /** Whether Angular animations in the panel header should be disabled. */\\n    _animationsDisabled: boolean;\\n    constructor(panel: MatExpansionPanel, _element: ElementRef, _focusMonitor: FocusMonitor, _changeDetectorRef: ChangeDetectorRef, defaultOptions?: MatExpansionPanelDefaultOptions);\\n    _animationStarted(): void;\\n    /** Height of the header while the panel is expanded. */\\n    expandedHeight: string;\\n    /** Height of the header while the panel is collapsed. */\\n    collapsedHeight: string;\\n    /**\\n     * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\\n     * @docs-private\\n     */\\n    readonly disabled: any;\\n    /** Toggles the expanded state of the panel. */\\n    _toggle(): void;\\n    /** Gets whether the panel is expanded. */\\n    _isExpanded(): boolean;\\n    /** Gets the expanded state string of the panel. */\\n    _getExpandedState(): string;\\n    /** Gets the panel id. */\\n    _getPanelId(): string;\\n    /** Gets the toggle position for the header. */\\n    _getTogglePosition(): MatAccordionTogglePosition;\\n    /** Gets whether the expand indicator should be shown. */\\n    _showToggle(): boolean;\\n    /** Handle keydown event calling to toggle() if appropriate. */\\n    _keydown(event: KeyboardEvent): void;\\n    /**\\n     * Focuses the panel header. Implemented as a part of `FocusableOption`.\\n     * @param origin Origin of the action that triggered the focus.\\n     * @docs-private\\n     */\\n    focus(origin?: FocusOrigin, options?: FocusOptions): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatExpansionPanelHeader>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatExpansionPanelHeader, \\\"mat-expansion-panel-header\\\", never, { 'expandedHeight': \\\"expandedHeight\\\", 'collapsedHeight': \\\"collapsedHeight\\\" }, {}, never>;\\n}\\n/**\\n * `<mat-panel-description>`\\n *\\n * This directive is to be used inside of the MatExpansionPanelHeader component.\\n */\\nexport declare class MatExpansionPanelDescription {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatExpansionPanelDescription>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatExpansionPanelDescription, \\\"mat-panel-description\\\", never, {}, {}, never>;\\n}\\n/**\\n * `<mat-panel-title>`\\n *\\n * This directive is to be used inside of the MatExpansionPanelHeader component.\\n */\\nexport declare class MatExpansionPanelTitle {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatExpansionPanelTitle>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatExpansionPanelTitle, \\\"mat-panel-title\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=expansion-panel-header.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/expansion-panel.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationEvent } from '@angular/animations';\\nimport { CdkAccordionItem } from '@angular/cdk/accordion';\\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\\nimport { TemplatePortal } from '@angular/cdk/portal';\\nimport { AfterContentInit, ChangeDetectorRef, EventEmitter, ElementRef, OnChanges, OnDestroy, SimpleChanges, ViewContainerRef, InjectionToken } from '@angular/core';\\nimport { Subject } from 'rxjs';\\nimport { MatExpansionPanelContent } from './expansion-panel-content';\\nimport { MatAccordionBase, MatAccordionTogglePosition } from './accordion-base';\\n/** MatExpansionPanel's states. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type MatExpansionPanelState = 'expanded' | 'collapsed';\\n/**\\n * Object that can be used to override the default options\\n * for all of the expansion panels in a module.\\n */\\nexport interface MatExpansionPanelDefaultOptions {\\n    /** Height of the header while the panel is expanded. */\\n    expandedHeight: string;\\n    /** Height of the header while the panel is collapsed. */\\n    collapsedHeight: string;\\n    /** Whether the toggle indicator should be hidden. */\\n    hideToggle: boolean;\\n}\\n/**\\n * Injection token that can be used to configure the defalt\\n * options for the expansion panel component.\\n */\\nexport declare const MAT_EXPANSION_PANEL_DEFAULT_OPTIONS: InjectionToken<MatExpansionPanelDefaultOptions>;\\n/**\\n * `<mat-expansion-panel>`\\n *\\n * This component can be used as a single element to show expandable content, or as one of\\n * multiple children of an element with the MatAccordion directive attached.\\n */\\nexport declare class MatExpansionPanel extends CdkAccordionItem implements AfterContentInit, OnChanges, OnDestroy {\\n    private _viewContainerRef;\\n    _animationMode: string;\\n    private _document;\\n    private _hideToggle;\\n    private _togglePosition;\\n    /** Whether the toggle indicator should be hidden. */\\n    hideToggle: boolean;\\n    /** The position of the expansion indicator. */\\n    togglePosition: MatAccordionTogglePosition;\\n    /** An event emitted after the body's expansion animation happens. */\\n    afterExpand: EventEmitter<void>;\\n    /** An event emitted after the body's collapse animation happens. */\\n    afterCollapse: EventEmitter<void>;\\n    /** Stream that emits for changes in `@Input` properties. */\\n    readonly _inputChanges: Subject<SimpleChanges>;\\n    /** Optionally defined accordion the expansion panel belongs to. */\\n    accordion: MatAccordionBase;\\n    /** Content that will be rendered lazily. */\\n    _lazyContent: MatExpansionPanelContent;\\n    /** Element containing the panel's user-provided content. */\\n    _body: ElementRef<HTMLElement>;\\n    /** Portal holding the user's content. */\\n    _portal: TemplatePortal;\\n    /** ID for the associated header element. Used for a11y labelling. */\\n    _headerId: string;\\n    /** Stream of body animation done events. */\\n    _bodyAnimationDone: Subject<AnimationEvent>;\\n    constructor(accordion: MatAccordionBase, _changeDetectorRef: ChangeDetectorRef, _uniqueSelectionDispatcher: UniqueSelectionDispatcher, _viewContainerRef: ViewContainerRef, _document: any, _animationMode: string, defaultOptions?: MatExpansionPanelDefaultOptions);\\n    /** Determines whether the expansion panel should have spacing between it and its siblings. */\\n    _hasSpacing(): boolean;\\n    /** Gets the expanded state string. */\\n    _getExpandedState(): MatExpansionPanelState;\\n    ngAfterContentInit(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    /** Checks whether the expansion panel's content contains the currently-focused element. */\\n    _containsFocus(): boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatExpansionPanel>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatExpansionPanel, \\\"mat-expansion-panel\\\", [\\\"matExpansionPanel\\\"], { 'disabled': \\\"disabled\\\", 'expanded': \\\"expanded\\\", 'hideToggle': \\\"hideToggle\\\", 'togglePosition': \\\"togglePosition\\\" }, { 'opened': \\\"opened\\\", 'closed': \\\"closed\\\", 'expandedChange': \\\"expandedChange\\\", 'afterExpand': \\\"afterExpand\\\", 'afterCollapse': \\\"afterCollapse\\\" }, [\\\"_lazyContent\\\"]>;\\n}\\nexport declare class MatExpansionPanelActionRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatExpansionPanelActionRow>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatExpansionPanelActionRow, \\\"mat-action-row\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=expansion-panel.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/index.d.ts\",\n      \"node_modules/@angular/material/expansion/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/expansion/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './expansion-module';\\nexport * from './accordion';\\nexport * from './accordion-base';\\nexport * from './expansion-panel';\\nexport * from './expansion-panel-header';\\nexport * from './expansion-panel-content';\\nexport * from './expansion-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/error.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Single error message to be shown underneath the form field. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatError {\\n    id: string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatError>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatError, \\\"mat-error\\\", never, { 'id': \\\"id\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=error.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/form-field-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the MatFormField.\\n * @docs-private\\n */\\nexport declare const matFormFieldAnimations: {\\n    readonly transitionMessages: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/form-field-control.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Observable } from 'rxjs';\\nimport { NgControl } from '@angular/forms';\\n/** An interface which allows a control to work inside of a `MatFormField`. */\\nexport declare abstract class MatFormFieldControl<T> {\\n    /** The value of the control. */\\n    value: T | null;\\n    /**\\n     * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\\n     * needs to run change detection.\\n     */\\n    readonly stateChanges: Observable<void>;\\n    /** The element ID for this control. */\\n    readonly id: string;\\n    /** The placeholder for this control. */\\n    readonly placeholder: string;\\n    /** Gets the NgControl for this control. */\\n    readonly ngControl: NgControl | null;\\n    /** Whether the control is focused. */\\n    readonly focused: boolean;\\n    /** Whether the control is empty. */\\n    readonly empty: boolean;\\n    /** Whether the `MatFormField` label should try to float. */\\n    readonly shouldLabelFloat: boolean;\\n    /** Whether the control is required. */\\n    readonly required: boolean;\\n    /** Whether the control is disabled. */\\n    readonly disabled: boolean;\\n    /** Whether the control is in an error state. */\\n    readonly errorState: boolean;\\n    /**\\n     * An optional name for the control type that can be used to distinguish `mat-form-field` elements\\n     * based on their control type. The form field will add a class,\\n     * `mat-form-field-type-{{controlType}}` to its root element.\\n     */\\n    readonly controlType?: string;\\n    /**\\n     * Whether the input is currently in an autofilled state. If property is not present on the\\n     * control it is assumed to be false.\\n     */\\n    readonly autofilled?: boolean;\\n    /** Sets the list of element IDs that currently describe this control. */\\n    abstract setDescribedByIds(ids: string[]): void;\\n    /** Handles a click on the control's container. */\\n    abstract onContainerClick(event: MouseEvent): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/form-field-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare function getMatFormFieldPlaceholderConflictError(): Error;\\n/** @docs-private */\\nexport declare function getMatFormFieldDuplicatedHintError(align: string): Error;\\n/** @docs-private */\\nexport declare function getMatFormFieldMissingControlError(): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/form-field-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './error';\\nimport * as ɵngcc2 from './form-field';\\nimport * as ɵngcc3 from './hint';\\nimport * as ɵngcc4 from './label';\\nimport * as ɵngcc5 from './placeholder';\\nimport * as ɵngcc6 from './prefix';\\nimport * as ɵngcc7 from './suffix';\\nimport * as ɵngcc8 from '@angular/common';\\nimport * as ɵngcc9 from '@angular/cdk/observers';\\nexport declare class MatFormFieldModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatFormFieldModule, [typeof ɵngcc1.MatError, typeof ɵngcc2.MatFormField, typeof ɵngcc3.MatHint, typeof ɵngcc4.MatLabel, typeof ɵngcc5.MatPlaceholder, typeof ɵngcc6.MatPrefix, typeof ɵngcc7.MatSuffix], [typeof ɵngcc8.CommonModule, typeof ɵngcc9.ObserversModule], [typeof ɵngcc1.MatError, typeof ɵngcc2.MatFormField, typeof ɵngcc3.MatHint, typeof ɵngcc4.MatLabel, typeof ɵngcc5.MatPlaceholder, typeof ɵngcc6.MatPrefix, typeof ɵngcc7.MatSuffix]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatFormFieldModule>;\\n}\\n\\n//# sourceMappingURL=form-field-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/form-field.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { AfterContentChecked, AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, InjectionToken, NgZone, QueryList, OnDestroy } from '@angular/core';\\nimport { CanColor, CanColorCtor, FloatLabelType, LabelOptions } from '@angular/material/core';\\nimport { MatError } from './error';\\nimport { MatFormFieldControl } from './form-field-control';\\nimport { MatHint } from './hint';\\nimport { MatLabel } from './label';\\nimport { MatPlaceholder } from './placeholder';\\nimport { MatPrefix } from './prefix';\\nimport { MatSuffix } from './suffix';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { NgControl } from '@angular/forms';\\n/**\\n * Boilerplate for applying mixins to MatFormField.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatFormFieldBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\n/**\\n * Base class to which we're applying the form field mixins.\\n * @docs-private\\n */\\ndeclare const _MatFormFieldMixinBase: CanColorCtor & typeof MatFormFieldBase;\\n/** Possible appearance styles for the form field. */\\nexport declare type MatFormFieldAppearance = 'legacy' | 'standard' | 'fill' | 'outline';\\n/**\\n * Represents the default options for the form field that can be configured\\n * using the `MAT_FORM_FIELD_DEFAULT_OPTIONS` injection token.\\n */\\nexport interface MatFormFieldDefaultOptions {\\n    appearance?: MatFormFieldAppearance;\\n    hideRequiredMarker?: boolean;\\n}\\n/**\\n * Injection token that can be used to configure the\\n * default options for all form field within an app.\\n */\\nexport declare const MAT_FORM_FIELD_DEFAULT_OPTIONS: InjectionToken<MatFormFieldDefaultOptions>;\\n/** Container for form controls that applies Material Design styling and behavior. */\\nexport declare class MatFormField extends _MatFormFieldMixinBase implements AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy, CanColor {\\n    _elementRef: ElementRef;\\n    private _changeDetectorRef;\\n    private _dir;\\n    private _defaults;\\n    private _platform;\\n    private _ngZone;\\n    private _labelOptions;\\n    /**\\n     * Whether the outline gap needs to be calculated\\n     * immediately on the next change detection run.\\n     */\\n    private _outlineGapCalculationNeededImmediately;\\n    /** Whether the outline gap needs to be calculated next time the zone has stabilized. */\\n    private _outlineGapCalculationNeededOnStable;\\n    private _destroyed;\\n    /** The form-field appearance style. */\\n    appearance: MatFormFieldAppearance;\\n    _appearance: MatFormFieldAppearance;\\n    /** Whether the required marker should be hidden. */\\n    hideRequiredMarker: boolean;\\n    private _hideRequiredMarker;\\n    /** Override for the logic that disables the label animation in certain cases. */\\n    private _showAlwaysAnimate;\\n    /** Whether the floating label should always float or not. */\\n    readonly _shouldAlwaysFloat: boolean;\\n    /** Whether the label can float or not. */\\n    readonly _canLabelFloat: boolean;\\n    /** State of the mat-hint and mat-error animations. */\\n    _subscriptAnimationState: string;\\n    /** Text for the form field hint. */\\n    hintLabel: string;\\n    private _hintLabel;\\n    _hintLabelId: string;\\n    _labelId: string;\\n    /**\\n     * Whether the label should always float, never float or float as the user types.\\n     *\\n     * Note: only the legacy appearance supports the `never` option. `never` was originally added as a\\n     * way to make the floating label emulate the behavior of a standard input placeholder. However\\n     * the form field now supports both floating labels and placeholders. Therefore in the non-legacy\\n     * appearances the `never` option has been disabled in favor of just using the placeholder.\\n     */\\n    floatLabel: FloatLabelType;\\n    private _floatLabel;\\n    /** Whether the Angular animations are enabled. */\\n    _animationsEnabled: boolean;\\n    private _previousDirection;\\n    /**\\n     * @deprecated\\n     * @breaking-change 8.0.0\\n     */\\n    underlineRef: ElementRef;\\n    _connectionContainerRef: ElementRef;\\n    _inputContainerRef: ElementRef;\\n    private _label;\\n    _controlNonStatic: MatFormFieldControl<any>;\\n    _controlStatic: MatFormFieldControl<any>;\\n    _control: MatFormFieldControl<any>;\\n    private _explicitFormFieldControl;\\n    _labelChildNonStatic: MatLabel;\\n    _labelChildStatic: MatLabel;\\n    readonly _labelChild: MatLabel;\\n    _placeholderChild: MatPlaceholder;\\n    _errorChildren: QueryList<MatError>;\\n    _hintChildren: QueryList<MatHint>;\\n    _prefixChildren: QueryList<MatPrefix>;\\n    _suffixChildren: QueryList<MatSuffix>;\\n    constructor(_elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, labelOptions: LabelOptions, _dir: Directionality, _defaults: MatFormFieldDefaultOptions, _platform: Platform, _ngZone: NgZone, _animationMode: string);\\n    /**\\n     * Gets an ElementRef for the element that a overlay attached to the form-field should be\\n     * positioned relative to.\\n     */\\n    getConnectedOverlayOrigin(): ElementRef;\\n    ngAfterContentInit(): void;\\n    ngAfterContentChecked(): void;\\n    ngAfterViewInit(): void;\\n    ngOnDestroy(): void;\\n    /** Determines whether a class from the NgControl should be forwarded to the host element. */\\n    _shouldForward(prop: keyof NgControl): boolean;\\n    _hasPlaceholder(): boolean;\\n    _hasLabel(): boolean;\\n    _shouldLabelFloat(): boolean;\\n    _hideControlPlaceholder(): boolean;\\n    _hasFloatingLabel(): boolean;\\n    /** Determines whether to display hints or errors. */\\n    _getDisplayedMessages(): 'error' | 'hint';\\n    /** Animates the placeholder up and locks it in position. */\\n    _animateAndLockLabel(): void;\\n    /**\\n     * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\\n     * or child element with the `mat-placeholder` directive).\\n     */\\n    private _validatePlaceholders;\\n    /** Does any extra processing that is required when handling the hints. */\\n    private _processHints;\\n    /**\\n     * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the\\n     * attribute being considered as `align=\\\"start\\\"`.\\n     */\\n    private _validateHints;\\n    /**\\n     * Sets the list of element IDs that describe the child control. This allows the control to update\\n     * its `aria-describedby` attribute accordingly.\\n     */\\n    private _syncDescribedByIds;\\n    /** Throws an error if the form field's control is missing. */\\n    protected _validateControlChild(): void;\\n    /**\\n     * Updates the width and position of the gap in the outline. Only relevant for the outline\\n     * appearance.\\n     */\\n    updateOutlineGap(): void;\\n    /** Gets the start end of the rect considering the current directionality. */\\n    private _getStartEnd;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatFormField>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatFormField, \\\"mat-form-field\\\", [\\\"matFormField\\\"], { 'color': \\\"color\\\", 'floatLabel': \\\"floatLabel\\\", 'appearance': \\\"appearance\\\", 'hideRequiredMarker': \\\"hideRequiredMarker\\\", 'hintLabel': \\\"hintLabel\\\" }, {}, [\\\"_controlNonStatic\\\", \\\"_controlStatic\\\", \\\"_labelChildNonStatic\\\", \\\"_labelChildStatic\\\", \\\"_placeholderChild\\\", \\\"_errorChildren\\\", \\\"_hintChildren\\\", \\\"_prefixChildren\\\", \\\"_suffixChildren\\\"]>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=form-field.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/hint.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Hint text to be shown underneath the form field control. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatHint {\\n    /** Whether to align the hint label at the start or end of the line. */\\n    align: 'start' | 'end';\\n    /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\\n    id: string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatHint>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatHint, \\\"mat-hint\\\", never, { 'align': \\\"align\\\", 'id': \\\"id\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=hint.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/index.d.ts\",\n      \"node_modules/@angular/material/form-field/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/label.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** The floating label for a `mat-form-field`. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatLabel {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatLabel>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatLabel, \\\"mat-label\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=label.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/placeholder.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * The placeholder text for an `MatFormField`.\\n * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the\\n *     placeholder.\\n * @breaking-change 8.0.0\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatPlaceholder {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatPlaceholder>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatPlaceholder, \\\"mat-placeholder\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=placeholder.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/prefix.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Prefix to be placed in front of the form field. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatPrefix {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatPrefix>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatPrefix, \\\"[matPrefix]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=prefix.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './form-field-module';\\nexport * from './error';\\nexport * from './form-field';\\nexport * from './form-field-control';\\nexport * from './form-field-errors';\\nexport * from './hint';\\nexport * from './placeholder';\\nexport * from './prefix';\\nexport * from './suffix';\\nexport * from './label';\\nexport * from './form-field-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/form-field/suffix.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** Suffix to be placed at the end of the form field. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatSuffix {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSuffix>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatSuffix, \\\"[matSuffix]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=suffix.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/grid-list-base.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/**\\n * Injection token used to provide a grid list to a tile and to avoid circular imports.\\n * @docs-private\\n */\\nexport declare const MAT_GRID_LIST: InjectionToken<MatGridListBase>;\\n/**\\n * Base interface for a `MatGridList`.\\n * @docs-private\\n */\\nexport interface MatGridListBase {\\n    cols: number;\\n    gutterSize: string;\\n    rowHeight: number | string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/grid-list-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatGridListModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/grid-list.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentChecked, OnInit, QueryList, ElementRef } from '@angular/core';\\nimport { MatGridTile } from './grid-tile';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { MatGridListBase } from './grid-list-base';\\nexport declare class MatGridList implements MatGridListBase, OnInit, AfterContentChecked {\\n    private _element;\\n    private _dir;\\n    /** Number of columns being rendered. */\\n    private _cols;\\n    /** Used for determiningthe position of each tile in the grid. */\\n    private _tileCoordinator;\\n    /**\\n     * Row height value passed in by user. This can be one of three types:\\n     * - Number value (ex: \\\"100px\\\"):  sets a fixed row height to that value\\n     * - Ratio value (ex: \\\"4:3\\\"): sets the row height based on width:height ratio\\n     * - \\\"Fit\\\" mode (ex: \\\"fit\\\"): sets the row height to total height divided by number of rows\\n     */\\n    private _rowHeight;\\n    /** The amount of space between tiles. This will be something like '5px' or '2em'. */\\n    private _gutter;\\n    /** Sets position and size styles for a tile */\\n    private _tileStyler;\\n    /** Query list of tiles that are being rendered. */\\n    _tiles: QueryList<MatGridTile>;\\n    constructor(_element: ElementRef<HTMLElement>, _dir: Directionality);\\n    /** Amount of columns in the grid list. */\\n    cols: number;\\n    /** Size of the grid list's gutter in pixels. */\\n    gutterSize: string;\\n    /** Set internal representation of row height from the user-provided value. */\\n    rowHeight: string | number;\\n    ngOnInit(): void;\\n    /**\\n     * The layout calculation is fairly cheap if nothing changes, so there's little cost\\n     * to run it frequently.\\n     */\\n    ngAfterContentChecked(): void;\\n    /** Throw a friendly error if cols property is missing */\\n    private _checkCols;\\n    /** Default to equal width:height if rowHeight property is missing */\\n    private _checkRowHeight;\\n    /** Creates correct Tile Styler subtype based on rowHeight passed in by user */\\n    private _setTileStyler;\\n    /** Computes and applies the size and position for all children grid tiles. */\\n    private _layoutTiles;\\n    /** Sets style on the main grid-list element, given the style name and value. */\\n    _setListStyle(style: [string, string | null] | null): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/grid-tile.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, QueryList, AfterContentInit } from '@angular/core';\\nimport { MatLine } from '@angular/material/core';\\nimport { MatGridListBase } from './grid-list-base';\\nexport declare class MatGridTile {\\n    private _element;\\n    _gridList?: MatGridListBase | undefined;\\n    _rowspan: number;\\n    _colspan: number;\\n    constructor(_element: ElementRef<HTMLElement>, _gridList?: MatGridListBase | undefined);\\n    /** Amount of rows that the grid tile takes up. */\\n    rowspan: number;\\n    /** Amount of columns that the grid tile takes up. */\\n    colspan: number;\\n    /**\\n     * Sets the style of the grid-tile element.  Needs to be set manually to avoid\\n     * \\\"Changed after checked\\\" errors that would occur with HostBinding.\\n     */\\n    _setStyle(property: string, value: any): void;\\n}\\nexport declare class MatGridTileText implements AfterContentInit {\\n    private _element;\\n    _lines: QueryList<MatLine>;\\n    constructor(_element: ElementRef<HTMLElement>);\\n    ngAfterContentInit(): void;\\n}\\n/**\\n * Directive whose purpose is to add the mat- CSS styling to this selector.\\n * @docs-private\\n */\\nexport declare class MatGridAvatarCssMatStyler {\\n}\\n/**\\n * Directive whose purpose is to add the mat- CSS styling to this selector.\\n * @docs-private\\n */\\nexport declare class MatGridTileHeaderCssMatStyler {\\n}\\n/**\\n * Directive whose purpose is to add the mat- CSS styling to this selector.\\n * @docs-private\\n */\\nexport declare class MatGridTileFooterCssMatStyler {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/index.d.ts\",\n      \"node_modules/@angular/material/grid-list/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { MAT_GRID_LIST as ɵangular_material_src_material_grid_list_grid_list_a, MatGridListBase as ɵangular_material_src_material_grid_list_grid_list_b } from './grid-list-base';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './grid-list-module';\\nexport * from './grid-list';\\nexport * from './grid-tile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/tile-coordinator.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { MatGridTile } from './grid-tile';\\n/**\\n * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\\n * because the tiles can have a rowspan.\\n *\\n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\\n * large enough to accommodate it so that the tiles still render in the same order in which they\\n * are given.\\n *\\n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\\n * element of the array corresponds to a column, and the value indicates how many cells in that\\n * column are already occupied; zero indicates an empty cell. Moving \\\"down\\\" to the next row\\n * decrements each value in the tracking array (indicating that the column is one cell closer to\\n * being free).\\n *\\n * @docs-private\\n */\\nexport declare class TileCoordinator {\\n    /** Tracking array (see class description). */\\n    tracker: number[];\\n    /** Index at which the search for the next gap will start. */\\n    columnIndex: number;\\n    /** The current row index. */\\n    rowIndex: number;\\n    /** Gets the total number of rows occupied by tiles */\\n    readonly rowCount: number;\\n    /**\\n     * Gets the total span of rows occupied by tiles.\\n     * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\\n     */\\n    readonly rowspan: number;\\n    /** The computed (row, col) position of each tile (the output). */\\n    positions: TilePosition[];\\n    /**\\n     * Updates the tile positions.\\n     * @param numColumns Amount of columns in the grid.\\n     */\\n    update(numColumns: number, tiles: MatGridTile[]): void;\\n    /** Calculates the row and col position of a tile. */\\n    private _trackTile;\\n    /** Finds the next available space large enough to fit the tile. */\\n    private _findMatchingGap;\\n    /** Move \\\"down\\\" to the next row. */\\n    private _nextRow;\\n    /**\\n     * Finds the end index (exclusive) of a gap given the index from which to start looking.\\n     * The gap ends when a non-zero value is found.\\n     */\\n    private _findGapEndIndex;\\n    /** Update the tile tracker to account for the given tile in the given space. */\\n    private _markTilePosition;\\n}\\n/**\\n * Simple data structure for tile position (row, col).\\n * @docs-private\\n */\\nexport declare class TilePosition {\\n    row: number;\\n    col: number;\\n    constructor(row: number, col: number);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/grid-list/tile-styler.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { MatGridList } from './grid-list';\\nimport { MatGridTile } from './grid-tile';\\nimport { TileCoordinator } from './tile-coordinator';\\n/**\\n * Sets the style properties for an individual tile, given the position calculated by the\\n * Tile Coordinator.\\n * @docs-private\\n */\\nexport declare abstract class TileStyler {\\n    _gutterSize: string;\\n    _rows: number;\\n    _rowspan: number;\\n    _cols: number;\\n    _direction: string;\\n    /**\\n     * Adds grid-list layout info once it is available. Cannot be processed in the constructor\\n     * because these properties haven't been calculated by that point.\\n     *\\n     * @param gutterSize Size of the grid's gutter.\\n     * @param tracker Instance of the TileCoordinator.\\n     * @param cols Amount of columns in the grid.\\n     * @param direction Layout direction of the grid.\\n     */\\n    init(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string): void;\\n    /**\\n     * Computes the amount of space a single 1x1 tile would take up (width or height).\\n     * Used as a basis for other calculations.\\n     * @param sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\\n     * @param gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\\n     * @return The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\\n     */\\n    getBaseTileSize(sizePercent: number, gutterFraction: number): string;\\n    /**\\n     * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\\n     * @param offset Number of tiles that have already been rendered in the row/column.\\n     * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\\n     * @return Position of the tile as a CSS calc() expression.\\n     */\\n    getTilePosition(baseSize: string, offset: number): string;\\n    /**\\n     * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\\n     * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\\n     * @param span The tile's rowspan or colspan.\\n     * @return Size of the tile as a CSS calc() expression.\\n     */\\n    getTileSize(baseSize: string, span: number): string;\\n    /**\\n     * Sets the style properties to be applied to a tile for the given row and column index.\\n     * @param tile Tile to which to apply the styling.\\n     * @param rowIndex Index of the tile's row.\\n     * @param colIndex Index of the tile's column.\\n     */\\n    setStyle(tile: MatGridTile, rowIndex: number, colIndex: number): void;\\n    /** Sets the horizontal placement of the tile in the list. */\\n    setColStyles(tile: MatGridTile, colIndex: number, percentWidth: number, gutterWidth: number): void;\\n    /**\\n     * Calculates the total size taken up by gutters across one axis of a list.\\n     */\\n    getGutterSpan(): string;\\n    /**\\n     * Calculates the total size taken up by tiles across one axis of a list.\\n     * @param tileHeight Height of the tile.\\n     */\\n    getTileSpan(tileHeight: string): string;\\n    /**\\n     * Sets the vertical placement of the tile in the list.\\n     * This method will be implemented by each type of TileStyler.\\n     * @docs-private\\n     */\\n    abstract setRowStyles(tile: MatGridTile, rowIndex: number, percentWidth: number, gutterWidth: number): void;\\n    /**\\n     * Calculates the computed height and returns the correct style property to set.\\n     * This method can be implemented by each type of TileStyler.\\n     * @docs-private\\n     */\\n    getComputedHeight(): [string, string] | null;\\n    /**\\n     * Called when the tile styler is swapped out with a different one. To be used for cleanup.\\n     * @param list Grid list that the styler was attached to.\\n     * @docs-private\\n     */\\n    abstract reset(list: MatGridList): void;\\n}\\n/**\\n * This type of styler is instantiated when the user passes in a fixed row height.\\n * Example `<mat-grid-list cols=\\\"3\\\" rowHeight=\\\"100px\\\">`\\n * @docs-private\\n */\\nexport declare class FixedTileStyler extends TileStyler {\\n    fixedRowHeight: string;\\n    constructor(fixedRowHeight: string);\\n    init(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string): void;\\n    setRowStyles(tile: MatGridTile, rowIndex: number): void;\\n    getComputedHeight(): [string, string];\\n    reset(list: MatGridList): void;\\n}\\n/**\\n * This type of styler is instantiated when the user passes in a width:height ratio\\n * for the row height.  Example `<mat-grid-list cols=\\\"3\\\" rowHeight=\\\"3:1\\\">`\\n * @docs-private\\n */\\nexport declare class RatioTileStyler extends TileStyler {\\n    /** Ratio width:height given by user to determine row height. */\\n    rowHeightRatio: number;\\n    baseTileHeight: string;\\n    constructor(value: string);\\n    setRowStyles(tile: MatGridTile, rowIndex: number, percentWidth: number, gutterWidth: number): void;\\n    getComputedHeight(): [string, string];\\n    reset(list: MatGridList): void;\\n    private _parseRatio;\\n}\\n/**\\n * This type of styler is instantiated when the user selects a \\\"fit\\\" row height mode.\\n * In other words, the row height will reflect the total height of the container divided\\n * by the number of rows.  Example `<mat-grid-list cols=\\\"3\\\" rowHeight=\\\"fit\\\">`\\n *\\n * @docs-private\\n */\\nexport declare class FitTileStyler extends TileStyler {\\n    setRowStyles(tile: MatGridTile, rowIndex: number): void;\\n    reset(list: MatGridList): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/icon/fake-svgs.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Fake URLs and associated SVG documents used by tests.\\n * The ID attribute is used to load the icons, the name attribute is only used for testing.\\n * @docs-private\\n */\\nexport declare const FAKE_SVGS: {\\n    cat: string;\\n    dog: string;\\n    dogWithSpaces: string;\\n    farmSet1: string;\\n    farmSet2: string;\\n    farmSet3: string;\\n    farmSet4: string;\\n    farmSet5: string;\\n    arrows: string;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/icon/icon-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './icon';\\nimport * as ɵngcc2 from '@angular/material/core';\\nexport declare class MatIconModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatIconModule, [typeof ɵngcc1.MatIcon], [typeof ɵngcc2.MatCommonModule], [typeof ɵngcc1.MatIcon, typeof ɵngcc2.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatIconModule>;\\n}\\n\\n//# sourceMappingURL=icon-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/icon/icon-registry.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { HttpClient } from '@angular/common/http';\\nimport { ErrorHandler, Optional, OnDestroy } from '@angular/core';\\nimport { DomSanitizer, SafeResourceUrl, SafeHtml } from '@angular/platform-browser';\\nimport { Observable } from 'rxjs';\\n/**\\n * Returns an exception to be thrown in the case when attempting to\\n * load an icon with a name that cannot be found.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare function getMatIconNameNotFoundError(iconName: string): Error;\\n/**\\n * Returns an exception to be thrown when the consumer attempts to use\\n * `<mat-icon>` without including @angular/common/http.\\n * @docs-private\\n */\\nexport declare function getMatIconNoHttpProviderError(): Error;\\n/**\\n * Returns an exception to be thrown when a URL couldn't be sanitized.\\n * @param url URL that was attempted to be sanitized.\\n * @docs-private\\n */\\nexport declare function getMatIconFailedToSanitizeUrlError(url: SafeResourceUrl): Error;\\n/**\\n * Returns an exception to be thrown when a HTML string couldn't be sanitized.\\n * @param literal HTML that was attempted to be sanitized.\\n * @docs-private\\n */\\nexport declare function getMatIconFailedToSanitizeLiteralError(literal: SafeHtml): Error;\\n/** Options that can be used to configure how an icon or the icons in an icon set are presented. */\\nexport interface IconOptions {\\n    /** View box to set on the icon. */\\n    viewBox?: string;\\n}\\n/**\\n * Service to register and display icons used by the `<mat-icon>` component.\\n * - Registers icon URLs by namespace and name.\\n * - Registers icon set URLs by namespace.\\n * - Registers aliases for CSS classes, for use with icon fonts.\\n * - Loads icons from URLs and extracts individual icons from icon sets.\\n */\\nexport declare class MatIconRegistry implements OnDestroy {\\n    private _httpClient;\\n    private _sanitizer;\\n    private readonly _errorHandler?;\\n    private _document;\\n    /**\\n     * URLs and cached SVG elements for individual icons. Keys are of the format \\\"[namespace]:[icon]\\\".\\n     */\\n    private _svgIconConfigs;\\n    /**\\n     * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\\n     * Multiple icon sets can be registered under the same namespace.\\n     */\\n    private _iconSetConfigs;\\n    /** Cache for icons loaded by direct URLs. */\\n    private _cachedIconsByUrl;\\n    /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */\\n    private _inProgressUrlFetches;\\n    /** Map from font identifiers to their CSS class names. Used for icon fonts. */\\n    private _fontCssClassesByAlias;\\n    /**\\n     * The CSS class to apply when an `<mat-icon>` component has no icon name, url, or font specified.\\n     * The default 'material-icons' value assumes that the material icon font has been loaded as\\n     * described at http://google.github.io/material-design-icons/#icon-font-for-the-web\\n     */\\n    private _defaultFontSetClass;\\n    constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, document: any, _errorHandler?: ErrorHandler | undefined);\\n    /**\\n     * Registers an icon by URL in the default namespace.\\n     * @param iconName Name under which the icon should be registered.\\n     * @param url\\n     */\\n    addSvgIcon(iconName: string, url: SafeResourceUrl, options?: IconOptions): this;\\n    /**\\n     * Registers an icon using an HTML string in the default namespace.\\n     * @param iconName Name under which the icon should be registered.\\n     * @param literal SVG source of the icon.\\n     */\\n    addSvgIconLiteral(iconName: string, literal: SafeHtml, options?: IconOptions): this;\\n    /**\\n     * Registers an icon by URL in the specified namespace.\\n     * @param namespace Namespace in which the icon should be registered.\\n     * @param iconName Name under which the icon should be registered.\\n     * @param url\\n     */\\n    addSvgIconInNamespace(namespace: string, iconName: string, url: SafeResourceUrl, options?: IconOptions): this;\\n    /**\\n     * Registers an icon using an HTML string in the specified namespace.\\n     * @param namespace Namespace in which the icon should be registered.\\n     * @param iconName Name under which the icon should be registered.\\n     * @param literal SVG source of the icon.\\n     */\\n    addSvgIconLiteralInNamespace(namespace: string, iconName: string, literal: SafeHtml, options?: IconOptions): this;\\n    /**\\n     * Registers an icon set by URL in the default namespace.\\n     * @param url\\n     */\\n    addSvgIconSet(url: SafeResourceUrl, options?: IconOptions): this;\\n    /**\\n     * Registers an icon set using an HTML string in the default namespace.\\n     * @param literal SVG source of the icon set.\\n     */\\n    addSvgIconSetLiteral(literal: SafeHtml, options?: IconOptions): this;\\n    /**\\n     * Registers an icon set by URL in the specified namespace.\\n     * @param namespace Namespace in which to register the icon set.\\n     * @param url\\n     */\\n    addSvgIconSetInNamespace(namespace: string, url: SafeResourceUrl, options?: IconOptions): this;\\n    /**\\n     * Registers an icon set using an HTML string in the specified namespace.\\n     * @param namespace Namespace in which to register the icon set.\\n     * @param literal SVG source of the icon set.\\n     */\\n    addSvgIconSetLiteralInNamespace(namespace: string, literal: SafeHtml, options?: IconOptions): this;\\n    /**\\n     * Defines an alias for a CSS class name to be used for icon fonts. Creating an matIcon\\n     * component with the alias as the fontSet input will cause the class name to be applied\\n     * to the `<mat-icon>` element.\\n     *\\n     * @param alias Alias for the font.\\n     * @param className Class name override to be used instead of the alias.\\n     */\\n    registerFontClassAlias(alias: string, className?: string): this;\\n    /**\\n     * Returns the CSS class name associated with the alias by a previous call to\\n     * registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.\\n     */\\n    classNameForFontAlias(alias: string): string;\\n    /**\\n     * Sets the CSS class name to be used for icon fonts when an `<mat-icon>` component does not\\n     * have a fontSet input value, and is not loading an icon by name or URL.\\n     *\\n     * @param className\\n     */\\n    setDefaultFontSetClass(className: string): this;\\n    /**\\n     * Returns the CSS class name to be used for icon fonts when an `<mat-icon>` component does not\\n     * have a fontSet input value, and is not loading an icon by name or URL.\\n     */\\n    getDefaultFontSetClass(): string;\\n    /**\\n     * Returns an Observable that produces the icon (as an `<svg>` DOM element) from the given URL.\\n     * The response from the URL may be cached so this will not always cause an HTTP request, but\\n     * the produced element will always be a new copy of the originally fetched icon. (That is,\\n     * it will not contain any modifications made to elements previously returned).\\n     *\\n     * @param safeUrl URL from which to fetch the SVG icon.\\n     */\\n    getSvgIconFromUrl(safeUrl: SafeResourceUrl): Observable<SVGElement>;\\n    /**\\n     * Returns an Observable that produces the icon (as an `<svg>` DOM element) with the given name\\n     * and namespace. The icon must have been previously registered with addIcon or addIconSet;\\n     * if not, the Observable will throw an error.\\n     *\\n     * @param name Name of the icon to be retrieved.\\n     * @param namespace Namespace in which to look for the icon.\\n     */\\n    getNamedSvgIcon(name: string, namespace?: string): Observable<SVGElement>;\\n    ngOnDestroy(): void;\\n    /**\\n     * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\\n     */\\n    private _getSvgFromConfig;\\n    /**\\n     * Attempts to find an icon with the specified name in any of the SVG icon sets.\\n     * First searches the available cached icons for a nested element with a matching name, and\\n     * if found copies the element to a new `<svg>` element. If not found, fetches all icon sets\\n     * that have not been cached, and searches again after all fetches are completed.\\n     * The returned Observable produces the SVG element if possible, and throws\\n     * an error if no icon with the specified name can be found.\\n     */\\n    private _getSvgFromIconSetConfigs;\\n    /**\\n     * Searches the cached SVG elements for the given icon sets for a nested icon element whose \\\"id\\\"\\n     * tag matches the specified name. If found, copies the nested element to a new SVG element and\\n     * returns it. Returns null if no matching element is found.\\n     */\\n    private _extractIconWithNameFromAnySet;\\n    /**\\n     * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element\\n     * from it.\\n     */\\n    private _loadSvgIconFromConfig;\\n    /**\\n     * Loads the content of the icon set URL specified in the SvgIconConfig and creates an SVG element\\n     * from it.\\n     */\\n    private _loadSvgIconSetFromConfig;\\n    /**\\n     * Creates a DOM element from the given SVG string, and adds default attributes.\\n     */\\n    private _createSvgElementForSingleIcon;\\n    /**\\n     * Searches the cached element of the given SvgIconConfig for a nested icon element whose \\\"id\\\"\\n     * tag matches the specified name. If found, copies the nested element to a new SVG element and\\n     * returns it. Returns null if no matching element is found.\\n     */\\n    private _extractSvgIconFromSet;\\n    /**\\n     * Creates a DOM element from the given SVG string.\\n     */\\n    private _svgElementFromString;\\n    /**\\n     * Converts an element into an SVG node by cloning all of its children.\\n     */\\n    private _toSvgElement;\\n    /**\\n     * Sets the default attributes for an SVG element to be used as an icon.\\n     */\\n    private _setSvgAttributes;\\n    /**\\n     * Returns an Observable which produces the string contents of the given URL. Results may be\\n     * cached, so future calls with the same URL may not cause another HTTP request.\\n     */\\n    private _fetchUrl;\\n    /**\\n     * Registers an icon config by name in the specified namespace.\\n     * @param namespace Namespace in which to register the icon config.\\n     * @param iconName Name under which to register the config.\\n     * @param config Config to be registered.\\n     */\\n    private _addSvgIconConfig;\\n    /**\\n     * Registers an icon set config in the specified namespace.\\n     * @param namespace Namespace in which to register the icon config.\\n     * @param config Config to be registered.\\n     */\\n    private _addSvgIconSetConfig;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatIconRegistry>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MatIconRegistry>;\\n}\\n/** @docs-private */\\nexport declare function ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry: MatIconRegistry, httpClient: HttpClient, sanitizer: DomSanitizer, document?: any, errorHandler?: ErrorHandler): MatIconRegistry;\\n/** @docs-private */\\nexport declare const ICON_REGISTRY_PROVIDER: {\\n    provide: typeof MatIconRegistry;\\n    deps: (Optional[] | typeof DomSanitizer)[];\\n    useFactory: typeof ICON_REGISTRY_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=icon-registry.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/icon/icon.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterViewChecked, ElementRef, ErrorHandler, InjectionToken, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\\nimport { CanColor, CanColorCtor } from '@angular/material/core';\\nimport { MatIconRegistry } from './icon-registry';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatIconBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatIconMixinBase: CanColorCtor & typeof MatIconBase;\\n/**\\n * Injection token used to provide the current location to `MatIcon`.\\n * Used to handle server-side rendering and to stub out during unit tests.\\n * @docs-private\\n */\\nexport declare const MAT_ICON_LOCATION: InjectionToken<MatIconLocation>;\\n/**\\n * Stubbed out location for `MatIcon`.\\n * @docs-private\\n */\\nexport interface MatIconLocation {\\n    getPathname: () => string;\\n}\\n/** @docs-private */\\nexport declare function MAT_ICON_LOCATION_FACTORY(): MatIconLocation;\\n/**\\n * Component to display an icon. It can be used in the following ways:\\n *\\n * - Specify the svgIcon input to load an SVG icon from a URL previously registered with the\\n *   addSvgIcon, addSvgIconInNamespace, addSvgIconSet, or addSvgIconSetInNamespace methods of\\n *   MatIconRegistry. If the svgIcon value contains a colon it is assumed to be in the format\\n *   \\\"[namespace]:[name]\\\", if not the value will be the name of an icon in the default namespace.\\n *   Examples:\\n *     `<mat-icon svgIcon=\\\"left-arrow\\\"></mat-icon>\\n *     <mat-icon svgIcon=\\\"animals:cat\\\"></mat-icon>`\\n *\\n * - Use a font ligature as an icon by putting the ligature text in the content of the `<mat-icon>`\\n *   component. By default the Material icons font is used as described at\\n *   http://google.github.io/material-design-icons/#icon-font-for-the-web. You can specify an\\n *   alternate font by setting the fontSet input to either the CSS class to apply to use the\\n *   desired font, or to an alias previously registered with MatIconRegistry.registerFontClassAlias.\\n *   Examples:\\n *     `<mat-icon>home</mat-icon>\\n *     <mat-icon fontSet=\\\"myfont\\\">sun</mat-icon>`\\n *\\n * - Specify a font glyph to be included via CSS rules by setting the fontSet input to specify the\\n *   font, and the fontIcon input to specify the icon. Typically the fontIcon will specify a\\n *   CSS class which causes the glyph to be displayed via a :before selector, as in\\n *   https://fortawesome.github.io/Font-Awesome/examples/\\n *   Example:\\n *     `<mat-icon fontSet=\\\"fa\\\" fontIcon=\\\"alarm\\\"></mat-icon>`\\n */\\nexport declare class MatIcon extends _MatIconMixinBase implements OnChanges, OnInit, AfterViewChecked, CanColor, OnDestroy {\\n    private _iconRegistry;\\n    /**\\n     * @deprecated `location` parameter to be made required.\\n     * @breaking-change 8.0.0\\n     */\\n    private _location?;\\n    private readonly _errorHandler?;\\n    /**\\n     * Whether the icon should be inlined, automatically sizing the icon to match the font size of\\n     * the element the icon is contained in.\\n     */\\n    inline: boolean;\\n    private _inline;\\n    /** Name of the icon in the SVG icon set. */\\n    svgIcon: string;\\n    /** Font set that the icon is a part of. */\\n    fontSet: string;\\n    private _fontSet;\\n    /** Name of an icon within a font set. */\\n    fontIcon: string;\\n    private _fontIcon;\\n    private _previousFontSetClass;\\n    private _previousFontIconClass;\\n    /** Keeps track of the current page path. */\\n    private _previousPath?;\\n    /** Keeps track of the elements and attributes that we've prefixed with the current path. */\\n    private _elementsWithExternalReferences?;\\n    constructor(elementRef: ElementRef<HTMLElement>, _iconRegistry: MatIconRegistry, ariaHidden: string, \\n    /**\\n     * @deprecated `location` parameter to be made required.\\n     * @breaking-change 8.0.0\\n     */\\n    _location?: MatIconLocation | undefined, _errorHandler?: ErrorHandler | undefined);\\n    /**\\n     * Splits an svgIcon binding value into its icon set and icon name components.\\n     * Returns a 2-element array of [(icon set), (icon name)].\\n     * The separator for the two fields is ':'. If there is no separator, an empty\\n     * string is returned for the icon set and the entire value is returned for\\n     * the icon name. If the argument is falsy, returns an array of two empty strings.\\n     * Throws an error if the name contains two or more ':' separators.\\n     * Examples:\\n     *   `'social:cake' -> ['social', 'cake']\\n     *   'penguin' -> ['', 'penguin']\\n     *   null -> ['', '']\\n     *   'a:b:c' -> (throws Error)`\\n     */\\n    private _splitIconName;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnInit(): void;\\n    ngAfterViewChecked(): void;\\n    ngOnDestroy(): void;\\n    private _usingFontIcon;\\n    private _setSvgElement;\\n    private _clearSvgElement;\\n    private _updateFontIconClasses;\\n    /**\\n     * Cleans up a value to be used as a fontIcon or fontSet.\\n     * Since the value ends up being assigned as a CSS class, we\\n     * have to trim the value and omit space-separated values.\\n     */\\n    private _cleanupFontValue;\\n    /**\\n     * Prepends the current path to all elements that have an attribute pointing to a `FuncIRI`\\n     * reference. This is required because WebKit browsers require references to be prefixed with\\n     * the current path, if the page has a `base` tag.\\n     */\\n    private _prependPathToReferences;\\n    /**\\n     * Caches the children of an SVG element that have `url()`\\n     * references that we need to prefix with the current path.\\n     */\\n    private _cacheChildrenWithExternalReferences;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatIcon>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatIcon, \\\"mat-icon\\\", [\\\"matIcon\\\"], { 'color': \\\"color\\\", 'inline': \\\"inline\\\", 'fontSet': \\\"fontSet\\\", 'fontIcon': \\\"fontIcon\\\", 'svgIcon': \\\"svgIcon\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=icon.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/icon/index.d.ts\",\n      \"node_modules/@angular/material/icon/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/icon/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './icon-module';\\nexport * from './icon';\\nexport * from './icon-registry';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/autosize.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\\n/**\\n * Directive to automatically resize a textarea to fit its content.\\n * @deprecated Use `cdkTextareaAutosize` from `@angular/cdk/text-field` instead.\\n * @breaking-change 8.0.0\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatTextareaAutosize extends CdkTextareaAutosize {\\n    matAutosizeMinRows: number;\\n    matAutosizeMaxRows: number;\\n    matAutosize: boolean;\\n    matTextareaAutosize: boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTextareaAutosize>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTextareaAutosize, \\\"textarea[mat-autosize], textarea[matTextareaAutosize]\\\", [\\\"matTextareaAutosize\\\"], { 'cdkAutosizeMinRows': \\\"cdkAutosizeMinRows\\\", 'cdkAutosizeMaxRows': \\\"cdkAutosizeMaxRows\\\", 'matAutosizeMinRows': \\\"matAutosizeMinRows\\\", 'matAutosizeMaxRows': \\\"matAutosizeMaxRows\\\", 'matAutosize': \\\"mat-autosize\\\", 'matTextareaAutosize': \\\"matTextareaAutosize\\\" }, {}, never>;\\n}\\n\\n//# sourceMappingURL=autosize.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/index.d.ts\",\n      \"node_modules/@angular/material/input/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/input-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare function getMatInputUnsupportedTypeError(type: string): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/input-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './input';\\nimport * as ɵngcc2 from './autosize';\\nimport * as ɵngcc3 from '@angular/common';\\nimport * as ɵngcc4 from '@angular/cdk/text-field';\\nimport * as ɵngcc5 from '@angular/material/form-field';\\nexport declare class MatInputModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatInputModule, [typeof ɵngcc1.MatInput, typeof ɵngcc2.MatTextareaAutosize], [typeof ɵngcc3.CommonModule, typeof ɵngcc4.TextFieldModule, typeof ɵngcc5.MatFormFieldModule], [typeof ɵngcc4.TextFieldModule, typeof ɵngcc5.MatFormFieldModule, typeof ɵngcc1.MatInput, typeof ɵngcc2.MatTextareaAutosize]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatInputModule>;\\n}\\n\\n//# sourceMappingURL=input-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/input-value-accessor.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/**\\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\\n * value to them.\\n */\\nexport declare const MAT_INPUT_VALUE_ACCESSOR: InjectionToken<{\\n    value: any;\\n}>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/input.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { AutofillMonitor } from '@angular/cdk/text-field';\\nimport { DoCheck, ElementRef, NgZone, OnChanges, OnDestroy, OnInit } from '@angular/core';\\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\\nimport { CanUpdateErrorState, CanUpdateErrorStateCtor, ErrorStateMatcher } from '@angular/material/core';\\nimport { MatFormFieldControl } from '@angular/material/form-field';\\nimport { Subject } from 'rxjs';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatInputBase {\\n    _defaultErrorStateMatcher: ErrorStateMatcher;\\n    _parentForm: NgForm;\\n    _parentFormGroup: FormGroupDirective;\\n    /** @docs-private */\\n    ngControl: NgControl;\\n    constructor(_defaultErrorStateMatcher: ErrorStateMatcher, _parentForm: NgForm, _parentFormGroup: FormGroupDirective, \\n    /** @docs-private */\\n    ngControl: NgControl);\\n}\\ndeclare const _MatInputMixinBase: CanUpdateErrorStateCtor & typeof MatInputBase;\\n/** Directive that allows a native input to work inside a `MatFormField`. */\\nexport declare class MatInput extends _MatInputMixinBase implements MatFormFieldControl<any>, OnChanges, OnDestroy, OnInit, DoCheck, CanUpdateErrorState {\\n    protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>;\\n    protected _platform: Platform;\\n    /** @docs-private */\\n    ngControl: NgControl;\\n    private _autofillMonitor;\\n    protected _uid: string;\\n    protected _previousNativeValue: any;\\n    private _inputValueAccessor;\\n    /** The aria-describedby attribute on the input for improved a11y. */\\n    _ariaDescribedby: string;\\n    /** Whether the component is being rendered on the server. */\\n    _isServer: boolean;\\n    /** Whether the component is a native html select. */\\n    _isNativeSelect: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    focused: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly stateChanges: Subject<void>;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    controlType: string;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    autofilled: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    disabled: boolean;\\n    protected _disabled: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    id: string;\\n    protected _id: string;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    placeholder: string;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    required: boolean;\\n    protected _required: boolean;\\n    /** Input type of the element. */\\n    type: string;\\n    protected _type: string;\\n    /** An object used to control when error messages are shown. */\\n    errorStateMatcher: ErrorStateMatcher;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    value: string;\\n    /** Whether the element is readonly. */\\n    readonly: boolean;\\n    private _readonly;\\n    protected _neverEmptyInputTypes: string[];\\n    constructor(_elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>, _platform: Platform, \\n    /** @docs-private */\\n    ngControl: NgControl, _parentForm: NgForm, _parentFormGroup: FormGroupDirective, _defaultErrorStateMatcher: ErrorStateMatcher, inputValueAccessor: any, _autofillMonitor: AutofillMonitor, ngZone: NgZone);\\n    ngOnInit(): void;\\n    ngOnChanges(): void;\\n    ngOnDestroy(): void;\\n    ngDoCheck(): void;\\n    /** Focuses the input. */\\n    focus(options?: FocusOptions): void;\\n    /** Callback for the cases where the focused state of the input changes. */\\n    _focusChanged(isFocused: boolean): void;\\n    _onInput(): void;\\n    /** Does some manual dirty checking on the native input `value` property. */\\n    protected _dirtyCheckNativeValue(): void;\\n    /** Make sure the input is a supported type. */\\n    protected _validateType(): void;\\n    /** Checks whether the input type is one of the types that are never empty. */\\n    protected _isNeverEmpty(): boolean;\\n    /** Checks whether the input is invalid based on the native validation. */\\n    protected _isBadInput(): boolean;\\n    /** Determines if the component host is a textarea. */\\n    protected _isTextarea(): boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly empty: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly shouldLabelFloat: boolean;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    setDescribedByIds(ids: string[]): void;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    onContainerClick(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatInput>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatInput, \\\"input[matInput], textarea[matInput], select[matNativeControl],      input[matNativeControl], textarea[matNativeControl]\\\", [\\\"matInput\\\"], { 'id': \\\"id\\\", 'disabled': \\\"disabled\\\", 'required': \\\"required\\\", 'type': \\\"type\\\", 'value': \\\"value\\\", 'readonly': \\\"readonly\\\", 'placeholder': \\\"placeholder\\\", 'errorStateMatcher': \\\"errorStateMatcher\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=input.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/input/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './autosize';\\nexport * from './input';\\nexport * from './input-errors';\\nexport * from './input-module';\\nexport * from './input-value-accessor';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/list/index.d.ts\",\n      \"node_modules/@angular/material/list/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/list/list-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatListModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/list/list.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentInit, ElementRef, QueryList, OnChanges, OnDestroy, ChangeDetectorRef } from '@angular/core';\\nimport { CanDisableRipple, CanDisableRippleCtor, MatLine } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\n/** @docs-private */\\ndeclare class MatListBase {\\n}\\ndeclare const _MatListMixinBase: CanDisableRippleCtor & typeof MatListBase;\\n/** @docs-private */\\ndeclare class MatListItemBase {\\n}\\ndeclare const _MatListItemMixinBase: CanDisableRippleCtor & typeof MatListItemBase;\\nexport declare class MatNavList extends _MatListMixinBase implements CanDisableRipple, OnChanges, OnDestroy {\\n    /** Emits when the state of the list changes. */\\n    _stateChanges: Subject<void>;\\n    ngOnChanges(): void;\\n    ngOnDestroy(): void;\\n}\\nexport declare class MatList extends _MatListMixinBase implements CanDisableRipple, OnChanges, OnDestroy {\\n    private _elementRef;\\n    /** Emits when the state of the list changes. */\\n    _stateChanges: Subject<void>;\\n    constructor(_elementRef: ElementRef<HTMLElement>);\\n    _getListType(): 'list' | 'action-list' | null;\\n    ngOnChanges(): void;\\n    ngOnDestroy(): void;\\n}\\n/**\\n * Directive whose purpose is to add the mat- CSS styling to this selector.\\n * @docs-private\\n */\\nexport declare class MatListAvatarCssMatStyler {\\n}\\n/**\\n * Directive whose purpose is to add the mat- CSS styling to this selector.\\n * @docs-private\\n */\\nexport declare class MatListIconCssMatStyler {\\n}\\n/**\\n * Directive whose purpose is to add the mat- CSS styling to this selector.\\n * @docs-private\\n */\\nexport declare class MatListSubheaderCssMatStyler {\\n}\\n/** An item within a Material Design list. */\\nexport declare class MatListItem extends _MatListItemMixinBase implements AfterContentInit, CanDisableRipple, OnDestroy {\\n    private _element;\\n    private _isInteractiveList;\\n    private _list?;\\n    private _destroyed;\\n    _lines: QueryList<MatLine>;\\n    _avatar: MatListAvatarCssMatStyler;\\n    _icon: MatListIconCssMatStyler;\\n    constructor(_element: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, navList?: MatNavList, list?: MatList);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Whether this list item should show a ripple effect when clicked. */\\n    _isRippleDisabled(): boolean;\\n    /** Retrieves the DOM element of the component host. */\\n    _getHostElement(): HTMLElement;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/list/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './list-module';\\nexport * from './list';\\nexport * from './selection-list';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/list/selection-list.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusableOption, FocusKeyManager } from '@angular/cdk/a11y';\\nimport { SelectionModel } from '@angular/cdk/collections';\\nimport { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList, SimpleChanges, OnChanges } from '@angular/core';\\nimport { CanDisableRipple, CanDisableRippleCtor, MatLine, ThemePalette } from '@angular/material/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { MatListAvatarCssMatStyler, MatListIconCssMatStyler } from './list';\\n/** @docs-private */\\ndeclare class MatSelectionListBase {\\n}\\ndeclare const _MatSelectionListMixinBase: CanDisableRippleCtor & typeof MatSelectionListBase;\\n/** @docs-private */\\ndeclare class MatListOptionBase {\\n}\\ndeclare const _MatListOptionMixinBase: CanDisableRippleCtor & typeof MatListOptionBase;\\n/** @docs-private */\\nexport declare const MAT_SELECTION_LIST_VALUE_ACCESSOR: any;\\n/** Change event that is being fired whenever the selected state of an option changes. */\\nexport declare class MatSelectionListChange {\\n    /** Reference to the selection list that emitted the event. */\\n    source: MatSelectionList;\\n    /** Reference to the option that has been changed. */\\n    option: MatListOption;\\n    constructor(\\n    /** Reference to the selection list that emitted the event. */\\n    source: MatSelectionList, \\n    /** Reference to the option that has been changed. */\\n    option: MatListOption);\\n}\\n/**\\n * Component for list-options of selection-list. Each list-option can automatically\\n * generate a checkbox and can put current item into the selectionModel of selection-list\\n * if the current item is selected.\\n */\\nexport declare class MatListOption extends _MatListOptionMixinBase implements AfterContentInit, OnDestroy, OnInit, FocusableOption, CanDisableRipple {\\n    private _element;\\n    private _changeDetector;\\n    /** @docs-private */\\n    selectionList: MatSelectionList;\\n    private _selected;\\n    private _disabled;\\n    private _hasFocus;\\n    _avatar: MatListAvatarCssMatStyler;\\n    _icon: MatListIconCssMatStyler;\\n    _lines: QueryList<MatLine>;\\n    /** DOM element containing the item's text. */\\n    _text: ElementRef;\\n    /** Whether the label should appear before or after the checkbox. Defaults to 'after' */\\n    checkboxPosition: 'before' | 'after';\\n    /** Theme color of the list option. This sets the color of the checkbox. */\\n    color: ThemePalette;\\n    private _color;\\n    /** Value of the option */\\n    value: any;\\n    private _value;\\n    /** Whether the option is disabled. */\\n    disabled: any;\\n    /** Whether the option is selected. */\\n    selected: boolean;\\n    constructor(_element: ElementRef<HTMLElement>, _changeDetector: ChangeDetectorRef, \\n    /** @docs-private */\\n    selectionList: MatSelectionList);\\n    ngOnInit(): void;\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Toggles the selection state of the option. */\\n    toggle(): void;\\n    /** Allows for programmatic focusing of the option. */\\n    focus(): void;\\n    /**\\n     * Returns the list item's text label. Implemented as a part of the FocusKeyManager.\\n     * @docs-private\\n     */\\n    getLabel(): any;\\n    /** Whether this list item should show a ripple effect when clicked. */\\n    _isRippleDisabled(): any;\\n    _handleClick(): void;\\n    _handleFocus(): void;\\n    _handleBlur(): void;\\n    /** Retrieves the DOM element of the component host. */\\n    _getHostElement(): HTMLElement;\\n    /** Sets the selected state of the option. Returns whether the value has changed. */\\n    _setSelected(selected: boolean): boolean;\\n    /**\\n     * Notifies Angular that the option needs to be checked in the next change detection run. Mainly\\n     * used to trigger an update of the list option if the disabled state of the selection list\\n     * changed.\\n     */\\n    _markForCheck(): void;\\n}\\n/**\\n * Material Design list component where each item is a selectable option. Behaves as a listbox.\\n */\\nexport declare class MatSelectionList extends _MatSelectionListMixinBase implements CanDisableRipple, AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges {\\n    private _element;\\n    /** The FocusKeyManager which handles focus. */\\n    _keyManager: FocusKeyManager<MatListOption>;\\n    /** The option components contained within this selection-list. */\\n    options: QueryList<MatListOption>;\\n    /** Emits a change event whenever the selected state of an option changes. */\\n    readonly selectionChange: EventEmitter<MatSelectionListChange>;\\n    /** Tabindex of the selection list. */\\n    tabIndex: number;\\n    /** Theme color of the selection list. This sets the checkbox color for all list options. */\\n    color: ThemePalette;\\n    /**\\n     * Function used for comparing an option against the selected value when determining which\\n     * options should appear as selected. The first argument is the value of an options. The second\\n     * one is a value from the selected value. A boolean must be returned.\\n     */\\n    compareWith: (o1: any, o2: any) => boolean;\\n    /** Whether the selection list is disabled. */\\n    disabled: boolean;\\n    private _disabled;\\n    /** The currently selected options. */\\n    selectedOptions: SelectionModel<MatListOption>;\\n    /** View to model callback that should be called whenever the selected options change. */\\n    private _onChange;\\n    /** Keeps track of the currently-selected value. */\\n    _value: string[] | null;\\n    /** Emits when the list has been destroyed. */\\n    private _destroyed;\\n    /** View to model callback that should be called if the list or its options lost focus. */\\n    _onTouched: () => void;\\n    /** Whether the list has been destroyed. */\\n    private _isDestroyed;\\n    constructor(_element: ElementRef<HTMLElement>, tabIndex: string);\\n    ngAfterContentInit(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    /** Focuses the selection list. */\\n    focus(options?: FocusOptions): void;\\n    /** Selects all of the options. */\\n    selectAll(): void;\\n    /** Deselects all of the options. */\\n    deselectAll(): void;\\n    /** Sets the focused option of the selection-list. */\\n    _setFocusedOption(option: MatListOption): void;\\n    /**\\n     * Removes an option from the selection list and updates the active item.\\n     * @returns Currently-active item.\\n     */\\n    _removeOptionFromList(option: MatListOption): MatListOption | null;\\n    /** Passes relevant key presses to our key manager. */\\n    _keydown(event: KeyboardEvent): void;\\n    /** Reports a value change to the ControlValueAccessor */\\n    _reportValueChange(): void;\\n    /** Emits a change event if the selected state of an option changed. */\\n    _emitChangeEvent(option: MatListOption): void;\\n    /** Implemented as part of ControlValueAccessor. */\\n    writeValue(values: string[]): void;\\n    /** Implemented as a part of ControlValueAccessor. */\\n    setDisabledState(isDisabled: boolean): void;\\n    /** Implemented as part of ControlValueAccessor. */\\n    registerOnChange(fn: (value: any) => void): void;\\n    /** Implemented as part of ControlValueAccessor. */\\n    registerOnTouched(fn: () => void): void;\\n    /** Sets the selected options based on the specified values. */\\n    private _setOptionsFromValues;\\n    /** Returns the values of the selected options. */\\n    private _getSelectedOptionValues;\\n    /** Toggles the state of the currently focused option if enabled. */\\n    private _toggleFocusedOption;\\n    /**\\n     * Sets the selected state on all of the options\\n     * and emits an event if anything changed.\\n     */\\n    private _setAllOptionsSelected;\\n    /**\\n     * Utility to ensure all indexes are valid.\\n     * @param index The index to be checked.\\n     * @returns True if the index is valid for our list of options.\\n     */\\n    private _isValidIndex;\\n    /** Returns the index of the specified list option. */\\n    private _getOptionIndex;\\n    /** Marks all the options to be checked in the next change detection run. */\\n    private _markOptionsForCheck;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/index.d.ts\",\n      \"node_modules/@angular/material/menu/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { MAT_MENU_DEFAULT_OPTIONS_FACTORY as ɵangular_material_src_material_menu_menu_a } from './menu';\\nexport { MAT_MENU_SCROLL_STRATEGY_FACTORY as ɵangular_material_src_material_menu_menu_b, MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER as ɵangular_material_src_material_menu_menu_c } from './menu-trigger';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the mat-menu component.\\n * Animation duration and timing values are based on:\\n * https://material.io/guidelines/components/menus.html#menus-usage\\n * @docs-private\\n */\\nexport declare const matMenuAnimations: {\\n    readonly transformMenu: AnimationTriggerMetadata;\\n    readonly fadeInItems: AnimationTriggerMetadata;\\n};\\n/**\\n * @deprecated\\n * @breaking-change 8.0.0\\n * @docs-private\\n */\\nexport declare const fadeInItems: AnimationTriggerMetadata;\\n/**\\n * @deprecated\\n * @breaking-change 8.0.0\\n * @docs-private\\n */\\nexport declare const transformMenu: AnimationTriggerMetadata;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-content.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ApplicationRef, ChangeDetectorRef, ComponentFactoryResolver, Injector, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/**\\n * Menu content that will be rendered lazily once the menu is opened.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatMenuContent implements OnDestroy {\\n    private _template;\\n    private _componentFactoryResolver;\\n    private _appRef;\\n    private _injector;\\n    private _viewContainerRef;\\n    private _document;\\n    private _changeDetectorRef?;\\n    private _portal;\\n    private _outlet;\\n    /** Emits when the menu content has been attached. */\\n    _attached: Subject<void>;\\n    constructor(_template: TemplateRef<any>, _componentFactoryResolver: ComponentFactoryResolver, _appRef: ApplicationRef, _injector: Injector, _viewContainerRef: ViewContainerRef, _document: any, _changeDetectorRef?: ChangeDetectorRef | undefined);\\n    /**\\n     * Attaches the content with a particular context.\\n     * @docs-private\\n     */\\n    attach(context?: any): void;\\n    /**\\n     * Detaches the content.\\n     * @docs-private\\n     */\\n    detach(): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatMenuContent>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatMenuContent, \\\"ng-template[matMenuContent]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=menu-content.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Throws an exception for the case when menu trigger doesn't have a valid mat-menu instance\\n * @docs-private\\n */\\nexport declare function throwMatMenuMissingError(): void;\\n/**\\n * Throws an exception for the case when menu's x-position value isn't valid.\\n * In other words, it doesn't match 'before' or 'after'.\\n * @docs-private\\n */\\nexport declare function throwMatMenuInvalidPositionX(): void;\\n/**\\n * Throws an exception for the case when menu's y-position value isn't valid.\\n * In other words, it doesn't match 'above' or 'below'.\\n * @docs-private\\n */\\nexport declare function throwMatMenuInvalidPositionY(): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-item.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\\nimport { ElementRef, OnDestroy } from '@angular/core';\\nimport { CanDisable, CanDisableCtor, CanDisableRipple, CanDisableRippleCtor } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\nimport { MatMenuPanel } from './menu-panel';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatMenuItemBase {\\n}\\ndeclare const _MatMenuItemMixinBase: CanDisableRippleCtor & CanDisableCtor & typeof MatMenuItemBase;\\n/**\\n * This directive is intended to be used inside an mat-menu tag.\\n * It exists mostly to set the role attribute.\\n */\\nexport declare class MatMenuItem extends _MatMenuItemMixinBase implements FocusableOption, CanDisable, CanDisableRipple, OnDestroy {\\n    private _elementRef;\\n    private _focusMonitor?;\\n    _parentMenu?: MatMenuPanel<MatMenuItem> | undefined;\\n    /** ARIA role for the menu item. */\\n    role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox';\\n    private _document;\\n    /** Stream that emits when the menu item is hovered. */\\n    readonly _hovered: Subject<MatMenuItem>;\\n    /** Whether the menu item is highlighted. */\\n    _highlighted: boolean;\\n    /** Whether the menu item acts as a trigger for a sub-menu. */\\n    _triggersSubmenu: boolean;\\n    constructor(_elementRef: ElementRef<HTMLElement>, document?: any, _focusMonitor?: FocusMonitor | undefined, _parentMenu?: MatMenuPanel<MatMenuItem> | undefined);\\n    /** Focuses the menu item. */\\n    focus(origin?: FocusOrigin, options?: FocusOptions): void;\\n    ngOnDestroy(): void;\\n    /** Used to set the `tabindex`. */\\n    _getTabIndex(): string;\\n    /** Returns the host DOM element. */\\n    _getHostElement(): HTMLElement;\\n    /** Prevents the default element actions if it is disabled. */\\n    _checkDisabled(event: Event): void;\\n    /** Emits to the hover stream. */\\n    _handleMouseEnter(): void;\\n    /** Gets the label to be used when determining whether the option should be focused. */\\n    getLabel(): string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatMenuItem>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatMenuItem, \\\"[mat-menu-item]\\\", [\\\"matMenuItem\\\"], { 'disabled': \\\"disabled\\\", 'disableRipple': \\\"disableRipple\\\", 'role': \\\"role\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=menu-item.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Used by both the current `MatMenuModule` and the MDC `MatMenuModule`\\n * to declare the menu-related directives.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './menu-trigger';\\nimport * as ɵngcc2 from './menu-content';\\nimport * as ɵngcc3 from '@angular/material/core';\\nimport * as ɵngcc4 from './menu';\\nimport * as ɵngcc5 from './menu-item';\\nimport * as ɵngcc6 from '@angular/common';\\nimport * as ɵngcc7 from '@angular/cdk/overlay';\\nexport declare class _MatMenuDirectivesModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<_MatMenuDirectivesModule, [typeof ɵngcc1.MatMenuTrigger, typeof ɵngcc2.MatMenuContent], never, [typeof ɵngcc1.MatMenuTrigger, typeof ɵngcc2.MatMenuContent, typeof ɵngcc3.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<_MatMenuDirectivesModule>;\\n}\\nexport declare class MatMenuModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatMenuModule, [typeof ɵngcc4._MatMenu, typeof ɵngcc5.MatMenuItem], [typeof ɵngcc6.CommonModule, typeof ɵngcc3.MatCommonModule, typeof ɵngcc3.MatRippleModule, typeof ɵngcc7.OverlayModule, typeof _MatMenuDirectivesModule], [typeof ɵngcc4._MatMenu, typeof ɵngcc5.MatMenuItem, typeof _MatMenuDirectivesModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatMenuModule>;\\n}\\n\\n//# sourceMappingURL=menu-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-panel.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { EventEmitter, TemplateRef, InjectionToken } from '@angular/core';\\nimport { MenuPositionX, MenuPositionY } from './menu-positions';\\nimport { Direction } from '@angular/cdk/bidi';\\nimport { FocusOrigin } from '@angular/cdk/a11y';\\nimport { MatMenuContent } from './menu-content';\\n/**\\n * Injection token used to provide the parent menu to menu-specific components.\\n * @docs-private\\n */\\nexport declare const MAT_MENU_PANEL: InjectionToken<MatMenuPanel<any>>;\\n/**\\n * Interface for a custom menu panel that can be used with `matMenuTriggerFor`.\\n * @docs-private\\n */\\nexport interface MatMenuPanel<T = any> {\\n    xPosition: MenuPositionX;\\n    yPosition: MenuPositionY;\\n    overlapTrigger: boolean;\\n    templateRef: TemplateRef<any>;\\n    close: EventEmitter<void | 'click' | 'keydown' | 'tab'>;\\n    parentMenu?: MatMenuPanel | undefined;\\n    direction?: Direction;\\n    focusFirstItem: (origin?: FocusOrigin) => void;\\n    resetActiveItem: () => void;\\n    setPositionClasses?: (x: MenuPositionX, y: MenuPositionY) => void;\\n    setElevation?(depth: number): void;\\n    lazyContent?: MatMenuContent;\\n    backdropClass?: string;\\n    hasBackdrop?: boolean;\\n    /**\\n     * @deprecated To be removed.\\n     * @breaking-change 8.0.0\\n     */\\n    addItem?: (item: T) => void;\\n    /**\\n     * @deprecated To be removed.\\n     * @breaking-change 8.0.0\\n     */\\n    removeItem?: (item: T) => void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-positions.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare type MenuPositionX = 'before' | 'after';\\nexport declare type MenuPositionY = 'above' | 'below';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu-trigger.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\\nimport { Direction, Directionality } from '@angular/cdk/bidi';\\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\\nimport { AfterContentInit, ElementRef, EventEmitter, InjectionToken, OnDestroy, ViewContainerRef } from '@angular/core';\\nimport { MatMenu } from './menu';\\nimport { MatMenuItem } from './menu-item';\\nimport { MatMenuPanel } from './menu-panel';\\n/** Injection token that determines the scroll handling while the menu is open. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_MENU_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private */\\nexport declare function MAT_MENU_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare const MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof MAT_MENU_SCROLL_STRATEGY_FACTORY;\\n};\\n/** Default top padding of the menu panel. */\\nexport declare const MENU_PANEL_TOP_PADDING = 8;\\n/**\\n * This directive is intended to be used in conjunction with an mat-menu tag.  It is\\n * responsible for toggling the display of the provided menu instance.\\n */\\nexport declare class MatMenuTrigger implements AfterContentInit, OnDestroy {\\n    private _overlay;\\n    private _element;\\n    private _viewContainerRef;\\n    private _parentMenu;\\n    private _menuItemInstance;\\n    private _dir;\\n    private _focusMonitor?;\\n    private _portal;\\n    private _overlayRef;\\n    private _menuOpen;\\n    private _closingActionsSubscription;\\n    private _hoverSubscription;\\n    private _menuCloseSubscription;\\n    private _scrollStrategy;\\n    /**\\n     * Handles touch start events on the trigger.\\n     * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\\n     */\\n    private _handleTouchStart;\\n    _openedBy: 'mouse' | 'touch' | null;\\n    /**\\n     * @deprecated\\n     * @breaking-change 8.0.0\\n     */\\n    _deprecatedMatMenuTriggerFor: MatMenuPanel;\\n    /** References the menu instance that the trigger is associated with. */\\n    menu: MatMenuPanel;\\n    private _menu;\\n    /** Data to be passed along to any lazily-rendered content. */\\n    menuData: any;\\n    /**\\n     * Whether focus should be restored when the menu is closed.\\n     * Note that disabling this option can have accessibility implications\\n     * and it's up to you to manage focus, if you decide to turn it off.\\n     */\\n    restoreFocus: boolean;\\n    /** Event emitted when the associated menu is opened. */\\n    readonly menuOpened: EventEmitter<void>;\\n    /**\\n     * Event emitted when the associated menu is opened.\\n     * @deprecated Switch to `menuOpened` instead\\n     * @breaking-change 8.0.0\\n     */\\n    readonly onMenuOpen: EventEmitter<void>;\\n    /** Event emitted when the associated menu is closed. */\\n    readonly menuClosed: EventEmitter<void>;\\n    /**\\n     * Event emitted when the associated menu is closed.\\n     * @deprecated Switch to `menuClosed` instead\\n     * @breaking-change 8.0.0\\n     */\\n    readonly onMenuClose: EventEmitter<void>;\\n    constructor(_overlay: Overlay, _element: ElementRef<HTMLElement>, _viewContainerRef: ViewContainerRef, scrollStrategy: any, _parentMenu: MatMenu, _menuItemInstance: MatMenuItem, _dir: Directionality, _focusMonitor?: FocusMonitor | undefined);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Whether the menu is open. */\\n    readonly menuOpen: boolean;\\n    /** The text direction of the containing app. */\\n    readonly dir: Direction;\\n    /** Whether the menu triggers a sub-menu or a top-level one. */\\n    triggersSubmenu(): boolean;\\n    /** Toggles the menu between the open and closed states. */\\n    toggleMenu(): void;\\n    /** Opens the menu. */\\n    openMenu(): void;\\n    /** Closes the menu. */\\n    closeMenu(): void;\\n    /**\\n     * Focuses the menu trigger.\\n     * @param origin Source of the menu trigger's focus.\\n     */\\n    focus(origin?: FocusOrigin, options?: FocusOptions): void;\\n    /** Closes the menu and does the necessary cleanup. */\\n    private _destroyMenu;\\n    /**\\n     * This method sets the menu state to open and focuses the first item if\\n     * the menu was opened via the keyboard.\\n     */\\n    private _initMenu;\\n    /** Updates the menu elevation based on the amount of parent menus that it has. */\\n    private _setMenuElevation;\\n    /** Restores focus to the element that was focused before the menu was open. */\\n    private _restoreFocus;\\n    private _setIsMenuOpen;\\n    /**\\n     * This method checks that a valid instance of MatMenu has been passed into\\n     * matMenuTriggerFor. If not, an exception is thrown.\\n     */\\n    private _checkMenu;\\n    /**\\n     * This method creates the overlay from the provided menu's template and saves its\\n     * OverlayRef so that it can be attached to the DOM when openMenu is called.\\n     */\\n    private _createOverlay;\\n    /**\\n     * This method builds the configuration object needed to create the overlay, the OverlayState.\\n     * @returns OverlayConfig\\n     */\\n    private _getOverlayConfig;\\n    /**\\n     * Listens to changes in the position of the overlay and sets the correct classes\\n     * on the menu based on the new position. This ensures the animation origin is always\\n     * correct, even if a fallback position is used for the overlay.\\n     */\\n    private _subscribeToPositions;\\n    /**\\n     * Sets the appropriate positions on a position strategy\\n     * so the overlay connects with the trigger correctly.\\n     * @param positionStrategy Strategy whose position to update.\\n     */\\n    private _setPosition;\\n    /** Returns a stream that emits whenever an action that should close the menu occurs. */\\n    private _menuClosingActions;\\n    /** Handles mouse presses on the trigger. */\\n    _handleMousedown(event: MouseEvent): void;\\n    /** Handles key presses on the trigger. */\\n    _handleKeydown(event: KeyboardEvent): void;\\n    /** Handles click events on the trigger. */\\n    _handleClick(event: MouseEvent): void;\\n    /** Handles the cases where the user hovers over the trigger. */\\n    private _handleHover;\\n    /** Gets the portal that should be attached to the overlay. */\\n    private _getPortal;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatMenuTrigger>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatMenuTrigger, \\\"[mat-menu-trigger-for], [matMenuTriggerFor]\\\", [\\\"matMenuTrigger\\\"], { 'restoreFocus': \\\"matMenuTriggerRestoreFocus\\\", '_deprecatedMatMenuTriggerFor': \\\"mat-menu-trigger-for\\\", 'menu': \\\"matMenuTriggerFor\\\", 'menuData': \\\"matMenuTriggerData\\\" }, { 'menuOpened': \\\"menuOpened\\\", 'onMenuOpen': \\\"onMenuOpen\\\", 'menuClosed': \\\"menuClosed\\\", 'onMenuClose': \\\"onMenuClose\\\" }, never>;\\n}\\n\\n//# sourceMappingURL=menu-trigger.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/menu.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusOrigin } from '@angular/cdk/a11y';\\nimport { Direction } from '@angular/cdk/bidi';\\nimport { AfterContentInit, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, TemplateRef, QueryList, OnInit } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\nimport { MatMenuContent } from './menu-content';\\nimport { MenuPositionX, MenuPositionY } from './menu-positions';\\nimport { MatMenuItem } from './menu-item';\\nimport { MatMenuPanel } from './menu-panel';\\nimport { AnimationEvent } from '@angular/animations';\\n/** Default `mat-menu` options that can be overridden. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface MatMenuDefaultOptions {\\n    /** The x-axis position of the menu. */\\n    xPosition: MenuPositionX;\\n    /** The y-axis position of the menu. */\\n    yPosition: MenuPositionY;\\n    /** Whether the menu should overlap the menu trigger. */\\n    overlapTrigger: boolean;\\n    /** Class to be applied to the menu's backdrop. */\\n    backdropClass: string;\\n    /** Whether the menu has a backdrop. */\\n    hasBackdrop?: boolean;\\n}\\n/** Injection token to be used to override the default options for `mat-menu`. */\\nexport declare const MAT_MENU_DEFAULT_OPTIONS: InjectionToken<MatMenuDefaultOptions>;\\n/** @docs-private */\\nexport declare function MAT_MENU_DEFAULT_OPTIONS_FACTORY(): MatMenuDefaultOptions;\\n/** Base class with all of the `MatMenu` functionality. */\\nexport declare class _MatMenuBase implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnInit, OnDestroy {\\n    private _elementRef;\\n    private _ngZone;\\n    private _defaultOptions;\\n    private _keyManager;\\n    private _xPosition;\\n    private _yPosition;\\n    private _previousElevation;\\n    /** All items inside the menu. Includes items nested inside another menu. */\\n    _allItems: QueryList<MatMenuItem>;\\n    /** Only the direct descendant menu items. */\\n    private _directDescendantItems;\\n    /** Subscription to tab events on the menu panel */\\n    private _tabSubscription;\\n    /** Config object to be passed into the menu's ngClass */\\n    _classList: {\\n        [key: string]: boolean;\\n    };\\n    /** Current state of the panel animation. */\\n    _panelAnimationState: 'void' | 'enter';\\n    /** Emits whenever an animation on the menu completes. */\\n    _animationDone: Subject<AnimationEvent>;\\n    /** Whether the menu is animating. */\\n    _isAnimating: boolean;\\n    /** Parent menu of the current menu panel. */\\n    parentMenu: MatMenuPanel | undefined;\\n    /** Layout direction of the menu. */\\n    direction: Direction;\\n    /** Class to be added to the backdrop element. */\\n    backdropClass: string;\\n    /** Position of the menu in the X axis. */\\n    xPosition: MenuPositionX;\\n    /** Position of the menu in the Y axis. */\\n    yPosition: MenuPositionY;\\n    /** @docs-private */\\n    templateRef: TemplateRef<any>;\\n    /**\\n     * List of the items inside of a menu.\\n     * @deprecated\\n     * @breaking-change 8.0.0\\n     */\\n    items: QueryList<MatMenuItem>;\\n    /**\\n     * Menu content that will be rendered lazily.\\n     * @docs-private\\n     */\\n    lazyContent: MatMenuContent;\\n    /** Whether the menu should overlap its trigger. */\\n    overlapTrigger: boolean;\\n    private _overlapTrigger;\\n    /** Whether the menu has a backdrop. */\\n    hasBackdrop: boolean | undefined;\\n    private _hasBackdrop;\\n    /**\\n     * This method takes classes set on the host mat-menu element and applies them on the\\n     * menu template that displays in the overlay container.  Otherwise, it's difficult\\n     * to style the containing menu from outside the component.\\n     * @param classes list of class names\\n     */\\n    panelClass: string;\\n    private _previousPanelClass;\\n    /**\\n     * This method takes classes set on the host mat-menu element and applies them on the\\n     * menu template that displays in the overlay container.  Otherwise, it's difficult\\n     * to style the containing menu from outside the component.\\n     * @deprecated Use `panelClass` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    classList: string;\\n    /** Event emitted when the menu is closed. */\\n    readonly closed: EventEmitter<void | 'click' | 'keydown' | 'tab'>;\\n    /**\\n     * Event emitted when the menu is closed.\\n     * @deprecated Switch to `closed` instead\\n     * @breaking-change 8.0.0\\n     */\\n    close: EventEmitter<void | \\\"click\\\" | \\\"keydown\\\" | \\\"tab\\\">;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _ngZone: NgZone, _defaultOptions: MatMenuDefaultOptions);\\n    ngOnInit(): void;\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Stream that emits whenever the hovered menu item changes. */\\n    _hovered(): Observable<MatMenuItem>;\\n    addItem(_item: MatMenuItem): void;\\n    /**\\n     * Removes an item from the menu.\\n     * @docs-private\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 9.0.0\\n     */\\n    removeItem(_item: MatMenuItem): void;\\n    /** Handle a keyboard event from the menu, delegating to the appropriate action. */\\n    _handleKeydown(event: KeyboardEvent): void;\\n    /**\\n     * Focus the first item in the menu.\\n     * @param origin Action from which the focus originated. Used to set the correct styling.\\n     */\\n    focusFirstItem(origin?: FocusOrigin): void;\\n    /**\\n     * Resets the active item in the menu. This is used when the menu is opened, allowing\\n     * the user to start from the first option when pressing the down arrow.\\n     */\\n    resetActiveItem(): void;\\n    /**\\n     * Sets the menu panel elevation.\\n     * @param depth Number of parent menus that come before the menu.\\n     */\\n    setElevation(depth: number): void;\\n    /**\\n     * Adds classes to the menu panel based on its position. Can be used by\\n     * consumers to add specific styling based on the position.\\n     * @param posX Position of the menu along the x axis.\\n     * @param posY Position of the menu along the y axis.\\n     * @docs-private\\n     */\\n    setPositionClasses(posX?: MenuPositionX, posY?: MenuPositionY): void;\\n    /** Starts the enter animation. */\\n    _startAnimation(): void;\\n    /** Resets the panel animation to its initial state. */\\n    _resetAnimation(): void;\\n    /** Callback that is invoked when the panel animation completes. */\\n    _onAnimationDone(event: AnimationEvent): void;\\n    _onAnimationStart(event: AnimationEvent): void;\\n    /**\\n     * Sets up a stream that will keep track of any newly-added menu items and will update the list\\n     * of direct descendants. We collect the descendants this way, because `_allItems` can include\\n     * items that are part of child menus, and using a custom way of registering items is unreliable\\n     * when it comes to maintaining the item order.\\n     */\\n    private _updateDirectDescendants;\\n    static ngBaseDef: ɵngcc0.ɵɵBaseDef<_MatMenuBase>;\\n}\\n/** @docs-private We show the \\\"_MatMenu\\\" class as \\\"MatMenu\\\" in the docs. */\\nexport declare class MatMenu extends _MatMenuBase {\\n}\\n/** @docs-public MatMenu */\\nexport declare class _MatMenu extends MatMenu {\\n    constructor(elementRef: ElementRef<HTMLElement>, ngZone: NgZone, defaultOptions: MatMenuDefaultOptions);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<_MatMenu>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<_MatMenu, \\\"mat-menu\\\", [\\\"matMenu\\\"], {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=menu.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { MatMenu, MatMenuDefaultOptions, MAT_MENU_DEFAULT_OPTIONS, _MatMenu, _MatMenuBase, } from './menu';\\nexport { MatMenuItem } from './menu-item';\\nexport { MatMenuTrigger, MAT_MENU_SCROLL_STRATEGY } from './menu-trigger';\\nexport { MatMenuPanel, MAT_MENU_PANEL } from './menu-panel';\\nexport * from './menu-module';\\nexport * from './menu-animations';\\nexport * from './menu-content';\\nexport * from './menu-positions';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/testing/index.d.ts\",\n      \"node_modules/@angular/material/menu/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/testing/menu-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface MenuHarnessFilters extends BaseHarnessFilters {\\n    triggerText?: string | RegExp;\\n}\\nexport interface MenuItemHarnessFilters extends BaseHarnessFilters {\\n    text?: string | RegExp;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/testing/menu-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { MenuHarnessFilters } from './menu-harness-filters';\\nimport { MatMenuItemHarness } from './menu-item-harness';\\n/**\\n * Harness for interacting with a standard mat-menu in tests.\\n * @dynamic\\n */\\nexport declare class MatMenuHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a menu with specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a menu whose host element matches the given selector.\\n     *   - `label` finds a menu with specific label text.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: MenuHarnessFilters): HarnessPredicate<MatMenuHarness>;\\n    /** Gets a boolean promise indicating if the menu is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    isOpen(): Promise<boolean>;\\n    getTriggerText(): Promise<string>;\\n    /** Focuses the menu and returns a void promise that indicates when the action is complete. */\\n    focus(): Promise<void>;\\n    /** Blurs the menu and returns a void promise that indicates when the action is complete. */\\n    blur(): Promise<void>;\\n    open(): Promise<void>;\\n    close(): Promise<void>;\\n    getItems(): Promise<MatMenuItemHarness[]>;\\n    getItemLabels(): Promise<string[]>;\\n    getItemByLabel(): Promise<MatMenuItemHarness>;\\n    getItemByIndex(): Promise<MatMenuItemHarness>;\\n    getFocusedItem(): Promise<MatMenuItemHarness>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/testing/menu-item-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { MenuItemHarnessFilters } from './menu-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-menu in tests.\\n * @dynamic\\n */\\nexport declare class MatMenuItemHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a menu with specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a menu item whose host element matches the given selector.\\n     *   - `label` finds a menu item with specific label text.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: MenuItemHarnessFilters): HarnessPredicate<MatMenuItemHarness>;\\n    /** Gets a boolean promise indicating if the menu is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    getText(): Promise<string>;\\n    /** Focuses the menu and returns a void promise that indicates when the action is complete. */\\n    focus(): Promise<void>;\\n    /** Blurs the menu and returns a void promise that indicates when the action is complete. */\\n    blur(): Promise<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/menu/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './menu-harness';\\nexport * from './menu-harness-filters';\\nexport * from './menu-item-harness';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/paginator/index.d.ts\",\n      \"node_modules/@angular/material/paginator/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/paginator/paginator-intl.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Optional } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/**\\n * To modify the labels and text displayed, create a new instance of MatPaginatorIntl and\\n * include it in a custom provider\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatPaginatorIntl {\\n    /**\\n     * Stream to emit from when labels are changed. Use this to notify components when the labels have\\n     * changed after initialization.\\n     */\\n    readonly changes: Subject<void>;\\n    /** A label for the page size selector. */\\n    itemsPerPageLabel: string;\\n    /** A label for the button that increments the current page. */\\n    nextPageLabel: string;\\n    /** A label for the button that decrements the current page. */\\n    previousPageLabel: string;\\n    /** A label for the button that moves to the first page. */\\n    firstPageLabel: string;\\n    /** A label for the button that moves to the last page. */\\n    lastPageLabel: string;\\n    /** A label for the range of items within the current page and the length of the whole list. */\\n    getRangeLabel: (page: number, pageSize: number, length: number) => string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatPaginatorIntl>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MatPaginatorIntl>;\\n}\\n/** @docs-private */\\nexport declare function MAT_PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl: MatPaginatorIntl): MatPaginatorIntl;\\n/** @docs-private */\\nexport declare const MAT_PAGINATOR_INTL_PROVIDER: {\\n    provide: typeof MatPaginatorIntl;\\n    deps: Optional[][];\\n    useFactory: typeof MAT_PAGINATOR_INTL_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=paginator-intl.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/paginator/paginator-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './paginator';\\nimport * as ɵngcc2 from '@angular/common';\\nimport * as ɵngcc3 from '@angular/material/button';\\nimport * as ɵngcc4 from '@angular/material/select';\\nimport * as ɵngcc5 from '@angular/material/tooltip';\\nexport declare class MatPaginatorModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatPaginatorModule, [typeof ɵngcc1.MatPaginator], [typeof ɵngcc2.CommonModule, typeof ɵngcc3.MatButtonModule, typeof ɵngcc4.MatSelectModule, typeof ɵngcc5.MatTooltipModule], [typeof ɵngcc1.MatPaginator]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatPaginatorModule>;\\n}\\n\\n//# sourceMappingURL=paginator-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/paginator/paginator.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';\\nimport { MatPaginatorIntl } from './paginator-intl';\\nimport { HasInitialized, HasInitializedCtor, ThemePalette, CanDisableCtor, CanDisable } from '@angular/material/core';\\n/**\\n * Change event object that is emitted when the user selects a\\n * different page size or navigates to another page.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class PageEvent {\\n    /** The current page index. */\\n    pageIndex: number;\\n    /**\\n     * Index of the page that was selected previously.\\n     * @breaking-change 8.0.0 To be made into a required property.\\n     */\\n    previousPageIndex?: number;\\n    /** The current page size */\\n    pageSize: number;\\n    /** The current total number of items being paged */\\n    length: number;\\n}\\n/** @docs-private */\\ndeclare class MatPaginatorBase {\\n}\\ndeclare const _MatPaginatorBase: CanDisableCtor & HasInitializedCtor & typeof MatPaginatorBase;\\n/**\\n * Component to provide navigation between paged information. Displays the size of the current\\n * page, user-selectable options to change that size, what items are being shown, and\\n * navigational button to go to the previous or next page.\\n */\\nexport declare class MatPaginator extends _MatPaginatorBase implements OnInit, OnDestroy, CanDisable, HasInitialized {\\n    _intl: MatPaginatorIntl;\\n    private _changeDetectorRef;\\n    private _initialized;\\n    private _intlChanges;\\n    /** Theme color to be used for the underlying form controls. */\\n    color: ThemePalette;\\n    /** The zero-based page index of the displayed list of items. Defaulted to 0. */\\n    pageIndex: number;\\n    private _pageIndex;\\n    /** The length of the total number of items that are being paginated. Defaulted to 0. */\\n    length: number;\\n    private _length;\\n    /** Number of items to display on a page. By default set to 50. */\\n    pageSize: number;\\n    private _pageSize;\\n    /** The set of provided page size options to display to the user. */\\n    pageSizeOptions: number[];\\n    private _pageSizeOptions;\\n    /** Whether to hide the page size selection UI from the user. */\\n    hidePageSize: boolean;\\n    private _hidePageSize;\\n    /** Whether to show the first/last buttons UI to the user. */\\n    showFirstLastButtons: boolean;\\n    private _showFirstLastButtons;\\n    /** Event emitted when the paginator changes the page size or page index. */\\n    readonly page: EventEmitter<PageEvent>;\\n    /** Displayed set of page size options. Will be sorted and include current page size. */\\n    _displayedPageSizeOptions: number[];\\n    constructor(_intl: MatPaginatorIntl, _changeDetectorRef: ChangeDetectorRef);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /** Advances to the next page if it exists. */\\n    nextPage(): void;\\n    /** Move back to the previous page if it exists. */\\n    previousPage(): void;\\n    /** Move to the first page if not already there. */\\n    firstPage(): void;\\n    /** Move to the last page if not already there. */\\n    lastPage(): void;\\n    /** Whether there is a previous page. */\\n    hasPreviousPage(): boolean;\\n    /** Whether there is a next page. */\\n    hasNextPage(): boolean;\\n    /** Calculate the number of pages */\\n    getNumberOfPages(): number;\\n    /**\\n     * Changes the page size so that the first item displayed on the page will still be\\n     * displayed using the new page size.\\n     *\\n     * For example, if the page size is 10 and on the second page (items indexed 10-19) then\\n     * switching so that the page size is 5 will set the third page as the current page so\\n     * that the 10th item will still be displayed.\\n     */\\n    _changePageSize(pageSize: number): void;\\n    /** Checks whether the buttons for going forwards should be disabled. */\\n    _nextButtonsDisabled(): boolean;\\n    /** Checks whether the buttons for going backwards should be disabled. */\\n    _previousButtonsDisabled(): boolean;\\n    /**\\n     * Updates the list of page size options to display to the user. Includes making sure that\\n     * the page size is an option and that the list is sorted.\\n     */\\n    private _updateDisplayedPageSizeOptions;\\n    /** Emits an event notifying that a change of the paginator's properties has been triggered. */\\n    private _emitPageEvent;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatPaginator>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatPaginator, \\\"mat-paginator\\\", [\\\"matPaginator\\\"], { 'disabled': \\\"disabled\\\", 'pageIndex': \\\"pageIndex\\\", 'length': \\\"length\\\", 'pageSize': \\\"pageSize\\\", 'pageSizeOptions': \\\"pageSizeOptions\\\", 'hidePageSize': \\\"hidePageSize\\\", 'showFirstLastButtons': \\\"showFirstLastButtons\\\", 'color': \\\"color\\\" }, { 'page': \\\"page\\\" }, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=paginator.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/paginator/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './paginator-module';\\nexport * from './paginator';\\nexport * from './paginator-intl';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/index.d.ts\",\n      \"node_modules/@angular/material/progress-bar/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/progress-bar-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatProgressBarModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/progress-bar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, EventEmitter, NgZone, AfterViewInit, OnDestroy, InjectionToken } from '@angular/core';\\nimport { CanColor, CanColorCtor } from '@angular/material/core';\\n/** Last animation end data. */\\nexport interface ProgressAnimationEnd {\\n    value: number;\\n}\\n/** @docs-private */\\ndeclare class MatProgressBarBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatProgressBarMixinBase: CanColorCtor & typeof MatProgressBarBase;\\n/**\\n * Injection token used to provide the current location to `MatProgressBar`.\\n * Used to handle server-side rendering and to stub out during unit tests.\\n * @docs-private\\n */\\nexport declare const MAT_PROGRESS_BAR_LOCATION: InjectionToken<MatProgressBarLocation>;\\n/**\\n * Stubbed out location for `MatProgressBar`.\\n * @docs-private\\n */\\nexport interface MatProgressBarLocation {\\n    getPathname: () => string;\\n}\\n/** @docs-private */\\nexport declare function MAT_PROGRESS_BAR_LOCATION_FACTORY(): MatProgressBarLocation;\\n/**\\n * `<mat-progress-bar>` component.\\n */\\nexport declare class MatProgressBar extends _MatProgressBarMixinBase implements CanColor, AfterViewInit, OnDestroy {\\n    _elementRef: ElementRef;\\n    private _ngZone;\\n    _animationMode?: string | undefined;\\n    constructor(_elementRef: ElementRef, _ngZone: NgZone, _animationMode?: string | undefined, \\n    /**\\n     * @deprecated `location` parameter to be made required.\\n     * @breaking-change 8.0.0\\n     */\\n    location?: MatProgressBarLocation);\\n    /** Flag that indicates whether NoopAnimations mode is set to true. */\\n    _isNoopAnimation: boolean;\\n    /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\\n    value: number;\\n    private _value;\\n    /** Buffer value of the progress bar. Defaults to zero. */\\n    bufferValue: number;\\n    private _bufferValue;\\n    _primaryValueBar: ElementRef;\\n    /**\\n     * Event emitted when animation of the primary progress bar completes. This event will not\\n     * be emitted when animations are disabled, nor will it be emitted for modes with continuous\\n     * animations (indeterminate and query).\\n     */\\n    animationEnd: EventEmitter<ProgressAnimationEnd>;\\n    /** Reference to animation end subscription to be unsubscribed on destroy. */\\n    private _animationEndSubscription;\\n    /**\\n     * Mode of the progress bar.\\n     *\\n     * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\\n     * 'determinate'.\\n     * Mirrored to mode attribute.\\n     */\\n    mode: 'determinate' | 'indeterminate' | 'buffer' | 'query';\\n    /** ID of the progress bar. */\\n    progressbarId: string;\\n    /** Attribute to be used for the `fill` attribute on the internal `rect` element. */\\n    _rectangleFillValue: string;\\n    /** Gets the current transform value for the progress bar's primary indicator. */\\n    _primaryTransform(): {\\n        transform: string;\\n    };\\n    /**\\n     * Gets the current transform value for the progress bar's buffer indicator. Only used if the\\n     * progress mode is set to buffer, otherwise returns an undefined, causing no transformation.\\n     */\\n    _bufferTransform(): {\\n        transform: string;\\n    } | undefined;\\n    ngAfterViewInit(): void;\\n    ngOnDestroy(): void;\\n    /** Emit an animationEnd event if in determinate or buffer mode. */\\n    private _emitAnimationEnd;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './progress-bar-module';\\nexport * from './progress-bar';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/testing/index.d.ts\",\n      \"node_modules/@angular/material/progress-bar/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/testing/progress-bar-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface ProgressBarHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/testing/progress-bar-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { ProgressBarHarnessFilters } from './progress-bar-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-progress-bar in tests.\\n * @dynamic\\n */\\nexport declare class MatProgressBarHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a progress bar with specific\\n     * attributes.\\n     */\\n    static with(options?: ProgressBarHarnessFilters): HarnessPredicate<MatProgressBarHarness>;\\n    /** Gets a promise for the progress bar's value. */\\n    getValue(): Promise<number | null>;\\n    /** Gets a promise for the progress bar's mode. */\\n    getMode(): Promise<string | null>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-bar/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './progress-bar-harness';\\nexport * from './progress-bar-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/index.d.ts\",\n      \"node_modules/@angular/material/progress-spinner/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/progress-spinner-module.d.ts\"\n    ],\n    \"content\": \"declare class MatProgressSpinnerModule {\\n}\\nexport { MatProgressSpinnerModule };\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/progress-spinner.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ElementRef, InjectionToken, OnInit } from '@angular/core';\\nimport { CanColor, CanColorCtor } from '@angular/material/core';\\n/** Possible mode for a progress spinner. */\\nexport declare type ProgressSpinnerMode = 'determinate' | 'indeterminate';\\n/** @docs-private */\\ndeclare class MatProgressSpinnerBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatProgressSpinnerMixinBase: CanColorCtor & typeof MatProgressSpinnerBase;\\n/** Default `mat-progress-spinner` options that can be overridden. */\\nexport interface MatProgressSpinnerDefaultOptions {\\n    /** Diameter of the spinner. */\\n    diameter?: number;\\n    /** Width of the spinner's stroke. */\\n    strokeWidth?: number;\\n    /**\\n     * Whether the animations should be force to be enabled, ignoring if the current environment is\\n     * using NoopAnimationsModule.\\n     */\\n    _forceAnimations?: boolean;\\n}\\n/** Injection token to be used to override the default options for `mat-progress-spinner`. */\\nexport declare const MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS: InjectionToken<MatProgressSpinnerDefaultOptions>;\\n/** @docs-private */\\nexport declare function MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY(): MatProgressSpinnerDefaultOptions;\\n/**\\n * `<mat-progress-spinner>` component.\\n */\\nexport declare class MatProgressSpinner extends _MatProgressSpinnerMixinBase implements OnInit, CanColor {\\n    _elementRef: ElementRef<HTMLElement>;\\n    private _document;\\n    private _diameter;\\n    private _value;\\n    private _strokeWidth;\\n    private _fallbackAnimation;\\n    /**\\n     * Element to which we should add the generated style tags for the indeterminate animation.\\n     * For most elements this is the document, but for the ones in the Shadow DOM we need to\\n     * use the shadow root.\\n     */\\n    private _styleRoot;\\n    /**\\n     * Tracks diameters of existing instances to de-dupe generated styles (default d = 100).\\n     * We need to keep track of which elements the diameters were attached to, because for\\n     * elements in the Shadow DOM the style tags are attached to the shadow root, rather\\n     * than the document head.\\n     */\\n    private static _diameters;\\n    /** Whether the _mat-animation-noopable class should be applied, disabling animations.  */\\n    _noopAnimations: boolean;\\n    /** The diameter of the progress spinner (will set width and height of svg). */\\n    diameter: number;\\n    /** Stroke width of the progress spinner. */\\n    strokeWidth: number;\\n    /** Mode of the progress circle */\\n    mode: ProgressSpinnerMode;\\n    /** Value of the progress circle. */\\n    value: number;\\n    constructor(_elementRef: ElementRef<HTMLElement>, platform: Platform, _document: any, animationMode: string, defaults?: MatProgressSpinnerDefaultOptions);\\n    ngOnInit(): void;\\n    /** The radius of the spinner, adjusted for stroke width. */\\n    readonly _circleRadius: number;\\n    /** The view box of the spinner's svg element. */\\n    readonly _viewBox: string;\\n    /** The stroke circumference of the svg circle. */\\n    readonly _strokeCircumference: number;\\n    /** The dash offset of the svg circle. */\\n    readonly _strokeDashOffset: number | null;\\n    /** Stroke width of the circle in percent. */\\n    readonly _circleStrokeWidth: number;\\n    /** Dynamically generates a style tag containing the correct animation for this diameter. */\\n    private _attachStyleNode;\\n    /** Generates animation styles adjusted for the spinner's diameter. */\\n    private _getAnimationText;\\n}\\n/**\\n * `<mat-spinner>` component.\\n *\\n * This is a component definition to be used as a convenience reference to create an\\n * indeterminate `<mat-progress-spinner>` instance.\\n */\\nexport declare class MatSpinner extends MatProgressSpinner {\\n    constructor(elementRef: ElementRef<HTMLElement>, platform: Platform, document: any, animationMode: string, defaults?: MatProgressSpinnerDefaultOptions);\\n}\\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\\nexport declare function _getShadowRoot(element: HTMLElement, _document: Document): Node | null;\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './progress-spinner-module';\\nexport { MatProgressSpinner, MatSpinner, MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS, ProgressSpinnerMode, MatProgressSpinnerDefaultOptions, MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, } from './progress-spinner';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/testing/index.d.ts\",\n      \"node_modules/@angular/material/progress-spinner/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/testing/progress-spinner-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface ProgressSpinnerHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/testing/progress-spinner-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\\nimport { ProgressSpinnerHarnessFilters } from './progress-spinner-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-progress-spinner in tests.\\n * @dynamic\\n */\\nexport declare class MatProgressSpinnerHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a progress bar with specific\\n     * attributes.\\n     */\\n    static with(options?: ProgressSpinnerHarnessFilters): HarnessPredicate<MatProgressSpinnerHarness>;\\n    /** Gets a promise for the progress spinner's value. */\\n    getValue(): Promise<number | null>;\\n    /** Gets a promise for the progress spinner's mode. */\\n    getMode(): Promise<ProgressSpinnerMode>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/progress-spinner/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './progress-spinner-harness';\\nexport * from './progress-spinner-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/index.d.ts\",\n      \"node_modules/@angular/material/radio/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './radio-module';\\nexport * from './radio';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/radio-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatRadioModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/radio.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor } from '@angular/cdk/a11y';\\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\\nimport { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, OnDestroy, OnInit, QueryList } from '@angular/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { CanDisableRipple, CanDisableRippleCtor, HasTabIndex, HasTabIndexCtor, ThemePalette } from '@angular/material/core';\\nexport interface MatRadioDefaultOptions {\\n    color: ThemePalette;\\n}\\nexport declare const MAT_RADIO_DEFAULT_OPTIONS: InjectionToken<MatRadioDefaultOptions>;\\nexport declare function MAT_RADIO_DEFAULT_OPTIONS_FACTORY(): MatRadioDefaultOptions;\\n/**\\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\\n * allows it to support [(ngModel)] and ngControl.\\n * @docs-private\\n */\\nexport declare const MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: any;\\n/** Change event object emitted by MatRadio and MatRadioGroup. */\\nexport declare class MatRadioChange {\\n    /** The MatRadioButton that emits the change event. */\\n    source: MatRadioButton;\\n    /** The value of the MatRadioButton. */\\n    value: any;\\n    constructor(\\n    /** The MatRadioButton that emits the change event. */\\n    source: MatRadioButton, \\n    /** The value of the MatRadioButton. */\\n    value: any);\\n}\\n/**\\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\\n */\\nexport declare class MatRadioGroup implements AfterContentInit, ControlValueAccessor {\\n    private _changeDetector;\\n    /** Selected value for the radio group. */\\n    private _value;\\n    /** The HTML name attribute applied to radio buttons in this group. */\\n    private _name;\\n    /** The currently selected radio button. Should match value. */\\n    private _selected;\\n    /** Whether the `value` has been set to its initial value. */\\n    private _isInitialized;\\n    /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\\n    private _labelPosition;\\n    /** Whether the radio group is disabled. */\\n    private _disabled;\\n    /** Whether the radio group is required. */\\n    private _required;\\n    /** The method to be called in order to update ngModel */\\n    _controlValueAccessorChangeFn: (value: any) => void;\\n    /**\\n     * onTouch function registered via registerOnTouch (ControlValueAccessor).\\n     * @docs-private\\n     */\\n    onTouched: () => any;\\n    /**\\n     * Event emitted when the group value changes.\\n     * Change events are only emitted when the value changes due to user interaction with\\n     * a radio button (the same behavior as `<input type-\\\"radio\\\">`).\\n     */\\n    readonly change: EventEmitter<MatRadioChange>;\\n    /** Child radio buttons. */\\n    _radios: QueryList<MatRadioButton>;\\n    /** Theme color for all of the radio buttons in the group. */\\n    color: ThemePalette;\\n    /** Name of the radio button group. All radio buttons inside this group will use this name. */\\n    name: string;\\n    /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\\n    labelPosition: 'before' | 'after';\\n    /**\\n     * Value for the radio-group. Should equal the value of the selected radio button if there is\\n     * a corresponding radio button with a matching value. If there is not such a corresponding\\n     * radio button, this value persists to be applied in case a new radio button is added with a\\n     * matching value.\\n     */\\n    value: any;\\n    _checkSelectedRadioButton(): void;\\n    /**\\n     * The currently selected radio button. If set to a new radio button, the radio group value\\n     * will be updated to match the new selected button.\\n     */\\n    selected: MatRadioButton | null;\\n    /** Whether the radio group is disabled */\\n    disabled: boolean;\\n    /** Whether the radio group is required */\\n    required: boolean;\\n    constructor(_changeDetector: ChangeDetectorRef);\\n    /**\\n     * Initialize properties once content children are available.\\n     * This allows us to propagate relevant attributes to associated buttons.\\n     */\\n    ngAfterContentInit(): void;\\n    /**\\n     * Mark this group as being \\\"touched\\\" (for ngModel). Meant to be called by the contained\\n     * radio buttons upon their blur.\\n     */\\n    _touch(): void;\\n    private _updateRadioButtonNames;\\n    /** Updates the `selected` radio button from the internal _value state. */\\n    private _updateSelectedRadioFromValue;\\n    /** Dispatch change event with current selection and group value. */\\n    _emitChangeEvent(): void;\\n    _markRadiosForCheck(): void;\\n    /**\\n     * Sets the model value. Implemented as part of ControlValueAccessor.\\n     * @param value\\n     */\\n    writeValue(value: any): void;\\n    /**\\n     * Registers a callback to be triggered when the model value changes.\\n     * Implemented as part of ControlValueAccessor.\\n     * @param fn Callback to be registered.\\n     */\\n    registerOnChange(fn: (value: any) => void): void;\\n    /**\\n     * Registers a callback to be triggered when the control is touched.\\n     * Implemented as part of ControlValueAccessor.\\n     * @param fn Callback to be registered.\\n     */\\n    registerOnTouched(fn: any): void;\\n    /**\\n     * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\\n     * @param isDisabled Whether the control should be disabled.\\n     */\\n    setDisabledState(isDisabled: boolean): void;\\n}\\n/** @docs-private */\\ndeclare class MatRadioButtonBase {\\n    _elementRef: ElementRef;\\n    disabled: boolean;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatRadioButtonMixinBase: CanDisableRippleCtor & HasTabIndexCtor & typeof MatRadioButtonBase;\\n/**\\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\\n */\\nexport declare class MatRadioButton extends _MatRadioButtonMixinBase implements OnInit, AfterViewInit, OnDestroy, CanDisableRipple, HasTabIndex {\\n    private _changeDetector;\\n    private _focusMonitor;\\n    private _radioDispatcher;\\n    _animationMode?: string | undefined;\\n    private _providerOverride?;\\n    private _uniqueId;\\n    /** The unique ID for the radio button. */\\n    id: string;\\n    /** Analog to HTML 'name' attribute used to group radios for unique selection. */\\n    name: string;\\n    /** Used to set the 'aria-label' attribute on the underlying input element. */\\n    ariaLabel: string;\\n    /** The 'aria-labelledby' attribute takes precedence as the element's text alternative. */\\n    ariaLabelledby: string;\\n    /** The 'aria-describedby' attribute is read after the element's label and field type. */\\n    ariaDescribedby: string;\\n    /** Whether this radio button is checked. */\\n    checked: boolean;\\n    /** The value of this radio button. */\\n    value: any;\\n    /** Whether the label should appear after or before the radio button. Defaults to 'after' */\\n    labelPosition: 'before' | 'after';\\n    private _labelPosition;\\n    /** Whether the radio button is disabled. */\\n    disabled: boolean;\\n    /** Whether the radio button is required. */\\n    required: boolean;\\n    /** Theme color of the radio button. */\\n    color: ThemePalette;\\n    private _color;\\n    /**\\n     * Event emitted when the checked state of this radio button changes.\\n     * Change events are only emitted when the value changes due to user interaction with\\n     * the radio button (the same behavior as `<input type-\\\"radio\\\">`).\\n     */\\n    readonly change: EventEmitter<MatRadioChange>;\\n    /** The parent radio group. May or may not be present. */\\n    radioGroup: MatRadioGroup;\\n    /** ID of the native input element inside `<mat-radio-button>` */\\n    readonly inputId: string;\\n    /** Whether this radio is checked. */\\n    private _checked;\\n    /** Whether this radio is disabled. */\\n    private _disabled;\\n    /** Whether this radio is required. */\\n    private _required;\\n    /** Value assigned to this radio. */\\n    private _value;\\n    /** Unregister function for _radioDispatcher */\\n    private _removeUniqueSelectionListener;\\n    /** The native `<input type=radio>` element */\\n    _inputElement: ElementRef<HTMLInputElement>;\\n    constructor(radioGroup: MatRadioGroup, elementRef: ElementRef, _changeDetector: ChangeDetectorRef, _focusMonitor: FocusMonitor, _radioDispatcher: UniqueSelectionDispatcher, _animationMode?: string | undefined, _providerOverride?: MatRadioDefaultOptions | undefined);\\n    /** Focuses the radio button. */\\n    focus(options?: FocusOptions): void;\\n    /**\\n     * Marks the radio button as needing checking for change detection.\\n     * This method is exposed because the parent radio group will directly\\n     * update bound properties of the radio button.\\n     */\\n    _markForCheck(): void;\\n    ngOnInit(): void;\\n    ngAfterViewInit(): void;\\n    ngOnDestroy(): void;\\n    /** Dispatch change event with current value. */\\n    private _emitChangeEvent;\\n    _isRippleDisabled(): boolean;\\n    _onInputClick(event: Event): void;\\n    /**\\n     * Triggered when the radio button received a click or the input recognized any change.\\n     * Clicking on a label element, will trigger a change event on the associated input.\\n     */\\n    _onInputChange(event: Event): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/testing/index.d.ts\",\n      \"node_modules/@angular/material/radio/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './radio-harness';\\nexport * from './radio-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/testing/radio-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface RadioGroupHarnessFilters extends BaseHarnessFilters {\\n    name?: string;\\n}\\nexport interface RadioButtonHarnessFilters extends BaseHarnessFilters {\\n    label?: string | RegExp;\\n    name?: string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/radio/testing/radio-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { RadioButtonHarnessFilters, RadioGroupHarnessFilters } from './radio-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-radio-group in tests.\\n * @dynamic\\n */\\nexport declare class MatRadioGroupHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a radio-group with\\n     * specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a radio-group whose host element matches the given selector.\\n     *   - `name` finds a radio-group with specific name.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: RadioGroupHarnessFilters): HarnessPredicate<MatRadioGroupHarness>;\\n    private _radioButtons;\\n    /** Gets the name of the radio-group. */\\n    getName(): Promise<string | null>;\\n    /** Gets the id of the radio-group. */\\n    getId(): Promise<string | null>;\\n    /** Gets the selected radio-button in a radio-group. */\\n    getSelectedRadioButton(): Promise<MatRadioButtonHarness | null>;\\n    /** Gets the selected value of the radio-group. */\\n    getSelectedValue(): Promise<string | null>;\\n    /** Gets all radio buttons which are part of the radio-group. */\\n    getRadioButtons(): Promise<MatRadioButtonHarness[]>;\\n    private _getGroupNameFromHost;\\n    private _getNamesFromRadioButtons;\\n    /** Checks if the specified radio names are all equal. */\\n    private _checkRadioNamesInGroupEqual;\\n    /**\\n     * Checks if a radio-group harness has the given name. Throws if a radio-group with\\n     * matching name could be found but has mismatching radio-button names.\\n     */\\n    private static _checkRadioGroupName;\\n}\\n/**\\n * Harness for interacting with a standard mat-radio-button in tests.\\n * @dynamic\\n */\\nexport declare class MatRadioButtonHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a radio-button with\\n     * specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a radio-button whose host element matches the given selector.\\n     *   - `label` finds a radio-button with specific label text.\\n     *   - `name` finds a radio-button with specific name.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: RadioButtonHarnessFilters): HarnessPredicate<MatRadioButtonHarness>;\\n    private _textLabel;\\n    private _clickLabel;\\n    private _input;\\n    /** Whether the radio-button is checked. */\\n    isChecked(): Promise<boolean>;\\n    /** Whether the radio-button is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /** Whether the radio-button is required. */\\n    isRequired(): Promise<boolean>;\\n    /** Gets a promise for the radio-button's name. */\\n    getName(): Promise<string | null>;\\n    /** Gets a promise for the radio-button's id. */\\n    getId(): Promise<string | null>;\\n    /**\\n     * Gets the value of the radio-button. The radio-button value will be\\n     * converted to a string.\\n     *\\n     * Note that this means that radio-button's with objects as value will\\n     * intentionally have the `[object Object]` as return value.\\n     */\\n    getValue(): Promise<string | null>;\\n    /** Gets a promise for the radio-button's label text. */\\n    getLabelText(): Promise<string>;\\n    /**\\n     * Focuses the radio-button and returns a void promise that indicates when the\\n     * action is complete.\\n     */\\n    focus(): Promise<void>;\\n    /**\\n     * Blurs the radio-button and returns a void promise that indicates when the\\n     * action is complete.\\n     */\\n    blur(): Promise<void>;\\n    /**\\n     * Puts the radio-button in a checked state by clicking it if it is currently unchecked,\\n     * or doing nothing if it is already checked. Returns a void promise that indicates when\\n     * the action is complete.\\n     */\\n    check(): Promise<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/select/index.d.ts\",\n      \"node_modules/@angular/material/select/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/select/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './select-module';\\nexport * from './select';\\nexport * from './select-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/select/select-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * The following are all the animations for the mat-select component, with each\\n * const containing the metadata for one animation.\\n *\\n * The values below match the implementation of the AngularJS Material mat-select animation.\\n * @docs-private\\n */\\nexport declare const matSelectAnimations: {\\n    readonly transformPanelWrap: AnimationTriggerMetadata;\\n    readonly transformPanel: AnimationTriggerMetadata;\\n    readonly fadeInContent: AnimationTriggerMetadata;\\n};\\n/**\\n * @deprecated\\n * @breaking-change 8.0.0\\n * @docs-private\\n */\\nexport declare const transformPanel: AnimationTriggerMetadata;\\n/**\\n * @deprecated\\n * @breaking-change 8.0.0\\n * @docs-private\\n */\\nexport declare const fadeInContent: AnimationTriggerMetadata;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/select/select-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/**\\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\\n * after initialization.\\n * @docs-private\\n */\\nexport declare function getMatSelectDynamicMultipleError(): Error;\\n/**\\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\\n * resetting the value.\\n * @docs-private\\n */\\nexport declare function getMatSelectNonArrayValueError(): Error;\\n/**\\n * Returns an exception to be thrown when assigning a non-function value to the comparator\\n * used to determine if a value corresponds to an option. Note that whether the function\\n * actually takes two values and returns a boolean is not checked.\\n */\\nexport declare function getMatSelectNonFunctionValueError(): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/select/select-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './select';\\nimport * as ɵngcc2 from '@angular/common';\\nimport * as ɵngcc3 from '@angular/cdk/overlay';\\nimport * as ɵngcc4 from '@angular/material/core';\\nimport * as ɵngcc5 from '@angular/material/form-field';\\nexport declare class MatSelectModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatSelectModule, [typeof ɵngcc1.MatSelect, typeof ɵngcc1.MatSelectTrigger], [typeof ɵngcc2.CommonModule, typeof ɵngcc3.OverlayModule, typeof ɵngcc4.MatOptionModule, typeof ɵngcc4.MatCommonModule], [typeof ɵngcc5.MatFormFieldModule, typeof ɵngcc1.MatSelect, typeof ɵngcc1.MatSelectTrigger, typeof ɵngcc4.MatOptionModule, typeof ɵngcc4.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatSelectModule>;\\n}\\n\\n//# sourceMappingURL=select-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/select/select.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ActiveDescendantKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { SelectionModel } from '@angular/cdk/collections';\\nimport { CdkConnectedOverlay, Overlay, ScrollStrategy } from '@angular/cdk/overlay';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { AfterContentInit, ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, InjectionToken, NgZone, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';\\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\\nimport { CanDisable, CanDisableCtor, CanDisableRipple, CanDisableRippleCtor, CanUpdateErrorState, CanUpdateErrorStateCtor, ErrorStateMatcher, HasTabIndex, HasTabIndexCtor, MatOptgroup, MatOption, MatOptionSelectionChange } from '@angular/material/core';\\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\\nimport { Observable, Subject } from 'rxjs';\\n/**\\n * The following style constants are necessary to save here in order\\n * to properly calculate the alignment of the selected option over\\n * the trigger element.\\n */\\n/** The max height of the select's overlay panel */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const SELECT_PANEL_MAX_HEIGHT = 256;\\n/** The panel's padding on the x-axis */\\nexport declare const SELECT_PANEL_PADDING_X = 16;\\n/** The panel's x axis padding if it is indented (e.g. there is an option group). */\\nexport declare const SELECT_PANEL_INDENT_PADDING_X: number;\\n/** The height of the select items in `em` units. */\\nexport declare const SELECT_ITEM_HEIGHT_EM = 3;\\n/**\\n * Distance between the panel edge and the option text in\\n * multi-selection mode.\\n *\\n * Calculated as:\\n * (SELECT_PANEL_PADDING_X * 1.5) + 16 = 40\\n * The padding is multiplied by 1.5 because the checkbox's margin is half the padding.\\n * The checkbox width is 16px.\\n */\\nexport declare const SELECT_MULTIPLE_PANEL_PADDING_X: number;\\n/**\\n * The select panel will only \\\"fit\\\" inside the viewport if it is positioned at\\n * this value or more away from the viewport boundary.\\n */\\nexport declare const SELECT_PANEL_VIEWPORT_PADDING = 8;\\n/** Injection token that determines the scroll handling while a select is open. */\\nexport declare const MAT_SELECT_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private */\\nexport declare function MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare const MAT_SELECT_SCROLL_STRATEGY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY;\\n};\\n/** Change event object that is emitted when the select value has changed. */\\nexport declare class MatSelectChange {\\n    /** Reference to the select that emitted the change event. */\\n    source: MatSelect;\\n    /** Current value of the select that emitted the event. */\\n    value: any;\\n    constructor(\\n    /** Reference to the select that emitted the change event. */\\n    source: MatSelect, \\n    /** Current value of the select that emitted the event. */\\n    value: any);\\n}\\n/** @docs-private */\\ndeclare class MatSelectBase {\\n    _elementRef: ElementRef;\\n    _defaultErrorStateMatcher: ErrorStateMatcher;\\n    _parentForm: NgForm;\\n    _parentFormGroup: FormGroupDirective;\\n    ngControl: NgControl;\\n    constructor(_elementRef: ElementRef, _defaultErrorStateMatcher: ErrorStateMatcher, _parentForm: NgForm, _parentFormGroup: FormGroupDirective, ngControl: NgControl);\\n}\\ndeclare const _MatSelectMixinBase: CanDisableCtor & HasTabIndexCtor & CanDisableRippleCtor & CanUpdateErrorStateCtor & typeof MatSelectBase;\\n/**\\n * Allows the user to customize the trigger that is displayed when the select has a value.\\n */\\nexport declare class MatSelectTrigger {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSelectTrigger>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatSelectTrigger, \\\"mat-select-trigger\\\", never, {}, {}, never>;\\n}\\nexport declare class MatSelect extends _MatSelectMixinBase implements AfterContentInit, OnChanges, OnDestroy, OnInit, DoCheck, ControlValueAccessor, CanDisable, HasTabIndex, MatFormFieldControl<any>, CanUpdateErrorState, CanDisableRipple {\\n    private _viewportRuler;\\n    private _changeDetectorRef;\\n    private _ngZone;\\n    private _dir;\\n    private _parentFormField;\\n    ngControl: NgControl;\\n    /**\\n     * @deprecated _liveAnnouncer to be turned into a required parameter.\\n     * @breaking-change 8.0.0\\n     */\\n    private _liveAnnouncer?;\\n    private _scrollStrategyFactory;\\n    /** Whether or not the overlay panel is open. */\\n    private _panelOpen;\\n    /** Whether filling out the select is required in the form. */\\n    private _required;\\n    /** The scroll position of the overlay panel, calculated to center the selected option. */\\n    private _scrollTop;\\n    /** The placeholder displayed in the trigger of the select. */\\n    private _placeholder;\\n    /** Whether the component is in multiple selection mode. */\\n    private _multiple;\\n    /** Comparison function to specify which option is displayed. Defaults to object equality. */\\n    private _compareWith;\\n    /** Unique id for this input. */\\n    private _uid;\\n    /** Emits whenever the component is destroyed. */\\n    private readonly _destroy;\\n    /** The last measured value for the trigger's client bounding rect. */\\n    _triggerRect: ClientRect;\\n    /** The aria-describedby attribute on the select for improved a11y. */\\n    _ariaDescribedby: string;\\n    /** The cached font-size of the trigger element. */\\n    _triggerFontSize: number;\\n    /** Deals with the selection logic. */\\n    _selectionModel: SelectionModel<MatOption>;\\n    /** Manages keyboard events for options in the panel. */\\n    _keyManager: ActiveDescendantKeyManager<MatOption>;\\n    /** `View -> model callback called when value changes` */\\n    _onChange: (value: any) => void;\\n    /** `View -> model callback called when select has been touched` */\\n    _onTouched: () => void;\\n    /** The IDs of child options to be passed to the aria-owns attribute. */\\n    _optionIds: string;\\n    /** The value of the select panel's transform-origin property. */\\n    _transformOrigin: string;\\n    /** Emits when the panel element is finished transforming in. */\\n    _panelDoneAnimatingStream: Subject<string>;\\n    /** Strategy that will be used to handle scrolling while the select panel is open. */\\n    _scrollStrategy: ScrollStrategy;\\n    /**\\n     * The y-offset of the overlay panel in relation to the trigger's top start corner.\\n     * This must be adjusted to align the selected option text over the trigger text.\\n     * when the panel opens. Will change based on the y-position of the selected option.\\n     */\\n    _offsetY: number;\\n    /**\\n     * This position config ensures that the top \\\"start\\\" corner of the overlay\\n     * is aligned with with the top \\\"start\\\" of the origin by default (overlapping\\n     * the trigger completely). If the panel cannot fit below the trigger, it\\n     * will fall back to a position above the trigger.\\n     */\\n    _positions: {\\n        originX: string;\\n        originY: string;\\n        overlayX: string;\\n        overlayY: string;\\n    }[];\\n    /** Whether the component is disabling centering of the active option over the trigger. */\\n    private _disableOptionCentering;\\n    /** Whether the select is focused. */\\n    /**\\n    * @deprecated Setter to be removed as this property is intended to be readonly.\\n    * @breaking-change 8.0.0\\n    */\\n    focused: boolean;\\n    private _focused;\\n    /** A name for this control that can be used by `mat-form-field`. */\\n    controlType: string;\\n    /** Trigger that opens the select. */\\n    trigger: ElementRef;\\n    /** Panel containing the select options. */\\n    panel: ElementRef;\\n    /** Overlay pane containing the options. */\\n    overlayDir: CdkConnectedOverlay;\\n    /** All of the defined select options. */\\n    options: QueryList<MatOption>;\\n    /** All of the defined groups of options. */\\n    optionGroups: QueryList<MatOptgroup>;\\n    /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */\\n    panelClass: string | string[] | Set<string> | {\\n        [key: string]: any;\\n    };\\n    /** User-supplied override of the trigger element. */\\n    customTrigger: MatSelectTrigger;\\n    /** Placeholder to be shown if no value has been selected. */\\n    placeholder: string;\\n    /** Whether the component is required. */\\n    required: boolean;\\n    /** Whether the user should be allowed to select multiple options. */\\n    multiple: boolean;\\n    /** Whether to center the active option over the trigger. */\\n    disableOptionCentering: boolean;\\n    /**\\n     * Function to compare the option values with the selected values. The first argument\\n     * is a value from an option. The second is a value from the selection. A boolean\\n     * should be returned.\\n     */\\n    compareWith: (o1: any, o2: any) => boolean;\\n    /** Value of the select control. */\\n    value: any;\\n    private _value;\\n    /** Aria label of the select. If not specified, the placeholder will be used as label. */\\n    ariaLabel: string;\\n    /** Input that can be used to specify the `aria-labelledby` attribute. */\\n    ariaLabelledby: string;\\n    /** Object used to control when error messages are shown. */\\n    errorStateMatcher: ErrorStateMatcher;\\n    /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\\n    typeaheadDebounceInterval: number;\\n    /**\\n     * Function used to sort the values in a select in multiple mode.\\n     * Follows the same logic as `Array.prototype.sort`.\\n     */\\n    sortComparator: (a: MatOption, b: MatOption, options: MatOption[]) => number;\\n    /** Unique id of the element. */\\n    id: string;\\n    private _id;\\n    /** Combined stream of all of the child options' change events. */\\n    readonly optionSelectionChanges: Observable<MatOptionSelectionChange>;\\n    /** Event emitted when the select panel has been toggled. */\\n    readonly openedChange: EventEmitter<boolean>;\\n    /** Event emitted when the select has been opened. */\\n    readonly _openedStream: Observable<void>;\\n    /** Event emitted when the select has been closed. */\\n    readonly _closedStream: Observable<void>;\\n    /** Event emitted when the selected value has been changed by the user. */\\n    readonly selectionChange: EventEmitter<MatSelectChange>;\\n    /**\\n     * Event that emits whenever the raw value of the select changes. This is here primarily\\n     * to facilitate the two-way binding for the `value` input.\\n     * @docs-private\\n     */\\n    readonly valueChange: EventEmitter<any>;\\n    constructor(_viewportRuler: ViewportRuler, _changeDetectorRef: ChangeDetectorRef, _ngZone: NgZone, _defaultErrorStateMatcher: ErrorStateMatcher, elementRef: ElementRef, _dir: Directionality, _parentForm: NgForm, _parentFormGroup: FormGroupDirective, _parentFormField: MatFormField, ngControl: NgControl, tabIndex: string, scrollStrategyFactory: any, \\n    /**\\n     * @deprecated _liveAnnouncer to be turned into a required parameter.\\n     * @breaking-change 8.0.0\\n     */\\n    _liveAnnouncer?: LiveAnnouncer | undefined);\\n    ngOnInit(): void;\\n    ngAfterContentInit(): void;\\n    ngDoCheck(): void;\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    /** Toggles the overlay panel open or closed. */\\n    toggle(): void;\\n    /** Opens the overlay panel. */\\n    open(): void;\\n    /** Closes the overlay panel and focuses the host element. */\\n    close(): void;\\n    /**\\n     * Sets the select's value. Part of the ControlValueAccessor interface\\n     * required to integrate with Angular's core forms API.\\n     *\\n     * @param value New value to be written to the model.\\n     */\\n    writeValue(value: any): void;\\n    /**\\n     * Saves a callback function to be invoked when the select's value\\n     * changes from user input. Part of the ControlValueAccessor interface\\n     * required to integrate with Angular's core forms API.\\n     *\\n     * @param fn Callback to be triggered when the value changes.\\n     */\\n    registerOnChange(fn: (value: any) => void): void;\\n    /**\\n     * Saves a callback function to be invoked when the select is blurred\\n     * by the user. Part of the ControlValueAccessor interface required\\n     * to integrate with Angular's core forms API.\\n     *\\n     * @param fn Callback to be triggered when the component has been touched.\\n     */\\n    registerOnTouched(fn: () => {}): void;\\n    /**\\n     * Disables the select. Part of the ControlValueAccessor interface required\\n     * to integrate with Angular's core forms API.\\n     *\\n     * @param isDisabled Sets whether the component is disabled.\\n     */\\n    setDisabledState(isDisabled: boolean): void;\\n    /** Whether or not the overlay panel is open. */\\n    readonly panelOpen: boolean;\\n    /** The currently selected option. */\\n    readonly selected: MatOption | MatOption[];\\n    /** The value displayed in the trigger. */\\n    readonly triggerValue: string;\\n    /** Whether the element is in RTL mode. */\\n    _isRtl(): boolean;\\n    /** Handles all keydown events on the select. */\\n    _handleKeydown(event: KeyboardEvent): void;\\n    /** Handles keyboard events while the select is closed. */\\n    private _handleClosedKeydown;\\n    /** Handles keyboard events when the selected is open. */\\n    private _handleOpenKeydown;\\n    _onFocus(): void;\\n    /**\\n     * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\\n     * \\\"blur\\\" to the panel when it opens, causing a false positive.\\n     */\\n    _onBlur(): void;\\n    /**\\n     * Callback that is invoked when the overlay panel has been attached.\\n     */\\n    _onAttached(): void;\\n    /** Returns the theme to be used on the panel. */\\n    _getPanelTheme(): string;\\n    /** Whether the select has a value. */\\n    readonly empty: boolean;\\n    private _initializeSelection;\\n    /**\\n     * Sets the selected option based on a value. If no option can be\\n     * found with the designated value, the select trigger is cleared.\\n     */\\n    private _setSelectionByValue;\\n    /**\\n     * Finds and selects and option based on its value.\\n     * @returns Option that has the corresponding value.\\n     */\\n    private _selectValue;\\n    /** Sets up a key manager to listen to keyboard events on the overlay panel. */\\n    private _initKeyManager;\\n    /** Drops current option subscriptions and IDs and resets from scratch. */\\n    private _resetOptions;\\n    /** Invoked when an option is clicked. */\\n    private _onSelect;\\n    /** Sorts the selected values in the selected based on their order in the panel. */\\n    private _sortValues;\\n    /** Emits change event to set the model value. */\\n    private _propagateChanges;\\n    /** Records option IDs to pass to the aria-owns property. */\\n    private _setOptionIds;\\n    /**\\n     * Highlights the selected item. If no option is selected, it will highlight\\n     * the first item instead.\\n     */\\n    private _highlightCorrectOption;\\n    /** Scrolls the active option into view. */\\n    private _scrollActiveOptionIntoView;\\n    /** Focuses the select element. */\\n    focus(options?: FocusOptions): void;\\n    /** Gets the index of the provided option in the option list. */\\n    private _getOptionIndex;\\n    /** Calculates the scroll position and x- and y-offsets of the overlay panel. */\\n    private _calculateOverlayPosition;\\n    /**\\n     * Calculates the scroll position of the select's overlay panel.\\n     *\\n     * Attempts to center the selected option in the panel. If the option is\\n     * too high or too low in the panel to be scrolled to the center, it clamps the\\n     * scroll position to the min or max scroll positions respectively.\\n     */\\n    _calculateOverlayScroll(selectedIndex: number, scrollBuffer: number, maxScroll: number): number;\\n    /** Returns the aria-label of the select component. */\\n    _getAriaLabel(): string | null;\\n    /** Returns the aria-labelledby of the select component. */\\n    _getAriaLabelledby(): string | null;\\n    /** Determines the `aria-activedescendant` to be set on the host. */\\n    _getAriaActiveDescendant(): string | null;\\n    /**\\n     * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\\n     * This must be adjusted to align the selected option text over the trigger text when\\n     * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\\n     * can't be calculated until the panel has been attached, because we need to know the\\n     * content width in order to constrain the panel within the viewport.\\n     */\\n    private _calculateOverlayOffsetX;\\n    /**\\n     * Calculates the y-offset of the select's overlay panel in relation to the\\n     * top start corner of the trigger. It has to be adjusted in order for the\\n     * selected option to be aligned over the trigger when the panel opens.\\n     */\\n    private _calculateOverlayOffsetY;\\n    /**\\n     * Checks that the attempted overlay position will fit within the viewport.\\n     * If it will not fit, tries to adjust the scroll position and the associated\\n     * y-offset so the panel can open fully on-screen. If it still won't fit,\\n     * sets the offset back to 0 to allow the fallback position to take over.\\n     */\\n    private _checkOverlayWithinViewport;\\n    /** Adjusts the overlay panel up to fit in the viewport. */\\n    private _adjustPanelUp;\\n    /** Adjusts the overlay panel down to fit in the viewport. */\\n    private _adjustPanelDown;\\n    /** Sets the transform origin point based on the selected option. */\\n    private _getOriginBasedOnOption;\\n    /** Calculates the amount of items in the select. This includes options and group labels. */\\n    private _getItemCount;\\n    /** Calculates the height of the select's options. */\\n    private _getItemHeight;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    setDescribedByIds(ids: string[]): void;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    onContainerClick(): void;\\n    /**\\n     * Implemented as part of MatFormFieldControl.\\n     * @docs-private\\n     */\\n    readonly shouldLabelFloat: boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSelect>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatSelect, \\\"mat-select\\\", [\\\"matSelect\\\"], { 'disabled': \\\"disabled\\\", 'disableRipple': \\\"disableRipple\\\", 'tabIndex': \\\"tabIndex\\\", 'ariaLabel': \\\"aria-label\\\", 'id': \\\"id\\\", 'placeholder': \\\"placeholder\\\", 'required': \\\"required\\\", 'multiple': \\\"multiple\\\", 'disableOptionCentering': \\\"disableOptionCentering\\\", 'compareWith': \\\"compareWith\\\", 'value': \\\"value\\\", 'panelClass': \\\"panelClass\\\", 'ariaLabelledby': \\\"aria-labelledby\\\", 'errorStateMatcher': \\\"errorStateMatcher\\\", 'typeaheadDebounceInterval': \\\"typeaheadDebounceInterval\\\", 'sortComparator': \\\"sortComparator\\\" }, { 'openedChange': \\\"openedChange\\\", '_openedStream': \\\"opened\\\", '_closedStream': \\\"closed\\\", 'selectionChange': \\\"selectionChange\\\", 'valueChange': \\\"valueChange\\\" }, [\\\"customTrigger\\\", \\\"options\\\", \\\"optionGroups\\\"]>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=select.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/drawer-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the Material drawers.\\n * @docs-private\\n */\\nexport declare const matDrawerAnimations: {\\n    readonly transformDrawer: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/drawer.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationEvent } from '@angular/animations';\\nimport { FocusMonitor, FocusOrigin, FocusTrapFactory } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\\nimport { AfterContentChecked, AfterContentInit, ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, QueryList } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\n/**\\n * Throws an exception when two MatDrawer are matching the same position.\\n * @docs-private\\n */\\nexport declare function throwMatDuplicatedDrawerError(position: string): void;\\n/** Result of the toggle promise that indicates the state of the drawer. */\\nexport declare type MatDrawerToggleResult = 'open' | 'close';\\n/** Configures whether drawers should use auto sizing by default. */\\nexport declare const MAT_DRAWER_DEFAULT_AUTOSIZE: InjectionToken<boolean>;\\n/** @docs-private */\\nexport declare function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY(): boolean;\\nexport declare class MatDrawerContent extends CdkScrollable implements AfterContentInit {\\n    private _changeDetectorRef;\\n    _container: MatDrawerContainer;\\n    constructor(_changeDetectorRef: ChangeDetectorRef, _container: MatDrawerContainer, elementRef: ElementRef<HTMLElement>, scrollDispatcher: ScrollDispatcher, ngZone: NgZone);\\n    ngAfterContentInit(): void;\\n}\\n/**\\n * This component corresponds to a drawer that can be opened on the drawer container.\\n */\\nexport declare class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestroy {\\n    private _elementRef;\\n    private _focusTrapFactory;\\n    private _focusMonitor;\\n    private _platform;\\n    private _ngZone;\\n    private _doc;\\n    private _focusTrap;\\n    private _elementFocusedBeforeDrawerWasOpened;\\n    /** Whether the drawer is initialized. Used for disabling the initial animation. */\\n    private _enableAnimations;\\n    /** The side that the drawer is attached to. */\\n    position: 'start' | 'end';\\n    private _position;\\n    /** Mode of the drawer; one of 'over', 'push' or 'side'. */\\n    mode: 'over' | 'push' | 'side';\\n    private _mode;\\n    /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\\n    disableClose: boolean;\\n    private _disableClose;\\n    /** Whether the drawer should focus the first focusable element automatically when opened. */\\n    autoFocus: boolean;\\n    private _autoFocus;\\n    /** How the sidenav was opened (keypress, mouse click etc.) */\\n    private _openedVia;\\n    /** Emits whenever the drawer has started animating. */\\n    _animationStarted: Subject<AnimationEvent>;\\n    /** Emits whenever the drawer is done animating. */\\n    _animationEnd: Subject<AnimationEvent>;\\n    /** Current state of the sidenav animation. */\\n    _animationState: 'open-instant' | 'open' | 'void';\\n    /** Event emitted when the drawer open state is changed. */\\n    readonly openedChange: EventEmitter<boolean>;\\n    /** Event emitted when the drawer has been opened. */\\n    readonly _openedStream: Observable<void>;\\n    /** Event emitted when the drawer has started opening. */\\n    readonly openedStart: Observable<void>;\\n    /** Event emitted when the drawer has been closed. */\\n    readonly _closedStream: Observable<void>;\\n    /** Event emitted when the drawer has started closing. */\\n    readonly closedStart: Observable<void>;\\n    /** Emits when the component is destroyed. */\\n    private readonly _destroyed;\\n    /** Event emitted when the drawer's position changes. */\\n    onPositionChanged: EventEmitter<void>;\\n    /**\\n     * An observable that emits when the drawer mode changes. This is used by the drawer container to\\n     * to know when to when the mode changes so it can adapt the margins on the content.\\n     */\\n    readonly _modeChanged: Subject<void>;\\n    readonly _isFocusTrapEnabled: boolean;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _focusTrapFactory: FocusTrapFactory, _focusMonitor: FocusMonitor, _platform: Platform, _ngZone: NgZone, _doc: any);\\n    /** Traps focus inside the drawer. */\\n    private _trapFocus;\\n    /**\\n     * If focus is currently inside the drawer, restores it to where it was before the drawer\\n     * opened.\\n     */\\n    private _restoreFocus;\\n    ngAfterContentInit(): void;\\n    ngAfterContentChecked(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Whether the drawer is opened. We overload this because we trigger an event when it\\n     * starts or end.\\n     */\\n    opened: boolean;\\n    private _opened;\\n    /**\\n     * Open the drawer.\\n     * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\\n     * Used for focus management after the sidenav is closed.\\n     */\\n    open(openedVia?: FocusOrigin): Promise<MatDrawerToggleResult>;\\n    /** Close the drawer. */\\n    close(): Promise<MatDrawerToggleResult>;\\n    /**\\n     * Toggle this drawer.\\n     * @param isOpen Whether the drawer should be open.\\n     * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\\n     * Used for focus management after the sidenav is closed.\\n     */\\n    toggle(isOpen?: boolean, openedVia?: FocusOrigin): Promise<MatDrawerToggleResult>;\\n    readonly _width: number;\\n    /** Updates the enabled state of the focus trap. */\\n    private _updateFocusTrapState;\\n    _animationStartListener(event: AnimationEvent): void;\\n    _animationDoneListener(event: AnimationEvent): void;\\n}\\n/**\\n * `<mat-drawer-container>` component.\\n *\\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\\n * and coordinates the backdrop and content styling.\\n */\\nexport declare class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy {\\n    private _dir;\\n    private _element;\\n    private _ngZone;\\n    private _changeDetectorRef;\\n    private _animationMode?;\\n    _drawers: QueryList<MatDrawer>;\\n    _content: MatDrawerContent;\\n    _userContent: MatDrawerContent;\\n    /** The drawer child with the `start` position. */\\n    readonly start: MatDrawer | null;\\n    /** The drawer child with the `end` position. */\\n    readonly end: MatDrawer | null;\\n    /**\\n     * Whether to automatically resize the container whenever\\n     * the size of any of its drawers changes.\\n     *\\n     * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\\n     * the drawers on every change detection cycle. Can be configured globally via the\\n     * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\\n     */\\n    autosize: boolean;\\n    private _autosize;\\n    /**\\n     * Whether the drawer container should have a backdrop while one of the sidenavs is open.\\n     * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\\n     * mode as well.\\n     */\\n    hasBackdrop: any;\\n    _backdropOverride: boolean | null;\\n    /** Event emitted when the drawer backdrop is clicked. */\\n    readonly backdropClick: EventEmitter<void>;\\n    /** The drawer at the start/end position, independent of direction. */\\n    private _start;\\n    private _end;\\n    /**\\n     * The drawer at the left/right. When direction changes, these will change as well.\\n     * They're used as aliases for the above to set the left/right style properly.\\n     * In LTR, _left == _start and _right == _end.\\n     * In RTL, _left == _end and _right == _start.\\n     */\\n    private _left;\\n    private _right;\\n    /** Emits when the component is destroyed. */\\n    private readonly _destroyed;\\n    /** Emits on every ngDoCheck. Used for debouncing reflows. */\\n    private readonly _doCheckSubject;\\n    /**\\n     * Margins to be applied to the content. These are used to push / shrink the drawer content when a\\n     * drawer is open. We use margin rather than transform even for push mode because transform breaks\\n     * fixed position elements inside of the transformed element.\\n     */\\n    _contentMargins: {\\n        left: number | null;\\n        right: number | null;\\n    };\\n    readonly _contentMarginChanges: Subject<{\\n        left: number | null;\\n        right: number | null;\\n    }>;\\n    /** Reference to the CdkScrollable instance that wraps the scrollable content. */\\n    readonly scrollable: CdkScrollable;\\n    constructor(_dir: Directionality, _element: ElementRef<HTMLElement>, _ngZone: NgZone, _changeDetectorRef: ChangeDetectorRef, viewportRuler: ViewportRuler, defaultAutosize?: boolean, _animationMode?: string | undefined);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Calls `open` of both start and end drawers */\\n    open(): void;\\n    /** Calls `close` of both start and end drawers */\\n    close(): void;\\n    /**\\n     * Recalculates and updates the inline styles for the content. Note that this should be used\\n     * sparingly, because it causes a reflow.\\n     */\\n    updateContentMargins(): void;\\n    ngDoCheck(): void;\\n    /**\\n     * Subscribes to drawer events in order to set a class on the main container element when the\\n     * drawer is open and the backdrop is visible. This ensures any overflow on the container element\\n     * is properly hidden.\\n     */\\n    private _watchDrawerToggle;\\n    /**\\n     * Subscribes to drawer onPositionChanged event in order to\\n     * re-validate drawers when the position changes.\\n     */\\n    private _watchDrawerPosition;\\n    /** Subscribes to changes in drawer mode so we can run change detection. */\\n    private _watchDrawerMode;\\n    /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\\n    private _setContainerClass;\\n    /** Validate the state of the drawer children components. */\\n    private _validateDrawers;\\n    /** Whether the container is being pushed to the side by one of the drawers. */\\n    private _isPushed;\\n    _onBackdropClicked(): void;\\n    _closeModalDrawer(): void;\\n    _isShowingBackdrop(): boolean;\\n    private _canHaveBackdrop;\\n    private _isDrawerOpen;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/index.d.ts\",\n      \"node_modules/@angular/material/sidenav/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './sidenav-module';\\nexport * from './drawer';\\nexport * from './sidenav';\\nexport * from './drawer-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/sidenav-module.d.ts\"\n    ],\n    \"content\": \"export declare class MatSidenavModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/sidenav.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ChangeDetectorRef, QueryList, ElementRef, NgZone } from '@angular/core';\\nimport { MatDrawer, MatDrawerContainer, MatDrawerContent } from './drawer';\\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\\nexport declare class MatSidenavContent extends MatDrawerContent {\\n    constructor(changeDetectorRef: ChangeDetectorRef, container: MatSidenavContainer, elementRef: ElementRef<HTMLElement>, scrollDispatcher: ScrollDispatcher, ngZone: NgZone);\\n}\\nexport declare class MatSidenav extends MatDrawer {\\n    /** Whether the sidenav is fixed in the viewport. */\\n    fixedInViewport: boolean;\\n    private _fixedInViewport;\\n    /**\\n     * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\\n     * mode.\\n     */\\n    fixedTopGap: number;\\n    private _fixedTopGap;\\n    /**\\n     * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\\n     * fixed mode.\\n     */\\n    fixedBottomGap: number;\\n    private _fixedBottomGap;\\n}\\nexport declare class MatSidenavContainer extends MatDrawerContainer {\\n    _drawers: QueryList<MatSidenav>;\\n    _content: MatSidenavContent;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/testing/drawer-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface DrawerHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/testing/drawer-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { DrawerHarnessFilters } from './drawer-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-drawer in tests.\\n * @dynamic\\n */\\nexport declare class MatDrawerHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a drawer with\\n     * specific attributes.\\n     * @param options Options for narrowing the search.\\n     * @return `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: DrawerHarnessFilters): HarnessPredicate<MatDrawerHarness>;\\n    /** Gets whether the drawer is open. */\\n    isOpen(): Promise<boolean>;\\n    /** Gets the position of the drawer inside its container. */\\n    getPosition(): Promise<'start' | 'end'>;\\n    /** Gets the mode that the drawer is in. */\\n    getMode(): Promise<'over' | 'push' | 'side'>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/testing/index.d.ts\",\n      \"node_modules/@angular/material/sidenav/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './drawer-harness';\\nexport * from './drawer-harness-filters';\\nexport * from './sidenav-harness';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sidenav/testing/sidenav-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { HarnessPredicate } from '@angular/cdk/testing';\\nimport { MatDrawerHarness } from './drawer-harness';\\nimport { DrawerHarnessFilters } from './drawer-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-sidenav in tests.\\n * @dynamic\\n */\\nexport declare class MatSidenavHarness extends MatDrawerHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a sidenav with\\n     * specific attributes.\\n     * @param options Options for narrowing the search.\\n     * @return `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: DrawerHarnessFilters): HarnessPredicate<MatDrawerHarness>;\\n    /** Gets whether the sidenav is fixed in the viewport. */\\n    isFixedInViewport(): Promise<boolean>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/index.d.ts\",\n      \"node_modules/@angular/material/slide-toggle/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './slide-toggle-module';\\nexport * from './slide-toggle';\\nexport * from './slide-toggle-config';\\nexport * from './slide-toggle-required-validator';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/slide-toggle-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { InjectionToken } from '@angular/core';\\n/** Default `mat-slide-toggle` options that can be overridden. */\\nexport interface MatSlideToggleDefaultOptions {\\n    /** Whether toggle action triggers value changes in slide toggle. */\\n    disableToggleValue?: boolean;\\n    /**\\n     * Whether drag action triggers value changes in slide toggle.\\n     * @deprecated No longer being used.\\n     * @breaking-change 10.0.0\\n     */\\n    disableDragValue?: boolean;\\n}\\n/** Injection token to be used to override the default options for `mat-slide-toggle`. */\\nexport declare const MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS: InjectionToken<MatSlideToggleDefaultOptions>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/slide-toggle-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** This module is used by both original and MDC-based slide-toggle implementations. */\\nexport declare class _MatSlideToggleRequiredValidatorModule {\\n}\\nexport declare class MatSlideToggleModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/slide-toggle-required-validator.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Provider } from '@angular/core';\\nimport { CheckboxRequiredValidator } from '@angular/forms';\\nexport declare const MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR: Provider;\\n/**\\n * Validator for Material slide-toggle components with the required attribute in a\\n * template-driven form. The default validator for required form controls asserts\\n * that the control value is not undefined but that is not appropriate for a slide-toggle\\n * where the value is always defined.\\n *\\n * Required slide-toggle form controls are valid when checked.\\n */\\nexport declare class MatSlideToggleRequiredValidator extends CheckboxRequiredValidator {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/slide-toggle.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, NgZone } from '@angular/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { CanColor, CanColorCtor, CanDisable, CanDisableCtor, CanDisableRipple, CanDisableRippleCtor, HasTabIndex, HasTabIndexCtor } from '@angular/material/core';\\nimport { MatSlideToggleDefaultOptions } from './slide-toggle-config';\\n/** @docs-private */\\nexport declare const MAT_SLIDE_TOGGLE_VALUE_ACCESSOR: any;\\n/** Change event object emitted by a MatSlideToggle. */\\nexport declare class MatSlideToggleChange {\\n    /** The source MatSlideToggle of the event. */\\n    source: MatSlideToggle;\\n    /** The new `checked` value of the MatSlideToggle. */\\n    checked: boolean;\\n    constructor(\\n    /** The source MatSlideToggle of the event. */\\n    source: MatSlideToggle, \\n    /** The new `checked` value of the MatSlideToggle. */\\n    checked: boolean);\\n}\\n/** @docs-private */\\ndeclare class MatSlideToggleBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatSlideToggleMixinBase: HasTabIndexCtor & CanColorCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatSlideToggleBase;\\n/** Represents a slidable \\\"switch\\\" toggle that can be moved between on and off. */\\nexport declare class MatSlideToggle extends _MatSlideToggleMixinBase implements OnDestroy, AfterContentInit, ControlValueAccessor, CanDisable, CanColor, HasTabIndex, CanDisableRipple {\\n    private _focusMonitor;\\n    private _changeDetectorRef;\\n    defaults: MatSlideToggleDefaultOptions;\\n    _animationMode?: string | undefined;\\n    private _onChange;\\n    private _onTouched;\\n    private _uniqueId;\\n    private _required;\\n    private _checked;\\n    /** Reference to the thumb HTMLElement. */\\n    _thumbEl: ElementRef;\\n    /** Reference to the thumb bar HTMLElement. */\\n    _thumbBarEl: ElementRef;\\n    /** Name value will be applied to the input element if present. */\\n    name: string | null;\\n    /** A unique id for the slide-toggle input. If none is supplied, it will be auto-generated. */\\n    id: string;\\n    /** Whether the label should appear after or before the slide-toggle. Defaults to 'after'. */\\n    labelPosition: 'before' | 'after';\\n    /** Used to set the aria-label attribute on the underlying input element. */\\n    ariaLabel: string | null;\\n    /** Used to set the aria-labelledby attribute on the underlying input element. */\\n    ariaLabelledby: string | null;\\n    /** Whether the slide-toggle is required. */\\n    required: boolean;\\n    /** Whether the slide-toggle element is checked or not. */\\n    checked: boolean;\\n    /** An event will be dispatched each time the slide-toggle changes its value. */\\n    readonly change: EventEmitter<MatSlideToggleChange>;\\n    /**\\n     * An event will be dispatched each time the slide-toggle input is toggled.\\n     * This event is always emitted when the user toggles the slide toggle, but this does not mean\\n     * the slide toggle's value has changed.\\n     */\\n    readonly toggleChange: EventEmitter<void>;\\n    /**\\n     * An event will be dispatched each time the slide-toggle is dragged.\\n     * This event is always emitted when the user drags the slide toggle to make a change greater\\n     * than 50%. It does not mean the slide toggle's value is changed. The event is not emitted when\\n     * the user toggles the slide toggle to change its value.\\n     * @deprecated No longer being used. To be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    readonly dragChange: EventEmitter<void>;\\n    /** Returns the unique id for the visual hidden input. */\\n    readonly inputId: string;\\n    /** Reference to the underlying input element. */\\n    _inputElement: ElementRef<HTMLInputElement>;\\n    constructor(elementRef: ElementRef, _focusMonitor: FocusMonitor, _changeDetectorRef: ChangeDetectorRef, tabIndex: string, \\n    /**\\n     * @deprecated `_ngZone` and `_dir` parameters to be removed.\\n     * @breaking-change 10.0.0\\n     */\\n    _ngZone: NgZone, defaults: MatSlideToggleDefaultOptions, _animationMode?: string | undefined, _dir?: Directionality);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Method being called whenever the underlying input emits a change event. */\\n    _onChangeEvent(event: Event): void;\\n    /** Method being called whenever the slide-toggle has been clicked. */\\n    _onInputClick(event: Event): void;\\n    /** Implemented as part of ControlValueAccessor. */\\n    writeValue(value: any): void;\\n    /** Implemented as part of ControlValueAccessor. */\\n    registerOnChange(fn: any): void;\\n    /** Implemented as part of ControlValueAccessor. */\\n    registerOnTouched(fn: any): void;\\n    /** Implemented as a part of ControlValueAccessor. */\\n    setDisabledState(isDisabled: boolean): void;\\n    /** Focuses the slide-toggle. */\\n    focus(options?: FocusOptions): void;\\n    /** Toggles the checked state of the slide-toggle. */\\n    toggle(): void;\\n    /**\\n     * Emits a change event on the `change` output. Also notifies the FormControl about the change.\\n     */\\n    private _emitChangeEvent;\\n    /** Method being called whenever the label text changes. */\\n    _onLabelTextChange(): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/testing/index.d.ts\",\n      \"node_modules/@angular/material/slide-toggle/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './slide-toggle-harness';\\nexport * from './slide-toggle-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/testing/slide-toggle-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface SlideToggleHarnessFilters extends BaseHarnessFilters {\\n    label?: string | RegExp;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slide-toggle/testing/slide-toggle-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { SlideToggleHarnessFilters } from './slide-toggle-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-slide-toggle in tests.\\n * @dynamic\\n */\\nexport declare class MatSlideToggleHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a slide-toggle w/ specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a slide-toggle whose host element matches the given selector.\\n     *   - `label` finds a slide-toggle with specific label text.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: SlideToggleHarnessFilters): HarnessPredicate<MatSlideToggleHarness>;\\n    private _label;\\n    private _input;\\n    private _inputContainer;\\n    /** Gets a boolean promise indicating if the slide-toggle is checked. */\\n    isChecked(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the slide-toggle is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the slide-toggle is required. */\\n    isRequired(): Promise<boolean>;\\n    /** Gets a boolean promise indicating if the slide-toggle is valid. */\\n    isValid(): Promise<boolean>;\\n    /** Gets a promise for the slide-toggle's name. */\\n    getName(): Promise<string | null>;\\n    /** Gets a promise for the slide-toggle's aria-label. */\\n    getAriaLabel(): Promise<string | null>;\\n    /** Gets a promise for the slide-toggle's aria-labelledby. */\\n    getAriaLabelledby(): Promise<string | null>;\\n    /** Gets a promise for the slide-toggle's label text. */\\n    getLabelText(): Promise<string>;\\n    /** Focuses the slide-toggle and returns a void promise that indicates action completion. */\\n    focus(): Promise<void>;\\n    /** Blurs the slide-toggle and returns a void promise that indicates action completion. */\\n    blur(): Promise<void>;\\n    /**\\n     * Toggle the checked state of the slide-toggle and returns a void promise that indicates when the\\n     * action is complete.\\n     *\\n     * Note: This toggles the slide-toggle as a user would, by clicking it.\\n     */\\n    toggle(): Promise<void>;\\n    /**\\n     * Puts the slide-toggle in a checked state by toggling it if it is currently unchecked, or doing\\n     * nothing if it is already checked. Returns a void promise that indicates when the action is\\n     * complete.\\n     *\\n     * Note: This attempts to check the slide-toggle as a user would, by clicking it.\\n     */\\n    check(): Promise<void>;\\n    /**\\n     * Puts the slide-toggle in an unchecked state by toggling it if it is currently checked, or doing\\n     * nothing if it is already unchecked. Returns a void promise that indicates when the action is\\n     * complete.\\n     *\\n     * Note: This toggles the slide-toggle as a user would, by clicking it.\\n     */\\n    uncheck(): Promise<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/index.d.ts\",\n      \"node_modules/@angular/material/slider/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './slider-module';\\nexport * from './slider';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/slider-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatSliderModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/slider.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, NgZone } from '@angular/core';\\nimport { ControlValueAccessor } from '@angular/forms';\\nimport { CanColor, CanColorCtor, CanDisable, CanDisableCtor, HasTabIndex, HasTabIndexCtor } from '@angular/material/core';\\n/**\\n * Provider Expression that allows mat-slider to register as a ControlValueAccessor.\\n * This allows it to support [(ngModel)] and [formControl].\\n * @docs-private\\n */\\nexport declare const MAT_SLIDER_VALUE_ACCESSOR: any;\\n/** A simple change event emitted by the MatSlider component. */\\nexport declare class MatSliderChange {\\n    /** The MatSlider that changed. */\\n    source: MatSlider;\\n    /** The new value of the source slider. */\\n    value: number | null;\\n}\\n/** @docs-private */\\ndeclare class MatSliderBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatSliderMixinBase: HasTabIndexCtor & CanColorCtor & CanDisableCtor & typeof MatSliderBase;\\n/**\\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\\n * behavior to the native `<input type=\\\"range\\\">` element.\\n */\\nexport declare class MatSlider extends _MatSliderMixinBase implements ControlValueAccessor, OnDestroy, CanDisable, CanColor, OnInit, HasTabIndex {\\n    private _focusMonitor;\\n    private _changeDetectorRef;\\n    private _dir;\\n    _animationMode?: string | undefined;\\n    private _ngZone?;\\n    /** Whether the slider is inverted. */\\n    invert: boolean;\\n    private _invert;\\n    /** The maximum value that the slider can have. */\\n    max: number;\\n    private _max;\\n    /** The minimum value that the slider can have. */\\n    min: number;\\n    private _min;\\n    /** The values at which the thumb will snap. */\\n    step: number;\\n    private _step;\\n    /** Whether or not to show the thumb label. */\\n    thumbLabel: boolean;\\n    private _thumbLabel;\\n    /**\\n     * How often to show ticks. Relative to the step so that a tick always appears on a step.\\n     * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).\\n     */\\n    tickInterval: 'auto' | number;\\n    private _tickInterval;\\n    /** Value of the slider. */\\n    value: number | null;\\n    private _value;\\n    /**\\n     * Function that will be used to format the value before it is displayed\\n     * in the thumb label. Can be used to format very large number in order\\n     * for them to fit into the slider thumb.\\n     */\\n    displayWith: (value: number) => string | number;\\n    /** Whether the slider is vertical. */\\n    vertical: boolean;\\n    private _vertical;\\n    /** Event emitted when the slider value has changed. */\\n    readonly change: EventEmitter<MatSliderChange>;\\n    /** Event emitted when the slider thumb moves. */\\n    readonly input: EventEmitter<MatSliderChange>;\\n    /**\\n     * Emits when the raw value of the slider changes. This is here primarily\\n     * to facilitate the two-way binding for the `value` input.\\n     * @docs-private\\n     */\\n    readonly valueChange: EventEmitter<number | null>;\\n    /** The value to be used for display purposes. */\\n    readonly displayValue: string | number;\\n    /** set focus to the host element */\\n    focus(options?: FocusOptions): void;\\n    /** blur the host element */\\n    blur(): void;\\n    /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\\n    onTouched: () => any;\\n    /** The percentage of the slider that coincides with the value. */\\n    readonly percent: number;\\n    private _percent;\\n    /**\\n     * Whether or not the thumb is sliding.\\n     * Used to determine if there should be a transition for the thumb and fill track.\\n     */\\n    _isSliding: boolean;\\n    /**\\n     * Whether or not the slider is active (clicked or sliding).\\n     * Used to shrink and grow the thumb as according to the Material Design spec.\\n     */\\n    _isActive: boolean;\\n    /**\\n     * Whether the axis of the slider is inverted.\\n     * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).\\n     */\\n    readonly _invertAxis: boolean;\\n    /** Whether the slider is at its minimum value. */\\n    readonly _isMinValue: boolean;\\n    /**\\n     * The amount of space to leave between the slider thumb and the track fill & track background\\n     * elements.\\n     */\\n    readonly _thumbGap: 7 | 10 | 0;\\n    /** CSS styles for the track background element. */\\n    readonly _trackBackgroundStyles: {\\n        [key: string]: string;\\n    };\\n    /** CSS styles for the track fill element. */\\n    readonly _trackFillStyles: {\\n        [key: string]: string;\\n    };\\n    /** CSS styles for the ticks container element. */\\n    readonly _ticksContainerStyles: {\\n        [key: string]: string;\\n    };\\n    /** CSS styles for the ticks element. */\\n    readonly _ticksStyles: {\\n        [key: string]: string;\\n    };\\n    readonly _thumbContainerStyles: {\\n        [key: string]: string;\\n    };\\n    /** The size of a tick interval as a percentage of the size of the track. */\\n    private _tickIntervalPercent;\\n    /** The dimensions of the slider. */\\n    private _sliderDimensions;\\n    private _controlValueAccessorChangeFn;\\n    /** Decimal places to round to, based on the step amount. */\\n    private _roundToDecimal;\\n    /** Subscription to the Directionality change EventEmitter. */\\n    private _dirChangeSubscription;\\n    /** The value of the slider when the slide start event fires. */\\n    private _valueOnSlideStart;\\n    /** Position of the pointer when the dragging started. */\\n    private _pointerPositionOnStart;\\n    /** Reference to the inner slider wrapper element. */\\n    private _sliderWrapper;\\n    /**\\n     * Whether mouse events should be converted to a slider position by calculating their distance\\n     * from the right or bottom edge of the slider as opposed to the top or left.\\n     */\\n    _shouldInvertMouseCoords(): boolean;\\n    /** The language direction for this slider element. */\\n    private _getDirection;\\n    constructor(elementRef: ElementRef, _focusMonitor: FocusMonitor, _changeDetectorRef: ChangeDetectorRef, _dir: Directionality, tabIndex: string, _animationMode?: string | undefined, _ngZone?: NgZone | undefined);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    _onMouseenter(): void;\\n    _onFocus(): void;\\n    _onBlur(): void;\\n    _onKeydown(event: KeyboardEvent): void;\\n    _onKeyup(): void;\\n    /** Called when the user has put their pointer down on the slider. */\\n    private _pointerDown;\\n    /**\\n     * Called when the user has moved their pointer after\\n     * starting to drag. Bound on the document level.\\n     */\\n    private _pointerMove;\\n    /** Called when the user has lifted their pointer. Bound on the document level. */\\n    private _pointerUp;\\n    /**\\n     * Binds our global move and end events. They're bound at the document level and only while\\n     * dragging so that the user doesn't have to keep their pointer exactly over the slider\\n     * as they're swiping across the screen.\\n     */\\n    private _bindGlobalEvents;\\n    /** Removes any global event listeners that we may have added. */\\n    private _removeGlobalEvents;\\n    /** Increments the slider by the given number of steps (negative number decrements). */\\n    private _increment;\\n    /** Calculate the new value from the new physical location. The value will always be snapped. */\\n    private _updateValueFromPosition;\\n    /** Emits a change event if the current value is different from the last emitted value. */\\n    private _emitChangeEvent;\\n    /** Emits an input event when the current value is different from the last emitted value. */\\n    private _emitInputEvent;\\n    /** Updates the amount of space between ticks as a percentage of the width of the slider. */\\n    private _updateTickIntervalPercent;\\n    /** Creates a slider change object from the specified value. */\\n    private _createChangeEvent;\\n    /** Calculates the percentage of the slider that a value is. */\\n    private _calculatePercentage;\\n    /** Calculates the value a percentage of the slider corresponds to. */\\n    private _calculateValue;\\n    /** Return a number between two numbers. */\\n    private _clamp;\\n    /**\\n     * Get the bounding client rect of the slider track element.\\n     * The track is used rather than the native element to ignore the extra space that the thumb can\\n     * take up.\\n     */\\n    private _getSliderDimensions;\\n    /**\\n     * Focuses the native element.\\n     * Currently only used to allow a blur event to fire but will be used with keyboard input later.\\n     */\\n    private _focusHostElement;\\n    /** Blurs the native element. */\\n    private _blurHostElement;\\n    /** Runs a callback inside of the NgZone, if possible. */\\n    private _runInsideZone;\\n    /** Runs a callback outside of the NgZone, if possible. */\\n    private _runOutsizeZone;\\n    /**\\n     * Sets the model value. Implemented as part of ControlValueAccessor.\\n     * @param value\\n     */\\n    writeValue(value: any): void;\\n    /**\\n     * Registers a callback to be triggered when the value has changed.\\n     * Implemented as part of ControlValueAccessor.\\n     * @param fn Callback to be registered.\\n     */\\n    registerOnChange(fn: (value: any) => void): void;\\n    /**\\n     * Registers a callback to be triggered when the component is touched.\\n     * Implemented as part of ControlValueAccessor.\\n     * @param fn Callback to be registered.\\n     */\\n    registerOnTouched(fn: any): void;\\n    /**\\n     * Sets whether the component should be disabled.\\n     * Implemented as part of ControlValueAccessor.\\n     * @param isDisabled\\n     */\\n    setDisabledState(isDisabled: boolean): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/testing/index.d.ts\",\n      \"node_modules/@angular/material/slider/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './slider-harness';\\nexport * from './slider-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/testing/slider-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface SliderHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/slider/testing/slider-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { SliderHarnessFilters } from './slider-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-slider in tests.\\n * @dynamic\\n */\\nexport declare class MatSliderHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a mat-slider with\\n     * specific attributes.\\n     * @param options Options for narrowing the search:\\n     *   - `selector` finds a slider whose host element matches the given selector.\\n     *   - `id` finds a slider with specific id.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: SliderHarnessFilters): HarnessPredicate<MatSliderHarness>;\\n    private _textLabel;\\n    private _wrapper;\\n    /** Gets the slider's id. */\\n    getId(): Promise<string | null>;\\n    /** Gets the current display value of the slider. */\\n    getDisplayValue(): Promise<string>;\\n    /** Gets the current percentage value of the slider. */\\n    getPercentage(): Promise<number>;\\n    /** Gets the current value of the slider. */\\n    getValue(): Promise<number>;\\n    /** Gets the maximum value of the slider. */\\n    getMaxValue(): Promise<number>;\\n    /** Gets the minimum value of the slider. */\\n    getMinValue(): Promise<number>;\\n    /** Whether the slider is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /** Gets the orientation of the slider. */\\n    getOrientation(): Promise<'horizontal' | 'vertical'>;\\n    /**\\n     * Sets the value of the slider by clicking on the slider track.\\n     *\\n     * Note that in rare cases the value cannot be set to the exact specified value. This\\n     * can happen if not every value of the slider maps to a single pixel that could be\\n     * clicked using mouse interaction. In such cases consider using the keyboard to\\n     * select the given value or expand the slider's size for a better user experience.\\n     */\\n    setValue(value: number): Promise<void>;\\n    /**\\n     * Focuses the slider and returns a void promise that indicates when the\\n     * action is complete.\\n     */\\n    focus(): Promise<void>;\\n    /**\\n     * Blurs the slider and returns a void promise that indicates when the\\n     * action is complete.\\n     */\\n    blur(): Promise<void>;\\n    /** Calculates the percentage of the given value. */\\n    private _calculatePercentage;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/index.d.ts\",\n      \"node_modules/@angular/material/snack-bar/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './snack-bar-module';\\nexport * from './snack-bar';\\nexport * from './snack-bar-container';\\nexport * from './snack-bar-config';\\nexport * from './snack-bar-ref';\\nexport * from './simple-snack-bar';\\nexport * from './snack-bar-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/simple-snack-bar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { MatSnackBarRef } from './snack-bar-ref';\\n/**\\n * A component used to open as the default snack bar, matching material spec.\\n * This should only be used internally by the snack bar service.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class SimpleSnackBar {\\n    snackBarRef: MatSnackBarRef<SimpleSnackBar>;\\n    /** Data that was injected into the snack bar. */\\n    data: {\\n        message: string;\\n        action: string;\\n    };\\n    constructor(snackBarRef: MatSnackBarRef<SimpleSnackBar>, data: any);\\n    /** Performs the action on the snack bar. */\\n    action(): void;\\n    /** If the action button should be shown. */\\n    readonly hasAction: boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<SimpleSnackBar>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<SimpleSnackBar, \\\"simple-snack-bar\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=simple-snack-bar.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/snack-bar-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the Material snack bar.\\n * @docs-private\\n */\\nexport declare const matSnackBarAnimations: {\\n    readonly snackBarState: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/snack-bar-config.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ViewContainerRef, InjectionToken } from '@angular/core';\\nimport { AriaLivePoliteness } from '@angular/cdk/a11y';\\nimport { Direction } from '@angular/cdk/bidi';\\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\\nexport declare const MAT_SNACK_BAR_DATA: InjectionToken<any>;\\n/** Possible values for horizontalPosition on MatSnackBarConfig. */\\nexport declare type MatSnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\\n/** Possible values for verticalPosition on MatSnackBarConfig. */\\nexport declare type MatSnackBarVerticalPosition = 'top' | 'bottom';\\n/**\\n * Configuration used when opening a snack-bar.\\n */\\nexport declare class MatSnackBarConfig<D = any> {\\n    /** The politeness level for the MatAriaLiveAnnouncer announcement. */\\n    politeness?: AriaLivePoliteness;\\n    /**\\n     * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\\n     * component or template, the announcement message will default to the specified message.\\n     */\\n    announcementMessage?: string;\\n    /** The view container to place the overlay for the snack bar into. */\\n    viewContainerRef?: ViewContainerRef;\\n    /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\\n    duration?: number;\\n    /** Extra CSS classes to be added to the snack bar container. */\\n    panelClass?: string | string[];\\n    /** Text layout direction for the snack bar. */\\n    direction?: Direction;\\n    /** Data being injected into the child component. */\\n    data?: D | null;\\n    /** The horizontal position to place the snack bar. */\\n    horizontalPosition?: MatSnackBarHorizontalPosition;\\n    /** The vertical position to place the snack bar. */\\n    verticalPosition?: MatSnackBarVerticalPosition;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/snack-bar-container.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationEvent } from '@angular/animations';\\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\\nimport { ChangeDetectorRef, ComponentRef, ElementRef, EmbeddedViewRef, NgZone, OnDestroy } from '@angular/core';\\nimport { Observable, Subject } from 'rxjs';\\nimport { MatSnackBarConfig } from './snack-bar-config';\\n/**\\n * Internal component that wraps user-provided snack bar content.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatSnackBarContainer extends BasePortalOutlet implements OnDestroy {\\n    private _ngZone;\\n    private _elementRef;\\n    private _changeDetectorRef;\\n    /** The snack bar configuration. */\\n    snackBarConfig: MatSnackBarConfig;\\n    /** Whether the component has been destroyed. */\\n    private _destroyed;\\n    /** The portal outlet inside of this container into which the snack bar content will be loaded. */\\n    _portalOutlet: CdkPortalOutlet;\\n    /** Subject for notifying that the snack bar has exited from view. */\\n    readonly _onExit: Subject<any>;\\n    /** Subject for notifying that the snack bar has finished entering the view. */\\n    readonly _onEnter: Subject<any>;\\n    /** The state of the snack bar animations. */\\n    _animationState: string;\\n    /** ARIA role for the snack bar container. */\\n    _role: 'alert' | 'status' | null;\\n    constructor(_ngZone: NgZone, _elementRef: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, \\n    /** The snack bar configuration. */\\n    snackBarConfig: MatSnackBarConfig);\\n    /** Attach a component portal as content to this snack bar container. */\\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\\n    /** Attach a template portal as content to this snack bar container. */\\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\\n    /** Handle end of animations, updating the state of the snackbar. */\\n    onAnimationEnd(event: AnimationEvent): void;\\n    /** Begin animation of snack bar entrance into view. */\\n    enter(): void;\\n    /** Begin animation of the snack bar exiting from view. */\\n    exit(): Observable<void>;\\n    /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\\n    ngOnDestroy(): void;\\n    /**\\n     * Waits for the zone to settle before removing the element. Helps prevent\\n     * errors where we end up removing an element which is in the middle of an animation.\\n     */\\n    private _completeExit;\\n    /** Applies the various positioning and user-configured CSS classes to the snack bar. */\\n    private _applySnackBarClasses;\\n    /** Asserts that no content is already attached to the container. */\\n    private _assertNotAttached;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSnackBarContainer>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatSnackBarContainer, \\\"snack-bar-container\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=snack-bar-container.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/snack-bar-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './snack-bar-container';\\nimport * as ɵngcc2 from './simple-snack-bar';\\nimport * as ɵngcc3 from '@angular/cdk/overlay';\\nimport * as ɵngcc4 from '@angular/cdk/portal';\\nimport * as ɵngcc5 from '@angular/common';\\nimport * as ɵngcc6 from '@angular/material/button';\\nimport * as ɵngcc7 from '@angular/material/core';\\nexport declare class MatSnackBarModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatSnackBarModule, [typeof ɵngcc1.MatSnackBarContainer, typeof ɵngcc2.SimpleSnackBar], [typeof ɵngcc3.OverlayModule, typeof ɵngcc4.PortalModule, typeof ɵngcc5.CommonModule, typeof ɵngcc6.MatButtonModule, typeof ɵngcc7.MatCommonModule], [typeof ɵngcc1.MatSnackBarContainer, typeof ɵngcc7.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatSnackBarModule>;\\n}\\n\\n//# sourceMappingURL=snack-bar-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/snack-bar-ref.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { OverlayRef } from '@angular/cdk/overlay';\\nimport { Observable } from 'rxjs';\\nimport { MatSnackBarContainer } from './snack-bar-container';\\n/** Event that is emitted when a snack bar is dismissed. */\\nexport interface MatSnackBarDismiss {\\n    /** Whether the snack bar was dismissed using the action button. */\\n    dismissedByAction: boolean;\\n}\\n/**\\n * Reference to a snack bar dispatched from the snack bar service.\\n */\\nexport declare class MatSnackBarRef<T> {\\n    private _overlayRef;\\n    /** The instance of the component making up the content of the snack bar. */\\n    instance: T;\\n    /**\\n     * The instance of the component making up the content of the snack bar.\\n     * @docs-private\\n     */\\n    containerInstance: MatSnackBarContainer;\\n    /** Subject for notifying the user that the snack bar has been dismissed. */\\n    private readonly _afterDismissed;\\n    /** Subject for notifying the user that the snack bar has opened and appeared. */\\n    private readonly _afterOpened;\\n    /** Subject for notifying the user that the snack bar action was called. */\\n    private readonly _onAction;\\n    /**\\n     * Timeout ID for the duration setTimeout call. Used to clear the timeout if the snackbar is\\n     * dismissed before the duration passes.\\n     */\\n    private _durationTimeoutId;\\n    /** Whether the snack bar was dismissed using the action button. */\\n    private _dismissedByAction;\\n    constructor(containerInstance: MatSnackBarContainer, _overlayRef: OverlayRef);\\n    /** Dismisses the snack bar. */\\n    dismiss(): void;\\n    /** Marks the snackbar action clicked. */\\n    dismissWithAction(): void;\\n    /**\\n     * Marks the snackbar action clicked.\\n     * @deprecated Use `dismissWithAction` instead.\\n     * @breaking-change 8.0.0\\n     */\\n    closeWithAction(): void;\\n    /** Dismisses the snack bar after some duration */\\n    _dismissAfter(duration: number): void;\\n    /** Marks the snackbar as opened */\\n    _open(): void;\\n    /** Cleans up the DOM after closing. */\\n    private _finishDismiss;\\n    /** Gets an observable that is notified when the snack bar is finished closing. */\\n    afterDismissed(): Observable<MatSnackBarDismiss>;\\n    /** Gets an observable that is notified when the snack bar has opened and appeared. */\\n    afterOpened(): Observable<void>;\\n    /** Gets an observable that is notified when the snack bar action is called. */\\n    onAction(): Observable<void>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/snack-bar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\\nimport { BreakpointObserver } from '@angular/cdk/layout';\\nimport { Overlay } from '@angular/cdk/overlay';\\nimport { ComponentType } from '@angular/cdk/portal';\\nimport { EmbeddedViewRef, InjectionToken, Injector, TemplateRef, OnDestroy } from '@angular/core';\\nimport { SimpleSnackBar } from './simple-snack-bar';\\nimport { MatSnackBarConfig } from './snack-bar-config';\\nimport { MatSnackBarRef } from './snack-bar-ref';\\n/** Injection token that can be used to specify default snack bar. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare const MAT_SNACK_BAR_DEFAULT_OPTIONS: InjectionToken<MatSnackBarConfig<any>>;\\n/** @docs-private */\\nexport declare function MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY(): MatSnackBarConfig;\\n/**\\n * Service to dispatch Material Design snack bar messages.\\n */\\nexport declare class MatSnackBar implements OnDestroy {\\n    private _overlay;\\n    private _live;\\n    private _injector;\\n    private _breakpointObserver;\\n    private _parentSnackBar;\\n    private _defaultConfig;\\n    /**\\n     * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\\n     * If there is a parent snack-bar service, all operations should delegate to that parent\\n     * via `_openedSnackBarRef`.\\n     */\\n    private _snackBarRefAtThisLevel;\\n    /** Reference to the currently opened snackbar at *any* level. */\\n    _openedSnackBarRef: MatSnackBarRef<any> | null;\\n    constructor(_overlay: Overlay, _live: LiveAnnouncer, _injector: Injector, _breakpointObserver: BreakpointObserver, _parentSnackBar: MatSnackBar, _defaultConfig: MatSnackBarConfig);\\n    /**\\n     * Creates and dispatches a snack bar with a custom component for the content, removing any\\n     * currently opened snack bars.\\n     *\\n     * @param component Component to be instantiated.\\n     * @param config Extra configuration for the snack bar.\\n     */\\n    openFromComponent<T>(component: ComponentType<T>, config?: MatSnackBarConfig): MatSnackBarRef<T>;\\n    /**\\n     * Creates and dispatches a snack bar with a custom template for the content, removing any\\n     * currently opened snack bars.\\n     *\\n     * @param template Template to be instantiated.\\n     * @param config Extra configuration for the snack bar.\\n     */\\n    openFromTemplate(template: TemplateRef<any>, config?: MatSnackBarConfig): MatSnackBarRef<EmbeddedViewRef<any>>;\\n    /**\\n     * Opens a snackbar with a message and an optional action.\\n     * @param message The message to show in the snackbar.\\n     * @param action The label for the snackbar action.\\n     * @param config Additional configuration options for the snackbar.\\n     */\\n    open(message: string, action?: string, config?: MatSnackBarConfig): MatSnackBarRef<SimpleSnackBar>;\\n    /**\\n     * Dismisses the currently-visible snack bar.\\n     */\\n    dismiss(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Attaches the snack bar container component to the overlay.\\n     */\\n    private _attachSnackBarContainer;\\n    /**\\n     * Places a new component or a template as the content of the snack bar container.\\n     */\\n    private _attach;\\n    /** Animates the old snack bar out and the new one in. */\\n    private _animateSnackBar;\\n    /**\\n     * Creates a new overlay and places it in the correct location.\\n     * @param config The user-specified snack bar config.\\n     */\\n    private _createOverlay;\\n    /**\\n     * Creates an injector to be used inside of a snack bar component.\\n     * @param config Config that was used to create the snack bar.\\n     * @param snackBarRef Reference to the snack bar.\\n     */\\n    private _createInjector;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSnackBar>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MatSnackBar>;\\n}\\n\\n//# sourceMappingURL=snack-bar.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/testing/index.d.ts\",\n      \"node_modules/@angular/material/snack-bar/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './snack-bar-harness';\\nexport * from './snack-bar-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/testing/snack-bar-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface SnackBarHarnessFilters extends BaseHarnessFilters {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/snack-bar/testing/snack-bar-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { SnackBarHarnessFilters } from './snack-bar-harness-filters';\\n/**\\n * Harness for interacting with a standard mat-snack-bar in tests.\\n * @dynamic\\n */\\nexport declare class MatSnackBarHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    private _simpleSnackBar;\\n    private _simpleSnackBarMessage;\\n    private _simpleSnackBarActionButton;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a snack-bar with\\n     * specific attributes.\\n     * @param options Options for narrowing the search.\\n     *   - `selector` finds a snack-bar that matches the given selector. Note that the\\n     *                selector must match the snack-bar container element.\\n     * @return `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: SnackBarHarnessFilters): HarnessPredicate<MatSnackBarHarness>;\\n    /**\\n     * Gets the role of the snack-bar. The role of a snack-bar is determined based\\n     * on the ARIA politeness specified in the snack-bar config.\\n     */\\n    getRole(): Promise<'alert' | 'status' | null>;\\n    /**\\n     * Gets whether the snack-bar has an action. Method cannot be\\n     * used for snack-bar's with custom content.\\n     */\\n    hasAction(): Promise<boolean>;\\n    /**\\n     * Gets the description of the snack-bar. Method cannot be\\n     * used for snack-bar's without action or with custom content.\\n     */\\n    getActionDescription(): Promise<string>;\\n    /**\\n     * Dismisses the snack-bar by clicking the action button. Method cannot\\n     * be used for snack-bar's without action or with custom content.\\n     */\\n    dismissWithAction(): Promise<void>;\\n    /**\\n     * Gets the message of the snack-bar. Method cannot be used for\\n     * snack-bar's with custom content.\\n     */\\n    getMessage(): Promise<string>;\\n    /**\\n     * Asserts that the current snack-bar does not use custom content. Throws if\\n     * custom content is used.\\n     */\\n    private _assertSimpleSnackBar;\\n    /**\\n     * Asserts that the current snack-bar does not use custom content and has\\n     * an action defined. Otherwise an error will be thrown.\\n     */\\n    private _assertSimpleSnackBarWithAction;\\n    /** Gets whether the snack-bar is using the default content template. */\\n    private _isSimpleSnackBar;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/index.d.ts\",\n      \"node_modules/@angular/material/sort/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './sort-module';\\nexport * from './sort-direction';\\nexport * from './sort-header';\\nexport * from './sort-header-intl';\\nexport * from './sort';\\nexport * from './sort-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by MatSort.\\n * @docs-private\\n */\\nexport declare const matSortAnimations: {\\n    readonly indicator: AnimationTriggerMetadata;\\n    readonly leftPointer: AnimationTriggerMetadata;\\n    readonly rightPointer: AnimationTriggerMetadata;\\n    readonly arrowOpacity: AnimationTriggerMetadata;\\n    readonly arrowPosition: AnimationTriggerMetadata;\\n    readonly allowChildren: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort-direction.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare type SortDirection = 'asc' | 'desc' | '';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort-errors.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\n/** @docs-private */\\nexport declare function getSortDuplicateSortableIdError(id: string): Error;\\n/** @docs-private */\\nexport declare function getSortHeaderNotContainedWithinSortError(): Error;\\n/** @docs-private */\\nexport declare function getSortHeaderMissingIdError(): Error;\\n/** @docs-private */\\nexport declare function getSortInvalidDirectionError(direction: string): Error;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort-header-intl.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Optional } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/**\\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\\n * include it in a custom provider.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatSortHeaderIntl {\\n    /**\\n     * Stream that emits whenever the labels here are changed. Use this to notify\\n     * components if the labels have changed after initialization.\\n     */\\n    readonly changes: Subject<void>;\\n    /** ARIA label for the sorting button. */\\n    sortButtonLabel: (id: string) => string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSortHeaderIntl>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<MatSortHeaderIntl>;\\n}\\n/** @docs-private */\\nexport declare function MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl: MatSortHeaderIntl): MatSortHeaderIntl;\\n/** @docs-private */\\nexport declare const MAT_SORT_HEADER_INTL_PROVIDER: {\\n    provide: typeof MatSortHeaderIntl;\\n    deps: Optional[][];\\n    useFactory: typeof MAT_SORT_HEADER_INTL_PROVIDER_FACTORY;\\n};\\n\\n//# sourceMappingURL=sort-header-intl.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort-header.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';\\nimport { CanDisable, CanDisableCtor } from '@angular/material/core';\\nimport { MatSort, MatSortable } from './sort';\\nimport { SortDirection } from './sort-direction';\\nimport { MatSortHeaderIntl } from './sort-header-intl';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatSortHeaderBase {\\n}\\ndeclare const _MatSortHeaderMixinBase: CanDisableCtor & typeof MatSortHeaderBase;\\n/**\\n * Valid positions for the arrow to be in for its opacity and translation. If the state is a\\n * sort direction, the position of the arrow will be above/below and opacity 0. If the state is\\n * hint, the arrow will be in the center with a slight opacity. Active state means the arrow will\\n * be fully opaque in the center.\\n *\\n * @docs-private\\n */\\nexport declare type ArrowViewState = SortDirection | 'hint' | 'active';\\n/**\\n * States describing the arrow's animated position (animating fromState to toState).\\n * If the fromState is not defined, there will be no animated transition to the toState.\\n * @docs-private\\n */\\nexport interface ArrowViewStateTransition {\\n    fromState?: ArrowViewState;\\n    toState: ArrowViewState;\\n}\\n/** Column definition associated with a `MatSortHeader`. */\\ninterface MatSortHeaderColumnDef {\\n    name: string;\\n}\\n/**\\n * Applies sorting behavior (click to change sort) and styles to an element, including an\\n * arrow to display the current sort direction.\\n *\\n * Must be provided with an id and contained within a parent MatSort directive.\\n *\\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\\n * column definition.\\n */\\nexport declare class MatSortHeader extends _MatSortHeaderMixinBase implements CanDisable, MatSortable, OnDestroy, OnInit {\\n    _intl: MatSortHeaderIntl;\\n    _sort: MatSort;\\n    _columnDef: MatSortHeaderColumnDef;\\n    private _rerenderSubscription;\\n    /**\\n     * Flag set to true when the indicator should be displayed while the sort is not active. Used to\\n     * provide an affordance that the header is sortable by showing on focus and hover.\\n     */\\n    _showIndicatorHint: boolean;\\n    /**\\n     * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\\n     * position through the animation. If animations are currently disabled, the fromState is removed\\n     * so that there is no animation displayed.\\n     */\\n    _viewState: ArrowViewStateTransition;\\n    /** The direction the arrow should be facing according to the current state. */\\n    _arrowDirection: SortDirection;\\n    /**\\n     * Whether the view state animation should show the transition between the `from` and `to` states.\\n     */\\n    _disableViewStateAnimation: boolean;\\n    /**\\n     * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\\n     * the column's name.\\n     */\\n    id: string;\\n    /** Sets the position of the arrow that displays when sorted. */\\n    arrowPosition: 'before' | 'after';\\n    /** Overrides the sort start value of the containing MatSort for this MatSortable. */\\n    start: 'asc' | 'desc';\\n    /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\\n    disableClear: boolean;\\n    private _disableClear;\\n    constructor(_intl: MatSortHeaderIntl, changeDetectorRef: ChangeDetectorRef, _sort: MatSort, _columnDef: MatSortHeaderColumnDef);\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    /**\\n     * Sets the \\\"hint\\\" state such that the arrow will be semi-transparently displayed as a hint to the\\n     * user showing what the active sort will become. If set to false, the arrow will fade away.\\n     */\\n    _setIndicatorHintVisible(visible: boolean): void;\\n    /**\\n     * Sets the animation transition view state for the arrow's position and opacity. If the\\n     * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\\n     * no animation appears.\\n     */\\n    _setAnimationTransitionState(viewState: ArrowViewStateTransition): void;\\n    /** Triggers the sort on this sort header and removes the indicator hint. */\\n    _handleClick(): void;\\n    /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\\n    _isSorted(): boolean;\\n    /** Returns the animation state for the arrow direction (indicator and pointers). */\\n    _getArrowDirectionState(): string;\\n    /** Returns the arrow position state (opacity, translation). */\\n    _getArrowViewState(): string;\\n    /**\\n     * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\\n     * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\\n     * active sorted direction. The reason this is updated through a function is because the direction\\n     * should only be changed at specific times - when deactivated but the hint is displayed and when\\n     * the sort is active and the direction changes. Otherwise the arrow's direction should linger\\n     * in cases such as the sort becoming deactivated but we want to animate the arrow away while\\n     * preserving its direction, even though the next sort direction is actually different and should\\n     * only be changed once the arrow displays again (hint or activation).\\n     */\\n    _updateArrowDirection(): void;\\n    _isDisabled(): boolean;\\n    /**\\n     * Gets the aria-sort attribute that should be applied to this sort header. If this header\\n     * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\\n     * says that the aria-sort property should only be present on one header at a time, so removing\\n     * ensures this is true.\\n     */\\n    _getAriaSortAttribute(): \\\"ascending\\\" | \\\"descending\\\" | null;\\n    /** Whether the arrow inside the sort header should be rendered. */\\n    _renderArrow(): boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSortHeader>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatSortHeader, \\\"[mat-sort-header]\\\", [\\\"matSortHeader\\\"], { 'disabled': \\\"disabled\\\", 'arrowPosition': \\\"arrowPosition\\\", 'disableClear': \\\"disableClear\\\", 'id': \\\"mat-sort-header\\\", 'start': \\\"start\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=sort-header.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './sort';\\nimport * as ɵngcc2 from './sort-header';\\nimport * as ɵngcc3 from '@angular/common';\\nexport declare class MatSortModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatSortModule, [typeof ɵngcc1.MatSort, typeof ɵngcc2.MatSortHeader], [typeof ɵngcc3.CommonModule], [typeof ɵngcc1.MatSort, typeof ɵngcc2.MatSortHeader]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatSortModule>;\\n}\\n\\n//# sourceMappingURL=sort-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/sort/sort.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { EventEmitter, OnChanges, OnDestroy, OnInit } from '@angular/core';\\nimport { CanDisable, CanDisableCtor, HasInitialized, HasInitializedCtor } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\nimport { SortDirection } from './sort-direction';\\n/** Interface for a directive that holds sorting state consumed by `MatSortHeader`. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface MatSortable {\\n    /** The id of the column being sorted. */\\n    id: string;\\n    /** Starting sort direction. */\\n    start: 'asc' | 'desc';\\n    /** Whether to disable clearing the sorting state. */\\n    disableClear: boolean;\\n}\\n/** The current sort state. */\\nexport interface Sort {\\n    /** The id of the column being sorted. */\\n    active: string;\\n    /** The sort direction. */\\n    direction: SortDirection;\\n}\\n/** @docs-private */\\ndeclare class MatSortBase {\\n}\\ndeclare const _MatSortMixinBase: HasInitializedCtor & CanDisableCtor & typeof MatSortBase;\\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\\nexport declare class MatSort extends _MatSortMixinBase implements CanDisable, HasInitialized, OnChanges, OnDestroy, OnInit {\\n    /** Collection of all registered sortables that this directive manages. */\\n    sortables: Map<string, MatSortable>;\\n    /** Used to notify any child components listening to state changes. */\\n    readonly _stateChanges: Subject<void>;\\n    /** The id of the most recently sorted MatSortable. */\\n    active: string;\\n    /**\\n     * The direction to set when an MatSortable is initially sorted.\\n     * May be overriden by the MatSortable's sort start.\\n     */\\n    start: 'asc' | 'desc';\\n    /** The sort direction of the currently active MatSortable. */\\n    direction: SortDirection;\\n    private _direction;\\n    /**\\n     * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\\n     * May be overriden by the MatSortable's disable clear input.\\n     */\\n    disableClear: boolean;\\n    private _disableClear;\\n    /** Event emitted when the user changes either the active sort or sort direction. */\\n    readonly sortChange: EventEmitter<Sort>;\\n    /**\\n     * Register function to be used by the contained MatSortables. Adds the MatSortable to the\\n     * collection of MatSortables.\\n     */\\n    register(sortable: MatSortable): void;\\n    /**\\n     * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\\n     * collection of contained MatSortables.\\n     */\\n    deregister(sortable: MatSortable): void;\\n    /** Sets the active sort id and determines the new sort direction. */\\n    sort(sortable: MatSortable): void;\\n    /** Returns the next sort direction of the active sortable, checking for potential overrides. */\\n    getNextSortDirection(sortable: MatSortable): SortDirection;\\n    ngOnInit(): void;\\n    ngOnChanges(): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatSort>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatSort, \\\"[matSort]\\\", [\\\"matSort\\\"], { 'disabled': \\\"matSortDisabled\\\", 'start': \\\"matSortStart\\\", 'direction': \\\"matSortDirection\\\", 'disableClear': \\\"matSortDisableClear\\\", 'active': \\\"matSortActive\\\" }, { 'sortChange': \\\"matSortChange\\\" }, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=sort.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/index.d.ts\",\n      \"node_modules/@angular/material/stepper/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './stepper-module';\\nexport * from './step-label';\\nexport * from './stepper';\\nexport * from './stepper-button';\\nexport * from './step-header';\\nexport * from './stepper-intl';\\nexport * from './stepper-animations';\\nexport * from './stepper-icon';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/step-header.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { FocusMonitor } from '@angular/cdk/a11y';\\nimport { ChangeDetectorRef, ElementRef, OnDestroy, TemplateRef } from '@angular/core';\\nimport { MatStepLabel } from './step-label';\\nimport { MatStepperIntl } from './stepper-intl';\\nimport { MatStepperIconContext } from './stepper-icon';\\nimport { CdkStepHeader, StepState } from '@angular/cdk/stepper';\\nexport declare class MatStepHeader extends CdkStepHeader implements OnDestroy {\\n    _intl: MatStepperIntl;\\n    private _focusMonitor;\\n    private _intlSubscription;\\n    /** State of the given step. */\\n    state: StepState;\\n    /** Label of the given step. */\\n    label: MatStepLabel | string;\\n    /** Error message to display when there's an error. */\\n    errorMessage: string;\\n    /** Overrides for the header icons, passed in via the stepper. */\\n    iconOverrides: {\\n        [key: string]: TemplateRef<MatStepperIconContext>;\\n    };\\n    /** Index of the given step. */\\n    index: number;\\n    /** Whether the given step is selected. */\\n    selected: boolean;\\n    /** Whether the given step label is active. */\\n    active: boolean;\\n    /** Whether the given step is optional. */\\n    optional: boolean;\\n    /** Whether the ripple should be disabled. */\\n    disableRipple: boolean;\\n    constructor(_intl: MatStepperIntl, _focusMonitor: FocusMonitor, _elementRef: ElementRef<HTMLElement>, changeDetectorRef: ChangeDetectorRef);\\n    ngOnDestroy(): void;\\n    /** Focuses the step header. */\\n    focus(): void;\\n    /** Returns string label of given step if it is a text label. */\\n    _stringLabel(): string | null;\\n    /** Returns MatStepLabel if the label of given step is a template label. */\\n    _templateLabel(): MatStepLabel | null;\\n    /** Returns the host HTML element. */\\n    _getHostElement(): HTMLElement;\\n    /** Template context variables that are exposed to the `matStepperIcon` instances. */\\n    _getIconContext(): MatStepperIconContext;\\n    _getDefaultTextForState(state: StepState): string;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/step-label.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkStepLabel } from '@angular/cdk/stepper';\\nexport declare class MatStepLabel extends CdkStepLabel {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/stepper-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the Material steppers.\\n * @docs-private\\n */\\nexport declare const matStepperAnimations: {\\n    readonly horizontalStepTransition: AnimationTriggerMetadata;\\n    readonly verticalStepTransition: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/stepper-button.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkStepperNext, CdkStepperPrevious } from '@angular/cdk/stepper';\\n/** Button that moves to the next step in a stepper workflow. */\\nexport declare class MatStepperNext extends CdkStepperNext {\\n}\\n/** Button that moves to the previous step in a stepper workflow. */\\nexport declare class MatStepperPrevious extends CdkStepperPrevious {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/stepper-icon.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\nimport { StepState } from '@angular/cdk/stepper';\\n/** Template context available to an attached `matStepperIcon`. */\\nexport interface MatStepperIconContext {\\n    /** Index of the step. */\\n    index: number;\\n    /** Whether the step is currently active. */\\n    active: boolean;\\n    /** Whether the step is optional. */\\n    optional: boolean;\\n}\\n/**\\n * Template to be used to override the icons inside the step header.\\n */\\nexport declare class MatStepperIcon {\\n    templateRef: TemplateRef<MatStepperIconContext>;\\n    /** Name of the icon to be overridden. */\\n    name: StepState;\\n    constructor(templateRef: TemplateRef<MatStepperIconContext>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/stepper-intl.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Optional } from '@angular/core';\\nimport { Subject } from 'rxjs';\\n/** Stepper data that is required for internationalization. */\\nexport declare class MatStepperIntl {\\n    /**\\n     * Stream that emits whenever the labels here are changed. Use this to notify\\n     * components if the labels have changed after initialization.\\n     */\\n    readonly changes: Subject<void>;\\n    /** Label that is rendered below optional steps. */\\n    optionalLabel: string;\\n}\\n/** @docs-private */\\nexport declare function MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl: MatStepperIntl): MatStepperIntl;\\n/** @docs-private */\\nexport declare const MAT_STEPPER_INTL_PROVIDER: {\\n    provide: typeof MatStepperIntl;\\n    deps: Optional[][];\\n    useFactory: typeof MAT_STEPPER_INTL_PROVIDER_FACTORY;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/stepper-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatStepperModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/stepper/stepper.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { CdkStep, CdkStepper, StepperOptions } from '@angular/cdk/stepper';\\nimport { AnimationEvent } from '@angular/animations';\\nimport { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, QueryList, TemplateRef } from '@angular/core';\\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\\nimport { ErrorStateMatcher } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\nimport { MatStepHeader } from './step-header';\\nimport { MatStepLabel } from './step-label';\\nimport { MatStepperIcon, MatStepperIconContext } from './stepper-icon';\\nexport declare class MatStep extends CdkStep implements ErrorStateMatcher {\\n    private _errorStateMatcher;\\n    /** Content for step label given by `<ng-template matStepLabel>`. */\\n    stepLabel: MatStepLabel;\\n    /** @breaking-change 8.0.0 remove the `?` after `stepperOptions` */\\n    constructor(stepper: MatStepper, _errorStateMatcher: ErrorStateMatcher, stepperOptions?: StepperOptions);\\n    /** Custom error state matcher that additionally checks for validity of interacted form. */\\n    isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;\\n}\\nexport declare class MatStepper extends CdkStepper implements AfterContentInit {\\n    /** The list of step headers of the steps in the stepper. */\\n    _stepHeader: QueryList<MatStepHeader>;\\n    /** Steps that the stepper holds. */\\n    _steps: QueryList<MatStep>;\\n    /** Custom icon overrides passed in by the consumer. */\\n    _icons: QueryList<MatStepperIcon>;\\n    /** Event emitted when the current step is done transitioning in. */\\n    readonly animationDone: EventEmitter<void>;\\n    /** Whether ripples should be disabled for the step headers. */\\n    disableRipple: boolean;\\n    /** Consumer-specified template-refs to be used to override the header icons. */\\n    _iconOverrides: {\\n        [key: string]: TemplateRef<MatStepperIconContext>;\\n    };\\n    /** Stream of animation `done` events when the body expands/collapses. */\\n    _animationDone: Subject<AnimationEvent>;\\n    ngAfterContentInit(): void;\\n}\\nexport declare class MatHorizontalStepper extends MatStepper {\\n    /** Whether the label should display in bottom or end position. */\\n    labelPosition: 'bottom' | 'end';\\n}\\nexport declare class MatVerticalStepper extends MatStepper {\\n    constructor(dir: Directionality, changeDetectorRef: ChangeDetectorRef, elementRef?: ElementRef<HTMLElement>, _document?: any);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/cell.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef } from '@angular/core';\\nimport { CdkCell, CdkCellDef, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkHeaderCell, CdkHeaderCellDef } from '@angular/cdk/table';\\n/**\\n * Cell definition for the mat-table.\\n * Captures the template of a column's data row cell as well as cell-specific properties.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatCellDef extends CdkCellDef {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCellDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCellDef, \\\"[matCellDef]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Header cell definition for the mat-table.\\n * Captures the template of a column's header cell and as well as cell-specific properties.\\n */\\nexport declare class MatHeaderCellDef extends CdkHeaderCellDef {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatHeaderCellDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatHeaderCellDef, \\\"[matHeaderCellDef]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Footer cell definition for the mat-table.\\n * Captures the template of a column's footer cell and as well as cell-specific properties.\\n */\\nexport declare class MatFooterCellDef extends CdkFooterCellDef {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatFooterCellDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatFooterCellDef, \\\"[matFooterCellDef]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Column definition for the mat-table.\\n * Defines a set of cells available for a table column.\\n */\\nexport declare class MatColumnDef extends CdkColumnDef {\\n    /** Unique name for this column. */\\n    name: string;\\n    /** Whether this column should be sticky positioned at the start of the row */\\n    sticky: boolean;\\n    /** Whether this column should be sticky positioned on the end of the row */\\n    stickyEnd: boolean;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatColumnDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatColumnDef, \\\"[matColumnDef]\\\", never, { 'name': \\\"matColumnDef\\\", 'sticky': \\\"sticky\\\", 'stickyEnd': \\\"stickyEnd\\\" }, {}, never>;\\n}\\n/** Header cell template container that adds the right classes and role. */\\nexport declare class MatHeaderCell extends CdkHeaderCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef<HTMLElement>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatHeaderCell>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatHeaderCell, \\\"mat-header-cell, th[mat-header-cell]\\\", never, {}, {}, never>;\\n}\\n/** Footer cell template container that adds the right classes and role. */\\nexport declare class MatFooterCell extends CdkFooterCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatFooterCell>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatFooterCell, \\\"mat-footer-cell, td[mat-footer-cell]\\\", never, {}, {}, never>;\\n}\\n/** Cell template container that adds the right classes and role. */\\nexport declare class MatCell extends CdkCell {\\n    constructor(columnDef: CdkColumnDef, elementRef: ElementRef<HTMLElement>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatCell>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatCell, \\\"mat-cell, td[mat-cell]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=cell.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/index.d.ts\",\n      \"node_modules/@angular/material/table/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './table-module';\\nexport * from './cell';\\nexport * from './table';\\nexport * from './row';\\nexport * from './table-data-source';\\nexport * from './text-column';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/row.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkFooterRow, CdkFooterRowDef, CdkHeaderRow, CdkHeaderRowDef, CdkRow, CdkRowDef } from '@angular/cdk/table';\\n/**\\n * Header row definition for the mat-table.\\n * Captures the header row's template and other header properties such as the columns to display.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatHeaderRowDef extends CdkHeaderRowDef {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatHeaderRowDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatHeaderRowDef, \\\"[matHeaderRowDef]\\\", never, { 'columns': \\\"matHeaderRowDef\\\", 'sticky': \\\"matHeaderRowDefSticky\\\" }, {}, never>;\\n}\\n/**\\n * Footer row definition for the mat-table.\\n * Captures the footer row's template and other footer properties such as the columns to display.\\n */\\nexport declare class MatFooterRowDef extends CdkFooterRowDef {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatFooterRowDef>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatFooterRowDef, \\\"[matFooterRowDef]\\\", never, { 'columns': \\\"matFooterRowDef\\\", 'sticky': \\\"matFooterRowDefSticky\\\" }, {}, never>;\\n}\\n/**\\n * Data row definition for the mat-table.\\n * Captures the data row's template and other properties such as the columns to display and\\n * a when predicate that describes when this row should be used.\\n */\\nexport declare class MatRowDef<T> extends CdkRowDef<T> {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatRowDef<any>>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatRowDef<any>, \\\"[matRowDef]\\\", never, { 'columns': \\\"matRowDefColumns\\\", 'when': \\\"matRowDefWhen\\\" }, {}, never>;\\n}\\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\\nexport declare class MatHeaderRow extends CdkHeaderRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatHeaderRow>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatHeaderRow, \\\"mat-header-row, tr[mat-header-row]\\\", [\\\"matHeaderRow\\\"], {}, {}, never>;\\n}\\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\\nexport declare class MatFooterRow extends CdkFooterRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatFooterRow>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatFooterRow, \\\"mat-footer-row, tr[mat-footer-row]\\\", [\\\"matFooterRow\\\"], {}, {}, never>;\\n}\\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\\nexport declare class MatRow extends CdkRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatRow>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatRow, \\\"mat-row, tr[mat-row]\\\", [\\\"matRow\\\"], {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=row.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/table-data-source.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { DataSource } from '@angular/cdk/table';\\nimport { BehaviorSubject, Subscription } from 'rxjs';\\nimport { MatPaginator } from '@angular/material/paginator';\\nimport { MatSort } from '@angular/material/sort';\\n/**\\n * Data source that accepts a client-side data array and includes native support of filtering,\\n * sorting (using MatSort), and pagination (using MatPaginator).\\n *\\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\\n * properties are accessed. Also allows for filter customization by overriding filterTermAccessor,\\n * which defines how row data is converted to a string for filter matching.\\n *\\n * **Note:** This class is meant to be a simple data source to help you get started. As such\\n * it isn't equipped to handle some more advanced cases like robust i18n support or server-side\\n * interactions. If your app needs to support more advanced use cases, consider implementing your\\n * own `DataSource`.\\n */\\nexport declare class MatTableDataSource<T> extends DataSource<T> {\\n    /** Stream that emits when a new data array is set on the data source. */\\n    private readonly _data;\\n    /** Stream emitting render data to the table (depends on ordered data changes). */\\n    private readonly _renderData;\\n    /** Stream that emits when a new filter string is set on the data source. */\\n    private readonly _filter;\\n    /** Used to react to internal changes of the paginator that are made by the data source itself. */\\n    private readonly _internalPageChanges;\\n    /**\\n     * Subscription to the changes that should trigger an update to the table's rendered rows, such\\n     * as filtering, sorting, pagination, or base data changes.\\n     */\\n    _renderChangesSubscription: Subscription;\\n    /**\\n     * The filtered set of data that has been matched by the filter string, or all the data if there\\n     * is no filter. Useful for knowing the set of data the table represents.\\n     * For example, a 'selectAll()' function would likely want to select the set of filtered data\\n     * shown to the user rather than all the data.\\n     */\\n    filteredData: T[];\\n    /** Array of data that should be rendered by the table, where each object represents one row. */\\n    data: T[];\\n    /**\\n     * Filter term that should be used to filter out objects from the data array. To override how\\n     * data objects match to this filter string, provide a custom function for filterPredicate.\\n     */\\n    filter: string;\\n    /**\\n     * Instance of the MatSort directive used by the table to control its sorting. Sort changes\\n     * emitted by the MatSort will trigger an update to the table's rendered data.\\n     */\\n    sort: MatSort | null;\\n    private _sort;\\n    /**\\n     * Instance of the MatPaginator component used by the table to control what page of the data is\\n     * displayed. Page changes emitted by the MatPaginator will trigger an update to the\\n     * table's rendered data.\\n     *\\n     * Note that the data source uses the paginator's properties to calculate which page of data\\n     * should be displayed. If the paginator receives its properties as template inputs,\\n     * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\\n     * initialized before assigning it to this data source.\\n     */\\n    paginator: MatPaginator | null;\\n    private _paginator;\\n    /**\\n     * Data accessor function that is used for accessing data properties for sorting through\\n     * the default sortData function.\\n     * This default function assumes that the sort header IDs (which defaults to the column name)\\n     * matches the data's properties (e.g. column Xyz represents data['Xyz']).\\n     * May be set to a custom function for different behavior.\\n     * @param data Data object that is being accessed.\\n     * @param sortHeaderId The name of the column that represents the data.\\n     */\\n    sortingDataAccessor: ((data: T, sortHeaderId: string) => string | number);\\n    /**\\n     * Gets a sorted copy of the data array based on the state of the MatSort. Called\\n     * after changes are made to the filtered data or when sort changes are emitted from MatSort.\\n     * By default, the function retrieves the active sort and its direction and compares data\\n     * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\\n     * of data ordering.\\n     * @param data The array of data that should be sorted.\\n     * @param sort The connected MatSort that holds the current sort state.\\n     */\\n    sortData: ((data: T[], sort: MatSort) => T[]);\\n    /**\\n     * Checks if a data object matches the data source's filter string. By default, each data object\\n     * is converted to a string of its properties and returns true if the filter has\\n     * at least one occurrence in that string. By default, the filter string has its whitespace\\n     * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\\n     * filter matching.\\n     * @param data Data object used to check against the filter.\\n     * @param filter Filter string that has been set on the data source.\\n     * @returns Whether the filter matches against the data\\n     */\\n    filterPredicate: ((data: T, filter: string) => boolean);\\n    constructor(initialData?: T[]);\\n    /**\\n     * Subscribe to changes that should trigger an update to the table's rendered rows. When the\\n     * changes occur, process the current state of the filter, sort, and pagination along with\\n     * the provided base data and send it to the table for rendering.\\n     */\\n    _updateChangeSubscription(): void;\\n    /**\\n     * Returns a filtered data array where each filter object contains the filter string within\\n     * the result of the filterTermAccessor function. If no filter is set, returns the data array\\n     * as provided.\\n     */\\n    _filterData(data: T[]): T[];\\n    /**\\n     * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\\n     * data array as provided. Uses the default data accessor for data lookup, unless a\\n     * sortDataAccessor function is defined.\\n     */\\n    _orderData(data: T[]): T[];\\n    /**\\n     * Returns a paged slice of the provided data array according to the provided MatPaginator's page\\n     * index and length. If there is no paginator provided, returns the data array as provided.\\n     */\\n    _pageData(data: T[]): T[];\\n    /**\\n     * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\\n     * index does not exceed the paginator's last page. Values are changed in a resolved promise to\\n     * guard against making property changes within a round of change detection.\\n     */\\n    _updatePaginator(filteredDataLength: number): void;\\n    /**\\n     * Used by the MatTable. Called when it connects to the data source.\\n     * @docs-private\\n     */\\n    connect(): BehaviorSubject<T[]>;\\n    /**\\n     * Used by the MatTable. Called when it is destroyed. No-op.\\n     * @docs-private\\n     */\\n    disconnect(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/table-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './table';\\nimport * as ɵngcc2 from './cell';\\nimport * as ɵngcc3 from './row';\\nimport * as ɵngcc4 from './text-column';\\nimport * as ɵngcc5 from '@angular/cdk/table';\\nimport * as ɵngcc6 from '@angular/common';\\nimport * as ɵngcc7 from '@angular/material/core';\\nexport declare class MatTableModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatTableModule, [typeof ɵngcc1.MatTable, typeof ɵngcc2.MatHeaderCellDef, typeof ɵngcc3.MatHeaderRowDef, typeof ɵngcc2.MatColumnDef, typeof ɵngcc2.MatCellDef, typeof ɵngcc3.MatRowDef, typeof ɵngcc2.MatFooterCellDef, typeof ɵngcc3.MatFooterRowDef, typeof ɵngcc2.MatHeaderCell, typeof ɵngcc2.MatCell, typeof ɵngcc2.MatFooterCell, typeof ɵngcc3.MatHeaderRow, typeof ɵngcc3.MatRow, typeof ɵngcc3.MatFooterRow, typeof ɵngcc4.MatTextColumn], [typeof ɵngcc5.CdkTableModule, typeof ɵngcc6.CommonModule, typeof ɵngcc7.MatCommonModule], [typeof ɵngcc1.MatTable, typeof ɵngcc2.MatHeaderCellDef, typeof ɵngcc3.MatHeaderRowDef, typeof ɵngcc2.MatColumnDef, typeof ɵngcc2.MatCellDef, typeof ɵngcc3.MatRowDef, typeof ɵngcc2.MatFooterCellDef, typeof ɵngcc3.MatFooterRowDef, typeof ɵngcc2.MatHeaderCell, typeof ɵngcc2.MatCell, typeof ɵngcc2.MatFooterCell, typeof ɵngcc3.MatHeaderRow, typeof ɵngcc3.MatRow, typeof ɵngcc3.MatFooterRow, typeof ɵngcc4.MatTextColumn]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatTableModule>;\\n}\\n\\n//# sourceMappingURL=table-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/table.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTable } from '@angular/cdk/table';\\n/**\\n * Wrapper for the CdkTable with Material design styles.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatTable<T> extends CdkTable<T> {\\n    /** Overrides the sticky CSS class set by the `CdkTable`. */\\n    protected stickyCssClass: string;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTable<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTable<any>, \\\"mat-table, table[mat-table]\\\", [\\\"matTable\\\"], {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=table.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/table/text-column.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTextColumn } from '@angular/cdk/table';\\n/**\\n * Column that simply shows text content for the header and row cells. Assumes that the table\\n * is using the native table implementation (`<table>`).\\n *\\n * By default, the name of this column will be the header text and data property accessor.\\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\\n * input.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatTextColumn<T> extends CdkTextColumn<T> {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTextColumn<any>>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTextColumn<any>, \\\"mat-text-column\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=text-column.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/index.d.ts\",\n      \"node_modules/@angular/material/tabs/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\nexport { _MAT_INK_BAR_POSITIONER_FACTORY as ɵangular_material_src_material_tabs_tabs_a } from './ink-bar';\\nexport { MatPaginatedTabHeader as ɵangular_material_src_material_tabs_tabs_b } from './paginated-tab-header';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/ink-bar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef, InjectionToken, NgZone } from '@angular/core';\\n/**\\n * Interface for a a MatInkBar positioner method, defining the positioning and width of the ink\\n * bar in a set of tabs.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport interface _MatInkBarPositioner {\\n    (element: HTMLElement): {\\n        left: string;\\n        width: string;\\n    };\\n}\\n/** Injection token for the MatInkBar's Positioner. */\\nexport declare const _MAT_INK_BAR_POSITIONER: InjectionToken<_MatInkBarPositioner>;\\n/**\\n * The default positioner function for the MatInkBar.\\n * @docs-private\\n */\\nexport declare function _MAT_INK_BAR_POSITIONER_FACTORY(): _MatInkBarPositioner;\\n/**\\n * The ink-bar is used to display and animate the line underneath the current active tab label.\\n * @docs-private\\n */\\nexport declare class MatInkBar {\\n    private _elementRef;\\n    private _ngZone;\\n    private _inkBarPositioner;\\n    _animationMode?: string | undefined;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _ngZone: NgZone, _inkBarPositioner: _MatInkBarPositioner, _animationMode?: string | undefined);\\n    /**\\n     * Calculates the styles from the provided element in order to align the ink-bar to that element.\\n     * Shows the ink bar if previously set as hidden.\\n     * @param element\\n     */\\n    alignToElement(element: HTMLElement): void;\\n    /** Shows the ink bar. */\\n    show(): void;\\n    /** Hides the ink bar. */\\n    hide(): void;\\n    /**\\n     * Sets the proper styles to the ink bar element.\\n     * @param element\\n     */\\n    private _setStyles;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatInkBar>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatInkBar, \\\"mat-ink-bar\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=ink-bar.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/paginated-tab-header.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ChangeDetectorRef, ElementRef, NgZone, QueryList, EventEmitter, AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy } from '@angular/core';\\nimport { Direction, Directionality } from '@angular/cdk/bidi';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { FocusableOption } from '@angular/cdk/a11y';\\nimport { Subject } from 'rxjs';\\nimport { Platform } from '@angular/cdk/platform';\\n/**\\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\\n * beginning of the list.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type ScrollDirection = 'after' | 'before';\\n/** Item inside a paginated tab header. */\\nexport declare type MatPaginatedTabHeaderItem = FocusableOption & {\\n    elementRef: ElementRef;\\n};\\n/**\\n * Base class for a tab header that supported pagination.\\n * @docs-private\\n */\\nexport declare abstract class MatPaginatedTabHeader implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    protected _changeDetectorRef: ChangeDetectorRef;\\n    private _viewportRuler;\\n    private _dir;\\n    private _ngZone;\\n    /**\\n     * @deprecated @breaking-change 9.0.0 `_platform` and `_animationMode`\\n     * parameters to become required.\\n     */\\n    private _platform?;\\n    _animationMode?: string | undefined;\\n    abstract _items: QueryList<MatPaginatedTabHeaderItem>;\\n    abstract _inkBar: {\\n        hide: () => void;\\n        alignToElement: (element: HTMLElement) => void;\\n    };\\n    abstract _tabListContainer: ElementRef<HTMLElement>;\\n    abstract _tabList: ElementRef<HTMLElement>;\\n    abstract _nextPaginator: ElementRef<HTMLElement>;\\n    abstract _previousPaginator: ElementRef<HTMLElement>;\\n    /** The distance in pixels that the tab labels should be translated to the left. */\\n    private _scrollDistance;\\n    /** Whether the header should scroll to the selected index after the view has been checked. */\\n    private _selectedIndexChanged;\\n    /** Emits when the component is destroyed. */\\n    protected readonly _destroyed: Subject<void>;\\n    /** Whether the controls for pagination should be displayed */\\n    _showPaginationControls: boolean;\\n    /** Whether the tab list can be scrolled more towards the end of the tab label list. */\\n    _disableScrollAfter: boolean;\\n    /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\\n    _disableScrollBefore: boolean;\\n    /**\\n     * The number of tab labels that are displayed on the header. When this changes, the header\\n     * should re-evaluate the scroll position.\\n     */\\n    private _tabLabelCount;\\n    /** Whether the scroll distance has changed and should be applied after the view is checked. */\\n    private _scrollDistanceChanged;\\n    /** Used to manage focus between the tabs. */\\n    private _keyManager;\\n    /** Cached text content of the header. */\\n    private _currentTextContent;\\n    /** Stream that will stop the automated scrolling. */\\n    private _stopScrolling;\\n    /** The index of the active tab. */\\n    selectedIndex: number;\\n    private _selectedIndex;\\n    /** Event emitted when the option is selected. */\\n    readonly selectFocusedIndex: EventEmitter<number>;\\n    /** Event emitted when a label is focused. */\\n    readonly indexFocused: EventEmitter<number>;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _changeDetectorRef: ChangeDetectorRef, _viewportRuler: ViewportRuler, _dir: Directionality, _ngZone: NgZone, \\n    /**\\n     * @deprecated @breaking-change 9.0.0 `_platform` and `_animationMode`\\n     * parameters to become required.\\n     */\\n    _platform?: Platform | undefined, _animationMode?: string | undefined);\\n    /** Called when the user has selected an item via the keyboard. */\\n    protected abstract _itemSelected(event: KeyboardEvent): void;\\n    ngAfterViewInit(): void;\\n    ngAfterContentInit(): void;\\n    ngAfterContentChecked(): void;\\n    ngOnDestroy(): void;\\n    /** Handles keyboard events on the header. */\\n    _handleKeydown(event: KeyboardEvent): void;\\n    /**\\n     * Callback for when the MutationObserver detects that the content has changed.\\n     */\\n    _onContentChanges(): void;\\n    /**\\n     * Updates the view whether pagination should be enabled or not.\\n     *\\n     * WARNING: Calling this method can be very costly in terms of performance. It should be called\\n     * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\\n     * page.\\n     */\\n    updatePagination(): void;\\n    /** Tracks which element has focus; used for keyboard navigation */\\n    /** When the focus index is set, we must manually send focus to the correct label */\\n    focusIndex: number;\\n    /**\\n     * Determines if an index is valid.  If the tabs are not ready yet, we assume that the user is\\n     * providing a valid index and return true.\\n     */\\n    _isValidIndex(index: number): boolean;\\n    /**\\n     * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\\n     * scrolling is enabled.\\n     */\\n    _setTabFocus(tabIndex: number): void;\\n    /** The layout direction of the containing app. */\\n    _getLayoutDirection(): Direction;\\n    /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\\n    _updateTabScrollPosition(): void;\\n    /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\\n    scrollDistance: number;\\n    /**\\n     * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\\n     * the end of the list, respectively). The distance to scroll is computed to be a third of the\\n     * length of the tab list view window.\\n     *\\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\\n     * should be called sparingly.\\n     */\\n    _scrollHeader(direction: ScrollDirection): {\\n        maxScrollDistance: number;\\n        distance: number;\\n    };\\n    /** Handles click events on the pagination arrows. */\\n    _handlePaginatorClick(direction: ScrollDirection): void;\\n    /**\\n     * Moves the tab list such that the desired tab label (marked by index) is moved into view.\\n     *\\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\\n     * should be called sparingly.\\n     */\\n    _scrollToLabel(labelIndex: number): void;\\n    /**\\n     * Evaluate whether the pagination controls should be displayed. If the scroll width of the\\n     * tab list is wider than the size of the header container, then the pagination controls should\\n     * be shown.\\n     *\\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\\n     * should be called sparingly.\\n     */\\n    _checkPaginationEnabled(): void;\\n    /**\\n     * Evaluate whether the before and after controls should be enabled or disabled.\\n     * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\\n     * before button. If the header is at the end of the list (scroll distance is equal to the\\n     * maximum distance we can scroll), then disable the after button.\\n     *\\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\\n     * should be called sparingly.\\n     */\\n    _checkScrollingControls(): void;\\n    /**\\n     * Determines what is the maximum length in pixels that can be set for the scroll distance. This\\n     * is equal to the difference in width between the tab list container and tab header container.\\n     *\\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\\n     * should be called sparingly.\\n     */\\n    _getMaxScrollDistance(): number;\\n    /** Tells the ink-bar to align itself to the current label wrapper */\\n    _alignInkBarToSelectedTab(): void;\\n    /** Stops the currently-running paginator interval.  */\\n    _stopInterval(): void;\\n    /**\\n     * Handles the user pressing down on one of the paginators.\\n     * Starts scrolling the header after a certain amount of time.\\n     * @param direction In which direction the paginator should be scrolled.\\n     */\\n    _handlePaginatorPress(direction: ScrollDirection): void;\\n    /**\\n     * Scrolls the header to a given position.\\n     * @param position Position to which to scroll.\\n     * @returns Information on the current scroll distance and the maximum.\\n     */\\n    private _scrollTo;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatPaginatedTabHeader>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatPaginatedTabHeader, \\\"do-not-use-abstract-mat-paginated-tab-header\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=paginated-tab-header.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport { MatTabsModule } from './tabs-module';\\nexport * from './tab-group';\\nexport { MatInkBar, _MatInkBarPositioner, _MAT_INK_BAR_POSITIONER } from './ink-bar';\\nexport { MatTabBody, _MatTabBodyBase, MatTabBodyOriginState, MatTabBodyPositionState, MatTabBodyPortal } from './tab-body';\\nexport { MatTabHeader, _MatTabHeaderBase } from './tab-header';\\nexport { MatTabLabelWrapper } from './tab-label-wrapper';\\nexport { MatTab } from './tab';\\nexport { MatTabLabel } from './tab-label';\\nexport { MatTabNav, MatTabLink, _MatTabNavBase, _MatTabLinkBase } from './tab-nav-bar/index';\\nexport { MatTabContent } from './tab-content';\\nexport { ScrollDirection } from './paginated-tab-header';\\nexport * from './tabs-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-body.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit, ElementRef, ComponentFactoryResolver, ViewContainerRef } from '@angular/core';\\nimport { AnimationEvent } from '@angular/animations';\\nimport { TemplatePortal, CdkPortalOutlet, PortalHostDirective } from '@angular/cdk/portal';\\nimport { Directionality, Direction } from '@angular/cdk/bidi';\\nimport { Subject } from 'rxjs';\\n/**\\n * These position states are used internally as animation states for the tab body. Setting the\\n * position state to left, right, or center will transition the tab body from its current\\n * position to its respective state. If there is not current position (void, in the case of a new\\n * tab body), then there will be no transition animation to its state.\\n *\\n * In the case of a new tab body that should immediately be centered with an animating transition,\\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\\n * psuedo-prior state.\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type MatTabBodyPositionState = 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\\n/**\\n * The origin state is an internally used state that is set on a new tab body indicating if it\\n * began to the left or right of the prior selected index. For example, if the selected index was\\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\\n * origin of right because its index was greater than the prior selected index.\\n */\\nexport declare type MatTabBodyOriginState = 'left' | 'right';\\n/**\\n * The portal host directive for the contents of the tab.\\n * @docs-private\\n */\\nexport declare class MatTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\\n    private _host;\\n    /** Subscription to events for when the tab body begins centering. */\\n    private _centeringSub;\\n    /** Subscription to events for when the tab body finishes leaving from center position. */\\n    private _leavingSub;\\n    constructor(componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, _host: MatTabBody);\\n    /** Set initial visibility or set up subscription for changing visibility. */\\n    ngOnInit(): void;\\n    /** Clean up centering subscription. */\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabBodyPortal>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTabBodyPortal, \\\"[matTabBodyHost]\\\", never, {}, {}, never>;\\n}\\n/**\\n * Base class with all of the `MatTabBody` functionality.\\n * @docs-private\\n */\\nexport declare abstract class _MatTabBodyBase implements OnInit, OnDestroy {\\n    private _elementRef;\\n    private _dir;\\n    /** Current position of the tab-body in the tab-group. Zero means that the tab is visible. */\\n    private _positionIndex;\\n    /** Subscription to the directionality change observable. */\\n    private _dirChangeSubscription;\\n    /** Tab body position state. Used by the animation trigger for the current state. */\\n    _position: MatTabBodyPositionState;\\n    /** Emits when an animation on the tab is complete. */\\n    _translateTabComplete: Subject<AnimationEvent>;\\n    /** Event emitted when the tab begins to animate towards the center as the active tab. */\\n    readonly _onCentering: EventEmitter<number>;\\n    /** Event emitted before the centering of the tab begins. */\\n    readonly _beforeCentering: EventEmitter<boolean>;\\n    /** Event emitted before the centering of the tab begins. */\\n    readonly _afterLeavingCenter: EventEmitter<boolean>;\\n    /** Event emitted when the tab completes its animation towards the center. */\\n    readonly _onCentered: EventEmitter<void>;\\n    /** The portal host inside of this container into which the tab body content will be loaded. */\\n    abstract _portalHost: PortalHostDirective;\\n    /** The tab body content to display. */\\n    _content: TemplatePortal;\\n    /** Position that will be used when the tab is immediately becoming visible after creation. */\\n    origin: number;\\n    /** Duration for the tab's animation. */\\n    animationDuration: string;\\n    /** The shifted index position of the tab body, where zero represents the active center tab. */\\n    position: number;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _dir: Directionality, changeDetectorRef: ChangeDetectorRef);\\n    /**\\n     * After initialized, check if the content is centered and has an origin. If so, set the\\n     * special position states that transition the tab from the left or right before centering.\\n     */\\n    ngOnInit(): void;\\n    ngOnDestroy(): void;\\n    _onTranslateTabStarted(event: AnimationEvent): void;\\n    /** The text direction of the containing app. */\\n    _getLayoutDirection(): Direction;\\n    /** Whether the provided position state is considered center, regardless of origin. */\\n    _isCenterPosition(position: MatTabBodyPositionState | string): boolean;\\n    /** Computes the position state that will be used for the tab-body animation trigger. */\\n    private _computePositionAnimationState;\\n    /**\\n     * Computes the position state based on the specified origin position. This is used if the\\n     * tab is becoming visible immediately after creation.\\n     */\\n    private _computePositionFromOrigin;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<_MatTabBodyBase>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<_MatTabBodyBase, \\\"do-not-use-abstract-mat-tab-body-base\\\", never, { 'animationDuration': \\\"animationDuration\\\", 'position': \\\"position\\\", '_content': \\\"content\\\", 'origin': \\\"origin\\\" }, { '_onCentering': \\\"_onCentering\\\", '_beforeCentering': \\\"_beforeCentering\\\", '_afterLeavingCenter': \\\"_afterLeavingCenter\\\", '_onCentered': \\\"_onCentered\\\" }, never>;\\n}\\n/**\\n * Wrapper for the contents of a tab.\\n * @docs-private\\n */\\nexport declare class MatTabBody extends _MatTabBodyBase {\\n    _portalHost: PortalHostDirective;\\n    constructor(elementRef: ElementRef<HTMLElement>, dir: Directionality, changeDetectorRef: ChangeDetectorRef);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabBody>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTabBody, \\\"mat-tab-body\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=tab-body.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-content.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplateRef } from '@angular/core';\\n/** Decorates the `ng-template` tags and reads out the template from it. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatTabContent {\\n    template: TemplateRef<any>;\\n    constructor(template: TemplateRef<any>);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabContent>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTabContent, \\\"[matTabContent]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=tab-content.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-group.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AfterContentChecked, AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, QueryList, InjectionToken } from '@angular/core';\\nimport { CanColor, CanColorCtor, CanDisableRipple, CanDisableRippleCtor, ThemePalette } from '@angular/material/core';\\nimport { MatTab } from './tab';\\n/** A simple change event emitted on focus or selection changes. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatTabChangeEvent {\\n    /** Index of the currently-selected tab. */\\n    index: number;\\n    /** Reference to the currently-selected tab. */\\n    tab: MatTab;\\n}\\n/** Possible positions for the tab header. */\\nexport declare type MatTabHeaderPosition = 'above' | 'below';\\n/** Object that can be used to configure the default options for the tabs module. */\\nexport interface MatTabsConfig {\\n    /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\\n    animationDuration?: string;\\n}\\n/** Injection token that can be used to provide the default options the tabs module. */\\nexport declare const MAT_TABS_CONFIG: InjectionToken<MatTabsConfig>;\\n/** @docs-private */\\ndeclare class MatTabGroupMixinBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatTabGroupMixinBase: CanColorCtor & CanDisableRippleCtor & typeof MatTabGroupMixinBase;\\ninterface MatTabGroupBaseHeader {\\n    _alignInkBarToSelectedTab: () => void;\\n    focusIndex: number;\\n}\\n/**\\n * Base class with all of the `MatTabGroupBase` functionality.\\n * @docs-private\\n */\\nexport declare abstract class _MatTabGroupBase extends _MatTabGroupMixinBase implements AfterContentInit, AfterContentChecked, OnDestroy, CanColor, CanDisableRipple {\\n    private _changeDetectorRef;\\n    _animationMode?: string | undefined;\\n    abstract _tabs: QueryList<MatTab>;\\n    abstract _tabBodyWrapper: ElementRef;\\n    abstract _tabHeader: MatTabGroupBaseHeader;\\n    /** The tab index that should be selected after the content has been checked. */\\n    private _indexToSelect;\\n    /** Snapshot of the height of the tab body wrapper before another tab is activated. */\\n    private _tabBodyWrapperHeight;\\n    /** Subscription to tabs being added/removed. */\\n    private _tabsSubscription;\\n    /** Subscription to changes in the tab labels. */\\n    private _tabLabelSubscription;\\n    /** Whether the tab group should grow to the size of the active tab. */\\n    dynamicHeight: boolean;\\n    private _dynamicHeight;\\n    /** The index of the active tab. */\\n    selectedIndex: number | null;\\n    private _selectedIndex;\\n    /** Position of the tab header. */\\n    headerPosition: MatTabHeaderPosition;\\n    /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\\n    animationDuration: string;\\n    private _animationDuration;\\n    /** Background color of the tab group. */\\n    backgroundColor: ThemePalette;\\n    private _backgroundColor;\\n    /** Output to enable support for two-way binding on `[(selectedIndex)]` */\\n    readonly selectedIndexChange: EventEmitter<number>;\\n    /** Event emitted when focus has changed within a tab group. */\\n    readonly focusChange: EventEmitter<MatTabChangeEvent>;\\n    /** Event emitted when the body animation has completed */\\n    readonly animationDone: EventEmitter<void>;\\n    /** Event emitted when the tab selection has changed. */\\n    readonly selectedTabChange: EventEmitter<MatTabChangeEvent>;\\n    private _groupId;\\n    constructor(elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, defaultConfig?: MatTabsConfig, _animationMode?: string | undefined);\\n    /**\\n     * After the content is checked, this component knows what tabs have been defined\\n     * and what the selected index should be. This is where we can know exactly what position\\n     * each tab should be in according to the new selected index, and additionally we know how\\n     * a new selected tab should transition in (from the left or right).\\n     */\\n    ngAfterContentChecked(): void;\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n    /** Re-aligns the ink bar to the selected tab element. */\\n    realignInkBar(): void;\\n    _focusChanged(index: number): void;\\n    private _createChangeEvent;\\n    /**\\n     * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\\n     * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\\n     * binding to be updated, we need to subscribe to changes in it and trigger change detection\\n     * manually.\\n     */\\n    private _subscribeToTabLabels;\\n    /** Clamps the given index to the bounds of 0 and the tabs length. */\\n    private _clampTabIndex;\\n    /** Returns a unique id for each tab label element */\\n    _getTabLabelId(i: number): string;\\n    /** Returns a unique id for each tab content element */\\n    _getTabContentId(i: number): string;\\n    /**\\n     * Sets the height of the body wrapper to the height of the activating tab if dynamic\\n     * height property is true.\\n     */\\n    _setTabBodyWrapperHeight(tabHeight: number): void;\\n    /** Removes the height of the tab body wrapper. */\\n    _removeTabBodyWrapperHeight(): void;\\n    /** Handle click events, setting new selected index if appropriate. */\\n    _handleClick(tab: MatTab, tabHeader: MatTabGroupBaseHeader, index: number): void;\\n    /** Retrieves the tabindex for the tab. */\\n    _getTabIndex(tab: MatTab, idx: number): number | null;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<_MatTabGroupBase>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<_MatTabGroupBase, \\\"do-not-use-abstract-mat-tab-group-base\\\", never, { 'headerPosition': \\\"headerPosition\\\", 'animationDuration': \\\"animationDuration\\\", 'dynamicHeight': \\\"dynamicHeight\\\", 'selectedIndex': \\\"selectedIndex\\\", 'backgroundColor': \\\"backgroundColor\\\" }, { 'selectedIndexChange': \\\"selectedIndexChange\\\", 'focusChange': \\\"focusChange\\\", 'animationDone': \\\"animationDone\\\", 'selectedTabChange': \\\"selectedTabChange\\\" }, never>;\\n}\\n/**\\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\\n * animated ink-bar, keyboard navigation, and screen reader.\\n * See: https://material.io/design/components/tabs.html\\n */\\nexport declare class MatTabGroup extends _MatTabGroupBase {\\n    _tabs: QueryList<MatTab>;\\n    _tabBodyWrapper: ElementRef;\\n    _tabHeader: MatTabGroupBaseHeader;\\n    constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, defaultConfig?: MatTabsConfig, animationMode?: string);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabGroup>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTabGroup, \\\"mat-tab-group\\\", [\\\"matTabGroup\\\"], { 'color': \\\"color\\\", 'disableRipple': \\\"disableRipple\\\" }, {}, [\\\"_tabs\\\"]>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=tab-group.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-header.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { AfterContentChecked, AfterContentInit, ChangeDetectorRef, ElementRef, NgZone, OnDestroy, QueryList, AfterViewInit } from '@angular/core';\\nimport { MatInkBar } from './ink-bar';\\nimport { MatTabLabelWrapper } from './tab-label-wrapper';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { MatPaginatedTabHeader } from './paginated-tab-header';\\n/**\\n * Base class with all of the `MatTabHeader` functionality.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare abstract class _MatTabHeaderBase extends MatPaginatedTabHeader implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy {\\n    /** Whether the ripple effect is disabled or not. */\\n    disableRipple: any;\\n    private _disableRipple;\\n    constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, viewportRuler: ViewportRuler, dir: Directionality, ngZone: NgZone, platform: Platform, animationMode?: string);\\n    protected _itemSelected(event: KeyboardEvent): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<_MatTabHeaderBase>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<_MatTabHeaderBase, \\\"do-not-use-abstract-mat-tab-header-base\\\", never, { 'disableRipple': \\\"disableRipple\\\" }, {}, never>;\\n}\\n/**\\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\\n * width of the header container, then arrows will be displayed to allow the user to scroll\\n * left and right across the header.\\n * @docs-private\\n */\\nexport declare class MatTabHeader extends _MatTabHeaderBase {\\n    _items: QueryList<MatTabLabelWrapper>;\\n    _inkBar: MatInkBar;\\n    _tabListContainer: ElementRef;\\n    _tabList: ElementRef;\\n    _nextPaginator: ElementRef<HTMLElement>;\\n    _previousPaginator: ElementRef<HTMLElement>;\\n    constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, viewportRuler: ViewportRuler, dir: Directionality, ngZone: NgZone, platform: Platform, animationMode?: string);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabHeader>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTabHeader, \\\"mat-tab-header\\\", never, { 'selectedIndex': \\\"selectedIndex\\\" }, { 'selectFocusedIndex': \\\"selectFocusedIndex\\\", 'indexFocused': \\\"indexFocused\\\" }, [\\\"_items\\\"]>;\\n}\\n\\n//# sourceMappingURL=tab-header.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-label-wrapper.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ElementRef } from '@angular/core';\\nimport { CanDisable, CanDisableCtor } from '@angular/material/core';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatTabLabelWrapperBase {\\n}\\ndeclare const _MatTabLabelWrapperMixinBase: CanDisableCtor & typeof MatTabLabelWrapperBase;\\n/**\\n * Used in the `mat-tab-group` view to display tab labels.\\n * @docs-private\\n */\\nexport declare class MatTabLabelWrapper extends _MatTabLabelWrapperMixinBase implements CanDisable {\\n    elementRef: ElementRef;\\n    constructor(elementRef: ElementRef);\\n    /** Sets focus on the wrapper element */\\n    focus(): void;\\n    getOffsetLeft(): number;\\n    getOffsetWidth(): number;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabLabelWrapper>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTabLabelWrapper, \\\"[matTabLabelWrapper]\\\", never, { 'disabled': \\\"disabled\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=tab-label-wrapper.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-label.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkPortal } from '@angular/cdk/portal';\\n/** Used to flag tab labels for use with the portal directive */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare class MatTabLabel extends CdkPortal {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabLabel>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTabLabel, \\\"[mat-tab-label], [matTabLabel]\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=tab-label.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-nav-bar/index.d.ts\",\n      \"node_modules/@angular/material/tabs/tab-nav-bar/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './tab-nav-bar';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab-nav-bar/tab-nav-bar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ViewportRuler } from '@angular/cdk/scrolling';\\nimport { AfterContentChecked, AfterContentInit, ChangeDetectorRef, ElementRef, NgZone, OnDestroy, QueryList } from '@angular/core';\\nimport { CanDisable, CanDisableCtor, CanDisableRipple, CanDisableRippleCtor, HasTabIndex, HasTabIndexCtor, RippleConfig, RippleGlobalOptions, RippleTarget, ThemePalette } from '@angular/material/core';\\nimport { FocusMonitor, FocusableOption } from '@angular/cdk/a11y';\\nimport { MatInkBar } from '../ink-bar';\\nimport { MatPaginatedTabHeader, MatPaginatedTabHeaderItem } from '../paginated-tab-header';\\n/**\\n * Base class with all of the `MatTabNav` functionality.\\n * @docs-private\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare abstract class _MatTabNavBase extends MatPaginatedTabHeader implements AfterContentChecked, AfterContentInit, OnDestroy {\\n    /** Query list of all tab links of the tab navigation. */\\n    abstract _items: QueryList<MatPaginatedTabHeaderItem & {\\n        active: boolean;\\n    }>;\\n    /** Background color of the tab nav. */\\n    backgroundColor: ThemePalette;\\n    private _backgroundColor;\\n    /** Whether the ripple effect is disabled or not. */\\n    disableRipple: any;\\n    private _disableRipple;\\n    /** Theme color of the nav bar. */\\n    color: ThemePalette;\\n    constructor(elementRef: ElementRef, dir: Directionality, ngZone: NgZone, changeDetectorRef: ChangeDetectorRef, viewportRuler: ViewportRuler, \\n    /**\\n     * @deprecated @breaking-change 9.0.0 `platform` parameter to become required.\\n     */\\n    platform?: Platform, animationMode?: string);\\n    protected _itemSelected(): void;\\n    ngAfterContentInit(): void;\\n    /**\\n     * Notifies the component that the active link has been changed.\\n     * @breaking-change 8.0.0 `element` parameter to be removed.\\n     */\\n    updateActiveLink(_element?: ElementRef): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<_MatTabNavBase>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<_MatTabNavBase, \\\"do-not-use-abstract-mat-tab-nav-base\\\", never, { 'color': \\\"color\\\", 'backgroundColor': \\\"backgroundColor\\\", 'disableRipple': \\\"disableRipple\\\" }, {}, never>;\\n}\\n/**\\n * Navigation component matching the styles of the tab group header.\\n * Provides anchored navigation with animated ink bar.\\n */\\nexport declare class MatTabNav extends _MatTabNavBase {\\n    _items: QueryList<MatTabLink>;\\n    _inkBar: MatInkBar;\\n    _tabListContainer: ElementRef;\\n    _tabList: ElementRef;\\n    _nextPaginator: ElementRef<HTMLElement>;\\n    _previousPaginator: ElementRef<HTMLElement>;\\n    constructor(elementRef: ElementRef, dir: Directionality, ngZone: NgZone, changeDetectorRef: ChangeDetectorRef, viewportRuler: ViewportRuler, \\n    /**\\n     * @deprecated @breaking-change 9.0.0 `platform` parameter to become required.\\n     */\\n    platform?: Platform, animationMode?: string);\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabNav>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTabNav, \\\"[mat-tab-nav-bar]\\\", [\\\"matTabNavBar\\\", \\\"matTabNav\\\"], { 'color': \\\"color\\\" }, {}, [\\\"_items\\\"]>;\\n}\\ndeclare class MatTabLinkMixinBase {\\n}\\ndeclare const _MatTabLinkMixinBase: HasTabIndexCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatTabLinkMixinBase;\\n/** Base class with all of the `MatTabLink` functionality. */\\nexport declare class _MatTabLinkBase extends _MatTabLinkMixinBase implements OnDestroy, CanDisable, CanDisableRipple, HasTabIndex, RippleTarget, FocusableOption {\\n    private _tabNavBar;\\n    elementRef: ElementRef;\\n    private _focusMonitor;\\n    /** Whether the tab link is active or not. */\\n    protected _isActive: boolean;\\n    /** Whether the link is active. */\\n    active: boolean;\\n    /**\\n     * Ripple configuration for ripples that are launched on pointer down. The ripple config\\n     * is set to the global ripple options since we don't have any configurable options for\\n     * the tab link ripples.\\n     * @docs-private\\n     */\\n    rippleConfig: RippleConfig & RippleGlobalOptions;\\n    /**\\n     * Whether ripples are disabled on interaction.\\n     * @docs-private\\n     */\\n    readonly rippleDisabled: boolean;\\n    constructor(_tabNavBar: _MatTabNavBase, elementRef: ElementRef, globalRippleOptions: RippleGlobalOptions | null, tabIndex: string, _focusMonitor: FocusMonitor, animationMode?: string);\\n    focus(): void;\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<_MatTabLinkBase>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<_MatTabLinkBase, \\\"do-not-use-abstract-mat-tab-link-base\\\", never, { 'active': \\\"active\\\" }, {}, never>;\\n}\\n/**\\n * Link inside of a `mat-tab-nav-bar`.\\n */\\nexport declare class MatTabLink extends _MatTabLinkBase implements OnDestroy {\\n    /** Reference to the RippleRenderer for the tab-link. */\\n    private _tabLinkRipple;\\n    constructor(tabNavBar: MatTabNav, elementRef: ElementRef, ngZone: NgZone, platform: Platform, globalRippleOptions: RippleGlobalOptions | null, tabIndex: string, focusMonitor: FocusMonitor, animationMode?: string);\\n    ngOnDestroy(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTabLink>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTabLink, \\\"[mat-tab-link], [matTabLink]\\\", [\\\"matTabLink\\\"], { 'disabled': \\\"disabled\\\", 'disableRipple': \\\"disableRipple\\\", 'tabIndex': \\\"tabIndex\\\" }, {}, never>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=tab-nav-bar.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tab.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { TemplatePortal } from '@angular/cdk/portal';\\nimport { OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\\nimport { CanDisable, CanDisableCtor } from '@angular/material/core';\\nimport { Subject } from 'rxjs';\\nimport { MatTabLabel } from './tab-label';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatTabBase {\\n}\\ndeclare const _MatTabMixinBase: CanDisableCtor & typeof MatTabBase;\\nexport declare class MatTab extends _MatTabMixinBase implements OnInit, CanDisable, OnChanges, OnDestroy {\\n    private _viewContainerRef;\\n    /** Content for the tab label given by `<ng-template mat-tab-label>`. */\\n    templateLabel: MatTabLabel;\\n    /**\\n     * Template provided in the tab content that will be used if present, used to enable lazy-loading\\n     */\\n    _explicitContent: TemplateRef<any>;\\n    /** Template inside the MatTab view that contains an `<ng-content>`. */\\n    _implicitContent: TemplateRef<any>;\\n    /** Plain text label for the tab, used when there is no template label. */\\n    textLabel: string;\\n    /** Aria label for the tab. */\\n    ariaLabel: string;\\n    /**\\n     * Reference to the element that the tab is labelled by.\\n     * Will be cleared if `aria-label` is set at the same time.\\n     */\\n    ariaLabelledby: string;\\n    /** Portal that will be the hosted content of the tab */\\n    private _contentPortal;\\n    /** @docs-private */\\n    readonly content: TemplatePortal | null;\\n    /** Emits whenever the internal state of the tab changes. */\\n    readonly _stateChanges: Subject<void>;\\n    /**\\n     * The relatively indexed position where 0 represents the center, negative is left, and positive\\n     * represents the right.\\n     */\\n    position: number | null;\\n    /**\\n     * The initial relatively index origin of the tab if it was created and selected after there\\n     * was already a selected tab. Provides context of what position the tab should originate from.\\n     */\\n    origin: number | null;\\n    /**\\n     * Whether the tab is currently active.\\n     */\\n    isActive: boolean;\\n    constructor(_viewContainerRef: ViewContainerRef);\\n    ngOnChanges(changes: SimpleChanges): void;\\n    ngOnDestroy(): void;\\n    ngOnInit(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTab>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatTab, \\\"mat-tab\\\", [\\\"matTab\\\"], { 'disabled': \\\"disabled\\\", 'textLabel': \\\"label\\\", 'ariaLabel': \\\"aria-label\\\", 'ariaLabelledby': \\\"aria-labelledby\\\" }, {}, [\\\"templateLabel\\\", \\\"_explicitContent\\\"]>;\\n}\\nexport {};\\n\\n//# sourceMappingURL=tab.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tabs-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by the Material tabs.\\n * @docs-private\\n */\\nexport declare const matTabsAnimations: {\\n    readonly translateTab: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/tabs-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './tab-group';\\nimport * as ɵngcc2 from './tab-label';\\nimport * as ɵngcc3 from './tab';\\nimport * as ɵngcc4 from './ink-bar';\\nimport * as ɵngcc5 from './tab-label-wrapper';\\nimport * as ɵngcc6 from './tab-nav-bar/tab-nav-bar';\\nimport * as ɵngcc7 from './tab-body';\\nimport * as ɵngcc8 from './tab-header';\\nimport * as ɵngcc9 from './tab-content';\\nimport * as ɵngcc10 from './paginated-tab-header';\\nimport * as ɵngcc11 from '@angular/common';\\nimport * as ɵngcc12 from '@angular/material/core';\\nimport * as ɵngcc13 from '@angular/cdk/portal';\\nimport * as ɵngcc14 from '@angular/cdk/observers';\\nimport * as ɵngcc15 from '@angular/cdk/a11y';\\nexport declare class MatTabsModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatTabsModule, [typeof ɵngcc1.MatTabGroup, typeof ɵngcc2.MatTabLabel, typeof ɵngcc3.MatTab, typeof ɵngcc4.MatInkBar, typeof ɵngcc5.MatTabLabelWrapper, typeof ɵngcc6.MatTabNav, typeof ɵngcc6.MatTabLink, typeof ɵngcc7.MatTabBody, typeof ɵngcc7.MatTabBodyPortal, typeof ɵngcc8.MatTabHeader, typeof ɵngcc9.MatTabContent, typeof ɵngcc10.MatPaginatedTabHeader, typeof ɵngcc1._MatTabGroupBase, typeof ɵngcc6._MatTabNavBase, typeof ɵngcc7._MatTabBodyBase, typeof ɵngcc8._MatTabHeaderBase, typeof ɵngcc6._MatTabLinkBase], [typeof ɵngcc11.CommonModule, typeof ɵngcc12.MatCommonModule, typeof ɵngcc13.PortalModule, typeof ɵngcc12.MatRippleModule, typeof ɵngcc14.ObserversModule, typeof ɵngcc15.A11yModule], [typeof ɵngcc12.MatCommonModule, typeof ɵngcc1.MatTabGroup, typeof ɵngcc2.MatTabLabel, typeof ɵngcc3.MatTab, typeof ɵngcc6.MatTabNav, typeof ɵngcc6.MatTabLink, typeof ɵngcc9.MatTabContent]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatTabsModule>;\\n}\\n\\n//# sourceMappingURL=tabs-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/testing/index.d.ts\",\n      \"node_modules/@angular/material/tabs/testing/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/testing/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './tab-group-harness';\\nexport * from './tab-harness';\\nexport * from './tab-harness-filters';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/testing/tab-group-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\\nimport { TabGroupHarnessFilters } from './tab-harness-filters';\\nimport { MatTabHarness } from './tab-harness';\\n/**\\n * Harness for interacting with a standard mat-tab-group in tests.\\n * @dynamic\\n */\\nexport declare class MatTabGroupHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a radio-button with\\n     * specific attributes.\\n     * @param options Options for narrowing the search\\n     *   - `selector` finds a tab-group whose host element matches the given selector.\\n     *   - `selectedTabLabel` finds a tab-group with a selected tab that matches the\\n     *      specified tab label.\\n     * @return a `HarnessPredicate` configured with the given options.\\n     */\\n    static with(options?: TabGroupHarnessFilters): HarnessPredicate<MatTabGroupHarness>;\\n    private _tabs;\\n    /** Gets all tabs of the tab group. */\\n    getTabs(): Promise<MatTabHarness[]>;\\n    /** Gets the selected tab of the tab group. */\\n    getSelectedTab(): Promise<MatTabHarness>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/testing/tab-harness-filters.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { BaseHarnessFilters } from '@angular/cdk/testing';\\nexport interface TabHarnessFilters extends BaseHarnessFilters {\\n}\\nexport interface TabGroupHarnessFilters extends BaseHarnessFilters {\\n    selectedTabLabel?: string | RegExp;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tabs/testing/tab-harness.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { ComponentHarness, HarnessPredicate, TestElement } from '@angular/cdk/testing';\\nimport { TabHarnessFilters } from './tab-harness-filters';\\n/**\\n * Harness for interacting with a standard Angular Material tab-label in tests.\\n * @dynamic\\n */\\nexport declare class MatTabHarness extends ComponentHarness {\\n    static hostSelector: string;\\n    /**\\n     * Gets a `HarnessPredicate` that can be used to search for a tab with specific attributes.\\n     */\\n    static with(options?: TabHarnessFilters): HarnessPredicate<MatTabHarness>;\\n    private _rootLocatorFactory;\\n    /** Gets the label of the tab. */\\n    getLabel(): Promise<string>;\\n    /** Gets the aria label of the tab. */\\n    getAriaLabel(): Promise<string | null>;\\n    /** Gets the value of the \\\"aria-labelledby\\\" attribute. */\\n    getAriaLabelledby(): Promise<string | null>;\\n    /**\\n     * Gets the content element of the given tab. Note that the element will be empty\\n     * until the tab is selected. This is an implementation detail of the tab-group\\n     * in order to avoid rendering of non-active tabs.\\n     */\\n    getContentElement(): Promise<TestElement>;\\n    /** Whether the tab is selected. */\\n    isSelected(): Promise<boolean>;\\n    /** Whether the tab is disabled. */\\n    isDisabled(): Promise<boolean>;\\n    /**\\n     * Selects the given tab by clicking on the label. Tab cannot be\\n     * selected if disabled.\\n     */\\n    select(): Promise<void>;\\n    /** Gets the element id for the content of the current tab. */\\n    private _getContentId;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/toolbar/index.d.ts\",\n      \"node_modules/@angular/material/toolbar/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/toolbar/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './toolbar-module';\\nexport * from './toolbar';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/toolbar/toolbar-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './toolbar';\\nimport * as ɵngcc2 from '@angular/material/core';\\nexport declare class MatToolbarModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatToolbarModule, [typeof ɵngcc1.MatToolbar, typeof ɵngcc1.MatToolbarRow], [typeof ɵngcc2.MatCommonModule], [typeof ɵngcc1.MatToolbar, typeof ɵngcc1.MatToolbarRow, typeof ɵngcc2.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatToolbarModule>;\\n}\\n\\n//# sourceMappingURL=toolbar-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/toolbar/toolbar.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { Platform } from '@angular/cdk/platform';\\nimport { AfterViewInit, ElementRef, QueryList } from '@angular/core';\\nimport { CanColor, CanColorCtor } from '@angular/material/core';\\n/** @docs-private */\\nimport * as ɵngcc0 from '@angular/core';\\ndeclare class MatToolbarBase {\\n    _elementRef: ElementRef;\\n    constructor(_elementRef: ElementRef);\\n}\\ndeclare const _MatToolbarMixinBase: CanColorCtor & typeof MatToolbarBase;\\nexport declare class MatToolbarRow {\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatToolbarRow>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatToolbarRow, \\\"mat-toolbar-row\\\", [\\\"matToolbarRow\\\"], {}, {}, never>;\\n}\\nexport declare class MatToolbar extends _MatToolbarMixinBase implements CanColor, AfterViewInit {\\n    private _platform;\\n    private _document;\\n    /** Reference to all toolbar row elements that have been projected. */\\n    _toolbarRows: QueryList<MatToolbarRow>;\\n    constructor(elementRef: ElementRef, _platform: Platform, document?: any);\\n    ngAfterViewInit(): void;\\n    /**\\n     * Throws an exception when developers are attempting to combine the different toolbar row modes.\\n     */\\n    private _checkToolbarMixedModes;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatToolbar>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<MatToolbar, \\\"mat-toolbar\\\", [\\\"matToolbar\\\"], { 'color': \\\"color\\\" }, {}, [\\\"_toolbarRows\\\"]>;\\n}\\n/**\\n * Throws an exception when attempting to combine the different toolbar row modes.\\n * @docs-private\\n */\\nexport declare function throwToolbarMixedModesError(): void;\\nexport {};\\n\\n//# sourceMappingURL=toolbar.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tooltip/index.d.ts\",\n      \"node_modules/@angular/material/tooltip/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\\n//# sourceMappingURL=index.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tooltip/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './tooltip-module';\\nexport * from './tooltip';\\nexport * from './tooltip-animations';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tooltip/tooltip-animations.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationTriggerMetadata } from '@angular/animations';\\n/**\\n * Animations used by MatTooltip.\\n * @docs-private\\n */\\nexport declare const matTooltipAnimations: {\\n    readonly tooltipState: AnimationTriggerMetadata;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tooltip/tooltip-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport * as ɵngcc0 from '@angular/core';\\nimport * as ɵngcc1 from './tooltip';\\nimport * as ɵngcc2 from '@angular/cdk/a11y';\\nimport * as ɵngcc3 from '@angular/common';\\nimport * as ɵngcc4 from '@angular/cdk/overlay';\\nimport * as ɵngcc5 from '@angular/material/core';\\nexport declare class MatTooltipModule {\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<MatTooltipModule, [typeof ɵngcc1.MatTooltip, typeof ɵngcc1.TooltipComponent], [typeof ɵngcc2.A11yModule, typeof ɵngcc3.CommonModule, typeof ɵngcc4.OverlayModule, typeof ɵngcc5.MatCommonModule], [typeof ɵngcc1.MatTooltip, typeof ɵngcc1.TooltipComponent, typeof ɵngcc5.MatCommonModule]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<MatTooltipModule>;\\n}\\n\\n//# sourceMappingURL=tooltip-module.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tooltip/tooltip.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { AnimationEvent } from '@angular/animations';\\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\\nimport { Directionality } from '@angular/cdk/bidi';\\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\\nimport { OriginConnectionPosition, Overlay, OverlayConnectionPosition, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\\nimport { Platform } from '@angular/cdk/platform';\\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\\nimport { ChangeDetectorRef, ElementRef, InjectionToken, NgZone, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\\nimport { Observable } from 'rxjs';\\n/** Possible positions for a tooltip. */\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\\n/**\\n * Options for how the tooltip trigger should handle touch gestures.\\n * See `MatTooltip.touchGestures` for more information.\\n */\\nexport declare type TooltipTouchGestures = 'auto' | 'on' | 'off';\\n/** Possible visibility states of a tooltip. */\\nexport declare type TooltipVisibility = 'initial' | 'visible' | 'hidden';\\n/** Time in ms to throttle repositioning after scroll events. */\\nexport declare const SCROLL_THROTTLE_MS = 20;\\n/** CSS class that will be attached to the overlay panel. */\\nexport declare const TOOLTIP_PANEL_CLASS = \\\"mat-tooltip-panel\\\";\\n/**\\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\\n * @docs-private\\n */\\nexport declare function getMatTooltipInvalidPositionError(position: string): Error;\\n/** Injection token that determines the scroll handling while a tooltip is visible. */\\nexport declare const MAT_TOOLTIP_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\\n/** @docs-private */\\nexport declare function MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\\n/** @docs-private */\\nexport declare const MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER: {\\n    provide: InjectionToken<() => ScrollStrategy>;\\n    deps: (typeof Overlay)[];\\n    useFactory: typeof MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY;\\n};\\n/** Default `matTooltip` options that can be overridden. */\\nexport interface MatTooltipDefaultOptions {\\n    showDelay: number;\\n    hideDelay: number;\\n    touchendHideDelay: number;\\n    touchGestures?: TooltipTouchGestures;\\n    position?: TooltipPosition;\\n}\\n/** Injection token to be used to override the default options for `matTooltip`. */\\nexport declare const MAT_TOOLTIP_DEFAULT_OPTIONS: InjectionToken<MatTooltipDefaultOptions>;\\n/** @docs-private */\\nexport declare function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY(): MatTooltipDefaultOptions;\\n/**\\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\\n * hiding of a tooltip provided position (defaults to below the element).\\n *\\n * https://material.io/design/components/tooltips.html\\n */\\nexport declare class MatTooltip implements OnDestroy, OnInit {\\n    private _overlay;\\n    private _elementRef;\\n    private _scrollDispatcher;\\n    private _viewContainerRef;\\n    private _ngZone;\\n    private _platform;\\n    private _ariaDescriber;\\n    private _focusMonitor;\\n    private _dir;\\n    private _defaultOptions;\\n    _overlayRef: OverlayRef | null;\\n    _tooltipInstance: TooltipComponent | null;\\n    private _portal;\\n    private _position;\\n    private _disabled;\\n    private _tooltipClass;\\n    private _scrollStrategy;\\n    /** Allows the user to define the position of the tooltip relative to the parent element */\\n    position: TooltipPosition;\\n    /** Disables the display of the tooltip. */\\n    disabled: boolean;\\n    /** The default delay in ms before showing the tooltip after show is called */\\n    showDelay: number;\\n    /** The default delay in ms before hiding the tooltip after hide is called */\\n    hideDelay: number;\\n    /**\\n     * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\\n     * uses a long press gesture to show and hide, however it can conflict with the native browser\\n     * gestures. To work around the conflict, Angular Material disables native gestures on the\\n     * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\\n     * elements). The different values for this option configure the touch event handling as follows:\\n     * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\\n     *   browser gestures on particular elements. In particular, it allows text selection on inputs\\n     *   and textareas, and preserves the native browser dragging on elements marked as `draggable`.\\n     * - `on` - Enables touch gestures for all elements and disables native\\n     *   browser gestures with no exceptions.\\n     * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\\n     *   showing on touch devices.\\n     */\\n    touchGestures: TooltipTouchGestures;\\n    /** The message to be displayed in the tooltip */\\n    message: string;\\n    private _message;\\n    /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\\n    tooltipClass: string | string[] | Set<string> | {\\n        [key: string]: any;\\n    };\\n    /** Manually-bound passive event listeners. */\\n    private _passiveListeners;\\n    /** Timer started at the last `touchstart` event. */\\n    private _touchstartTimeout;\\n    /** Emits when the component is destroyed. */\\n    private readonly _destroyed;\\n    constructor(_overlay: Overlay, _elementRef: ElementRef<HTMLElement>, _scrollDispatcher: ScrollDispatcher, _viewContainerRef: ViewContainerRef, _ngZone: NgZone, _platform: Platform, _ariaDescriber: AriaDescriber, _focusMonitor: FocusMonitor, scrollStrategy: any, _dir: Directionality, _defaultOptions: MatTooltipDefaultOptions, \\n    /**\\n     * @deprecated _hammerLoader parameter to be removed.\\n     * @breaking-change 9.0.0\\n     */\\n    _hammerLoader?: any);\\n    /**\\n     * Setup styling-specific things\\n     */\\n    ngOnInit(): void;\\n    /**\\n     * Dispose the tooltip when destroyed.\\n     */\\n    ngOnDestroy(): void;\\n    /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\\n    show(delay?: number): void;\\n    /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\\n    hide(delay?: number): void;\\n    /** Shows/hides the tooltip */\\n    toggle(): void;\\n    /** Returns true if the tooltip is currently visible to the user */\\n    _isTooltipVisible(): boolean;\\n    /** Handles the keydown events on the host element. */\\n    _handleKeydown(e: KeyboardEvent): void;\\n    /** Create the overlay config and position strategy */\\n    private _createOverlay;\\n    /** Detaches the currently-attached tooltip. */\\n    private _detach;\\n    /** Updates the position of the current tooltip. */\\n    private _updatePosition;\\n    /**\\n     * Returns the origin position and a fallback position based on the user's position preference.\\n     * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\\n     */\\n    _getOrigin(): {\\n        main: OriginConnectionPosition;\\n        fallback: OriginConnectionPosition;\\n    };\\n    /** Returns the overlay position and a fallback position based on the user's preference */\\n    _getOverlayPosition(): {\\n        main: OverlayConnectionPosition;\\n        fallback: OverlayConnectionPosition;\\n    };\\n    /** Updates the tooltip message and repositions the overlay according to the new message length */\\n    private _updateTooltipMessage;\\n    /** Updates the tooltip class */\\n    private _setTooltipClass;\\n    /** Inverts an overlay position. */\\n    private _invertPosition;\\n    /** Binds the pointer events to the tooltip trigger. */\\n    private _setupPointerEvents;\\n    /** Disables the native browser gestures, based on how the tooltip has been configured. */\\n    private _disableNativeGesturesIfNecessary;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MatTooltip>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MatTooltip, \\\"[matTooltip]\\\", [\\\"matTooltip\\\"], { 'showDelay': \\\"matTooltipShowDelay\\\", 'hideDelay': \\\"matTooltipHideDelay\\\", 'touchGestures': \\\"matTooltipTouchGestures\\\", 'position': \\\"matTooltipPosition\\\", 'disabled': \\\"matTooltipDisabled\\\", 'message': \\\"matTooltip\\\", 'tooltipClass': \\\"matTooltipClass\\\" }, {}, never>;\\n}\\n/**\\n * Internal component that wraps the tooltip's content.\\n * @docs-private\\n */\\nexport declare class TooltipComponent implements OnDestroy {\\n    private _changeDetectorRef;\\n    private _breakpointObserver;\\n    /** Message to display in the tooltip */\\n    message: string;\\n    /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\\n    tooltipClass: string | string[] | Set<string> | {\\n        [key: string]: any;\\n    };\\n    /** The timeout ID of any current timer set to show the tooltip */\\n    _showTimeoutId: number | null;\\n    /** The timeout ID of any current timer set to hide the tooltip */\\n    _hideTimeoutId: number | null;\\n    /** Property watched by the animation framework to show or hide the tooltip */\\n    _visibility: TooltipVisibility;\\n    /** Whether interactions on the page should close the tooltip */\\n    private _closeOnInteraction;\\n    /** Subject for notifying that the tooltip has been hidden from the view */\\n    private readonly _onHide;\\n    /** Stream that emits whether the user has a handset-sized display.  */\\n    _isHandset: Observable<BreakpointState>;\\n    constructor(_changeDetectorRef: ChangeDetectorRef, _breakpointObserver: BreakpointObserver);\\n    /**\\n     * Shows the tooltip with an animation originating from the provided origin\\n     * @param delay Amount of milliseconds to the delay showing the tooltip.\\n     */\\n    show(delay: number): void;\\n    /**\\n     * Begins the animation to hide the tooltip after the provided delay in ms.\\n     * @param delay Amount of milliseconds to delay showing the tooltip.\\n     */\\n    hide(delay: number): void;\\n    /** Returns an observable that notifies when the tooltip has been hidden from view. */\\n    afterHidden(): Observable<void>;\\n    /** Whether the tooltip is being displayed. */\\n    isVisible(): boolean;\\n    ngOnDestroy(): void;\\n    _animationStart(): void;\\n    _animationDone(event: AnimationEvent): void;\\n    /**\\n     * Interactions on the HTML body should close the tooltip immediately as defined in the\\n     * material design spec.\\n     * https://material.io/design/components/tooltips.html#behavior\\n     */\\n    _handleBodyInteraction(): void;\\n    /**\\n     * Marks that the tooltip needs to be checked in the next change detection run.\\n     * Mainly used for rendering the initial text before positioning a tooltip, which\\n     * can be problematic in components with OnPush change detection.\\n     */\\n    _markForCheck(): void;\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<TooltipComponent>;\\n    static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<TooltipComponent, \\\"mat-tooltip-component\\\", never, {}, {}, never>;\\n}\\n\\n//# sourceMappingURL=tooltip.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/data-source/flat-data-source.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections';\\nimport { FlatTreeControl, TreeControl } from '@angular/cdk/tree';\\nimport { BehaviorSubject, Observable } from 'rxjs';\\n/**\\n * Tree flattener to convert a normal type of node to node with children & level information.\\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\\n *\\n * For example, the input data of type `T` is nested, and contains its children data:\\n *   SomeNode: {\\n *     key: 'Fruits',\\n *     children: [\\n *       NodeOne: {\\n *         key: 'Apple',\\n *       },\\n *       NodeTwo: {\\n *        key: 'Pear',\\n *      }\\n *    ]\\n *  }\\n *  After flattener flatten the tree, the structure will become\\n *  SomeNode: {\\n *    key: 'Fruits',\\n *    expandable: true,\\n *    level: 1\\n *  },\\n *  NodeOne: {\\n *    key: 'Apple',\\n *    expandable: false,\\n *    level: 2\\n *  },\\n *  NodeTwo: {\\n *   key: 'Pear',\\n *   expandable: false,\\n *   level: 2\\n * }\\n * and the output flattened type is `F` with additional information.\\n */\\nexport declare class MatTreeFlattener<T, F> {\\n    transformFunction: (node: T, level: number) => F;\\n    getLevel: (node: F) => number;\\n    isExpandable: (node: F) => boolean;\\n    getChildren: (node: T) => Observable<T[]> | T[] | undefined | null;\\n    constructor(transformFunction: (node: T, level: number) => F, getLevel: (node: F) => number, isExpandable: (node: F) => boolean, getChildren: (node: T) => Observable<T[]> | T[] | undefined | null);\\n    _flattenNode(node: T, level: number, resultNodes: F[], parentMap: boolean[]): F[];\\n    _flattenChildren(children: T[], level: number, resultNodes: F[], parentMap: boolean[]): void;\\n    /**\\n     * Flatten a list of node type T to flattened version of node F.\\n     * Please note that type T may be nested, and the length of `structuredData` may be different\\n     * from that of returned list `F[]`.\\n     */\\n    flattenNodes(structuredData: T[]): F[];\\n    /**\\n     * Expand flattened node with current expansion status.\\n     * The returned list may have different length.\\n     */\\n    expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F>): F[];\\n}\\n/**\\n * Data source for flat tree.\\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\\n * to `MatTree`.\\n * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted\\n * to type `F` for `MatTree` to consume.\\n */\\nexport declare class MatTreeFlatDataSource<T, F> extends DataSource<F> {\\n    private _treeControl;\\n    private _treeFlattener;\\n    _flattenedData: BehaviorSubject<F[]>;\\n    _expandedData: BehaviorSubject<F[]>;\\n    _data: BehaviorSubject<T[]>;\\n    data: T[];\\n    constructor(_treeControl: FlatTreeControl<F>, _treeFlattener: MatTreeFlattener<T, F>, initialData?: T[]);\\n    connect(collectionViewer: CollectionViewer): Observable<F[]>;\\n    disconnect(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/data-source/nested-data-source.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections';\\nimport { BehaviorSubject, Observable } from 'rxjs';\\n/**\\n * Data source for nested tree.\\n *\\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\\n */\\nexport declare class MatTreeNestedDataSource<T> extends DataSource<T> {\\n    _data: BehaviorSubject<T[]>;\\n    /**\\n     * Data for the nested tree\\n     */\\n    data: T[];\\n    connect(collectionViewer: CollectionViewer): Observable<T[]>;\\n    disconnect(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/index.d.ts\",\n      \"node_modules/@angular/material/tree/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * Generated bundle index. Do not edit.\\n */\\nexport * from './public-api';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/node.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkNestedTreeNode, CdkTree, CdkTreeNode, CdkTreeNodeDef } from '@angular/cdk/tree';\\nimport { AfterContentInit, ElementRef, IterableDiffers, OnDestroy } from '@angular/core';\\nimport { CanDisable, CanDisableCtor, HasTabIndex, HasTabIndexCtor } from '@angular/material/core';\\ndeclare const _MatTreeNodeMixinBase: HasTabIndexCtor & CanDisableCtor & typeof CdkTreeNode;\\n/**\\n * Wrapper for the CdkTree node with Material design styles.\\n */\\nexport declare class MatTreeNode<T> extends _MatTreeNodeMixinBase<T> implements CanDisable, HasTabIndex {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    protected _tree: CdkTree<T>;\\n    role: 'treeitem' | 'group';\\n    constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>, tabIndex: string);\\n}\\n/**\\n * Wrapper for the CdkTree node definition with Material design styles.\\n */\\nexport declare class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {\\n    data: T;\\n}\\n/**\\n * Wrapper for the CdkTree nested node with Material design styles.\\n */\\nexport declare class MatNestedTreeNode<T> extends CdkNestedTreeNode<T> implements AfterContentInit, OnDestroy {\\n    protected _elementRef: ElementRef<HTMLElement>;\\n    protected _tree: CdkTree<T>;\\n    protected _differs: IterableDiffers;\\n    node: T;\\n    /** Whether the node is disabled. */\\n    disabled: any;\\n    private _disabled;\\n    /** Tabindex for the node. */\\n    tabIndex: number;\\n    private _tabIndex;\\n    constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>, _differs: IterableDiffers, tabIndex: string);\\n    ngAfterContentInit(): void;\\n    ngOnDestroy(): void;\\n}\\nexport {};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/outlet.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTreeNodeOutlet } from '@angular/cdk/tree';\\nimport { ViewContainerRef } from '@angular/core';\\n/**\\n * Outlet for nested CdkNode. Put `[matTreeNodeOutlet]` on a tag to place children dataNodes\\n * inside the outlet.\\n */\\nexport declare class MatTreeNodeOutlet implements CdkTreeNodeOutlet {\\n    viewContainer: ViewContainerRef;\\n    _node?: any;\\n    constructor(viewContainer: ViewContainerRef, _node?: any);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/padding.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTreeNodePadding } from '@angular/cdk/tree';\\n/**\\n * Wrapper for the CdkTree padding with Material design styles.\\n */\\nexport declare class MatTreeNodePadding<T> extends CdkTreeNodePadding<T> {\\n    /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\\n    level: number;\\n    /** The indent for each level. Default number 40px from material design menu sub-menu spec. */\\n    indent: number;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/public-api.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport * from './node';\\nexport * from './padding';\\nexport * from './tree';\\nexport * from './tree-module';\\nexport * from './toggle';\\nexport * from './outlet';\\nexport * from './data-source/flat-data-source';\\nexport * from './data-source/nested-data-source';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/toggle.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTreeNodeToggle } from '@angular/cdk/tree';\\n/**\\n * Wrapper for the CdkTree's toggle with Material design styles.\\n */\\nexport declare class MatTreeNodeToggle<T> extends CdkTreeNodeToggle<T> {\\n    recursive: boolean;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/tree-module.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nexport declare class MatTreeModule {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/material/tree/tree.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://angular.io/license\\n */\\nimport { CdkTree } from '@angular/cdk/tree';\\nimport { MatTreeNodeOutlet } from './outlet';\\n/**\\n * Wrapper for the CdkTable with Material design styles.\\n */\\nexport declare class MatTree<T> extends CdkTree<T> {\\n    _nodeOutlet: MatTreeNodeOutlet;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/@angular/forms/forms.d.ts\",\n      \"node_modules/@angular/forms/index.d.ts\"\n    ],\n    \"content\": \"/**\\n * @license Angular v9.0.0-next.12\\n * (c) 2010-2019 Google LLC. https://angular.io/\\n * License: MIT\\n */\\n\\nimport { AfterViewInit } from '@angular/core';\\r\\nimport { ElementRef } from '@angular/core';\\r\\nimport { EventEmitter } from '@angular/core';\\r\\nimport { InjectionToken } from '@angular/core';\\r\\nimport { Injector } from '@angular/core';\\r\\nimport { ModuleWithProviders } from '@angular/core';\\r\\nimport { Observable } from 'rxjs';\\r\\nimport { OnChanges } from '@angular/core';\\r\\nimport { OnDestroy } from '@angular/core';\\r\\nimport { OnInit } from '@angular/core';\\r\\nimport { Renderer2 } from '@angular/core';\\r\\nimport { SimpleChanges } from '@angular/core';\\r\\nimport { StaticProvider } from '@angular/core';\\r\\nimport { Type } from '@angular/core';\\r\\nimport { Version } from '@angular/core';\\r\\n\\r\\n/**\\r\\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\\r\\n *\\r\\n * It provides some of the shared behavior that all controls and groups of controls have, like\\r\\n * running validators, calculating status, and resetting state. It also defines the properties\\r\\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\\r\\n * instantiated directly.\\r\\n *\\r\\n * @see [Forms Guide](/guide/forms)\\r\\n * @see [Reactive Forms Guide](/guide/reactive-forms)\\r\\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nimport * as ɵngcc0 from '@angular/core';\\nexport declare abstract class AbstractControl {\\r\\n    validator: ValidatorFn | null;\\r\\n    asyncValidator: AsyncValidatorFn | null;\\r\\n    private _parent;\\r\\n    private _asyncValidationSubscription;\\r\\n    /**\\r\\n     * The current value of the control.\\r\\n     *\\r\\n     * * For a `FormControl`, the current value.\\r\\n     * * For an enabled `FormGroup`, the values of enabled controls as an object\\r\\n     * with a key-value pair for each member of the group.\\r\\n     * * For a disabled `FormGroup`, the values of all controls as an object\\r\\n     * with a key-value pair for each member of the group.\\r\\n     * * For a `FormArray`, the values of enabled controls as an array.\\r\\n     *\\r\\n     */\\r\\n    readonly value: any;\\r\\n    /**\\r\\n     * Initialize the AbstractControl instance.\\r\\n     *\\r\\n     * @param validator The function that determines the synchronous validity of this control.\\r\\n     * @param asyncValidator The function that determines the asynchronous validity of this\\r\\n     * control.\\r\\n     */\\r\\n    constructor(validator: ValidatorFn | null, asyncValidator: AsyncValidatorFn | null);\\r\\n    /**\\r\\n     * The parent control.\\r\\n     */\\r\\n    readonly parent: FormGroup | FormArray;\\r\\n    /**\\r\\n     * The validation status of the control. There are four possible\\r\\n     * validation status values:\\r\\n     *\\r\\n     * * **VALID**: This control has passed all validation checks.\\r\\n     * * **INVALID**: This control has failed at least one validation check.\\r\\n     * * **PENDING**: This control is in the midst of conducting a validation check.\\r\\n     * * **DISABLED**: This control is exempt from validation checks.\\r\\n     *\\r\\n     * These status values are mutually exclusive, so a control cannot be\\r\\n     * both valid AND invalid or invalid AND disabled.\\r\\n     */\\r\\n    readonly status: string;\\r\\n    /**\\r\\n     * A control is `valid` when its `status` is `VALID`.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @returns True if the control has passed all of its validation tests,\\r\\n     * false otherwise.\\r\\n     */\\r\\n    readonly valid: boolean;\\r\\n    /**\\r\\n     * A control is `invalid` when its `status` is `INVALID`.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @returns True if this control has failed one or more of its validation checks,\\r\\n     * false otherwise.\\r\\n     */\\r\\n    readonly invalid: boolean;\\r\\n    /**\\r\\n     * A control is `pending` when its `status` is `PENDING`.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @returns True if this control is in the process of conducting a validation check,\\r\\n     * false otherwise.\\r\\n     */\\r\\n    readonly pending: boolean;\\r\\n    /**\\r\\n     * A control is `disabled` when its `status` is `DISABLED`.\\r\\n     *\\r\\n     * Disabled controls are exempt from validation checks and\\r\\n     * are not included in the aggregate value of their ancestor\\r\\n     * controls.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @returns True if the control is disabled, false otherwise.\\r\\n     */\\r\\n    readonly disabled: boolean;\\r\\n    /**\\r\\n     * A control is `enabled` as long as its `status` is not `DISABLED`.\\r\\n     *\\r\\n     * @returns True if the control has any status other than 'DISABLED',\\r\\n     * false if the status is 'DISABLED'.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     */\\r\\n    readonly enabled: boolean;\\r\\n    /**\\r\\n     * An object containing any errors generated by failing validation,\\r\\n     * or null if there are no errors.\\r\\n     */\\r\\n    readonly errors: ValidationErrors | null;\\r\\n    /**\\r\\n     * A control is `pristine` if the user has not yet changed\\r\\n     * the value in the UI.\\r\\n     *\\r\\n     * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\\r\\n     * Programmatic changes to a control's value do not mark it dirty.\\r\\n     */\\r\\n    readonly pristine: boolean;\\r\\n    /**\\r\\n     * A control is `dirty` if the user has changed the value\\r\\n     * in the UI.\\r\\n     *\\r\\n     * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\\r\\n     * Programmatic changes to a control's value do not mark it dirty.\\r\\n     */\\r\\n    readonly dirty: boolean;\\r\\n    /**\\r\\n     * True if the control is marked as `touched`.\\r\\n     *\\r\\n     * A control is marked `touched` once the user has triggered\\r\\n     * a `blur` event on it.\\r\\n     */\\r\\n    readonly touched: boolean;\\r\\n    /**\\r\\n     * True if the control has not been marked as touched\\r\\n     *\\r\\n     * A control is `untouched` if the user has not yet triggered\\r\\n     * a `blur` event on it.\\r\\n     */\\r\\n    readonly untouched: boolean;\\r\\n    /**\\r\\n     * A multicasting observable that emits an event every time the value of the control changes, in\\r\\n     * the UI or programmatically.\\r\\n     */\\r\\n    readonly valueChanges: Observable<any>;\\r\\n    /**\\r\\n     * A multicasting observable that emits an event every time the validation `status` of the control\\r\\n     * recalculates.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     */\\r\\n    readonly statusChanges: Observable<any>;\\r\\n    /**\\r\\n     * Reports the update strategy of the `AbstractControl` (meaning\\r\\n     * the event on which the control updates itself).\\r\\n     * Possible values: `'change'` | `'blur'` | `'submit'`\\r\\n     * Default value: `'change'`\\r\\n     */\\r\\n    readonly updateOn: FormHooks;\\r\\n    /**\\r\\n     * Sets the synchronous validators that are active on this control.  Calling\\r\\n     * this overwrites any existing sync validators.\\r\\n     *\\r\\n     * When you add or remove a validator at run time, you must call\\r\\n     * `updateValueAndValidity()` for the new validation to take effect.\\r\\n     *\\r\\n     */\\r\\n    setValidators(newValidator: ValidatorFn | ValidatorFn[] | null): void;\\r\\n    /**\\r\\n     * Sets the async validators that are active on this control. Calling this\\r\\n     * overwrites any existing async validators.\\r\\n     *\\r\\n     * When you add or remove a validator at run time, you must call\\r\\n     * `updateValueAndValidity()` for the new validation to take effect.\\r\\n     *\\r\\n     */\\r\\n    setAsyncValidators(newValidator: AsyncValidatorFn | AsyncValidatorFn[] | null): void;\\r\\n    /**\\r\\n     * Empties out the sync validator list.\\r\\n     *\\r\\n     * When you add or remove a validator at run time, you must call\\r\\n     * `updateValueAndValidity()` for the new validation to take effect.\\r\\n     *\\r\\n     */\\r\\n    clearValidators(): void;\\r\\n    /**\\r\\n     * Empties out the async validator list.\\r\\n     *\\r\\n     * When you add or remove a validator at run time, you must call\\r\\n     * `updateValueAndValidity()` for the new validation to take effect.\\r\\n     *\\r\\n     */\\r\\n    clearAsyncValidators(): void;\\r\\n    /**\\r\\n     * Marks the control as `touched`. A control is touched by focus and\\r\\n     * blur events that do not change the value.\\r\\n     *\\r\\n     * @see `markAsUntouched()`\\r\\n     * @see `markAsDirty()`\\r\\n     * @see `markAsPristine()`\\r\\n     *\\r\\n     * @param opts Configuration options that determine how the control propagates changes\\r\\n     * and emits events events after marking is applied.\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false.\\r\\n     */\\r\\n    markAsTouched(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Marks the control and all its descendant controls as `touched`.\\r\\n     * @see `markAsTouched()`\\r\\n     */\\r\\n    markAllAsTouched(): void;\\r\\n    /**\\r\\n     * Marks the control as `untouched`.\\r\\n     *\\r\\n     * If the control has any children, also marks all children as `untouched`\\r\\n     * and recalculates the `touched` status of all parent controls.\\r\\n     *\\r\\n     * @see `markAsTouched()`\\r\\n     * @see `markAsDirty()`\\r\\n     * @see `markAsPristine()`\\r\\n     *\\r\\n     * @param opts Configuration options that determine how the control propagates changes\\r\\n     * and emits events after the marking is applied.\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false.\\r\\n     */\\r\\n    markAsUntouched(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Marks the control as `dirty`. A control becomes dirty when\\r\\n     * the control's value is changed through the UI; compare `markAsTouched`.\\r\\n     *\\r\\n     * @see `markAsTouched()`\\r\\n     * @see `markAsUntouched()`\\r\\n     * @see `markAsPristine()`\\r\\n     *\\r\\n     * @param opts Configuration options that determine how the control propagates changes\\r\\n     * and emits events after marking is applied.\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false.\\r\\n     */\\r\\n    markAsDirty(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Marks the control as `pristine`.\\r\\n     *\\r\\n     * If the control has any children, marks all children as `pristine`,\\r\\n     * and recalculates the `pristine` status of all parent\\r\\n     * controls.\\r\\n     *\\r\\n     * @see `markAsTouched()`\\r\\n     * @see `markAsUntouched()`\\r\\n     * @see `markAsDirty()`\\r\\n     *\\r\\n     * @param opts Configuration options that determine how the control emits events after\\r\\n     * marking is applied.\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false..\\r\\n     */\\r\\n    markAsPristine(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Marks the control as `pending`.\\r\\n     *\\r\\n     * A control is pending while the control performs async validation.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @param opts Configuration options that determine how the control propagates changes and\\r\\n     * emits events after marking is applied.\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false..\\r\\n     * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\\r\\n     * observable emits an event with the latest status the control is marked pending.\\r\\n     * When false, no events are emitted.\\r\\n     *\\r\\n     */\\r\\n    markAsPending(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Disables the control. This means the control is exempt from validation checks and\\r\\n     * excluded from the aggregate value of any parent. Its status is `DISABLED`.\\r\\n     *\\r\\n     * If the control has children, all children are also disabled.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @param opts Configuration options that determine how the control propagates\\r\\n     * changes and emits events after the control is disabled.\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false..\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control is disabled.\\r\\n     * When false, no events are emitted.\\r\\n     */\\r\\n    disable(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Enables the control. This means the control is included in validation checks and\\r\\n     * the aggregate value of its parent. Its status recalculates based on its value and\\r\\n     * its validators.\\r\\n     *\\r\\n     * By default, if the control has children, all children are enabled.\\r\\n     *\\r\\n     * @see {@link AbstractControl.status}\\r\\n     *\\r\\n     * @param opts Configure options that control how the control propagates changes and\\r\\n     * emits events when marked as untouched\\r\\n     * * `onlySelf`: When true, mark only this control. When false or not supplied,\\r\\n     * marks all direct ancestors. Default is false..\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control is enabled.\\r\\n     * When false, no events are emitted.\\r\\n     */\\r\\n    enable(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    private _updateAncestors;\\r\\n    /**\\r\\n     * @param parent Sets the parent of the control\\r\\n     */\\r\\n    setParent(parent: FormGroup | FormArray): void;\\r\\n    /**\\r\\n     * Sets the value of the control. Abstract method (implemented in sub-classes).\\r\\n     */\\r\\n    abstract setValue(value: any, options?: Object): void;\\r\\n    /**\\r\\n     * Patches the value of the control. Abstract method (implemented in sub-classes).\\r\\n     */\\r\\n    abstract patchValue(value: any, options?: Object): void;\\r\\n    /**\\r\\n     * Resets the control. Abstract method (implemented in sub-classes).\\r\\n     */\\r\\n    abstract reset(value?: any, options?: Object): void;\\r\\n    /**\\r\\n     * Recalculates the value and validation status of the control.\\r\\n     *\\r\\n     * By default, it also updates the value and validity of its ancestors.\\r\\n     *\\r\\n     * @param opts Configuration options determine how the control propagates changes and emits events\\r\\n     * after updates and validity checks are applied.\\r\\n     * * `onlySelf`: When true, only update this control. When false or not supplied,\\r\\n     * update all direct ancestors. Default is false..\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control is updated.\\r\\n     * When false, no events are emitted.\\r\\n     */\\r\\n    updateValueAndValidity(opts?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    private _setInitialStatus;\\r\\n    private _runValidator;\\r\\n    private _runAsyncValidator;\\r\\n    private _cancelExistingSubscription;\\r\\n    /**\\r\\n     * Sets errors on a form control when running validations manually, rather than automatically.\\r\\n     *\\r\\n     * Calling `setErrors` also updates the validity of the parent control.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Manually set the errors for a control\\r\\n     *\\r\\n     * ```\\r\\n     * const login = new FormControl('someLogin');\\r\\n     * login.setErrors({\\r\\n     *   notUnique: true\\r\\n     * });\\r\\n     *\\r\\n     * expect(login.valid).toEqual(false);\\r\\n     * expect(login.errors).toEqual({ notUnique: true });\\r\\n     *\\r\\n     * login.setValue('someOtherLogin');\\r\\n     *\\r\\n     * expect(login.valid).toEqual(true);\\r\\n     * ```\\r\\n     */\\r\\n    setErrors(errors: ValidationErrors | null, opts?: {\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Retrieves a child control given the control's name or path.\\r\\n     *\\r\\n     * @param path A dot-delimited string or array of string/number values that define the path to the\\r\\n     * control.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Retrieve a nested control\\r\\n     *\\r\\n     * For example, to get a `name` control nested within a `person` sub-group:\\r\\n     *\\r\\n     * * `this.form.get('person.name');`\\r\\n     *\\r\\n     * -OR-\\r\\n     *\\r\\n     * * `this.form.get(['person', 'name']);`\\r\\n     */\\r\\n    get(path: Array<string | number> | string): AbstractControl | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports error data for the control with the given path.\\r\\n     *\\r\\n     * @param errorCode The code of the error to check\\r\\n     * @param path A list of control names that designates how to move from the current control\\r\\n     * to the control that should be queried for errors.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * For example, for the following `FormGroup`:\\r\\n     *\\r\\n     * ```\\r\\n     * form = new FormGroup({\\r\\n     *   address: new FormGroup({ street: new FormControl() })\\r\\n     * });\\r\\n     * ```\\r\\n     *\\r\\n     * The path to the 'street' control from the root form would be 'address' -> 'street'.\\r\\n     *\\r\\n     * It can be provided to this method in one of two formats:\\r\\n     *\\r\\n     * 1. An array of string control names, e.g. `['address', 'street']`\\r\\n     * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\\r\\n     *\\r\\n     * @returns error data for that particular error. If the control or error is not present,\\r\\n     * null is returned.\\r\\n     */\\r\\n    getError(errorCode: string, path?: Array<string | number> | string): any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control with the given path has the error specified.\\r\\n     *\\r\\n     * @param errorCode The code of the error to check\\r\\n     * @param path A list of control names that designates how to move from the current control\\r\\n     * to the control that should be queried for errors.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * For example, for the following `FormGroup`:\\r\\n     *\\r\\n     * ```\\r\\n     * form = new FormGroup({\\r\\n     *   address: new FormGroup({ street: new FormControl() })\\r\\n     * });\\r\\n     * ```\\r\\n     *\\r\\n     * The path to the 'street' control from the root form would be 'address' -> 'street'.\\r\\n     *\\r\\n     * It can be provided to this method in one of two formats:\\r\\n     *\\r\\n     * 1. An array of string control names, e.g. `['address', 'street']`\\r\\n     * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\\r\\n     *\\r\\n     * If no path is given, this method checks for the error on the current control.\\r\\n     *\\r\\n     * @returns whether the given error is present in the control at the given path.\\r\\n     *\\r\\n     * If the control is not present, false is returned.\\r\\n     */\\r\\n    hasError(errorCode: string, path?: Array<string | number> | string): boolean;\\r\\n    /**\\r\\n     * Retrieves the top-level ancestor of this control.\\r\\n     */\\r\\n    readonly root: AbstractControl;\\r\\n    private _calculateStatus;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Base class for control directives.\\r\\n *\\r\\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class AbstractControlDirective {\\r\\n    /**\\r\\n     * @description\\r\\n     * A reference to the underlying control.\\r\\n     *\\r\\n     * @returns the control that backs this directive. Most properties fall through to that instance.\\r\\n     */\\r\\n    abstract readonly control: AbstractControl | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports the value of the control if it is present, otherwise null.\\r\\n     */\\r\\n    readonly value: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is valid. A control is considered valid if no\\r\\n     * validation errors exist with the current value.\\r\\n     * If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly valid: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is invalid, meaning that an error exists in the input value.\\r\\n     * If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly invalid: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether a control is pending, meaning that that async validation is occurring and\\r\\n     * errors are not yet available for the input value. If the control is not present, null is\\r\\n     * returned.\\r\\n     */\\r\\n    readonly pending: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is disabled, meaning that the control is disabled\\r\\n     * in the UI and is exempt from validation checks and excluded from aggregate\\r\\n     * values of ancestor controls. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly disabled: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is enabled, meaning that the control is included in ancestor\\r\\n     * calculations of validity or value. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly enabled: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports the control's validation errors. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly errors: ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is pristine, meaning that the user has not yet changed\\r\\n     * the value in the UI. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly pristine: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is dirty, meaning that the user has changed\\r\\n     * the value in the UI. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly dirty: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is touched, meaning that the user has triggered\\r\\n     * a `blur` event on it. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly touched: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports the validation status of the control. Possible values include:\\r\\n     * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\\r\\n     * If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly status: string | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control is untouched, meaning that the user has not yet triggered\\r\\n     * a `blur` event on it. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly untouched: boolean | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns a multicasting observable that emits a validation status whenever it is\\r\\n     * calculated for the control. If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly statusChanges: Observable<any> | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns a multicasting observable of value changes for the control that emits every time the\\r\\n     * value of the control changes in the UI or programmatically.\\r\\n     * If the control is not present, null is returned.\\r\\n     */\\r\\n    readonly valueChanges: Observable<any> | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array that represents the path from the top-level form to this control.\\r\\n     * Each index is the string name of the control on that level.\\r\\n     */\\r\\n    readonly path: string[] | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Resets the control with the provided value if the control is present.\\r\\n     */\\r\\n    reset(value?: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the control with the given path has the error specified.\\r\\n     *\\r\\n     * @param errorCode The code of the error to check\\r\\n     * @param path A list of control names that designates how to move from the current control\\r\\n     * to the control that should be queried for errors.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * For example, for the following `FormGroup`:\\r\\n     *\\r\\n     * ```\\r\\n     * form = new FormGroup({\\r\\n     *   address: new FormGroup({ street: new FormControl() })\\r\\n     * });\\r\\n     * ```\\r\\n     *\\r\\n     * The path to the 'street' control from the root form would be 'address' -> 'street'.\\r\\n     *\\r\\n     * It can be provided to this method in one of two formats:\\r\\n     *\\r\\n     * 1. An array of string control names, e.g. `['address', 'street']`\\r\\n     * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\\r\\n     *\\r\\n     * If no path is given, this method checks for the error on the current control.\\r\\n     *\\r\\n     * @returns whether the given error is present in the control at the given path.\\r\\n     *\\r\\n     * If the control is not present, false is returned.\\r\\n     */\\r\\n    hasError(errorCode: string, path?: Array<string | number> | string): boolean;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports error data for the control with the given path.\\r\\n     *\\r\\n     * @param errorCode The code of the error to check\\r\\n     * @param path A list of control names that designates how to move from the current control\\r\\n     * to the control that should be queried for errors.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * For example, for the following `FormGroup`:\\r\\n     *\\r\\n     * ```\\r\\n     * form = new FormGroup({\\r\\n     *   address: new FormGroup({ street: new FormControl() })\\r\\n     * });\\r\\n     * ```\\r\\n     *\\r\\n     * The path to the 'street' control from the root form would be 'address' -> 'street'.\\r\\n     *\\r\\n     * It can be provided to this method in one of two formats:\\r\\n     *\\r\\n     * 1. An array of string control names, e.g. `['address', 'street']`\\r\\n     * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\\r\\n     *\\r\\n     * @returns error data for that particular error. If the control or error is not present,\\r\\n     * null is returned.\\r\\n     */\\r\\n    getError(errorCode: string, path?: Array<string | number> | string): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Interface for options provided to an `AbstractControl`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AbstractControlOptions {\\r\\n    /**\\r\\n     * @description\\r\\n     * The list of validators applied to a control.\\r\\n     */\\r\\n    validators?: ValidatorFn | ValidatorFn[] | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The list of async validators applied to control.\\r\\n     */\\r\\n    asyncValidators?: AsyncValidatorFn | AsyncValidatorFn[] | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The event name for control to update upon.\\r\\n     */\\r\\n    updateOn?: 'change' | 'blur' | 'submit';\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\\r\\n    /**\\r\\n     * @description\\r\\n     * An internal callback method triggered on the instance after the inputs are set.\\r\\n     * Registers the group with its parent group.\\r\\n     */\\r\\n    ngOnInit(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * An internal callback method triggered before the instance is destroyed.\\r\\n     * Removes the group from its parent group.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The `FormGroup` bound to this directive.\\r\\n     */\\r\\n    readonly control: FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * The path to this group from the top-level directive.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * The top-level directive for this group if present, otherwise null.\\r\\n     */\\r\\n    readonly formDirective: Form | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The synchronous validators registered with this group.\\r\\n     */\\r\\n    readonly validator: ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The async validators registered with this group.\\r\\n     */\\r\\n    readonly asyncValidator: AsyncValidatorFn | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * An interface implemented by classes that perform asynchronous validation.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Provide a custom async validator directive\\r\\n *\\r\\n * The following example implements the `AsyncValidator` interface to create an\\r\\n * async validator directive with a custom error key.\\r\\n *\\r\\n * ```typescript\\r\\n * import { of as observableOf } from 'rxjs';\\r\\n *\\r\\n * @Directive({\\r\\n *   selector: '[customAsyncValidator]',\\r\\n *   providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\\r\\n * true}]\\r\\n * })\\r\\n * class CustomAsyncValidatorDirective implements AsyncValidator {\\r\\n *   validate(control: AbstractControl): Observable<ValidationErrors|null> {\\r\\n *     return observableOf({'custom': true});\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AsyncValidator extends Validator {\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that performs async validation against the provided control.\\r\\n     *\\r\\n     * @param control The control to validate against.\\r\\n     *\\r\\n     * @returns A promise or observable that resolves a map of validation errors\\r\\n     * if validation fails, otherwise null.\\r\\n     */\\r\\n    validate(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A function that receives a control and returns a Promise or observable\\r\\n * that emits validation errors if present, otherwise null.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface AsyncValidatorFn {\\r\\n    (control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\\r\\n * element.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using a checkbox with a reactive form.\\r\\n *\\r\\n * The following example shows how to use a checkbox with a reactive form.\\r\\n *\\r\\n * ```ts\\r\\n * const rememberLoginControl = new FormControl();\\r\\n * ```\\r\\n *\\r\\n * ```\\r\\n * <input type=\\\"checkbox\\\" [formControl]=\\\"rememberLoginControl\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class CheckboxControlValueAccessor implements ControlValueAccessor {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a change event occurs on the input element.\\r\\n     */\\r\\n    onChange: (_: any) => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef);\\r\\n    /**\\r\\n     * Sets the \\\"checked\\\" property on the input element.\\r\\n     *\\r\\n     * @param value The checked value\\r\\n     */\\r\\n    writeValue(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (_: any) => {}): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => {}): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CheckboxControlValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CheckboxControlValueAccessor, \\\"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * A Directive that adds the `required` validator to checkbox controls marked with the\\r\\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\\r\\n *\\r\\n * @see [Form Validation](guide/form-validation)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Adding a required checkbox validator using template-driven forms\\r\\n *\\r\\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\\r\\n *\\r\\n * ```\\r\\n * <input type=\\\"checkbox\\\" name=\\\"active\\\" ngModel required>\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n * @ngModule FormsModule\\r\\n * @ngModule ReactiveFormsModule\\r\\n */\\r\\nexport declare class CheckboxRequiredValidator extends RequiredValidator {\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that validates whether or not the checkbox has been checked.\\r\\n     * Returns the validation result if enabled, otherwise null.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<CheckboxRequiredValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<CheckboxRequiredValidator, \\\"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provide this token to control if form directives buffer IME input until\\r\\n * the \\\"compositionend\\\" event occurs.\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const COMPOSITION_BUFFER_MODE: InjectionToken<boolean>;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A base class for directives that contain multiple registered instances of `NgControl`.\\r\\n * Only used by the forms module.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class ControlContainer extends AbstractControlDirective {\\r\\n    /**\\r\\n     * @description\\r\\n     * The name for the control\\r\\n     */\\r\\n    name: string | number | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The top-level form directive for the control.\\r\\n     */\\r\\n    readonly formDirective: Form | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The path to this group.\\r\\n     */\\r\\n    readonly path: string[] | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Defines an interface that acts as a bridge between the Angular forms API and a\\r\\n * native element in the DOM.\\r\\n *\\r\\n * Implement this interface to create a custom form control directive\\r\\n * that integrates with Angular forms.\\r\\n *\\r\\n * @see DefaultValueAccessor\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ControlValueAccessor {\\r\\n    /**\\r\\n     * @description\\r\\n     * Writes a new value to the element.\\r\\n     *\\r\\n     * This method is called by the forms API to write to the view when programmatic\\r\\n     * changes from model to view are requested.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Write a value to the element\\r\\n     *\\r\\n     * The following example writes a value to the native DOM element.\\r\\n     *\\r\\n     * ```ts\\r\\n     * writeValue(value: any): void {\\r\\n     *   this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * @param obj The new value for the element\\r\\n     */\\r\\n    writeValue(obj: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function that is called when the control's value\\r\\n     * changes in the UI.\\r\\n     *\\r\\n     * This method is called by the forms API on initialization to update the form\\r\\n     * model when values propagate from the view to the model.\\r\\n     *\\r\\n     * When implementing the `registerOnChange` method in your own value accessor,\\r\\n     * save the given function so your class calls it at the appropriate time.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Store the change function\\r\\n     *\\r\\n     * The following example stores the provided function as an internal method.\\r\\n     *\\r\\n     * ```ts\\r\\n     * registerOnChange(fn: (_: any) => void): void {\\r\\n     *   this._onChange = fn;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * When the value changes in the UI, call the registered\\r\\n     * function to allow the forms API to update itself:\\r\\n     *\\r\\n     * ```ts\\r\\n     * host: {\\r\\n     *    '(change)': '_onChange($event.target.value)'\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * @param fn The callback function to register\\r\\n     */\\r\\n    registerOnChange(fn: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function is called by the forms API on initialization\\r\\n     * to update the form model on blur.\\r\\n     *\\r\\n     * When implementing `registerOnTouched` in your own value accessor, save the given\\r\\n     * function so your class calls it when the control should be considered\\r\\n     * blurred or \\\"touched\\\".\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Store the callback function\\r\\n     *\\r\\n     * The following example stores the provided function as an internal method.\\r\\n     *\\r\\n     * ```ts\\r\\n     * registerOnTouched(fn: any): void {\\r\\n     *   this._onTouched = fn;\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * On blur (or equivalent), your class should call the registered function to allow\\r\\n     * the forms API to update itself:\\r\\n     *\\r\\n     * ```ts\\r\\n     * host: {\\r\\n     *    '(blur)': '_onTouched()'\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * @param fn The callback function to register\\r\\n     */\\r\\n    registerOnTouched(fn: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Function that is called by the forms API when the control status changes to\\r\\n     * or from 'DISABLED'. Depending on the status, it enables or disables the\\r\\n     * appropriate DOM element.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * The following is an example of writing the disabled property to a native DOM element:\\r\\n     *\\r\\n     * ```ts\\r\\n     * setDisabledState(isDisabled: boolean): void {\\r\\n     *   this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\\r\\n     * }\\r\\n     * ```\\r\\n     *\\r\\n     * @param isDisabled The disabled status to set on the element\\r\\n     */\\r\\n    setDisabledState?(isDisabled: boolean): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\\r\\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\\r\\n * `NgModel` directives.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using the default value accessor\\r\\n *\\r\\n * The following example shows how to use an input element that activates the default value accessor\\r\\n * (in this case, a text field).\\r\\n *\\r\\n * ```ts\\r\\n * const firstNameControl = new FormControl();\\r\\n * ```\\r\\n *\\r\\n * ```\\r\\n * <input type=\\\"text\\\" [formControl]=\\\"firstNameControl\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class DefaultValueAccessor implements ControlValueAccessor {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    private _compositionMode;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when an input event occurs on the input element.\\r\\n     */\\r\\n    onChange: (_: any) => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    /** Whether the user is creating a composition string (IME events). */\\r\\n    private _composing;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef, _compositionMode: boolean);\\r\\n    /**\\r\\n     * Sets the \\\"value\\\" property on the input element.\\r\\n     *\\r\\n     * @param value The checked value\\r\\n     */\\r\\n    writeValue(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (_: any) => void): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => void): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<DefaultValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<DefaultValueAccessor, \\\"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * A directive that adds the `email` validator to controls marked with the\\r\\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\\r\\n *\\r\\n * @see [Form Validation](guide/form-validation)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Adding an email validator\\r\\n *\\r\\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\\r\\n *\\r\\n * ```\\r\\n * <input type=\\\"email\\\" name=\\\"email\\\" ngModel email>\\r\\n * <input type=\\\"email\\\" name=\\\"email\\\" ngModel email=\\\"true\\\">\\r\\n * <input type=\\\"email\\\" name=\\\"email\\\" ngModel [email]=\\\"true\\\">\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n * @ngModule FormsModule\\r\\n * @ngModule ReactiveFormsModule\\r\\n */\\r\\nexport declare class EmailValidator implements Validator {\\r\\n    private _enabled;\\r\\n    private _onChange;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks changes to the email attribute bound to this directive.\\r\\n     */\\r\\n    email: boolean | string;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that validates whether an email address is valid.\\r\\n     * Returns the validation result if enabled, otherwise null.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function to call when the validator inputs change.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnValidatorChange(fn: () => void): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<EmailValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<EmailValidator, \\\"[email][formControlName],[email][formControl],[email][ngModel]\\\", never, { 'email': \\\"email\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * An interface implemented by `FormGroupDirective` and `NgForm` directives.\\r\\n *\\r\\n * Only used by the `ReactiveFormsModule` and `FormsModule`.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Form {\\r\\n    /**\\r\\n     * @description\\r\\n     * Add a control to this form.\\r\\n     *\\r\\n     * @param dir The control directive to add to the form.\\r\\n     */\\r\\n    addControl(dir: NgControl): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Remove a control from this form.\\r\\n     *\\r\\n     * @param dir: The control directive to remove from the form.\\r\\n     */\\r\\n    removeControl(dir: NgControl): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The control directive from which to get the `FormControl`.\\r\\n     *\\r\\n     * @param dir: The control directive.\\r\\n     */\\r\\n    getControl(dir: NgControl): FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Add a group of controls to this form.\\r\\n     *\\r\\n     * @param dir: The control group directive to add.\\r\\n     */\\r\\n    addFormGroup(dir: AbstractFormGroupDirective): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Remove a group of controls to this form.\\r\\n     *\\r\\n     * @param dir: The control group directive to remove.\\r\\n     */\\r\\n    removeFormGroup(dir: AbstractFormGroupDirective): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The `FormGroup` associated with a particular `AbstractFormGroupDirective`.\\r\\n     *\\r\\n     * @param dir: The form group directive from which to get the `FormGroup`.\\r\\n     */\\r\\n    getFormGroup(dir: AbstractFormGroupDirective): FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * Update the model for a particular control with a new value.\\r\\n     *\\r\\n     * @param dir: The control directive to update.\\r\\n     * @param value: The new value for the control.\\r\\n     */\\r\\n    updateModel(dir: NgControl, value: any): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Tracks the value and validity state of an array of `FormControl`,\\r\\n * `FormGroup` or `FormArray` instances.\\r\\n *\\r\\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\\r\\n * It calculates its status by reducing the status values of its children. For example, if one of\\r\\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\\r\\n *\\r\\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\\r\\n * along with `FormControl` and `FormGroup`.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Create an array of form controls\\r\\n *\\r\\n * ```\\r\\n * const arr = new FormArray([\\r\\n *   new FormControl('Nancy', Validators.minLength(2)),\\r\\n *   new FormControl('Drew'),\\r\\n * ]);\\r\\n *\\r\\n * console.log(arr.value);   // ['Nancy', 'Drew']\\r\\n * console.log(arr.status);  // 'VALID'\\r\\n * ```\\r\\n *\\r\\n * ### Create a form array with array-level validators\\r\\n *\\r\\n * You include array-level validators and async validators. These come in handy\\r\\n * when you want to perform validation that considers the value of more than one child\\r\\n * control.\\r\\n *\\r\\n * The two types of validators are passed in separately as the second and third arg\\r\\n * respectively, or together as part of an options object.\\r\\n *\\r\\n * ```\\r\\n * const arr = new FormArray([\\r\\n *   new FormControl('Nancy'),\\r\\n *   new FormControl('Drew')\\r\\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\\r\\n * ```\\r\\n *\\r\\n  * ### Set the updateOn property for all controls in a form array\\r\\n *\\r\\n * The options object is used to set a default value for each child\\r\\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\\r\\n * array level, all child controls default to 'blur', unless the child\\r\\n * has explicitly specified a different `updateOn` value.\\r\\n *\\r\\n * ```ts\\r\\n * const arr = new FormArray([\\r\\n *    new FormControl()\\r\\n * ], {updateOn: 'blur'});\\r\\n * ```\\r\\n *\\r\\n * ### Adding or removing controls from a form array\\r\\n *\\r\\n * To change the controls in the array, use the `push`, `insert`, `removeAt` or `clear` methods\\r\\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\\r\\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\\r\\n * the `FormArray` directly, as that result in strange and unexpected behavior such\\r\\n * as broken change detection.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormArray extends AbstractControl {\\r\\n    controls: AbstractControl[];\\r\\n    /**\\r\\n    * Creates a new `FormArray` instance.\\r\\n    *\\r\\n    * @param controls An array of child controls. Each child control is given an index\\r\\n    * where it is registered.\\r\\n    *\\r\\n    * @param validatorOrOpts A synchronous validator function, or an array of\\r\\n    * such functions, or an `AbstractControlOptions` object that contains validation functions\\r\\n    * and a validation trigger.\\r\\n    *\\r\\n    * @param asyncValidator A single async validator or array of async validator functions\\r\\n    *\\r\\n    */\\r\\n    constructor(controls: AbstractControl[], validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null);\\r\\n    /**\\r\\n     * Get the `AbstractControl` at the given `index` in the array.\\r\\n     *\\r\\n     * @param index Index in the array to retrieve the control\\r\\n     */\\r\\n    at(index: number): AbstractControl;\\r\\n    /**\\r\\n     * Insert a new `AbstractControl` at the end of the array.\\r\\n     *\\r\\n     * @param control Form control to be inserted\\r\\n     */\\r\\n    push(control: AbstractControl): void;\\r\\n    /**\\r\\n     * Insert a new `AbstractControl` at the given `index` in the array.\\r\\n     *\\r\\n     * @param index Index in the array to insert the control\\r\\n     * @param control Form control to be inserted\\r\\n     */\\r\\n    insert(index: number, control: AbstractControl): void;\\r\\n    /**\\r\\n     * Remove the control at the given `index` in the array.\\r\\n     *\\r\\n     * @param index Index in the array to remove the control\\r\\n     */\\r\\n    removeAt(index: number): void;\\r\\n    /**\\r\\n     * Replace an existing control.\\r\\n     *\\r\\n     * @param index Index in the array to replace the control\\r\\n     * @param control The `AbstractControl` control to replace the existing control\\r\\n     */\\r\\n    setControl(index: number, control: AbstractControl): void;\\r\\n    /**\\r\\n     * Length of the control array.\\r\\n     */\\r\\n    readonly length: number;\\r\\n    /**\\r\\n     * Sets the value of the `FormArray`. It accepts an array that matches\\r\\n     * the structure of the control.\\r\\n     *\\r\\n     * This method performs strict checks, and throws an error if you try\\r\\n     * to set the value of a control that doesn't exist or if you exclude the\\r\\n     * value of a control.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Set the values for the controls in the form array\\r\\n     *\\r\\n     * ```\\r\\n     * const arr = new FormArray([\\r\\n     *   new FormControl(),\\r\\n     *   new FormControl()\\r\\n     * ]);\\r\\n     * console.log(arr.value);   // [null, null]\\r\\n     *\\r\\n     * arr.setValue(['Nancy', 'Drew']);\\r\\n     * console.log(arr.value);   // ['Nancy', 'Drew']\\r\\n     * ```\\r\\n     *\\r\\n     * @param value Array of values for the controls\\r\\n     * @param options Configure options that determine how the control propagates changes and\\r\\n     * emits events after the value changes\\r\\n     *\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\\r\\n     * is false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control value is updated.\\r\\n     * When false, no events are emitted.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     */\\r\\n    setValue(value: any[], options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Patches the value of the `FormArray`. It accepts an array that matches the\\r\\n     * structure of the control, and does its best to match the values to the correct\\r\\n     * controls in the group.\\r\\n     *\\r\\n     * It accepts both super-sets and sub-sets of the array without throwing an error.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Patch the values for controls in a form array\\r\\n     *\\r\\n     * ```\\r\\n     * const arr = new FormArray([\\r\\n     *    new FormControl(),\\r\\n     *    new FormControl()\\r\\n     * ]);\\r\\n     * console.log(arr.value);   // [null, null]\\r\\n     *\\r\\n     * arr.patchValue(['Nancy']);\\r\\n     * console.log(arr.value);   // ['Nancy', null]\\r\\n     * ```\\r\\n     *\\r\\n     * @param value Array of latest values for the controls\\r\\n     * @param options Configure options that determine how the control propagates changes and\\r\\n     * emits events after the value changes\\r\\n     *\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\\r\\n     * is false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control value is updated.\\r\\n     * When false, no events are emitted.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     */\\r\\n    patchValue(value: any[], options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\\r\\n     * value of all descendants to null or null maps.\\r\\n     *\\r\\n     * You reset to a specific form state by passing in an array of states\\r\\n     * that matches the structure of the control. The state is a standalone value\\r\\n     * or a form state object with both a value and a disabled status.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Reset the values in a form array\\r\\n     *\\r\\n     * ```ts\\r\\n     * const arr = new FormArray([\\r\\n     *    new FormControl(),\\r\\n     *    new FormControl()\\r\\n     * ]);\\r\\n     * arr.reset(['name', 'last name']);\\r\\n     *\\r\\n     * console.log(this.arr.value);  // ['name', 'last name']\\r\\n     * ```\\r\\n     *\\r\\n     * ### Reset the values in a form array and the disabled status for the first control\\r\\n     *\\r\\n     * ```\\r\\n     * this.arr.reset([\\r\\n     *   {value: 'name', disabled: true},\\r\\n     *   'last'\\r\\n     * ]);\\r\\n     *\\r\\n     * console.log(this.arr.value);  // ['name', 'last name']\\r\\n     * console.log(this.arr.get(0).status);  // 'DISABLED'\\r\\n     * ```\\r\\n     *\\r\\n     * @param value Array of values for the controls\\r\\n     * @param options Configure options that determine how the control propagates changes and\\r\\n     * emits events after the value changes\\r\\n     *\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\\r\\n     * is false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control is reset.\\r\\n     * When false, no events are emitted.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     */\\r\\n    reset(value?: any, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * The aggregate value of the array, including any disabled controls.\\r\\n     *\\r\\n     * Reports all values regardless of disabled status.\\r\\n     * For enabled controls only, the `value` property is the best way to get the value of the array.\\r\\n     */\\r\\n    getRawValue(): any[];\\r\\n    /**\\r\\n     * Remove all controls in the `FormArray`.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Remove all elements from a FormArray\\r\\n     *\\r\\n     * ```ts\\r\\n     * const arr = new FormArray([\\r\\n     *    new FormControl(),\\r\\n     *    new FormControl()\\r\\n     * ]);\\r\\n     * console.log(arr.length);  // 2\\r\\n     *\\r\\n     * arr.clear();\\r\\n     * console.log(arr.length);  // 0\\r\\n     * ```\\r\\n     *\\r\\n     * It's a simpler and more efficient alternative to removing all elements one by one:\\r\\n     *\\r\\n     * ```ts\\r\\n     * const arr = new FormArray([\\r\\n     *    new FormControl(),\\r\\n     *    new FormControl()\\r\\n     * ]);\\r\\n     *\\r\\n     * while (arr.length) {\\r\\n     *    arr.removeAt(0);\\r\\n     * }\\r\\n     * ```\\r\\n     */\\r\\n    clear(): void;\\r\\n    private _registerControl;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Syncs a nested `FormArray` to a DOM element.\\r\\n *\\r\\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\\r\\n * `[formGroup]`).\\r\\n *\\r\\n * It accepts the string name of the nested `FormArray` you want to link, and\\r\\n * will look for a `FormArray` registered with that name in the parent\\r\\n * `FormGroup` instance you passed into `FormGroupDirective`.\\r\\n *\\r\\n * @see [Reactive Forms Guide](guide/reactive-forms)\\r\\n * @see `AbstractControl`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Example\\r\\n *\\r\\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name of the `FormArray` bound to the directive. The name corresponds\\r\\n     * to a key in the parent `FormGroup` or `FormArray`.\\r\\n     * Accepts a name as a string or a number.\\r\\n     * The name in the form of a string is useful for individual forms,\\r\\n     * while the numerical form allows for form arrays to be bound\\r\\n     * to indices when iterating over arrays in a `FormArray`.\\r\\n     */\\r\\n    name: string | number | null;\\r\\n    constructor(parent: ControlContainer, validators: any[], asyncValidators: any[]);\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs are initialized. For internal use only.\\r\\n     *\\r\\n     * @throws If the directive does not have a valid parent.\\r\\n     */\\r\\n    ngOnInit(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called before the directive's instance is destroyed. For internal use only.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The `FormArray` bound to this directive.\\r\\n     */\\r\\n    readonly control: FormArray;\\r\\n    /**\\r\\n     * @description\\r\\n     * The top-level directive for this group if present, otherwise null.\\r\\n     */\\r\\n    readonly formDirective: FormGroupDirective | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array that represents the path from the top-level form to this control.\\r\\n     * Each index is the string name of the control on that level.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * Synchronous validator function composed of all the synchronous validators registered with this\\r\\n     * directive.\\r\\n     */\\r\\n    readonly validator: ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Async validator function composed of all the async validators registered with this directive.\\r\\n     */\\r\\n    readonly asyncValidator: AsyncValidatorFn | null;\\r\\n    private _checkParentType;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FormArrayName>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<FormArrayName, \\\"[formArrayName]\\\", never, { 'name': \\\"formArrayName\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Creates an `AbstractControl` from a user-specified configuration.\\r\\n *\\r\\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\\r\\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\\r\\n * forms.\\r\\n *\\r\\n * @see [Reactive Forms Guide](/guide/reactive-forms)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormBuilder {\\r\\n    /**\\r\\n     * @description\\r\\n     * Construct a new `FormGroup` instance.\\r\\n     *\\r\\n     * @param controlsConfig A collection of child controls. The key for each child is the name\\r\\n     * under which it is registered.\\r\\n     *\\r\\n     * @param options Configuration options object for the `FormGroup`. The object can\\r\\n     * have two shapes:\\r\\n     *\\r\\n     * 1) `AbstractControlOptions` object (preferred), which consists of:\\r\\n     * * `validators`: A synchronous validator function, or an array of validator functions\\r\\n     * * `asyncValidators`: A single async validator or array of async validator functions\\r\\n     * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\\r\\n     * submit')\\r\\n     *\\r\\n     * 2) Legacy configuration object, which consists of:\\r\\n     * * `validator`: A synchronous validator function, or an array of validator functions\\r\\n     * * `asyncValidator`: A single async validator or array of async validator functions\\r\\n     *\\r\\n     */\\r\\n    group(controlsConfig: {\\r\\n        [key: string]: any;\\r\\n    }, options?: AbstractControlOptions | {\\r\\n        [key: string]: any;\\r\\n    } | null): FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * Construct a new `FormControl` with the given state, validators and options.\\r\\n     *\\r\\n     * @param formState Initializes the control with an initial state value, or\\r\\n     * with an object that contains both a value and a disabled status.\\r\\n     *\\r\\n     * @param validatorOrOpts A synchronous validator function, or an array of\\r\\n     * such functions, or an `AbstractControlOptions` object that contains\\r\\n     * validation functions and a validation trigger.\\r\\n     *\\r\\n     * @param asyncValidator A single async validator or array of async validator\\r\\n     * functions.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Initialize a control as disabled\\r\\n     *\\r\\n     * The following example returns a control with an initial value in a disabled state.\\r\\n     *\\r\\n     * <code-example path=\\\"forms/ts/formBuilder/form_builder_example.ts\\\" region=\\\"disabled-control\\\">\\r\\n     * </code-example>\\r\\n     */\\r\\n    control(formState: any, validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null): FormControl;\\r\\n    /**\\r\\n     * Constructs a new `FormArray` from the given array of configurations,\\r\\n     * validators and options.\\r\\n     *\\r\\n     * @param controlsConfig An array of child controls or control configs. Each\\r\\n     * child control is given an index when it is registered.\\r\\n     *\\r\\n     * @param validatorOrOpts A synchronous validator function, or an array of\\r\\n     * such functions, or an `AbstractControlOptions` object that contains\\r\\n     * validation functions and a validation trigger.\\r\\n     *\\r\\n     * @param asyncValidator A single async validator or array of async validator\\r\\n     * functions.\\r\\n     */\\r\\n    array(controlsConfig: any[], validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null): FormArray;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FormBuilder>;\\n    static ɵprov: ɵngcc0.ɵɵInjectableDef<FormBuilder>;\\n}\\r\\n\\r\\n/**\\r\\n * Tracks the value and validation status of an individual form control.\\r\\n *\\r\\n * This is one of the three fundamental building blocks of Angular forms, along with\\r\\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\\r\\n * implements most of the base functionality for accessing the value, validation status,\\r\\n * user interactions and events.\\r\\n *\\r\\n * @see `AbstractControl`\\r\\n * @see [Reactive Forms Guide](guide/reactive-forms)\\r\\n * @see [Usage Notes](#usage-notes)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Initializing Form Controls\\r\\n *\\r\\n * Instantiate a `FormControl`, with an initial value.\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl('some value');\\r\\n * console.log(control.value);     // 'some value'\\r\\n *```\\r\\n *\\r\\n * The following example initializes the control with a form state object. The `value`\\r\\n * and `disabled` keys are required in this case.\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl({ value: 'n/a', disabled: true });\\r\\n * console.log(control.value);     // 'n/a'\\r\\n * console.log(control.status);    // 'DISABLED'\\r\\n * ```\\r\\n *\\r\\n * The following example initializes the control with a sync validator.\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl('', Validators.required);\\r\\n * console.log(control.value);      // ''\\r\\n * console.log(control.status);     // 'INVALID'\\r\\n * ```\\r\\n *\\r\\n * The following example initializes the control using an options object.\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl('', {\\r\\n *    validators: Validators.required,\\r\\n *    asyncValidators: myAsyncValidator\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * ### Configure the control to update on a blur event\\r\\n *\\r\\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl('', { updateOn: 'blur' });\\r\\n * ```\\r\\n *\\r\\n * ### Configure the control to update on a submit event\\r\\n *\\r\\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl('', { updateOn: 'submit' });\\r\\n * ```\\r\\n *\\r\\n * ### Reset the control back to an initial value\\r\\n *\\r\\n * You reset to a specific form state by passing through a standalone\\r\\n * value or a form state object that contains both a value and a disabled state\\r\\n * (these are the only two properties that cannot be calculated).\\r\\n *\\r\\n * ```ts\\r\\n * const control = new FormControl('Nancy');\\r\\n *\\r\\n * console.log(control.value); // 'Nancy'\\r\\n *\\r\\n * control.reset('Drew');\\r\\n *\\r\\n * console.log(control.value); // 'Drew'\\r\\n * ```\\r\\n *\\r\\n * ### Reset the control back to an initial value and disabled\\r\\n *\\r\\n * ```\\r\\n * const control = new FormControl('Nancy');\\r\\n *\\r\\n * console.log(control.value); // 'Nancy'\\r\\n * console.log(control.status); // 'VALID'\\r\\n *\\r\\n * control.reset({ value: 'Drew', disabled: true });\\r\\n *\\r\\n * console.log(control.value); // 'Drew'\\r\\n * console.log(control.status); // 'DISABLED'\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormControl extends AbstractControl {\\r\\n    /**\\r\\n    * Creates a new `FormControl` instance.\\r\\n    *\\r\\n    * @param formState Initializes the control with an initial value,\\r\\n    * or an object that defines the initial value and disabled state.\\r\\n    *\\r\\n    * @param validatorOrOpts A synchronous validator function, or an array of\\r\\n    * such functions, or an `AbstractControlOptions` object that contains validation functions\\r\\n    * and a validation trigger.\\r\\n    *\\r\\n    * @param asyncValidator A single async validator or array of async validator functions\\r\\n    *\\r\\n    */\\r\\n    constructor(formState?: any, validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null);\\r\\n    /**\\r\\n     * Sets a new value for the form control.\\r\\n     *\\r\\n     * @param value The new value for the control.\\r\\n     * @param options Configuration options that determine how the control propagates changes\\r\\n     * and emits events when the value changes.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     *\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\\r\\n     * false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control value is updated.\\r\\n     * When false, no events are emitted.\\r\\n     * * `emitModelToViewChange`: When true or not supplied  (the default), each change triggers an\\r\\n     * `onChange` event to\\r\\n     * update the view.\\r\\n     * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\\r\\n     * `ngModelChange`\\r\\n     * event to update the model.\\r\\n     *\\r\\n     */\\r\\n    setValue(value: any, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n        emitModelToViewChange?: boolean;\\r\\n        emitViewToModelChange?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Patches the value of a control.\\r\\n     *\\r\\n     * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\\r\\n     * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\\r\\n     * `FormArrays`, where it does behave differently.\\r\\n     *\\r\\n     * @see `setValue` for options\\r\\n     */\\r\\n    patchValue(value: any, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n        emitModelToViewChange?: boolean;\\r\\n        emitViewToModelChange?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Resets the form control, marking it `pristine` and `untouched`, and setting\\r\\n     * the value to null.\\r\\n     *\\r\\n     * @param formState Resets the control with an initial value,\\r\\n     * or an object that defines the initial value and disabled state.\\r\\n     *\\r\\n     * @param options Configuration options that determine how the control propagates changes\\r\\n     * and emits events after the value changes.\\r\\n     *\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\\r\\n     * false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control is reset.\\r\\n     * When false, no events are emitted.\\r\\n     *\\r\\n     */\\r\\n    reset(formState?: any, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Register a listener for change events.\\r\\n     *\\r\\n     * @param fn The method that is called when the value changes\\r\\n     */\\r\\n    registerOnChange(fn: Function): void;\\r\\n    /**\\r\\n     * Register a listener for disabled events.\\r\\n     *\\r\\n     * @param fn The method that is called when the disabled status changes.\\r\\n     */\\r\\n    registerOnDisabledChange(fn: (isDisabled: boolean) => void): void;\\r\\n    private _applyFormState;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * * Syncs a standalone `FormControl` instance to a form control element.\\r\\n *\\r\\n * @see [Reactive Forms Guide](guide/reactive-forms)\\r\\n * @see `FormControl`\\r\\n * @see `AbstractControl`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Registering a single form control\\r\\n *\\r\\n * The following examples shows how to register a standalone control and set its value.\\r\\n *\\r\\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\\r\\n *\\r\\n * ### Use with ngModel\\r\\n *\\r\\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\\r\\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\\r\\n *\\r\\n * Now deprecated:\\r\\n *\\r\\n * ```html\\r\\n * <input [formControl]=\\\"control\\\" [(ngModel)]=\\\"value\\\">\\r\\n * ```\\r\\n *\\r\\n * ```ts\\r\\n * this.value = 'some value';\\r\\n * ```\\r\\n *\\r\\n * This has been deprecated for a few reasons. First, developers have found this pattern\\r\\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\\r\\n * an input/output property named `ngModel` on the reactive form directive that simply\\r\\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\\r\\n * and intercepting value events. However, some of `ngModel`'s other features - like\\r\\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\\r\\n * which has understandably caused some confusion.\\r\\n *\\r\\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\\r\\n * we generally don't recommend because it doesn't take advantage of the full benefits of\\r\\n * either strategy. Setting the value in the template violates the template-agnostic\\r\\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\\r\\n * the class removes the convenience of defining forms in the template.\\r\\n *\\r\\n * To update your code before v7, you'll want to decide whether to stick with reactive form\\r\\n * directives (and get/set values using reactive forms patterns) or switch over to\\r\\n * template-driven directives.\\r\\n *\\r\\n * After (choice 1 - use reactive forms):\\r\\n *\\r\\n * ```html\\r\\n * <input [formControl]=\\\"control\\\">\\r\\n * ```\\r\\n *\\r\\n * ```ts\\r\\n * this.control.setValue('some value');\\r\\n * ```\\r\\n *\\r\\n * After (choice 2 - use template-driven forms):\\r\\n *\\r\\n * ```html\\r\\n * <input [(ngModel)]=\\\"value\\\">\\r\\n * ```\\r\\n *\\r\\n * ```ts\\r\\n * this.value = 'some value';\\r\\n * ```\\r\\n *\\r\\n * By default, when you use this pattern, you will see a deprecation warning once in dev\\r\\n * mode. You can choose to silence this warning by providing a config for\\r\\n * `ReactiveFormsModule` at import time:\\r\\n *\\r\\n * ```ts\\r\\n * imports: [\\r\\n *   ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\\r\\n * ]\\r\\n * ```\\r\\n *\\r\\n * Alternatively, you can choose to surface a separate warning for each instance of this\\r\\n * pattern with a config value of `\\\"always\\\"`. This may help to track down where in the code\\r\\n * the pattern is being used as the code is being updated.\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormControlDirective extends NgControl implements OnChanges {\\r\\n    private _ngModelWarningConfig;\\r\\n    /**\\r\\n     * @description\\r\\n     * Internal reference to the view model value.\\r\\n     */\\r\\n    viewModel: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the `FormControl` instance bound to the directive.\\r\\n     */\\r\\n    form: FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Triggers a warning that this input should not be used with reactive forms.\\r\\n     */\\r\\n    isDisabled: boolean;\\r\\n    /** @deprecated as of v6 */\\r\\n    model: any;\\r\\n    /** @deprecated as of v6 */\\r\\n    update: EventEmitter<any>;\\r\\n    constructor(validators: Array<Validator | ValidatorFn>, asyncValidators: Array<AsyncValidator | AsyncValidatorFn>, valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null);\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use\\r\\n     * only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array that represents the path from the top-level form to this control.\\r\\n     * Each index is the string name of the control on that level.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * Synchronous validator function composed of all the synchronous validators\\r\\n     * registered with this directive.\\r\\n     */\\r\\n    readonly validator: ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Async validator function composed of all the async validators registered with this\\r\\n     * directive.\\r\\n     */\\r\\n    readonly asyncValidator: AsyncValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The `FormControl` bound to this directive.\\r\\n     */\\r\\n    readonly control: FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Sets the new value for the view model and emits an `ngModelChange` event.\\r\\n     *\\r\\n     * @param newValue The new value for the view model.\\r\\n     */\\r\\n    viewToModelUpdate(newValue: any): void;\\r\\n    private _isControlChanged;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FormControlDirective>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<FormControlDirective, \\\"[formControl]\\\", [\\\"ngForm\\\"], { 'isDisabled': \\\"disabled\\\", 'form': \\\"formControl\\\", 'model': \\\"ngModel\\\" }, { 'update': \\\"ngModelChange\\\" }, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\\r\\n * element by name.\\r\\n *\\r\\n * @see [Reactive Forms Guide](guide/reactive-forms)\\r\\n * @see `FormControl`\\r\\n * @see `AbstractControl`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Register `FormControl` within a group\\r\\n *\\r\\n * The following example shows how to register multiple form controls within a form group\\r\\n * and set their value.\\r\\n *\\r\\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\\r\\n *\\r\\n * To see `formControlName` examples with different form control types, see:\\r\\n *\\r\\n * * Radio buttons: `RadioControlValueAccessor`\\r\\n * * Selects: `SelectControlValueAccessor`\\r\\n *\\r\\n * ### Use with ngModel\\r\\n *\\r\\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\\r\\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\\r\\n *\\r\\n * Now deprecated:\\r\\n *\\r\\n * ```html\\r\\n * <form [formGroup]=\\\"form\\\">\\r\\n *   <input formControlName=\\\"first\\\" [(ngModel)]=\\\"value\\\">\\r\\n * </form>\\r\\n * ```\\r\\n *\\r\\n * ```ts\\r\\n * this.value = 'some value';\\r\\n * ```\\r\\n *\\r\\n * This has been deprecated for a few reasons. First, developers have found this pattern\\r\\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\\r\\n * an input/output property named `ngModel` on the reactive form directive that simply\\r\\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\\r\\n * and intercepting value events. However, some of `ngModel`'s other features - like\\r\\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\\r\\n * which has understandably caused some confusion.\\r\\n *\\r\\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\\r\\n * we generally don't recommend because it doesn't take advantage of the full benefits of\\r\\n * either strategy. Setting the value in the template violates the template-agnostic\\r\\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\\r\\n * the class removes the convenience of defining forms in the template.\\r\\n *\\r\\n * To update your code before v7, you'll want to decide whether to stick with reactive form\\r\\n * directives (and get/set values using reactive forms patterns) or switch over to\\r\\n * template-driven directives.\\r\\n *\\r\\n * After (choice 1 - use reactive forms):\\r\\n *\\r\\n * ```html\\r\\n * <form [formGroup]=\\\"form\\\">\\r\\n *   <input formControlName=\\\"first\\\">\\r\\n * </form>\\r\\n * ```\\r\\n *\\r\\n * ```ts\\r\\n * this.form.get('first').setValue('some value');\\r\\n * ```\\r\\n *\\r\\n * After (choice 2 - use template-driven forms):\\r\\n *\\r\\n * ```html\\r\\n * <input [(ngModel)]=\\\"value\\\">\\r\\n * ```\\r\\n *\\r\\n * ```ts\\r\\n * this.value = 'some value';\\r\\n * ```\\r\\n *\\r\\n * By default, when you use this pattern, you will see a deprecation warning once in dev\\r\\n * mode. You can choose to silence this warning by providing a config for\\r\\n * `ReactiveFormsModule` at import time:\\r\\n *\\r\\n * ```ts\\r\\n * imports: [\\r\\n *   ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'})\\r\\n * ]\\r\\n * ```\\r\\n *\\r\\n * Alternatively, you can choose to surface a separate warning for each instance of this\\r\\n * pattern with a config value of `\\\"always\\\"`. This may help to track down where in the code\\r\\n * the pattern is being used as the code is being updated.\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormControlName extends NgControl implements OnChanges, OnDestroy {\\r\\n    private _ngModelWarningConfig;\\r\\n    private _added;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the `FormControl` instance bound to the directive.\\r\\n     */\\r\\n    readonly control: FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name of the `FormControl` bound to the directive. The name corresponds\\r\\n     * to a key in the parent `FormGroup` or `FormArray`.\\r\\n     * Accepts a name as a string or a number.\\r\\n     * The name in the form of a string is useful for individual forms,\\r\\n     * while the numerical form allows for form controls to be bound\\r\\n     * to indices when iterating over controls in a `FormArray`.\\r\\n     */\\r\\n    name: string | number | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Triggers a warning that this input should not be used with reactive forms.\\r\\n     */\\r\\n    isDisabled: boolean;\\r\\n    /** @deprecated as of v6 */\\r\\n    model: any;\\r\\n    /** @deprecated as of v6 */\\r\\n    update: EventEmitter<any>;\\r\\n    constructor(parent: ControlContainer, validators: Array<Validator | ValidatorFn>, asyncValidators: Array<AsyncValidator | AsyncValidatorFn>, valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null);\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Lifecycle method called before the directive's instance is destroyed. For internal use only.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Sets the new value for the view model and emits an `ngModelChange` event.\\r\\n     *\\r\\n     * @param newValue The new value for the view model.\\r\\n     */\\r\\n    viewToModelUpdate(newValue: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array that represents the path from the top-level form to this control.\\r\\n     * Each index is the string name of the control on that level.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * The top-level directive for this group if present, otherwise null.\\r\\n     */\\r\\n    readonly formDirective: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Synchronous validator function composed of all the synchronous validators\\r\\n     * registered with this directive.\\r\\n     */\\r\\n    readonly validator: ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Async validator function composed of all the async validators registered with this\\r\\n     * directive.\\r\\n     */\\r\\n    readonly asyncValidator: AsyncValidatorFn;\\r\\n    private _checkParentType;\\r\\n    private _setUpControl;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FormControlName>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<FormControlName, \\\"[formControlName]\\\", never, { 'isDisabled': \\\"disabled\\\", 'name': \\\"formControlName\\\", 'model': \\\"ngModel\\\" }, { 'update': \\\"ngModelChange\\\" }, never>;\\n}\\r\\n\\r\\n/**\\r\\n * Tracks the value and validity state of a group of `FormControl` instances.\\r\\n *\\r\\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\\r\\n * with each control name as the key.  It calculates its status by reducing the status values\\r\\n * of its children. For example, if one of the controls in a group is invalid, the entire\\r\\n * group becomes invalid.\\r\\n *\\r\\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\\r\\n * along with `FormControl` and `FormArray`.\\r\\n *\\r\\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\\r\\n * argument. The key for each child registers the name for the control.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Create a form group with 2 controls\\r\\n *\\r\\n * ```\\r\\n * const form = new FormGroup({\\r\\n *   first: new FormControl('Nancy', Validators.minLength(2)),\\r\\n *   last: new FormControl('Drew'),\\r\\n * });\\r\\n *\\r\\n * console.log(form.value);   // {first: 'Nancy', last; 'Drew'}\\r\\n * console.log(form.status);  // 'VALID'\\r\\n * ```\\r\\n *\\r\\n * ### Create a form group with a group-level validator\\r\\n *\\r\\n * You include group-level validators as the second arg, or group-level async\\r\\n * validators as the third arg. These come in handy when you want to perform validation\\r\\n * that considers the value of more than one child control.\\r\\n *\\r\\n * ```\\r\\n * const form = new FormGroup({\\r\\n *   password: new FormControl('', Validators.minLength(2)),\\r\\n *   passwordConfirm: new FormControl('', Validators.minLength(2)),\\r\\n * }, passwordMatchValidator);\\r\\n *\\r\\n *\\r\\n * function passwordMatchValidator(g: FormGroup) {\\r\\n *    return g.get('password').value === g.get('passwordConfirm').value\\r\\n *       ? null : {'mismatch': true};\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * Like `FormControl` instances, you choose to pass in\\r\\n * validators and async validators as part of an options object.\\r\\n *\\r\\n * ```\\r\\n * const form = new FormGroup({\\r\\n *   password: new FormControl('')\\r\\n *   passwordConfirm: new FormControl('')\\r\\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\\r\\n * ```\\r\\n *\\r\\n * ### Set the updateOn property for all controls in a form group\\r\\n *\\r\\n * The options object is used to set a default value for each child\\r\\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\\r\\n * group level, all child controls default to 'blur', unless the child\\r\\n * has explicitly specified a different `updateOn` value.\\r\\n *\\r\\n * ```ts\\r\\n * const c = new FormGroup({\\r\\n *   one: new FormControl()\\r\\n * }, { updateOn: 'blur' });\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormGroup extends AbstractControl {\\r\\n    controls: {\\r\\n        [key: string]: AbstractControl;\\r\\n    };\\r\\n    /**\\r\\n    * Creates a new `FormGroup` instance.\\r\\n    *\\r\\n    * @param controls A collection of child controls. The key for each child is the name\\r\\n    * under which it is registered.\\r\\n    *\\r\\n    * @param validatorOrOpts A synchronous validator function, or an array of\\r\\n    * such functions, or an `AbstractControlOptions` object that contains validation functions\\r\\n    * and a validation trigger.\\r\\n    *\\r\\n    * @param asyncValidator A single async validator or array of async validator functions\\r\\n    *\\r\\n    */\\r\\n    constructor(controls: {\\r\\n        [key: string]: AbstractControl;\\r\\n    }, validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null);\\r\\n    /**\\r\\n     * Registers a control with the group's list of controls.\\r\\n     *\\r\\n     * This method does not update the value or validity of the control.\\r\\n     * Use {@link FormGroup#addControl addControl} instead.\\r\\n     *\\r\\n     * @param name The control name to register in the collection\\r\\n     * @param control Provides the control for the given name\\r\\n     */\\r\\n    registerControl(name: string, control: AbstractControl): AbstractControl;\\r\\n    /**\\r\\n     * Add a control to this group.\\r\\n     *\\r\\n     * This method also updates the value and validity of the control.\\r\\n     *\\r\\n     * @param name The control name to add to the collection\\r\\n     * @param control Provides the control for the given name\\r\\n     */\\r\\n    addControl(name: string, control: AbstractControl): void;\\r\\n    /**\\r\\n     * Remove a control from this group.\\r\\n     *\\r\\n     * @param name The control name to remove from the collection\\r\\n     */\\r\\n    removeControl(name: string): void;\\r\\n    /**\\r\\n     * Replace an existing control.\\r\\n     *\\r\\n     * @param name The control name to replace in the collection\\r\\n     * @param control Provides the control for the given name\\r\\n     */\\r\\n    setControl(name: string, control: AbstractControl): void;\\r\\n    /**\\r\\n     * Check whether there is an enabled control with the given name in the group.\\r\\n     *\\r\\n     * Reports false for disabled controls. If you'd like to check for existence in the group\\r\\n     * only, use {@link AbstractControl#get get} instead.\\r\\n     *\\r\\n     * @param controlName The control name to check for existence in the collection\\r\\n     *\\r\\n     * @returns false for disabled controls, true otherwise.\\r\\n     */\\r\\n    contains(controlName: string): boolean;\\r\\n    /**\\r\\n     * Sets the value of the `FormGroup`. It accepts an object that matches\\r\\n     * the structure of the group, with control names as keys.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Set the complete value for the form group\\r\\n     *\\r\\n     * ```\\r\\n     * const form = new FormGroup({\\r\\n     *   first: new FormControl(),\\r\\n     *   last: new FormControl()\\r\\n     * });\\r\\n     *\\r\\n     * console.log(form.value);   // {first: null, last: null}\\r\\n     *\\r\\n     * form.setValue({first: 'Nancy', last: 'Drew'});\\r\\n     * console.log(form.value);   // {first: 'Nancy', last: 'Drew'}\\r\\n     * ```\\r\\n     *\\r\\n     * @throws When strict checks fail, such as setting the value of a control\\r\\n     * that doesn't exist or if you excluding the value of a control.\\r\\n     *\\r\\n     * @param value The new value for the control that matches the structure of the group.\\r\\n     * @param options Configuration options that determine how the control propagates changes\\r\\n     * and emits events after the value changes.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     *\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\\r\\n     * false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control value is updated.\\r\\n     * When false, no events are emitted.\\r\\n     */\\r\\n    setValue(value: {\\r\\n        [key: string]: any;\\r\\n    }, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Patches the value of the `FormGroup`. It accepts an object with control\\r\\n     * names as keys, and does its best to match the values to the correct controls\\r\\n     * in the group.\\r\\n     *\\r\\n     * It accepts both super-sets and sub-sets of the group without throwing an error.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     * ### Patch the value for a form group\\r\\n     *\\r\\n     * ```\\r\\n     * const form = new FormGroup({\\r\\n     *    first: new FormControl(),\\r\\n     *    last: new FormControl()\\r\\n     * });\\r\\n     * console.log(form.value);   // {first: null, last: null}\\r\\n     *\\r\\n     * form.patchValue({first: 'Nancy'});\\r\\n     * console.log(form.value);   // {first: 'Nancy', last: null}\\r\\n     * ```\\r\\n     *\\r\\n     * @param value The object that matches the structure of the group.\\r\\n     * @param options Configuration options that determine how the control propagates changes and\\r\\n     * emits events after the value is patched.\\r\\n     * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\\r\\n     * true.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control value is updated.\\r\\n     * When false, no events are emitted.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     */\\r\\n    patchValue(value: {\\r\\n        [key: string]: any;\\r\\n    }, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\\r\\n     * the value of all descendants to null.\\r\\n     *\\r\\n     * You reset to a specific form state by passing in a map of states\\r\\n     * that matches the structure of your form, with control names as keys. The state\\r\\n     * is a standalone value or a form state object with both a value and a disabled\\r\\n     * status.\\r\\n     *\\r\\n     * @param value Resets the control with an initial value,\\r\\n     * or an object that defines the initial value and disabled state.\\r\\n     *\\r\\n     * @param options Configuration options that determine how the control propagates changes\\r\\n     * and emits events when the group is reset.\\r\\n     * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\\r\\n     * false.\\r\\n     * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\\r\\n     * `valueChanges`\\r\\n     * observables emit events with the latest status and value when the control is reset.\\r\\n     * When false, no events are emitted.\\r\\n     * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\\r\\n     * updateValueAndValidity} method.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Reset the form group values\\r\\n     *\\r\\n     * ```ts\\r\\n     * const form = new FormGroup({\\r\\n     *   first: new FormControl('first name'),\\r\\n     *   last: new FormControl('last name')\\r\\n     * });\\r\\n     *\\r\\n     * console.log(form.value);  // {first: 'first name', last: 'last name'}\\r\\n     *\\r\\n     * form.reset({ first: 'name', last: 'last name' });\\r\\n     *\\r\\n     * console.log(form.value);  // {first: 'name', last: 'last name'}\\r\\n     * ```\\r\\n     *\\r\\n     * ### Reset the form group values and disabled status\\r\\n     *\\r\\n     * ```\\r\\n     * const form = new FormGroup({\\r\\n     *   first: new FormControl('first name'),\\r\\n     *   last: new FormControl('last name')\\r\\n     * });\\r\\n     *\\r\\n     * form.reset({\\r\\n     *   first: {value: 'name', disabled: true},\\r\\n     *   last: 'last'\\r\\n     * });\\r\\n     *\\r\\n     * console.log(this.form.value);  // {first: 'name', last: 'last name'}\\r\\n     * console.log(this.form.get('first').status);  // 'DISABLED'\\r\\n     * ```\\r\\n     */\\r\\n    reset(value?: any, options?: {\\r\\n        onlySelf?: boolean;\\r\\n        emitEvent?: boolean;\\r\\n    }): void;\\r\\n    /**\\r\\n     * The aggregate value of the `FormGroup`, including any disabled controls.\\r\\n     *\\r\\n     * Retrieves all values regardless of disabled status.\\r\\n     * The `value` property is the best way to get the value of the group, because\\r\\n     * it excludes disabled controls in the `FormGroup`.\\r\\n     */\\r\\n    getRawValue(): any;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Binds an existing `FormGroup` to a DOM element.\\r\\n *\\r\\n * This directive accepts an existing `FormGroup` instance. It will then use this\\r\\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\\r\\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\\r\\n * and `FormArrayName` directives.\\r\\n *\\r\\n * @see [Reactive Forms Guide](guide/reactive-forms)\\r\\n * @see `AbstractControl`\\r\\n *\\r\\n * ### Register Form Group\\r\\n *\\r\\n * The following example registers a `FormGroup` with first name and last name controls,\\r\\n * and listens for the *ngSubmit* event when the button is clicked.\\r\\n *\\r\\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormGroupDirective extends ControlContainer implements Form, OnChanges {\\r\\n    private _validators;\\r\\n    private _asyncValidators;\\r\\n    /**\\r\\n     * @description\\r\\n     * Reports whether the form submission has been triggered.\\r\\n     */\\r\\n    readonly submitted: boolean;\\r\\n    private _oldForm;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the list of added `FormControlName` instances\\r\\n     */\\r\\n    directives: FormControlName[];\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the `FormGroup` bound to this directive.\\r\\n     */\\r\\n    form: FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * Emits an event when the form submission has been triggered.\\r\\n     */\\r\\n    ngSubmit: EventEmitter<any>;\\r\\n    constructor(_validators: any[], _asyncValidators: any[]);\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns this directive's instance.\\r\\n     */\\r\\n    readonly formDirective: Form;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns the `FormGroup` bound to this directive.\\r\\n     */\\r\\n    readonly control: FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array representing the path to this group. Because this directive\\r\\n     * always lives at the top level of a form, it always an empty array.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that sets up the control directive in this group, re-calculates its value\\r\\n     * and validity, and adds the instance to the internal list of directives.\\r\\n     *\\r\\n     * @param dir The `FormControlName` directive instance.\\r\\n     */\\r\\n    addControl(dir: FormControlName): FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Retrieves the `FormControl` instance from the provided `FormControlName` directive\\r\\n     *\\r\\n     * @param dir The `FormControlName` directive instance.\\r\\n     */\\r\\n    getControl(dir: FormControlName): FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Removes the `FormControlName` instance from the internal list of directives\\r\\n     *\\r\\n     * @param dir The `FormControlName` directive instance.\\r\\n     */\\r\\n    removeControl(dir: FormControlName): void;\\r\\n    /**\\r\\n     * Adds a new `FormGroupName` directive instance to the form.\\r\\n     *\\r\\n     * @param dir The `FormGroupName` directive instance.\\r\\n     */\\r\\n    addFormGroup(dir: FormGroupName): void;\\r\\n    /**\\r\\n     * No-op method to remove the form group.\\r\\n     *\\r\\n     * @param dir The `FormGroupName` directive instance.\\r\\n     */\\r\\n    removeFormGroup(dir: FormGroupName): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\\r\\n     *\\r\\n     * @param dir The `FormGroupName` directive instance.\\r\\n     */\\r\\n    getFormGroup(dir: FormGroupName): FormGroup;\\r\\n    /**\\r\\n     * Adds a new `FormArrayName` directive instance to the form.\\r\\n     *\\r\\n     * @param dir The `FormArrayName` directive instance.\\r\\n     */\\r\\n    addFormArray(dir: FormArrayName): void;\\r\\n    /**\\r\\n     * No-op method to remove the form array.\\r\\n     *\\r\\n     * @param dir The `FormArrayName` directive instance.\\r\\n     */\\r\\n    removeFormArray(dir: FormArrayName): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\\r\\n     *\\r\\n     * @param dir The `FormArrayName` directive instance.\\r\\n     */\\r\\n    getFormArray(dir: FormArrayName): FormArray;\\r\\n    /**\\r\\n     * Sets the new value for the provided `FormControlName` directive.\\r\\n     *\\r\\n     * @param dir The `FormControlName` directive instance.\\r\\n     * @param value The new value for the directive's control.\\r\\n     */\\r\\n    updateModel(dir: FormControlName, value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method called with the \\\"submit\\\" event is triggered on the form.\\r\\n     * Triggers the `ngSubmit` emitter to emit the \\\"submit\\\" event as its payload.\\r\\n     *\\r\\n     * @param $event The \\\"submit\\\" event object\\r\\n     */\\r\\n    onSubmit($event: Event): boolean;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method called when the \\\"reset\\\" event is triggered on the form.\\r\\n     */\\r\\n    onReset(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Resets the form to an initial value and resets its submitted status.\\r\\n     *\\r\\n     * @param value The new value for the form.\\r\\n     */\\r\\n    resetForm(value?: any): void;\\r\\n    private _updateRegistrations;\\r\\n    private _updateValidators;\\r\\n    private _checkFormPresent;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FormGroupDirective>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<FormGroupDirective, \\\"[formGroup]\\\", [\\\"ngForm\\\"], { 'form': \\\"formGroup\\\" }, { 'ngSubmit': \\\"ngSubmit\\\" }, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Syncs a nested `FormGroup` to a DOM element.\\r\\n *\\r\\n * This directive can only be used with a parent `FormGroupDirective`.\\r\\n *\\r\\n * It accepts the string name of the nested `FormGroup` to link, and\\r\\n * looks for a `FormGroup` registered with that name in the parent\\r\\n * `FormGroup` instance you passed into `FormGroupDirective`.\\r\\n *\\r\\n * Use nested form groups to validate a sub-group of a\\r\\n * form separately from the rest or to group the values of certain\\r\\n * controls into their own nested object.\\r\\n *\\r\\n * @see [Reactive Forms Guide](guide/reactive-forms)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Access the group by name\\r\\n *\\r\\n * The following example uses the {@link AbstractControl#get get} method to access the\\r\\n * associated `FormGroup`\\r\\n *\\r\\n * ```ts\\r\\n *   this.form.get('name');\\r\\n * ```\\r\\n *\\r\\n * ### Access individual controls in the group\\r\\n *\\r\\n * The following example uses the {@link AbstractControl#get get} method to access\\r\\n * individual controls within the group using dot syntax.\\r\\n *\\r\\n * ```ts\\r\\n *   this.form.get('name.first');\\r\\n * ```\\r\\n *\\r\\n * ### Register a nested `FormGroup`.\\r\\n *\\r\\n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\\r\\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\\r\\n *\\r\\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\\r\\n     * to a key in the parent `FormGroup` or `FormArray`.\\r\\n     * Accepts a name as a string or a number.\\r\\n     * The name in the form of a string is useful for individual forms,\\r\\n     * while the numerical form allows for form groups to be bound\\r\\n     * to indices when iterating over groups in a `FormArray`.\\r\\n     */\\r\\n    name: string | number | null;\\r\\n    constructor(parent: ControlContainer, validators: any[], asyncValidators: any[]);\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<FormGroupName>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<FormGroupName, \\\"[formGroupName]\\\", never, { 'name': \\\"formGroupName\\\" }, {}, never>;\\n}\\r\\n\\r\\ndeclare type FormHooks = 'change' | 'blur' | 'submit';\\r\\n\\r\\n/**\\r\\n * Exports the required providers and directives for template-driven forms,\\r\\n * making them available for import by NgModules that import this module.\\r\\n *\\r\\n * @see [Forms Guide](/guide/forms)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class FormsModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<FormsModule, [typeof NgModel, typeof NgModelGroup, typeof NgForm], never, [typeof ɵInternalFormsSharedModule, typeof NgModel, typeof NgModelGroup, typeof NgForm]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<FormsModule>;\\n}\\r\\n\\r\\n/**\\r\\n * A directive that adds max length validation to controls marked with the\\r\\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\\r\\n *\\r\\n * @see [Form Validation](guide/form-validation)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Adding a maximum length validator\\r\\n *\\r\\n * The following example shows how to add a maximum length validator to an input attached to an\\r\\n * ngModel binding.\\r\\n *\\r\\n * ```html\\r\\n * <input name=\\\"firstName\\\" ngModel maxlength=\\\"25\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class MaxLengthValidator implements Validator, OnChanges {\\r\\n    private _validator;\\r\\n    private _onChange;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks changes to the the maximum length bound to this directive.\\r\\n     */\\r\\n    maxlength: string;\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use\\r\\n     * only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that validates whether the value exceeds\\r\\n     * the maximum length requirement.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function to call when the validator inputs change.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnValidatorChange(fn: () => void): void;\\r\\n    private _createValidator;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MaxLengthValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MaxLengthValidator, \\\"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]\\\", never, { 'maxlength': \\\"maxlength\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * A directive that adds minimum length validation to controls marked with the\\r\\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\\r\\n *\\r\\n * @see [Form Validation](guide/form-validation)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Adding a minimum length validator\\r\\n *\\r\\n * The following example shows how to add a minimum length validator to an input attached to an\\r\\n * ngModel binding.\\r\\n *\\r\\n * ```html\\r\\n * <input name=\\\"firstName\\\" ngModel minlength=\\\"4\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class MinLengthValidator implements Validator, OnChanges {\\r\\n    private _validator;\\r\\n    private _onChange;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks changes to the the minimum length bound to this directive.\\r\\n     */\\r\\n    minlength: string;\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use\\r\\n     * only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that validates whether the value meets a minimum length\\r\\n     * requirement. Returns the validation result if enabled, otherwise null.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function to call when the validator inputs change.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnValidatorChange(fn: () => void): void;\\r\\n    private _createValidator;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<MinLengthValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<MinLengthValidator, \\\"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]\\\", never, { 'minlength': \\\"minlength\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\\r\\n *\\r\\n * @see `NG_VALIDATORS`\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const NG_ASYNC_VALIDATORS: InjectionToken<(Function | Validator)[]>;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\\r\\n *\\r\\n * @see `NG_ASYNC_VALIDATORS`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Providing a custom validator\\r\\n *\\r\\n * The following example registers a custom validator directive. Adding the validator to the\\r\\n * existing collection of validators requires the `multi: true` option.\\r\\n *\\r\\n * ```typescript\\r\\n * @Directive({\\r\\n *   selector: '[customValidator]',\\r\\n *   providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\\r\\n * })\\r\\n * class CustomValidatorDirective implements Validator {\\r\\n *   validate(control: AbstractControl): ValidationErrors | null {\\r\\n *     return { 'custom': true };\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const NG_VALIDATORS: InjectionToken<(Function | Validator)[]>;\\r\\n\\r\\n/**\\r\\n * Used to provide a `ControlValueAccessor` for form controls.\\r\\n *\\r\\n * See `DefaultValueAccessor` for how to implement one.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const NG_VALUE_ACCESSOR: InjectionToken<ControlValueAccessor>;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\\r\\n * object to a DOM element.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare abstract class NgControl extends AbstractControlDirective {\\r\\n    /**\\r\\n     * @description\\r\\n     * The name for the control\\r\\n     */\\r\\n    name: string | number | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The value accessor for the control\\r\\n     */\\r\\n    valueAccessor: ControlValueAccessor | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered synchronous validator function for the control\\r\\n     *\\r\\n     * @throws An exception that this method is not implemented\\r\\n     */\\r\\n    readonly validator: ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered async validator function for the control\\r\\n     *\\r\\n     * @throws An exception that this method is not implemented\\r\\n     */\\r\\n    readonly asyncValidator: AsyncValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * The callback method to update the model from the view when requested\\r\\n     *\\r\\n     * @param newValue The new value for the view\\r\\n     */\\r\\n    abstract viewToModelUpdate(newValue: any): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Directive automatically applied to Angular form controls that sets CSS classes\\r\\n * based on control status.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### CSS classes applied\\r\\n *\\r\\n * The following classes are applied as the properties become true:\\r\\n *\\r\\n * * ng-valid\\r\\n * * ng-invalid\\r\\n * * ng-pending\\r\\n * * ng-pristine\\r\\n * * ng-dirty\\r\\n * * ng-untouched\\r\\n * * ng-touched\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgControlStatus extends ɵangular_packages_forms_forms_g {\\r\\n    constructor(cd: NgControl);\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NgControlStatus>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NgControlStatus, \\\"[formControlName],[ngModel],[formControl]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Directive automatically applied to Angular form groups that sets CSS classes\\r\\n * based on control status (valid/invalid/dirty/etc).\\r\\n *\\r\\n * @see `NgControlStatus`\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgControlStatusGroup extends ɵangular_packages_forms_forms_g {\\r\\n    constructor(cd: ControlContainer);\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NgControlStatusGroup>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NgControlStatusGroup, \\\"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Creates a top-level `FormGroup` instance and binds it to a form\\r\\n * to track aggregate form value and validation status.\\r\\n *\\r\\n * As soon as you import the `FormsModule`, this directive becomes active by default on\\r\\n * all `<form>` tags.  You don't need to add a special selector.\\r\\n *\\r\\n * You optionally export the directive into a local template variable using `ngForm` as the key\\r\\n * (ex: `#myForm=\\\"ngForm\\\"`). This is optional, but useful.  Many properties from the underlying\\r\\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\\r\\n * gives you access to the aggregate value and validity status of the form, as well as\\r\\n * user interaction properties like `dirty` and `touched`.\\r\\n *\\r\\n * To register child controls with the form, use `NgModel` with a `name`\\r\\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\\r\\n *\\r\\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\\r\\n * triggered a form submission. The `ngSubmit` event emits the original form\\r\\n * submission event.\\r\\n *\\r\\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\\r\\n * To import the `FormsModule` but skip its usage in some forms,\\r\\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\\r\\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\\r\\n * unnecessary because the `<form>` tags are inert. In that case, you would\\r\\n * refrain from using the `formGroup` directive.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Migrating from deprecated ngForm selector\\r\\n *\\r\\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\\r\\n * in Angular v9.\\r\\n *\\r\\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\\r\\n * as element selectors are typically written in kebab-case.\\r\\n *\\r\\n * Now deprecated:\\r\\n * ```html\\r\\n * <ngForm #myForm=\\\"ngForm\\\">\\r\\n * ```\\r\\n *\\r\\n * After:\\r\\n * ```html\\r\\n * <ng-form #myForm=\\\"ngForm\\\">\\r\\n * ```\\r\\n *\\r\\n * ### Listening for form submission\\r\\n *\\r\\n * The following example shows how to capture the form values from the \\\"ngSubmit\\\" event.\\r\\n *\\r\\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\\r\\n *\\r\\n * ### Setting the update options\\r\\n *\\r\\n * The following example shows you how to change the \\\"updateOn\\\" option from its default using\\r\\n * ngFormOptions.\\r\\n *\\r\\n * ```html\\r\\n * <form [ngFormOptions]=\\\"{updateOn: 'blur'}\\\">\\r\\n *    <input name=\\\"one\\\" ngModel>  <!-- this ngModel will update on blur -->\\r\\n * </form>\\r\\n * ```\\r\\n *\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgForm extends ControlContainer implements Form, AfterViewInit {\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns whether the form submission has been triggered.\\r\\n     */\\r\\n    readonly submitted: boolean;\\r\\n    private _directives;\\r\\n    /**\\r\\n     * @description\\r\\n     * The `FormGroup` instance created for this form.\\r\\n     */\\r\\n    form: FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * Event emitter for the \\\"ngSubmit\\\" event\\r\\n     */\\r\\n    ngSubmit: EventEmitter<any>;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks options for the `NgForm` instance.\\r\\n     *\\r\\n     * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\\r\\n     * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\\r\\n     * Possible values: `'change'` | `'blur'` | `'submit'`.\\r\\n     *\\r\\n     */\\r\\n    options: {\\r\\n        updateOn?: FormHooks;\\r\\n    };\\r\\n    constructor(validators: any[], asyncValidators: any[]);\\r\\n    /**\\r\\n     * @description\\r\\n     * Lifecycle method called after the view is initialized. For internal use only.\\r\\n     */\\r\\n    ngAfterViewInit(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The directive instance.\\r\\n     */\\r\\n    readonly formDirective: Form;\\r\\n    /**\\r\\n     * @description\\r\\n     * The internal `FormGroup` instance.\\r\\n     */\\r\\n    readonly control: FormGroup;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array representing the path to this group. Because this directive\\r\\n     * always lives at the top level of a form, it is always an empty array.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns a map of the controls in this group.\\r\\n     */\\r\\n    readonly controls: {\\r\\n        [key: string]: AbstractControl;\\r\\n    };\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that sets up the control directive in this group, re-calculates its value\\r\\n     * and validity, and adds the instance to the internal list of directives.\\r\\n     *\\r\\n     * @param dir The `NgModel` directive instance.\\r\\n     */\\r\\n    addControl(dir: NgModel): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Retrieves the `FormControl` instance from the provided `NgModel` directive.\\r\\n     *\\r\\n     * @param dir The `NgModel` directive instance.\\r\\n     */\\r\\n    getControl(dir: NgModel): FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Removes the `NgModel` instance from the internal list of directives\\r\\n     *\\r\\n     * @param dir The `NgModel` directive instance.\\r\\n     */\\r\\n    removeControl(dir: NgModel): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Adds a new `NgModelGroup` directive instance to the form.\\r\\n     *\\r\\n     * @param dir The `NgModelGroup` directive instance.\\r\\n     */\\r\\n    addFormGroup(dir: NgModelGroup): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Removes the `NgModelGroup` directive instance from the form.\\r\\n     *\\r\\n     * @param dir The `NgModelGroup` directive instance.\\r\\n     */\\r\\n    removeFormGroup(dir: NgModelGroup): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\\r\\n     *\\r\\n     * @param dir The `NgModelGroup` directive instance.\\r\\n     */\\r\\n    getFormGroup(dir: NgModelGroup): FormGroup;\\r\\n    /**\\r\\n     * Sets the new value for the provided `NgControl` directive.\\r\\n     *\\r\\n     * @param dir The `NgControl` directive instance.\\r\\n     * @param value The new value for the directive's control.\\r\\n     */\\r\\n    updateModel(dir: NgControl, value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Sets the value for this `FormGroup`.\\r\\n     *\\r\\n     * @param value The new value\\r\\n     */\\r\\n    setValue(value: {\\r\\n        [key: string]: any;\\r\\n    }): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method called when the \\\"submit\\\" event is triggered on the form.\\r\\n     * Triggers the `ngSubmit` emitter to emit the \\\"submit\\\" event as its payload.\\r\\n     *\\r\\n     * @param $event The \\\"submit\\\" event object\\r\\n     */\\r\\n    onSubmit($event: Event): boolean;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method called when the \\\"reset\\\" event is triggered on the form.\\r\\n     */\\r\\n    onReset(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Resets the form to an initial value and resets its submitted status.\\r\\n     *\\r\\n     * @param value The new value for the form.\\r\\n     */\\r\\n    resetForm(value?: any): void;\\r\\n    private _setUpdateStrategy;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NgForm>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NgForm, \\\"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]\\\", [\\\"ngForm\\\"], { 'options': \\\"ngFormOptions\\\" }, { 'ngSubmit': \\\"ngSubmit\\\" }, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Creates a `FormControl` instance from a domain model and binds it\\r\\n * to a form control element.\\r\\n *\\r\\n * The `FormControl` instance tracks the value, user interaction, and\\r\\n * validation status of the control and keeps the view synced with the model. If used\\r\\n * within a parent form, the directive also registers itself with the form as a child\\r\\n * control.\\r\\n *\\r\\n * This directive is used by itself or as part of a larger form. Use the\\r\\n * `ngModel` selector to activate it.\\r\\n *\\r\\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\\r\\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\\r\\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\\r\\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\\r\\n * the domain model in your class.\\r\\n *\\r\\n * To inspect the properties of the associated `FormControl` (like validity state),\\r\\n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\\\"ngModel\\\"`).\\r\\n * You then access the control using the directive's `control` property,\\r\\n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access.\\r\\n * See a full list of properties directly available in `AbstractControlDirective`.\\r\\n *\\r\\n * @see `RadioControlValueAccessor`\\r\\n * @see `SelectControlValueAccessor`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using ngModel on a standalone control\\r\\n *\\r\\n * The following examples show a simple standalone control using `ngModel`:\\r\\n *\\r\\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\\r\\n *\\r\\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\\r\\n * so that the control can be registered with the parent form under that name.\\r\\n *\\r\\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding,\\r\\n * as the parent form syncs the value for you. You access its properties by exporting it into a\\r\\n * local template variable using `ngForm` such as (`#f=\\\"ngForm\\\"`). Use the variable where\\r\\n * needed on form submission.\\r\\n *\\r\\n * If you do need to populate initial values into your form, using a one-way binding for\\r\\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\\r\\n * than the domain model's value on submit.\\r\\n *\\r\\n * ### Using ngModel within a form\\r\\n *\\r\\n * The following example shows controls using `ngModel` within a form:\\r\\n *\\r\\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\\r\\n *\\r\\n * ### Using a standalone ngModel within a group\\r\\n *\\r\\n * The following example shows you how to use a standalone ngModel control\\r\\n * within a form. This controls the display of the form, but doesn't contain form data.\\r\\n *\\r\\n * ```html\\r\\n * <form>\\r\\n *   <input name=\\\"login\\\" ngModel placeholder=\\\"Login\\\">\\r\\n *   <input type=\\\"checkbox\\\" ngModel [ngModelOptions]=\\\"{standalone: true}\\\"> Show more options?\\r\\n * </form>\\r\\n * <!-- form value: {login: ''} -->\\r\\n * ```\\r\\n *\\r\\n * ### Setting the ngModel name attribute through options\\r\\n *\\r\\n * The following example shows you an alternate way to set the name attribute. The name attribute is used\\r\\n * within a custom form component, and the name `@Input` property serves a different purpose.\\r\\n *\\r\\n * ```html\\r\\n * <form>\\r\\n *   <my-person-control name=\\\"Nancy\\\" ngModel [ngModelOptions]=\\\"{name: 'user'}\\\">\\r\\n *   </my-person-control>\\r\\n * </form>\\r\\n * <!-- form value: {user: ''} -->\\r\\n * ```\\r\\n *\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgModel extends NgControl implements OnChanges, OnDestroy {\\r\\n    readonly control: FormControl;\\r\\n    /**\\r\\n     * @description\\r\\n     * Internal reference to the view model value.\\r\\n     */\\r\\n    viewModel: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name bound to the directive. The parent form\\r\\n     * uses this name as a key to retrieve this control's value.\\r\\n     */\\r\\n    name: string;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks whether the control is disabled.\\r\\n     */\\r\\n    isDisabled: boolean;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the value bound to this directive.\\r\\n     */\\r\\n    model: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the configuration options for this `ngModel` instance.\\r\\n     *\\r\\n     * **name**: An alternative to setting the name attribute on the form control element. See\\r\\n     * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\\r\\n     * as a standalone control.\\r\\n     *\\r\\n     * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\\r\\n     * and acts as if it's not in the form. Defaults to false.\\r\\n     *\\r\\n     * **updateOn**: Defines the event upon which the form control value and validity update.\\r\\n     * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\\r\\n     *\\r\\n     */\\r\\n    options: {\\r\\n        name?: string;\\r\\n        standalone?: boolean;\\r\\n        updateOn?: FormHooks;\\r\\n    };\\r\\n    /**\\r\\n     * @description\\r\\n     * Event emitter for producing the `ngModelChange` event after\\r\\n     * the view model updates.\\r\\n     */\\r\\n    update: EventEmitter<any>;\\r\\n    constructor(parent: ControlContainer, validators: Array<Validator | ValidatorFn>, asyncValidators: Array<AsyncValidator | AsyncValidatorFn>, valueAccessors: ControlValueAccessor[]);\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use\\r\\n     * only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Lifecycle method called before the directive's instance is destroyed. For internal\\r\\n     * use only.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Returns an array that represents the path from the top-level form to this control.\\r\\n     * Each index is the string name of the control on that level.\\r\\n     */\\r\\n    readonly path: string[];\\r\\n    /**\\r\\n     * @description\\r\\n     * The top-level directive for this control if present, otherwise null.\\r\\n     */\\r\\n    readonly formDirective: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Synchronous validator function composed of all the synchronous validators\\r\\n     * registered with this directive.\\r\\n     */\\r\\n    readonly validator: ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Async validator function composed of all the async validators registered with this\\r\\n     * directive.\\r\\n     */\\r\\n    readonly asyncValidator: AsyncValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Sets the new value for the view model and emits an `ngModelChange` event.\\r\\n     *\\r\\n     * @param newValue The new value emitted by `ngModelChange`.\\r\\n     */\\r\\n    viewToModelUpdate(newValue: any): void;\\r\\n    private _setUpControl;\\r\\n    private _setUpdateStrategy;\\r\\n    private _isStandalone;\\r\\n    private _setUpStandalone;\\r\\n    private _checkForErrors;\\r\\n    private _checkParentType;\\r\\n    private _checkName;\\r\\n    private _updateValue;\\r\\n    private _updateDisabled;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NgModel>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NgModel, \\\"[ngModel]:not([formControlName]):not([formControl])\\\", [\\\"ngModel\\\"], { 'name': \\\"name\\\", 'isDisabled': \\\"disabled\\\", 'model': \\\"ngModel\\\", 'options': \\\"ngModelOptions\\\" }, { 'update': \\\"ngModelChange\\\" }, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Creates and binds a `FormGroup` instance to a DOM element.\\r\\n *\\r\\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\\r\\n *\\r\\n * Use this directive to validate a sub-group of your form separately from the\\r\\n * rest of your form, or if some values in your domain model make more sense\\r\\n * to consume together in a nested object.\\r\\n *\\r\\n * Provide a name for the sub-group and it will become the key\\r\\n * for the sub-group in the form's full value. If you need direct access, export the directive into\\r\\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\\\"ngModelGroup\\\"`).\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Consuming controls in a grouping\\r\\n *\\r\\n * The following example shows you how to combine controls together in a sub-group\\r\\n * of the form.\\r\\n *\\r\\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\\r\\n *\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\\r\\n     * to a key in the parent `NgForm`.\\r\\n     */\\r\\n    name: string;\\r\\n    constructor(parent: ControlContainer, validators: any[], asyncValidators: any[]);\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NgModelGroup>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NgModelGroup, \\\"[ngModelGroup]\\\", [\\\"ngModelGroup\\\"], { 'name': \\\"ngModelGroup\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\\r\\n *\\r\\n * @see `SelectControlValueAccessor`\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NgSelectOption implements OnDestroy {\\r\\n    private _element;\\r\\n    private _renderer;\\r\\n    private _select;\\r\\n    /**\\r\\n     * @description\\r\\n     * ID of the option element\\r\\n     */\\r\\n    id: string;\\r\\n    constructor(_element: ElementRef, _renderer: Renderer2, _select: SelectControlValueAccessor);\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the value bound to the option element. Unlike the value binding,\\r\\n     * ngValue supports binding to objects.\\r\\n     */\\r\\n    ngValue: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks simple string values bound to the option element.\\r\\n     * For objects, use the `ngValue` input binding.\\r\\n     */\\r\\n    value: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Lifecycle method called before the directive's instance is destroyed. For internal use only.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NgSelectOption>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NgSelectOption, \\\"option\\\", never, { 'ngValue': \\\"ngValue\\\", 'value': \\\"value\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\\r\\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and  `NgModel`\\r\\n * directives.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using a number input with a reactive form.\\r\\n *\\r\\n * The following example shows how to use a number input with a reactive form.\\r\\n *\\r\\n * ```ts\\r\\n * const totalCountControl = new FormControl();\\r\\n * ```\\r\\n *\\r\\n * ```\\r\\n * <input type=\\\"number\\\" [formControl]=\\\"totalCountControl\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class NumberValueAccessor implements ControlValueAccessor {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a change or input event occurs on the input\\r\\n     * element.\\r\\n     */\\r\\n    onChange: (_: any) => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef);\\r\\n    /**\\r\\n     * Sets the \\\"value\\\" property on the input element.\\r\\n     *\\r\\n     * @param value The checked value\\r\\n     */\\r\\n    writeValue(value: number): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (_: number | null) => void): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => void): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<NumberValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<NumberValueAccessor, \\\"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A directive that adds regex pattern validation to controls marked with the\\r\\n * `pattern` attribute. The regex must match the entire control value.\\r\\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\\r\\n *\\r\\n * @see [Form Validation](guide/form-validation)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Adding a pattern validator\\r\\n *\\r\\n * The following example shows how to add a pattern validator to an input attached to an\\r\\n * ngModel binding.\\r\\n *\\r\\n * ```html\\r\\n * <input name=\\\"firstName\\\" ngModel pattern=\\\"[a-zA-Z ]*\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class PatternValidator implements Validator, OnChanges {\\r\\n    private _validator;\\r\\n    private _onChange;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks changes to the pattern bound to this directive.\\r\\n     */\\r\\n    pattern: string | RegExp;\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive's inputs change. For internal use\\r\\n     * only.\\r\\n     *\\r\\n     * @param changes A object of key/value pairs for the set of changed inputs.\\r\\n     */\\r\\n    ngOnChanges(changes: SimpleChanges): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that validates whether the value matches the\\r\\n     * the pattern requirement.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function to call when the validator inputs change.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnValidatorChange(fn: () => void): void;\\r\\n    private _createValidator;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<PatternValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<PatternValidator, \\\"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]\\\", never, { 'pattern': \\\"pattern\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\\r\\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\\r\\n * `NgModel` directives.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using radio buttons with reactive form directives\\r\\n *\\r\\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\\r\\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\\r\\n * Providing a `name` attribute is optional.\\r\\n *\\r\\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RadioControlValueAccessor implements ControlValueAccessor, OnDestroy, OnInit {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    private _registry;\\r\\n    private _injector;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a change event occurs on the input element.\\r\\n     */\\r\\n    onChange: () => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name of the radio input element.\\r\\n     */\\r\\n    name: string;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the name of the `FormControl` bound to the directive. The name corresponds\\r\\n     * to a key in the parent `FormGroup` or `FormArray`.\\r\\n     */\\r\\n    formControlName: string;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the value of the radio input element\\r\\n     */\\r\\n    value: any;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef, _registry: ɵangular_packages_forms_forms_n, _injector: Injector);\\r\\n    /**\\r\\n     * @description\\r\\n     * A lifecycle method called when the directive is initialized. For internal use only.\\r\\n     */\\r\\n    ngOnInit(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Lifecycle method called before the directive's instance is destroyed. For internal use only.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Sets the \\\"checked\\\" property value on the radio input element.\\r\\n     *\\r\\n     * @param value The checked value\\r\\n     */\\r\\n    writeValue(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (_: any) => {}): void;\\r\\n    /**\\r\\n     * Sets the \\\"value\\\" on the radio input element and unchecks it.\\r\\n     *\\r\\n     * @param value\\r\\n     */\\r\\n    fireUncheck(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => {}): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    private _checkName;\\r\\n    private _throwNameError;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RadioControlValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RadioControlValueAccessor, \\\"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]\\\", never, { 'name': \\\"name\\\", 'formControlName': \\\"formControlName\\\", 'value': \\\"value\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\\r\\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and  `NgModel`\\r\\n * directives.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using a range input with a reactive form\\r\\n *\\r\\n * The following example shows how to use a range input with a reactive form.\\r\\n *\\r\\n * ```ts\\r\\n * const ageControl = new FormControl();\\r\\n * ```\\r\\n *\\r\\n * ```\\r\\n * <input type=\\\"range\\\" [formControl]=\\\"ageControl\\\">\\r\\n * ```\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RangeValueAccessor implements ControlValueAccessor {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a change or input event occurs on the input\\r\\n     * element.\\r\\n     */\\r\\n    onChange: (_: any) => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef);\\r\\n    /**\\r\\n     * Sets the \\\"value\\\" property on the input element.\\r\\n     *\\r\\n     * @param value The checked value\\r\\n     */\\r\\n    writeValue(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (_: number | null) => void): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => void): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the range input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RangeValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RangeValueAccessor, \\\"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]\\\", never, {}, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * Exports the required infrastructure and directives for reactive forms,\\r\\n * making them available for import by NgModules that import this module.\\r\\n * @see [Forms](guide/reactive-forms)\\r\\n *\\r\\n * @see [Reactive Forms Guide](/guide/reactive-forms)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class ReactiveFormsModule {\\r\\n    /**\\r\\n     * @description\\r\\n     * Provides options for configuring the reactive forms module.\\r\\n     *\\r\\n     * @param opts An object of configuration options\\r\\n     * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\\r\\n     * binding is used with reactive form directives.\\r\\n     */\\r\\n    static withConfig(opts: {\\r\\n        /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always';\\r\\n    }): ModuleWithProviders<ReactiveFormsModule>;\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ReactiveFormsModule, [typeof FormControlDirective, typeof FormGroupDirective, typeof FormControlName, typeof FormGroupName, typeof FormArrayName], never, [typeof ɵInternalFormsSharedModule, typeof FormControlDirective, typeof FormGroupDirective, typeof FormControlName, typeof FormGroupName, typeof FormArrayName]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<ReactiveFormsModule>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A directive that adds the `required` validator to any controls marked with the\\r\\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\\r\\n *\\r\\n * @see [Form Validation](guide/form-validation)\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Adding a required validator using template-driven forms\\r\\n *\\r\\n * ```\\r\\n * <input name=\\\"fullName\\\" ngModel required>\\r\\n * ```\\r\\n *\\r\\n * @ngModule FormsModule\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class RequiredValidator implements Validator {\\r\\n    private _required;\\r\\n    private _onChange;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks changes to the required attribute bound to this directive.\\r\\n     */\\r\\n    required: boolean | string;\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that validates whether the control is empty.\\r\\n     * Returns the validation result if enabled, otherwise null.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function to call when the validator inputs change.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnValidatorChange(fn: () => void): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<RequiredValidator>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<RequiredValidator, \\\":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\\\", never, { 'required': \\\"required\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * The `ControlValueAccessor` for writing select control values and listening to select control\\r\\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\\r\\n * `NgModel` directives.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using select controls in a reactive form\\r\\n *\\r\\n * The following examples show how to use a select control in a reactive form.\\r\\n *\\r\\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\\r\\n *\\r\\n * ### Using select controls in a template-driven form\\r\\n *\\r\\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\\r\\n * attribute to the main `<select>` tag.\\r\\n *\\r\\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\\r\\n *\\r\\n * ### Customizing option selection\\r\\n *\\r\\n * Angular uses object identity to select option. It's possible for the identities of items\\r\\n * to change while the data does not. This can happen, for example, if the items are produced\\r\\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\\r\\n * second response will produce objects with different identities.\\r\\n *\\r\\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\\r\\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\\r\\n * If `compareWith` is given, Angular selects option by the return value of the function.\\r\\n *\\r\\n * ```ts\\r\\n * const selectedCountriesControl = new FormControl();\\r\\n * ```\\r\\n *\\r\\n * ```\\r\\n * <select [compareWith]=\\\"compareFn\\\"  [formControl]=\\\"selectedCountriesControl\\\">\\r\\n *     <option *ngFor=\\\"let country of countries\\\" [ngValue]=\\\"country\\\">\\r\\n *         {{country.name}}\\r\\n *     </option>\\r\\n * </select>\\r\\n *\\r\\n * compareFn(c1: Country, c2: Country): boolean {\\r\\n *     return c1 && c2 ? c1.id === c2.id : c1 === c2;\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\\r\\n * for selects in Firefox and IE:\\r\\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\\r\\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class SelectControlValueAccessor implements ControlValueAccessor {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    value: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a change event occurs on the input element.\\r\\n     */\\r\\n    onChange: (_: any) => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the option comparison algorithm for tracking identities when\\r\\n     * checking for changes.\\r\\n     */\\r\\n    compareWith: (o1: any, o2: any) => boolean;\\r\\n    private _compareWith;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef);\\r\\n    /**\\r\\n     * Sets the \\\"value\\\" property on the input element. The \\\"selectedIndex\\\"\\r\\n     * property is also set if an ID is provided on the option element.\\r\\n     *\\r\\n     * @param value The checked value\\r\\n     */\\r\\n    writeValue(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (value: any) => any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => any): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the select input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<SelectControlValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<SelectControlValueAccessor, \\\"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]\\\", never, { 'compareWith': \\\"compareWith\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\\r\\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\\r\\n * directives.\\r\\n *\\r\\n * @see `SelectControlValueAccessor`\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Using a multi-select control\\r\\n *\\r\\n * The follow example shows you how to use a multi-select control with a reactive form.\\r\\n *\\r\\n * ```ts\\r\\n * const countryControl = new FormControl();\\r\\n * ```\\r\\n *\\r\\n * ```\\r\\n * <select multiple name=\\\"countries\\\" [formControl]=\\\"countryControl\\\">\\r\\n *   <option *ngFor=\\\"let country of countries\\\" [ngValue]=\\\"country\\\">\\r\\n *     {{ country.name }}\\r\\n *   </option>\\r\\n * </select>\\r\\n * ```\\r\\n *\\r\\n * ### Customizing option selection\\r\\n *\\r\\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\\r\\n * See the `SelectControlValueAccessor` for usage.\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class SelectMultipleControlValueAccessor implements ControlValueAccessor {\\r\\n    private _renderer;\\r\\n    private _elementRef;\\r\\n    /**\\r\\n     * @description\\r\\n     * The current value\\r\\n     */\\r\\n    value: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a change event occurs on the input element.\\r\\n     */\\r\\n    onChange: (_: any) => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * The registered callback function called when a blur event occurs on the input element.\\r\\n     */\\r\\n    onTouched: () => void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the option comparison algorithm for tracking identities when\\r\\n     * checking for changes.\\r\\n     */\\r\\n    compareWith: (o1: any, o2: any) => boolean;\\r\\n    private _compareWith;\\r\\n    constructor(_renderer: Renderer2, _elementRef: ElementRef);\\r\\n    /**\\r\\n     * @description\\r\\n     * Sets the \\\"value\\\" property on one or of more\\r\\n     * of the select's options.\\r\\n     *\\r\\n     * @param value The value\\r\\n     */\\r\\n    writeValue(value: any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control value changes\\r\\n     * and writes an array of the selected options.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnChange(fn: (value: any) => any): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a function called when the control is touched.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnTouched(fn: () => any): void;\\r\\n    /**\\r\\n     * Sets the \\\"disabled\\\" property on the select input element.\\r\\n     *\\r\\n     * @param isDisabled The disabled value\\r\\n     */\\r\\n    setDisabledState(isDisabled: boolean): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<SelectMultipleControlValueAccessor>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<SelectMultipleControlValueAccessor, \\\"select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]\\\", never, { 'compareWith': \\\"compareWith\\\" }, {}, never>;\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Defines the map of errors returned from failed validation checks.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare type ValidationErrors = {\\r\\n    [key: string]: any;\\r\\n};\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * An interface implemented by classes that perform synchronous validation.\\r\\n *\\r\\n * @usageNotes\\r\\n *\\r\\n * ### Provide a custom validator\\r\\n *\\r\\n * The following example implements the `Validator` interface to create a\\r\\n * validator directive with a custom error key.\\r\\n *\\r\\n * ```typescript\\r\\n * @Directive({\\r\\n *   selector: '[customValidator]',\\r\\n *   providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\\r\\n * })\\r\\n * class CustomValidatorDirective implements Validator {\\r\\n *   validate(control: AbstractControl): ValidationErrors|null {\\r\\n *     return {'custom': true};\\r\\n *   }\\r\\n * }\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface Validator {\\r\\n    /**\\r\\n     * @description\\r\\n     * Method that performs synchronous validation against the provided control.\\r\\n     *\\r\\n     * @param control The control to validate against.\\r\\n     *\\r\\n     * @returns A map of validation errors if validation fails,\\r\\n     * otherwise null.\\r\\n     */\\r\\n    validate(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Registers a callback function to call when the validator inputs change.\\r\\n     *\\r\\n     * @param fn The callback function\\r\\n     */\\r\\n    registerOnValidatorChange?(fn: () => void): void;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * A function that receives a control and synchronously returns a map of\\r\\n * validation errors if present, otherwise null.\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare interface ValidatorFn {\\r\\n    (control: AbstractControl): ValidationErrors | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provides a set of built-in validators that can be used by form controls.\\r\\n *\\r\\n * A validator is a function that processes a `FormControl` or collection of\\r\\n * controls and returns an error map or null. A null map means that validation has passed.\\r\\n *\\r\\n * @see [Form Validation](/guide/form-validation)\\r\\n *\\r\\n * @publicApi\\r\\n */\\r\\nexport declare class Validators {\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the control's value to be greater than or equal to the provided number.\\r\\n     * The validator exists only as a function and not as a directive.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate against a minimum of 3\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl(2, Validators.min(3));\\r\\n     *\\r\\n     * console.log(control.errors); // {min: {min: 3, actual: 2}}\\r\\n     * ```\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * `min` property if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static min(min: number): ValidatorFn;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the control's value to be less than or equal to the provided number.\\r\\n     * The validator exists only as a function and not as a directive.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate against a maximum of 15\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl(16, Validators.max(15));\\r\\n     *\\r\\n     * console.log(control.errors); // {max: {max: 15, actual: 16}}\\r\\n     * ```\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * `max` property if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static max(max: number): ValidatorFn;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the control have a non-empty value.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate that the field is non-empty\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl('', Validators.required);\\r\\n     *\\r\\n     * console.log(control.errors); // {required: true}\\r\\n     * ```\\r\\n     *\\r\\n     * @returns An error map with the `required` property\\r\\n     * if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static required(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the control's value be true. This validator is commonly\\r\\n     * used for required checkboxes.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate that the field value is true\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl('', Validators.requiredTrue);\\r\\n     *\\r\\n     * console.log(control.errors); // {required: true}\\r\\n     * ```\\r\\n     *\\r\\n     * @returns An error map that contains the `required` property\\r\\n     * set to `true` if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static requiredTrue(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the control's value pass an email validation test.\\r\\n     *\\r\\n     * Tests the value using a [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\\r\\n     * pattern suitable for common usecases. The pattern is based on the definition of a valid email\\r\\n     * address in the [WHATWG HTML specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address)\\r\\n     * with some enhancements to incorporate more RFC rules (such as rules related to domain names and\\r\\n     * the lengths of different parts of the address).\\r\\n     *\\r\\n     * The differences from the WHATWG version include:\\r\\n     * - Disallow `local-part` (the part before the `@` symbol) to begin or end with a period (`.`).\\r\\n     * - Disallow `local-part` to be longer than 64 characters.\\r\\n     * - Disallow the whole address to be longer than 254 characters.\\r\\n     *\\r\\n     * If this pattern does not satisfy your business needs, you can use `Validators.pattern()` to\\r\\n     * validate the value against a different pattern.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate that the field matches a valid email pattern\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl('bad@', Validators.email);\\r\\n     *\\r\\n     * console.log(control.errors); // {email: true}\\r\\n     * ```\\r\\n     *\\r\\n     * @returns An error map with the `email` property\\r\\n     * if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static email(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the length of the control's value to be greater than or equal\\r\\n     * to the provided minimum length. This validator is also provided by default if you use the\\r\\n     * the HTML5 `minlength` attribute.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate that the field has a minimum of 3 characters\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl('ng', Validators.minLength(3));\\r\\n     *\\r\\n     * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\\r\\n     * ```\\r\\n     *\\r\\n     * ```html\\r\\n     * <input minlength=\\\"5\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * `minlength` if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static minLength(minLength: number): ValidatorFn;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the length of the control's value to be less than or equal\\r\\n     * to the provided maximum length. This validator is also provided by default if you use the\\r\\n     * the HTML5 `maxlength` attribute.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate that the field has maximum of 5 characters\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl('Angular', Validators.maxLength(5));\\r\\n     *\\r\\n     * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\\r\\n     * ```\\r\\n     *\\r\\n     * ```html\\r\\n     * <input maxlength=\\\"5\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * `maxlength` property if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static maxLength(maxLength: number): ValidatorFn;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that requires the control's value to match a regex pattern. This validator is also\\r\\n     * provided by default if you use the HTML5 `pattern` attribute.\\r\\n     *\\r\\n     * @usageNotes\\r\\n     *\\r\\n     * ### Validate that the field only contains letters or spaces\\r\\n     *\\r\\n     * ```typescript\\r\\n     * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\\r\\n     *\\r\\n     * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\\r\\n     * ```\\r\\n     *\\r\\n     * ```html\\r\\n     * <input pattern=\\\"[a-zA-Z ]*\\\">\\r\\n     * ```\\r\\n     *\\r\\n     * @param pattern A regular expression to be used as is to test the values, or a string.\\r\\n     * If a string is passed, the `^` character is prepended and the `$` character is\\r\\n     * appended to the provided string (if not already present), and the resulting regular\\r\\n     * expression is used to test the values.\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * `pattern` property if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static pattern(pattern: string | RegExp): ValidatorFn;\\r\\n    /**\\r\\n     * @description\\r\\n     * Validator that performs no operation.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static nullValidator(control: AbstractControl): ValidationErrors | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Compose multiple validators into a single function that returns the union\\r\\n     * of the individual error maps for the provided control.\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * merged error maps of the validators if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static compose(validators: null): null;\\r\\n    static compose(validators: (ValidatorFn | null | undefined)[]): ValidatorFn | null;\\r\\n    /**\\r\\n     * @description\\r\\n     * Compose multiple async validators into a single function that returns the union\\r\\n     * of the individual error objects for the provided control.\\r\\n     *\\r\\n     * @returns A validator function that returns an error map with the\\r\\n     * merged error objects of the async validators if the validation check fails, otherwise `null`.\\r\\n     *\\r\\n     * @see `updateValueAndValidity()`\\r\\n     *\\r\\n     */\\r\\n    static composeAsync(validators: (AsyncValidatorFn | null)[]): AsyncValidatorFn | null;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @publicApi\\r\\n */\\r\\nexport declare const VERSION: Version;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_a: Type<any>[];\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_b: Type<any>[];\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_ba: StaticProvider;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_bb: any;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_bc: any;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_bd: any;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_be: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_c: Type<any>[];\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_e: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_f: any;\\r\\n\\r\\nexport declare class ɵangular_packages_forms_forms_g {\\r\\n    private _cd;\\r\\n    constructor(cd: AbstractControlDirective);\\r\\n    readonly ngClassUntouched: boolean;\\r\\n    readonly ngClassTouched: boolean;\\r\\n    readonly ngClassPristine: boolean;\\r\\n    readonly ngClassDirty: boolean;\\r\\n    readonly ngClassValid: boolean;\\r\\n    readonly ngClassInvalid: boolean;\\r\\n    readonly ngClassPending: boolean;\\r\\n}\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_h: {\\r\\n    '[class.ng-untouched]': string;\\r\\n    '[class.ng-touched]': string;\\r\\n    '[class.ng-pristine]': string;\\r\\n    '[class.ng-dirty]': string;\\r\\n    '[class.ng-valid]': string;\\r\\n    '[class.ng-invalid]': string;\\r\\n    '[class.ng-pending]': string;\\r\\n};\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_i: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_j: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_k: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_l: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_m: any;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Class used by Angular to track radio buttons. For internal use only.\\r\\n */\\r\\nexport declare class ɵangular_packages_forms_forms_n {\\r\\n    private _accessors;\\r\\n    /**\\r\\n     * @description\\r\\n     * Adds a control to the internal registry. For internal use only.\\r\\n     */\\r\\n    add(control: NgControl, accessor: RadioControlValueAccessor): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Removes a control from the internal registry. For internal use only.\\r\\n     */\\r\\n    remove(accessor: RadioControlValueAccessor): void;\\r\\n    /**\\r\\n     * @description\\r\\n     * Selects a radio button. For internal use only.\\r\\n     */\\r\\n    select(accessor: RadioControlValueAccessor): void;\\r\\n    private _isSameGroup;\\r\\n}\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_o: StaticProvider;\\r\\n\\r\\n/**\\r\\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_p: InjectionToken<unknown>;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_q: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_r: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_s: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_t: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_u: any;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_v: StaticProvider;\\r\\n\\r\\nexport declare const ɵangular_packages_forms_forms_w: StaticProvider;\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\\r\\n */\\r\\nexport declare const ɵangular_packages_forms_forms_z: StaticProvider;\\r\\n\\r\\n/**\\r\\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\\r\\n */\\r\\ndeclare class ɵInternalFormsSharedModule {\\r\\n    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ɵInternalFormsSharedModule, [typeof ɵNgNoValidate, typeof NgSelectOption, typeof ɵNgSelectMultipleOption, typeof DefaultValueAccessor, typeof NumberValueAccessor, typeof RangeValueAccessor, typeof CheckboxControlValueAccessor, typeof SelectControlValueAccessor, typeof SelectMultipleControlValueAccessor, typeof RadioControlValueAccessor, typeof NgControlStatus, typeof NgControlStatusGroup, typeof RequiredValidator, typeof MinLengthValidator, typeof MaxLengthValidator, typeof PatternValidator, typeof CheckboxRequiredValidator, typeof EmailValidator], never, [typeof ɵNgNoValidate, typeof NgSelectOption, typeof ɵNgSelectMultipleOption, typeof DefaultValueAccessor, typeof NumberValueAccessor, typeof RangeValueAccessor, typeof CheckboxControlValueAccessor, typeof SelectControlValueAccessor, typeof SelectMultipleControlValueAccessor, typeof RadioControlValueAccessor, typeof NgControlStatus, typeof NgControlStatusGroup, typeof RequiredValidator, typeof MinLengthValidator, typeof MaxLengthValidator, typeof PatternValidator, typeof CheckboxRequiredValidator, typeof EmailValidator]>;\\n    static ɵinj: ɵngcc0.ɵɵInjectorDef<ɵInternalFormsSharedModule>;\\n}\\r\\nexport { ɵInternalFormsSharedModule }\\r\\nexport { ɵInternalFormsSharedModule as ɵangular_packages_forms_forms_d }\\r\\n\\r\\n\\r\\n/**\\r\\n * @description\\r\\n *\\r\\n * Adds `novalidate` attribute to all forms by default.\\r\\n *\\r\\n * `novalidate` is used to disable browser's native form validation.\\r\\n *\\r\\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\\r\\n *\\r\\n * ```\\r\\n * <form ngNativeValidate></form>\\r\\n * ```\\r\\n *\\r\\n * @publicApi\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n */\\r\\ndeclare class ɵNgNoValidate {\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ɵNgNoValidate>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<ɵNgNoValidate, \\\"form:not([ngNoForm]):not([ngNativeValidate])\\\", never, {}, {}, never>;\\n}\\r\\nexport { ɵNgNoValidate }\\r\\nexport { ɵNgNoValidate as ɵangular_packages_forms_forms_y }\\r\\n\\r\\n/**\\r\\n * @description\\r\\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\\r\\n *\\r\\n * @see `SelectMultipleControlValueAccessor`\\r\\n *\\r\\n * @ngModule ReactiveFormsModule\\r\\n * @ngModule FormsModule\\r\\n * @publicApi\\r\\n */\\r\\ndeclare class ɵNgSelectMultipleOption implements OnDestroy {\\r\\n    private _element;\\r\\n    private _renderer;\\r\\n    private _select;\\r\\n    id: string;\\r\\n    constructor(_element: ElementRef, _renderer: Renderer2, _select: SelectMultipleControlValueAccessor);\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks the value bound to the option element. Unlike the value binding,\\r\\n     * ngValue supports binding to objects.\\r\\n     */\\r\\n    ngValue: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Tracks simple string values bound to the option element.\\r\\n     * For objects, use the `ngValue` input binding.\\r\\n     */\\r\\n    value: any;\\r\\n    /**\\r\\n     * @description\\r\\n     * Lifecycle method called before the directive's instance is destroyed. For internal use only.\\r\\n     */\\r\\n    ngOnDestroy(): void;\\r\\n    static ɵfac: ɵngcc0.ɵɵFactoryDef<ɵNgSelectMultipleOption>;\\n    static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta<ɵNgSelectMultipleOption, \\\"option\\\", never, { 'ngValue': \\\"ngValue\\\", 'value': \\\"value\\\" }, {}, never>;\\n}\\r\\nexport { ɵNgSelectMultipleOption }\\r\\nexport { ɵNgSelectMultipleOption as ɵangular_packages_forms_forms_x }\\r\\n\\r\\nexport { }\\r\\n\\n//# sourceMappingURL=forms.d.ts.map\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/bindCallback.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/bindCallback';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/bindNodeCallback.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/bindNodeCallback';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/combineLatest.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/combineLatest';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/concat.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/concat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/defer.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/defer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/dom/ajax.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/dom/ajax';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/dom/webSocket.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/dom/webSocket';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/empty.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/empty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/forkJoin.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/forkJoin';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/from.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/from';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/fromEvent.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/fromEvent';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/fromEventPattern.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/fromEventPattern';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/fromPromise.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/fromPromise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/generate.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/generate';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/if.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/if';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/interval.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/interval';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/merge.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/merge';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/never.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/never';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/of.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/of';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/onErrorResumeNext';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/pairs.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/pairs';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/race.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/race';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/range.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/range';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/throw.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/throw';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/timer.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/timer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/using.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/using';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/observable/zip.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/observable/zip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/audit.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/audit';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/auditTime.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/auditTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/buffer.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/buffer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/bufferCount.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/bufferCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/bufferTime.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/bufferTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/bufferToggle.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/bufferToggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/bufferWhen.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/bufferWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/catch.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/catch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/combineAll.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/combineAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/combineLatest.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/combineLatest';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/concat.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/concat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/concatAll.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/concatAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/concatMap.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/concatMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/concatMapTo.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/concatMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/count.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/count';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/debounce.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/debounce';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/debounceTime.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/debounceTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/defaultIfEmpty.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/defaultIfEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/delay.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/delay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/delayWhen.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/delayWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/dematerialize.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/dematerialize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/distinct.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/distinct';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/distinctUntilChanged.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/distinctUntilChanged';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/distinctUntilKeyChanged.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/distinctUntilKeyChanged';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/do.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/do';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/elementAt.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/elementAt';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/every.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/every';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/exhaust.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/exhaust';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/exhaustMap.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/exhaustMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/expand.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/expand';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/filter.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/filter';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/finally.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/finally';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/find.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/find';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/findIndex.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/findIndex';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/first.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/first';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/groupBy.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/groupBy';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/ignoreElements.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/ignoreElements';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/isEmpty.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/isEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/last.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/last';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/let.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/let';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/map.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/map';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/mapTo.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/mapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/materialize.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/materialize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/max.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/max';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/merge.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/merge';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/mergeAll.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/mergeAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/mergeMap.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/mergeMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/mergeMapTo.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/mergeMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/mergeScan.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/mergeScan';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/min.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/min';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/multicast.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/multicast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/observeOn.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/observeOn';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/onErrorResumeNext';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/pairwise.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/pairwise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/partition.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/partition';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/pluck.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/pluck';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/publish.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/publish';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/publishBehavior.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/publishBehavior';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/publishLast.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/publishLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/publishReplay.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/publishReplay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/race.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/race';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/reduce.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/reduce';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/repeat.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/repeat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/repeatWhen.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/repeatWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/retry.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/retry';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/retryWhen.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/retryWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/sample.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/sample';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/sampleTime.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/sampleTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/scan.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/scan';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/sequenceEqual.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/sequenceEqual';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/share.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/share';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/shareReplay.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/shareReplay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/single.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/single';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/skip.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/skip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/skipLast.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/skipLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/skipUntil.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/skipUntil';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/skipWhile.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/skipWhile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/startWith.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/startWith';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/subscribeOn.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/subscribeOn';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/switch.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/switch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/switchMap.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/switchMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/switchMapTo.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/switchMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/take.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/take';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/takeLast.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/takeLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/takeUntil.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/takeUntil';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/takeWhile.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/takeWhile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/throttle.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/throttle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/throttleTime.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/throttleTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/timeInterval.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/timeInterval';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/timeout.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/timeout';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/timeoutWith.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/timeoutWith';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/timestamp.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/timestamp';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/toArray.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/toArray';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/toPromise.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/toPromise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/window.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/window';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/windowCount.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/windowCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/windowTime.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/windowTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/windowToggle.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/windowToggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/windowWhen.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/windowWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/withLatestFrom.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/withLatestFrom';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/zip.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/zip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/add/operator/zipAll.d.ts\"\n    ],\n    \"content\": \"import 'rxjs-compat/add/operator/zipAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/ajax/index.d.ts\",\n      \"node_modules/rxjs/ajax/index.d.ts\"\n    ],\n    \"content\": \"export { ajax } from '../internal/observable/dom/ajax';\\nexport { AjaxRequest, AjaxResponse, AjaxError, AjaxTimeoutError } from '../internal/observable/dom/AjaxObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/AsyncSubject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/AsyncSubject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/BehaviorSubject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/BehaviorSubject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/fetch/index.d.ts\",\n      \"node_modules/rxjs/fetch/index.d.ts\"\n    ],\n    \"content\": \"export { fromFetch } from '../internal/observable/dom/fetch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/index.d.ts\",\n      \"node_modules/rxjs/index.d.ts\"\n    ],\n    \"content\": \"export { Observable } from './internal/Observable';\\nexport { ConnectableObservable } from './internal/observable/ConnectableObservable';\\nexport { GroupedObservable } from './internal/operators/groupBy';\\nexport { Operator } from './internal/Operator';\\nexport { observable } from './internal/symbol/observable';\\nexport { Subject } from './internal/Subject';\\nexport { BehaviorSubject } from './internal/BehaviorSubject';\\nexport { ReplaySubject } from './internal/ReplaySubject';\\nexport { AsyncSubject } from './internal/AsyncSubject';\\nexport { asap as asapScheduler } from './internal/scheduler/asap';\\nexport { async as asyncScheduler } from './internal/scheduler/async';\\nexport { queue as queueScheduler } from './internal/scheduler/queue';\\nexport { animationFrame as animationFrameScheduler } from './internal/scheduler/animationFrame';\\nexport { VirtualTimeScheduler, VirtualAction } from './internal/scheduler/VirtualTimeScheduler';\\nexport { Scheduler } from './internal/Scheduler';\\nexport { Subscription } from './internal/Subscription';\\nexport { Subscriber } from './internal/Subscriber';\\nexport { Notification, NotificationKind } from './internal/Notification';\\nexport { pipe } from './internal/util/pipe';\\nexport { noop } from './internal/util/noop';\\nexport { identity } from './internal/util/identity';\\nexport { isObservable } from './internal/util/isObservable';\\nexport { ArgumentOutOfRangeError } from './internal/util/ArgumentOutOfRangeError';\\nexport { EmptyError } from './internal/util/EmptyError';\\nexport { ObjectUnsubscribedError } from './internal/util/ObjectUnsubscribedError';\\nexport { UnsubscriptionError } from './internal/util/UnsubscriptionError';\\nexport { TimeoutError } from './internal/util/TimeoutError';\\nexport { bindCallback } from './internal/observable/bindCallback';\\nexport { bindNodeCallback } from './internal/observable/bindNodeCallback';\\nexport { combineLatest } from './internal/observable/combineLatest';\\nexport { concat } from './internal/observable/concat';\\nexport { defer } from './internal/observable/defer';\\nexport { empty } from './internal/observable/empty';\\nexport { forkJoin } from './internal/observable/forkJoin';\\nexport { from } from './internal/observable/from';\\nexport { fromEvent } from './internal/observable/fromEvent';\\nexport { fromEventPattern } from './internal/observable/fromEventPattern';\\nexport { generate } from './internal/observable/generate';\\nexport { iif } from './internal/observable/iif';\\nexport { interval } from './internal/observable/interval';\\nexport { merge } from './internal/observable/merge';\\nexport { never } from './internal/observable/never';\\nexport { of } from './internal/observable/of';\\nexport { onErrorResumeNext } from './internal/observable/onErrorResumeNext';\\nexport { pairs } from './internal/observable/pairs';\\nexport { partition } from './internal/observable/partition';\\nexport { race } from './internal/observable/race';\\nexport { range } from './internal/observable/range';\\nexport { throwError } from './internal/observable/throwError';\\nexport { timer } from './internal/observable/timer';\\nexport { using } from './internal/observable/using';\\nexport { zip } from './internal/observable/zip';\\nexport { scheduled } from './internal/scheduled/scheduled';\\nexport { EMPTY } from './internal/observable/empty';\\nexport { NEVER } from './internal/observable/never';\\nexport * from './internal/types';\\nexport { config } from './internal/config';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/InnerSubscriber.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/InnerSubscriber';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/interfaces.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/interfaces';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal-compatibility/index.d.ts\",\n      \"node_modules/rxjs/internal-compatibility/index.d.ts\"\n    ],\n    \"content\": \"export { config } from '../internal/config';\\nexport { InnerSubscriber } from '../internal/InnerSubscriber';\\nexport { OuterSubscriber } from '../internal/OuterSubscriber';\\nexport { Scheduler } from '../internal/Scheduler';\\nexport { AnonymousSubject } from '../internal/Subject';\\nexport { SubjectSubscription } from '../internal/SubjectSubscription';\\nexport { Subscriber } from '../internal/Subscriber';\\nexport { fromPromise } from '../internal/observable/fromPromise';\\nexport { fromIterable } from '../internal/observable/fromIterable';\\nexport { ajax } from '../internal/observable/dom/ajax';\\nexport { webSocket } from '../internal/observable/dom/webSocket';\\nexport { AjaxRequest, AjaxCreationMethod, ajaxGet, ajaxPost, ajaxDelete, ajaxPut, ajaxPatch, ajaxGetJSON, AjaxObservable, AjaxSubscriber, AjaxResponse, AjaxError, AjaxTimeoutError } from '../internal/observable/dom/AjaxObservable';\\nexport { WebSocketSubjectConfig, WebSocketSubject } from '../internal/observable/dom/WebSocketSubject';\\nexport { CombineLatestOperator } from '../internal/observable/combineLatest';\\nexport { EventTargetLike } from '../internal/observable/fromEvent';\\nexport { ConditionFunc, IterateFunc, ResultFunc, GenerateBaseOptions, GenerateOptions } from '../internal/observable/generate';\\nexport { dispatch } from '../internal/observable/range';\\nexport { SubscribeOnObservable } from '../internal/observable/SubscribeOnObservable';\\nexport { Timestamp } from '../internal/operators/timestamp';\\nexport { TimeInterval } from '../internal/operators/timeInterval';\\nexport { GroupedObservable } from '../internal/operators/groupBy';\\nexport { ShareReplayConfig } from '../internal/operators/shareReplay';\\nexport { ThrottleConfig, defaultThrottleConfig } from '../internal/operators/throttle';\\nexport { rxSubscriber } from '../internal/symbol/rxSubscriber';\\nexport { iterator } from '../internal/symbol/iterator';\\nexport { observable } from '../internal/symbol/observable';\\nexport { ArgumentOutOfRangeError } from '../internal/util/ArgumentOutOfRangeError';\\nexport { EmptyError } from '../internal/util/EmptyError';\\nexport { Immediate } from '../internal/util/Immediate';\\nexport { ObjectUnsubscribedError } from '../internal/util/ObjectUnsubscribedError';\\nexport { TimeoutError } from '../internal/util/TimeoutError';\\nexport { UnsubscriptionError } from '../internal/util/UnsubscriptionError';\\nexport { applyMixins } from '../internal/util/applyMixins';\\nexport { errorObject } from '../internal/util/errorObject';\\nexport { hostReportError } from '../internal/util/hostReportError';\\nexport { identity } from '../internal/util/identity';\\nexport { isArray } from '../internal/util/isArray';\\nexport { isArrayLike } from '../internal/util/isArrayLike';\\nexport { isDate } from '../internal/util/isDate';\\nexport { isFunction } from '../internal/util/isFunction';\\nexport { isIterable } from '../internal/util/isIterable';\\nexport { isNumeric } from '../internal/util/isNumeric';\\nexport { isObject } from '../internal/util/isObject';\\nexport { isInteropObservable as isObservable } from '../internal/util/isInteropObservable';\\nexport { isPromise } from '../internal/util/isPromise';\\nexport { isScheduler } from '../internal/util/isScheduler';\\nexport { noop } from '../internal/util/noop';\\nexport { not } from '../internal/util/not';\\nexport { pipe } from '../internal/util/pipe';\\nexport { root } from '../internal/util/root';\\nexport { subscribeTo } from '../internal/util/subscribeTo';\\nexport { subscribeToArray } from '../internal/util/subscribeToArray';\\nexport { subscribeToIterable } from '../internal/util/subscribeToIterable';\\nexport { subscribeToObservable } from '../internal/util/subscribeToObservable';\\nexport { subscribeToPromise } from '../internal/util/subscribeToPromise';\\nexport { subscribeToResult } from '../internal/util/subscribeToResult';\\nexport { toSubscriber } from '../internal/util/toSubscriber';\\nexport { tryCatch } from '../internal/util/tryCatch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/AsyncSubject.d.ts\"\n    ],\n    \"content\": \"import { Subject } from './Subject';\\nimport { Subscriber } from './Subscriber';\\nimport { Subscription } from './Subscription';\\n/**\\n * A variant of Subject that only emits a value when it completes. It will emit\\n * its latest value to all its observers on completion.\\n *\\n * @class AsyncSubject<T>\\n */\\nexport declare class AsyncSubject<T> extends Subject<T> {\\n    private value;\\n    private hasNext;\\n    private hasCompleted;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<any>): Subscription;\\n    next(value: T): void;\\n    error(error: any): void;\\n    complete(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/BehaviorSubject.d.ts\"\n    ],\n    \"content\": \"import { Subject } from './Subject';\\nimport { Subscriber } from './Subscriber';\\nimport { Subscription } from './Subscription';\\n/**\\n * A variant of Subject that requires an initial value and emits its current\\n * value whenever it is subscribed to.\\n *\\n * @class BehaviorSubject<T>\\n */\\nexport declare class BehaviorSubject<T> extends Subject<T> {\\n    private _value;\\n    constructor(_value: T);\\n    readonly value: T;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n    getValue(): T;\\n    next(value: T): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/config.d.ts\"\n    ],\n    \"content\": \"/**\\n * The global configuration object for RxJS, used to configure things\\n * like what Promise contructor should used to create Promises\\n */\\nexport declare const config: {\\n    /**\\n     * The promise constructor used by default for methods such as\\n     * {@link toPromise} and {@link forEach}\\n     */\\n    Promise: PromiseConstructorLike;\\n    /**\\n     * If true, turns on synchronous error rethrowing, which is a deprecated behavior\\n     * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\\n     * call in a try/catch block. It also enables producer interference, a nasty bug\\n     * where a multicast can be broken for all observers by a downstream consumer with\\n     * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BY TIME\\n     * FOR MIGRATION REASONS.\\n     */\\n    useDeprecatedSynchronousErrorHandling: boolean;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/InnerSubscriber.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from './Subscriber';\\nimport { OuterSubscriber } from './OuterSubscriber';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class InnerSubscriber<T, R> extends Subscriber<R> {\\n    private parent;\\n    outerValue: T;\\n    outerIndex: number;\\n    private index;\\n    constructor(parent: OuterSubscriber<T, R>, outerValue: T, outerIndex: number);\\n    protected _next(value: R): void;\\n    protected _error(error: any): void;\\n    protected _complete(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Notification.d.ts\"\n    ],\n    \"content\": \"import { PartialObserver } from './types';\\nimport { Observable } from './Observable';\\n/**\\n * @deprecated NotificationKind is deprecated as const enums are not compatible with isolated modules. Use a string literal instead.\\n */\\nexport declare enum NotificationKind {\\n    NEXT = \\\"N\\\",\\n    ERROR = \\\"E\\\",\\n    COMPLETE = \\\"C\\\"\\n}\\n/**\\n * Represents a push-based event or value that an {@link Observable} can emit.\\n * This class is particularly useful for operators that manage notifications,\\n * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and\\n * others. Besides wrapping the actual delivered value, it also annotates it\\n * with metadata of, for instance, what type of push message it is (`next`,\\n * `error`, or `complete`).\\n *\\n * @see {@link materialize}\\n * @see {@link dematerialize}\\n * @see {@link observeOn}\\n *\\n * @class Notification<T>\\n */\\nexport declare class Notification<T> {\\n    kind: 'N' | 'E' | 'C';\\n    value?: T;\\n    error?: any;\\n    hasValue: boolean;\\n    constructor(kind: 'N' | 'E' | 'C', value?: T, error?: any);\\n    /**\\n     * Delivers to the given `observer` the value wrapped by this Notification.\\n     * @param {Observer} observer\\n     * @return\\n     */\\n    observe(observer: PartialObserver<T>): any;\\n    /**\\n     * Given some {@link Observer} callbacks, deliver the value represented by the\\n     * current Notification to the correctly corresponding callback.\\n     * @param {function(value: T): void} next An Observer `next` callback.\\n     * @param {function(err: any): void} [error] An Observer `error` callback.\\n     * @param {function(): void} [complete] An Observer `complete` callback.\\n     * @return {any}\\n     */\\n    do(next: (value: T) => void, error?: (err: any) => void, complete?: () => void): any;\\n    /**\\n     * Takes an Observer or its individual callback functions, and calls `observe`\\n     * or `do` methods accordingly.\\n     * @param {Observer|function(value: T): void} nextOrObserver An Observer or\\n     * the `next` callback.\\n     * @param {function(err: any): void} [error] An Observer `error` callback.\\n     * @param {function(): void} [complete] An Observer `complete` callback.\\n     * @return {any}\\n     */\\n    accept(nextOrObserver: PartialObserver<T> | ((value: T) => void), error?: (err: any) => void, complete?: () => void): any;\\n    /**\\n     * Returns a simple Observable that just delivers the notification represented\\n     * by this Notification instance.\\n     * @return {any}\\n     */\\n    toObservable(): Observable<T>;\\n    private static completeNotification;\\n    private static undefinedValueNotification;\\n    /**\\n     * A shortcut to create a Notification instance of the type `next` from a\\n     * given value.\\n     * @param {T} value The `next` value.\\n     * @return {Notification<T>} The \\\"next\\\" Notification representing the\\n     * argument.\\n     * @nocollapse\\n     */\\n    static createNext<T>(value: T): Notification<T>;\\n    /**\\n     * A shortcut to create a Notification instance of the type `error` from a\\n     * given error.\\n     * @param {any} [err] The `error` error.\\n     * @return {Notification<T>} The \\\"error\\\" Notification representing the\\n     * argument.\\n     * @nocollapse\\n     */\\n    static createError<T>(err?: any): Notification<T>;\\n    /**\\n     * A shortcut to create a Notification instance of the type `complete`.\\n     * @return {Notification<any>} The valueless \\\"complete\\\" Notification.\\n     * @nocollapse\\n     */\\n    static createComplete(): Notification<any>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Observable.d.ts\"\n    ],\n    \"content\": \"import { Operator } from './Operator';\\nimport { Subscriber } from './Subscriber';\\nimport { Subscription } from './Subscription';\\nimport { TeardownLogic, OperatorFunction, PartialObserver, Subscribable } from './types';\\nimport { iif } from './observable/iif';\\nimport { throwError } from './observable/throwError';\\n/**\\n * A representation of any set of values over any amount of time. This is the most basic building block\\n * of RxJS.\\n *\\n * @class Observable<T>\\n */\\nexport declare class Observable<T> implements Subscribable<T> {\\n    /** Internal implementation detail, do not use directly. */\\n    _isScalar: boolean;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    source: Observable<any>;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    operator: Operator<any, T>;\\n    /**\\n     * @constructor\\n     * @param {Function} subscribe the function that is called when the Observable is\\n     * initially subscribed to. This function is given a Subscriber, to which new values\\n     * can be `next`ed, or an `error` method can be called to raise an error, or\\n     * `complete` can be called to notify of a successful completion.\\n     */\\n    constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic);\\n    /**\\n     * Creates a new cold Observable by calling the Observable constructor\\n     * @static true\\n     * @owner Observable\\n     * @method create\\n     * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\\n     * @return {Observable} a new cold observable\\n     * @nocollapse\\n     * @deprecated use new Observable() instead\\n     */\\n    static create: Function;\\n    /**\\n     * Creates a new Observable, with this Observable as the source, and the passed\\n     * operator defined as the new observable's operator.\\n     * @method lift\\n     * @param {Operator} operator the operator defining the operation to take on the observable\\n     * @return {Observable} a new observable with the Operator applied\\n     */\\n    lift<R>(operator: Operator<T, R>): Observable<R>;\\n    subscribe(observer?: PartialObserver<T>): Subscription;\\n    /** @deprecated Use an observer instead of a complete callback */\\n    subscribe(next: null | undefined, error: null | undefined, complete: () => void): Subscription;\\n    /** @deprecated Use an observer instead of an error callback */\\n    subscribe(next: null | undefined, error: (error: any) => void, complete?: () => void): Subscription;\\n    /** @deprecated Use an observer instead of a complete callback */\\n    subscribe(next: (value: T) => void, error: null | undefined, complete: () => void): Subscription;\\n    subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _trySubscribe(sink: Subscriber<T>): TeardownLogic;\\n    /**\\n     * @method forEach\\n     * @param {Function} next a handler for each value emitted by the observable\\n     * @param {PromiseConstructor} [promiseCtor] a constructor function used to instantiate the Promise\\n     * @return {Promise} a promise that either resolves on observable completion or\\n     *  rejects with the handled error\\n     */\\n    forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise<void>;\\n    /** @internal This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<any>): TeardownLogic;\\n    /**\\n     * @nocollapse\\n     * @deprecated In favor of iif creation function: import { iif } from 'rxjs';\\n     */\\n    static if: typeof iif;\\n    /**\\n     * @nocollapse\\n     * @deprecated In favor of throwError creation function: import { throwError } from 'rxjs';\\n     */\\n    static throw: typeof throwError;\\n    pipe(): Observable<T>;\\n    pipe<A>(op1: OperatorFunction<T, A>): Observable<A>;\\n    pipe<A, B>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>): Observable<B>;\\n    pipe<A, B, C>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>): Observable<C>;\\n    pipe<A, B, C, D>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>): Observable<D>;\\n    pipe<A, B, C, D, E>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>): Observable<E>;\\n    pipe<A, B, C, D, E, F>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>): Observable<F>;\\n    pipe<A, B, C, D, E, F, G>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>): Observable<G>;\\n    pipe<A, B, C, D, E, F, G, H>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>): Observable<H>;\\n    pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>): Observable<I>;\\n    pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, ...operations: OperatorFunction<any, any>[]): Observable<{}>;\\n    toPromise<T>(this: Observable<T>): Promise<T>;\\n    toPromise<T>(this: Observable<T>, PromiseCtor: typeof Promise): Promise<T>;\\n    toPromise<T>(this: Observable<T>, PromiseCtor: PromiseConstructorLike): Promise<T>;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/bindCallback.d.ts\"\n    ],\n    \"content\": \"import { SchedulerLike } from '../types';\\nimport { Observable } from '../Observable';\\n/** @deprecated resultSelector is no longer supported, use a mapping function. */\\nexport declare function bindCallback(callbackFunc: Function, resultSelector: Function, scheduler?: SchedulerLike): (...args: any[]) => Observable<any>;\\nexport declare function bindCallback<R1, R2, R3, R4>(callbackFunc: (callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): () => Observable<any[]>;\\nexport declare function bindCallback<R1, R2, R3>(callbackFunc: (callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): () => Observable<[R1, R2, R3]>;\\nexport declare function bindCallback<R1, R2>(callbackFunc: (callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): () => Observable<[R1, R2]>;\\nexport declare function bindCallback<R1>(callbackFunc: (callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): () => Observable<R1>;\\nexport declare function bindCallback(callbackFunc: (callback: () => any) => any, scheduler?: SchedulerLike): () => Observable<void>;\\nexport declare function bindCallback<A1, R1, R2, R3, R4>(callbackFunc: (arg1: A1, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<any[]>;\\nexport declare function bindCallback<A1, R1, R2, R3>(callbackFunc: (arg1: A1, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<[R1, R2, R3]>;\\nexport declare function bindCallback<A1, R1, R2>(callbackFunc: (arg1: A1, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<[R1, R2]>;\\nexport declare function bindCallback<A1, R1>(callbackFunc: (arg1: A1, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<R1>;\\nexport declare function bindCallback<A1>(callbackFunc: (arg1: A1, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<void>;\\nexport declare function bindCallback<A1, A2, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<any[]>;\\nexport declare function bindCallback<A1, A2, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<[R1, R2, R3]>;\\nexport declare function bindCallback<A1, A2, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<[R1, R2]>;\\nexport declare function bindCallback<A1, A2, R1>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<R1>;\\nexport declare function bindCallback<A1, A2>(callbackFunc: (arg1: A1, arg2: A2, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<void>;\\nexport declare function bindCallback<A1, A2, A3, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<any[]>;\\nexport declare function bindCallback<A1, A2, A3, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<[R1, R2, R3]>;\\nexport declare function bindCallback<A1, A2, A3, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<[R1, R2]>;\\nexport declare function bindCallback<A1, A2, A3, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<R1>;\\nexport declare function bindCallback<A1, A2, A3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<void>;\\nexport declare function bindCallback<A1, A2, A3, A4, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<any[]>;\\nexport declare function bindCallback<A1, A2, A3, A4, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<[R1, R2, R3]>;\\nexport declare function bindCallback<A1, A2, A3, A4, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<[R1, R2]>;\\nexport declare function bindCallback<A1, A2, A3, A4, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<R1>;\\nexport declare function bindCallback<A1, A2, A3, A4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<void>;\\nexport declare function bindCallback<A1, A2, A3, A4, A5, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<any[]>;\\nexport declare function bindCallback<A1, A2, A3, A4, A5, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<[R1, R2, R3]>;\\nexport declare function bindCallback<A1, A2, A3, A4, A5, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<[R1, R2]>;\\nexport declare function bindCallback<A1, A2, A3, A4, A5, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<R1>;\\nexport declare function bindCallback<A1, A2, A3, A4, A5>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<void>;\\nexport declare function bindCallback<A, R>(callbackFunc: (...args: Array<A | ((result: R) => any)>) => any, scheduler?: SchedulerLike): (...args: A[]) => Observable<R>;\\nexport declare function bindCallback<A, R>(callbackFunc: (...args: Array<A | ((...results: R[]) => any)>) => any, scheduler?: SchedulerLike): (...args: A[]) => Observable<R[]>;\\nexport declare function bindCallback(callbackFunc: Function, scheduler?: SchedulerLike): (...args: any[]) => Observable<any>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/bindNodeCallback.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\n/** @deprecated resultSelector is deprecated, pipe to map instead */\\nexport declare function bindNodeCallback(callbackFunc: Function, resultSelector: Function, scheduler?: SchedulerLike): (...args: any[]) => Observable<any>;\\nexport declare function bindNodeCallback<R1, R2, R3, R4>(callbackFunc: (callback: (err: any, res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\nexport declare function bindNodeCallback<R1, R2, R3>(callbackFunc: (callback: (err: any, res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): () => Observable<[R1, R2, R3]>;\\nexport declare function bindNodeCallback<R1, R2>(callbackFunc: (callback: (err: any, res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): () => Observable<[R1, R2]>;\\nexport declare function bindNodeCallback<R1>(callbackFunc: (callback: (err: any, res1: R1) => any) => any, scheduler?: SchedulerLike): () => Observable<R1>;\\nexport declare function bindNodeCallback(callbackFunc: (callback: (err: any) => any) => any, scheduler?: SchedulerLike): () => Observable<void>;\\nexport declare function bindNodeCallback<A1, R1, R2, R3, R4>(callbackFunc: (arg1: A1, callback: (err: any, res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\nexport declare function bindNodeCallback<A1, R1, R2, R3>(callbackFunc: (arg1: A1, callback: (err: any, res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<[R1, R2, R3]>;\\nexport declare function bindNodeCallback<A1, R1, R2>(callbackFunc: (arg1: A1, callback: (err: any, res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<[R1, R2]>;\\nexport declare function bindNodeCallback<A1, R1>(callbackFunc: (arg1: A1, callback: (err: any, res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<R1>;\\nexport declare function bindNodeCallback<A1>(callbackFunc: (arg1: A1, callback: (err: any) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<void>;\\nexport declare function bindNodeCallback<A1, A2, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, callback: (err: any, res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\nexport declare function bindNodeCallback<A1, A2, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, callback: (err: any, res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<[R1, R2, R3]>;\\nexport declare function bindNodeCallback<A1, A2, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, callback: (err: any, res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<[R1, R2]>;\\nexport declare function bindNodeCallback<A1, A2, R1>(callbackFunc: (arg1: A1, arg2: A2, callback: (err: any, res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<R1>;\\nexport declare function bindNodeCallback<A1, A2>(callbackFunc: (arg1: A1, arg2: A2, callback: (err: any) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<void>;\\nexport declare function bindNodeCallback<A1, A2, A3, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any, res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\nexport declare function bindNodeCallback<A1, A2, A3, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any, res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<[R1, R2, R3]>;\\nexport declare function bindNodeCallback<A1, A2, A3, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any, res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<[R1, R2]>;\\nexport declare function bindNodeCallback<A1, A2, A3, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any, res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<R1>;\\nexport declare function bindNodeCallback<A1, A2, A3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<void>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any, res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any, res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<[R1, R2, R3]>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any, res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<[R1, R2]>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any, res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<R1>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<void>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, A5, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any, res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, A5, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any, res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<[R1, R2, R3]>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, A5, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any, res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<[R1, R2]>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, A5, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any, res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<R1>;\\nexport declare function bindNodeCallback<A1, A2, A3, A4, A5>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<void>;\\nexport declare function bindNodeCallback(callbackFunc: Function, scheduler?: SchedulerLike): (...args: any[]) => Observable<any[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/combineLatest.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\\nimport { Subscriber } from '../Subscriber';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { Operator } from '../Operator';\\nimport { InnerSubscriber } from '../InnerSubscriber';\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, R>(sources: [O1], resultSelector: (v1: ObservedValueOf<O1>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, R>(sources: [O1, O2], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, R>(sources: [O1, O2, O3], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, R>(sources: [O1, O2, O3, O4], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, R>(sources: [O1, O2, O3, O4, O5], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>, R>(sources: [O1, O2, O3, O4, O5, O6], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>, v6: ObservedValueOf<O6>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O extends ObservableInput<any>, R>(sources: O[], resultSelector: (...args: ObservedValueOf<O>[]) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, R>(v1: O1, resultSelector: (v1: ObservedValueOf<O1>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, R>(v1: O1, v2: O2, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, v4: O4, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>, v6: ObservedValueOf<O6>) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>>(sources: [O1], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(sources: [O1, O2], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(sources: [O1, O2, O3], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(sources: [O1, O2, O3, O4], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O extends ObservableInput<any>>(sources: O[], scheduler: SchedulerLike): Observable<ObservedValueOf<O>[]>;\\nexport declare function combineLatest<O1 extends ObservableInput<any>>(sources: [O1]): Observable<[ObservedValueOf<O1>]>;\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(sources: [O1, O2]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(sources: [O1, O2, O3]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(sources: [O1, O2, O3, O4]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;\\nexport declare function combineLatest<O extends ObservableInput<any>>(sources: O[]): Observable<ObservedValueOf<O>[]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O1 extends ObservableInput<any>>(v1: O1, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(v1: O1, v2: O2, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O extends ObservableInput<any>>(...observables: O[]): Observable<any[]>;\\n/** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */\\nexport declare function combineLatest<O extends ObservableInput<any>, R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function combineLatest<O extends ObservableInput<any>, R>(array: O[], resultSelector: (...values: ObservedValueOf<O>[]) => R, scheduler?: SchedulerLike): Observable<R>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O extends ObservableInput<any>>(...observables: Array<O | SchedulerLike>): Observable<any[]>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<O extends ObservableInput<any>, R>(...observables: Array<O | ((...values: ObservedValueOf<O>[]) => R) | SchedulerLike>): Observable<R>;\\n/** @deprecated Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead */\\nexport declare function combineLatest<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R) | SchedulerLike>): Observable<R>;\\nexport declare class CombineLatestOperator<T, R> implements Operator<T, R> {\\n    private resultSelector?;\\n    constructor(resultSelector?: (...values: Array<any>) => R);\\n    call(subscriber: Subscriber<R>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class CombineLatestSubscriber<T, R> extends OuterSubscriber<T, R> {\\n    private resultSelector?;\\n    private active;\\n    private values;\\n    private observables;\\n    private toRespond;\\n    constructor(destination: Subscriber<R>, resultSelector?: (...values: Array<any>) => R);\\n    protected _next(observable: any): void;\\n    protected _complete(): void;\\n    notifyComplete(unused: Subscriber<R>): void;\\n    notifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, R>): void;\\n    private _tryResultSelector;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/concat.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O1 extends ObservableInput<any>>(v1: O1, scheduler: SchedulerLike): Observable<ObservedValueOf<O1>>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(v1: O1, v2: O2, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> | ObservedValueOf<O2>>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3>>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4>>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5>>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5> | ObservedValueOf<O6>>;\\nexport declare function concat<O1 extends ObservableInput<any>>(v1: O1): Observable<ObservedValueOf<O1>>;\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(v1: O1, v2: O2): Observable<ObservedValueOf<O1> | ObservedValueOf<O2>>;\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3>>;\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4>>;\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5>>;\\nexport declare function concat<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6): Observable<ObservedValueOf<O1> | ObservedValueOf<O2> | ObservedValueOf<O3> | ObservedValueOf<O4> | ObservedValueOf<O5> | ObservedValueOf<O6>>;\\nexport declare function concat<O extends ObservableInput<any>>(...observables: O[]): Observable<ObservedValueOf<O>>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<O extends ObservableInput<any>>(...observables: (O | SchedulerLike)[]): Observable<ObservedValueOf<O>>;\\nexport declare function concat<R>(...observables: ObservableInput<any>[]): Observable<R>;\\n/** @deprecated Use {@link scheduled} and {@link concatAll} (e.g. `scheduled([o1, o2, o3], scheduler).pipe(concatAll())`) */\\nexport declare function concat<R>(...observables: (ObservableInput<any> | SchedulerLike)[]): Observable<R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/ConnectableObservable.d.ts\"\n    ],\n    \"content\": \"import { Subject } from '../Subject';\\nimport { Observable } from '../Observable';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\n/**\\n * @class ConnectableObservable<T>\\n */\\nexport declare class ConnectableObservable<T> extends Observable<T> {\\n    source: Observable<T>;\\n    protected subjectFactory: () => Subject<T>;\\n    protected _subject: Subject<T>;\\n    protected _refCount: number;\\n    protected _connection: Subscription;\\n    /** @internal */\\n    _isComplete: boolean;\\n    constructor(source: Observable<T>, subjectFactory: () => Subject<T>);\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n    protected getSubject(): Subject<T>;\\n    connect(): Subscription;\\n    refCount(): Observable<T>;\\n}\\nexport declare const connectableObservableDescriptor: PropertyDescriptorMap;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/defer.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservedValueOf, ObservableInput } from '../types';\\n/**\\n * Creates an Observable that, on subscribe, calls an Observable factory to\\n * make an Observable for each new Observer.\\n *\\n * <span class=\\\"informal\\\">Creates the Observable lazily, that is, only when it\\n * is subscribed.\\n * </span>\\n *\\n * ![](defer.png)\\n *\\n * `defer` allows you to create the Observable only when the Observer\\n * subscribes, and create a fresh Observable for each Observer. It waits until\\n * an Observer subscribes to it, and then it generates an Observable,\\n * typically with an Observable factory function. It does this afresh for each\\n * subscriber, so although each subscriber may think it is subscribing to the\\n * same Observable, in fact each subscriber gets its own individual\\n * Observable.\\n *\\n * ## Example\\n * ### Subscribe to either an Observable of clicks or an Observable of interval, at random\\n * ```ts\\n * import { defer, fromEvent, interval } from 'rxjs';\\n *\\n * const clicksOrInterval = defer(function () {\\n *   return Math.random() > 0.5\\n *     ? fromEvent(document, 'click')\\n *     : interval(1000);\\n * });\\n * clicksOrInterval.subscribe(x => console.log(x));\\n *\\n * // Results in the following behavior:\\n * // If the result of Math.random() is greater than 0.5 it will listen\\n * // for clicks anywhere on the \\\"document\\\"; when document is clicked it\\n * // will log a MouseEvent object to the console. If the result is less\\n * // than 0.5 it will emit ascending numbers, one every second(1000ms).\\n * ```\\n *\\n * @see {@link Observable}\\n *\\n * @param {function(): SubscribableOrPromise} observableFactory The Observable\\n * factory function to invoke for each Observer that subscribes to the output\\n * Observable. May also return a Promise, which will be converted on the fly\\n * to an Observable.\\n * @return {Observable} An Observable whose Observers' subscriptions trigger\\n * an invocation of the given Observable factory function.\\n * @static true\\n * @name defer\\n * @owner Observable\\n */\\nexport declare function defer<R extends ObservableInput<any> | void>(observableFactory: () => R): Observable<ObservedValueOf<R>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/dom/ajax.d.ts\"\n    ],\n    \"content\": \"import { AjaxCreationMethod } from './AjaxObservable';\\n/**\\n * There is an ajax operator on the Rx object.\\n *\\n * It creates an observable for an Ajax request with either a request object with\\n * url, headers, etc or a string for a URL.\\n *\\n *\\n * ## Using ajax() to fetch the response object that is being returned from API.\\n * ```ts\\n * import { ajax } from 'rxjs/ajax';\\n * import { map, catchError } from 'rxjs/operators';\\n * import { of } from 'rxjs';\\n *\\n * const obs$ = ajax(`https://api.github.com/users?per_page=5`).pipe(\\n *   map(userResponse => console.log('users: ', userResponse)),\\n *   catchError(error => {\\n *     console.log('error: ', error);\\n *     return of(error);\\n *   })\\n * );\\n *\\n * ```\\n *\\n * ## Using ajax.getJSON() to fetch data from API.\\n * ```ts\\n * import { ajax } from 'rxjs/ajax';\\n * import { map, catchError } from 'rxjs/operators';\\n * import { of } from 'rxjs';\\n *\\n * const obs$ = ajax.getJSON(`https://api.github.com/users?per_page=5`).pipe(\\n *   map(userResponse => console.log('users: ', userResponse)),\\n *   catchError(error => {\\n *     console.log('error: ', error);\\n *     return of(error);\\n *   })\\n * );\\n *\\n * ```\\n *\\n * ## Using ajax() with object as argument and method POST with a two seconds delay.\\n * ```ts\\n * import { ajax } from 'rxjs/ajax';\\n * import { of } from 'rxjs';\\n *\\n * const users = ajax({\\n *   url: 'https://httpbin.org/delay/2',\\n *   method: 'POST',\\n *   headers: {\\n *     'Content-Type': 'application/json',\\n *     'rxjs-custom-header': 'Rxjs'\\n *   },\\n *   body: {\\n *     rxjs: 'Hello World!'\\n *   }\\n * }).pipe(\\n *   map(response => console.log('response: ', response)),\\n *   catchError(error => {\\n *     console.log('error: ', error);\\n *     return of(error);\\n *   })\\n * );\\n *\\n * ```\\n *\\n * ## Using ajax() to fetch. An error object that is being returned from the request.\\n * ```ts\\n * import { ajax } from 'rxjs/ajax';\\n * import { map, catchError } from 'rxjs/operators';\\n * import { of } from 'rxjs';\\n *\\n * const obs$ = ajax(`https://api.github.com/404`).pipe(\\n *   map(userResponse => console.log('users: ', userResponse)),\\n *   catchError(error => {\\n *     console.log('error: ', error);\\n *     return of(error);\\n *   })\\n * );\\n *\\n * ```\\n */\\nexport declare const ajax: AjaxCreationMethod;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/dom/AjaxObservable.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../../Observable';\\nimport { Subscriber } from '../../Subscriber';\\nimport { TeardownLogic } from '../../types';\\nexport interface AjaxRequest {\\n    url?: string;\\n    body?: any;\\n    user?: string;\\n    async?: boolean;\\n    method?: string;\\n    headers?: Object;\\n    timeout?: number;\\n    password?: string;\\n    hasContent?: boolean;\\n    crossDomain?: boolean;\\n    withCredentials?: boolean;\\n    createXHR?: () => XMLHttpRequest;\\n    progressSubscriber?: Subscriber<any>;\\n    responseType?: string;\\n}\\nexport interface AjaxCreationMethod {\\n    (urlOrRequest: string | AjaxRequest): Observable<AjaxResponse>;\\n    get(url: string, headers?: Object): Observable<AjaxResponse>;\\n    post(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;\\n    put(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;\\n    patch(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;\\n    delete(url: string, headers?: Object): Observable<AjaxResponse>;\\n    getJSON<T>(url: string, headers?: Object): Observable<T>;\\n}\\nexport declare function ajaxGet(url: string, headers?: Object): AjaxObservable<AjaxResponse>;\\nexport declare function ajaxPost(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;\\nexport declare function ajaxDelete(url: string, headers?: Object): Observable<AjaxResponse>;\\nexport declare function ajaxPut(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;\\nexport declare function ajaxPatch(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;\\nexport declare function ajaxGetJSON<T>(url: string, headers?: Object): Observable<T>;\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @extends {Ignored}\\n * @hide true\\n */\\nexport declare class AjaxObservable<T> extends Observable<T> {\\n    /**\\n     * Creates an observable for an Ajax request with either a request object with\\n     * url, headers, etc or a string for a URL.\\n     *\\n     * ## Example\\n     * ```ts\\n     * import { ajax } from 'rxjs/ajax';\\n   *\\n     * const source1 = ajax('/products');\\n     * const source2 = ajax({ url: 'products', method: 'GET' });\\n     * ```\\n     *\\n     * @param {string|Object} request Can be one of the following:\\n     *   A string of the URL to make the Ajax call.\\n     *   An object with the following properties\\n     *   - url: URL of the request\\n     *   - body: The body of the request\\n     *   - method: Method of the request, such as GET, POST, PUT, PATCH, DELETE\\n     *   - async: Whether the request is async\\n     *   - headers: Optional headers\\n     *   - crossDomain: true if a cross domain request, else false\\n     *   - createXHR: a function to override if you need to use an alternate\\n     *   XMLHttpRequest implementation.\\n     *   - resultSelector: a function to use to alter the output value type of\\n     *   the Observable. Gets {@link AjaxResponse} as an argument.\\n     * @return {Observable} An observable sequence containing the XMLHttpRequest.\\n     * @static true\\n     * @name ajax\\n     * @owner Observable\\n     * @nocollapse\\n    */\\n    static create: AjaxCreationMethod;\\n    private request;\\n    constructor(urlOrRequest: string | AjaxRequest);\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): TeardownLogic;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class AjaxSubscriber<T> extends Subscriber<Event> {\\n    request: AjaxRequest;\\n    private xhr;\\n    private done;\\n    constructor(destination: Subscriber<T>, request: AjaxRequest);\\n    next(e: Event): void;\\n    private send;\\n    private serializeBody;\\n    private setHeaders;\\n    private getHeader;\\n    private setupEvents;\\n    unsubscribe(): void;\\n}\\n/**\\n * A normalized AJAX response.\\n *\\n * @see {@link ajax}\\n *\\n * @class AjaxResponse\\n */\\nexport declare class AjaxResponse {\\n    originalEvent: Event;\\n    xhr: XMLHttpRequest;\\n    request: AjaxRequest;\\n    /** @type {number} The HTTP status code */\\n    status: number;\\n    /** @type {string|ArrayBuffer|Document|object|any} The response data */\\n    response: any;\\n    /** @type {string} The raw responseText */\\n    responseText: string;\\n    /** @type {string} The responseType (e.g. 'json', 'arraybuffer', or 'xml') */\\n    responseType: string;\\n    constructor(originalEvent: Event, xhr: XMLHttpRequest, request: AjaxRequest);\\n}\\nexport declare type AjaxErrorNames = 'AjaxError' | 'AjaxTimeoutError';\\n/**\\n * A normalized AJAX error.\\n *\\n * @see {@link ajax}\\n *\\n * @class AjaxError\\n */\\nexport interface AjaxError extends Error {\\n    /** @type {XMLHttpRequest} The XHR instance associated with the error */\\n    xhr: XMLHttpRequest;\\n    /** @type {AjaxRequest} The AjaxRequest associated with the error */\\n    request: AjaxRequest;\\n    /** @type {number} The HTTP status code */\\n    status: number;\\n    /** @type {string} The responseType (e.g. 'json', 'arraybuffer', or 'xml') */\\n    responseType: string;\\n    /** @type {string|ArrayBuffer|Document|object|any} The response data */\\n    response: any;\\n}\\nexport interface AjaxErrorCtor {\\n    new (message: string, xhr: XMLHttpRequest, request: AjaxRequest): AjaxError;\\n}\\nexport declare const AjaxError: AjaxErrorCtor;\\nexport interface AjaxTimeoutError extends AjaxError {\\n}\\nexport interface AjaxTimeoutErrorCtor {\\n    new (xhr: XMLHttpRequest, request: AjaxRequest): AjaxTimeoutError;\\n}\\n/**\\n * @see {@link ajax}\\n *\\n * @class AjaxTimeoutError\\n */\\nexport declare const AjaxTimeoutError: AjaxTimeoutErrorCtor;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/dom/fetch.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../../Observable';\\n/**\\n * Uses [the Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) to\\n * make an HTTP request.\\n *\\n * **WARNING** Parts of the fetch API are still experimental. `AbortController` is\\n * required for this implementation to work and use cancellation appropriately.\\n *\\n * Will automatically set up an internal [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)\\n * in order to teardown the internal `fetch` when the subscription tears down.\\n *\\n * If a `signal` is provided via the `init` argument, it will behave like it usually does with\\n * `fetch`. If the provided `signal` aborts, the error that `fetch` normally rejects with\\n * in that scenario will be emitted as an error from the observable.\\n *\\n * ### Basic Use\\n *\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { fromFetch } from 'rxjs/fetch';\\n * import { switchMap, catchError } from 'rxjs/operators';\\n *\\n * const data$ = fromFetch('https://api.github.com/users?per_page=5').pipe(\\n *  switchMap(response => {\\n *    if (response.ok) {\\n *      // OK return data\\n *      return response.json();\\n *    } else {\\n *      // Server is returning a status requiring the client to try something else.\\n *      return of({ error: true, message: `Error ${response.status}` });\\n *    }\\n *  }),\\n *  catchError(err => {\\n *    // Network or other error, handle appropriately\\n *    console.error(err);\\n *    return of({ error: true, message: err.message })\\n *  })\\n * );\\n *\\n * data$.subscribe({\\n *  next: result => console.log(result),\\n *  complete: () => console.log('done')\\n * })\\n * ```\\n *\\n * @param input The resource you would like to fetch. Can be a url or a request object.\\n * @param init A configuration object for the fetch.\\n * [See MDN for more details](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\\n * @returns An Observable, that when subscribed to performs an HTTP request using the native `fetch`\\n * function. The {@link Subscription} is tied to an `AbortController` for the the fetch.\\n */\\nexport declare function fromFetch(input: string | Request, init?: RequestInit): Observable<Response>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/dom/webSocket.d.ts\"\n    ],\n    \"content\": \"import { WebSocketSubject, WebSocketSubjectConfig } from './WebSocketSubject';\\n/**\\n * Wrapper around the w3c-compatible WebSocket object provided by the browser.\\n *\\n * <span class=\\\"informal\\\">{@link Subject} that communicates with a server via WebSocket</span>\\n *\\n * `webSocket` is a factory function that produces a `WebSocketSubject`,\\n * which can be used to make WebSocket connection with an arbitrary endpoint.\\n * `webSocket` accepts as an argument either a string with url of WebSocket endpoint, or an\\n * {@link WebSocketSubjectConfig} object for providing additional configuration, as\\n * well as Observers for tracking lifecycle of WebSocket connection.\\n *\\n * When `WebSocketSubject` is subscribed, it attempts to make a socket connection,\\n * unless there is one made already. This means that many subscribers will always listen\\n * on the same socket, thus saving resources. If however, two instances are made of `WebSocketSubject`,\\n * even if these two were provided with the same url, they will attempt to make separate\\n * connections. When consumer of a `WebSocketSubject` unsubscribes, socket connection is closed,\\n * only if there are no more subscribers still listening. If after some time a consumer starts\\n * subscribing again, connection is reestablished.\\n *\\n * Once connection is made, whenever a new message comes from the server, `WebSocketSubject` will emit that\\n * message as a value in the stream. By default, a message from the socket is parsed via `JSON.parse`. If you\\n * want to customize how deserialization is handled (if at all), you can provide custom `resultSelector`\\n * function in {@link WebSocketSubject}. When connection closes, stream will complete, provided it happened without\\n * any errors. If at any point (starting, maintaining or closing a connection) there is an error,\\n * stream will also error with whatever WebSocket API has thrown.\\n *\\n * By virtue of being a {@link Subject}, `WebSocketSubject` allows for receiving and sending messages from the server. In order\\n * to communicate with a connected endpoint, use `next`, `error` and `complete` methods. `next` sends a value to the server, so bear in mind\\n * that this value will not be serialized beforehand. Because of This, `JSON.stringify` will have to be called on a value by hand,\\n * before calling `next` with a result. Note also that if at the moment of nexting value\\n * there is no socket connection (for example no one is subscribing), those values will be buffered, and sent when connection\\n * is finally established. `complete` method closes socket connection. `error` does the same,\\n * as well as notifying the server that something went wrong via status code and string with details of what happened.\\n * Since status code is required in WebSocket API, `WebSocketSubject` does not allow, like regular `Subject`,\\n * arbitrary values being passed to the `error` method. It needs to be called with an object that has `code`\\n * property with status code number and optional `reason` property with string describing details\\n * of an error.\\n *\\n * Calling `next` does not affect subscribers of `WebSocketSubject` - they have no\\n * information that something was sent to the server (unless of course the server\\n * responds somehow to a message). On the other hand, since calling `complete` triggers\\n * an attempt to close socket connection. If that connection is closed without any errors, stream will\\n * complete, thus notifying all subscribers. And since calling `error` closes\\n * socket connection as well, just with a different status code for the server, if closing itself proceeds\\n * without errors, subscribed Observable will not error, as one might expect, but complete as usual. In both cases\\n * (calling `complete` or `error`), if process of closing socket connection results in some errors, *then* stream\\n * will error.\\n *\\n * **Multiplexing**\\n *\\n * `WebSocketSubject` has an additional operator, not found in other Subjects. It is called `multiplex` and it is\\n * used to simulate opening several socket connections, while in reality maintaining only one.\\n * For example, an application has both chat panel and real-time notifications about sport news. Since these are two distinct functions,\\n * it would make sense to have two separate connections for each. Perhaps there could even be two separate services with WebSocket\\n * endpoints, running on separate machines with only GUI combining them together. Having a socket connection\\n * for each functionality could become too resource expensive. It is a common pattern to have single\\n * WebSocket endpoint that acts as a gateway for the other services (in this case chat and sport news services).\\n * Even though there is a single connection in a client app, having the ability to manipulate streams as if it\\n * were two separate sockets is desirable. This eliminates manually registering and unregistering in a gateway for\\n * given service and filter out messages of interest. This is exactly what `multiplex` method is for.\\n *\\n * Method accepts three parameters. First two are functions returning subscription and unsubscription messages\\n * respectively. These are messages that will be sent to the server, whenever consumer of resulting Observable\\n * subscribes and unsubscribes. Server can use them to verify that some kind of messages should start or stop\\n * being forwarded to the client. In case of the above example application, after getting subscription message with proper identifier,\\n * gateway server can decide that it should connect to real sport news service and start forwarding messages from it.\\n * Note that both messages will be sent as returned by the functions, they are by default serialized using JSON.stringify, just\\n * as messages pushed via `next`. Also bear in mind that these messages will be sent on *every* subscription and\\n * unsubscription. This is potentially dangerous, because one consumer of an Observable may unsubscribe and the server\\n * might stop sending messages, since it got unsubscription message. This needs to be handled\\n * on the server or using {@link publish} on a Observable returned from 'multiplex'.\\n *\\n * Last argument to `multiplex` is a `messageFilter` function which should return a boolean. It is used to filter out messages\\n * sent by the server to only those that belong to simulated WebSocket stream. For example, server might mark these\\n * messages with some kind of string identifier on a message object and `messageFilter` would return `true`\\n * if there is such identifier on an object emitted by the socket. Messages which returns `false` in `messageFilter` are simply skipped,\\n * and are not passed down the stream.\\n *\\n * Return value of `multiplex` is an Observable with messages incoming from emulated socket connection. Note that this\\n * is not a `WebSocketSubject`, so calling `next` or `multiplex` again will fail. For pushing values to the\\n * server, use root `WebSocketSubject`.\\n *\\n * ### Examples\\n * #### Listening for messages from the server\\n * ```ts\\n * import { webSocket } from \\\"rxjs/webSocket\\\";\\n * const subject = webSocket(\\\"ws://localhost:8081\\\");\\n *\\n * subject.subscribe(\\n *    msg => console.log('message received: ' + msg), // Called whenever there is a message from the server.\\n *    err => console.log(err), // Called if at any point WebSocket API signals some kind of error.\\n *    () => console.log('complete') // Called when connection is closed (for whatever reason).\\n *  );\\n * ```\\n *\\n * #### Pushing messages to the server\\n * ```ts\\n * import { webSocket } from \\\"rxjs/webSocket\\\";\\n * const subject = webSocket('ws://localhost:8081');\\n *\\n * subject.subscribe();\\n * // Note that at least one consumer has to subscribe to the created subject - otherwise \\\"nexted\\\" values will be just buffered and not sent,\\n * // since no connection was established!\\n *\\n * subject.next({message: 'some message'});\\n * // This will send a message to the server once a connection is made. Remember value is serialized with JSON.stringify by default!\\n *\\n * subject.complete(); // Closes the connection.\\n *\\n * subject.error({code: 4000, reason: 'I think our app just broke!'});\\n * // Also closes the connection, but let's the server know that this closing is caused by some error.\\n * ```\\n *\\n * #### Multiplexing WebSocket\\n * ```ts\\n * import { webSocket } from \\\"rxjs/webSocket\\\";\\n * const subject = webSocket('ws://localhost:8081');\\n *\\n * const observableA = subject.multiplex(\\n *   () => ({subscribe: 'A'}), // When server gets this message, it will start sending messages for 'A'...\\n *   () => ({unsubscribe: 'A'}), // ...and when gets this one, it will stop.\\n *   message => message.type === 'A' // If the function returns `true` message is passed down the stream. Skipped if the function returns false.\\n * );\\n *\\n * const observableB = subject.multiplex( // And the same goes for 'B'.\\n *   () => ({subscribe: 'B'}),\\n *   () => ({unsubscribe: 'B'}),\\n *   message => message.type === 'B'\\n * );\\n *\\n * const subA = observableA.subscribe(messageForA => console.log(messageForA));\\n * // At this moment WebSocket connection is established. Server gets '{\\\"subscribe\\\": \\\"A\\\"}' message and starts sending messages for 'A',\\n * // which we log here.\\n *\\n * const subB = observableB.subscribe(messageForB => console.log(messageForB));\\n * // Since we already have a connection, we just send '{\\\"subscribe\\\": \\\"B\\\"}' message to the server. It starts sending messages for 'B',\\n * // which we log here.\\n *\\n * subB.unsubscribe();\\n * // Message '{\\\"unsubscribe\\\": \\\"B\\\"}' is sent to the server, which stops sending 'B' messages.\\n *\\n * subA.unsubscribe();\\n * // Message '{\\\"unsubscribe\\\": \\\"A\\\"}' makes the server stop sending messages for 'A'. Since there is no more subscribers to root Subject,\\n * // socket connection closes.\\n * ```\\n *\\n *\\n * @param {string|WebSocketSubjectConfig} urlConfigOrSource The WebSocket endpoint as an url or an object with\\n * configuration and additional Observers.\\n * @return {WebSocketSubject} Subject which allows to both send and receive messages via WebSocket connection.\\n */\\nexport declare function webSocket<T>(urlConfigOrSource: string | WebSocketSubjectConfig<T>): WebSocketSubject<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/dom/WebSocketSubject.d.ts\"\n    ],\n    \"content\": \"import { Subject, AnonymousSubject } from '../../Subject';\\nimport { Subscriber } from '../../Subscriber';\\nimport { Observable } from '../../Observable';\\nimport { Subscription } from '../../Subscription';\\nimport { Operator } from '../../Operator';\\nimport { Observer, NextObserver } from '../../types';\\n/**\\n * WebSocketSubjectConfig is a plain Object that allows us to make our\\n * webSocket configurable.\\n *\\n * <span class=\\\"informal\\\">Provides flexibility to {@link webSocket}</span>\\n *\\n * It defines a set of properties to provide custom behavior in specific\\n * moments of the socket's lifecycle. When the connection opens we can\\n * use `openObserver`, when the connection is closed `closeObserver`, if we\\n * are interested in listening for data comming from server: `deserializer`,\\n * which allows us to customize the deserialization strategy of data before passing it\\n * to the socket client. By default `deserializer` is going to apply `JSON.parse` to each message comming\\n * from the Server.\\n *\\n * ## Example\\n * **deserializer**, the default for this property is `JSON.parse` but since there are just two options\\n * for incomming data, either be text or binarydata. We can apply a custom deserialization strategy\\n * or just simply skip the default behaviour.\\n * ```ts\\n * import { webSocket } from 'rxjs/webSocket';\\n *\\n * const wsSubject = webSocket({\\n *     url: 'ws://localhost:8081',\\n * //Apply any transformation of your choice.\\n *     deserializer: ({data}) => data\\n * });\\n *\\n * wsSubject.subscribe(console.log);\\n *\\n * // Let's suppose we have this on the Server: ws.send(\\\"This is a msg from the server\\\")\\n * //output\\n * //\\n * // This is a msg from the server\\n * ```\\n *\\n * **serializer** allows us tom apply custom serialization strategy but for the outgoing messages\\n * ```ts\\n * import { webSocket } from 'rxjs/webSocket';\\n *\\n * const wsSubject = webSocket({\\n *     url: 'ws://localhost:8081',\\n * //Apply any transformation of your choice.\\n *     serializer: msg => JSON.stringify({channel: \\\"webDevelopment\\\", msg: msg})\\n * });\\n *\\n * wsSubject.subscribe(() => subject.next(\\\"msg to the server\\\"));\\n *\\n * // Let's suppose we have this on the Server: ws.send(\\\"This is a msg from the server\\\")\\n * //output\\n * //\\n * // {\\\"channel\\\":\\\"webDevelopment\\\",\\\"msg\\\":\\\"msg to the server\\\"}\\n * ```\\n *\\n * **closeObserver** allows us to set a custom error when an error raise up.\\n * ```ts\\n * import { webSocket } from 'rxjs/webSocket';\\n *\\n * const wsSubject = webSocket({\\n *     url: 'ws://localhost:8081',\\n *     closeObserver: {\\n        next(closeEvent) {\\n            const customError = { code: 6666, reason: \\\"Custom evil reason\\\" }\\n            console.log(`code: ${customError.code}, reason: ${customError.reason}`);\\n        }\\n    }\\n * });\\n *\\n * //output\\n * // code: 6666, reason: Custom evil reason\\n * ```\\n *\\n * **openObserver**, Let's say we need to make some kind of init task before sending/receiving msgs to the\\n * webSocket or sending notification that the connection was successful, this is when\\n * openObserver is usefull for.\\n * ```ts\\n * import { webSocket } from 'rxjs/webSocket';\\n *\\n * const wsSubject = webSocket({\\n *     url: 'ws://localhost:8081',\\n *     openObserver: {\\n *         next: () => {\\n *             console.log('connetion ok');\\n *         }\\n *     },\\n * });\\n *\\n * //output\\n * // connetion ok`\\n * ```\\n * */\\nexport interface WebSocketSubjectConfig<T> {\\n    /** The url of the socket server to connect to */\\n    url: string;\\n    /** The protocol to use to connect */\\n    protocol?: string | Array<string>;\\n    /** @deprecated use {@link deserializer} */\\n    resultSelector?: (e: MessageEvent) => T;\\n    /**\\n     * A serializer used to create messages from passed values before the\\n     * messages are sent to the server. Defaults to JSON.stringify.\\n     */\\n    serializer?: (value: T) => WebSocketMessage;\\n    /**\\n     * A deserializer used for messages arriving on the socket from the\\n     * server. Defaults to JSON.parse.\\n     */\\n    deserializer?: (e: MessageEvent) => T;\\n    /**\\n     * An Observer that watches when open events occur on the underlying web socket.\\n     */\\n    openObserver?: NextObserver<Event>;\\n    /**\\n     * An Observer than watches when close events occur on the underlying webSocket\\n     */\\n    closeObserver?: NextObserver<CloseEvent>;\\n    /**\\n     * An Observer that watches when a close is about to occur due to\\n     * unsubscription.\\n     */\\n    closingObserver?: NextObserver<void>;\\n    /**\\n     * A WebSocket constructor to use. This is useful for situations like using a\\n     * WebSocket impl in Node (WebSocket is a DOM API), or for mocking a WebSocket\\n     * for testing purposes\\n     */\\n    WebSocketCtor?: {\\n        new (url: string, protocols?: string | string[]): WebSocket;\\n    };\\n    /** Sets the `binaryType` property of the underlying WebSocket. */\\n    binaryType?: 'blob' | 'arraybuffer';\\n}\\nexport declare type WebSocketMessage = string | ArrayBuffer | Blob | ArrayBufferView;\\nexport declare class WebSocketSubject<T> extends AnonymousSubject<T> {\\n    private _config;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _output: Subject<T>;\\n    private _socket;\\n    constructor(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>);\\n    lift<R>(operator: Operator<T, R>): WebSocketSubject<R>;\\n    private _resetState;\\n    /**\\n     * Creates an {@link Observable}, that when subscribed to, sends a message,\\n     * defined by the `subMsg` function, to the server over the socket to begin a\\n     * subscription to data over that socket. Once data arrives, the\\n     * `messageFilter` argument will be used to select the appropriate data for\\n     * the resulting Observable. When teardown occurs, either due to\\n     * unsubscription, completion or error, a message defined by the `unsubMsg`\\n     * argument will be send to the server over the WebSocketSubject.\\n     *\\n     * @param subMsg A function to generate the subscription message to be sent to\\n     * the server. This will still be processed by the serializer in the\\n     * WebSocketSubject's config. (Which defaults to JSON serialization)\\n     * @param unsubMsg A function to generate the unsubscription message to be\\n     * sent to the server at teardown. This will still be processed by the\\n     * serializer in the WebSocketSubject's config.\\n     * @param messageFilter A predicate for selecting the appropriate messages\\n     * from the server for the output stream.\\n     */\\n    multiplex(subMsg: () => any, unsubMsg: () => any, messageFilter: (value: T) => boolean): Observable<any>;\\n    private _connectSocket;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n    unsubscribe(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/empty.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\n/**\\n * The same Observable instance returned by any call to {@link empty} without a\\n * `scheduler`. It is preferrable to use this over `empty()`.\\n */\\nexport declare const EMPTY: Observable<never>;\\n/**\\n * Creates an Observable that emits no items to the Observer and immediately\\n * emits a complete notification.\\n *\\n * <span class=\\\"informal\\\">Just emits 'complete', and nothing else.\\n * </span>\\n *\\n * ![](empty.png)\\n *\\n * This static operator is useful for creating a simple Observable that only\\n * emits the complete notification. It can be used for composing with other\\n * Observables, such as in a {@link mergeMap}.\\n *\\n * ## Examples\\n * ### Emit the number 7, then complete\\n * ```ts\\n * import { empty } from 'rxjs';\\n * import { startWith } from 'rxjs/operators';\\n *\\n * const result = empty().pipe(startWith(7));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * ### Map and flatten only odd numbers to the sequence 'a', 'b', 'c'\\n * ```ts\\n * import { empty, interval, of } from 'rxjs';\\n * import { mergeMap } from 'rxjs/operators';\\n *\\n * const interval$ = interval(1000);\\n * const result = interval$.pipe(\\n *   mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : empty()),\\n * );\\n * result.subscribe(x => console.log(x));\\n *\\n * // Results in the following to the console:\\n * // x is equal to the count on the interval eg(0,1,2,3,...)\\n * // x will occur every 1000ms\\n * // if x % 2 is equal to 1 print abc\\n * // if x % 2 is not equal to 1 nothing will be output\\n * ```\\n *\\n * @see {@link Observable}\\n * @see {@link never}\\n * @see {@link of}\\n * @see {@link throwError}\\n *\\n * @param scheduler A {@link SchedulerLike} to use for scheduling\\n * the emission of the complete notification.\\n * @return An \\\"empty\\\" Observable: emits only the complete\\n * notification.\\n * @deprecated Deprecated in favor of using {@link EMPTY} constant, or {@link scheduled} (e.g. `scheduled([], scheduler)`)\\n */\\nexport declare function empty(scheduler?: SchedulerLike): Observable<never>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/forkJoin.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, ObservedValuesFromArray, ObservedValueOf, SubscribableOrPromise } from '../types';\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T>(v1: SubscribableOrPromise<T>): Observable<[T]>;\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>): Observable<[T, T2]>;\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<[T, T2, T3, T4, T5, T6]>;\\nexport declare function forkJoin<A>(sources: [ObservableInput<A>]): Observable<[A]>;\\nexport declare function forkJoin<A, B>(sources: [ObservableInput<A>, ObservableInput<B>]): Observable<[A, B]>;\\nexport declare function forkJoin<A, B, C>(sources: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>]): Observable<[A, B, C]>;\\nexport declare function forkJoin<A, B, C, D>(sources: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>, ObservableInput<D>]): Observable<[A, B, C, D]>;\\nexport declare function forkJoin<A, B, C, D, E>(sources: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>, ObservableInput<D>, ObservableInput<E>]): Observable<[A, B, C, D, E]>;\\nexport declare function forkJoin<A, B, C, D, E, F>(sources: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>, ObservableInput<D>, ObservableInput<E>, ObservableInput<F>]): Observable<[A, B, C, D, E, F]>;\\nexport declare function forkJoin<A extends ObservableInput<any>[]>(sources: A): Observable<ObservedValuesFromArray<A>[]>;\\nexport declare function forkJoin(sourcesObject: {}): Observable<never>;\\nexport declare function forkJoin<T, K extends keyof T>(sourcesObject: T): Observable<{\\n    [K in keyof T]: ObservedValueOf<T[K]>;\\n}>;\\n/** @deprecated resultSelector is deprecated, pipe to map instead */\\nexport declare function forkJoin(...args: Array<ObservableInput<any> | Function>): Observable<any>;\\n/** @deprecated Use the version that takes an array of Observables instead */\\nexport declare function forkJoin<T>(...sources: ObservableInput<T>[]): Observable<T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/from.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\\nexport declare function from<O extends ObservableInput<any>>(input: O): Observable<ObservedValueOf<O>>;\\n/** @deprecated use {@link scheduled} instead. */\\nexport declare function from<O extends ObservableInput<any>>(input: O, scheduler: SchedulerLike): Observable<ObservedValueOf<O>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/fromArray.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare function fromArray<T>(input: ArrayLike<T>, scheduler?: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/fromEvent.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nexport interface NodeStyleEventEmitter {\\n    addListener: (eventName: string | symbol, handler: NodeEventHandler) => this;\\n    removeListener: (eventName: string | symbol, handler: NodeEventHandler) => this;\\n}\\nexport declare type NodeEventHandler = (...args: any[]) => void;\\nexport interface NodeCompatibleEventEmitter {\\n    addListener: (eventName: string, handler: NodeEventHandler) => void | {};\\n    removeListener: (eventName: string, handler: NodeEventHandler) => void | {};\\n}\\nexport interface JQueryStyleEventEmitter {\\n    on: (eventName: string, handler: Function) => void;\\n    off: (eventName: string, handler: Function) => void;\\n}\\nexport interface HasEventTargetAddRemove<E> {\\n    addEventListener(type: string, listener: ((evt: E) => void) | null, options?: boolean | AddEventListenerOptions): void;\\n    removeEventListener(type: string, listener?: ((evt: E) => void) | null, options?: EventListenerOptions | boolean): void;\\n}\\nexport declare type EventTargetLike<T> = HasEventTargetAddRemove<T> | NodeStyleEventEmitter | NodeCompatibleEventEmitter | JQueryStyleEventEmitter;\\nexport declare type FromEventTarget<T> = EventTargetLike<T> | ArrayLike<EventTargetLike<T>>;\\nexport interface EventListenerOptions {\\n    capture?: boolean;\\n    passive?: boolean;\\n    once?: boolean;\\n}\\nexport interface AddEventListenerOptions extends EventListenerOptions {\\n    once?: boolean;\\n    passive?: boolean;\\n}\\nexport declare function fromEvent<T>(target: FromEventTarget<T>, eventName: string): Observable<T>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function fromEvent<T>(target: FromEventTarget<T>, eventName: string, resultSelector: (...args: any[]) => T): Observable<T>;\\nexport declare function fromEvent<T>(target: FromEventTarget<T>, eventName: string, options: EventListenerOptions): Observable<T>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function fromEvent<T>(target: FromEventTarget<T>, eventName: string, options: EventListenerOptions, resultSelector: (...args: any[]) => T): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/fromEventPattern.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { NodeEventHandler } from './fromEvent';\\nexport declare function fromEventPattern<T>(addHandler: (handler: NodeEventHandler) => any, removeHandler?: (handler: NodeEventHandler, signal?: any) => void): Observable<T>;\\n/** @deprecated resultSelector no longer supported, pipe to map instead */\\nexport declare function fromEventPattern<T>(addHandler: (handler: NodeEventHandler) => any, removeHandler?: (handler: NodeEventHandler, signal?: any) => void, resultSelector?: (...args: any[]) => T): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/fromIterable.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare function fromIterable<T>(input: Iterable<T>, scheduler?: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/fromPromise.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare function fromPromise<T>(input: PromiseLike<T>, scheduler?: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/generate.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare type ConditionFunc<S> = (state: S) => boolean;\\nexport declare type IterateFunc<S> = (state: S) => S;\\nexport declare type ResultFunc<S, T> = (state: S) => T;\\nexport interface GenerateBaseOptions<S> {\\n    /**\\n     * Initial state.\\n     */\\n    initialState: S;\\n    /**\\n     * Condition function that accepts state and returns boolean.\\n     * When it returns false, the generator stops.\\n     * If not specified, a generator never stops.\\n     */\\n    condition?: ConditionFunc<S>;\\n    /**\\n     * Iterate function that accepts state and returns new state.\\n     */\\n    iterate: IterateFunc<S>;\\n    /**\\n     * SchedulerLike to use for generation process.\\n     * By default, a generator starts immediately.\\n     */\\n    scheduler?: SchedulerLike;\\n}\\nexport interface GenerateOptions<T, S> extends GenerateBaseOptions<S> {\\n    /**\\n     * Result selection function that accepts state and returns a value to emit.\\n     */\\n    resultSelector: ResultFunc<S, T>;\\n}\\n/**\\n * Generates an observable sequence by running a state-driven loop\\n * producing the sequence's elements, using the specified scheduler\\n * to send out observer messages.\\n *\\n * ![](generate.png)\\n *\\n * @example <caption>Produces sequence of 0, 1, 2, ... 9, then completes.</caption>\\n * const res = generate(0, x => x < 10, x => x + 1, x => x);\\n *\\n * @example <caption>Using asap scheduler, produces sequence of 2, 3, 5, then completes.</caption>\\n * const res = generate(1, x => x < 5, x => x * 2, x => x + 1, asap);\\n *\\n * @see {@link from}\\n * @see {@link Observable}\\n *\\n * @param {S} initialState Initial state.\\n * @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).\\n * @param {function (state: S): S} iterate Iteration step function.\\n * @param {function (state: S): T} resultSelector Selector function for results produced in the sequence. (deprecated)\\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} on which to run the generator loop. If not provided, defaults to emit immediately.\\n * @returns {Observable<T>} The generated sequence.\\n */\\nexport declare function generate<T, S>(initialState: S, condition: ConditionFunc<S>, iterate: IterateFunc<S>, resultSelector: ResultFunc<S, T>, scheduler?: SchedulerLike): Observable<T>;\\n/**\\n * Generates an Observable by running a state-driven loop\\n * that emits an element on each iteration.\\n *\\n * <span class=\\\"informal\\\">Use it instead of nexting values in a for loop.</span>\\n *\\n * <img src=\\\"./img/generate.png\\\" width=\\\"100%\\\">\\n *\\n * `generate` allows you to create stream of values generated with a loop very similar to\\n * traditional for loop. First argument of `generate` is a beginning value. Second argument\\n * is a function that accepts this value and tests if some condition still holds. If it does,\\n * loop continues, if not, it stops. Third value is a function which takes previously defined\\n * value and modifies it in some way on each iteration. Note how these three parameters\\n * are direct equivalents of three expressions in regular for loop: first expression\\n * initializes some state (for example numeric index), second tests if loop can make next\\n * iteration (for example if index is lower than 10) and third states how defined value\\n * will be modified on every step (index will be incremented by one).\\n *\\n * Return value of a `generate` operator is an Observable that on each loop iteration\\n * emits a value. First, condition function is ran. If it returned true, Observable\\n * emits currently stored value (initial value at the first iteration) and then updates\\n * that value with iterate function. If at some point condition returned false, Observable\\n * completes at that moment.\\n *\\n * Optionally you can pass fourth parameter to `generate` - a result selector function which allows you\\n * to immediately map value that would normally be emitted by an Observable.\\n *\\n * If you find three anonymous functions in `generate` call hard to read, you can provide\\n * single object to the operator instead. That object has properties: `initialState`,\\n * `condition`, `iterate` and `resultSelector`, which should have respective values that you\\n * would normally pass to `generate`. `resultSelector` is still optional, but that form\\n * of calling `generate` allows you to omit `condition` as well. If you omit it, that means\\n * condition always holds, so output Observable will never complete.\\n *\\n * Both forms of `generate` can optionally accept a scheduler. In case of multi-parameter call,\\n * scheduler simply comes as a last argument (no matter if there is resultSelector\\n * function or not). In case of single-parameter call, you can provide it as a\\n * `scheduler` property on object passed to the operator. In both cases scheduler decides when\\n * next iteration of the loop will happen and therefore when next value will be emitted\\n * by the Observable. For example to ensure that each value is pushed to the observer\\n * on separate task in event loop, you could use `async` scheduler. Note that\\n * by default (when no scheduler is passed) values are simply emitted synchronously.\\n *\\n *\\n * @example <caption>Use with condition and iterate functions.</caption>\\n * const generated = generate(0, x => x < 3, x => x + 1);\\n *\\n * generated.subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('Yo!')\\n * );\\n *\\n * // Logs:\\n * // 0\\n * // 1\\n * // 2\\n * // \\\"Yo!\\\"\\n *\\n *\\n * @example <caption>Use with condition, iterate and resultSelector functions.</caption>\\n * const generated = generate(0, x => x < 3, x => x + 1, x => x * 1000);\\n *\\n * generated.subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('Yo!')\\n * );\\n *\\n * // Logs:\\n * // 0\\n * // 1000\\n * // 2000\\n * // \\\"Yo!\\\"\\n *\\n *\\n * @example <caption>Use with options object.</caption>\\n * const generated = generate({\\n *   initialState: 0,\\n *   condition(value) { return value < 3; },\\n *   iterate(value) { return value + 1; },\\n *   resultSelector(value) { return value * 1000; }\\n * });\\n *\\n * generated.subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('Yo!')\\n * );\\n *\\n * // Logs:\\n * // 0\\n * // 1000\\n * // 2000\\n * // \\\"Yo!\\\"\\n *\\n * @example <caption>Use options object without condition function.</caption>\\n * const generated = generate({\\n *   initialState: 0,\\n *   iterate(value) { return value + 1; },\\n *   resultSelector(value) { return value * 1000; }\\n * });\\n *\\n * generated.subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('Yo!') // This will never run.\\n * );\\n *\\n * // Logs:\\n * // 0\\n * // 1000\\n * // 2000\\n * // 3000\\n * // ...and never stops.\\n *\\n *\\n * @see {@link from}\\n * @see {@link index/Observable.create}\\n *\\n * @param {S} initialState Initial state.\\n * @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).\\n * @param {function (state: S): S} iterate Iteration step function.\\n * @param {function (state: S): T} [resultSelector] Selector function for results produced in the sequence.\\n * @param {Scheduler} [scheduler] A {@link Scheduler} on which to run the generator loop. If not provided, defaults to emitting immediately.\\n * @return {Observable<T>} The generated sequence.\\n */\\nexport declare function generate<S>(initialState: S, condition: ConditionFunc<S>, iterate: IterateFunc<S>, scheduler?: SchedulerLike): Observable<S>;\\n/**\\n * Generates an observable sequence by running a state-driven loop\\n * producing the sequence's elements, using the specified scheduler\\n * to send out observer messages.\\n * The overload accepts options object that might contain initial state, iterate,\\n * condition and scheduler.\\n *\\n * ![](generate.png)\\n *\\n * @example <caption>Produces sequence of 0, 1, 2, ... 9, then completes.</caption>\\n * const res = generate({\\n *   initialState: 0,\\n *   condition: x => x < 10,\\n *   iterate: x => x + 1,\\n * });\\n *\\n * @see {@link from}\\n * @see {@link Observable}\\n *\\n * @param {GenerateBaseOptions<S>} options Object that must contain initialState, iterate and might contain condition and scheduler.\\n * @returns {Observable<S>} The generated sequence.\\n */\\nexport declare function generate<S>(options: GenerateBaseOptions<S>): Observable<S>;\\n/**\\n * Generates an observable sequence by running a state-driven loop\\n * producing the sequence's elements, using the specified scheduler\\n * to send out observer messages.\\n * The overload accepts options object that might contain initial state, iterate,\\n * condition, result selector and scheduler.\\n *\\n * ![](generate.png)\\n *\\n * @example <caption>Produces sequence of 0, 1, 2, ... 9, then completes.</caption>\\n * const res = generate({\\n *   initialState: 0,\\n *   condition: x => x < 10,\\n *   iterate: x => x + 1,\\n *   resultSelector: x => x,\\n * });\\n *\\n * @see {@link from}\\n * @see {@link Observable}\\n *\\n * @param {GenerateOptions<T, S>} options Object that must contain initialState, iterate, resultSelector and might contain condition and scheduler.\\n * @returns {Observable<T>} The generated sequence.\\n */\\nexport declare function generate<T, S>(options: GenerateOptions<T, S>): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/iif.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SubscribableOrPromise } from '../types';\\n/**\\n * Decides at subscription time which Observable will actually be subscribed.\\n *\\n * <span class=\\\"informal\\\">`If` statement for Observables.</span>\\n *\\n * `iif` accepts a condition function and two Observables. When\\n * an Observable returned by the operator is subscribed, condition function will be called.\\n * Based on what boolean it returns at that moment, consumer will subscribe either to\\n * the first Observable (if condition was true) or to the second (if condition was false). Condition\\n * function may also not return anything - in that case condition will be evaluated as false and\\n * second Observable will be subscribed.\\n *\\n * Note that Observables for both cases (true and false) are optional. If condition points to an Observable that\\n * was left undefined, resulting stream will simply complete immediately. That allows you to, rather\\n * than controlling which Observable will be subscribed, decide at runtime if consumer should have access\\n * to given Observable or not.\\n *\\n * If you have more complex logic that requires decision between more than two Observables, {@link defer}\\n * will probably be a better choice. Actually `iif` can be easily implemented with {@link defer}\\n * and exists only for convenience and readability reasons.\\n *\\n *\\n * ## Examples\\n * ### Change at runtime which Observable will be subscribed\\n * ```ts\\n * import { iif, of } from 'rxjs';\\n *\\n * let subscribeToFirst;\\n * const firstOrSecond = iif(\\n *   () => subscribeToFirst,\\n *   of('first'),\\n *   of('second'),\\n * );\\n *\\n * subscribeToFirst = true;\\n * firstOrSecond.subscribe(value => console.log(value));\\n *\\n * // Logs:\\n * // \\\"first\\\"\\n *\\n * subscribeToFirst = false;\\n * firstOrSecond.subscribe(value => console.log(value));\\n *\\n * // Logs:\\n * // \\\"second\\\"\\n *\\n * ```\\n *\\n * ### Control an access to an Observable\\n * ```ts\\n * let accessGranted;\\n * const observableIfYouHaveAccess = iif(\\n *   () => accessGranted,\\n *   of('It seems you have an access...'), // Note that only one Observable is passed to the operator.\\n * );\\n *\\n * accessGranted = true;\\n * observableIfYouHaveAccess.subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('The end'),\\n * );\\n *\\n * // Logs:\\n * // \\\"It seems you have an access...\\\"\\n * // \\\"The end\\\"\\n *\\n * accessGranted = false;\\n * observableIfYouHaveAccess.subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('The end'),\\n * );\\n *\\n * // Logs:\\n * // \\\"The end\\\"\\n * ```\\n *\\n * @see {@link defer}\\n *\\n * @param {function(): boolean} condition Condition which Observable should be chosen.\\n * @param {Observable} [trueObservable] An Observable that will be subscribed if condition is true.\\n * @param {Observable} [falseObservable] An Observable that will be subscribed if condition is false.\\n * @return {Observable} Either first or second Observable, depending on condition.\\n * @static true\\n * @name iif\\n * @owner Observable\\n */\\nexport declare function iif<T, F>(condition: () => boolean, trueResult?: SubscribableOrPromise<T>, falseResult?: SubscribableOrPromise<F>): Observable<T | F>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/interval.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\n/**\\n * Creates an Observable that emits sequential numbers every specified\\n * interval of time, on a specified {@link SchedulerLike}.\\n *\\n * <span class=\\\"informal\\\">Emits incremental numbers periodically in time.\\n * </span>\\n *\\n * ![](interval.png)\\n *\\n * `interval` returns an Observable that emits an infinite sequence of\\n * ascending integers, with a constant interval of time of your choosing\\n * between those emissions. The first emission is not sent immediately, but\\n * only after the first period has passed. By default, this operator uses the\\n * `async` {@link SchedulerLike} to provide a notion of time, but you may pass any\\n * {@link SchedulerLike} to it.\\n *\\n * ## Example\\n * Emits ascending numbers, one every second (1000ms) up to the number 3\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { take } from 'rxjs/operators';\\n *\\n * const numbers = interval(1000);\\n *\\n * const takeFourNumbers = numbers.pipe(take(4));\\n *\\n * takeFourNumbers.subscribe(x => console.log('Next: ', x));\\n *\\n * // Logs:\\n * // Next: 0\\n * // Next: 1\\n * // Next: 2\\n * // Next: 3\\n * ```\\n *\\n * @see {@link timer}\\n * @see {@link delay}\\n *\\n * @param {number} [period=0] The interval size in milliseconds (by default)\\n * or the time unit determined by the scheduler's clock.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for scheduling\\n * the emission of values, and providing a notion of \\\"time\\\".\\n * @return {Observable} An Observable that emits a sequential number each time\\n * interval.\\n * @static true\\n * @name interval\\n * @owner Observable\\n */\\nexport declare function interval(period?: number, scheduler?: SchedulerLike): Observable<number>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/merge.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, SchedulerLike } from '../types';\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T>(v1: ObservableInput<T>, scheduler: SchedulerLike): Observable<T>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T>(v1: ObservableInput<T>, concurrent: number, scheduler: SchedulerLike): Observable<T>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, scheduler: SchedulerLike): Observable<T | T2>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler: SchedulerLike): Observable<T | T2 | T3>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6>;\\nexport declare function merge<T>(v1: ObservableInput<T>): Observable<T>;\\nexport declare function merge<T>(v1: ObservableInput<T>, concurrent?: number): Observable<T>;\\nexport declare function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>): Observable<T | T2>;\\nexport declare function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, concurrent?: number): Observable<T | T2>;\\nexport declare function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<T | T2 | T3>;\\nexport declare function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, concurrent?: number): Observable<T | T2 | T3>;\\nexport declare function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<T | T2 | T3 | T4>;\\nexport declare function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, concurrent?: number): Observable<T | T2 | T3 | T4>;\\nexport declare function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<T | T2 | T3 | T4 | T5>;\\nexport declare function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, concurrent?: number): Observable<T | T2 | T3 | T4 | T5>;\\nexport declare function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<T | T2 | T3 | T4 | T5 | T6>;\\nexport declare function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, concurrent?: number): Observable<T | T2 | T3 | T4 | T5 | T6>;\\nexport declare function merge<T>(...observables: (ObservableInput<T> | number)[]): Observable<T>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T>(...observables: (ObservableInput<T> | SchedulerLike | number)[]): Observable<T>;\\nexport declare function merge<T, R>(...observables: (ObservableInput<any> | number)[]): Observable<R>;\\n/** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/\\nexport declare function merge<T, R>(...observables: (ObservableInput<any> | SchedulerLike | number)[]): Observable<R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/never.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\n/**\\n * An Observable that emits no items to the Observer and never completes.\\n *\\n * ![](never.png)\\n *\\n * A simple Observable that emits neither values nor errors nor the completion\\n * notification. It can be used for testing purposes or for composing with other\\n * Observables. Please note that by never emitting a complete notification, this\\n * Observable keeps the subscription from being disposed automatically.\\n * Subscriptions need to be manually disposed.\\n *\\n * ##  Example\\n * ### Emit the number 7, then never emit anything else (not even complete)\\n * ```ts\\n * import { NEVER } from 'rxjs';\\n * import { startWith } from 'rxjs/operators';\\n *\\n * function info() {\\n *   console.log('Will not be called');\\n * }\\n * const result = NEVER.pipe(startWith(7));\\n * result.subscribe(x => console.log(x), info, info);\\n *\\n * ```\\n *\\n * @see {@link Observable}\\n * @see {@link index/EMPTY}\\n * @see {@link of}\\n * @see {@link throwError}\\n */\\nexport declare const NEVER: Observable<never>;\\n/**\\n * @deprecated Deprecated in favor of using {@link NEVER} constant.\\n */\\nexport declare function never(): Observable<never>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/of.d.ts\"\n    ],\n    \"content\": \"import { SchedulerLike } from '../types';\\nimport { Observable } from '../Observable';\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T>(a: T, scheduler: SchedulerLike): Observable<T>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2>(a: T, b: T2, scheduler: SchedulerLike): Observable<T | T2>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3>(a: T, b: T2, c: T3, scheduler: SchedulerLike): Observable<T | T2 | T3>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3, T4>(a: T, b: T2, c: T3, d: T4, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3, T4, T5>(a: T, b: T2, c: T3, d: T4, e: T5, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3, T4, T5, T6>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3, T4, T5, T6, T7>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, g: T7, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6 | T7>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3, T4, T5, T6, T7, T8>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, g: T7, h: T8, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6 | T7 | T8>;\\n/** @deprecated use {@link scheduled} instead `scheduled([a, b, c], scheduler)` */\\nexport declare function of<T, T2, T3, T4, T5, T6, T7, T8, T9>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, g: T7, h: T8, i: T9, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;\\nexport declare function of<T>(...args: (T | SchedulerLike)[]): Observable<T>;\\nexport declare function of<T>(a: T): Observable<T>;\\nexport declare function of<T, T2>(a: T, b: T2): Observable<T | T2>;\\nexport declare function of<T, T2, T3>(a: T, b: T2, c: T3): Observable<T | T2 | T3>;\\nexport declare function of<T, T2, T3, T4>(a: T, b: T2, c: T3, d: T4): Observable<T | T2 | T3 | T4>;\\nexport declare function of<T, T2, T3, T4, T5>(a: T, b: T2, c: T3, d: T4, e: T5): Observable<T | T2 | T3 | T4 | T5>;\\nexport declare function of<T, T2, T3, T4, T5, T6>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6): Observable<T | T2 | T3 | T4 | T5 | T6>;\\nexport declare function of<T, T2, T3, T4, T5, T6, T7>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, g: T7): Observable<T | T2 | T3 | T4 | T5 | T6 | T7>;\\nexport declare function of<T, T2, T3, T4, T5, T6, T7, T8>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, g: T7, h: T8): Observable<T | T2 | T3 | T4 | T5 | T6 | T7 | T8>;\\nexport declare function of<T, T2, T3, T4, T5, T6, T7, T8, T9>(a: T, b: T2, c: T3, d: T4, e: T5, f: T6, g: T7, h: T8, i: T9): Observable<T | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;\\nexport declare function of<T>(...args: T[]): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput } from '../types';\\nexport declare function onErrorResumeNext<R>(v: ObservableInput<R>): Observable<R>;\\nexport declare function onErrorResumeNext<T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<R>;\\nexport declare function onErrorResumeNext<T2, T3, T4, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<R>;\\nexport declare function onErrorResumeNext<T2, T3, T4, T5, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<R>;\\nexport declare function onErrorResumeNext<T2, T3, T4, T5, T6, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<R>;\\nexport declare function onErrorResumeNext<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;\\nexport declare function onErrorResumeNext<R>(array: ObservableInput<any>[]): Observable<R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/pairs.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerAction, SchedulerLike } from '../types';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\n/**\\n * Convert an object into an Observable of `[key, value]` pairs.\\n *\\n * <span class=\\\"informal\\\">Turn entries of an object into a stream.</span>\\n *\\n * <img src=\\\"./img/pairs.png\\\" width=\\\"100%\\\">\\n *\\n * `pairs` takes an arbitrary object and returns an Observable that emits arrays. Each\\n * emitted array has exactly two elements - the first is a key from the object\\n * and the second is a value corresponding to that key. Keys are extracted from\\n * an object via `Object.keys` function, which means that they will be only\\n * enumerable keys that are present on an object directly - not ones inherited\\n * via prototype chain.\\n *\\n * By default these arrays are emitted synchronously. To change that you can\\n * pass a {@link SchedulerLike} as a second argument to `pairs`.\\n *\\n * @example <caption>Converts a javascript object to an Observable</caption>\\n * ```ts\\n * import { pairs } from 'rxjs';\\n *\\n * const obj = {\\n *   foo: 42,\\n *   bar: 56,\\n *   baz: 78\\n * };\\n *\\n * pairs(obj)\\n * .subscribe(\\n *   value => console.log(value),\\n *   err => {},\\n *   () => console.log('the end!')\\n * );\\n *\\n * // Logs:\\n * // [\\\"foo\\\", 42],\\n * // [\\\"bar\\\", 56],\\n * // [\\\"baz\\\", 78],\\n * // \\\"the end!\\\"\\n * ```\\n *\\n * @param {Object} obj The object to inspect and turn into an\\n * Observable sequence.\\n * @param {Scheduler} [scheduler] An optional IScheduler to schedule\\n * when resulting Observable will emit values.\\n * @returns {(Observable<Array<string|T>>)} An observable sequence of\\n * [key, value] pairs from the object.\\n */\\nexport declare function pairs<T>(obj: Object, scheduler?: SchedulerLike): Observable<[string, T]>;\\n/** @internal */\\nexport declare function dispatch<T>(this: SchedulerAction<any>, state: {\\n    keys: string[];\\n    index: number;\\n    subscriber: Subscriber<[string, T]>;\\n    subscription: Subscription;\\n    obj: Object;\\n}): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/partition.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput } from '../types';\\nimport { Observable } from '../Observable';\\n/**\\n * Splits the source Observable into two, one with values that satisfy a\\n * predicate, and another with values that don't satisfy the predicate.\\n *\\n * <span class=\\\"informal\\\">It's like {@link filter}, but returns two Observables:\\n * one like the output of {@link filter}, and the other with values that did not\\n * pass the condition.</span>\\n *\\n * ![](partition.png)\\n *\\n * `partition` outputs an array with two Observables that partition the values\\n * from the source Observable through the given `predicate` function. The first\\n * Observable in that array emits source values for which the predicate argument\\n * returns true. The second Observable emits source values for which the\\n * predicate returns false. The first behaves like {@link filter} and the second\\n * behaves like {@link filter} with the predicate negated.\\n *\\n * ## Example\\n * Partition a set of numbers into odds and evens observables\\n * ```ts\\n * import { of, partition } from 'rxjs';\\n *\\n * const observableValues = of(1, 2, 3, 4, 5, 6);\\n * const [evens$, odds$] = partition(observableValues, (value, index) => value % 2 === 0);\\n *\\n * odds$.subscribe(x => console.log('odds', x));\\n * evens$.subscribe(x => console.log('evens', x));\\n *\\n * // Logs:\\n * // odds 1\\n * // odds 3\\n * // odds 5\\n * // evens 2\\n * // evens 4\\n * // evens 6\\n * ```\\n *\\n * @see {@link filter}\\n *\\n * @param {function(value: T, index: number): boolean} predicate A function that\\n * evaluates each value emitted by the source Observable. If it returns `true`,\\n * the value is emitted on the first Observable in the returned array, if\\n * `false` the value is emitted on the second Observable in the array. The\\n * `index` parameter is the number `i` for the i-th source emission that has\\n * happened since the subscription, starting from the number `0`.\\n * @param {any} [thisArg] An optional argument to determine the value of `this`\\n * in the `predicate` function.\\n * @return {[Observable<T>, Observable<T>]} An array with two Observables: one\\n * with values that passed the predicate, and another with values that did not\\n * pass the predicate.\\n */\\nexport declare function partition<T>(source: ObservableInput<T>, predicate: (value: T, index: number) => boolean, thisArg?: any): [Observable<T>, Observable<T>];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/race.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { TeardownLogic, ObservableInput } from '../types';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { InnerSubscriber } from '../InnerSubscriber';\\nexport declare function race<A>(arg: [ObservableInput<A>]): Observable<A>;\\nexport declare function race<A, B>(arg: [ObservableInput<A>, ObservableInput<B>]): Observable<A | B>;\\nexport declare function race<A, B, C>(arg: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>]): Observable<A | B | C>;\\nexport declare function race<A, B, C, D>(arg: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>, ObservableInput<D>]): Observable<A | B | C | D>;\\nexport declare function race<A, B, C, D, E>(arg: [ObservableInput<A>, ObservableInput<B>, ObservableInput<C>, ObservableInput<D>, ObservableInput<E>]): Observable<A | B | C | D | E>;\\nexport declare function race<T>(arg: ObservableInput<T>[]): Observable<T>;\\nexport declare function race(arg: ObservableInput<any>[]): Observable<{}>;\\nexport declare function race<A>(a: ObservableInput<A>): Observable<A>;\\nexport declare function race<A, B>(a: ObservableInput<A>, b: ObservableInput<B>): Observable<A | B>;\\nexport declare function race<A, B, C>(a: ObservableInput<A>, b: ObservableInput<B>, c: ObservableInput<C>): Observable<A | B | C>;\\nexport declare function race<A, B, C, D>(a: ObservableInput<A>, b: ObservableInput<B>, c: ObservableInput<C>, d: ObservableInput<D>): Observable<A | B | C | D>;\\nexport declare function race<A, B, C, D, E>(a: ObservableInput<A>, b: ObservableInput<B>, c: ObservableInput<C>, d: ObservableInput<D>, e: ObservableInput<E>): Observable<A | B | C | D | E>;\\nexport declare function race<T>(observables: ObservableInput<T>[]): Observable<T>;\\nexport declare function race(observables: ObservableInput<any>[]): Observable<{}>;\\nexport declare function race<T>(...observables: ObservableInput<T>[]): Observable<T>;\\nexport declare function race(...observables: ObservableInput<any>[]): Observable<{}>;\\nexport declare class RaceOperator<T> implements Operator<T, T> {\\n    call(subscriber: Subscriber<T>, source: any): TeardownLogic;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class RaceSubscriber<T> extends OuterSubscriber<T, T> {\\n    private hasFirst;\\n    private observables;\\n    private subscriptions;\\n    constructor(destination: Subscriber<T>);\\n    protected _next(observable: any): void;\\n    protected _complete(): void;\\n    notifyNext(outerValue: T, innerValue: T, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, T>): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/range.d.ts\"\n    ],\n    \"content\": \"import { SchedulerAction, SchedulerLike } from '../types';\\nimport { Observable } from '../Observable';\\n/**\\n * Creates an Observable that emits a sequence of numbers within a specified\\n * range.\\n *\\n * <span class=\\\"informal\\\">Emits a sequence of numbers in a range.</span>\\n *\\n * ![](range.png)\\n *\\n * `range` operator emits a range of sequential integers, in order, where you\\n * select the `start` of the range and its `length`. By default, uses no\\n * {@link SchedulerLike} and just delivers the notifications synchronously, but may use\\n * an optional {@link SchedulerLike} to regulate those deliveries.\\n *\\n * ## Example\\n * Emits the numbers 1 to 10</caption>\\n * ```ts\\n * import { range } from 'rxjs';\\n *\\n * const numbers = range(1, 10);\\n * numbers.subscribe(x => console.log(x));\\n * ```\\n * @see {@link timer}\\n * @see {@link index/interval}\\n *\\n * @param {number} [start=0] The value of the first integer in the sequence.\\n * @param {number} count The number of sequential integers to generate.\\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling\\n * the emissions of the notifications.\\n * @return {Observable} An Observable of numbers that emits a finite range of\\n * sequential integers.\\n * @static true\\n * @name range\\n * @owner Observable\\n */\\nexport declare function range(start?: number, count?: number, scheduler?: SchedulerLike): Observable<number>;\\n/** @internal */\\nexport declare function dispatch(this: SchedulerAction<any>, state: any): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/SubscribeOnObservable.d.ts\"\n    ],\n    \"content\": \"import { SchedulerLike, SchedulerAction } from '../types';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\nimport { Observable } from '../Observable';\\nexport interface DispatchArg<T> {\\n    source: Observable<T>;\\n    subscriber: Subscriber<T>;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @extends {Ignored}\\n * @hide true\\n */\\nexport declare class SubscribeOnObservable<T> extends Observable<T> {\\n    source: Observable<T>;\\n    private delayTime;\\n    private scheduler;\\n    /** @nocollapse */\\n    static create<T>(source: Observable<T>, delay?: number, scheduler?: SchedulerLike): Observable<T>;\\n    /** @nocollapse */\\n    static dispatch<T>(this: SchedulerAction<T>, arg: DispatchArg<T>): Subscription;\\n    constructor(source: Observable<T>, delayTime?: number, scheduler?: SchedulerLike);\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/throwError.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\n/**\\n * Creates an Observable that emits no items to the Observer and immediately\\n * emits an error notification.\\n *\\n * <span class=\\\"informal\\\">Just emits 'error', and nothing else.\\n * </span>\\n *\\n * ![](throw.png)\\n *\\n * This static operator is useful for creating a simple Observable that only\\n * emits the error notification. It can be used for composing with other\\n * Observables, such as in a {@link mergeMap}.\\n *\\n * ## Examples\\n * ### Emit the number 7, then emit an error\\n * ```ts\\n * import { throwError, concat, of } from 'rxjs';\\n *\\n * const result = concat(of(7), throwError(new Error('oops!')));\\n * result.subscribe(x => console.log(x), e => console.error(e));\\n *\\n * // Logs:\\n * // 7\\n * // Error: oops!\\n * ```\\n *\\n * ---\\n *\\n * ### Map and flatten numbers to the sequence 'a', 'b', 'c', but throw an error for 2\\n * ```ts\\n * import { throwError, interval, of } from 'rxjs';\\n * import { mergeMap } from 'rxjs/operators';\\n *\\n * interval(1000).pipe(\\n *   mergeMap(x => x === 2\\n *     ? throwError('Twos are bad')\\n *     : of('a', 'b', 'c')\\n *   ),\\n * ).subscribe(x => console.log(x), e => console.error(e));\\n *\\n * // Logs:\\n * // a\\n * // b\\n * // c\\n * // a\\n * // b\\n * // c\\n * // Twos are bad\\n * ```\\n *\\n * @see {@link Observable}\\n * @see {@link empty}\\n * @see {@link never}\\n * @see {@link of}\\n *\\n * @param {any} error The particular Error to pass to the error notification.\\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling\\n * the emission of the error notification.\\n * @return {Observable} An error Observable: emits only the error notification\\n * using the given error argument.\\n * @static true\\n * @name throwError\\n * @owner Observable\\n */\\nexport declare function throwError(error: any, scheduler?: SchedulerLike): Observable<never>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/timer.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\n/**\\n * Creates an Observable that starts emitting after an `dueTime` and\\n * emits ever increasing numbers after each `period` of time thereafter.\\n *\\n * <span class=\\\"informal\\\">Its like {@link index/interval}, but you can specify when\\n * should the emissions start.</span>\\n *\\n * ![](timer.png)\\n *\\n * `timer` returns an Observable that emits an infinite sequence of ascending\\n * integers, with a constant interval of time, `period` of your choosing\\n * between those emissions. The first emission happens after the specified\\n * `dueTime`. The initial delay may be a `Date`. By default, this\\n * operator uses the {@link asyncScheduler} {@link SchedulerLike} to provide a notion of time, but you\\n * may pass any {@link SchedulerLike} to it. If `period` is not specified, the output\\n * Observable emits only one value, `0`. Otherwise, it emits an infinite\\n * sequence.\\n *\\n * ## Examples\\n * ### Emits ascending numbers, one every second (1000ms), starting after 3 seconds\\n * ```ts\\n * import { timer } from 'rxjs';\\n *\\n * const numbers = timer(3000, 1000);\\n * numbers.subscribe(x => console.log(x));\\n * ```\\n *\\n * ### Emits one number after five seconds\\n * ```ts\\n * import { timer } from 'rxjs';\\n *\\n * const numbers = timer(5000);\\n * numbers.subscribe(x => console.log(x));\\n * ```\\n * @see {@link index/interval}\\n * @see {@link delay}\\n *\\n * @param {number|Date} [dueTime] The initial delay time specified as a Date object or as an integer denoting\\n * milliseconds to wait before emitting the first value of 0`.\\n * @param {number|SchedulerLike} [periodOrScheduler] The period of time between emissions of the\\n * subsequent numbers.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for scheduling\\n * the emission of values, and providing a notion of \\\"time\\\".\\n * @return {Observable} An Observable that emits a `0` after the\\n * `dueTime` and ever increasing numbers after each `period` of time\\n * thereafter.\\n * @static true\\n * @name timer\\n * @owner Observable\\n */\\nexport declare function timer(dueTime?: number | Date, periodOrScheduler?: number | SchedulerLike, scheduler?: SchedulerLike): Observable<number>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/using.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { Unsubscribable, ObservableInput } from '../types';\\n/**\\n * Creates an Observable that uses a resource which will be disposed at the same time as the Observable.\\n *\\n * <span class=\\\"informal\\\">Use it when you catch yourself cleaning up after an Observable.</span>\\n *\\n * `using` is a factory operator, which accepts two functions. First function returns a disposable resource.\\n * It can be an arbitrary object that implements `unsubscribe` method. Second function will be injected with\\n * that object and should return an Observable. That Observable can use resource object during its execution.\\n * Both functions passed to `using` will be called every time someone subscribes - neither an Observable nor\\n * resource object will be shared in any way between subscriptions.\\n *\\n * When Observable returned by `using` is subscribed, Observable returned from the second function will be subscribed\\n * as well. All its notifications (nexted values, completion and error events) will be emitted unchanged by the output\\n * Observable. If however someone unsubscribes from the Observable or source Observable completes or errors by itself,\\n * the `unsubscribe` method on resource object will be called. This can be used to do any necessary clean up, which\\n * otherwise would have to be handled by hand. Note that complete or error notifications are not emitted when someone\\n * cancels subscription to an Observable via `unsubscribe`, so `using` can be used as a hook, allowing you to make\\n * sure that all resources which need to exist during an Observable execution will be disposed at appropriate time.\\n *\\n * @see {@link defer}\\n *\\n * @param {function(): ISubscription} resourceFactory A function which creates any resource object\\n * that implements `unsubscribe` method.\\n * @param {function(resource: ISubscription): Observable<T>} observableFactory A function which\\n * creates an Observable, that can use injected resource object.\\n * @return {Observable<T>} An Observable that behaves the same as Observable returned by `observableFactory`, but\\n * which - when completed, errored or unsubscribed - will also call `unsubscribe` on created resource object.\\n */\\nexport declare function using<T>(resourceFactory: () => Unsubscribable | void, observableFactory: (resource: Unsubscribable | void) => ObservableInput<T> | void): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/observable/zip.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { Operator } from '../Operator';\\nimport { ObservableInput, ObservedValueOf } from '../types';\\nimport { Subscriber } from '../Subscriber';\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O1 extends ObservableInput<any>, R>(v1: O1, resultSelector: (v1: ObservedValueOf<O1>) => R): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, R>(v1: O1, v2: O2, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>) => R): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>) => R): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, v4: O4, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>) => R): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>) => R): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>, R>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>, v6: ObservedValueOf<O6>) => R): Observable<R>;\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(v1: O1, v2: O2): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;\\nexport declare function zip<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;\\nexport declare function zip<O extends ObservableInput<any>>(array: O[]): Observable<ObservedValueOf<O>[]>;\\nexport declare function zip<R>(array: ObservableInput<any>[]): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<O extends ObservableInput<any>, R>(array: O[], resultSelector: (...values: ObservedValueOf<O>[]) => R): Observable<R>;\\n/** @deprecated resultSelector is no longer supported, pipe to map instead */\\nexport declare function zip<R>(array: ObservableInput<any>[], resultSelector: (...values: any[]) => R): Observable<R>;\\nexport declare function zip<O extends ObservableInput<any>>(...observables: O[]): Observable<ObservedValueOf<O>[]>;\\nexport declare function zip<O extends ObservableInput<any>, R>(...observables: Array<O | ((...values: ObservedValueOf<O>[]) => R)>): Observable<R>;\\nexport declare function zip<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;\\nexport declare class ZipOperator<T, R> implements Operator<T, R> {\\n    resultSelector: (...values: Array<any>) => R;\\n    constructor(resultSelector?: (...values: Array<any>) => R);\\n    call(subscriber: Subscriber<R>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class ZipSubscriber<T, R> extends Subscriber<T> {\\n    private values;\\n    private resultSelector;\\n    private iterators;\\n    private active;\\n    constructor(destination: Subscriber<R>, resultSelector?: (...values: Array<any>) => R, values?: any);\\n    protected _next(value: any): void;\\n    protected _complete(): void;\\n    notifyInactive(): void;\\n    checkIterators(): void;\\n    protected _tryresultSelector(args: any[]): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Observer.d.ts\"\n    ],\n    \"content\": \"import { Observer } from './types';\\nexport declare const empty: Observer<any>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Operator.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from './Subscriber';\\nimport { TeardownLogic } from './types';\\nexport interface Operator<T, R> {\\n    call(subscriber: Subscriber<R>, source: any): TeardownLogic;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/audit.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SubscribableOrPromise } from '../types';\\n/**\\n * Ignores source values for a duration determined by another Observable, then\\n * emits the most recent value from the source Observable, then repeats this\\n * process.\\n *\\n * <span class=\\\"informal\\\">It's like {@link auditTime}, but the silencing\\n * duration is determined by a second Observable.</span>\\n *\\n * ![](audit.png)\\n *\\n * `audit` is similar to `throttle`, but emits the last value from the silenced\\n * time window, instead of the first value. `audit` emits the most recent value\\n * from the source Observable on the output Observable as soon as its internal\\n * timer becomes disabled, and ignores source values while the timer is enabled.\\n * Initially, the timer is disabled. As soon as the first source value arrives,\\n * the timer is enabled by calling the `durationSelector` function with the\\n * source value, which returns the \\\"duration\\\" Observable. When the duration\\n * Observable emits a value or completes, the timer is disabled, then the most\\n * recent source value is emitted on the output Observable, and this process\\n * repeats for the next source value.\\n *\\n * ## Example\\n *\\n * Emit clicks at a rate of at most one click per second\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { audit } from 'rxjs/operators'\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(audit(ev => interval(1000)));\\n * result.subscribe(x => console.log(x));\\n * ```\\n * @see {@link auditTime}\\n * @see {@link debounce}\\n * @see {@link delayWhen}\\n * @see {@link sample}\\n * @see {@link throttle}\\n *\\n * @param {function(value: T): SubscribableOrPromise} durationSelector A function\\n * that receives a value from the source Observable, for computing the silencing\\n * duration, returned as an Observable or a Promise.\\n * @return {Observable<T>} An Observable that performs rate-limiting of\\n * emissions from the source Observable.\\n * @method audit\\n * @owner Observable\\n */\\nexport declare function audit<T>(durationSelector: (value: T) => SubscribableOrPromise<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/auditTime.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Ignores source values for `duration` milliseconds, then emits the most recent\\n * value from the source Observable, then repeats this process.\\n *\\n * <span class=\\\"informal\\\">When it sees a source value, it ignores that plus\\n * the next ones for `duration` milliseconds, and then it emits the most recent\\n * value from the source.</span>\\n *\\n * ![](auditTime.png)\\n *\\n * `auditTime` is similar to `throttleTime`, but emits the last value from the\\n * silenced time window, instead of the first value. `auditTime` emits the most\\n * recent value from the source Observable on the output Observable as soon as\\n * its internal timer becomes disabled, and ignores source values while the\\n * timer is enabled. Initially, the timer is disabled. As soon as the first\\n * source value arrives, the timer is enabled. After `duration` milliseconds (or\\n * the time unit determined internally by the optional `scheduler`) has passed,\\n * the timer is disabled, then the most recent source value is emitted on the\\n * output Observable, and this process repeats for the next source value.\\n * Optionally takes a {@link SchedulerLike} for managing timers.\\n *\\n * ## Example\\n *\\n * Emit clicks at a rate of at most one click per second\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { auditTime } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(auditTime(1000));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link audit}\\n * @see {@link debounceTime}\\n * @see {@link delay}\\n * @see {@link sampleTime}\\n * @see {@link throttleTime}\\n *\\n * @param {number} duration Time to wait before emitting the most recent source\\n * value, measured in milliseconds or the time unit determined internally\\n * by the optional `scheduler`.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\\n * managing the timers that handle the rate-limiting behavior.\\n * @return {Observable<T>} An Observable that performs rate-limiting of\\n * emissions from the source Observable.\\n * @method auditTime\\n * @owner Observable\\n */\\nexport declare function auditTime<T>(duration: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/buffer.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Buffers the source Observable values until `closingNotifier` emits.\\n *\\n * <span class=\\\"informal\\\">Collects values from the past as an array, and emits\\n * that array only when another Observable emits.</span>\\n *\\n * ![](content/img/buffer.png)\\n *\\n * Buffers the incoming Observable values until the given `closingNotifier`\\n * Observable emits a value, at which point it emits the buffer on the output\\n * Observable and starts a new buffer internally, awaiting the next time\\n * `closingNotifier` emits.\\n *\\n * ## Example\\n *\\n * On every click, emit array of most recent interval events\\n *\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { buffer } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const intervalEvents = interval(1000);\\n * const buffered = intervalEvents.pipe(buffer(clicks));\\n * buffered.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link bufferCount}\\n * @see {@link bufferTime}\\n * @see {@link bufferToggle}\\n * @see {@link bufferWhen}\\n * @see {@link window}\\n *\\n * @param {Observable<any>} closingNotifier An Observable that signals the\\n * buffer to be emitted on the output Observable.\\n * @return {Observable<T[]>} An Observable of buffers, which are arrays of\\n * values.\\n * @method buffer\\n * @owner Observable\\n */\\nexport declare function buffer<T>(closingNotifier: Observable<any>): OperatorFunction<T, T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/bufferCount.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\n/**\\n * Buffers the source Observable values until the size hits the maximum\\n * `bufferSize` given.\\n *\\n * <span class=\\\"informal\\\">Collects values from the past as an array, and emits\\n * that array only when its size reaches `bufferSize`.</span>\\n *\\n * ![](bufferCount.png)\\n *\\n * Buffers a number of values from the source Observable by `bufferSize` then\\n * emits the buffer and clears it, and starts a new buffer each\\n * `startBufferEvery` values. If `startBufferEvery` is not provided or is\\n * `null`, then new buffers are started immediately at the start of the source\\n * and when each buffer closes and is emitted.\\n *\\n * ## Examples\\n *\\n * Emit the last two click events as an array\\n *\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { bufferCount } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const buffered = clicks.pipe(bufferCount(2));\\n * buffered.subscribe(x => console.log(x));\\n * ```\\n *\\n * On every click, emit the last two click events as an array\\n *\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { bufferCount } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const buffered = clicks.pipe(bufferCount(2, 1));\\n * buffered.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link buffer}\\n * @see {@link bufferTime}\\n * @see {@link bufferToggle}\\n * @see {@link bufferWhen}\\n * @see {@link pairwise}\\n * @see {@link windowCount}\\n *\\n * @param {number} bufferSize The maximum size of the buffer emitted.\\n * @param {number} [startBufferEvery] Interval at which to start a new buffer.\\n * For example if `startBufferEvery` is `2`, then a new buffer will be started\\n * on every other value from the source. A new buffer is started at the\\n * beginning of the source by default.\\n * @return {Observable<T[]>} An Observable of arrays of buffered values.\\n * @method bufferCount\\n * @owner Observable\\n */\\nexport declare function bufferCount<T>(bufferSize: number, startBufferEvery?: number): OperatorFunction<T, T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/bufferTime.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, SchedulerLike } from '../types';\\nexport declare function bufferTime<T>(bufferTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction<T, T[]>;\\nexport declare function bufferTime<T>(bufferTimeSpan: number, bufferCreationInterval: number | null | undefined, scheduler?: SchedulerLike): OperatorFunction<T, T[]>;\\nexport declare function bufferTime<T>(bufferTimeSpan: number, bufferCreationInterval: number | null | undefined, maxBufferSize: number, scheduler?: SchedulerLike): OperatorFunction<T, T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/bufferToggle.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, SubscribableOrPromise } from '../types';\\n/**\\n * Buffers the source Observable values starting from an emission from\\n * `openings` and ending when the output of `closingSelector` emits.\\n *\\n * <span class=\\\"informal\\\">Collects values from the past as an array. Starts\\n * collecting only when `opening` emits, and calls the `closingSelector`\\n * function to get an Observable that tells when to close the buffer.</span>\\n *\\n * ![](bufferToggle.png)\\n *\\n * Buffers values from the source by opening the buffer via signals from an\\n * Observable provided to `openings`, and closing and sending the buffers when\\n * a Subscribable or Promise returned by the `closingSelector` function emits.\\n *\\n * ## Example\\n *\\n * Every other second, emit the click events from the next 500ms\\n *\\n * ```ts\\n * import { fromEvent, interval, EMPTY } from 'rxjs';\\n * import { bufferToggle } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const openings = interval(1000);\\n * const buffered = clicks.pipe(bufferToggle(openings, i =>\\n *   i % 2 ? interval(500) : EMPTY\\n * ));\\n * buffered.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link buffer}\\n * @see {@link bufferCount}\\n * @see {@link bufferTime}\\n * @see {@link bufferWhen}\\n * @see {@link windowToggle}\\n *\\n * @param {SubscribableOrPromise<O>} openings A Subscribable or Promise of notifications to start new\\n * buffers.\\n * @param {function(value: O): SubscribableOrPromise} closingSelector A function that takes\\n * the value emitted by the `openings` observable and returns a Subscribable or Promise,\\n * which, when it emits, signals that the associated buffer should be emitted\\n * and cleared.\\n * @return {Observable<T[]>} An observable of arrays of buffered values.\\n * @method bufferToggle\\n * @owner Observable\\n */\\nexport declare function bufferToggle<T, O>(openings: SubscribableOrPromise<O>, closingSelector: (value: O) => SubscribableOrPromise<any>): OperatorFunction<T, T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/bufferWhen.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Buffers the source Observable values, using a factory function of closing\\n * Observables to determine when to close, emit, and reset the buffer.\\n *\\n * <span class=\\\"informal\\\">Collects values from the past as an array. When it\\n * starts collecting values, it calls a function that returns an Observable that\\n * tells when to close the buffer and restart collecting.</span>\\n *\\n * ![](bufferWhen.png)\\n *\\n * Opens a buffer immediately, then closes the buffer when the observable\\n * returned by calling `closingSelector` function emits a value. When it closes\\n * the buffer, it immediately opens a new buffer and repeats the process.\\n *\\n * ## Example\\n *\\n * Emit an array of the last clicks every [1-5] random seconds\\n *\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { bufferWhen } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const buffered = clicks.pipe(bufferWhen(() =>\\n *   interval(1000 + Math.random() * 4000)\\n * ));\\n * buffered.subscribe(x => console.log(x));\\n * ```\\n *\\n *\\n * @see {@link buffer}\\n * @see {@link bufferCount}\\n * @see {@link bufferTime}\\n * @see {@link bufferToggle}\\n * @see {@link windowWhen}\\n *\\n * @param {function(): Observable} closingSelector A function that takes no\\n * arguments and returns an Observable that signals buffer closure.\\n * @return {Observable<T[]>} An observable of arrays of buffered values.\\n * @method bufferWhen\\n * @owner Observable\\n */\\nexport declare function bufferWhen<T>(closingSelector: () => Observable<any>): OperatorFunction<T, T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/catchError.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function catchError<T, O extends ObservableInput<any>>(selector: (err: any, caught: Observable<T>) => O): OperatorFunction<T, T | ObservedValueOf<O>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/combineAll.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, ObservableInput } from '../types';\\nexport declare function combineAll<T>(): OperatorFunction<ObservableInput<T>, T[]>;\\nexport declare function combineAll<T>(): OperatorFunction<any, T[]>;\\nexport declare function combineAll<T, R>(project: (...values: T[]) => R): OperatorFunction<ObservableInput<T>, R>;\\nexport declare function combineAll<R>(project: (...values: Array<any>) => R): OperatorFunction<any, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/combineLatest.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction } from '../types';\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, R>(project: (v1: T) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, R>(v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, T4, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, T4, T5, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, T4, T5, T6, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2>(v2: ObservableInput<T2>): OperatorFunction<T, [T, T2]>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): OperatorFunction<T, [T, T2, T3]>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): OperatorFunction<T, [T, T2, T3, T4]>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): OperatorFunction<T, [T, T2, T3, T4, T5]>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): OperatorFunction<T, [T, T2, T3, T4, T5, T6]>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, R>(...observables: Array<ObservableInput<T> | ((...values: Array<T>) => R)>): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, R>(array: ObservableInput<T>[]): OperatorFunction<T, Array<T>>;\\n/** @deprecated Deprecated in favor of static combineLatest. */\\nexport declare function combineLatest<T, TOther, R>(array: ObservableInput<TOther>[], project: (v1: T, ...values: Array<TOther>) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/concat.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T>(scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T, T2>(v2: ObservableInput<T2>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T, T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T, T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T, T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4 | T5>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T, T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4 | T5 | T6>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T>(...observables: Array<ObservableInput<T> | SchedulerLike>): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static concat. */\\nexport declare function concat<T, R>(...observables: Array<ObservableInput<any> | SchedulerLike>): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/concatAll.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, ObservableInput } from '../types';\\nexport declare function concatAll<T>(): OperatorFunction<ObservableInput<T>, T>;\\nexport declare function concatAll<R>(): OperatorFunction<any, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/concatMap.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function concatMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector no longer supported, use inner map instead */\\nexport declare function concatMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector no longer supported, use inner map instead */\\nexport declare function concatMap<T, R, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/concatMapTo.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function concatMapTo<T, O extends ObservableInput<any>>(observable: O): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated */\\nexport declare function concatMapTo<T, O extends ObservableInput<any>>(observable: O, resultSelector: undefined): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated */\\nexport declare function concatMapTo<T, R, O extends ObservableInput<any>>(observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/count.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Counts the number of emissions on the source and emits that number when the\\n * source completes.\\n *\\n * <span class=\\\"informal\\\">Tells how many values were emitted, when the source\\n * completes.</span>\\n *\\n * ![](count.png)\\n *\\n * `count` transforms an Observable that emits values into an Observable that\\n * emits a single value that represents the number of values emitted by the\\n * source Observable. If the source Observable terminates with an error, `count`\\n * will pass this error notification along without emitting a value first. If\\n * the source Observable does not terminate at all, `count` will neither emit\\n * a value nor terminate. This operator takes an optional `predicate` function\\n * as argument, in which case the output emission will represent the number of\\n * source values that matched `true` with the `predicate`.\\n *\\n * ## Examples\\n *\\n * Counts how many seconds have passed before the first click happened\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { count, takeUntil } from 'rxjs/operators';\\n *\\n * const seconds = interval(1000);\\n * const clicks = fromEvent(document, 'click');\\n * const secondsBeforeClick = seconds.pipe(takeUntil(clicks));\\n * const result = secondsBeforeClick.pipe(count());\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * Counts how many odd numbers are there between 1 and 7\\n * ```ts\\n * import { range } from 'rxjs';\\n * import { count } from 'rxjs/operators';\\n *\\n * const numbers = range(1, 7);\\n * const result = numbers.pipe(count(i => i % 2 === 1));\\n * result.subscribe(x => console.log(x));\\n * // Results in:\\n * // 4\\n * ```\\n *\\n * @see {@link max}\\n * @see {@link min}\\n * @see {@link reduce}\\n *\\n * @param {function(value: T, i: number, source: Observable<T>): boolean} [predicate] A\\n * boolean function to select what values are to be counted. It is provided with\\n * arguments of:\\n * - `value`: the value from the source Observable.\\n * - `index`: the (zero-based) \\\"index\\\" of the value from the source Observable.\\n * - `source`: the source Observable instance itself.\\n * @return {Observable} An Observable of one number that represents the count as\\n * described above.\\n * @method count\\n * @owner Observable\\n */\\nexport declare function count<T>(predicate?: (value: T, index: number, source: Observable<T>) => boolean): OperatorFunction<T, number>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/debounce.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SubscribableOrPromise } from '../types';\\n/**\\n * Emits a value from the source Observable only after a particular time span\\n * determined by another Observable has passed without another source emission.\\n *\\n * <span class=\\\"informal\\\">It's like {@link debounceTime}, but the time span of\\n * emission silence is determined by a second Observable.</span>\\n *\\n * ![](debounce.png)\\n *\\n * `debounce` delays values emitted by the source Observable, but drops previous\\n * pending delayed emissions if a new value arrives on the source Observable.\\n * This operator keeps track of the most recent value from the source\\n * Observable, and spawns a duration Observable by calling the\\n * `durationSelector` function. The value is emitted only when the duration\\n * Observable emits a value or completes, and if no other value was emitted on\\n * the source Observable since the duration Observable was spawned. If a new\\n * value appears before the duration Observable emits, the previous value will\\n * be dropped and will not be emitted on the output Observable.\\n *\\n * Like {@link debounceTime}, this is a rate-limiting operator, and also a\\n * delay-like operator since output emissions do not necessarily occur at the\\n * same time as they did on the source Observable.\\n *\\n * ## Example\\n * Emit the most recent click after a burst of clicks\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { debounce } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(debounce(() => interval(1000)));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link audit}\\n * @see {@link debounceTime}\\n * @see {@link delayWhen}\\n * @see {@link throttle}\\n *\\n * @param {function(value: T): SubscribableOrPromise} durationSelector A function\\n * that receives a value from the source Observable, for computing the timeout\\n * duration for each source value, returned as an Observable or a Promise.\\n * @return {Observable} An Observable that delays the emissions of the source\\n * Observable by the specified duration Observable returned by\\n * `durationSelector`, and may drop some values if they occur too frequently.\\n * @method debounce\\n * @owner Observable\\n */\\nexport declare function debounce<T>(durationSelector: (value: T) => SubscribableOrPromise<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/debounceTime.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Emits a value from the source Observable only after a particular time span\\n * has passed without another source emission.\\n *\\n * <span class=\\\"informal\\\">It's like {@link delay}, but passes only the most\\n * recent value from each burst of emissions.</span>\\n *\\n * ![](debounceTime.png)\\n *\\n * `debounceTime` delays values emitted by the source Observable, but drops\\n * previous pending delayed emissions if a new value arrives on the source\\n * Observable. This operator keeps track of the most recent value from the\\n * source Observable, and emits that only when `dueTime` enough time has passed\\n * without any other value appearing on the source Observable. If a new value\\n * appears before `dueTime` silence occurs, the previous value will be dropped\\n * and will not be emitted on the output Observable.\\n *\\n * This is a rate-limiting operator, because it is impossible for more than one\\n * value to be emitted in any time window of duration `dueTime`, but it is also\\n * a delay-like operator since output emissions do not occur at the same time as\\n * they did on the source Observable. Optionally takes a {@link SchedulerLike} for\\n * managing timers.\\n *\\n * ## Example\\n * Emit the most recent click after a burst of clicks\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { debounceTime } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(debounceTime(1000));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link auditTime}\\n * @see {@link debounce}\\n * @see {@link delay}\\n * @see {@link sampleTime}\\n * @see {@link throttleTime}\\n *\\n * @param {number} dueTime The timeout duration in milliseconds (or the time\\n * unit determined internally by the optional `scheduler`) for the window of\\n * time required to wait for emission silence before emitting the most recent\\n * source value.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\\n * managing the timers that handle the timeout for each value.\\n * @return {Observable} An Observable that delays the emissions of the source\\n * Observable by the specified `dueTime`, and may drop some values if they occur\\n * too frequently.\\n * @method debounceTime\\n * @owner Observable\\n */\\nexport declare function debounceTime<T>(dueTime: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/defaultIfEmpty.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, MonoTypeOperatorFunction } from '../types';\\nexport declare function defaultIfEmpty<T>(defaultValue?: T): MonoTypeOperatorFunction<T>;\\nexport declare function defaultIfEmpty<T, R>(defaultValue?: R): OperatorFunction<T, T | R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/delay.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Delays the emission of items from the source Observable by a given timeout or\\n * until a given Date.\\n *\\n * <span class=\\\"informal\\\">Time shifts each item by some specified amount of\\n * milliseconds.</span>\\n *\\n * ![](delay.png)\\n *\\n * If the delay argument is a Number, this operator time shifts the source\\n * Observable by that amount of time expressed in milliseconds. The relative\\n * time intervals between the values are preserved.\\n *\\n * If the delay argument is a Date, this operator time shifts the start of the\\n * Observable execution until the given date occurs.\\n *\\n * ## Examples\\n * Delay each click by one second\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { delay } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const delayedClicks = clicks.pipe(delay(1000)); // each click emitted after 1 second\\n * delayedClicks.subscribe(x => console.log(x));\\n * ```\\n *\\n * Delay all clicks until a future date happens\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { delay } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const date = new Date('March 15, 2050 12:00:00'); // in the future\\n * const delayedClicks = clicks.pipe(delay(date)); // click emitted only after that date\\n * delayedClicks.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link debounceTime}\\n * @see {@link delayWhen}\\n *\\n * @param {number|Date} delay The delay duration in milliseconds (a `number`) or\\n * a `Date` until which the emission of the source items is delayed.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\\n * managing the timers that handle the time-shift for each item.\\n * @return {Observable} An Observable that delays the emissions of the source\\n * Observable by the specified timeout or Date.\\n * @method delay\\n * @owner Observable\\n */\\nexport declare function delay<T>(delay: number | Date, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/delayWhen.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/** @deprecated In future versions, empty notifiers will no longer re-emit the source value on the output observable. */\\nexport declare function delayWhen<T>(delayDurationSelector: (value: T, index: number) => Observable<never>, subscriptionDelay?: Observable<any>): MonoTypeOperatorFunction<T>;\\nexport declare function delayWhen<T>(delayDurationSelector: (value: T, index: number) => Observable<any>, subscriptionDelay?: Observable<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/dematerialize.d.ts\"\n    ],\n    \"content\": \"import { Notification } from '../Notification';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Converts an Observable of {@link Notification} objects into the emissions\\n * that they represent.\\n *\\n * <span class=\\\"informal\\\">Unwraps {@link Notification} objects as actual `next`,\\n * `error` and `complete` emissions. The opposite of {@link materialize}.</span>\\n *\\n * ![](dematerialize.png)\\n *\\n * `dematerialize` is assumed to operate an Observable that only emits\\n * {@link Notification} objects as `next` emissions, and does not emit any\\n * `error`. Such Observable is the output of a `materialize` operation. Those\\n * notifications are then unwrapped using the metadata they contain, and emitted\\n * as `next`, `error`, and `complete` on the output Observable.\\n *\\n * Use this operator in conjunction with {@link materialize}.\\n *\\n * ## Example\\n * Convert an Observable of Notifications to an actual Observable\\n * ```ts\\n * import { of, Notification } from 'rxjs';\\n * import { dematerialize } from 'rxjs/operators';\\n *\\n * const notifA = new Notification('N', 'A');\\n * const notifB = new Notification('N', 'B');\\n * const notifE = new Notification('E', undefined,\\n *   new TypeError('x.toUpperCase is not a function')\\n * );\\n * const materialized = of(notifA, notifB, notifE);\\n * const upperCase = materialized.pipe(dematerialize());\\n * upperCase.subscribe(x => console.log(x), e => console.error(e));\\n *\\n * // Results in:\\n * // A\\n * // B\\n * // TypeError: x.toUpperCase is not a function\\n * ```\\n *\\n * @see {@link Notification}\\n * @see {@link materialize}\\n *\\n * @return {Observable} An Observable that emits items and notifications\\n * embedded in Notification objects emitted by the source Observable.\\n * @method dematerialize\\n * @owner Observable\\n */\\nexport declare function dematerialize<T>(): OperatorFunction<Notification<T>, T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/distinct.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { Subscriber } from '../Subscriber';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { InnerSubscriber } from '../InnerSubscriber';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.\\n *\\n * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will\\n * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the\\n * source observable directly with an equality check against previous values.\\n *\\n * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.\\n *\\n * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the\\n * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`\\n * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so\\n * that the internal `Set` can be \\\"flushed\\\", basically clearing it of values.\\n *\\n * ## Examples\\n * A simple example with numbers\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { distinct } from 'rxjs/operators';\\n *\\n * of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1).pipe(\\n *     distinct(),\\n *   )\\n *   .subscribe(x => console.log(x)); // 1, 2, 3, 4\\n * ```\\n *\\n * An example using a keySelector function\\n * ```typescript\\n * import { of } from 'rxjs';\\n * import { distinct } from 'rxjs/operators';\\n *\\n * interface Person {\\n *    age: number,\\n *    name: string\\n * }\\n *\\n * of<Person>(\\n *     { age: 4, name: 'Foo'},\\n *     { age: 7, name: 'Bar'},\\n *     { age: 5, name: 'Foo'},\\n *   ).pipe(\\n *     distinct((p: Person) => p.name),\\n *   )\\n *   .subscribe(x => console.log(x));\\n *\\n * // displays:\\n * // { age: 4, name: 'Foo' }\\n * // { age: 7, name: 'Bar' }\\n * ```\\n * @see {@link distinctUntilChanged}\\n * @see {@link distinctUntilKeyChanged}\\n *\\n * @param {function} [keySelector] Optional function to select which value you want to check as distinct.\\n * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.\\n * @return {Observable} An Observable that emits items from the source Observable with distinct values.\\n * @method distinct\\n * @owner Observable\\n */\\nexport declare function distinct<T, K>(keySelector?: (value: T) => K, flushes?: Observable<any>): MonoTypeOperatorFunction<T>;\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class DistinctSubscriber<T, K> extends OuterSubscriber<T, T> {\\n    private keySelector;\\n    private values;\\n    constructor(destination: Subscriber<T>, keySelector: (value: T) => K, flushes: Observable<any>);\\n    notifyNext(outerValue: T, innerValue: T, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, T>): void;\\n    notifyError(error: any, innerSub: InnerSubscriber<T, T>): void;\\n    protected _next(value: T): void;\\n    private _useKeySelector;\\n    private _finalizeNext;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/distinctUntilChanged.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\nexport declare function distinctUntilChanged<T>(compare?: (x: T, y: T) => boolean): MonoTypeOperatorFunction<T>;\\nexport declare function distinctUntilChanged<T, K>(compare: (x: K, y: K) => boolean, keySelector: (x: T) => K): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/distinctUntilKeyChanged.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\nexport declare function distinctUntilKeyChanged<T>(key: keyof T): MonoTypeOperatorFunction<T>;\\nexport declare function distinctUntilKeyChanged<T, K extends keyof T>(key: K, compare: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/elementAt.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Emits the single value at the specified `index` in a sequence of emissions\\n * from the source Observable.\\n *\\n * <span class=\\\"informal\\\">Emits only the i-th value, then completes.</span>\\n *\\n * ![](elementAt.png)\\n *\\n * `elementAt` returns an Observable that emits the item at the specified\\n * `index` in the source Observable, or a default value if that `index` is out\\n * of range and the `default` argument is provided. If the `default` argument is\\n * not given and the `index` is out of range, the output Observable will emit an\\n * `ArgumentOutOfRangeError` error.\\n *\\n * ## Example\\n * Emit only the third click event\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { elementAt } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(elementAt(2));\\n * result.subscribe(x => console.log(x));\\n *\\n * // Results in:\\n * // click 1 = nothing\\n * // click 2 = nothing\\n * // click 3 = MouseEvent object logged to console\\n * ```\\n *\\n * @see {@link first}\\n * @see {@link last}\\n * @see {@link skip}\\n * @see {@link single}\\n * @see {@link take}\\n *\\n * @throws {ArgumentOutOfRangeError} When using `elementAt(i)`, it delivers an\\n * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0` or the\\n * Observable has completed before emitting the i-th `next` notification.\\n *\\n * @param {number} index Is the number `i` for the i-th source emission that has\\n * happened since the subscription, starting from the number `0`.\\n * @param {T} [defaultValue] The default value returned for missing indices.\\n * @return {Observable} An Observable that emits a single item, if it is found.\\n * Otherwise, will emit the default value if given. If not, then emits an error.\\n * @method elementAt\\n * @owner Observable\\n */\\nexport declare function elementAt<T>(index: number, defaultValue?: T): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/endWith.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike, OperatorFunction } from '../types';\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T>(scheduler: SchedulerLike): MonoTypeOperatorFunction<T>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, A>(v1: A, scheduler: SchedulerLike): OperatorFunction<T, T | A>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, A, B>(v1: A, v2: B, scheduler: SchedulerLike): OperatorFunction<T, T | A | B>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, A, B, C>(v1: A, v2: B, v3: C, scheduler: SchedulerLike): OperatorFunction<T, T | A | B | C>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, A, B, C, D>(v1: A, v2: B, v3: C, v4: D, scheduler: SchedulerLike): OperatorFunction<T, T | A | B | C | D>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, A, B, C, D, E>(v1: A, v2: B, v3: C, v4: D, v5: E, scheduler: SchedulerLike): OperatorFunction<T, T | A | B | C | D | E>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, A, B, C, D, E, F>(v1: A, v2: B, v3: C, v4: D, v5: E, v6: F, scheduler: SchedulerLike): OperatorFunction<T, T | A | B | C | D | E | F>;\\nexport declare function endWith<T, A>(v1: A): OperatorFunction<T, T | A>;\\nexport declare function endWith<T, A, B>(v1: A, v2: B): OperatorFunction<T, T | A | B>;\\nexport declare function endWith<T, A, B, C>(v1: A, v2: B, v3: C): OperatorFunction<T, T | A | B | C>;\\nexport declare function endWith<T, A, B, C, D>(v1: A, v2: B, v3: C, v4: D): OperatorFunction<T, T | A | B | C | D>;\\nexport declare function endWith<T, A, B, C, D, E>(v1: A, v2: B, v3: C, v4: D, v5: E): OperatorFunction<T, T | A | B | C | D | E>;\\nexport declare function endWith<T, A, B, C, D, E, F>(v1: A, v2: B, v3: C, v4: D, v5: E, v6: F): OperatorFunction<T, T | A | B | C | D | E | F>;\\nexport declare function endWith<T, Z = T>(...array: Z[]): OperatorFunction<T, T | Z>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([source, [a, b, c]], scheduler).pipe(concatAll())`) */\\nexport declare function endWith<T, Z = T>(...array: Array<Z | SchedulerLike>): OperatorFunction<T, T | Z>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/every.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.\\n *\\n * ## Example\\n * A simple example emitting true if all elements are less than 5, false otherwise\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { every } from 'rxjs/operators';\\n *\\n *  of(1, 2, 3, 4, 5, 6).pipe(\\n *     every(x => x < 5),\\n * )\\n * .subscribe(x => console.log(x)); // -> false\\n * ```\\n *\\n * @param {function} predicate A function for determining if an item meets a specified condition.\\n * @param {any} [thisArg] Optional object to use for `this` in the callback.\\n * @return {Observable} An Observable of booleans that determines if all items of the source Observable meet the condition specified.\\n * @method every\\n * @owner Observable\\n */\\nexport declare function every<T>(predicate: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): OperatorFunction<T, boolean>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/exhaust.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction } from '../types';\\nexport declare function exhaust<T>(): OperatorFunction<ObservableInput<T>, T>;\\nexport declare function exhaust<R>(): OperatorFunction<any, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/exhaustMap.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function exhaustMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector is no longer supported. Use inner map instead. */\\nexport declare function exhaustMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector is no longer supported. Use inner map instead. */\\nexport declare function exhaustMap<T, I, R>(project: (value: T, index: number) => ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/expand.d.ts\"\n    ],\n    \"content\": \"import { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { InnerSubscriber } from '../InnerSubscriber';\\nimport { MonoTypeOperatorFunction, OperatorFunction, ObservableInput, SchedulerLike } from '../types';\\nexport declare function expand<T, R>(project: (value: T, index: number) => ObservableInput<R>, concurrent?: number, scheduler?: SchedulerLike): OperatorFunction<T, R>;\\nexport declare function expand<T>(project: (value: T, index: number) => ObservableInput<T>, concurrent?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\nexport declare class ExpandOperator<T, R> implements Operator<T, R> {\\n    private project;\\n    private concurrent;\\n    private scheduler;\\n    constructor(project: (value: T, index: number) => ObservableInput<R>, concurrent: number, scheduler: SchedulerLike);\\n    call(subscriber: Subscriber<R>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class ExpandSubscriber<T, R> extends OuterSubscriber<T, R> {\\n    private project;\\n    private concurrent;\\n    private scheduler;\\n    private index;\\n    private active;\\n    private hasCompleted;\\n    private buffer;\\n    constructor(destination: Subscriber<R>, project: (value: T, index: number) => ObservableInput<R>, concurrent: number, scheduler: SchedulerLike);\\n    private static dispatch;\\n    protected _next(value: any): void;\\n    private subscribeToProjection;\\n    protected _complete(): void;\\n    notifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, R>): void;\\n    notifyComplete(innerSub: Subscription): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/filter.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, MonoTypeOperatorFunction } from '../types';\\nexport declare function filter<T, S extends T>(predicate: (value: T, index: number) => value is S, thisArg?: any): OperatorFunction<T, S>;\\nexport declare function filter<T>(predicate: (value: T, index: number) => boolean, thisArg?: any): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/finalize.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\\n * the source terminates on complete or error.\\n * @param {function} callback Function to be called when source terminates.\\n * @return {Observable} An Observable that mirrors the source, but will call the specified function on termination.\\n * @method finally\\n * @owner Observable\\n */\\nexport declare function finalize<T>(callback: () => void): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/find.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { OperatorFunction } from '../types';\\nexport declare function find<T, S extends T>(predicate: (value: T, index: number, source: Observable<T>) => value is S, thisArg?: any): OperatorFunction<T, S | undefined>;\\nexport declare function find<T>(predicate: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): OperatorFunction<T, T | undefined>;\\nexport declare class FindValueOperator<T> implements Operator<T, T | number | undefined> {\\n    private predicate;\\n    private source;\\n    private yieldIndex;\\n    private thisArg?;\\n    constructor(predicate: (value: T, index: number, source: Observable<T>) => boolean, source: Observable<T>, yieldIndex: boolean, thisArg?: any);\\n    call(observer: Subscriber<T>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class FindValueSubscriber<T> extends Subscriber<T> {\\n    private predicate;\\n    private source;\\n    private yieldIndex;\\n    private thisArg?;\\n    private index;\\n    constructor(destination: Subscriber<T>, predicate: (value: T, index: number, source: Observable<T>) => boolean, source: Observable<T>, yieldIndex: boolean, thisArg?: any);\\n    private notifyComplete;\\n    protected _next(value: T): void;\\n    protected _complete(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/findIndex.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Emits only the index of the first value emitted by the source Observable that\\n * meets some condition.\\n *\\n * <span class=\\\"informal\\\">It's like {@link find}, but emits the index of the\\n * found value, not the value itself.</span>\\n *\\n * ![](findIndex.png)\\n *\\n * `findIndex` searches for the first item in the source Observable that matches\\n * the specified condition embodied by the `predicate`, and returns the\\n * (zero-based) index of the first occurrence in the source. Unlike\\n * {@link first}, the `predicate` is required in `findIndex`, and does not emit\\n * an error if a valid value is not found.\\n *\\n * ## Example\\n * Emit the index of first click that happens on a DIV element\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { findIndex } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(findIndex(ev => ev.target.tagName === 'DIV'));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link filter}\\n * @see {@link find}\\n * @see {@link first}\\n * @see {@link take}\\n *\\n * @param {function(value: T, index: number, source: Observable<T>): boolean} predicate\\n * A function called with each item to test for condition matching.\\n * @param {any} [thisArg] An optional argument to determine the value of `this`\\n * in the `predicate` function.\\n * @return {Observable} An Observable of the index of the first item that\\n * matches the condition.\\n * @method find\\n * @owner Observable\\n */\\nexport declare function findIndex<T>(predicate: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): OperatorFunction<T, number>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/first.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../../internal/types';\\nexport declare function first<T, D = T>(predicate?: null, defaultValue?: D): OperatorFunction<T, T | D>;\\nexport declare function first<T, S extends T>(predicate: (value: T, index: number, source: Observable<T>) => value is S, defaultValue?: S): OperatorFunction<T, S>;\\nexport declare function first<T, D = T>(predicate: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: D): OperatorFunction<T, T | D>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/groupBy.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\nimport { Observable } from '../Observable';\\nimport { Subject } from '../Subject';\\nimport { OperatorFunction } from '../types';\\nexport declare function groupBy<T, K>(keySelector: (value: T) => K): OperatorFunction<T, GroupedObservable<K, T>>;\\nexport declare function groupBy<T, K>(keySelector: (value: T) => K, elementSelector: void, durationSelector: (grouped: GroupedObservable<K, T>) => Observable<any>): OperatorFunction<T, GroupedObservable<K, T>>;\\nexport declare function groupBy<T, K, R>(keySelector: (value: T) => K, elementSelector?: (value: T) => R, durationSelector?: (grouped: GroupedObservable<K, R>) => Observable<any>): OperatorFunction<T, GroupedObservable<K, R>>;\\nexport declare function groupBy<T, K, R>(keySelector: (value: T) => K, elementSelector?: (value: T) => R, durationSelector?: (grouped: GroupedObservable<K, R>) => Observable<any>, subjectSelector?: () => Subject<R>): OperatorFunction<T, GroupedObservable<K, R>>;\\nexport interface RefCountSubscription {\\n    count: number;\\n    unsubscribe: () => void;\\n    closed: boolean;\\n    attemptedToUnsubscribe: boolean;\\n}\\n/**\\n * An Observable representing values belonging to the same group represented by\\n * a common key. The values emitted by a GroupedObservable come from the source\\n * Observable. The common key is available as the field `key` on a\\n * GroupedObservable instance.\\n *\\n * @class GroupedObservable<K, T>\\n */\\nexport declare class GroupedObservable<K, T> extends Observable<T> {\\n    key: K;\\n    private groupSubject;\\n    private refCountSubscription?;\\n    /** @deprecated Do not construct this type. Internal use only */\\n    constructor(key: K, groupSubject: Subject<T>, refCountSubscription?: RefCountSubscription);\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/ignoreElements.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\n/**\\n * Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.\\n *\\n * ![](ignoreElements.png)\\n *\\n * ## Examples\\n * ### Ignores emitted values, reacts to observable's completion.\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { ignoreElements } from 'rxjs/operators';\\n *\\n * of('you', 'talking', 'to', 'me').pipe(\\n *   ignoreElements(),\\n * )\\n * .subscribe(\\n *   word => console.log(word),\\n *   err => console.log('error:', err),\\n *   () => console.log('the end'),\\n * );\\n * // result:\\n * // 'the end'\\n * ```\\n * @return {Observable} An empty Observable that only calls `complete`\\n * or `error`, based on which one is called by the source Observable.\\n * @method ignoreElements\\n * @owner Observable\\n */\\nexport declare function ignoreElements(): OperatorFunction<any, never>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/index.d.ts\",\n      \"node_modules/rxjs/internal/operators/index.d.ts\"\n    ],\n    \"content\": \"export { audit } from './audit';\\nexport { auditTime } from './auditTime';\\nexport { buffer } from './buffer';\\nexport { bufferCount } from './bufferCount';\\nexport { bufferTime } from './bufferTime';\\nexport { bufferToggle } from './bufferToggle';\\nexport { bufferWhen } from './bufferWhen';\\nexport { catchError } from './catchError';\\nexport { combineAll } from './combineAll';\\nexport { combineLatest } from './combineLatest';\\nexport { concat } from './concat';\\nexport { concatAll } from './concatAll';\\nexport { concatMap } from './concatMap';\\nexport { concatMapTo } from './concatMapTo';\\nexport { count } from './count';\\nexport { debounce } from './debounce';\\nexport { debounceTime } from './debounceTime';\\nexport { defaultIfEmpty } from './defaultIfEmpty';\\nexport { delay } from './delay';\\nexport { delayWhen } from './delayWhen';\\nexport { dematerialize } from './dematerialize';\\nexport { distinct } from './distinct';\\nexport { distinctUntilChanged } from './distinctUntilChanged';\\nexport { distinctUntilKeyChanged } from './distinctUntilKeyChanged';\\nexport { elementAt } from './elementAt';\\nexport { every } from './every';\\nexport { exhaust } from './exhaust';\\nexport { exhaustMap } from './exhaustMap';\\nexport { expand } from './expand';\\nexport { filter } from './filter';\\nexport { finalize } from './finalize';\\nexport { find } from './find';\\nexport { findIndex } from './findIndex';\\nexport { first } from './first';\\nexport { groupBy } from './groupBy';\\nexport { ignoreElements } from './ignoreElements';\\nexport { isEmpty } from './isEmpty';\\nexport { last } from './last';\\nexport { map } from './map';\\nexport { mapTo } from './mapTo';\\nexport { materialize } from './materialize';\\nexport { max } from './max';\\nexport { merge } from './merge';\\nexport { mergeAll } from './mergeAll';\\nexport { mergeMap } from './mergeMap';\\nexport { mergeMap as flatMap } from './mergeMap';\\nexport { mergeMapTo } from './mergeMapTo';\\nexport { mergeScan } from './mergeScan';\\nexport { min } from './min';\\nexport { multicast } from './multicast';\\nexport { observeOn } from './observeOn';\\nexport { onErrorResumeNext } from './onErrorResumeNext';\\nexport { pairwise } from './pairwise';\\nexport { partition } from './partition';\\nexport { pluck } from './pluck';\\nexport { publish } from './publish';\\nexport { publishBehavior } from './publishBehavior';\\nexport { publishLast } from './publishLast';\\nexport { publishReplay } from './publishReplay';\\nexport { race } from './race';\\nexport { reduce } from './reduce';\\nexport { repeat } from './repeat';\\nexport { repeatWhen } from './repeatWhen';\\nexport { retry } from './retry';\\nexport { retryWhen } from './retryWhen';\\nexport { refCount } from './refCount';\\nexport { sample } from './sample';\\nexport { sampleTime } from './sampleTime';\\nexport { scan } from './scan';\\nexport { sequenceEqual } from './sequenceEqual';\\nexport { share } from './share';\\nexport { shareReplay } from './shareReplay';\\nexport { single } from './single';\\nexport { skip } from './skip';\\nexport { skipLast } from './skipLast';\\nexport { skipUntil } from './skipUntil';\\nexport { skipWhile } from './skipWhile';\\nexport { startWith } from './startWith';\\nexport { subscribeOn } from './subscribeOn';\\nexport { switchAll } from './switchAll';\\nexport { switchMap } from './switchMap';\\nexport { switchMapTo } from './switchMapTo';\\nexport { take } from './take';\\nexport { takeLast } from './takeLast';\\nexport { takeUntil } from './takeUntil';\\nexport { takeWhile } from './takeWhile';\\nexport { tap } from './tap';\\nexport { throttle } from './throttle';\\nexport { throttleTime } from './throttleTime';\\nexport { timeInterval } from './timeInterval';\\nexport { timeout } from './timeout';\\nexport { timeoutWith } from './timeoutWith';\\nexport { timestamp } from './timestamp';\\nexport { toArray } from './toArray';\\nexport { window } from './window';\\nexport { windowCount } from './windowCount';\\nexport { windowTime } from './windowTime';\\nexport { windowToggle } from './windowToggle';\\nexport { windowWhen } from './windowWhen';\\nexport { withLatestFrom } from './withLatestFrom';\\nexport { zip } from './zip';\\nexport { zipAll } from './zipAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/isEmpty.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\n/**\\n * Emits false if the input observable emits any values, or emits true if the\\n * input observable completes without emitting any values.\\n *\\n * <span class=\\\"informal\\\">Tells whether any values are emitted by an observable</span>\\n *\\n * ![](isEmpty.png)\\n *\\n * `isEmpty` transforms an Observable that emits values into an Observable that\\n * emits a single boolean value representing whether or not any values were\\n * emitted by the source Observable. As soon as the source Observable emits a\\n * value, `isEmpty` will emit a `false` and complete.  If the source Observable\\n * completes having not emitted anything, `isEmpty` will emit a `true` and\\n * complete.\\n *\\n * A similar effect could be achieved with {@link count}, but `isEmpty` can emit\\n * a `false` value sooner.\\n *\\n * ## Examples\\n *\\n * Emit `false` for a non-empty Observable\\n * ```javascript\\n * import { Subject } from 'rxjs';\\n * import { isEmpty } from 'rxjs/operators';\\n *\\n * const source = new Subject<string>();\\n * const result = source.pipe(isEmpty());\\n * source.subscribe(x => console.log(x));\\n * result.subscribe(x => console.log(x));\\n * source.next('a');\\n * source.next('b');\\n * source.next('c');\\n * source.complete();\\n *\\n * // Results in:\\n * // a\\n * // false\\n * // b\\n * // c\\n * ```\\n *\\n * Emit `true` for an empty Observable\\n * ```javascript\\n * import { EMPTY } from 'rxjs';\\n * import { isEmpty } from 'rxjs/operators';\\n *\\n * const result = EMPTY.pipe(isEmpty());\\n * result.subscribe(x => console.log(x));\\n * // Results in:\\n * // true\\n * ```\\n *\\n * @see {@link count}\\n * @see {@link EMPTY}\\n *\\n * @return {OperatorFunction<T, boolean>} An Observable of a boolean value indicating whether observable was empty or not\\n * @method isEmpty\\n * @owner Observable\\n */\\nexport declare function isEmpty<T>(): OperatorFunction<T, boolean>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/last.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../../internal/types';\\nexport declare function last<T, D = T>(predicate?: null, defaultValue?: D): OperatorFunction<T, T | D>;\\nexport declare function last<T, S extends T>(predicate: (value: T, index: number, source: Observable<T>) => value is S, defaultValue?: S): OperatorFunction<T, S>;\\nexport declare function last<T, D = T>(predicate: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: D): OperatorFunction<T, T | D>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/map.d.ts\"\n    ],\n    \"content\": \"import { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Applies a given `project` function to each value emitted by the source\\n * Observable, and emits the resulting values as an Observable.\\n *\\n * <span class=\\\"informal\\\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\\n * it passes each source value through a transformation function to get\\n * corresponding output values.</span>\\n *\\n * ![](map.png)\\n *\\n * Similar to the well known `Array.prototype.map` function, this operator\\n * applies a projection to each value and emits that projection in the output\\n * Observable.\\n *\\n * ## Example\\n * Map every click to the clientX position of that click\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { map } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const positions = clicks.pipe(map(ev => ev.clientX));\\n * positions.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link mapTo}\\n * @see {@link pluck}\\n *\\n * @param {function(value: T, index: number): R} project The function to apply\\n * to each `value` emitted by the source Observable. The `index` parameter is\\n * the number `i` for the i-th emission that has happened since the\\n * subscription, starting from the number `0`.\\n * @param {any} [thisArg] An optional argument to define what `this` is in the\\n * `project` function.\\n * @return {Observable<R>} An Observable that emits the values from the source\\n * Observable transformed by the given `project` function.\\n * @method map\\n * @owner Observable\\n */\\nexport declare function map<T, R>(project: (value: T, index: number) => R, thisArg?: any): OperatorFunction<T, R>;\\nexport declare class MapOperator<T, R> implements Operator<T, R> {\\n    private project;\\n    private thisArg;\\n    constructor(project: (value: T, index: number) => R, thisArg: any);\\n    call(subscriber: Subscriber<R>, source: any): any;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/mapTo.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\n/**\\n * Emits the given constant value on the output Observable every time the source\\n * Observable emits a value.\\n *\\n * <span class=\\\"informal\\\">Like {@link map}, but it maps every source value to\\n * the same output value every time.</span>\\n *\\n * ![](mapTo.png)\\n *\\n * Takes a constant `value` as argument, and emits that whenever the source\\n * Observable emits a value. In other words, ignores the actual source value,\\n * and simply uses the emission moment to know when to emit the given `value`.\\n *\\n * ## Example\\n * Map every click to the string 'Hi'\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { mapTo } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const greetings = clicks.pipe(mapTo('Hi'));\\n * greetings.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link map}\\n *\\n * @param {any} value The value to map each source value to.\\n * @return {Observable} An Observable that emits the given `value` every time\\n * the source Observable emits something.\\n * @method mapTo\\n * @owner Observable\\n */\\nexport declare function mapTo<T, R>(value: R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/materialize.d.ts\"\n    ],\n    \"content\": \"import { Notification } from '../Notification';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Represents all of the notifications from the source Observable as `next`\\n * emissions marked with their original types within {@link Notification}\\n * objects.\\n *\\n * <span class=\\\"informal\\\">Wraps `next`, `error` and `complete` emissions in\\n * {@link Notification} objects, emitted as `next` on the output Observable.\\n * </span>\\n *\\n * ![](materialize.png)\\n *\\n * `materialize` returns an Observable that emits a `next` notification for each\\n * `next`, `error`, or `complete` emission of the source Observable. When the\\n * source Observable emits `complete`, the output Observable will emit `next` as\\n * a Notification of type \\\"complete\\\", and then it will emit `complete` as well.\\n * When the source Observable emits `error`, the output will emit `next` as a\\n * Notification of type \\\"error\\\", and then `complete`.\\n *\\n * This operator is useful for producing metadata of the source Observable, to\\n * be consumed as `next` emissions. Use it in conjunction with\\n * {@link dematerialize}.\\n *\\n * ## Example\\n * Convert a faulty Observable to an Observable of Notifications\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { materialize, map } from 'rxjs/operators';\\n *\\n * const letters = of('a', 'b', 13, 'd');\\n * const upperCase = letters.pipe(map(x => x.toUpperCase()));\\n * const materialized = upperCase.pipe(materialize());\\n * materialized.subscribe(x => console.log(x));\\n *\\n * // Results in the following:\\n * // - Notification {kind: \\\"N\\\", value: \\\"A\\\", error: undefined, hasValue: true}\\n * // - Notification {kind: \\\"N\\\", value: \\\"B\\\", error: undefined, hasValue: true}\\n * // - Notification {kind: \\\"E\\\", value: undefined, error: TypeError:\\n * //   x.toUpperCase is not a function at MapSubscriber.letters.map.x\\n * //   [as project] (http://1…, hasValue: false}\\n * ```\\n *\\n * @see {@link Notification}\\n * @see {@link dematerialize}\\n *\\n * @return {Observable<Notification<T>>} An Observable that emits\\n * {@link Notification} objects that wrap the original emissions from the source\\n * Observable with metadata.\\n * @method materialize\\n * @owner Observable\\n */\\nexport declare function materialize<T>(): OperatorFunction<T, Notification<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/max.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * The Max operator operates on an Observable that emits numbers (or items that can be compared with a provided function),\\n * and when source Observable completes it emits a single item: the item with the largest value.\\n *\\n * ![](max.png)\\n *\\n * ## Examples\\n * Get the maximal value of a series of numbers\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { max } from 'rxjs/operators';\\n *\\n * of(5, 4, 7, 2, 8).pipe(\\n *   max(),\\n * )\\n * .subscribe(x => console.log(x)); // -> 8\\n * ```\\n *\\n * Use a comparer function to get the maximal item\\n * ```typescript\\n * import { of } from 'rxjs';\\n * import { max } from 'rxjs/operators';\\n *\\n * interface Person {\\n *   age: number,\\n *   name: string\\n * }\\n * of<Person>(\\n *   {age: 7, name: 'Foo'},\\n *   {age: 5, name: 'Bar'},\\n *   {age: 9, name: 'Beer'},\\n * ).pipe(\\n *   max<Person>((a: Person, b: Person) => a.age < b.age ? -1 : 1),\\n * )\\n * .subscribe((x: Person) => console.log(x.name)); // -> 'Beer'\\n * ```\\n *\\n * @see {@link min}\\n *\\n * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the\\n * value of two items.\\n * @return {Observable} An Observable that emits item with the largest value.\\n * @method max\\n * @owner Observable\\n */\\nexport declare function max<T>(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/merge.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T>(scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T>(concurrent?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2>(v2: ObservableInput<T2>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2>(v2: ObservableInput<T2>, concurrent?: number, scheduler?: SchedulerLike): OperatorFunction<T, T | T2>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, concurrent?: number, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, concurrent?: number, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4 | T5>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, concurrent?: number, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4 | T5>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4 | T5 | T6>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, concurrent?: number, scheduler?: SchedulerLike): OperatorFunction<T, T | T2 | T3 | T4 | T5 | T6>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T>(...observables: Array<ObservableInput<T> | SchedulerLike | number>): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static merge. */\\nexport declare function merge<T, R>(...observables: Array<ObservableInput<any> | SchedulerLike | number>): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/mergeAll.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, ObservableInput } from '../types';\\n/**\\n * Converts a higher-order Observable into a first-order Observable which\\n * concurrently delivers all values that are emitted on the inner Observables.\\n *\\n * <span class=\\\"informal\\\">Flattens an Observable-of-Observables.</span>\\n *\\n * ![](mergeAll.png)\\n *\\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\\n * a higher-order Observable. Each time it observes one of these emitted inner\\n * Observables, it subscribes to that and delivers all the values from the\\n * inner Observable on the output Observable. The output Observable only\\n * completes once all inner Observables have completed. Any error delivered by\\n * a inner Observable will be immediately emitted on the output Observable.\\n *\\n * ## Examples\\n * Spawn a new interval Observable for each click event, and blend their outputs as one Observable\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { map, mergeAll } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const higherOrder = clicks.pipe(map((ev) => interval(1000)));\\n * const firstOrder = higherOrder.pipe(mergeAll());\\n * firstOrder.subscribe(x => console.log(x));\\n * ```\\n *\\n * Count from 0 to 9 every second for each click, but only allow 2 concurrent timers\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { take, map, mergeAll } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const higherOrder = clicks.pipe(\\n *   map((ev) => interval(1000).pipe(take(10))),\\n * );\\n * const firstOrder = higherOrder.pipe(mergeAll(2));\\n * firstOrder.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link combineAll}\\n * @see {@link concatAll}\\n * @see {@link exhaust}\\n * @see {@link merge}\\n * @see {@link mergeMap}\\n * @see {@link mergeMapTo}\\n * @see {@link mergeScan}\\n * @see {@link switchAll}\\n * @see {@link switchMap}\\n * @see {@link zipAll}\\n *\\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner\\n * Observables being subscribed to concurrently.\\n * @return {Observable} An Observable that emits values coming from all the\\n * inner Observables emitted by the source Observable.\\n * @method mergeAll\\n * @owner Observable\\n */\\nexport declare function mergeAll<T>(concurrent?: number): OperatorFunction<ObservableInput<T>, T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/mergeMap.d.ts\"\n    ],\n    \"content\": \"import { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { InnerSubscriber } from '../InnerSubscriber';\\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function mergeMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, concurrent?: number): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector no longer supported, use inner map instead */\\nexport declare function mergeMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: undefined, concurrent?: number): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector no longer supported, use inner map instead */\\nexport declare function mergeMap<T, R, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction<T, R>;\\nexport declare class MergeMapOperator<T, R> implements Operator<T, R> {\\n    private project;\\n    private concurrent;\\n    constructor(project: (value: T, index: number) => ObservableInput<R>, concurrent?: number);\\n    call(observer: Subscriber<R>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class MergeMapSubscriber<T, R> extends OuterSubscriber<T, R> {\\n    private project;\\n    private concurrent;\\n    private hasCompleted;\\n    private buffer;\\n    private active;\\n    protected index: number;\\n    constructor(destination: Subscriber<R>, project: (value: T, index: number) => ObservableInput<R>, concurrent?: number);\\n    protected _next(value: T): void;\\n    protected _tryNext(value: T): void;\\n    private _innerSub;\\n    protected _complete(): void;\\n    notifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, R>): void;\\n    notifyComplete(innerSub: Subscription): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/mergeMapTo.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, ObservedValueOf } from '../../internal/types';\\nimport { ObservableInput } from '../types';\\nexport declare function mergeMapTo<T, O extends ObservableInput<any>>(innerObservable: O, concurrent?: number): OperatorFunction<any, ObservedValueOf<O>>;\\n/** @deprecated */\\nexport declare function mergeMapTo<T, R, O extends ObservableInput<any>>(innerObservable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/mergeScan.d.ts\"\n    ],\n    \"content\": \"import { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { InnerSubscriber } from '../InnerSubscriber';\\nimport { ObservableInput, OperatorFunction } from '../types';\\n/**\\n * Applies an accumulator function over the source Observable where the\\n * accumulator function itself returns an Observable, then each intermediate\\n * Observable returned is merged into the output Observable.\\n *\\n * <span class=\\\"informal\\\">It's like {@link scan}, but the Observables returned\\n * by the accumulator are merged into the outer Observable.</span>\\n *\\n * ## Example\\n * Count the number of click events\\n * ```ts\\n * import { fromEvent, of } from 'rxjs';\\n * import { mapTo, mergeScan } from 'rxjs/operators';\\n *\\n * const click$ = fromEvent(document, 'click');\\n * const one$ = click$.pipe(mapTo(1));\\n * const seed = 0;\\n * const count$ = one$.pipe(\\n *   mergeScan((acc, one) => of(acc + one), seed),\\n * );\\n * count$.subscribe(x => console.log(x));\\n *\\n * // Results:\\n * // 1\\n * // 2\\n * // 3\\n * // 4\\n * // ...and so on for each click\\n * ```\\n *\\n * @param {function(acc: R, value: T): Observable<R>} accumulator\\n * The accumulator function called on each source value.\\n * @param seed The initial accumulation value.\\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of\\n * input Observables being subscribed to concurrently.\\n * @return {Observable<R>} An observable of the accumulated values.\\n * @method mergeScan\\n * @owner Observable\\n */\\nexport declare function mergeScan<T, R>(accumulator: (acc: R, value: T, index: number) => ObservableInput<R>, seed: R, concurrent?: number): OperatorFunction<T, R>;\\nexport declare class MergeScanOperator<T, R> implements Operator<T, R> {\\n    private accumulator;\\n    private seed;\\n    private concurrent;\\n    constructor(accumulator: (acc: R, value: T, index: number) => ObservableInput<R>, seed: R, concurrent: number);\\n    call(subscriber: Subscriber<R>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class MergeScanSubscriber<T, R> extends OuterSubscriber<T, R> {\\n    private accumulator;\\n    private acc;\\n    private concurrent;\\n    private hasValue;\\n    private hasCompleted;\\n    private buffer;\\n    private active;\\n    protected index: number;\\n    constructor(destination: Subscriber<R>, accumulator: (acc: R, value: T, index: number) => ObservableInput<R>, acc: R, concurrent: number);\\n    protected _next(value: any): void;\\n    private _innerSub;\\n    protected _complete(): void;\\n    notifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, R>): void;\\n    notifyComplete(innerSub: Subscription): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/min.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * The Min operator operates on an Observable that emits numbers (or items that can be compared with a provided function),\\n * and when source Observable completes it emits a single item: the item with the smallest value.\\n *\\n * ![](min.png)\\n *\\n * ## Examples\\n * Get the minimal value of a series of numbers\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { min } from 'rxjs/operators';\\n *\\n * of(5, 4, 7, 2, 8).pipe(\\n *   min(),\\n * )\\n * .subscribe(x => console.log(x)); // -> 2\\n * ```\\n *\\n * Use a comparer function to get the minimal item\\n * ```typescript\\n * import { of } from 'rxjs';\\n * import { min } from 'rxjs/operators';\\n *\\n * interface Person {\\n *   age: number,\\n *   name: string\\n * }\\n * of<Person>(\\n *   {age: 7, name: 'Foo'},\\n *   {age: 5, name: 'Bar'},\\n *   {age: 9, name: 'Beer'},\\n * ).pipe(\\n *   min<Person>( (a: Person, b: Person) => a.age < b.age ? -1 : 1),\\n * )\\n * .subscribe((x: Person) => console.log(x.name)); // -> 'Bar'\\n * ```\\n * @see {@link max}\\n *\\n * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the\\n * value of two items.\\n * @return {Observable<R>} An Observable that emits item with the smallest value.\\n * @method min\\n * @owner Observable\\n */\\nexport declare function min<T>(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/multicast.d.ts\"\n    ],\n    \"content\": \"import { Subject } from '../Subject';\\nimport { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { Observable } from '../Observable';\\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\\nimport { OperatorFunction, UnaryFunction, ObservedValueOf, ObservableInput } from '../types';\\nexport declare function multicast<T>(subject: Subject<T>): UnaryFunction<Observable<T>, ConnectableObservable<T>>;\\nexport declare function multicast<T, O extends ObservableInput<any>>(subject: Subject<T>, selector: (shared: Observable<T>) => O): UnaryFunction<Observable<T>, ConnectableObservable<ObservedValueOf<O>>>;\\nexport declare function multicast<T>(subjectFactory: (this: Observable<T>) => Subject<T>): UnaryFunction<Observable<T>, ConnectableObservable<T>>;\\nexport declare function multicast<T, O extends ObservableInput<any>>(SubjectFactory: (this: Observable<T>) => Subject<T>, selector: (shared: Observable<T>) => O): OperatorFunction<T, ObservedValueOf<O>>;\\nexport declare class MulticastOperator<T, R> implements Operator<T, R> {\\n    private subjectFactory;\\n    private selector;\\n    constructor(subjectFactory: () => Subject<T>, selector: (source: Observable<T>) => Observable<R>);\\n    call(subscriber: Subscriber<R>, source: any): any;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/observeOn.d.ts\"\n    ],\n    \"content\": \"import { Operator } from '../Operator';\\nimport { Subscriber } from '../Subscriber';\\nimport { Notification } from '../Notification';\\nimport { MonoTypeOperatorFunction, PartialObserver, SchedulerAction, SchedulerLike, TeardownLogic } from '../types';\\n/**\\n *\\n * Re-emits all notifications from source Observable with specified scheduler.\\n *\\n * <span class=\\\"informal\\\">Ensure a specific scheduler is used, from outside of an Observable.</span>\\n *\\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\\n *\\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\\n * little bit more, to ensure that they are emitted at expected moments.\\n *\\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\\n * will delay all notifications - including error notifications - while `delay` will pass through error\\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\\n * for notification emissions in general.\\n *\\n * ## Example\\n * Ensure values in subscribe are called just before browser repaint.\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { observeOn } from 'rxjs/operators';\\n *\\n * const intervals = interval(10);                // Intervals are scheduled\\n *                                                // with async scheduler by default...\\n * intervals.pipe(\\n *   observeOn(animationFrameScheduler),          // ...but we will observe on animationFrame\\n * )                                              // scheduler to ensure smooth animation.\\n * .subscribe(val => {\\n *   someDiv.style.height = val + 'px';\\n * });\\n * ```\\n *\\n * @see {@link delay}\\n *\\n * @param {SchedulerLike} scheduler Scheduler that will be used to reschedule notifications from source Observable.\\n * @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.\\n * @return {Observable<T>} Observable that emits the same notifications as the source Observable,\\n * but with provided scheduler.\\n *\\n * @method observeOn\\n * @owner Observable\\n */\\nexport declare function observeOn<T>(scheduler: SchedulerLike, delay?: number): MonoTypeOperatorFunction<T>;\\nexport declare class ObserveOnOperator<T> implements Operator<T, T> {\\n    private scheduler;\\n    private delay;\\n    constructor(scheduler: SchedulerLike, delay?: number);\\n    call(subscriber: Subscriber<T>, source: any): TeardownLogic;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class ObserveOnSubscriber<T> extends Subscriber<T> {\\n    private scheduler;\\n    private delay;\\n    /** @nocollapse */\\n    static dispatch(this: SchedulerAction<ObserveOnMessage>, arg: ObserveOnMessage): void;\\n    constructor(destination: Subscriber<T>, scheduler: SchedulerLike, delay?: number);\\n    private scheduleMessage;\\n    protected _next(value: T): void;\\n    protected _error(err: any): void;\\n    protected _complete(): void;\\n}\\nexport declare class ObserveOnMessage {\\n    notification: Notification<any>;\\n    destination: PartialObserver<any>;\\n    constructor(notification: Notification<any>, destination: PartialObserver<any>);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ObservableInput, OperatorFunction } from '../types';\\nexport declare function onErrorResumeNext<T>(): OperatorFunction<T, T>;\\nexport declare function onErrorResumeNext<T, T2>(v: ObservableInput<T2>): OperatorFunction<T, T | T2>;\\nexport declare function onErrorResumeNext<T, T2, T3>(v: ObservableInput<T2>, v2: ObservableInput<T3>): OperatorFunction<T, T | T2 | T3>;\\nexport declare function onErrorResumeNext<T, T2, T3, T4>(v: ObservableInput<T2>, v2: ObservableInput<T3>, v3: ObservableInput<T4>): OperatorFunction<T, T | T2 | T3 | T4>;\\nexport declare function onErrorResumeNext<T, T2, T3, T4, T5>(v: ObservableInput<T2>, v2: ObservableInput<T3>, v3: ObservableInput<T4>, v4: ObservableInput<T5>): OperatorFunction<T, T | T2 | T3 | T4 | T5>;\\nexport declare function onErrorResumeNext<T, T2, T3, T4, T5, T6>(v: ObservableInput<T2>, v2: ObservableInput<T3>, v3: ObservableInput<T4>, v4: ObservableInput<T5>, v5: ObservableInput<T6>): OperatorFunction<T, T | T2 | T3 | T4 | T5 | T6>;\\nexport declare function onErrorResumeNext<T, T2, T3, T4, T5, T6, T7>(v: ObservableInput<T2>, v2: ObservableInput<T3>, v3: ObservableInput<T4>, v4: ObservableInput<T5>, v5: ObservableInput<T6>, v6: ObservableInput<T7>): OperatorFunction<T, T | T2 | T3 | T4 | T5 | T6 | T7>;\\nexport declare function onErrorResumeNext<T, R>(...observables: Array<ObservableInput<any>>): OperatorFunction<T, T | R>;\\nexport declare function onErrorResumeNext<T, R>(array: ObservableInput<any>[]): OperatorFunction<T, T | R>;\\nexport declare function onErrorResumeNextStatic<R>(v: ObservableInput<R>): Observable<R>;\\nexport declare function onErrorResumeNextStatic<T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<R>;\\nexport declare function onErrorResumeNextStatic<T2, T3, T4, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<R>;\\nexport declare function onErrorResumeNextStatic<T2, T3, T4, T5, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<R>;\\nexport declare function onErrorResumeNextStatic<T2, T3, T4, T5, T6, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<R>;\\nexport declare function onErrorResumeNextStatic<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;\\nexport declare function onErrorResumeNextStatic<R>(array: ObservableInput<any>[]): Observable<R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/pairwise.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\n/**\\n * Groups pairs of consecutive emissions together and emits them as an array of\\n * two values.\\n *\\n * <span class=\\\"informal\\\">Puts the current value and previous value together as\\n * an array, and emits that.</span>\\n *\\n * ![](pairwise.png)\\n *\\n * The Nth emission from the source Observable will cause the output Observable\\n * to emit an array [(N-1)th, Nth] of the previous and the current value, as a\\n * pair. For this reason, `pairwise` emits on the second and subsequent\\n * emissions from the source Observable, but not on the first emission, because\\n * there is no previous value in that case.\\n *\\n * ## Example\\n * On every click (starting from the second), emit the relative distance to the previous click\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { pairwise, map } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const pairs = clicks.pipe(pairwise());\\n * const distance = pairs.pipe(\\n *   map(pair => {\\n *     const x0 = pair[0].clientX;\\n *     const y0 = pair[0].clientY;\\n *     const x1 = pair[1].clientX;\\n *     const y1 = pair[1].clientY;\\n *     return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));\\n *   }),\\n * );\\n * distance.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link buffer}\\n * @see {@link bufferCount}\\n *\\n * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of\\n * consecutive values from the source Observable.\\n * @method pairwise\\n * @owner Observable\\n */\\nexport declare function pairwise<T>(): OperatorFunction<T, [T, T]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/partition.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { UnaryFunction } from '../types';\\n/**\\n * Splits the source Observable into two, one with values that satisfy a\\n * predicate, and another with values that don't satisfy the predicate.\\n *\\n * <span class=\\\"informal\\\">It's like {@link filter}, but returns two Observables:\\n * one like the output of {@link filter}, and the other with values that did not\\n * pass the condition.</span>\\n *\\n * ![](partition.png)\\n *\\n * `partition` outputs an array with two Observables that partition the values\\n * from the source Observable through the given `predicate` function. The first\\n * Observable in that array emits source values for which the predicate argument\\n * returns true. The second Observable emits source values for which the\\n * predicate returns false. The first behaves like {@link filter} and the second\\n * behaves like {@link filter} with the predicate negated.\\n *\\n * ## Example\\n * Partition click events into those on DIV elements and those elsewhere\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { partition } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const parts = clicks.pipe(partition(ev => ev.target.tagName === 'DIV'));\\n * const clicksOnDivs = parts[0];\\n * const clicksElsewhere = parts[1];\\n * clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));\\n * clicksElsewhere.subscribe(x => console.log('Other clicked: ', x));\\n * ```\\n *\\n * @see {@link filter}\\n *\\n * @param {function(value: T, index: number): boolean} predicate A function that\\n * evaluates each value emitted by the source Observable. If it returns `true`,\\n * the value is emitted on the first Observable in the returned array, if\\n * `false` the value is emitted on the second Observable in the array. The\\n * `index` parameter is the number `i` for the i-th source emission that has\\n * happened since the subscription, starting from the number `0`.\\n * @param {any} [thisArg] An optional argument to determine the value of `this`\\n * in the `predicate` function.\\n * @return {[Observable<T>, Observable<T>]} An array with two Observables: one\\n * with values that passed the predicate, and another with values that did not\\n * pass the predicate.\\n * @method partition\\n * @owner Observable\\n * @deprecated use `partition` static creation function instead\\n */\\nexport declare function partition<T>(predicate: (value: T, index: number) => boolean, thisArg?: any): UnaryFunction<Observable<T>, [Observable<T>, Observable<T>]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/pluck.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\nexport declare function pluck<T, K1 extends keyof T>(k1: K1): OperatorFunction<T, T[K1]>;\\nexport declare function pluck<T, K1 extends keyof T, K2 extends keyof T[K1]>(k1: K1, k2: K2): OperatorFunction<T, T[K1][K2]>;\\nexport declare function pluck<T, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(k1: K1, k2: K2, k3: K3): OperatorFunction<T, T[K1][K2][K3]>;\\nexport declare function pluck<T, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(k1: K1, k2: K2, k3: K3, k4: K4): OperatorFunction<T, T[K1][K2][K3][K4]>;\\nexport declare function pluck<T, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5): OperatorFunction<T, T[K1][K2][K3][K4][K5]>;\\nexport declare function pluck<T, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6): OperatorFunction<T, T[K1][K2][K3][K4][K5][K6]>;\\nexport declare function pluck<T, R>(...properties: string[]): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/publish.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\\nimport { MonoTypeOperatorFunction, OperatorFunction, UnaryFunction, ObservableInput, ObservedValueOf } from '../types';\\nexport declare function publish<T>(): UnaryFunction<Observable<T>, ConnectableObservable<T>>;\\nexport declare function publish<T, O extends ObservableInput<any>>(selector: (shared: Observable<T>) => O): OperatorFunction<T, ObservedValueOf<O>>;\\nexport declare function publish<T>(selector: MonoTypeOperatorFunction<T>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/publishBehavior.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\\nimport { UnaryFunction } from '../types';\\n/**\\n * @param value\\n * @return {ConnectableObservable<T>}\\n * @method publishBehavior\\n * @owner Observable\\n */\\nexport declare function publishBehavior<T>(value: T): UnaryFunction<Observable<T>, ConnectableObservable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/publishLast.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\\nimport { UnaryFunction } from '../types';\\n/**\\n * Returns a connectable observable sequence that shares a single subscription to the\\n * underlying sequence containing only the last notification.\\n *\\n * ![](publishLast.png)\\n *\\n * Similar to {@link publish}, but it waits until the source observable completes and stores\\n * the last emitted value.\\n * Similarly to {@link publishReplay} and {@link publishBehavior}, this keeps storing the last\\n * value even if it has no more subscribers. If subsequent subscriptions happen, they will\\n * immediately get that last stored value and complete.\\n *\\n * ## Example\\n *\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { publishLast, tap, take } from 'rxjs/operators';\\n *\\n * const connectable =\\n *   interval(1000)\\n *     .pipe(\\n *       tap(x => console.log(\\\"side effect\\\", x)),\\n *       take(3),\\n *       publishLast());\\n *\\n * connectable.subscribe(\\n *   x => console.log(  \\\"Sub. A\\\", x),\\n *   err => console.log(\\\"Sub. A Error\\\", err),\\n *   () => console.log( \\\"Sub. A Complete\\\"));\\n *\\n * connectable.subscribe(\\n *   x => console.log(  \\\"Sub. B\\\", x),\\n *   err => console.log(\\\"Sub. B Error\\\", err),\\n *   () => console.log( \\\"Sub. B Complete\\\"));\\n *\\n * connectable.connect();\\n *\\n * // Results:\\n * //    \\\"side effect 0\\\"\\n * //    \\\"side effect 1\\\"\\n * //    \\\"side effect 2\\\"\\n * //    \\\"Sub. A 2\\\"\\n * //    \\\"Sub. B 2\\\"\\n * //    \\\"Sub. A Complete\\\"\\n * //    \\\"Sub. B Complete\\\"\\n * ```\\n *\\n * @see {@link ConnectableObservable}\\n * @see {@link publish}\\n * @see {@link publishReplay}\\n * @see {@link publishBehavior}\\n *\\n * @return {ConnectableObservable} An observable sequence that contains the elements of a\\n * sequence produced by multicasting the source sequence.\\n * @method publishLast\\n * @owner Observable\\n */\\nexport declare function publishLast<T>(): UnaryFunction<Observable<T>, ConnectableObservable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/publishReplay.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction, OperatorFunction, SchedulerLike, ObservableInput, ObservedValueOf } from '../types';\\nexport declare function publishReplay<T>(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\nexport declare function publishReplay<T, O extends ObservableInput<any>>(bufferSize?: number, windowTime?: number, selector?: (shared: Observable<T>) => O, scheduler?: SchedulerLike): OperatorFunction<T, ObservedValueOf<O>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/race.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction, OperatorFunction } from '../types';\\n/** @deprecated Deprecated in favor of static race. */\\nexport declare function race<T>(observables: Array<Observable<T>>): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static race. */\\nexport declare function race<T, R>(observables: Array<Observable<T>>): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static race. */\\nexport declare function race<T>(...observables: Array<Observable<T> | Array<Observable<T>>>): MonoTypeOperatorFunction<T>;\\n/** @deprecated Deprecated in favor of static race. */\\nexport declare function race<T, R>(...observables: Array<Observable<any> | Array<Observable<any>>>): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/reduce.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, MonoTypeOperatorFunction } from '../types';\\nexport declare function reduce<T, R>(accumulator: (acc: R, value: T, index: number) => R, seed: R): OperatorFunction<T, R>;\\nexport declare function reduce<T>(accumulator: (acc: T, value: T, index: number) => T, seed?: T): MonoTypeOperatorFunction<T>;\\nexport declare function reduce<T, R>(accumulator: (acc: R, value: T, index: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/refCount.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Make a {@link ConnectableObservable} behave like a ordinary observable and automates the way\\n * you can connect to it.\\n *\\n * Internally it counts the subscriptions to the observable and subscribes (only once) to the source if\\n * the number of subscriptions is larger than 0. If the number of subscriptions is smaller than 1, it\\n * unsubscribes from the source. This way you can make sure that everything before the *published*\\n * refCount has only a single subscription independently of the number of subscribers to the target\\n * observable.\\n *\\n * Note that using the {@link share} operator is exactly the same as using the *publish* operator\\n * (making the observable hot) and the *refCount* operator in a sequence.\\n *\\n * ![](refCount.png)\\n *\\n * ## Example\\n *\\n * In the following example there are two intervals turned into connectable observables\\n * by using the *publish* operator. The first one uses the *refCount* operator, the\\n * second one does not use it. You will notice that a connectable observable does nothing\\n * until you call its connect function.\\n *\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { tap, publish, refCount } from 'rxjs/operators';\\n *\\n * // Turn the interval observable into a ConnectableObservable (hot)\\n * const refCountInterval = interval(400).pipe(\\n *   tap((num) => console.log(`refCount ${num}`)),\\n *   publish(),\\n *   refCount()\\n * );\\n *\\n * const publishedInterval = interval(400).pipe(\\n *   tap((num) => console.log(`publish ${num}`)),\\n *   publish()\\n * );\\n *\\n * refCountInterval.subscribe();\\n * refCountInterval.subscribe();\\n * // 'refCount 0' -----> 'refCount 1' -----> etc\\n * // All subscriptions will receive the same value and the tap (and\\n * // every other operator) before the publish operator will be executed\\n * // only once per event independently of the number of subscriptions.\\n *\\n * publishedInterval.subscribe();\\n * // Nothing happens until you call .connect() on the observable.\\n * ```\\n *\\n * @see {@link ConnectableObservable}\\n * @see {@link share}\\n * @see {@link publish}\\n */\\nexport declare function refCount<T>(): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/repeat.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that will resubscribe to the source stream when the source stream completes, at most count times.\\n *\\n * <span class=\\\"informal\\\">Repeats all values emitted on the source. It's like {@link retry}, but for non error cases.</span>\\n *\\n * ![](repeat.png)\\n *\\n * Similar to {@link retry}, this operator repeats the stream of items emitted by the source for non error cases.\\n * Repeat can be useful for creating observables that are meant to have some repeated pattern or rhythm.\\n *\\n * Note: `repeat(0)` returns an empty observable and `repeat()` will repeat forever\\n *\\n * ## Example\\n * Repeat a message stream\\n * ```ts\\n * import { of } from 'rxjs';\\n * import { repeat, delay } from 'rxjs/operators';\\n *\\n * const source = of('Repeat message');\\n * const example = source.pipe(repeat(3));\\n * example.subscribe(x => console.log(x));\\n *\\n * // Results\\n * // Repeat message\\n * // Repeat message\\n * // Repeat message\\n * ```\\n *\\n * Repeat 3 values, 2 times\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { repeat, take } from 'rxjs/operators';\\n *\\n * const source = interval(1000);\\n * const example = source.pipe(take(3), repeat(2));\\n * example.subscribe(x => console.log(x));\\n *\\n * // Results every second\\n * // 0\\n * // 1\\n * // 2\\n * // 0\\n * // 1\\n * // 2\\n * ```\\n *\\n * @see {@link repeatWhen}\\n * @see {@link retry}\\n *\\n * @param {number} [count] The number of times the source Observable items are repeated, a count of 0 will yield\\n * an empty Observable.\\n * @return {Observable} An Observable that will resubscribe to the source stream when the source stream completes\\n * , at most count times.\\n * @method repeat\\n * @owner Observable\\n */\\nexport declare function repeat<T>(count?: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/repeatWhen.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that mirrors the source Observable with the exception of a `complete`. If the source\\n * Observable calls `complete`, this method will emit to the Observable returned from `notifier`. If that Observable\\n * calls `complete` or `error`, then this method will call `complete` or `error` on the child subscription. Otherwise\\n * this method will resubscribe to the source Observable.\\n *\\n * ![](repeatWhen.png)\\n *\\n * ## Example\\n * Repeat a message stream on click\\n * ```ts\\n * import { of, fromEvent } from 'rxjs';\\n * import { repeatWhen } from 'rxjs/operators';\\n *\\n * const source = of('Repeat message');\\n * const documentClick$ = fromEvent(document, 'click');\\n *\\n * source.pipe(repeatWhen(() => documentClick$)\\n * ).subscribe(data => console.log(data))\\n * ```\\n * @see {@link repeat}\\n * @see {@link retry}\\n * @see {@link retryWhen}\\n *\\n * @param {function(notifications: Observable): Observable} notifier - Receives an Observable of notifications with\\n * which a user can `complete` or `error`, aborting the repetition.\\n * @return {Observable} The source Observable modified with repeat logic.\\n * @method repeatWhen\\n * @owner Observable\\n */\\nexport declare function repeatWhen<T>(notifier: (notifications: Observable<any>) => Observable<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/retry.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable\\n * calls `error`, this method will resubscribe to the source Observable for a maximum of `count` resubscriptions (given\\n * as a number parameter) rather than propagating the `error` call.\\n *\\n * ![](retry.png)\\n *\\n * Any and all items emitted by the source Observable will be emitted by the resulting Observable, even those emitted\\n * during failed subscriptions. For example, if an Observable fails at first but emits [1, 2] then succeeds the second\\n * time and emits: [1, 2, 3, 4, 5] then the complete stream of emissions and notifications\\n * would be: [1, 2, 1, 2, 3, 4, 5, `complete`].\\n *\\n * ## Example\\n * ```ts\\n * import { interval, of, throwError } from 'rxjs';\\n * import { mergeMap, retry } from 'rxjs/operators';\\n *\\n * const source = interval(1000);\\n * const example = source.pipe(\\n *   mergeMap(val => {\\n *     if(val > 5){\\n *       return throwError('Error!');\\n *     }\\n *     return of(val);\\n *   }),\\n *   //retry 2 times on error\\n *   retry(2)\\n * );\\n *\\n * const subscribe = example.subscribe({\\n *   next: val => console.log(val),\\n *   error: val => console.log(`${val}: Retried 2 times then quit!`)\\n * });\\n *\\n * // Output:\\n * // 0..1..2..3..4..5..\\n * // 0..1..2..3..4..5..\\n * // 0..1..2..3..4..5..\\n * // \\\"Error!: Retried 2 times then quit!\\\"\\n * ```\\n *\\n * @param {number} count - Number of retry attempts before failing.\\n * @return {Observable} The source Observable modified with the retry logic.\\n * @method retry\\n * @owner Observable\\n */\\nexport declare function retry<T>(count?: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/retryWhen.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable\\n * calls `error`, this method will emit the Throwable that caused the error to the Observable returned from `notifier`.\\n * If that Observable calls `complete` or `error` then this method will call `complete` or `error` on the child\\n * subscription. Otherwise this method will resubscribe to the source Observable.\\n *\\n * ![](retryWhen.png)\\n *\\n * @param {function(errors: Observable): Observable} notifier - Receives an Observable of notifications with which a\\n * user can `complete` or `error`, aborting the retry.\\n * @return {Observable} The source Observable modified with retry logic.\\n * @method retryWhen\\n * @owner Observable\\n */\\nexport declare function retryWhen<T>(notifier: (errors: Observable<any>) => Observable<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/sample.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Emits the most recently emitted value from the source Observable whenever\\n * another Observable, the `notifier`, emits.\\n *\\n * <span class=\\\"informal\\\">It's like {@link sampleTime}, but samples whenever\\n * the `notifier` Observable emits something.</span>\\n *\\n * ![](sample.png)\\n *\\n * Whenever the `notifier` Observable emits a value or completes, `sample`\\n * looks at the source Observable and emits whichever value it has most recently\\n * emitted since the previous sampling, unless the source has not emitted\\n * anything since the previous sampling. The `notifier` is subscribed to as soon\\n * as the output Observable is subscribed.\\n *\\n * ## Example\\n * On every click, sample the most recent \\\"seconds\\\" timer\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { sample } from 'rxjs/operators';\\n *\\n * const seconds = interval(1000);\\n * const clicks = fromEvent(document, 'click');\\n * const result = seconds.pipe(sample(clicks));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link audit}\\n * @see {@link debounce}\\n * @see {@link sampleTime}\\n * @see {@link throttle}\\n *\\n * @param {Observable<any>} notifier The Observable to use for sampling the\\n * source Observable.\\n * @return {Observable<T>} An Observable that emits the results of sampling the\\n * values emitted by the source Observable whenever the notifier Observable\\n * emits value or completes.\\n * @method sample\\n * @owner Observable\\n */\\nexport declare function sample<T>(notifier: Observable<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/sampleTime.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Emits the most recently emitted value from the source Observable within\\n * periodic time intervals.\\n *\\n * <span class=\\\"informal\\\">Samples the source Observable at periodic time\\n * intervals, emitting what it samples.</span>\\n *\\n * ![](sampleTime.png)\\n *\\n * `sampleTime` periodically looks at the source Observable and emits whichever\\n * value it has most recently emitted since the previous sampling, unless the\\n * source has not emitted anything since the previous sampling. The sampling\\n * happens periodically in time every `period` milliseconds (or the time unit\\n * defined by the optional `scheduler` argument). The sampling starts as soon as\\n * the output Observable is subscribed.\\n *\\n * ## Example\\n * Every second, emit the most recent click at most once\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { sampleTime } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(sampleTime(1000));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link auditTime}\\n * @see {@link debounceTime}\\n * @see {@link delay}\\n * @see {@link sample}\\n * @see {@link throttleTime}\\n *\\n * @param {number} period The sampling period expressed in milliseconds or the\\n * time unit determined internally by the optional `scheduler`.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\\n * managing the timers that handle the sampling.\\n * @return {Observable<T>} An Observable that emits the results of sampling the\\n * values emitted by the source Observable at the specified time interval.\\n * @method sampleTime\\n * @owner Observable\\n */\\nexport declare function sampleTime<T>(period: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/scan.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, MonoTypeOperatorFunction } from '../types';\\nexport declare function scan<T, R>(accumulator: (acc: R, value: T, index: number) => R, seed: R): OperatorFunction<T, R>;\\nexport declare function scan<T>(accumulator: (acc: T, value: T, index: number) => T, seed?: T): MonoTypeOperatorFunction<T>;\\nexport declare function scan<T, R>(accumulator: (acc: R, value: T, index: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/sequenceEqual.d.ts\"\n    ],\n    \"content\": \"import { Operator } from '../Operator';\\nimport { Observable } from '../Observable';\\nimport { Subscriber } from '../Subscriber';\\nimport { Observer, OperatorFunction } from '../types';\\n/**\\n * Compares all values of two observables in sequence using an optional comparator function\\n * and returns an observable of a single boolean value representing whether or not the two sequences\\n * are equal.\\n *\\n * <span class=\\\"informal\\\">Checks to see of all values emitted by both observables are equal, in order.</span>\\n *\\n * ![](sequenceEqual.png)\\n *\\n * `sequenceEqual` subscribes to two observables and buffers incoming values from each observable. Whenever either\\n * observable emits a value, the value is buffered and the buffers are shifted and compared from the bottom\\n * up; If any value pair doesn't match, the returned observable will emit `false` and complete. If one of the\\n * observables completes, the operator will wait for the other observable to complete; If the other\\n * observable emits before completing, the returned observable will emit `false` and complete. If one observable never\\n * completes or emits after the other complets, the returned observable will never complete.\\n *\\n * ## Example\\n * figure out if the Konami code matches\\n * ```ts\\n * import { from, fromEvent } from 'rxjs';\\n * import { sequenceEqual, bufferCount, mergeMap, map } from 'rxjs/operators';\\n *\\n * const codes = from([\\n *   'ArrowUp',\\n *   'ArrowUp',\\n *   'ArrowDown',\\n *   'ArrowDown',\\n *   'ArrowLeft',\\n *   'ArrowRight',\\n *   'ArrowLeft',\\n *   'ArrowRight',\\n *   'KeyB',\\n *   'KeyA',\\n *   'Enter', // no start key, clearly.\\n * ]);\\n *\\n * const keys = fromEvent(document, 'keyup').pipe(map(e => e.code));\\n * const matches = keys.pipe(\\n *   bufferCount(11, 1),\\n *   mergeMap(\\n *     last11 => from(last11).pipe(sequenceEqual(codes)),\\n *   ),\\n * );\\n * matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));\\n * ```\\n *\\n * @see {@link combineLatest}\\n * @see {@link zip}\\n * @see {@link withLatestFrom}\\n *\\n * @param {Observable} compareTo The observable sequence to compare the source sequence to.\\n * @param {function} [comparator] An optional function to compare each value pair\\n * @return {Observable} An Observable of a single boolean value representing whether or not\\n * the values emitted by both observables were equal in sequence.\\n * @method sequenceEqual\\n * @owner Observable\\n */\\nexport declare function sequenceEqual<T>(compareTo: Observable<T>, comparator?: (a: T, b: T) => boolean): OperatorFunction<T, boolean>;\\nexport declare class SequenceEqualOperator<T> implements Operator<T, boolean> {\\n    private compareTo;\\n    private comparator;\\n    constructor(compareTo: Observable<T>, comparator: (a: T, b: T) => boolean);\\n    call(subscriber: Subscriber<boolean>, source: any): any;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class SequenceEqualSubscriber<T, R> extends Subscriber<T> {\\n    private compareTo;\\n    private comparator;\\n    private _a;\\n    private _b;\\n    private _oneComplete;\\n    constructor(destination: Observer<R>, compareTo: Observable<T>, comparator: (a: T, b: T) => boolean);\\n    protected _next(value: T): void;\\n    _complete(): void;\\n    checkValues(): void;\\n    emit(value: boolean): void;\\n    nextB(value: T): void;\\n    completeB(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/share.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one\\n * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will\\n * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.\\n * This is an alias for `multicast(() => new Subject()), refCount()`.\\n *\\n * ![](share.png)\\n *\\n * @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.\\n * @method share\\n * @owner Observable\\n */\\nexport declare function share<T>(): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/shareReplay.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\nexport interface ShareReplayConfig {\\n    bufferSize?: number;\\n    windowTime?: number;\\n    refCount: boolean;\\n    scheduler?: SchedulerLike;\\n}\\n/**\\n * Share source and replay specified number of emissions on subscription.\\n *\\n * This operator is a specialization of `replay` that connects to a source observable\\n * and multicasts through a `ReplaySubject` constructed with the specified arguments.\\n * A successfully completed source will stay cached in the `shareReplayed observable` forever,\\n * but an errored source can be retried.\\n *\\n * ## Why use shareReplay?\\n * You generally want to use `shareReplay` when you have side-effects or taxing computations\\n * that you do not wish to be executed amongst multiple subscribers.\\n * It may also be valuable in situations where you know you will have late subscribers to\\n * a stream that need access to previously emitted values.\\n * This ability to replay values on subscription is what differentiates {@link share} and `shareReplay`.\\n *\\n * ![](shareReplay.png)\\n *\\n * ## Example\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { shareReplay, take } from 'rxjs/operators';\\n *\\n * const obs$ = interval(1000);\\n * const shared$ = obs$.pipe(\\n *   take(4),\\n *   shareReplay(3)\\n * );\\n * shared$.subscribe(x => console.log('source A: ', x));\\n * shared$.subscribe(y => console.log('source B: ', y));\\n *\\n * ```\\n *\\n * @see {@link publish}\\n * @see {@link share}\\n * @see {@link publishReplay}\\n *\\n * @param {Number} [bufferSize=Number.POSITIVE_INFINITY] Maximum element count of the replay buffer.\\n * @param {Number} [windowTime=Number.POSITIVE_INFINITY] Maximum time length of the replay buffer in milliseconds.\\n * @param {Scheduler} [scheduler] Scheduler where connected observers within the selector function\\n * will be invoked on.\\n * @return {Observable} An observable sequence that contains the elements of a sequence produced\\n * by multicasting the source sequence within a selector function.\\n * @method shareReplay\\n * @owner Observable\\n */\\nexport declare function shareReplay<T>(config: ShareReplayConfig): MonoTypeOperatorFunction<T>;\\nexport declare function shareReplay<T>(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/single.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that emits the single item emitted by the source Observable that matches a specified\\n * predicate, if that Observable emits one such item. If the source Observable emits more than one such item or no\\n * items, notify of an IllegalArgumentException or NoSuchElementException respectively. If the source Observable\\n * emits items but none match the specified predicate then `undefined` is emitted.\\n *\\n * <span class=\\\"informal\\\">Like {@link first}, but emit with error notification if there is more than one value.</span>\\n * ![](single.png)\\n *\\n * ## Example\\n * emits 'error'\\n * ```ts\\n * import { range } from 'rxjs';\\n * import { single } from 'rxjs/operators';\\n *\\n * const numbers = range(1,5).pipe(single());\\n * numbers.subscribe(x => console.log('never get called'), e => console.log('error'));\\n * // result\\n * // 'error'\\n * ```\\n *\\n * emits 'undefined'\\n * ```ts\\n * import { range } from 'rxjs';\\n * import { single } from 'rxjs/operators';\\n *\\n * const numbers = range(1,5).pipe(single(x => x === 10));\\n * numbers.subscribe(x => console.log(x));\\n * // result\\n * // 'undefined'\\n * ```\\n *\\n * @see {@link first}\\n * @see {@link find}\\n * @see {@link findIndex}\\n * @see {@link elementAt}\\n *\\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\\n * callback if the Observable completes before any `next` notification was sent.\\n * @param {Function} predicate - A predicate function to evaluate items emitted by the source Observable.\\n * @return {Observable<T>} An Observable that emits the single item emitted by the source Observable that matches\\n * the predicate or `undefined` when no items match.\\n *\\n * @method single\\n * @owner Observable\\n */\\nexport declare function single<T>(predicate?: (value: T, index: number, source: Observable<T>) => boolean): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/skip.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that skips the first `count` items emitted by the source Observable.\\n *\\n * ![](skip.png)\\n *\\n * @param {Number} count - The number of times, items emitted by source Observable should be skipped.\\n * @return {Observable} An Observable that skips values emitted by the source Observable.\\n *\\n * @method skip\\n * @owner Observable\\n */\\nexport declare function skip<T>(count: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/skipLast.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Skip the last `count` values emitted by the source Observable.\\n *\\n * ![](skipLast.png)\\n *\\n * `skipLast` returns an Observable that accumulates a queue with a length\\n * enough to store the first `count` values. As more values are received,\\n * values are taken from the front of the queue and produced on the result\\n * sequence. This causes values to be delayed.\\n *\\n * ## Example\\n * Skip the last 2 values of an Observable with many values\\n * ```ts\\n * import { range } from 'rxjs';\\n * import { skipLast } from 'rxjs/operators';\\n *\\n * const many = range(1, 5);\\n * const skipLastTwo = many.pipe(skipLast(2));\\n * skipLastTwo.subscribe(x => console.log(x));\\n *\\n * // Results in:\\n * // 1 2 3\\n * ```\\n *\\n * @see {@link skip}\\n * @see {@link skipUntil}\\n * @see {@link skipWhile}\\n * @see {@link take}\\n *\\n * @throws {ArgumentOutOfRangeError} When using `skipLast(i)`, it throws\\n * ArgumentOutOrRangeError if `i < 0`.\\n *\\n * @param {number} count Number of elements to skip from the end of the source Observable.\\n * @returns {Observable<T>} An Observable that skips the last count values\\n * emitted by the source Observable.\\n * @method skipLast\\n * @owner Observable\\n */\\nexport declare function skipLast<T>(count: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/skipUntil.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that skips items emitted by the source Observable until a second Observable emits an item.\\n *\\n * The `skipUntil` operator causes the observable stream to skip the emission of values ​​until the passed in observable emits the first value.\\n * This can be particularly useful in combination with user interactions, responses of http requests or waiting for specific times to pass by.\\n *\\n * ![](skipUntil.png)\\n *\\n * Internally the `skipUntil` operator subscribes to the passed in observable (in the following called *notifier*) in order to recognize the emission\\n * of its first value. When this happens, the operator unsubscribes from the *notifier* and starts emitting the values of the *source*\\n * observable. It will never let the *source* observable emit any values if the *notifier* completes or throws an error without emitting\\n * a value before.\\n *\\n * ## Example\\n *\\n * In the following example, all emitted values ​​of the interval observable are skipped until the user clicks anywhere within the page.\\n *\\n * ```ts\\n * import { interval, fromEvent } from 'rxjs';\\n * import { skipUntil } from 'rxjs/operators';\\n *\\n * const intervalObservable = interval(1000);\\n * const click = fromEvent(document, 'click');\\n *\\n * const emitAfterClick = intervalObservable.pipe(\\n *   skipUntil(click)\\n * );\\n * // clicked at 4.6s. output: 5...6...7...8........ or\\n * // clicked at 7.3s. output: 8...9...10..11.......\\n * const subscribe = emitAfterClick.subscribe(value => console.log(value));\\n * ```\\n *\\n * @param {Observable} notifier - The second Observable that has to emit an item before the source Observable's elements begin to\\n * be mirrored by the resulting Observable.\\n * @return {Observable<T>} An Observable that skips items from the source Observable until the second Observable emits\\n * an item, then emits the remaining items.\\n * @method skipUntil\\n * @owner Observable\\n */\\nexport declare function skipUntil<T>(notifier: Observable<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/skipWhile.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds\\n * true, but emits all further source items as soon as the condition becomes false.\\n *\\n * ![](skipWhile.png)\\n *\\n * @param {Function} predicate - A function to test each item emitted from the source Observable.\\n * @return {Observable<T>} An Observable that begins emitting items emitted by the source Observable when the\\n * specified predicate becomes false.\\n * @method skipWhile\\n * @owner Observable\\n */\\nexport declare function skipWhile<T>(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/startWith.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, OperatorFunction, SchedulerLike } from '../types';\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T>(scheduler: SchedulerLike): MonoTypeOperatorFunction<T>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D>(v1: D, scheduler: SchedulerLike): OperatorFunction<T, T | D>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D, E>(v1: D, v2: E, scheduler: SchedulerLike): OperatorFunction<T, T | D | E>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D, E, F>(v1: D, v2: E, v3: F, scheduler: SchedulerLike): OperatorFunction<T, T | D | E | F>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D, E, F, G>(v1: D, v2: E, v3: F, v4: G, scheduler: SchedulerLike): OperatorFunction<T, T | D | E | F | G>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D, E, F, G, H>(v1: D, v2: E, v3: F, v4: G, v5: H, scheduler: SchedulerLike): OperatorFunction<T, T | D | E | F | G | H>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D, E, F, G, H, I>(v1: D, v2: E, v3: F, v4: G, v5: H, v6: I, scheduler: SchedulerLike): OperatorFunction<T, T | D | E | F | G | H | I>;\\nexport declare function startWith<T, D>(v1: D): OperatorFunction<T, T | D>;\\nexport declare function startWith<T, D, E>(v1: D, v2: E): OperatorFunction<T, T | D | E>;\\nexport declare function startWith<T, D, E, F>(v1: D, v2: E, v3: F): OperatorFunction<T, T | D | E | F>;\\nexport declare function startWith<T, D, E, F, G>(v1: D, v2: E, v3: F, v4: G): OperatorFunction<T, T | D | E | F | G>;\\nexport declare function startWith<T, D, E, F, G, H>(v1: D, v2: E, v3: F, v4: G, v5: H): OperatorFunction<T, T | D | E | F | G | H>;\\nexport declare function startWith<T, D, E, F, G, H, I>(v1: D, v2: E, v3: F, v4: G, v5: H, v6: I): OperatorFunction<T, T | D | E | F | G | H | I>;\\nexport declare function startWith<T, D = T>(...array: D[]): OperatorFunction<T, T | D>;\\n/** @deprecated use {@link scheduled} and {@link concatAll} (e.g. `scheduled([[a, b, c], source], scheduler).pipe(concatAll())`) */\\nexport declare function startWith<T, D = T>(...array: Array<D | SchedulerLike>): OperatorFunction<T, T | D>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/subscribeOn.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Asynchronously subscribes Observers to this Observable on the specified {@link SchedulerLike}.\\n *\\n * With `subscribeOn` you can decide what type of scheduler a specific Observable will be using when it is subscribed to.\\n *\\n * Schedulers control the speed and order of emissions to observers from an Observable stream.\\n *\\n * ![](subscribeOn.png)\\n *\\n * ## Example\\n * Given the following code:\\n * ```javascript\\n * import { of, merge } from 'rxjs';\\n *\\n * const a = of(1, 2, 3, 4);\\n * const b = of(5, 6, 7, 8, 9);\\n * merge(a, b).subscribe(console.log);\\n * ```\\n *\\n * Both Observable `a` and `b` will emit their values directly and synchronously once they are subscribed to.\\n * This will result in the output of `1 2 3 4 5 6 7 8 9`.\\n *\\n * But if we instead us the `subscribeOn` operator declaring that we want to use the {@link asyncScheduler} for values emited by Observable `a`:\\n * ```javascript\\n * import { of, merge, asyncScheduler } from 'rxjs';\\n * import { subscribeOn } from 'rxjs/operators';\\n *\\n * const a = of(1, 2, 3, 4).pipe(subscribeOn(asyncScheduler));\\n * const b = of(5, 6, 7, 8, 9);\\n * merge(a, b).subscribe(console.log);\\n * ```\\n *\\n * The output will instead be `5 6 7 8 9 1 2 3 4`.\\n * The reason for this is that Observable `b` emits its values directly and synchronously like before\\n * but the emissions from `a` are scheduled on the event loop because we are now using the {@link asyncScheduler} for that specific Observable.\\n *\\n * @param {SchedulerLike} scheduler - The {@link SchedulerLike} to perform subscription actions on.\\n * @return {Observable<T>} The source Observable modified so that its subscriptions happen on the specified {@link SchedulerLike}.\\n .\\n * @method subscribeOn\\n * @owner Observable\\n */\\nexport declare function subscribeOn<T>(scheduler: SchedulerLike, delay?: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/switchAll.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, ObservableInput } from '../types';\\nexport declare function switchAll<T>(): OperatorFunction<ObservableInput<T>, T>;\\nexport declare function switchAll<R>(): OperatorFunction<any, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/switchMap.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function switchMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector is no longer supported, use inner map instead */\\nexport declare function switchMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction<T, ObservedValueOf<O>>;\\n/** @deprecated resultSelector is no longer supported, use inner map instead */\\nexport declare function switchMap<T, R, O extends ObservableInput<any>>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/switchMapTo.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction } from '../types';\\nexport declare function switchMapTo<R>(observable: ObservableInput<R>): OperatorFunction<any, R>;\\n/** @deprecated resultSelector is no longer supported. Switch to using switchMap with an inner map */\\nexport declare function switchMapTo<T, R>(observable: ObservableInput<R>, resultSelector: undefined): OperatorFunction<T, R>;\\n/** @deprecated resultSelector is no longer supported. Switch to using switchMap with an inner map */\\nexport declare function switchMapTo<T, I, R>(observable: ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/take.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Emits only the first `count` values emitted by the source Observable.\\n *\\n * <span class=\\\"informal\\\">Takes the first `count` values from the source, then\\n * completes.</span>\\n *\\n * ![](take.png)\\n *\\n * `take` returns an Observable that emits only the first `count` values emitted\\n * by the source Observable. If the source emits fewer than `count` values then\\n * all of its values are emitted. After that, it completes, regardless if the\\n * source completes.\\n *\\n * ## Example\\n * Take the first 5 seconds of an infinite 1-second interval Observable\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { take } from 'rxjs/operators';\\n *\\n * const intervalCount = interval(1000);\\n * const takeFive = intervalCount.pipe(take(5));\\n * takeFive.subscribe(x => console.log(x));\\n *\\n * // Logs:\\n * // 0\\n * // 1\\n * // 2\\n * // 3\\n * // 4\\n * ```\\n *\\n * @see {@link takeLast}\\n * @see {@link takeUntil}\\n * @see {@link takeWhile}\\n * @see {@link skip}\\n *\\n * @throws {ArgumentOutOfRangeError} When using `take(i)`, it delivers an\\n * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.\\n *\\n * @param {number} count The maximum number of `next` values to emit.\\n * @return {Observable<T>} An Observable that emits only the first `count`\\n * values emitted by the source Observable, or all of the values from the source\\n * if the source emits fewer than `count` values.\\n * @method take\\n * @owner Observable\\n */\\nexport declare function take<T>(count: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/takeLast.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Emits only the last `count` values emitted by the source Observable.\\n *\\n * <span class=\\\"informal\\\">Remembers the latest `count` values, then emits those\\n * only when the source completes.</span>\\n *\\n * ![](takeLast.png)\\n *\\n * `takeLast` returns an Observable that emits at most the last `count` values\\n * emitted by the source Observable. If the source emits fewer than `count`\\n * values then all of its values are emitted. This operator must wait until the\\n * `complete` notification emission from the source in order to emit the `next`\\n * values on the output Observable, because otherwise it is impossible to know\\n * whether or not more values will be emitted on the source. For this reason,\\n * all values are emitted synchronously, followed by the complete notification.\\n *\\n * ## Example\\n * Take the last 3 values of an Observable with many values\\n * ```ts\\n * import { range } from 'rxjs';\\n * import { takeLast } from 'rxjs/operators';\\n *\\n * const many = range(1, 100);\\n * const lastThree = many.pipe(takeLast(3));\\n * lastThree.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link take}\\n * @see {@link takeUntil}\\n * @see {@link takeWhile}\\n * @see {@link skip}\\n *\\n * @throws {ArgumentOutOfRangeError} When using `takeLast(i)`, it delivers an\\n * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.\\n *\\n * @param {number} count The maximum number of values to emit from the end of\\n * the sequence of values emitted by the source Observable.\\n * @return {Observable<T>} An Observable that emits at most the last count\\n * values emitted by the source Observable.\\n * @method takeLast\\n * @owner Observable\\n */\\nexport declare function takeLast<T>(count: number): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/takeUntil.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { MonoTypeOperatorFunction } from '../types';\\n/**\\n * Emits the values emitted by the source Observable until a `notifier`\\n * Observable emits a value.\\n *\\n * <span class=\\\"informal\\\">Lets values pass until a second Observable,\\n * `notifier`, emits a value. Then, it completes.</span>\\n *\\n * ![](takeUntil.png)\\n *\\n * `takeUntil` subscribes and begins mirroring the source Observable. It also\\n * monitors a second Observable, `notifier` that you provide. If the `notifier`\\n * emits a value, the output Observable stops mirroring the source Observable\\n * and completes. If the `notifier` doesn't emit any value and completes\\n * then `takeUntil` will pass all values.\\n *\\n * ## Example\\n * Tick every second until the first click happens\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { takeUntil } from 'rxjs/operators';\\n *\\n * const source = interval(1000);\\n * const clicks = fromEvent(document, 'click');\\n * const result = source.pipe(takeUntil(clicks));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link take}\\n * @see {@link takeLast}\\n * @see {@link takeWhile}\\n * @see {@link skip}\\n *\\n * @param {Observable} notifier The Observable whose first emitted value will\\n * cause the output Observable of `takeUntil` to stop emitting values from the\\n * source Observable.\\n * @return {Observable<T>} An Observable that emits the values from the source\\n * Observable until such time as `notifier` emits its first value.\\n * @method takeUntil\\n * @owner Observable\\n */\\nexport declare function takeUntil<T>(notifier: Observable<any>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/takeWhile.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, MonoTypeOperatorFunction } from '../types';\\nexport declare function takeWhile<T, S extends T>(predicate: (value: T, index: number) => value is S): OperatorFunction<T, S>;\\nexport declare function takeWhile<T, S extends T>(predicate: (value: T, index: number) => value is S, inclusive: false): OperatorFunction<T, S>;\\nexport declare function takeWhile<T>(predicate: (value: T, index: number) => boolean, inclusive?: boolean): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/tap.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, PartialObserver } from '../types';\\n/** @deprecated Use an observer instead of a complete callback */\\nexport declare function tap<T>(next: null | undefined, error: null | undefined, complete: () => void): MonoTypeOperatorFunction<T>;\\n/** @deprecated Use an observer instead of an error callback */\\nexport declare function tap<T>(next: null | undefined, error: (error: any) => void, complete?: () => void): MonoTypeOperatorFunction<T>;\\n/** @deprecated Use an observer instead of a complete callback */\\nexport declare function tap<T>(next: (value: T) => void, error: null | undefined, complete: () => void): MonoTypeOperatorFunction<T>;\\nexport declare function tap<T>(next?: (x: T) => void, error?: (e: any) => void, complete?: () => void): MonoTypeOperatorFunction<T>;\\nexport declare function tap<T>(observer: PartialObserver<T>): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/throttle.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SubscribableOrPromise } from '../types';\\nexport interface ThrottleConfig {\\n    leading?: boolean;\\n    trailing?: boolean;\\n}\\nexport declare const defaultThrottleConfig: ThrottleConfig;\\n/**\\n * Emits a value from the source Observable, then ignores subsequent source\\n * values for a duration determined by another Observable, then repeats this\\n * process.\\n *\\n * <span class=\\\"informal\\\">It's like {@link throttleTime}, but the silencing\\n * duration is determined by a second Observable.</span>\\n *\\n * ![](throttle.png)\\n *\\n * `throttle` emits the source Observable values on the output Observable\\n * when its internal timer is disabled, and ignores source values when the timer\\n * is enabled. Initially, the timer is disabled. As soon as the first source\\n * value arrives, it is forwarded to the output Observable, and then the timer\\n * is enabled by calling the `durationSelector` function with the source value,\\n * which returns the \\\"duration\\\" Observable. When the duration Observable emits a\\n * value or completes, the timer is disabled, and this process repeats for the\\n * next source value.\\n *\\n * ## Example\\n * Emit clicks at a rate of at most one click per second\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { throttle } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(throttle(ev => interval(1000)));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link audit}\\n * @see {@link debounce}\\n * @see {@link delayWhen}\\n * @see {@link sample}\\n * @see {@link throttleTime}\\n *\\n * @param {function(value: T): SubscribableOrPromise} durationSelector A function\\n * that receives a value from the source Observable, for computing the silencing\\n * duration for each source value, returned as an Observable or a Promise.\\n * @param {Object} config a configuration object to define `leading` and `trailing` behavior. Defaults\\n * to `{ leading: true, trailing: false }`.\\n * @return {Observable<T>} An Observable that performs the throttle operation to\\n * limit the rate of emissions from the source.\\n * @method throttle\\n * @owner Observable\\n */\\nexport declare function throttle<T>(durationSelector: (value: T) => SubscribableOrPromise<any>, config?: ThrottleConfig): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/throttleTime.d.ts\"\n    ],\n    \"content\": \"import { ThrottleConfig } from './throttle';\\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Emits a value from the source Observable, then ignores subsequent source\\n * values for `duration` milliseconds, then repeats this process.\\n *\\n * <span class=\\\"informal\\\">Lets a value pass, then ignores source values for the\\n * next `duration` milliseconds.</span>\\n *\\n * ![](throttleTime.png)\\n *\\n * `throttleTime` emits the source Observable values on the output Observable\\n * when its internal timer is disabled, and ignores source values when the timer\\n * is enabled. Initially, the timer is disabled. As soon as the first source\\n * value arrives, it is forwarded to the output Observable, and then the timer\\n * is enabled. After `duration` milliseconds (or the time unit determined\\n * internally by the optional `scheduler`) has passed, the timer is disabled,\\n * and this process repeats for the next source value. Optionally takes a\\n * {@link SchedulerLike} for managing timers.\\n *\\n * ## Examples\\n *\\n * #### Limit click rate\\n *\\n * Emit clicks at a rate of at most one click per second\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { throttleTime } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(throttleTime(1000));\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * #### Double Click\\n *\\n * The following example only emits clicks which happen within a subsequent\\n * delay of 400ms of the previous click. This for example can emulate a double\\n * click. It makes use of the `trailing` parameter of the throttle configuration.\\n *\\n * ```ts\\n * import { fromEvent, asyncScheduler } from 'rxjs';\\n * import { throttleTime, withLatestFrom } from 'rxjs/operators';\\n *\\n * // defaultThottleConfig = { leading: true, trailing: false }\\n * const throttleConfig = {\\n *   leading: false,\\n *   trailing: true\\n * }\\n *\\n * const click = fromEvent(document, 'click');\\n * const doubleClick = click.pipe(\\n *   throttleTime(400, asyncScheduler, throttleConfig)\\n * );\\n *\\n * doubleClick.subscribe((throttleValue: Event) => {\\n *   console.log(`Double-clicked! Timestamp: ${throttleValue.timeStamp}`);\\n * });\\n * ```\\n *\\n * If you enable the `leading` parameter in this example, the output would be the primary click and\\n * the double click, but restricts additional clicks within 400ms.\\n *\\n * @see {@link auditTime}\\n * @see {@link debounceTime}\\n * @see {@link delay}\\n * @see {@link sampleTime}\\n * @see {@link throttle}\\n *\\n * @param {number} duration Time to wait before emitting another value after\\n * emitting the last value, measured in milliseconds or the time unit determined\\n * internally by the optional `scheduler`.\\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\\n * managing the timers that handle the throttling.\\n * @param {Object} config a configuration object to define `leading` and\\n * `trailing` behavior. Defaults to `{ leading: true, trailing: false }`.\\n * @return {Observable<T>} An Observable that performs the throttle operation to\\n * limit the rate of emissions from the source.\\n * @method throttleTime\\n * @owner Observable\\n */\\nexport declare function throttleTime<T>(duration: number, scheduler?: SchedulerLike, config?: ThrottleConfig): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/throwIfEmpty.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction } from '../types';\\n/**\\n * If the source observable completes without emitting a value, it will emit\\n * an error. The error will be created at that time by the optional\\n * `errorFactory` argument, otherwise, the error will be {@link EmptyError}.\\n *\\n * ![](throwIfEmpty.png)\\n *\\n * ## Example\\n * ```ts\\n * import { fromEvent, timer } from 'rxjs';\\n * import { throwIfEmpty, takeUntil } from 'rxjs/operators';\\n *\\n * const click$ = fromEvent(document, 'click');\\n *\\n * click$.pipe(\\n *   takeUntil(timer(1000)),\\n *   throwIfEmpty(\\n *     () => new Error('the document was not clicked within 1 second')\\n *   ),\\n * )\\n * .subscribe({\\n *   next() { console.log('The button was clicked'); },\\n *   error(err) { console.error(err); }\\n * });\\n * ```\\n *\\n * @param errorFactory A factory function called to produce the\\n * error to be thrown when the source observable completes without emitting a\\n * value.\\n */\\nexport declare function throwIfEmpty<T>(errorFactory?: (() => any)): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/timeInterval.d.ts\"\n    ],\n    \"content\": \"import { SchedulerLike, OperatorFunction } from '../types';\\n/**\\n *\\n * Emits an object containing the current value, and the time that has\\n * passed between emitting the current value and the previous value, which is\\n * calculated by using the provided `scheduler`'s `now()` method to retrieve\\n * the current time at each emission, then calculating the difference. The `scheduler`\\n * defaults to {@link asyncScheduler}, so by default, the `interval` will be in\\n * milliseconds.\\n *\\n * <span class=\\\"informal\\\">Convert an Observable that emits items into one that\\n * emits indications of the amount of time elapsed between those emissions.</span>\\n *\\n * ![](timeinterval.png)\\n *\\n * ## Examples\\n * Emit inteval between current value with the last value\\n *\\n * ```ts\\n * const seconds = interval(1000);\\n *\\n * seconds.pipe(timeInterval())\\n * .subscribe(\\n *     value => console.log(value),\\n *     err => console.log(err),\\n * );\\n *\\n * seconds.pipe(timeout(900))\\n * .subscribe(\\n *     value => console.log(value),\\n *     err => console.log(err),\\n * );\\n *\\n * // NOTE: The values will never be this precise,\\n * // intervals created with `interval` or `setInterval`\\n * // are non-deterministic.\\n *\\n * // {value: 0, interval: 1000}\\n * // {value: 1, interval: 1000}\\n * // {value: 2, interval: 1000}\\n * ```\\n *\\n * @param {SchedulerLike} [scheduler] Scheduler used to get the current time.\\n * @return {Observable<{ interval: number, value: T }>} Observable that emit infomation about value and interval\\n * @method timeInterval\\n */\\nexport declare function timeInterval<T>(scheduler?: SchedulerLike): OperatorFunction<T, TimeInterval<T>>;\\n/**\\n * @deprecated exposed API, use as interface only.\\n */\\nexport declare class TimeInterval<T> {\\n    value: T;\\n    interval: number;\\n    constructor(value: T, interval: number);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/timeout.d.ts\"\n    ],\n    \"content\": \"import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\\n/**\\n *\\n * Errors if Observable does not emit a value in given time span.\\n *\\n * <span class=\\\"informal\\\">Timeouts on Observable that doesn't emit values fast enough.</span>\\n *\\n * ![](timeout.png)\\n *\\n * `timeout` operator accepts as an argument either a number or a Date.\\n *\\n * If number was provided, it returns an Observable that behaves like a source\\n * Observable, unless there is a period of time where there is no value emitted.\\n * So if you provide `100` as argument and first value comes after 50ms from\\n * the moment of subscription, this value will be simply re-emitted by the resulting\\n * Observable. If however after that 100ms passes without a second value being emitted,\\n * stream will end with an error and source Observable will be unsubscribed.\\n * These checks are performed throughout whole lifecycle of Observable - from the moment\\n * it was subscribed to, until it completes or errors itself. Thus every value must be\\n * emitted within specified period since previous value.\\n *\\n * If provided argument was Date, returned Observable behaves differently. It throws\\n * if Observable did not complete before provided Date. This means that periods between\\n * emission of particular values do not matter in this case. If Observable did not complete\\n * before provided Date, source Observable will be unsubscribed. Other than that, resulting\\n * stream behaves just as source Observable.\\n *\\n * `timeout` accepts also a Scheduler as a second parameter. It is used to schedule moment (or moments)\\n * when returned Observable will check if source stream emitted value or completed.\\n *\\n * ## Examples\\n * Check if ticks are emitted within certain timespan\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { timeout } from 'rxjs/operators';\\n *\\n * const seconds = interval(1000);\\n *\\n * seconds.pipe(timeout(1100))      // Let's use bigger timespan to be safe,\\n *                                  // since `interval` might fire a bit later then scheduled.\\n * .subscribe(\\n *     value => console.log(value), // Will emit numbers just as regular `interval` would.\\n *     err => console.log(err),     // Will never be called.\\n * );\\n *\\n * seconds.pipe(timeout(900))\\n * .subscribe(\\n *     value => console.log(value), // Will never be called.\\n *     err => console.log(err),     // Will emit error before even first value is emitted,\\n *                                  // since it did not arrive within 900ms period.\\n * );\\n * ```\\n *\\n * Use Date to check if Observable completed\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { timeout } from 'rxjs/operators';\\n *\\n * const seconds = interval(1000);\\n *\\n * seconds.pipe(\\n *   timeout(new Date(\\\"December 17, 2020 03:24:00\\\")),\\n * )\\n * .subscribe(\\n *     value => console.log(value), // Will emit values as regular `interval` would\\n *                                  // until December 17, 2020 at 03:24:00.\\n *     err => console.log(err)      // On December 17, 2020 at 03:24:00 it will emit an error,\\n *                                  // since Observable did not complete by then.\\n * );\\n * ```\\n * @see {@link timeoutWith}\\n *\\n * @param {number|Date} due Number specifying period within which Observable must emit values\\n *                          or Date specifying before when Observable should complete\\n * @param {SchedulerLike} [scheduler] Scheduler controlling when timeout checks occur.\\n * @return {Observable<T>} Observable that mirrors behaviour of source, unless timeout checks fail.\\n * @method timeout\\n * @owner Observable\\n */\\nexport declare function timeout<T>(due: number | Date, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/timeoutWith.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, SchedulerLike } from '../types';\\nexport declare function timeoutWith<T, R>(due: number | Date, withObservable: ObservableInput<R>, scheduler?: SchedulerLike): OperatorFunction<T, T | R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/timestamp.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, SchedulerLike, Timestamp as TimestampInterface } from '../types';\\n/**\\n * Attaches a timestamp to each item emitted by an observable indicating when it was emitted\\n *\\n * The `timestamp` operator maps the *source* observable stream to an object of type\\n * `{value: T, timestamp: R}`. The properties are generically typed. The `value` property contains the value\\n * and type of the *source* observable. The `timestamp` is generated by the schedulers `now` function. By\\n * default it uses the *async* scheduler which simply returns `Date.now()` (milliseconds since 1970/01/01\\n * 00:00:00:000) and therefore is of type `number`.\\n *\\n * ![](timestamp.png)\\n *\\n * ## Example\\n *\\n * In this example there is a timestamp attached to the documents click event.\\n *\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { timestamp } from 'rxjs/operators';\\n *\\n * const clickWithTimestamp = fromEvent(document, 'click').pipe(\\n *   timestamp()\\n * );\\n *\\n * // Emits data of type {value: MouseEvent, timestamp: number}\\n * clickWithTimestamp.subscribe(data => {\\n *   console.log(data);\\n * });\\n * ```\\n *\\n * @param scheduler\\n * @return {Observable<Timestamp<any>>|WebSocketSubject<T>|Observable<T>}\\n * @method timestamp\\n * @owner Observable\\n */\\nexport declare function timestamp<T>(scheduler?: SchedulerLike): OperatorFunction<T, Timestamp<T>>;\\nexport declare class Timestamp<T> implements TimestampInterface<T> {\\n    value: T;\\n    timestamp: number;\\n    constructor(value: T, timestamp: number);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/toArray.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction } from '../types';\\n/**\\n * Collects all source emissions and emits them as an array when the source completes.\\n *\\n * <span class=\\\"informal\\\">Get all values inside an array when the source completes</span>\\n *\\n * ![](toArray.png)\\n *\\n * `toArray` will wait until the source Observable completes before emitting\\n * the array containing all emissions. When the source Observable errors no\\n * array will be emitted.\\n *\\n *  ## Example\\n * ```ts\\n * import { interval } from 'rxjs';\\n * import { toArray, take } from 'rxjs/operators';\\n *\\n * const source = interval(1000);\\n * const example = source.pipe(\\n *   take(10),\\n *   toArray()\\n * );\\n *\\n * const subscribe = example.subscribe(val => console.log(val));\\n *\\n * // output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\\n *\\n * ```\\n* @return An array from an observable sequence.\\n* @method toArray\\n* @owner Observable\\n*/\\nexport declare function toArray<T>(): OperatorFunction<T, T[]>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/window.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Branch out the source Observable values as a nested Observable whenever\\n * `windowBoundaries` emits.\\n *\\n * <span class=\\\"informal\\\">It's like {@link buffer}, but emits a nested Observable\\n * instead of an array.</span>\\n *\\n * ![](window.png)\\n *\\n * Returns an Observable that emits windows of items it collects from the source\\n * Observable. The output Observable emits connected, non-overlapping\\n * windows. It emits the current window and opens a new one whenever the\\n * Observable `windowBoundaries` emits an item. Because each window is an\\n * Observable, the output is a higher-order Observable.\\n *\\n * ## Example\\n * In every window of 1 second each, emit at most 2 click events\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { window, mergeAll, map, take } from 'rxjs/operators';\\n *\\n *  const clicks = fromEvent(document, 'click');\\n *  const sec = interval(1000);\\n *  const result = clicks.pipe(\\n *      window(sec),\\n *      map(win => win.pipe(take(2))), // each window has at most 2 emissions\\n *      mergeAll(),              // flatten the Observable-of-Observables\\n *  );\\n *  result.subscribe(x => console.log(x));\\n * ```\\n * @see {@link windowCount}\\n * @see {@link windowTime}\\n * @see {@link windowToggle}\\n * @see {@link windowWhen}\\n * @see {@link buffer}\\n *\\n * @param {Observable<any>} windowBoundaries An Observable that completes the\\n * previous window and starts a new window.\\n * @return {Observable<Observable<T>>} An Observable of windows, which are\\n * Observables emitting values of the source Observable.\\n * @method window\\n * @owner Observable\\n */\\nexport declare function window<T>(windowBoundaries: Observable<any>): OperatorFunction<T, Observable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/windowCount.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Branch out the source Observable values as a nested Observable with each\\n * nested Observable emitting at most `windowSize` values.\\n *\\n * <span class=\\\"informal\\\">It's like {@link bufferCount}, but emits a nested\\n * Observable instead of an array.</span>\\n *\\n * ![](windowCount.png)\\n *\\n * Returns an Observable that emits windows of items it collects from the source\\n * Observable. The output Observable emits windows every `startWindowEvery`\\n * items, each containing no more than `windowSize` items. When the source\\n * Observable completes or encounters an error, the output Observable emits\\n * the current window and propagates the notification from the source\\n * Observable. If `startWindowEvery` is not provided, then new windows are\\n * started immediately at the start of the source and when each window completes\\n * with size `windowSize`.\\n *\\n * ## Examples\\n * Ignore every 3rd click event, starting from the first one\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { windowCount, map, mergeAll, skip } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(\\n *   windowCount(3),\\n *   map(win => win.pipe(skip(1))), // skip first of every 3 clicks\\n *   mergeAll()                     // flatten the Observable-of-Observables\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * Ignore every 3rd click event, starting from the third one\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { windowCount, mergeAll } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(\\n *   windowCount(2, 3),\\n *   mergeAll(),              // flatten the Observable-of-Observables\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link window}\\n * @see {@link windowTime}\\n * @see {@link windowToggle}\\n * @see {@link windowWhen}\\n * @see {@link bufferCount}\\n *\\n * @param {number} windowSize The maximum number of values emitted by each\\n * window.\\n * @param {number} [startWindowEvery] Interval at which to start a new window.\\n * For example if `startWindowEvery` is `2`, then a new window will be started\\n * on every other value from the source. A new window is started at the\\n * beginning of the source by default.\\n * @return {Observable<Observable<T>>} An Observable of windows, which in turn\\n * are Observable of values.\\n * @method windowCount\\n * @owner Observable\\n */\\nexport declare function windowCount<T>(windowSize: number, startWindowEvery?: number): OperatorFunction<T, Observable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/windowTime.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction, SchedulerLike } from '../types';\\n/**\\n * Branch out the source Observable values as a nested Observable periodically\\n * in time.\\n *\\n * <span class=\\\"informal\\\">It's like {@link bufferTime}, but emits a nested\\n * Observable instead of an array.</span>\\n *\\n * ![](windowTime.png)\\n *\\n * Returns an Observable that emits windows of items it collects from the source\\n * Observable. The output Observable starts a new window periodically, as\\n * determined by the `windowCreationInterval` argument. It emits each window\\n * after a fixed timespan, specified by the `windowTimeSpan` argument. When the\\n * source Observable completes or encounters an error, the output Observable\\n * emits the current window and propagates the notification from the source\\n * Observable. If `windowCreationInterval` is not provided, the output\\n * Observable starts a new window when the previous window of duration\\n * `windowTimeSpan` completes. If `maxWindowCount` is provided, each window\\n * will emit at most fixed number of values. Window will complete immediately\\n * after emitting last value and next one still will open as specified by\\n * `windowTimeSpan` and `windowCreationInterval` arguments.\\n *\\n * ## Examples\\n * In every window of 1 second each, emit at most 2 click events\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { windowTime, map, mergeAll, take } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(\\n *   windowTime(1000),\\n *   map(win => win.pipe(take(2))), // each window has at most 2 emissions\\n *   mergeAll(),                    // flatten the Observable-of-Observables\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * Every 5 seconds start a window 1 second long, and emit at most 2 click events per window\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { windowTime, map, mergeAll, take } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(\\n *   windowTime(1000, 5000),\\n *   map(win => win.pipe(take(2))), // each window has at most 2 emissions\\n *   mergeAll(),                    // flatten the Observable-of-Observables\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * Same as example above but with maxWindowCount instead of take\\n * ```ts\\n * import { fromEvent } from 'rxjs';\\n * import { windowTime, mergeAll } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(\\n *   windowTime(1000, 5000, 2), // each window has still at most 2 emissions\\n *   mergeAll(),                // flatten the Observable-of-Observables\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link window}\\n * @see {@link windowCount}\\n * @see {@link windowToggle}\\n * @see {@link windowWhen}\\n * @see {@link bufferTime}\\n *\\n * @param {number} windowTimeSpan The amount of time to fill each window.\\n * @param {number} [windowCreationInterval] The interval at which to start new\\n * windows.\\n * @param {number} [maxWindowSize=Number.POSITIVE_INFINITY] Max number of\\n * values each window can emit before completion.\\n * @param {SchedulerLike} [scheduler=async] The scheduler on which to schedule the\\n * intervals that determine window boundaries.\\n * @return {Observable<Observable<T>>} An observable of windows, which in turn\\n * are Observables.\\n * @method windowTime\\n * @owner Observable\\n */\\nexport declare function windowTime<T>(windowTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>;\\nexport declare function windowTime<T>(windowTimeSpan: number, windowCreationInterval: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>;\\nexport declare function windowTime<T>(windowTimeSpan: number, windowCreationInterval: number, maxWindowSize: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/windowToggle.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Branch out the source Observable values as a nested Observable starting from\\n * an emission from `openings` and ending when the output of `closingSelector`\\n * emits.\\n *\\n * <span class=\\\"informal\\\">It's like {@link bufferToggle}, but emits a nested\\n * Observable instead of an array.</span>\\n *\\n * ![](windowToggle.png)\\n *\\n * Returns an Observable that emits windows of items it collects from the source\\n * Observable. The output Observable emits windows that contain those items\\n * emitted by the source Observable between the time when the `openings`\\n * Observable emits an item and when the Observable returned by\\n * `closingSelector` emits an item.\\n *\\n * ## Example\\n * Every other second, emit the click events from the next 500ms\\n * ```ts\\n * import { fromEvent, interval, EMPTY } from 'rxjs';\\n * import { windowToggle, mergeAll } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const openings = interval(1000);\\n * const result = clicks.pipe(\\n *   windowToggle(openings, i => i % 2 ? interval(500) : EMPTY),\\n *   mergeAll()\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link window}\\n * @see {@link windowCount}\\n * @see {@link windowTime}\\n * @see {@link windowWhen}\\n * @see {@link bufferToggle}\\n *\\n * @param {Observable<O>} openings An observable of notifications to start new\\n * windows.\\n * @param {function(value: O): Observable} closingSelector A function that takes\\n * the value emitted by the `openings` observable and returns an Observable,\\n * which, when it emits (either `next` or `complete`), signals that the\\n * associated window should complete.\\n * @return {Observable<Observable<T>>} An observable of windows, which in turn\\n * are Observables.\\n * @method windowToggle\\n * @owner Observable\\n */\\nexport declare function windowToggle<T, O>(openings: Observable<O>, closingSelector: (openValue: O) => Observable<any>): OperatorFunction<T, Observable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/windowWhen.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { OperatorFunction } from '../types';\\n/**\\n * Branch out the source Observable values as a nested Observable using a\\n * factory function of closing Observables to determine when to start a new\\n * window.\\n *\\n * <span class=\\\"informal\\\">It's like {@link bufferWhen}, but emits a nested\\n * Observable instead of an array.</span>\\n *\\n * ![](windowWhen.png)\\n *\\n * Returns an Observable that emits windows of items it collects from the source\\n * Observable. The output Observable emits connected, non-overlapping windows.\\n * It emits the current window and opens a new one whenever the Observable\\n * produced by the specified `closingSelector` function emits an item. The first\\n * window is opened immediately when subscribing to the output Observable.\\n *\\n * ## Example\\n * Emit only the first two clicks events in every window of [1-5] random seconds\\n * ```ts\\n * import { fromEvent, interval } from 'rxjs';\\n * import { windowWhen, map, mergeAll, take } from 'rxjs/operators';\\n *\\n * const clicks = fromEvent(document, 'click');\\n * const result = clicks.pipe(\\n *   windowWhen(() => interval(1000 + Math.random() * 4000)),\\n *   map(win => win.pipe(take(2))),     // each window has at most 2 emissions\\n *   mergeAll()                         // flatten the Observable-of-Observables\\n * );\\n * result.subscribe(x => console.log(x));\\n * ```\\n *\\n * @see {@link window}\\n * @see {@link windowCount}\\n * @see {@link windowTime}\\n * @see {@link windowToggle}\\n * @see {@link bufferWhen}\\n *\\n * @param {function(): Observable} closingSelector A function that takes no\\n * arguments and returns an Observable that signals (on either `next` or\\n * `complete`) when to close the previous window and start a new one.\\n * @return {Observable<Observable<T>>} An observable of windows, which in turn\\n * are Observables.\\n * @method windowWhen\\n * @owner Observable\\n */\\nexport declare function windowWhen<T>(closingSelector: () => Observable<any>): OperatorFunction<T, Observable<T>>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/withLatestFrom.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\\nexport declare function withLatestFrom<T, R>(project: (v1: T) => R): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, R>(source2: O2, project: (v1: T, v2: ObservedValueOf<O2>) => R): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, R>(v2: O2, v3: O3, project: (v1: T, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>) => R): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, R>(v2: O2, v3: O3, v4: O4, project: (v1: T, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>) => R): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, R>(v2: O2, v3: O3, v4: O4, v5: O5, project: (v1: T, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>) => R): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>, R>(v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, project: (v1: T, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>, v6: ObservedValueOf<O6>) => R): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>>(source2: O2): OperatorFunction<T, [T, ObservedValueOf<O2>]>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v2: O2, v3: O3): OperatorFunction<T, [T, ObservedValueOf<O2>, ObservedValueOf<O3>]>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v2: O2, v3: O3, v4: O4): OperatorFunction<T, [T, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v2: O2, v3: O3, v4: O4, v5: O5): OperatorFunction<T, [T, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;\\nexport declare function withLatestFrom<T, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v2: O2, v3: O3, v4: O4, v5: O5, v6: O6): OperatorFunction<T, [T, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;\\nexport declare function withLatestFrom<T, R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, R>(array: ObservableInput<any>[]): OperatorFunction<T, R>;\\nexport declare function withLatestFrom<T, R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/zip.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, OperatorFunction } from '../types';\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, R>(project: (v1: T) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, R>(v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, T4, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, T4, T5, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, T4, T5, T6, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2>(v2: ObservableInput<T2>): OperatorFunction<T, [T, T2]>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): OperatorFunction<T, [T, T2, T3]>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): OperatorFunction<T, [T, T2, T3, T4]>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): OperatorFunction<T, [T, T2, T3, T4, T5]>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): OperatorFunction<T, [T, T2, T3, T4, T5, T6]>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, R>(...observables: Array<ObservableInput<T> | ((...values: Array<T>) => R)>): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, R>(array: Array<ObservableInput<T>>): OperatorFunction<T, R>;\\n/** @deprecated Deprecated in favor of static zip. */\\nexport declare function zip<T, TOther, R>(array: Array<ObservableInput<TOther>>, project: (v1: T, ...values: Array<TOther>) => R): OperatorFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/operators/zipAll.d.ts\"\n    ],\n    \"content\": \"import { OperatorFunction, ObservableInput } from '../types';\\nexport declare function zipAll<T>(): OperatorFunction<ObservableInput<T>, T[]>;\\nexport declare function zipAll<T>(): OperatorFunction<any, T[]>;\\nexport declare function zipAll<T, R>(project: (...values: T[]) => R): OperatorFunction<ObservableInput<T>, R>;\\nexport declare function zipAll<R>(project: (...values: Array<any>) => R): OperatorFunction<any, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/OuterSubscriber.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from './Subscriber';\\nimport { InnerSubscriber } from './InnerSubscriber';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class OuterSubscriber<T, R> extends Subscriber<T> {\\n    notifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number, innerSub: InnerSubscriber<T, R>): void;\\n    notifyError(error: any, innerSub: InnerSubscriber<T, R>): void;\\n    notifyComplete(innerSub: InnerSubscriber<T, R>): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/ReplaySubject.d.ts\"\n    ],\n    \"content\": \"import { Subject } from './Subject';\\nimport { SchedulerLike } from './types';\\nimport { Subscriber } from './Subscriber';\\nimport { Subscription } from './Subscription';\\n/**\\n * A variant of Subject that \\\"replays\\\" or emits old values to new subscribers.\\n * It buffers a set number of values and will emit those values immediately to\\n * any new subscribers in addition to emitting new values to existing subscribers.\\n *\\n * @class ReplaySubject<T>\\n */\\nexport declare class ReplaySubject<T> extends Subject<T> {\\n    private scheduler?;\\n    private _events;\\n    private _bufferSize;\\n    private _windowTime;\\n    private _infiniteTimeWindow;\\n    constructor(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike);\\n    private nextInfiniteTimeWindow;\\n    private nextTimeWindow;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n    _getNow(): number;\\n    private _trimBufferThenGetEvents;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Rx.d.ts\"\n    ],\n    \"content\": \"export { Subject, AnonymousSubject } from './Subject';\\nexport { Observable } from './Observable';\\nexport { config } from './config';\\nimport 'rxjs-compat/add/observable/bindCallback';\\nimport 'rxjs-compat/add/observable/bindNodeCallback';\\nimport 'rxjs-compat/add/observable/combineLatest';\\nimport 'rxjs-compat/add/observable/concat';\\nimport 'rxjs-compat/add/observable/defer';\\nimport 'rxjs-compat/add/observable/empty';\\nimport 'rxjs-compat/add/observable/forkJoin';\\nimport 'rxjs-compat/add/observable/from';\\nimport 'rxjs-compat/add/observable/fromEvent';\\nimport 'rxjs-compat/add/observable/fromEventPattern';\\nimport 'rxjs-compat/add/observable/fromPromise';\\nimport 'rxjs-compat/add/observable/generate';\\nimport 'rxjs-compat/add/observable/if';\\nimport 'rxjs-compat/add/observable/interval';\\nimport 'rxjs-compat/add/observable/merge';\\nimport 'rxjs-compat/add/observable/race';\\nimport 'rxjs-compat/add/observable/never';\\nimport 'rxjs-compat/add/observable/of';\\nimport 'rxjs-compat/add/observable/onErrorResumeNext';\\nimport 'rxjs-compat/add/observable/pairs';\\nimport 'rxjs-compat/add/observable/range';\\nimport 'rxjs-compat/add/observable/using';\\nimport 'rxjs-compat/add/observable/throw';\\nimport 'rxjs-compat/add/observable/timer';\\nimport 'rxjs-compat/add/observable/zip';\\nimport 'rxjs-compat/add/observable/dom/ajax';\\nimport 'rxjs-compat/add/observable/dom/webSocket';\\nimport 'rxjs-compat/add/operator/buffer';\\nimport 'rxjs-compat/add/operator/bufferCount';\\nimport 'rxjs-compat/add/operator/bufferTime';\\nimport 'rxjs-compat/add/operator/bufferToggle';\\nimport 'rxjs-compat/add/operator/bufferWhen';\\nimport 'rxjs-compat/add/operator/catch';\\nimport 'rxjs-compat/add/operator/combineAll';\\nimport 'rxjs-compat/add/operator/combineLatest';\\nimport 'rxjs-compat/add/operator/concat';\\nimport 'rxjs-compat/add/operator/concatAll';\\nimport 'rxjs-compat/add/operator/concatMap';\\nimport 'rxjs-compat/add/operator/concatMapTo';\\nimport 'rxjs-compat/add/operator/count';\\nimport 'rxjs-compat/add/operator/dematerialize';\\nimport 'rxjs-compat/add/operator/debounce';\\nimport 'rxjs-compat/add/operator/debounceTime';\\nimport 'rxjs-compat/add/operator/defaultIfEmpty';\\nimport 'rxjs-compat/add/operator/delay';\\nimport 'rxjs-compat/add/operator/delayWhen';\\nimport 'rxjs-compat/add/operator/distinct';\\nimport 'rxjs-compat/add/operator/distinctUntilChanged';\\nimport 'rxjs-compat/add/operator/distinctUntilKeyChanged';\\nimport 'rxjs-compat/add/operator/do';\\nimport 'rxjs-compat/add/operator/exhaust';\\nimport 'rxjs-compat/add/operator/exhaustMap';\\nimport 'rxjs-compat/add/operator/expand';\\nimport 'rxjs-compat/add/operator/elementAt';\\nimport 'rxjs-compat/add/operator/filter';\\nimport 'rxjs-compat/add/operator/finally';\\nimport 'rxjs-compat/add/operator/find';\\nimport 'rxjs-compat/add/operator/findIndex';\\nimport 'rxjs-compat/add/operator/first';\\nimport 'rxjs-compat/add/operator/groupBy';\\nimport 'rxjs-compat/add/operator/ignoreElements';\\nimport 'rxjs-compat/add/operator/isEmpty';\\nimport 'rxjs-compat/add/operator/audit';\\nimport 'rxjs-compat/add/operator/auditTime';\\nimport 'rxjs-compat/add/operator/last';\\nimport 'rxjs-compat/add/operator/let';\\nimport 'rxjs-compat/add/operator/every';\\nimport 'rxjs-compat/add/operator/map';\\nimport 'rxjs-compat/add/operator/mapTo';\\nimport 'rxjs-compat/add/operator/materialize';\\nimport 'rxjs-compat/add/operator/max';\\nimport 'rxjs-compat/add/operator/merge';\\nimport 'rxjs-compat/add/operator/mergeAll';\\nimport 'rxjs-compat/add/operator/mergeMap';\\nimport 'rxjs-compat/add/operator/mergeMapTo';\\nimport 'rxjs-compat/add/operator/mergeScan';\\nimport 'rxjs-compat/add/operator/min';\\nimport 'rxjs-compat/add/operator/multicast';\\nimport 'rxjs-compat/add/operator/observeOn';\\nimport 'rxjs-compat/add/operator/onErrorResumeNext';\\nimport 'rxjs-compat/add/operator/pairwise';\\nimport 'rxjs-compat/add/operator/partition';\\nimport 'rxjs-compat/add/operator/pluck';\\nimport 'rxjs-compat/add/operator/publish';\\nimport 'rxjs-compat/add/operator/publishBehavior';\\nimport 'rxjs-compat/add/operator/publishReplay';\\nimport 'rxjs-compat/add/operator/publishLast';\\nimport 'rxjs-compat/add/operator/race';\\nimport 'rxjs-compat/add/operator/reduce';\\nimport 'rxjs-compat/add/operator/repeat';\\nimport 'rxjs-compat/add/operator/repeatWhen';\\nimport 'rxjs-compat/add/operator/retry';\\nimport 'rxjs-compat/add/operator/retryWhen';\\nimport 'rxjs-compat/add/operator/sample';\\nimport 'rxjs-compat/add/operator/sampleTime';\\nimport 'rxjs-compat/add/operator/scan';\\nimport 'rxjs-compat/add/operator/sequenceEqual';\\nimport 'rxjs-compat/add/operator/share';\\nimport 'rxjs-compat/add/operator/shareReplay';\\nimport 'rxjs-compat/add/operator/single';\\nimport 'rxjs-compat/add/operator/skip';\\nimport 'rxjs-compat/add/operator/skipLast';\\nimport 'rxjs-compat/add/operator/skipUntil';\\nimport 'rxjs-compat/add/operator/skipWhile';\\nimport 'rxjs-compat/add/operator/startWith';\\nimport 'rxjs-compat/add/operator/subscribeOn';\\nimport 'rxjs-compat/add/operator/switch';\\nimport 'rxjs-compat/add/operator/switchMap';\\nimport 'rxjs-compat/add/operator/switchMapTo';\\nimport 'rxjs-compat/add/operator/take';\\nimport 'rxjs-compat/add/operator/takeLast';\\nimport 'rxjs-compat/add/operator/takeUntil';\\nimport 'rxjs-compat/add/operator/takeWhile';\\nimport 'rxjs-compat/add/operator/throttle';\\nimport 'rxjs-compat/add/operator/throttleTime';\\nimport 'rxjs-compat/add/operator/timeInterval';\\nimport 'rxjs-compat/add/operator/timeout';\\nimport 'rxjs-compat/add/operator/timeoutWith';\\nimport 'rxjs-compat/add/operator/timestamp';\\nimport 'rxjs-compat/add/operator/toArray';\\nimport 'rxjs-compat/add/operator/toPromise';\\nimport 'rxjs-compat/add/operator/window';\\nimport 'rxjs-compat/add/operator/windowCount';\\nimport 'rxjs-compat/add/operator/windowTime';\\nimport 'rxjs-compat/add/operator/windowToggle';\\nimport 'rxjs-compat/add/operator/windowWhen';\\nimport 'rxjs-compat/add/operator/withLatestFrom';\\nimport 'rxjs-compat/add/operator/zip';\\nimport 'rxjs-compat/add/operator/zipAll';\\nexport { Operator } from './Operator';\\nexport { Observer } from './types';\\nexport { Subscription } from './Subscription';\\nexport { Subscriber } from './Subscriber';\\nexport { AsyncSubject } from './AsyncSubject';\\nexport { ReplaySubject } from './ReplaySubject';\\nexport { BehaviorSubject } from './BehaviorSubject';\\nexport { ConnectableObservable } from './observable/ConnectableObservable';\\nexport { Notification, NotificationKind } from './Notification';\\nexport { EmptyError } from './util/EmptyError';\\nexport { ArgumentOutOfRangeError } from './util/ArgumentOutOfRangeError';\\nexport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\\nexport { TimeoutError } from './util/TimeoutError';\\nexport { UnsubscriptionError } from './util/UnsubscriptionError';\\nexport { TimeInterval } from './operators/timeInterval';\\nexport { Timestamp } from './operators/timestamp';\\nexport { TestScheduler } from './testing/TestScheduler';\\nexport { VirtualTimeScheduler } from './scheduler/VirtualTimeScheduler';\\nexport { AjaxRequest, AjaxResponse, AjaxError, AjaxTimeoutError } from './observable/dom/AjaxObservable';\\nexport { pipe } from './util/pipe';\\nimport { AsapScheduler } from './scheduler/AsapScheduler';\\nimport { AsyncScheduler } from './scheduler/AsyncScheduler';\\nimport { QueueScheduler } from './scheduler/QueueScheduler';\\nimport { AnimationFrameScheduler } from './scheduler/AnimationFrameScheduler';\\nimport * as _operators from './operators/index';\\nexport declare const operators: typeof _operators;\\n/**\\n * @typedef {Object} Rx.Scheduler\\n * @property {SchedulerLike} asap Schedules on the micro task queue, which is the same\\n * queue used for promises. Basically after the current job, but before the next job.\\n * Use this for asynchronous conversions.\\n * @property {SchedulerLike} queue Schedules on a queue in the current event frame\\n * (trampoline scheduler). Use this for iteration operations.\\n * @property {SchedulerLike} animationFrame Schedules work with `requestAnimationFrame`.\\n * Use this for synchronizing with the platform's painting.\\n * @property {SchedulerLike} async Schedules work with `setInterval`. Use this for\\n * time-based operations.\\n */\\ndeclare let Scheduler: {\\n    asap: AsapScheduler;\\n    queue: QueueScheduler;\\n    animationFrame: AnimationFrameScheduler;\\n    async: AsyncScheduler;\\n};\\n/**\\n * @typedef {Object} Rx.Symbol\\n * @property {Symbol|string} rxSubscriber A symbol to use as a property name to\\n * retrieve an \\\"Rx safe\\\" Observer from an object. \\\"Rx safety\\\" can be defined as\\n * an object that has all of the traits of an Rx Subscriber, including the\\n * ability to add and remove subscriptions to the subscription chain and\\n * guarantees involving event triggering (can't \\\"next\\\" after unsubscription,\\n * etc).\\n * @property {Symbol|string} observable A symbol to use as a property name to\\n * retrieve an Observable as defined by the [ECMAScript \\\"Observable\\\" spec](https://github.com/zenparsing/es-observable).\\n * @property {Symbol|string} iterator The ES6 symbol to use as a property name\\n * to retrieve an iterator from an object.\\n */\\ndeclare let Symbol: {\\n    rxSubscriber: string | symbol;\\n    observable: string | symbol;\\n    iterator: symbol;\\n};\\nexport { Scheduler, Symbol };\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduled/scheduleArray.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare function scheduleArray<T>(input: ArrayLike<T>, scheduler: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduled/scheduled.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput, SchedulerLike, Observable } from 'rxjs';\\n/**\\n * Converts from a common {@link ObservableInput} type to an observable where subscription and emissions\\n * are scheduled on the provided scheduler.\\n *\\n * @see from\\n * @see of\\n *\\n * @param input The observable, array, promise, iterable, etc you would like to schedule\\n * @param scheduler The scheduler to use to schedule the subscription and emissions from\\n * the returned observable.\\n */\\nexport declare function scheduled<T>(input: ObservableInput<T>, scheduler: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduled/scheduleIterable.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare function scheduleIterable<T>(input: Iterable<T>, scheduler: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduled/scheduleObservable.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { InteropObservable, SchedulerLike } from '../types';\\nexport declare function scheduleObservable<T>(input: InteropObservable<T>, scheduler: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduled/schedulePromise.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { SchedulerLike } from '../types';\\nexport declare function schedulePromise<T>(input: PromiseLike<T>, scheduler: SchedulerLike): Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Scheduler.d.ts\"\n    ],\n    \"content\": \"import { Action } from './scheduler/Action';\\nimport { Subscription } from './Subscription';\\nimport { SchedulerLike, SchedulerAction } from './types';\\n/**\\n * An execution context and a data structure to order tasks and schedule their\\n * execution. Provides a notion of (potentially virtual) time, through the\\n * `now()` getter method.\\n *\\n * Each unit of work in a Scheduler is called an `Action`.\\n *\\n * ```ts\\n * class Scheduler {\\n *   now(): number;\\n *   schedule(work, delay?, state?): Subscription;\\n * }\\n * ```\\n *\\n * @class Scheduler\\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\\n * should not be used directly. Rather, create your own class and implement\\n * {@link SchedulerLike}\\n */\\nexport declare class Scheduler implements SchedulerLike {\\n    private SchedulerAction;\\n    /**\\n     * Note: the extra arrow function wrapper is to make testing by overriding\\n     * Date.now easier.\\n     * @nocollapse\\n     */\\n    static now: () => number;\\n    constructor(SchedulerAction: typeof Action, now?: () => number);\\n    /**\\n     * A getter method that returns a number representing the current time\\n     * (at the time this function was called) according to the scheduler's own\\n     * internal clock.\\n     * @return {number} A number that represents the current time. May or may not\\n     * have a relation to wall-clock time. May or may not refer to a time unit\\n     * (e.g. milliseconds).\\n     */\\n    now: () => number;\\n    /**\\n     * Schedules a function, `work`, for execution. May happen at some point in\\n     * the future, according to the `delay` parameter, if specified. May be passed\\n     * some context object, `state`, which will be passed to the `work` function.\\n     *\\n     * The given arguments will be processed an stored as an Action object in a\\n     * queue of actions.\\n     *\\n     * @param {function(state: ?T): ?Subscription} work A function representing a\\n     * task, or some unit of work to be executed by the Scheduler.\\n     * @param {number} [delay] Time to wait before executing the work, where the\\n     * time unit is implicit and defined by the Scheduler itself.\\n     * @param {T} [state] Some contextual data that the `work` function uses when\\n     * called by the Scheduler.\\n     * @return {Subscription} A subscription in order to be able to unsubscribe\\n     * the scheduled work.\\n     */\\n    schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void, delay?: number, state?: T): Subscription;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/Action.d.ts\"\n    ],\n    \"content\": \"import { Scheduler } from '../Scheduler';\\nimport { Subscription } from '../Subscription';\\nimport { SchedulerAction } from '../types';\\n/**\\n * A unit of work to be executed in a `scheduler`. An action is typically\\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\\n * themselves about creating and manipulating an Action.\\n *\\n * ```ts\\n * class Action<T> extends Subscription {\\n *   new (scheduler: Scheduler, work: (state?: T) => void);\\n *   schedule(state?: T, delay: number = 0): Subscription;\\n * }\\n * ```\\n *\\n * @class Action<T>\\n */\\nexport declare class Action<T> extends Subscription {\\n    constructor(scheduler: Scheduler, work: (this: SchedulerAction<T>, state?: T) => void);\\n    /**\\n     * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\\n     * some context object, `state`. May happen at some point in the future,\\n     * according to the `delay` parameter, if specified.\\n     * @param {T} [state] Some contextual data that the `work` function uses when\\n     * called by the Scheduler.\\n     * @param {number} [delay] Time to wait before executing the work, where the\\n     * time unit is implicit and defined by the Scheduler.\\n     * @return {void}\\n     */\\n    schedule(state?: T, delay?: number): Subscription;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/animationFrame.d.ts\"\n    ],\n    \"content\": \"import { AnimationFrameScheduler } from './AnimationFrameScheduler';\\n/**\\n *\\n * Animation Frame Scheduler\\n *\\n * <span class=\\\"informal\\\">Perform task when `window.requestAnimationFrame` would fire</span>\\n *\\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\\n * behaviour.\\n *\\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\\n * It makes sure scheduled task will happen just before next browser content repaint,\\n * thus performing animations as efficiently as possible.\\n *\\n * ## Example\\n * Schedule div height animation\\n * ```ts\\n * // html: <div style=\\\"background: #0ff;\\\"></div>\\n * import { animationFrameScheduler } from 'rxjs';\\n *\\n * const div = document.querySelector('div');\\n *\\n * animationFrameScheduler.schedule(function(height) {\\n *   div.style.height = height + \\\"px\\\";\\n *\\n *   this.schedule(height + 1);  // `this` references currently executing Action,\\n *                               // which we reschedule with new state\\n * }, 0, 0);\\n *\\n * // You will see a div element growing in height\\n * ```\\n *\\n * @static true\\n * @name animationFrame\\n * @owner Scheduler\\n */\\nexport declare const animationFrame: AnimationFrameScheduler;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/AnimationFrameAction.d.ts\"\n    ],\n    \"content\": \"import { AsyncAction } from './AsyncAction';\\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\\nimport { SchedulerAction } from '../types';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class AnimationFrameAction<T> extends AsyncAction<T> {\\n    protected scheduler: AnimationFrameScheduler;\\n    protected work: (this: SchedulerAction<T>, state?: T) => void;\\n    constructor(scheduler: AnimationFrameScheduler, work: (this: SchedulerAction<T>, state?: T) => void);\\n    protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: any, delay?: number): any;\\n    protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: any, delay?: number): any;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/AnimationFrameScheduler.d.ts\"\n    ],\n    \"content\": \"import { AsyncAction } from './AsyncAction';\\nimport { AsyncScheduler } from './AsyncScheduler';\\nexport declare class AnimationFrameScheduler extends AsyncScheduler {\\n    flush(action?: AsyncAction<any>): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/asap.d.ts\"\n    ],\n    \"content\": \"import { AsapScheduler } from './AsapScheduler';\\n/**\\n *\\n * Asap Scheduler\\n *\\n * <span class=\\\"informal\\\">Perform task as fast as it can be performed asynchronously</span>\\n *\\n * `asap` scheduler behaves the same as {@link asyncScheduler} scheduler when you use it to delay task\\n * in time. If however you set delay to `0`, `asap` will wait for current synchronously executing\\n * code to end and then it will try to execute given task as fast as possible.\\n *\\n * `asap` scheduler will do its best to minimize time between end of currently executing code\\n * and start of scheduled task. This makes it best candidate for performing so called \\\"deferring\\\".\\n * Traditionally this was achieved by calling `setTimeout(deferredTask, 0)`, but that technique involves\\n * some (although minimal) unwanted delay.\\n *\\n * Note that using `asap` scheduler does not necessarily mean that your task will be first to process\\n * after currently executing code. In particular, if some task was also scheduled with `asap` before,\\n * that task will execute first. That being said, if you need to schedule task asynchronously, but\\n * as soon as possible, `asap` scheduler is your best bet.\\n *\\n * ## Example\\n * Compare async and asap scheduler<\\n * ```ts\\n * import { asapScheduler, asyncScheduler } from 'rxjs';\\n *\\n * asyncScheduler.schedule(() => console.log('async')); // scheduling 'async' first...\\n * asapScheduler.schedule(() => console.log('asap'));\\n *\\n * // Logs:\\n * // \\\"asap\\\"\\n * // \\\"async\\\"\\n * // ... but 'asap' goes first!\\n * ```\\n * @static true\\n * @name asap\\n * @owner Scheduler\\n */\\nexport declare const asap: AsapScheduler;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/AsapAction.d.ts\"\n    ],\n    \"content\": \"import { AsyncAction } from './AsyncAction';\\nimport { AsapScheduler } from './AsapScheduler';\\nimport { SchedulerAction } from '../types';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class AsapAction<T> extends AsyncAction<T> {\\n    protected scheduler: AsapScheduler;\\n    protected work: (this: SchedulerAction<T>, state?: T) => void;\\n    constructor(scheduler: AsapScheduler, work: (this: SchedulerAction<T>, state?: T) => void);\\n    protected requestAsyncId(scheduler: AsapScheduler, id?: any, delay?: number): any;\\n    protected recycleAsyncId(scheduler: AsapScheduler, id?: any, delay?: number): any;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/AsapScheduler.d.ts\"\n    ],\n    \"content\": \"import { AsyncAction } from './AsyncAction';\\nimport { AsyncScheduler } from './AsyncScheduler';\\nexport declare class AsapScheduler extends AsyncScheduler {\\n    flush(action?: AsyncAction<any>): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/async.d.ts\"\n    ],\n    \"content\": \"import { AsyncScheduler } from './AsyncScheduler';\\n/**\\n *\\n * Async Scheduler\\n *\\n * <span class=\\\"informal\\\">Schedule task as if you used setTimeout(task, duration)</span>\\n *\\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\\n * in intervals.\\n *\\n * If you just want to \\\"defer\\\" task, that is to perform it right after currently\\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\\n * better choice will be the {@link asapScheduler} scheduler.\\n *\\n * ## Examples\\n * Use async scheduler to delay task\\n * ```ts\\n * import { asyncScheduler } from 'rxjs';\\n *\\n * const task = () => console.log('it works!');\\n *\\n * asyncScheduler.schedule(task, 2000);\\n *\\n * // After 2 seconds logs:\\n * // \\\"it works!\\\"\\n * ```\\n *\\n * Use async scheduler to repeat task in intervals\\n * ```ts\\n * import { asyncScheduler } from 'rxjs';\\n *\\n * function task(state) {\\n *   console.log(state);\\n *   this.schedule(state + 1, 1000); // `this` references currently executing Action,\\n *                                   // which we reschedule with new state and delay\\n * }\\n *\\n * asyncScheduler.schedule(task, 3000, 0);\\n *\\n * // Logs:\\n * // 0 after 3s\\n * // 1 after 4s\\n * // 2 after 5s\\n * // 3 after 6s\\n * ```\\n *\\n * @static true\\n * @name async\\n * @owner Scheduler\\n */\\nexport declare const async: AsyncScheduler;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/AsyncAction.d.ts\"\n    ],\n    \"content\": \"import { Action } from './Action';\\nimport { SchedulerAction } from '../types';\\nimport { Subscription } from '../Subscription';\\nimport { AsyncScheduler } from './AsyncScheduler';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class AsyncAction<T> extends Action<T> {\\n    protected scheduler: AsyncScheduler;\\n    protected work: (this: SchedulerAction<T>, state?: T) => void;\\n    id: any;\\n    state: T;\\n    delay: number;\\n    protected pending: boolean;\\n    constructor(scheduler: AsyncScheduler, work: (this: SchedulerAction<T>, state?: T) => void);\\n    schedule(state?: T, delay?: number): Subscription;\\n    protected requestAsyncId(scheduler: AsyncScheduler, id?: any, delay?: number): any;\\n    protected recycleAsyncId(scheduler: AsyncScheduler, id: any, delay?: number): any;\\n    /**\\n     * Immediately executes this action and the `work` it contains.\\n     * @return {any}\\n     */\\n    execute(state: T, delay: number): any;\\n    protected _execute(state: T, delay: number): any;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _unsubscribe(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/AsyncScheduler.d.ts\"\n    ],\n    \"content\": \"import { Scheduler } from '../Scheduler';\\nimport { Action } from './Action';\\nimport { AsyncAction } from './AsyncAction';\\nimport { SchedulerAction } from '../types';\\nimport { Subscription } from '../Subscription';\\nexport declare class AsyncScheduler extends Scheduler {\\n    static delegate?: Scheduler;\\n    actions: Array<AsyncAction<any>>;\\n    /**\\n     * A flag to indicate whether the Scheduler is currently executing a batch of\\n     * queued actions.\\n     * @type {boolean}\\n     * @deprecated internal use only\\n     */\\n    active: boolean;\\n    /**\\n     * An internal ID used to track the latest asynchronous task such as those\\n     * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\\n     * others.\\n     * @type {any}\\n     * @deprecated internal use only\\n     */\\n    scheduled: any;\\n    constructor(SchedulerAction: typeof Action, now?: () => number);\\n    schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void, delay?: number, state?: T): Subscription;\\n    flush(action: AsyncAction<any>): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/queue.d.ts\"\n    ],\n    \"content\": \"import { QueueScheduler } from './QueueScheduler';\\n/**\\n *\\n * Queue Scheduler\\n *\\n * <span class=\\\"informal\\\">Put every next task on a queue, instead of executing it immediately</span>\\n *\\n * `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler.\\n *\\n * When used without delay, it schedules given task synchronously - executes it right when\\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\\n * that task will be put on a queue and wait for current one to finish.\\n *\\n * This means that when you execute task with `queue` scheduler, you are sure it will end\\n * before any other task scheduled with that scheduler will start.\\n *\\n * ## Examples\\n * Schedule recursively first, then do something\\n * ```ts\\n * import { queueScheduler } from 'rxjs';\\n *\\n * queueScheduler.schedule(() => {\\n *   queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\\n *\\n *   console.log('first');\\n * });\\n *\\n * // Logs:\\n * // \\\"first\\\"\\n * // \\\"second\\\"\\n * ```\\n *\\n * Reschedule itself recursively\\n * ```ts\\n * import { queueScheduler } from 'rxjs';\\n *\\n * queueScheduler.schedule(function(state) {\\n *   if (state !== 0) {\\n *     console.log('before', state);\\n *     this.schedule(state - 1); // `this` references currently executing Action,\\n *                               // which we reschedule with new state\\n *     console.log('after', state);\\n *   }\\n * }, 0, 3);\\n *\\n * // In scheduler that runs recursively, you would expect:\\n * // \\\"before\\\", 3\\n * // \\\"before\\\", 2\\n * // \\\"before\\\", 1\\n * // \\\"after\\\", 1\\n * // \\\"after\\\", 2\\n * // \\\"after\\\", 3\\n *\\n * // But with queue it logs:\\n * // \\\"before\\\", 3\\n * // \\\"after\\\", 3\\n * // \\\"before\\\", 2\\n * // \\\"after\\\", 2\\n * // \\\"before\\\", 1\\n * // \\\"after\\\", 1\\n * ```\\n *\\n * @static true\\n * @name queue\\n * @owner Scheduler\\n */\\nexport declare const queue: QueueScheduler;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/QueueAction.d.ts\"\n    ],\n    \"content\": \"import { AsyncAction } from './AsyncAction';\\nimport { Subscription } from '../Subscription';\\nimport { QueueScheduler } from './QueueScheduler';\\nimport { SchedulerAction } from '../types';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class QueueAction<T> extends AsyncAction<T> {\\n    protected scheduler: QueueScheduler;\\n    protected work: (this: SchedulerAction<T>, state?: T) => void;\\n    constructor(scheduler: QueueScheduler, work: (this: SchedulerAction<T>, state?: T) => void);\\n    schedule(state?: T, delay?: number): Subscription;\\n    execute(state: T, delay: number): any;\\n    protected requestAsyncId(scheduler: QueueScheduler, id?: any, delay?: number): any;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/QueueScheduler.d.ts\"\n    ],\n    \"content\": \"import { AsyncScheduler } from './AsyncScheduler';\\nexport declare class QueueScheduler extends AsyncScheduler {\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/scheduler/VirtualTimeScheduler.d.ts\"\n    ],\n    \"content\": \"import { AsyncAction } from './AsyncAction';\\nimport { Subscription } from '../Subscription';\\nimport { AsyncScheduler } from './AsyncScheduler';\\nimport { SchedulerAction } from '../types';\\nexport declare class VirtualTimeScheduler extends AsyncScheduler {\\n    maxFrames: number;\\n    protected static frameTimeFactor: number;\\n    frame: number;\\n    index: number;\\n    constructor(SchedulerAction?: typeof AsyncAction, maxFrames?: number);\\n    /**\\n     * Prompt the Scheduler to execute all of its queued actions, therefore\\n     * clearing its queue.\\n     * @return {void}\\n     */\\n    flush(): void;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @nodoc\\n */\\nexport declare class VirtualAction<T> extends AsyncAction<T> {\\n    protected scheduler: VirtualTimeScheduler;\\n    protected work: (this: SchedulerAction<T>, state?: T) => void;\\n    protected index: number;\\n    protected active: boolean;\\n    constructor(scheduler: VirtualTimeScheduler, work: (this: SchedulerAction<T>, state?: T) => void, index?: number);\\n    schedule(state?: T, delay?: number): Subscription;\\n    protected requestAsyncId(scheduler: VirtualTimeScheduler, id?: any, delay?: number): any;\\n    protected recycleAsyncId(scheduler: VirtualTimeScheduler, id?: any, delay?: number): any;\\n    protected _execute(state: T, delay: number): any;\\n    static sortActions<T>(a: VirtualAction<T>, b: VirtualAction<T>): 1 | 0 | -1;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Subject.d.ts\"\n    ],\n    \"content\": \"import { Operator } from './Operator';\\nimport { Observable } from './Observable';\\nimport { Subscriber } from './Subscriber';\\nimport { Subscription } from './Subscription';\\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\\n/**\\n * @class SubjectSubscriber<T>\\n */\\nexport declare class SubjectSubscriber<T> extends Subscriber<T> {\\n    protected destination: Subject<T>;\\n    constructor(destination: Subject<T>);\\n}\\n/**\\n * A Subject is a special type of Observable that allows values to be\\n * multicasted to many Observers. Subjects are like EventEmitters.\\n *\\n * Every Subject is an Observable and an Observer. You can subscribe to a\\n * Subject, and you can call next to feed values as well as error and complete.\\n *\\n * @class Subject<T>\\n */\\nexport declare class Subject<T> extends Observable<T> implements SubscriptionLike {\\n    observers: Observer<T>[];\\n    closed: boolean;\\n    isStopped: boolean;\\n    hasError: boolean;\\n    thrownError: any;\\n    constructor();\\n    /**@nocollapse\\n     * @deprecated use new Subject() instead\\n    */\\n    static create: Function;\\n    lift<R>(operator: Operator<T, R>): Observable<R>;\\n    next(value?: T): void;\\n    error(err: any): void;\\n    complete(): void;\\n    unsubscribe(): void;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _trySubscribe(subscriber: Subscriber<T>): TeardownLogic;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n    /**\\n     * Creates a new Observable with this Subject as the source. You can do this\\n     * to create customize Observer-side logic of the Subject and conceal it from\\n     * code that uses the Observable.\\n     * @return {Observable} Observable that the Subject casts to\\n     */\\n    asObservable(): Observable<T>;\\n}\\n/**\\n * @class AnonymousSubject<T>\\n */\\nexport declare class AnonymousSubject<T> extends Subject<T> {\\n    protected destination?: Observer<T>;\\n    constructor(destination?: Observer<T>, source?: Observable<T>);\\n    next(value: T): void;\\n    error(err: any): void;\\n    complete(): void;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<T>): Subscription;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/SubjectSubscription.d.ts\"\n    ],\n    \"content\": \"import { Subject } from './Subject';\\nimport { Observer } from './types';\\nimport { Subscription } from './Subscription';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class SubjectSubscription<T> extends Subscription {\\n    subject: Subject<T>;\\n    subscriber: Observer<T>;\\n    closed: boolean;\\n    constructor(subject: Subject<T>, subscriber: Observer<T>);\\n    unsubscribe(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Subscriber.d.ts\"\n    ],\n    \"content\": \"import { Observer, PartialObserver } from './types';\\nimport { Subscription } from './Subscription';\\n/**\\n * Implements the {@link Observer} interface and extends the\\n * {@link Subscription} class. While the {@link Observer} is the public API for\\n * consuming the values of an {@link Observable}, all Observers get converted to\\n * a Subscriber, in order to provide Subscription-like capabilities such as\\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\\n * implementing operators, but it is rarely used as a public API.\\n *\\n * @class Subscriber<T>\\n */\\nexport declare class Subscriber<T> extends Subscription implements Observer<T> {\\n    /**\\n     * A static factory for a Subscriber, given a (potentially partial) definition\\n     * of an Observer.\\n     * @param {function(x: ?T): void} [next] The `next` callback of an Observer.\\n     * @param {function(e: ?any): void} [error] The `error` callback of an\\n     * Observer.\\n     * @param {function(): void} [complete] The `complete` callback of an\\n     * Observer.\\n     * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)\\n     * Observer represented by the given arguments.\\n     * @nocollapse\\n     */\\n    static create<T>(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber<T>;\\n    /** @internal */ syncErrorValue: any;\\n    /** @internal */ syncErrorThrown: boolean;\\n    /** @internal */ syncErrorThrowable: boolean;\\n    protected isStopped: boolean;\\n    protected destination: PartialObserver<any> | Subscriber<any>;\\n    /**\\n     * @param {Observer|function(value: T): void} [destinationOrNext] A partially\\n     * defined Observer or a `next` callback function.\\n     * @param {function(e: ?any): void} [error] The `error` callback of an\\n     * Observer.\\n     * @param {function(): void} [complete] The `complete` callback of an\\n     * Observer.\\n     */\\n    constructor(destinationOrNext?: PartialObserver<any> | ((value: T) => void), error?: (e?: any) => void, complete?: () => void);\\n    /**\\n     * The {@link Observer} callback to receive notifications of type `next` from\\n     * the Observable, with a value. The Observable may call this method 0 or more\\n     * times.\\n     * @param {T} [value] The `next` value.\\n     * @return {void}\\n     */\\n    next(value?: T): void;\\n    /**\\n     * The {@link Observer} callback to receive notifications of type `error` from\\n     * the Observable, with an attached `Error`. Notifies the Observer that\\n     * the Observable has experienced an error condition.\\n     * @param {any} [err] The `error` exception.\\n     * @return {void}\\n     */\\n    error(err?: any): void;\\n    /**\\n     * The {@link Observer} callback to receive a valueless notification of type\\n     * `complete` from the Observable. Notifies the Observer that the Observable\\n     * has finished sending push-based notifications.\\n     * @return {void}\\n     */\\n    complete(): void;\\n    unsubscribe(): void;\\n    protected _next(value: T): void;\\n    protected _error(err: any): void;\\n    protected _complete(): void;\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _unsubscribeAndRecycle(): Subscriber<T>;\\n}\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class SafeSubscriber<T> extends Subscriber<T> {\\n    private _parentSubscriber;\\n    private _context;\\n    constructor(_parentSubscriber: Subscriber<T>, observerOrNext?: PartialObserver<T> | ((value: T) => void), error?: (e?: any) => void, complete?: () => void);\\n    next(value?: T): void;\\n    error(err?: any): void;\\n    complete(): void;\\n    private __tryOrUnsub;\\n    private __tryOrSetError;\\n    /** @internal This is an internal implementation detail, do not use. */\\n    _unsubscribe(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/Subscription.d.ts\"\n    ],\n    \"content\": \"import { SubscriptionLike, TeardownLogic } from './types';\\n/**\\n * Represents a disposable resource, such as the execution of an Observable. A\\n * Subscription has one important method, `unsubscribe`, that takes no argument\\n * and just disposes the resource held by the subscription.\\n *\\n * Additionally, subscriptions may be grouped together through the `add()`\\n * method, which will attach a child Subscription to the current Subscription.\\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\\n * will be unsubscribed as well.\\n *\\n * @class Subscription\\n */\\nexport declare class Subscription implements SubscriptionLike {\\n    /** @nocollapse */\\n    static EMPTY: Subscription;\\n    /**\\n     * A flag to indicate whether this Subscription has already been unsubscribed.\\n     * @type {boolean}\\n     */\\n    closed: boolean;\\n    /** @internal */\\n    protected _parentOrParents: Subscription | Subscription[];\\n    /** @internal */\\n    private _subscriptions;\\n    /**\\n     * @param {function(): void} [unsubscribe] A function describing how to\\n     * perform the disposal of resources when the `unsubscribe` method is called.\\n     */\\n    constructor(unsubscribe?: () => void);\\n    /**\\n     * Disposes the resources held by the subscription. May, for instance, cancel\\n     * an ongoing Observable execution or cancel any other type of work that\\n     * started when the Subscription was created.\\n     * @return {void}\\n     */\\n    unsubscribe(): void;\\n    /**\\n     * Adds a tear down to be called during the unsubscribe() of this\\n     * Subscription. Can also be used to add a child subscription.\\n     *\\n     * If the tear down being added is a subscription that is already\\n     * unsubscribed, is the same reference `add` is being called on, or is\\n     * `Subscription.EMPTY`, it will not be added.\\n     *\\n     * If this subscription is already in an `closed` state, the passed\\n     * tear down logic will be executed immediately.\\n     *\\n     * When a parent subscription is unsubscribed, any child subscriptions that were added to it are also unsubscribed.\\n     *\\n     * @param {TeardownLogic} teardown The additional logic to execute on\\n     * teardown.\\n     * @return {Subscription} Returns the Subscription used or created to be\\n     * added to the inner subscriptions list. This Subscription can be used with\\n     * `remove()` to remove the passed teardown logic from the inner subscriptions\\n     * list.\\n     */\\n    add(teardown: TeardownLogic): Subscription;\\n    /**\\n     * Removes a Subscription from the internal list of subscriptions that will\\n     * unsubscribe during the unsubscribe process of this Subscription.\\n     * @param {Subscription} subscription The subscription to remove.\\n     * @return {void}\\n     */\\n    remove(subscription: Subscription): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/symbol/iterator.d.ts\"\n    ],\n    \"content\": \"export declare function getSymbolIterator(): symbol;\\nexport declare const iterator: symbol;\\n/**\\n * @deprecated use {@link iterator} instead\\n */\\nexport declare const $$iterator: symbol;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/symbol/observable.d.ts\"\n    ],\n    \"content\": \"/** Symbol.observable addition */\\ndeclare global {\\n    interface SymbolConstructor {\\n        readonly observable: symbol;\\n    }\\n}\\n/** Symbol.observable or a string \\\"@@observable\\\". Used for interop */\\nexport declare const observable: string | symbol;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/symbol/rxSubscriber.d.ts\"\n    ],\n    \"content\": \"/** @deprecated do not use, this is no longer checked by RxJS internals */\\nexport declare const rxSubscriber: string | symbol;\\n/**\\n * @deprecated use rxSubscriber instead\\n */\\nexport declare const $$rxSubscriber: string | symbol;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/testing/ColdObservable.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { Scheduler } from '../Scheduler';\\nimport { TestMessage } from './TestMessage';\\nimport { SubscriptionLog } from './SubscriptionLog';\\nimport { SubscriptionLoggable } from './SubscriptionLoggable';\\nimport { Subscriber } from '../Subscriber';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class ColdObservable<T> extends Observable<T> implements SubscriptionLoggable {\\n    messages: TestMessage[];\\n    subscriptions: SubscriptionLog[];\\n    scheduler: Scheduler;\\n    logSubscribedFrame: () => number;\\n    logUnsubscribedFrame: (index: number) => void;\\n    constructor(messages: TestMessage[], scheduler: Scheduler);\\n    scheduleMessages(subscriber: Subscriber<any>): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/testing/HotObservable.d.ts\"\n    ],\n    \"content\": \"import { Subject } from '../Subject';\\nimport { Subscriber } from '../Subscriber';\\nimport { Subscription } from '../Subscription';\\nimport { Scheduler } from '../Scheduler';\\nimport { TestMessage } from './TestMessage';\\nimport { SubscriptionLog } from './SubscriptionLog';\\nimport { SubscriptionLoggable } from './SubscriptionLoggable';\\n/**\\n * We need this JSDoc comment for affecting ESDoc.\\n * @ignore\\n * @extends {Ignored}\\n */\\nexport declare class HotObservable<T> extends Subject<T> implements SubscriptionLoggable {\\n    messages: TestMessage[];\\n    subscriptions: SubscriptionLog[];\\n    scheduler: Scheduler;\\n    logSubscribedFrame: () => number;\\n    logUnsubscribedFrame: (index: number) => void;\\n    constructor(messages: TestMessage[], scheduler: Scheduler);\\n    /** @deprecated This is an internal implementation detail, do not use. */\\n    _subscribe(subscriber: Subscriber<any>): Subscription;\\n    setup(): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/testing/SubscriptionLog.d.ts\"\n    ],\n    \"content\": \"export declare class SubscriptionLog {\\n    subscribedFrame: number;\\n    unsubscribedFrame: number;\\n    constructor(subscribedFrame: number, unsubscribedFrame?: number);\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/testing/SubscriptionLoggable.d.ts\"\n    ],\n    \"content\": \"import { Scheduler } from '../Scheduler';\\nimport { SubscriptionLog } from './SubscriptionLog';\\nexport declare class SubscriptionLoggable {\\n    subscriptions: SubscriptionLog[];\\n    scheduler: Scheduler;\\n    logSubscribedFrame(): number;\\n    logUnsubscribedFrame(index: number): void;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/testing/TestMessage.d.ts\"\n    ],\n    \"content\": \"import { Notification } from '../Notification';\\nexport interface TestMessage {\\n    frame: number;\\n    notification: Notification<any>;\\n    isGhost?: boolean;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/testing/TestScheduler.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\nimport { ColdObservable } from './ColdObservable';\\nimport { HotObservable } from './HotObservable';\\nimport { TestMessage } from './TestMessage';\\nimport { SubscriptionLog } from './SubscriptionLog';\\nimport { VirtualTimeScheduler } from '../scheduler/VirtualTimeScheduler';\\nexport interface RunHelpers {\\n    cold: typeof TestScheduler.prototype.createColdObservable;\\n    hot: typeof TestScheduler.prototype.createHotObservable;\\n    flush: typeof TestScheduler.prototype.flush;\\n    expectObservable: typeof TestScheduler.prototype.expectObservable;\\n    expectSubscriptions: typeof TestScheduler.prototype.expectSubscriptions;\\n}\\nexport declare type observableToBeFn = (marbles: string, values?: any, errorValue?: any) => void;\\nexport declare type subscriptionLogsToBeFn = (marbles: string | string[]) => void;\\nexport declare class TestScheduler extends VirtualTimeScheduler {\\n    assertDeepEqual: (actual: any, expected: any) => boolean | void;\\n    readonly hotObservables: HotObservable<any>[];\\n    readonly coldObservables: ColdObservable<any>[];\\n    private flushTests;\\n    private runMode;\\n    constructor(assertDeepEqual: (actual: any, expected: any) => boolean | void);\\n    createTime(marbles: string): number;\\n    /**\\n     * @param marbles A diagram in the marble DSL. Letters map to keys in `values` if provided.\\n     * @param values Values to use for the letters in `marbles`. If ommitted, the letters themselves are used.\\n     * @param error The error to use for the `#` marble (if present).\\n     */\\n    createColdObservable<T = string>(marbles: string, values?: {\\n        [marble: string]: T;\\n    }, error?: any): ColdObservable<T>;\\n    /**\\n     * @param marbles A diagram in the marble DSL. Letters map to keys in `values` if provided.\\n     * @param values Values to use for the letters in `marbles`. If ommitted, the letters themselves are used.\\n     * @param error The error to use for the `#` marble (if present).\\n     */\\n    createHotObservable<T = string>(marbles: string, values?: {\\n        [marble: string]: T;\\n    }, error?: any): HotObservable<T>;\\n    private materializeInnerObservable;\\n    expectObservable(observable: Observable<any>, subscriptionMarbles?: string): ({\\n        toBe: observableToBeFn;\\n    });\\n    expectSubscriptions(actualSubscriptionLogs: SubscriptionLog[]): ({\\n        toBe: subscriptionLogsToBeFn;\\n    });\\n    flush(): void;\\n    /** @nocollapse */\\n    static parseMarblesAsSubscriptions(marbles: string, runMode?: boolean): SubscriptionLog;\\n    /** @nocollapse */\\n    static parseMarbles(marbles: string, values?: any, errorValue?: any, materializeInnerObservables?: boolean, runMode?: boolean): TestMessage[];\\n    run<T>(callback: (helpers: RunHelpers) => T): T;\\n}\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/types.d.ts\"\n    ],\n    \"content\": \"import { Observable } from './Observable';\\nimport { Subscription } from './Subscription';\\n/** OPERATOR INTERFACES */\\nexport interface UnaryFunction<T, R> {\\n    (source: T): R;\\n}\\nexport interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Observable<R>> {\\n}\\nexport declare type FactoryOrValue<T> = T | (() => T);\\nexport interface MonoTypeOperatorFunction<T> extends OperatorFunction<T, T> {\\n}\\nexport interface Timestamp<T> {\\n    value: T;\\n    timestamp: number;\\n}\\nexport interface TimeInterval<T> {\\n    value: T;\\n    interval: number;\\n}\\n/** SUBSCRIPTION INTERFACES */\\nexport interface Unsubscribable {\\n    unsubscribe(): void;\\n}\\nexport declare type TeardownLogic = Unsubscribable | Function | void;\\nexport interface SubscriptionLike extends Unsubscribable {\\n    unsubscribe(): void;\\n    readonly closed: boolean;\\n}\\nexport declare type SubscribableOrPromise<T> = Subscribable<T> | Subscribable<never> | PromiseLike<T> | InteropObservable<T>;\\n/** OBSERVABLE INTERFACES */\\nexport interface Subscribable<T> {\\n    subscribe(observer?: PartialObserver<T>): Unsubscribable;\\n    /** @deprecated Use an observer instead of a complete callback */\\n    subscribe(next: null | undefined, error: null | undefined, complete: () => void): Unsubscribable;\\n    /** @deprecated Use an observer instead of an error callback */\\n    subscribe(next: null | undefined, error: (error: any) => void, complete?: () => void): Unsubscribable;\\n    /** @deprecated Use an observer instead of a complete callback */\\n    subscribe(next: (value: T) => void, error: null | undefined, complete: () => void): Unsubscribable;\\n    subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Unsubscribable;\\n}\\nexport declare type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T> | Iterable<T>;\\n/** @deprecated use {@link InteropObservable } */\\nexport declare type ObservableLike<T> = InteropObservable<T>;\\nexport declare type InteropObservable<T> = {\\n    [Symbol.observable]: () => Subscribable<T>;\\n};\\n/** OBSERVER INTERFACES */\\nexport interface NextObserver<T> {\\n    closed?: boolean;\\n    next: (value: T) => void;\\n    error?: (err: any) => void;\\n    complete?: () => void;\\n}\\nexport interface ErrorObserver<T> {\\n    closed?: boolean;\\n    next?: (value: T) => void;\\n    error: (err: any) => void;\\n    complete?: () => void;\\n}\\nexport interface CompletionObserver<T> {\\n    closed?: boolean;\\n    next?: (value: T) => void;\\n    error?: (err: any) => void;\\n    complete: () => void;\\n}\\nexport declare type PartialObserver<T> = NextObserver<T> | ErrorObserver<T> | CompletionObserver<T>;\\nexport interface Observer<T> {\\n    closed?: boolean;\\n    next: (value: T) => void;\\n    error: (err: any) => void;\\n    complete: () => void;\\n}\\n/** SCHEDULER INTERFACES */\\nexport interface SchedulerLike {\\n    now(): number;\\n    schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void, delay?: number, state?: T): Subscription;\\n}\\nexport interface SchedulerAction<T> extends Subscription {\\n    schedule(state?: T, delay?: number): Subscription;\\n}\\nexport declare type ObservedValueOf<O> = O extends ObservableInput<infer T> ? T : never;\\nexport declare type ObservedValuesFromArray<X> = X extends Array<ObservableInput<infer T>> ? T : never;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/applyMixins.d.ts\"\n    ],\n    \"content\": \"export declare function applyMixins(derivedCtor: any, baseCtors: any[]): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/ArgumentOutOfRangeError.d.ts\"\n    ],\n    \"content\": \"export interface ArgumentOutOfRangeError extends Error {\\n}\\nexport interface ArgumentOutOfRangeErrorCtor {\\n    new (): ArgumentOutOfRangeError;\\n}\\n/**\\n * An error thrown when an element was queried at a certain index of an\\n * Observable, but no such index or position exists in that sequence.\\n *\\n * @see {@link elementAt}\\n * @see {@link take}\\n * @see {@link takeLast}\\n *\\n * @class ArgumentOutOfRangeError\\n */\\nexport declare const ArgumentOutOfRangeError: ArgumentOutOfRangeErrorCtor;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/canReportError.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\nimport { Subject } from '../Subject';\\n/**\\n * Determines whether the ErrorObserver is closed or stopped or has a\\n * destination that is closed or stopped - in which case errors will\\n * need to be reported via a different mechanism.\\n * @param observer the observer\\n */\\nexport declare function canReportError(observer: Subscriber<any> | Subject<any>): boolean;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/EmptyError.d.ts\"\n    ],\n    \"content\": \"export interface EmptyError extends Error {\\n}\\nexport interface EmptyErrorCtor {\\n    new (): EmptyError;\\n}\\n/**\\n * An error thrown when an Observable or a sequence was queried but has no\\n * elements.\\n *\\n * @see {@link first}\\n * @see {@link last}\\n * @see {@link single}\\n *\\n * @class EmptyError\\n */\\nexport declare const EmptyError: EmptyErrorCtor;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/errorObject.d.ts\"\n    ],\n    \"content\": \"export declare const errorObject: any;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/hostReportError.d.ts\"\n    ],\n    \"content\": \"/**\\n * Throws an error on another job so that it's picked up by the runtime's\\n * uncaught error handling mechanism.\\n * @param err the error to throw\\n */\\nexport declare function hostReportError(err: any): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/identity.d.ts\"\n    ],\n    \"content\": \"export declare function identity<T>(x: T): T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/Immediate.d.ts\"\n    ],\n    \"content\": \"export declare const Immediate: {\\n    setImmediate(cb: () => void): number;\\n    clearImmediate(handle: number): void;\\n};\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isArray.d.ts\"\n    ],\n    \"content\": \"export declare const isArray: (arg: any) => arg is any[];\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isArrayLike.d.ts\"\n    ],\n    \"content\": \"export declare const isArrayLike: <T>(x: any) => x is ArrayLike<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isDate.d.ts\"\n    ],\n    \"content\": \"export declare function isDate(value: any): value is Date;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isFunction.d.ts\"\n    ],\n    \"content\": \"export declare function isFunction(x: any): x is Function;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isInteropObservable.d.ts\"\n    ],\n    \"content\": \"import { InteropObservable } from '../types';\\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\\nexport declare function isInteropObservable(input: any): input is InteropObservable<any>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isIterable.d.ts\"\n    ],\n    \"content\": \"/** Identifies an input as being an Iterable */\\nexport declare function isIterable(input: any): input is Iterable<any>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isNumeric.d.ts\"\n    ],\n    \"content\": \"export declare function isNumeric(val: any): val is number | string;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isObject.d.ts\"\n    ],\n    \"content\": \"export declare function isObject(x: any): x is Object;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isObservable.d.ts\"\n    ],\n    \"content\": \"import { Observable } from '../Observable';\\n/**\\n * Tests to see if the object is an RxJS {@link Observable}\\n * @param obj the object to test\\n */\\nexport declare function isObservable<T>(obj: any): obj is Observable<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isPromise.d.ts\"\n    ],\n    \"content\": \"/**\\n * Tests to see if the object is an ES2015 (ES6) Promise\\n * @see {@link https://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects}\\n * @param value the object to test\\n */\\nexport declare function isPromise(value: any): value is PromiseLike<any>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/isScheduler.d.ts\"\n    ],\n    \"content\": \"import { SchedulerLike } from '../types';\\nexport declare function isScheduler(value: any): value is SchedulerLike;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/noop.d.ts\"\n    ],\n    \"content\": \"export declare function noop(): void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/not.d.ts\"\n    ],\n    \"content\": \"export declare function not(pred: Function, thisArg: any): Function;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/ObjectUnsubscribedError.d.ts\"\n    ],\n    \"content\": \"export interface ObjectUnsubscribedError extends Error {\\n}\\nexport interface ObjectUnsubscribedErrorCtor {\\n    new (): ObjectUnsubscribedError;\\n}\\n/**\\n * An error thrown when an action is invalid because the object has been\\n * unsubscribed.\\n *\\n * @see {@link Subject}\\n * @see {@link BehaviorSubject}\\n *\\n * @class ObjectUnsubscribedError\\n */\\nexport declare const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/pipe.d.ts\"\n    ],\n    \"content\": \"import { UnaryFunction } from '../types';\\nexport declare function pipe<T>(): UnaryFunction<T, T>;\\nexport declare function pipe<T, A>(fn1: UnaryFunction<T, A>): UnaryFunction<T, A>;\\nexport declare function pipe<T, A, B>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>): UnaryFunction<T, B>;\\nexport declare function pipe<T, A, B, C>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>): UnaryFunction<T, C>;\\nexport declare function pipe<T, A, B, C, D>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>): UnaryFunction<T, D>;\\nexport declare function pipe<T, A, B, C, D, E>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>): UnaryFunction<T, E>;\\nexport declare function pipe<T, A, B, C, D, E, F>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>): UnaryFunction<T, F>;\\nexport declare function pipe<T, A, B, C, D, E, F, G>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>): UnaryFunction<T, G>;\\nexport declare function pipe<T, A, B, C, D, E, F, G, H>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>, fn8: UnaryFunction<G, H>): UnaryFunction<T, H>;\\nexport declare function pipe<T, A, B, C, D, E, F, G, H, I>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>, fn8: UnaryFunction<G, H>, fn9: UnaryFunction<H, I>): UnaryFunction<T, I>;\\nexport declare function pipe<T, A, B, C, D, E, F, G, H, I>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>, fn8: UnaryFunction<G, H>, fn9: UnaryFunction<H, I>, ...fns: UnaryFunction<any, any>[]): UnaryFunction<T, {}>;\\n/** @internal */\\nexport declare function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/root.d.ts\"\n    ],\n    \"content\": \"declare const _root: any;\\nexport { _root as root };\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/subscribeTo.d.ts\"\n    ],\n    \"content\": \"import { ObservableInput } from '../types';\\nimport { Subscription } from '../Subscription';\\nimport { Subscriber } from '../Subscriber';\\nexport declare const subscribeTo: <T>(result: ObservableInput<T>) => (subscriber: Subscriber<T>) => void | Subscription;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/subscribeToArray.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\n/**\\n * Subscribes to an ArrayLike with a subscriber\\n * @param array The array or array-like to subscribe to\\n */\\nexport declare const subscribeToArray: <T>(array: ArrayLike<T>) => (subscriber: Subscriber<T>) => void;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/subscribeToIterable.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\nexport declare const subscribeToIterable: <T>(iterable: Iterable<T>) => (subscriber: Subscriber<T>) => Subscriber<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/subscribeToObservable.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\n/**\\n * Subscribes to an object that implements Symbol.observable with the given\\n * Subscriber.\\n * @param obj An object that implements Symbol.observable\\n */\\nexport declare const subscribeToObservable: <T>(obj: any) => (subscriber: Subscriber<T>) => any;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/subscribeToPromise.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\nexport declare const subscribeToPromise: <T>(promise: PromiseLike<T>) => (subscriber: Subscriber<T>) => Subscriber<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/subscribeToResult.d.ts\"\n    ],\n    \"content\": \"import { Subscription } from '../Subscription';\\nimport { OuterSubscriber } from '../OuterSubscriber';\\nimport { Subscriber } from '../Subscriber';\\nexport declare function subscribeToResult<T, R>(outerSubscriber: OuterSubscriber<T, R>, result: any, outerValue?: T, outerIndex?: number, destination?: Subscriber<any>): Subscription;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/TimeoutError.d.ts\"\n    ],\n    \"content\": \"export interface TimeoutError extends Error {\\n}\\nexport interface TimeoutErrorCtor {\\n    new (): TimeoutError;\\n}\\n/**\\n * An error thrown when duetime elapses.\\n *\\n * @see {@link operators/timeout}\\n *\\n * @class TimeoutError\\n */\\nexport declare const TimeoutError: TimeoutErrorCtor;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/toSubscriber.d.ts\"\n    ],\n    \"content\": \"import { Subscriber } from '../Subscriber';\\nimport { PartialObserver } from '../types';\\nexport declare function toSubscriber<T>(nextOrObserver?: PartialObserver<T> | ((value: T) => void), error?: (error: any) => void, complete?: () => void): Subscriber<T>;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/tryCatch.d.ts\"\n    ],\n    \"content\": \"export declare function tryCatch<T extends Function>(fn: T): T;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/internal/util/UnsubscriptionError.d.ts\"\n    ],\n    \"content\": \"export interface UnsubscriptionError extends Error {\\n    readonly errors: any[];\\n}\\nexport interface UnsubscriptionErrorCtor {\\n    new (errors: any[]): UnsubscriptionError;\\n}\\n/**\\n * An error thrown when one or more errors have occurred during the\\n * `unsubscribe` of a {@link Subscription}.\\n */\\nexport declare const UnsubscriptionError: UnsubscriptionErrorCtor;\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Notification.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Notification';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Observable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Observable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/ArrayLikeObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/ArrayLikeObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/ArrayObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/ArrayObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/bindCallback.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/bindCallback';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/bindNodeCallback.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/bindNodeCallback';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/BoundCallbackObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/BoundCallbackObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/BoundNodeCallbackObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/BoundNodeCallbackObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/combineLatest.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/combineLatest';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/concat.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/concat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/ConnectableObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/ConnectableObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/defer.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/defer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/DeferObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/DeferObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/dom/ajax.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/dom/ajax';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/dom/AjaxObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/dom/AjaxObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/dom/webSocket.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/dom/webSocket';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/dom/WebSocketSubject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/dom/WebSocketSubject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/empty.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/empty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/EmptyObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/EmptyObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/ErrorObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/ErrorObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/forkJoin.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/forkJoin';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/ForkJoinObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/ForkJoinObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/from.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/from';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/fromArray.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/fromArray';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/fromEvent.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/fromEvent';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/FromEventObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/FromEventObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/fromEventPattern.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/fromEventPattern';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/FromEventPatternObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/FromEventPatternObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/fromIterable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/fromIterable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/FromObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/FromObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/fromPromise.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/fromPromise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/generate.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/generate';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/GenerateObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/GenerateObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/if.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/if';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/IfObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/IfObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/interval.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/interval';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/IntervalObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/IntervalObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/IteratorObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/IteratorObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/merge.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/merge';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/never.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/never';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/NeverObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/NeverObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/of.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/of';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/onErrorResumeNext';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/pairs.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/pairs';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/PairsObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/PairsObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/PromiseObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/PromiseObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/race.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/race';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/range.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/range';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/RangeObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/RangeObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/ScalarObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/ScalarObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/SubscribeOnObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/SubscribeOnObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/throw.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/throw';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/timer.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/timer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/TimerObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/TimerObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/using.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/using';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/UsingObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/UsingObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/observable/zip.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/observable/zip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Observer.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Observer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Operator.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Operator';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/audit.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/audit';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/auditTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/auditTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/buffer.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/buffer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/bufferCount.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/bufferCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/bufferTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/bufferTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/bufferToggle.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/bufferToggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/bufferWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/bufferWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/catch.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/catch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/combineAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/combineAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/combineLatest.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/combineLatest';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/concat.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/concat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/concatAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/concatAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/concatMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/concatMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/concatMapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/concatMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/count.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/count';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/debounce.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/debounce';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/debounceTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/debounceTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/defaultIfEmpty.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/defaultIfEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/delay.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/delay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/delayWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/delayWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/dematerialize.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/dematerialize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/distinct.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/distinct';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/distinctUntilChanged.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/distinctUntilChanged';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/distinctUntilKeyChanged.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/distinctUntilKeyChanged';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/do.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/do';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/elementAt.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/elementAt';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/every.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/every';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/exhaust.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/exhaust';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/exhaustMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/exhaustMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/expand.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/expand';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/filter.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/filter';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/finally.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/finally';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/find.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/find';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/findIndex.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/findIndex';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/first.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/first';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/groupBy.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/groupBy';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/ignoreElements.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/ignoreElements';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/isEmpty.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/isEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/last.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/last';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/let.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/let';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/map.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/map';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/mapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/mapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/materialize.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/materialize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/max.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/max';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/merge.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/merge';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/mergeAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/mergeAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/mergeMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/mergeMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/mergeMapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/mergeMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/mergeScan.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/mergeScan';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/min.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/min';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/multicast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/multicast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/observeOn.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/observeOn';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/onErrorResumeNext';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/pairwise.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/pairwise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/partition.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/partition';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/pluck.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/pluck';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/publish.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/publish';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/publishBehavior.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/publishBehavior';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/publishLast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/publishLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/publishReplay.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/publishReplay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/race.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/race';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/reduce.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/reduce';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/repeat.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/repeat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/repeatWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/repeatWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/retry.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/retry';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/retryWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/retryWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/sample.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/sample';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/sampleTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/sampleTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/scan.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/scan';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/sequenceEqual.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/sequenceEqual';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/share.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/share';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/shareReplay.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/shareReplay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/single.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/single';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/skip.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/skip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/skipLast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/skipLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/skipUntil.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/skipUntil';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/skipWhile.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/skipWhile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/startWith.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/startWith';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/subscribeOn.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/subscribeOn';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/switch.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/switch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/switchMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/switchMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/switchMapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/switchMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/take.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/take';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/takeLast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/takeLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/takeUntil.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/takeUntil';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/takeWhile.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/takeWhile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/throttle.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/throttle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/throttleTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/throttleTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/timeInterval.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/timeInterval';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/timeout.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/timeout';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/timeoutWith.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/timeoutWith';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/timestamp.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/timestamp';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/toArray.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/toArray';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/toPromise.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/toPromise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/window.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/window';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/windowCount.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/windowCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/windowTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/windowTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/windowToggle.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/windowToggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/windowWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/windowWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/withLatestFrom.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/withLatestFrom';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/zip.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/zip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operator/zipAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operator/zipAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/audit.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/audit';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/auditTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/auditTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/buffer.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/buffer';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/bufferCount.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/bufferCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/bufferTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/bufferTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/bufferToggle.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/bufferToggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/bufferWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/bufferWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/catchError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/catchError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/combineAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/combineAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/combineLatest.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/combineLatest';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/concat.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/concat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/concatAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/concatAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/concatMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/concatMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/concatMapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/concatMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/count.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/count';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/debounce.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/debounce';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/debounceTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/debounceTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/defaultIfEmpty.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/defaultIfEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/delay.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/delay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/delayWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/delayWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/dematerialize.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/dematerialize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/distinct.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/distinct';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/distinctUntilChanged.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/distinctUntilChanged';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/distinctUntilKeyChanged.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/distinctUntilKeyChanged';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/elementAt.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/elementAt';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/every.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/every';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/exhaust.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/exhaust';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/exhaustMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/exhaustMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/expand.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/expand';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/filter.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/filter';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/finalize.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/finalize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/find.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/find';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/findIndex.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/findIndex';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/first.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/first';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/groupBy.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/groupBy';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/ignoreElements.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/ignoreElements';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/index.d.ts\",\n      \"node_modules/rxjs/operators/index.d.ts\"\n    ],\n    \"content\": \"export { audit } from '../internal/operators/audit';\\nexport { auditTime } from '../internal/operators/auditTime';\\nexport { buffer } from '../internal/operators/buffer';\\nexport { bufferCount } from '../internal/operators/bufferCount';\\nexport { bufferTime } from '../internal/operators/bufferTime';\\nexport { bufferToggle } from '../internal/operators/bufferToggle';\\nexport { bufferWhen } from '../internal/operators/bufferWhen';\\nexport { catchError } from '../internal/operators/catchError';\\nexport { combineAll } from '../internal/operators/combineAll';\\nexport { combineLatest } from '../internal/operators/combineLatest';\\nexport { concat } from '../internal/operators/concat';\\nexport { concatAll } from '../internal/operators/concatAll';\\nexport { concatMap } from '../internal/operators/concatMap';\\nexport { concatMapTo } from '../internal/operators/concatMapTo';\\nexport { count } from '../internal/operators/count';\\nexport { debounce } from '../internal/operators/debounce';\\nexport { debounceTime } from '../internal/operators/debounceTime';\\nexport { defaultIfEmpty } from '../internal/operators/defaultIfEmpty';\\nexport { delay } from '../internal/operators/delay';\\nexport { delayWhen } from '../internal/operators/delayWhen';\\nexport { dematerialize } from '../internal/operators/dematerialize';\\nexport { distinct } from '../internal/operators/distinct';\\nexport { distinctUntilChanged } from '../internal/operators/distinctUntilChanged';\\nexport { distinctUntilKeyChanged } from '../internal/operators/distinctUntilKeyChanged';\\nexport { elementAt } from '../internal/operators/elementAt';\\nexport { endWith } from '../internal/operators/endWith';\\nexport { every } from '../internal/operators/every';\\nexport { exhaust } from '../internal/operators/exhaust';\\nexport { exhaustMap } from '../internal/operators/exhaustMap';\\nexport { expand } from '../internal/operators/expand';\\nexport { filter } from '../internal/operators/filter';\\nexport { finalize } from '../internal/operators/finalize';\\nexport { find } from '../internal/operators/find';\\nexport { findIndex } from '../internal/operators/findIndex';\\nexport { first } from '../internal/operators/first';\\nexport { groupBy } from '../internal/operators/groupBy';\\nexport { ignoreElements } from '../internal/operators/ignoreElements';\\nexport { isEmpty } from '../internal/operators/isEmpty';\\nexport { last } from '../internal/operators/last';\\nexport { map } from '../internal/operators/map';\\nexport { mapTo } from '../internal/operators/mapTo';\\nexport { materialize } from '../internal/operators/materialize';\\nexport { max } from '../internal/operators/max';\\nexport { merge } from '../internal/operators/merge';\\nexport { mergeAll } from '../internal/operators/mergeAll';\\nexport { mergeMap } from '../internal/operators/mergeMap';\\nexport { mergeMap as flatMap } from '../internal/operators/mergeMap';\\nexport { mergeMapTo } from '../internal/operators/mergeMapTo';\\nexport { mergeScan } from '../internal/operators/mergeScan';\\nexport { min } from '../internal/operators/min';\\nexport { multicast } from '../internal/operators/multicast';\\nexport { observeOn } from '../internal/operators/observeOn';\\nexport { onErrorResumeNext } from '../internal/operators/onErrorResumeNext';\\nexport { pairwise } from '../internal/operators/pairwise';\\nexport { partition } from '../internal/operators/partition';\\nexport { pluck } from '../internal/operators/pluck';\\nexport { publish } from '../internal/operators/publish';\\nexport { publishBehavior } from '../internal/operators/publishBehavior';\\nexport { publishLast } from '../internal/operators/publishLast';\\nexport { publishReplay } from '../internal/operators/publishReplay';\\nexport { race } from '../internal/operators/race';\\nexport { reduce } from '../internal/operators/reduce';\\nexport { repeat } from '../internal/operators/repeat';\\nexport { repeatWhen } from '../internal/operators/repeatWhen';\\nexport { retry } from '../internal/operators/retry';\\nexport { retryWhen } from '../internal/operators/retryWhen';\\nexport { refCount } from '../internal/operators/refCount';\\nexport { sample } from '../internal/operators/sample';\\nexport { sampleTime } from '../internal/operators/sampleTime';\\nexport { scan } from '../internal/operators/scan';\\nexport { sequenceEqual } from '../internal/operators/sequenceEqual';\\nexport { share } from '../internal/operators/share';\\nexport { shareReplay } from '../internal/operators/shareReplay';\\nexport { single } from '../internal/operators/single';\\nexport { skip } from '../internal/operators/skip';\\nexport { skipLast } from '../internal/operators/skipLast';\\nexport { skipUntil } from '../internal/operators/skipUntil';\\nexport { skipWhile } from '../internal/operators/skipWhile';\\nexport { startWith } from '../internal/operators/startWith';\\nexport { subscribeOn } from '../internal/operators/subscribeOn';\\nexport { switchAll } from '../internal/operators/switchAll';\\nexport { switchMap } from '../internal/operators/switchMap';\\nexport { switchMapTo } from '../internal/operators/switchMapTo';\\nexport { take } from '../internal/operators/take';\\nexport { takeLast } from '../internal/operators/takeLast';\\nexport { takeUntil } from '../internal/operators/takeUntil';\\nexport { takeWhile } from '../internal/operators/takeWhile';\\nexport { tap } from '../internal/operators/tap';\\nexport { throttle } from '../internal/operators/throttle';\\nexport { throttleTime } from '../internal/operators/throttleTime';\\nexport { throwIfEmpty } from '../internal/operators/throwIfEmpty';\\nexport { timeInterval } from '../internal/operators/timeInterval';\\nexport { timeout } from '../internal/operators/timeout';\\nexport { timeoutWith } from '../internal/operators/timeoutWith';\\nexport { timestamp } from '../internal/operators/timestamp';\\nexport { toArray } from '../internal/operators/toArray';\\nexport { window } from '../internal/operators/window';\\nexport { windowCount } from '../internal/operators/windowCount';\\nexport { windowTime } from '../internal/operators/windowTime';\\nexport { windowToggle } from '../internal/operators/windowToggle';\\nexport { windowWhen } from '../internal/operators/windowWhen';\\nexport { withLatestFrom } from '../internal/operators/withLatestFrom';\\nexport { zip } from '../internal/operators/zip';\\nexport { zipAll } from '../internal/operators/zipAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/isEmpty.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/isEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/last.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/last';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/map.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/map';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/mapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/mapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/materialize.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/materialize';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/max.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/max';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/merge.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/merge';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/mergeAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/mergeAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/mergeMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/mergeMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/mergeMapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/mergeMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/mergeScan.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/mergeScan';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/min.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/min';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/multicast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/multicast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/observeOn.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/observeOn';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/onErrorResumeNext.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/onErrorResumeNext';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/pairwise.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/pairwise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/partition.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/partition';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/pluck.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/pluck';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/publish.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/publish';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/publishBehavior.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/publishBehavior';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/publishLast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/publishLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/publishReplay.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/publishReplay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/race.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/race';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/reduce.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/reduce';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/refCount.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/refCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/repeat.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/repeat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/repeatWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/repeatWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/retry.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/retry';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/retryWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/retryWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/sample.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/sample';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/sampleTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/sampleTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/scan.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/scan';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/sequenceEqual.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/sequenceEqual';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/share.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/share';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/shareReplay.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/shareReplay';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/single.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/single';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/skip.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/skip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/skipLast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/skipLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/skipUntil.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/skipUntil';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/skipWhile.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/skipWhile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/startWith.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/startWith';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/subscribeOn.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/subscribeOn';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/switchAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/switchAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/switchMap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/switchMap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/switchMapTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/switchMapTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/take.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/take';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/takeLast.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/takeLast';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/takeUntil.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/takeUntil';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/takeWhile.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/takeWhile';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/tap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/tap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/throttle.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/throttle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/throttleTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/throttleTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/throwIfEmpty.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/throwIfEmpty';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/timeInterval.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/timeInterval';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/timeout.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/timeout';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/timeoutWith.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/timeoutWith';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/timestamp.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/timestamp';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/toArray.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/toArray';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/window.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/window';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/windowCount.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/windowCount';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/windowTime.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/windowTime';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/windowToggle.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/windowToggle';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/windowWhen.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/windowWhen';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/withLatestFrom.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/withLatestFrom';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/zip.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/zip';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/operators/zipAll.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/operators/zipAll';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/OuterSubscriber.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/OuterSubscriber';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/ReplaySubject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/ReplaySubject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Rx.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Scheduler.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Scheduler';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/scheduler/animationFrame.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/scheduler/animationFrame';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/scheduler/asap.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/scheduler/asap';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/scheduler/async.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/scheduler/async';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/scheduler/queue.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/scheduler/queue';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Subject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Subject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/SubjectSubscription.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/SubjectSubscription';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Subscriber.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Subscriber';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/Subscription.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/Subscription';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/symbol/iterator.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/symbol/iterator';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/symbol/observable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/symbol/observable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/symbol/rxSubscriber.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/symbol/rxSubscriber';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/testing/index.d.ts\",\n      \"node_modules/rxjs/testing/index.d.ts\"\n    ],\n    \"content\": \"export { TestScheduler } from '../internal/testing/TestScheduler';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/applyMixins.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/applyMixins';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/ArgumentOutOfRangeError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/ArgumentOutOfRangeError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/EmptyError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/EmptyError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/errorObject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/errorObject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/hostReportError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/hostReportError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/identity.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/identity';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/Immediate.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/Immediate';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isArray.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isArray';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isArrayLike.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isArrayLike';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isDate.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isDate';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isFunction.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isFunction';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isIterable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isIterable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isNumeric.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isNumeric';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isObject.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isObject';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isPromise.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isPromise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/isScheduler.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/isScheduler';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/noop.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/noop';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/not.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/not';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/ObjectUnsubscribedError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/ObjectUnsubscribedError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/pipe.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/pipe';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/root.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/root';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/subscribeTo.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/subscribeTo';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/subscribeToArray.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/subscribeToArray';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/subscribeToIterable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/subscribeToIterable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/subscribeToObservable.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/subscribeToObservable';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/subscribeToPromise.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/subscribeToPromise';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/subscribeToResult.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/subscribeToResult';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/TimeoutError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/TimeoutError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/toSubscriber.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/toSubscriber';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/tryCatch.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/tryCatch';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/util/UnsubscriptionError.d.ts\"\n    ],\n    \"content\": \"export * from 'rxjs-compat/util/UnsubscriptionError';\\n\"\n  },\n  {\n    \"paths\": [\n      \"node_modules/rxjs/webSocket/index.d.ts\",\n      \"node_modules/rxjs/webSocket/index.d.ts\"\n    ],\n    \"content\": \"export { webSocket as webSocket } from '../internal/observable/dom/webSocket';\\nexport { WebSocketSubject, WebSocketSubjectConfig } from '../internal/observable/dom/WebSocketSubject';\\n\"\n  }\n]\n"
  },
  {
    "path": "libs/code-demos/assets/runner/ng2/basic.ts",
    "content": "import 'rxjs';\nimport '@angular/core';\nimport '@angular/animations';\nimport '@angular/router';\nimport '@angular/platform-browser-dynamic';\nimport '@angular/platform-browser-dynamic/testing';\nimport '@angular/core/testing';\nimport '@angular/platform-browser/animations';\n\nimport '@angular/material/autocomplete';\nimport '@angular/material/badge';\nimport '@angular/material/bottom-sheet';\nimport '@angular/material/button';\nimport '@angular/material/button-toggle';\nimport '@angular/material/card';\nimport '@angular/material/checkbox';\nimport '@angular/material/chips';\nimport '@angular/material/core';\nimport '@angular/material/datepicker';\nimport '@angular/material/dialog';\nimport '@angular/material/divider';\nimport '@angular/material/expansion';\nimport '@angular/material/form-field';\nimport '@angular/material/grid-list';\nimport '@angular/material/icon';\nimport '@angular/material/input';\nimport '@angular/material/list';\nimport '@angular/material/menu';\nimport '@angular/material/paginator';\nimport '@angular/material/progress-bar';\nimport '@angular/material/progress-spinner';\nimport '@angular/material/radio';\nimport '@angular/material/select';\nimport '@angular/material/sidenav';\nimport '@angular/material/slide-toggle';\nimport '@angular/material/slider';\nimport '@angular/material/snack-bar';\nimport '@angular/material/sort';\nimport '@angular/material/stepper';\nimport '@angular/material/table';\nimport '@angular/material/tabs';\nimport '@angular/material/toolbar';\nimport '@angular/material/tooltip';\nimport '@angular/material/tree';\n"
  },
  {
    "path": "libs/code-demos/assets/runner/ng2/ng-bundle.js",
    "content": "var __extends,__assign,__rest,__decorate,__param,__metadata,__awaiter,__generator,__exportStar,__values,__read,__spread,__spreadArrays,__await,__asyncGenerator,__asyncDelegator,__asyncValues,__makeTemplateObject,__importStar,__importDefault;!function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/router/bundles/router.umd.js\",[\"@angular/common\",\"@angular/core\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,h,p,d,f){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function t(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var m=function(){return(m=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function n(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function i(n,r){return function(e,t){r(e,t,n)}}function o(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function v(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function a(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function l(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(a(arguments[t]));return e}function s(e,t){this.id=e,this.url=t}var u,y=(t(c,u=s),c.prototype.toString=function(){return\"NavigationStart(id: \"+this.id+\", url: '\"+this.url+\"')\"},c);function c(e,t,n,r){void 0===n&&(n=\"imperative\"),void 0===r&&(r=null);var i=u.call(this,e,t)||this;return i.navigationTrigger=n,i.restoredState=r,i}var g,_=(t(b,g=s),b.prototype.toString=function(){return\"NavigationEnd(id: \"+this.id+\", url: '\"+this.url+\"', urlAfterRedirects: '\"+this.urlAfterRedirects+\"')\"},b);function b(e,t,n){var r=g.call(this,e,t)||this;return r.urlAfterRedirects=n,r}var w,x=(t(C,w=s),C.prototype.toString=function(){return\"NavigationCancel(id: \"+this.id+\", url: '\"+this.url+\"')\"},C);function C(e,t,n){var r=w.call(this,e,t)||this;return r.reason=n,r}var S,E=(t(O,S=s),O.prototype.toString=function(){return\"NavigationError(id: \"+this.id+\", url: '\"+this.url+\"', error: \"+this.error+\")\"},O);function O(e,t,n){var r=S.call(this,e,t)||this;return r.error=n,r}var k,D=(t(T,k=s),T.prototype.toString=function(){return\"RoutesRecognized(id: \"+this.id+\", url: '\"+this.url+\"', urlAfterRedirects: '\"+this.urlAfterRedirects+\"', state: \"+this.state+\")\"},T);function T(e,t,n,r){var i=k.call(this,e,t)||this;return i.urlAfterRedirects=n,i.state=r,i}var I,P=(t(A,I=s),A.prototype.toString=function(){return\"GuardsCheckStart(id: \"+this.id+\", url: '\"+this.url+\"', urlAfterRedirects: '\"+this.urlAfterRedirects+\"', state: \"+this.state+\")\"},A);function A(e,t,n,r){var i=I.call(this,e,t)||this;return i.urlAfterRedirects=n,i.state=r,i}var M,R=(t(N,M=s),N.prototype.toString=function(){return\"GuardsCheckEnd(id: \"+this.id+\", url: '\"+this.url+\"', urlAfterRedirects: '\"+this.urlAfterRedirects+\"', state: \"+this.state+\", shouldActivate: \"+this.shouldActivate+\")\"},N);function N(e,t,n,r,i){var o=M.call(this,e,t)||this;return o.urlAfterRedirects=n,o.state=r,o.shouldActivate=i,o}var j,F=(t(L,j=s),L.prototype.toString=function(){return\"ResolveStart(id: \"+this.id+\", url: '\"+this.url+\"', urlAfterRedirects: '\"+this.urlAfterRedirects+\"', state: \"+this.state+\")\"},L);function L(e,t,n,r){var i=j.call(this,e,t)||this;return i.urlAfterRedirects=n,i.state=r,i}var V,B=(t(U,V=s),U.prototype.toString=function(){return\"ResolveEnd(id: \"+this.id+\", url: '\"+this.url+\"', urlAfterRedirects: '\"+this.urlAfterRedirects+\"', state: \"+this.state+\")\"},U);function U(e,t,n,r){var i=V.call(this,e,t)||this;return i.urlAfterRedirects=n,i.state=r,i}var z=(q.prototype.toString=function(){return\"RouteConfigLoadStart(path: \"+this.route.path+\")\"},q);function q(e){this.route=e}var H=(W.prototype.toString=function(){return\"RouteConfigLoadEnd(path: \"+this.route.path+\")\"},W);function W(e){this.route=e}var G=(Y.prototype.toString=function(){return\"ChildActivationStart(path: '\"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\")+\"')\"},Y);function Y(e){this.snapshot=e}var K=(Z.prototype.toString=function(){return\"ChildActivationEnd(path: '\"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\")+\"')\"},Z);function Z(e){this.snapshot=e}var Q=(X.prototype.toString=function(){return\"ActivationStart(path: '\"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\")+\"')\"},X);function X(e){this.snapshot=e}var $=(J.prototype.toString=function(){return\"ActivationEnd(path: '\"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\")+\"')\"},J);function J(e){this.snapshot=e}var ee=(te.prototype.toString=function(){var e=this.position?this.position[0]+\", \"+this.position[1]:null;return\"Scroll(anchor: '\"+this.anchor+\"', position: '\"+e+\"')\"},te);function te(e,t,n){this.routerEvent=e,this.position=t,this.anchor=n}var ne=re=n([p.Component({template:\"<router-outlet></router-outlet>\"})],re);function re(){}var ie=\"primary\",oe=(ae.prototype.has=function(e){return this.params.hasOwnProperty(e)},ae.prototype.get=function(e){if(this.has(e)){var t=this.params[e];return Array.isArray(t)?t[0]:t}return null},ae.prototype.getAll=function(e){if(this.has(e)){var t=this.params[e];return Array.isArray(t)?t:[t]}return[]},Object.defineProperty(ae.prototype,\"keys\",{get:function(){return Object.keys(this.params)},enumerable:!0,configurable:!0}),ae);function ae(e){this.params=e||{}}function se(e){return new oe(e)}var le=\"ngNavigationCancelingError\";function ue(e){var t=Error(\"NavigationCancelingError: \"+e);return t[le]=!0,t}function ce(e,t,n){var r=n.path.split(\"/\");if(r.length>e.length)return null;if(\"full\"===n.pathMatch&&(t.hasChildren()||r.length<e.length))return null;for(var i={},o=0;o<r.length;o++){var a=r[o],s=e[o];if(a.startsWith(\":\"))i[a.substring(1)]=s;else if(a!==s.path)return null}return{consumed:e.slice(0,r.length),posParams:i}}var pe=function(e,t){this.routes=e,this.module=t};function de(e,t){void 0===t&&(t=\"\");for(var n=0;n<e.length;n++){var r=e[n];he(r,fe(t,r))}}function he(e,t){if(!e)throw new Error(\"\\n      Invalid configuration of route '\"+t+\"': 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(e))throw new Error(\"Invalid configuration of route '\"+t+\"': Array cannot be specified\");if(!e.component&&!e.children&&!e.loadChildren&&e.outlet&&e.outlet!==ie)throw new Error(\"Invalid configuration of route '\"+t+\"': a componentless route without children or loadChildren cannot have a named outlet set\");if(e.redirectTo&&e.children)throw new Error(\"Invalid configuration of route '\"+t+\"': redirectTo and children cannot be used together\");if(e.redirectTo&&e.loadChildren)throw new Error(\"Invalid configuration of route '\"+t+\"': redirectTo and loadChildren cannot be used together\");if(e.children&&e.loadChildren)throw new Error(\"Invalid configuration of route '\"+t+\"': children and loadChildren cannot be used together\");if(e.redirectTo&&e.component)throw new Error(\"Invalid configuration of route '\"+t+\"': redirectTo and component cannot be used together\");if(e.path&&e.matcher)throw new Error(\"Invalid configuration of route '\"+t+\"': path and matcher cannot be used together\");if(void 0===e.redirectTo&&!e.component&&!e.children&&!e.loadChildren)throw new Error(\"Invalid configuration of route '\"+t+\"'. One of the following must be provided: component, redirectTo, children or loadChildren\");if(void 0===e.path&&void 0===e.matcher)throw new Error(\"Invalid configuration of route '\"+t+\"': routes must have either a path or a matcher specified\");if(\"string\"==typeof e.path&&\"/\"===e.path.charAt(0))throw new Error(\"Invalid configuration of route '\"+t+\"': path cannot start with a slash\");if(\"\"===e.path&&void 0!==e.redirectTo&&void 0===e.pathMatch){throw new Error(\"Invalid configuration of route '{path: \\\"\"+t+'\", redirectTo: \"'+e.redirectTo+\"\\\"}': please provide 'pathMatch'. The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.\")}if(void 0!==e.pathMatch&&\"full\"!==e.pathMatch&&\"prefix\"!==e.pathMatch)throw new Error(\"Invalid configuration of route '\"+t+\"': pathMatch can only be set to 'prefix' or 'full'\");e.children&&de(e.children,t)}function fe(e,t){return t?e||t.path?e&&!t.path?e+\"/\":!e&&t.path?t.path:e+\"/\"+t.path:\"\":e}function me(e){var t=e.children&&e.children.map(me),n=t?m(m({},e),{children:t}):m({},e);return!n.component&&(t||n.loadChildren)&&n.outlet&&n.outlet!==ie&&(n.component=ne),n}function ve(e,t){var n,r=Object.keys(e),i=Object.keys(t);if(!r||!i||r.length!=i.length)return!1;for(var o=0;o<r.length;o++)if(e[n=r[o]]!==t[n])return!1;return!0}function ye(e){return Array.prototype.concat.apply([],e)}function ge(e){return 0<e.length?e[e.length-1]:null}function _e(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function be(e){return p.ɵisObservable(e)?e:p.ɵisPromise(e)?d.from(Promise.resolve(e)):d.of(e)}function we(e,t,n){return n?function(e,t){return ve(e,t)}(e.queryParams,t.queryParams)&&function e(t,n){if(!Te(t.segments,n.segments))return!1;if(t.numberOfChildren!==n.numberOfChildren)return!1;for(var r in n.children){if(!t.children[r])return!1;if(!e(t.children[r],n.children[r]))return!1}return!0}(e.root,t.root):function(t,n){return Object.keys(n).length<=Object.keys(t).length&&Object.keys(n).every(function(e){return n[e]===t[e]})}(e.queryParams,t.queryParams)&&xe(e.root,t.root)}function xe(e,t){return function e(t,n,r){{if(t.segments.length>r.length){var i=t.segments.slice(0,r.length);return!!Te(i,r)&&!n.hasChildren()}if(t.segments.length===r.length){if(!Te(t.segments,r))return!1;for(var o in n.children){if(!t.children[o])return!1;if(!xe(t.children[o],n.children[o]))return!1}return!0}var i=r.slice(0,t.segments.length),a=r.slice(t.segments.length);return!!Te(t.segments,i)&&(!!t.children[ie]&&e(t.children[ie],n,a))}}(e,t,t.segments)}var Ce=(Object.defineProperty(Se.prototype,\"queryParamMap\",{get:function(){return this._queryParamMap||(this._queryParamMap=se(this.queryParams)),this._queryParamMap},enumerable:!0,configurable:!0}),Se.prototype.toString=function(){return Re.serialize(this)},Se);function Se(e,t,n){this.root=e,this.queryParams=t,this.fragment=n}var Ee=(Oe.prototype.hasChildren=function(){return 0<this.numberOfChildren},Object.defineProperty(Oe.prototype,\"numberOfChildren\",{get:function(){return Object.keys(this.children).length},enumerable:!0,configurable:!0}),Oe.prototype.toString=function(){return Ne(this)},Oe);function Oe(e,t){var n=this;this.segments=e,this.children=t,this.parent=null,_e(t,function(e,t){return e.parent=n})}var ke=(Object.defineProperty(De.prototype,\"parameterMap\",{get:function(){return this._parameterMap||(this._parameterMap=se(this.parameters)),this._parameterMap},enumerable:!0,configurable:!0}),De.prototype.toString=function(){return Ue(this)},De);function De(e,t){this.path=e,this.parameters=t}function Te(e,n){return e.length===n.length&&e.every(function(e,t){return e.path===n[t].path})}function Ie(e,n){var r=[];return _e(e.children,function(e,t){t===ie&&(r=r.concat(n(e,t)))}),_e(e.children,function(e,t){t!==ie&&(r=r.concat(n(e,t)))}),r}function Pe(){}var Ae=(Me.prototype.parse=function(e){var t=new Ge(e);return new Ce(t.parseRootSegment(),t.parseQueryParams(),t.parseFragment())},Me.prototype.serialize=function(e){return\"/\"+function n(r,e){if(!r.hasChildren())return Ne(r);if(e){var t=r.children[ie]?n(r.children[ie],!1):\"\",i=[];return _e(r.children,function(e,t){t!==ie&&i.push(t+\":\"+n(e,!1))}),0<i.length?t+\"(\"+i.join(\"//\")+\")\":t}var o=Ie(r,function(e,t){return t===ie?[n(r.children[ie],!1)]:[t+\":\"+n(e,!1)]});return Ne(r)+\"/(\"+o.join(\"//\")+\")\"}(e.root,!0)+function(n){var e=Object.keys(n).map(function(t){var e=n[t];return Array.isArray(e)?e.map(function(e){return Fe(t)+\"=\"+Fe(e)}).join(\"&\"):Fe(t)+\"=\"+Fe(e)});return e.length?\"?\"+e.join(\"&\"):\"\"}(e.queryParams)+(\"string\"==typeof e.fragment?\"#\"+function(e){return encodeURI(e)}(e.fragment):\"\")},Me);function Me(){}var Re=new Ae;function Ne(e){return e.segments.map(function(e){return Ue(e)}).join(\"/\")}function je(e){return encodeURIComponent(e).replace(/%40/g,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\")}function Fe(e){return je(e).replace(/%3B/gi,\";\")}function Le(e){return je(e).replace(/\\(/g,\"%28\").replace(/\\)/g,\"%29\").replace(/%26/gi,\"&\")}function Ve(e){return decodeURIComponent(e)}function Be(e){return Ve(e.replace(/\\+/g,\"%20\"))}function Ue(e){return\"\"+Le(e.path)+function(t){return Object.keys(t).map(function(e){return\";\"+Le(e)+\"=\"+Le(t[e])}).join(\"\")}(e.parameters)}var ze=/^[^\\/()?;=#]+/;function qe(e){var t=e.match(ze);return t?t[0]:\"\"}var He=/^[^=?&#]+/;var We=/^[^?&#]+/;var Ge=(Ye.prototype.parseRootSegment=function(){return this.consumeOptional(\"/\"),\"\"===this.remaining||this.peekStartsWith(\"?\")||this.peekStartsWith(\"#\")?new Ee([],{}):new Ee([],this.parseChildren())},Ye.prototype.parseQueryParams=function(){var e={};if(this.consumeOptional(\"?\"))for(;this.parseQueryParam(e),this.consumeOptional(\"&\"););return e},Ye.prototype.parseFragment=function(){return this.consumeOptional(\"#\")?decodeURIComponent(this.remaining):null},Ye.prototype.parseChildren=function(){if(\"\"===this.remaining)return{};this.consumeOptional(\"/\");var e=[];for(this.peekStartsWith(\"(\")||e.push(this.parseSegment());this.peekStartsWith(\"/\")&&!this.peekStartsWith(\"//\")&&!this.peekStartsWith(\"/(\");)this.capture(\"/\"),e.push(this.parseSegment());var t={};this.peekStartsWith(\"/(\")&&(this.capture(\"/\"),t=this.parseParens(!0));var n={};return this.peekStartsWith(\"(\")&&(n=this.parseParens(!1)),(0<e.length||0<Object.keys(t).length)&&(n[ie]=new Ee(e,t)),n},Ye.prototype.parseSegment=function(){var e=qe(this.remaining);if(\"\"===e&&this.peekStartsWith(\";\"))throw new Error(\"Empty path url segment cannot have parameters: '\"+this.remaining+\"'.\");return this.capture(e),new ke(Ve(e),this.parseMatrixParams())},Ye.prototype.parseMatrixParams=function(){for(var e={};this.consumeOptional(\";\");)this.parseParam(e);return e},Ye.prototype.parseParam=function(e){var t=qe(this.remaining);if(t){this.capture(t);var n=\"\";if(this.consumeOptional(\"=\")){var r=qe(this.remaining);r&&(n=r,this.capture(n))}e[Ve(t)]=Ve(n)}},Ye.prototype.parseQueryParam=function(e){var t=function(e){var t=e.match(He);return t?t[0]:\"\"}(this.remaining);if(t){this.capture(t);var n=\"\";if(this.consumeOptional(\"=\")){var r=function(e){var t=e.match(We);return t?t[0]:\"\"}(this.remaining);r&&(n=r,this.capture(n))}var i=Be(t),o=Be(n);if(e.hasOwnProperty(i)){var a=e[i];Array.isArray(a)||(a=[a],e[i]=a),a.push(o)}else e[i]=o}},Ye.prototype.parseParens=function(e){var t={};for(this.capture(\"(\");!this.consumeOptional(\")\")&&0<this.remaining.length;){var n=qe(this.remaining),r=this.remaining[n.length];if(\"/\"!==r&&\")\"!==r&&\";\"!==r)throw new Error(\"Cannot parse url '\"+this.url+\"'\");var i=void 0;-1<n.indexOf(\":\")?(i=n.substr(0,n.indexOf(\":\")),this.capture(i),this.capture(\":\")):e&&(i=ie);var o=this.parseChildren();t[i]=1===Object.keys(o).length?o[ie]:new Ee([],o),this.consumeOptional(\"//\")}return t},Ye.prototype.peekStartsWith=function(e){return this.remaining.startsWith(e)},Ye.prototype.consumeOptional=function(e){return!!this.peekStartsWith(e)&&(this.remaining=this.remaining.substring(e.length),!0)},Ye.prototype.capture=function(e){if(!this.consumeOptional(e))throw new Error('Expected \"'+e+'\".')},Ye);function Ye(e){this.url=e,this.remaining=e}var Ke=(Object.defineProperty(Ze.prototype,\"root\",{get:function(){return this._root.value},enumerable:!0,configurable:!0}),Ze.prototype.parent=function(e){var t=this.pathFromRoot(e);return 1<t.length?t[t.length-2]:null},Ze.prototype.children=function(e){var t=Qe(e,this._root);return t?t.children.map(function(e){return e.value}):[]},Ze.prototype.firstChild=function(e){var t=Qe(e,this._root);return t&&0<t.children.length?t.children[0].value:null},Ze.prototype.siblings=function(t){var e=Xe(t,this._root);return e.length<2?[]:e[e.length-2].children.map(function(e){return e.value}).filter(function(e){return e!==t})},Ze.prototype.pathFromRoot=function(e){return Xe(e,this._root).map(function(e){return e.value})},Ze);function Ze(e){this._root=e}function Qe(e,t){var n,r;if(e===t.value)return t;try{for(var i=v(t.children),o=i.next();!o.done;o=i.next()){var a=Qe(e,o.value);if(a)return a}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return null}function Xe(e,t){var n,r;if(e===t.value)return[t];try{for(var i=v(t.children),o=i.next();!o.done;o=i.next()){var a=Xe(e,o.value);if(a.length)return a.unshift(t),a}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return[]}var $e=(Je.prototype.toString=function(){return\"TreeNode(\"+this.value+\")\"},Je);function Je(e,t){this.value=e,this.children=t}function et(e){var t={};return e&&e.children.forEach(function(e){return t[e.value.outlet]=e}),t}var tt,nt=(t(rt,tt=Ke),rt.prototype.toString=function(){return this.snapshot.toString()},rt);function rt(e,t){var n=tt.call(this,e)||this;return n.snapshot=t,ht(n,e),n}function it(e,t){var n=function(e,t){var n=new lt([],{},{},\"\",{},ie,t,null,e.root,-1,{});return new pt(\"\",new $e(n,[]))}(e,t),r=new d.BehaviorSubject([new ke(\"\",{})]),i=new d.BehaviorSubject({}),o=new d.BehaviorSubject({}),a=new d.BehaviorSubject({}),s=new d.BehaviorSubject(\"\"),l=new ot(r,i,a,s,o,ie,t,n.root);return l.snapshot=n.root,new nt(new $e(l,[]),n)}var ot=(Object.defineProperty(at.prototype,\"routeConfig\",{get:function(){return this._futureSnapshot.routeConfig},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"root\",{get:function(){return this._routerState.root},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"parent\",{get:function(){return this._routerState.parent(this)},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"firstChild\",{get:function(){return this._routerState.firstChild(this)},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"children\",{get:function(){return this._routerState.children(this)},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"pathFromRoot\",{get:function(){return this._routerState.pathFromRoot(this)},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"paramMap\",{get:function(){return this._paramMap||(this._paramMap=this.params.pipe(f.map(function(e){return se(e)}))),this._paramMap},enumerable:!0,configurable:!0}),Object.defineProperty(at.prototype,\"queryParamMap\",{get:function(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(f.map(function(e){return se(e)}))),this._queryParamMap},enumerable:!0,configurable:!0}),at.prototype.toString=function(){return this.snapshot?this.snapshot.toString():\"Future(\"+this._futureSnapshot+\")\"},at);function at(e,t,n,r,i,o,a,s){this.url=e,this.params=t,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=o,this.component=a,this._futureSnapshot=s}function st(e,t){void 0===t&&(t=\"emptyOnly\");var n=e.pathFromRoot,r=0;if(\"always\"!==t)for(r=n.length-1;1<=r;){var i=n[r],o=n[r-1];if(i.routeConfig&&\"\"===i.routeConfig.path)r--;else{if(o.component)break;r--}}return function(e){return e.reduce(function(e,t){return{params:m(m({},e.params),t.params),data:m(m({},e.data),t.data),resolve:m(m({},e.resolve),t._resolvedData)}},{params:{},data:{},resolve:{}})}(n.slice(r))}var lt=(Object.defineProperty(ut.prototype,\"root\",{get:function(){return this._routerState.root},enumerable:!0,configurable:!0}),Object.defineProperty(ut.prototype,\"parent\",{get:function(){return this._routerState.parent(this)},enumerable:!0,configurable:!0}),Object.defineProperty(ut.prototype,\"firstChild\",{get:function(){return this._routerState.firstChild(this)},enumerable:!0,configurable:!0}),Object.defineProperty(ut.prototype,\"children\",{get:function(){return this._routerState.children(this)},enumerable:!0,configurable:!0}),Object.defineProperty(ut.prototype,\"pathFromRoot\",{get:function(){return this._routerState.pathFromRoot(this)},enumerable:!0,configurable:!0}),Object.defineProperty(ut.prototype,\"paramMap\",{get:function(){return this._paramMap||(this._paramMap=se(this.params)),this._paramMap},enumerable:!0,configurable:!0}),Object.defineProperty(ut.prototype,\"queryParamMap\",{get:function(){return this._queryParamMap||(this._queryParamMap=se(this.queryParams)),this._queryParamMap},enumerable:!0,configurable:!0}),ut.prototype.toString=function(){return\"Route(url:'\"+this.url.map(function(e){return e.toString()}).join(\"/\")+\"', path:'\"+(this.routeConfig?this.routeConfig.path:\"\")+\"')\"},ut);function ut(e,t,n,r,i,o,a,s,l,u,c){this.url=e,this.params=t,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=o,this.component=a,this.routeConfig=s,this._urlSegment=l,this._lastPathIndex=u,this._resolve=c}var ct,pt=(t(dt,ct=Ke),dt.prototype.toString=function(){return ft(this._root)},dt);function dt(e,t){var n=ct.call(this,t)||this;return n.url=e,ht(n,t),n}function ht(t,e){e.value._routerState=t,e.children.forEach(function(e){return ht(t,e)})}function ft(e){var t=0<e.children.length?\" { \"+e.children.map(ft).join(\", \")+\" } \":\"\";return e.value+t}function mt(e){if(e.snapshot){var t=e.snapshot,n=e._futureSnapshot;e.snapshot=n,ve(t.queryParams,n.queryParams)||e.queryParams.next(n.queryParams),t.fragment!==n.fragment&&e.fragment.next(n.fragment),ve(t.params,n.params)||e.params.next(n.params),function(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;++n)if(!ve(e[n],t[n]))return!1;return!0}(t.url,n.url)||e.url.next(n.url),ve(t.data,n.data)||e.data.next(n.data)}else e.snapshot=e._futureSnapshot,e.data.next(e._futureSnapshot.data)}function vt(e,t){var n=ve(e.params,t.params)&&function(e,n){return Te(e,n)&&e.every(function(e,t){return ve(e.parameters,n[t].parameters)})}(e.url,t.url),r=!e.parent!=!t.parent;return n&&!r&&(!e.parent||vt(e.parent,t.parent))}function yt(t,e,n){if(n&&t.shouldReuseRoute(e.value,n.value.snapshot)){(a=n.value)._futureSnapshot=e.value;var r=function(a,e,s){return e.children.map(function(e){var t,n;try{for(var r=v(s.children),i=r.next();!i.done;i=r.next()){var o=i.value;if(a.shouldReuseRoute(o.value.snapshot,e.value))return yt(a,e,o)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return yt(a,e)})}(t,e,n);return new $e(a,r)}var i=t.retrieve(e.value);if(i){var o=i.route;return function e(t,n){if(t.value.routeConfig!==n.value.routeConfig)throw new Error(\"Cannot reattach ActivatedRouteSnapshot created from a different route\");if(t.children.length!==n.children.length)throw new Error(\"Cannot reattach ActivatedRouteSnapshot with a different number of children\");n.value._futureSnapshot=t.value;for(var r=0;r<t.children.length;++r)e(t.children[r],n.children[r])}(e,o),o}var a=function(e){return new ot(new d.BehaviorSubject(e.url),new d.BehaviorSubject(e.params),new d.BehaviorSubject(e.queryParams),new d.BehaviorSubject(e.fragment),new d.BehaviorSubject(e.data),e.outlet,e.component,e)}(e.value);r=e.children.map(function(e){return yt(t,e)});return new $e(a,r)}function gt(e,t,n,r,i){if(0===n.length)return bt(t.root,t.root,t,r,i);var o=function(e){if(\"string\"==typeof e[0]&&1===e.length&&\"/\"===e[0])return new wt(!0,0,e);var i=0,o=!1,t=e.reduce(function(n,e,t){if(\"object\"==typeof e&&null!=e){if(e.outlets){var r={};return _e(e.outlets,function(e,t){r[t]=\"string\"==typeof e?e.split(\"/\"):e}),l(n,[{outlets:r}])}if(e.segmentPath)return l(n,[e.segmentPath])}return\"string\"!=typeof e?l(n,[e]):0===t?(e.split(\"/\").forEach(function(e,t){0==t&&\".\"===e||(0==t&&\"\"===e?o=!0:\"..\"===e?i++:\"\"!=e&&n.push(e))}),n):l(n,[e])},[]);return new wt(o,i,t)}(n);if(o.toRoot())return bt(t.root,new Ee([],{}),t,r,i);var a=function(e,t,n){if(e.isAbsolute)return new Ct(t.root,!0,0);if(-1===n.snapshot._lastPathIndex)return new Ct(n.snapshot._urlSegment,!0,0);var r=_t(e.commands[0])?0:1,i=n.snapshot._lastPathIndex+r;return function(e,t,n){var r=e,i=t,o=n;for(;i<o;){if(o-=i,!(r=r.parent))throw new Error(\"Invalid number of '../'\");i=r.segments.length}return new Ct(r,!1,i-o)}(n.snapshot._urlSegment,i,e.numberOfDoubleDots)}(o,t,e),s=a.processChildren?Ot(a.segmentGroup,a.index,o.commands):Et(a.segmentGroup,a.index,o.commands);return bt(a.segmentGroup,s,t,r,i)}function _t(e){return\"object\"==typeof e&&null!=e&&!e.outlets&&!e.segmentPath}function bt(e,t,n,r,i){var o={};return r&&_e(r,function(e,t){o[t]=Array.isArray(e)?e.map(function(e){return\"\"+e}):\"\"+e}),n.root===e?new Ce(t,o,i):new Ce(function n(e,r,i){var o={};_e(e.children,function(e,t){o[t]=e===r?i:n(e,r,i)});return new Ee(e.segments,o)}(n.root,e,t),o,i)}var wt=(xt.prototype.toRoot=function(){return this.isAbsolute&&1===this.commands.length&&\"/\"==this.commands[0]},xt);function xt(e,t,n){if(this.isAbsolute=e,this.numberOfDoubleDots=t,this.commands=n,e&&0<n.length&&_t(n[0]))throw new Error(\"Root segment cannot have matrix parameters\");var r=n.find(function(e){return\"object\"==typeof e&&null!=e&&e.outlets});if(r&&r!==ge(n))throw new Error(\"{outlets:{}} has to be the last command\")}var Ct=function(e,t,n){this.segmentGroup=e,this.processChildren=t,this.index=n};function St(e){return\"object\"==typeof e&&null!=e&&e.outlets?e.outlets[ie]:\"\"+e}function Et(e,t,n){if(0===(e=e||new Ee([],{})).segments.length&&e.hasChildren())return Ot(e,t,n);var r=function(e,t,n){var r=0,i=t,o={match:!1,pathIndex:0,commandIndex:0};for(;i<e.segments.length;){if(r>=n.length)return o;var a=e.segments[i],s=St(n[r]),l=r<n.length-1?n[r+1]:null;if(0<i&&void 0===s)break;if(s&&l&&\"object\"==typeof l&&void 0===l.outlets){if(!It(s,l,a))return o;r+=2}else{if(!It(s,{},a))return o;r++}i++}return{match:!0,pathIndex:i,commandIndex:r}}(e,t,n),i=n.slice(r.commandIndex);if(r.match&&r.pathIndex<e.segments.length){var o=new Ee(e.segments.slice(0,r.pathIndex),{});return o.children[ie]=new Ee(e.segments.slice(r.pathIndex),e.children),Ot(o,0,i)}return r.match&&0===i.length?new Ee(e.segments,{}):r.match&&!e.hasChildren()?kt(e,t,n):r.match?Ot(e,0,i):kt(e,t,n)}function Ot(n,r,e){if(0===e.length)return new Ee(n.segments,{});var i=function(e){var t,n;return\"object\"!=typeof e[0]?((t={})[ie]=e,t):void 0===e[0].outlets?((n={})[ie]=e,n):e[0].outlets}(e),o={};return _e(i,function(e,t){null!==e&&(o[t]=Et(n.children[t],r,e))}),_e(n.children,function(e,t){void 0===i[t]&&(o[t]=e)}),new Ee(n.segments,o)}function kt(e,t,n){for(var r=e.segments.slice(0,t),i=0;i<n.length;){if(\"object\"==typeof n[i]&&void 0!==n[i].outlets){var o=Dt(n[i].outlets);return new Ee(r,o)}if(0===i&&_t(n[0])){var a=e.segments[t];r.push(new ke(a.path,n[0])),i++}else{var s=St(n[i]),l=i<n.length-1?n[i+1]:null;s&&l&&_t(l)?(r.push(new ke(s,Tt(l))),i+=2):(r.push(new ke(s,{})),i++)}}return new Ee(r,{})}function Dt(e){var n={};return _e(e,function(e,t){null!==e&&(n[t]=kt(new Ee([],{}),0,e))}),n}function Tt(e){var n={};return _e(e,function(e,t){return n[t]=\"\"+e}),n}function It(e,t,n){return e==n.path&&ve(t,n.parameters)}var Pt=(At.prototype.activate=function(e){var t=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(t,n,e),mt(this.futureState.root),this.activateChildRoutes(t,n,e)},At.prototype.deactivateChildRoutes=function(e,t,n){var r=this,i=et(t);e.children.forEach(function(e){var t=e.value.outlet;r.deactivateRoutes(e,i[t],n),delete i[t]}),_e(i,function(e,t){r.deactivateRouteAndItsChildren(e,n)})},At.prototype.deactivateRoutes=function(e,t,n){var r=e.value,i=t?t.value:null;if(r===i)if(r.component){var o=n.getContext(r.outlet);o&&this.deactivateChildRoutes(e,t,o.children)}else this.deactivateChildRoutes(e,t,n);else i&&this.deactivateRouteAndItsChildren(t,n)},At.prototype.deactivateRouteAndItsChildren=function(e,t){this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,t):this.deactivateRouteAndOutlet(e,t)},At.prototype.detachAndStoreRouteSubtree=function(e,t){var n=t.getContext(e.value.outlet);if(n&&n.outlet){var r=n.outlet.detach(),i=n.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:r,route:e,contexts:i})}},At.prototype.deactivateRouteAndOutlet=function(e,t){var n=this,r=t.getContext(e.value.outlet);if(r){var i=et(e),o=e.value.component?r.children:t;_e(i,function(e,t){return n.deactivateRouteAndItsChildren(e,o)}),r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated())}},At.prototype.activateChildRoutes=function(e,t,n){var r=this,i=et(t);e.children.forEach(function(e){r.activateRoutes(e,i[e.value.outlet],n),r.forwardEvent(new $(e.value.snapshot))}),e.children.length&&this.forwardEvent(new K(e.value.snapshot))},At.prototype.activateRoutes=function(e,t,n){var r=e.value,i=t?t.value:null;if(mt(r),r===i)if(r.component){var o=n.getOrCreateContext(r.outlet);this.activateChildRoutes(e,t,o.children)}else this.activateChildRoutes(e,t,n);else if(r.component)if(o=n.getOrCreateContext(r.outlet),this.routeReuseStrategy.shouldAttach(r.snapshot)){var a=this.routeReuseStrategy.retrieve(r.snapshot);this.routeReuseStrategy.store(r.snapshot,null),o.children.onOutletReAttached(a.contexts),o.attachRef=a.componentRef,o.route=a.route.value,o.outlet&&o.outlet.attach(a.componentRef,a.route.value),Mt(a.route)}else{var s=function(e){for(var t=e.parent;t;t=t.parent){var n=t.routeConfig;if(n&&n._loadedConfig)return n._loadedConfig;if(n&&n.component)return null}return null}(r.snapshot),l=s?s.module.componentFactoryResolver:null;o.attachRef=null,o.route=r,o.resolver=l,o.outlet&&o.outlet.activateWith(r,l),this.activateChildRoutes(e,null,o.children)}else this.activateChildRoutes(e,null,n)},At);function At(e,t,n,r){this.routeReuseStrategy=e,this.futureState=t,this.currState=n,this.forwardEvent=r}function Mt(e){mt(e.value),e.children.forEach(Mt)}function Rt(e){return\"function\"==typeof e}function Nt(e){return e instanceof Ce}var jt=function(e){this.segmentGroup=e||null},Ft=function(e){this.urlTree=e};function Lt(t){return new d.Observable(function(e){return e.error(new jt(t))})}function Vt(t){return new d.Observable(function(e){return e.error(new Ft(t))})}function Bt(t){return new d.Observable(function(e){return e.error(new Error(\"Only absolute redirects can have named outlets. redirectTo: '\"+t+\"'\"))})}var Ut=(zt.prototype.apply=function(){var t=this;return this.expandSegmentGroup(this.ngModule,this.config,this.urlTree.root,ie).pipe(f.map(function(e){return t.createUrlTree(e,t.urlTree.queryParams,t.urlTree.fragment)})).pipe(f.catchError(function(e){if(e instanceof Ft)return t.allowRedirects=!1,t.match(e.urlTree);if(e instanceof jt)throw t.noMatchError(e);throw e}))},zt.prototype.match=function(t){var n=this;return this.expandSegmentGroup(this.ngModule,this.config,t.root,ie).pipe(f.map(function(e){return n.createUrlTree(e,t.queryParams,t.fragment)})).pipe(f.catchError(function(e){if(e instanceof jt)throw n.noMatchError(e);throw e}))},zt.prototype.noMatchError=function(e){return new Error(\"Cannot match any routes. URL Segment: '\"+e.segmentGroup+\"'\")},zt.prototype.createUrlTree=function(e,t,n){var r,i=0<e.segments.length?new Ee([],((r={})[ie]=e,r)):e;return new Ce(i,t,n)},zt.prototype.expandSegmentGroup=function(e,t,n,r){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(e,t,n).pipe(f.map(function(e){return new Ee([],e)})):this.expandSegment(e,n,t,n.segments,r,!0)},zt.prototype.expandChildren=function(n,r,e){var i=this;return function(e,r){if(0===Object.keys(e).length)return d.of({});var i=[],o=[],a={};return _e(e,function(e,t){var n=r(t,e).pipe(f.map(function(e){return a[t]=e}));t===ie?i.push(n):o.push(n)}),d.of.apply(null,i.concat(o)).pipe(f.concatAll(),f.last(),f.map(function(){return a}))}(e.children,function(e,t){return i.expandSegmentGroup(n,r,t,e)})},zt.prototype.expandSegment=function(t,n,r,i,o,a){var s=this;return d.of.apply(void 0,l(r)).pipe(f.map(function(e){return s.expandSegmentAgainstRoute(t,n,r,e,i,o,a).pipe(f.catchError(function(e){if(e instanceof jt)return d.of(null);throw e}))}),f.concatAll(),f.first(function(e){return!!e}),f.catchError(function(e,t){if(e instanceof d.EmptyError||\"EmptyError\"===e.name){if(s.noLeftoversInUrl(n,i,o))return d.of(new Ee([],{}));throw new jt(n)}throw e}))},zt.prototype.noLeftoversInUrl=function(e,t,n){return 0===t.length&&!e.children[n]},zt.prototype.expandSegmentAgainstRoute=function(e,t,n,r,i,o,a){return Gt(r)!==o?Lt(t):void 0===r.redirectTo?this.matchSegmentAgainstRoute(e,t,r,i):a&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(e,t,n,r,i,o):Lt(t)},zt.prototype.expandSegmentAgainstRouteUsingRedirect=function(e,t,n,r,i,o){return\"**\"===r.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(e,n,r,o):this.expandRegularSegmentAgainstRouteUsingRedirect(e,t,n,r,i,o)},zt.prototype.expandWildCardWithParamsAgainstRouteUsingRedirect=function(n,r,e,i){var o=this,t=this.applyRedirectCommands([],e.redirectTo,{});return e.redirectTo.startsWith(\"/\")?Vt(t):this.lineralizeSegments(e,t).pipe(f.mergeMap(function(e){var t=new Ee(e,{});return o.expandSegment(n,t,r,e,i,!1)}))},zt.prototype.expandRegularSegmentAgainstRouteUsingRedirect=function(t,n,r,e,i,o){var a=this,s=qt(n,e,i),l=s.matched,u=s.consumedSegments,c=s.lastChild,p=s.positionalParamSegments;if(!l)return Lt(n);var d=this.applyRedirectCommands(u,e.redirectTo,p);return e.redirectTo.startsWith(\"/\")?Vt(d):this.lineralizeSegments(e,d).pipe(f.mergeMap(function(e){return a.expandSegment(t,n,r,e.concat(i.slice(c)),o,!1)}))},zt.prototype.matchSegmentAgainstRoute=function(e,a,t,n){var s=this;if(\"**\"===t.path)return t.loadChildren?this.configLoader.load(e.injector,t).pipe(f.map(function(e){return t._loadedConfig=e,new Ee(n,{})})):d.of(new Ee(n,{}));var r=qt(a,t,n),i=r.matched,l=r.consumedSegments,o=r.lastChild;if(!i)return Lt(a);var u=n.slice(o);return this.getChildConfig(e,t,n).pipe(f.mergeMap(function(e){var t=e.module,n=e.routes,r=function(e,t,n,r){return 0<n.length&&function(t,n,e){return e.some(function(e){return Wt(t,n,e)&&Gt(e)!==ie})}(e,n,r)?{segmentGroup:Ht(new Ee(t,function(e,t){var n,r,i={};i[ie]=t;try{for(var o=v(e),a=o.next();!a.done;a=o.next()){var s=a.value;\"\"===s.path&&Gt(s)!==ie&&(i[Gt(s)]=new Ee([],{}))}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i}(r,new Ee(n,e.children)))),slicedSegments:[]}:0===n.length&&function(t,n,e){return e.some(function(e){return Wt(t,n,e)})}(e,n,r)?{segmentGroup:Ht(new Ee(e.segments,function(e,t,n,r){var i,o,a={};try{for(var s=v(n),l=s.next();!l.done;l=s.next()){var u=l.value;Wt(e,t,u)&&!r[Gt(u)]&&(a[Gt(u)]=new Ee([],{}))}}catch(e){i={error:e}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return m(m({},r),a)}(e,n,r,e.children))),slicedSegments:n}:{segmentGroup:e,slicedSegments:n}}(a,l,u,n),i=r.segmentGroup,o=r.slicedSegments;return 0===o.length&&i.hasChildren()?s.expandChildren(t,n,i).pipe(f.map(function(e){return new Ee(l,e)})):0===n.length&&0===o.length?d.of(new Ee(l,{})):s.expandSegment(t,i,n,o,ie,!0).pipe(f.map(function(e){return new Ee(l.concat(e.segments),e.children)}))}))},zt.prototype.getChildConfig=function(t,n,e){var r=this;return n.children?d.of(new pe(n.children,t)):n.loadChildren?void 0!==n._loadedConfig?d.of(n._loadedConfig):function(r,i,o){var e=i.canLoad;return e&&0!==e.length?d.from(e).pipe(f.map(function(e){var t,n=r.get(e);if(function(e){return e&&Rt(e.canLoad)}(n))t=n.canLoad(i,o);else{if(!Rt(n))throw new Error(\"Invalid CanLoad guard\");t=n(i,o)}return be(t)})).pipe(f.concatAll(),f.every(function(e){return!0===e})):d.of(!0)}(t.injector,n,e).pipe(f.mergeMap(function(e){return e?r.configLoader.load(t.injector,n).pipe(f.map(function(e){return n._loadedConfig=e})):function(t){return new d.Observable(function(e){return e.error(ue(\"Cannot load children because the guard of the route \\\"path: '\"+t.path+\"'\\\" returned false\"))})}(n)})):d.of(new pe([],t))},zt.prototype.lineralizeSegments=function(e,t){for(var n=[],r=t.root;;){if(n=n.concat(r.segments),0===r.numberOfChildren)return d.of(n);if(1<r.numberOfChildren||!r.children[ie])return Bt(e.redirectTo);r=r.children[ie]}},zt.prototype.applyRedirectCommands=function(e,t,n){return this.applyRedirectCreatreUrlTree(t,this.urlSerializer.parse(t),e,n)},zt.prototype.applyRedirectCreatreUrlTree=function(e,t,n,r){var i=this.createSegmentGroup(e,t.root,n,r);return new Ce(i,this.createQueryParams(t.queryParams,this.urlTree.queryParams),t.fragment)},zt.prototype.createQueryParams=function(e,r){var i={};return _e(e,function(e,t){if(\"string\"==typeof e&&e.startsWith(\":\")){var n=e.substring(1);i[t]=r[n]}else i[t]=e}),i},zt.prototype.createSegmentGroup=function(n,e,r,i){var o=this,t=this.createSegments(n,e.segments,r,i),a={};return _e(e.children,function(e,t){a[t]=o.createSegmentGroup(n,e,r,i)}),new Ee(t,a)},zt.prototype.createSegments=function(t,e,n,r){var i=this;return e.map(function(e){return e.path.startsWith(\":\")?i.findPosParam(t,e,r):i.findOrReturn(e,n)})},zt.prototype.findPosParam=function(e,t,n){var r=n[t.path.substring(1)];if(!r)throw new Error(\"Cannot redirect to '\"+e+\"'. Cannot find '\"+t.path+\"'.\");return r},zt.prototype.findOrReturn=function(e,t){var n,r,i=0;try{for(var o=v(t),a=o.next();!a.done;a=o.next()){var s=a.value;if(s.path===e.path)return t.splice(i),s;i++}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return e},zt);function zt(e,t,n,r,i){this.configLoader=t,this.urlSerializer=n,this.urlTree=r,this.config=i,this.allowRedirects=!0,this.ngModule=e.get(p.NgModuleRef)}function qt(e,t,n){if(\"\"===t.path)return\"full\"===t.pathMatch&&(e.hasChildren()||0<n.length)?{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}:{matched:!0,consumedSegments:[],lastChild:0,positionalParamSegments:{}};var r=(t.matcher||ce)(n,e,t);return r?{matched:!0,consumedSegments:r.consumed,lastChild:r.consumed.length,positionalParamSegments:r.posParams}:{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}}function Ht(e){if(1===e.numberOfChildren&&e.children[ie]){var t=e.children[ie];return new Ee(e.segments.concat(t.segments),t.children)}return e}function Wt(e,t,n){return(!(e.hasChildren()||0<t.length)||\"full\"!==n.pathMatch)&&(\"\"===n.path&&void 0!==n.redirectTo)}function Gt(e){return e.outlet||ie}function Yt(n,r,i,o){return function(e){return e.pipe(f.switchMap(function(t){return function(e,t,n,r,i){return new Ut(e,t,n,r,i).apply()}(n,r,i,t.extractedUrl,o).pipe(f.map(function(e){return m(m({},t),{urlAfterRedirects:e})}))}))}}var Kt=function(e){this.path=e,this.route=this.path[this.path.length-1]},Zt=function(e,t){this.component=e,this.route=t};function Qt(e,t,n){var r=function(e){if(!e)return null;for(var t=e.parent;t;t=t.parent){var n=t.routeConfig;if(n&&n._loadedConfig)return n._loadedConfig}return null}(t);return(r?r.module.injector:n).get(e)}function Xt(e,t,n,r,i){void 0===i&&(i={canDeactivateChecks:[],canActivateChecks:[]});var o=et(t);return e.children.forEach(function(e){!function(e,t,n,r,i){void 0===i&&(i={canDeactivateChecks:[],canActivateChecks:[]});var o=e.value,a=t?t.value:null,s=n?n.getContext(e.value.outlet):null;if(a&&o.routeConfig===a.routeConfig){var l=function(e,t,n){if(\"function\"==typeof n)return n(e,t);switch(n){case\"pathParamsChange\":return!Te(e.url,t.url);case\"pathParamsOrQueryParamsChange\":return!Te(e.url,t.url)||!ve(e.queryParams,t.queryParams);case\"always\":return!0;case\"paramsOrQueryParamsChange\":return!vt(e,t)||!ve(e.queryParams,t.queryParams);case\"paramsChange\":default:return!vt(e,t)}}(a,o,o.routeConfig.runGuardsAndResolvers);if(l?i.canActivateChecks.push(new Kt(r)):(o.data=a.data,o._resolvedData=a._resolvedData),o.component?Xt(e,t,s?s.children:null,r,i):Xt(e,t,n,r,i),l){var u=s&&s.outlet&&s.outlet.component||null;i.canDeactivateChecks.push(new Zt(u,a))}}else a&&$t(t,s,i),i.canActivateChecks.push(new Kt(r)),o.component?Xt(e,null,s?s.children:null,r,i):Xt(e,null,n,r,i)}(e,o[e.value.outlet],n,r.concat([e.value]),i),delete o[e.value.outlet]}),_e(o,function(e,t){return $t(e,n.getContext(t),i)}),i}function $t(e,n,r){var t=et(e),i=e.value;_e(t,function(e,t){i.component?$t(e,n?n.children.getContext(t):null,r):$t(e,n,r)}),i.component&&n&&n.outlet&&n.outlet.isActivated?r.canDeactivateChecks.push(new Zt(n.outlet.component,i)):r.canDeactivateChecks.push(new Zt(null,i))}var Jt=Symbol(\"INITIAL_VALUE\");function en(){return f.switchMap(function(e){return d.combineLatest.apply(void 0,l(e.map(function(e){return e.pipe(f.take(1),f.startWith(Jt))}))).pipe(f.scan(function(e,r){var i=!1;return r.reduce(function(e,t,n){if(e!==Jt)return e;if(t===Jt&&(i=!0),!i){if(!1===t)return t;if(n===r.length-1||Nt(t))return t}return e},e)},Jt),f.filter(function(e){return e!==Jt}),f.map(function(e){return Nt(e)?e:!0===e}),f.take(1))})}function tn(a,s){return function(e){return e.pipe(f.mergeMap(function(t){var n=t.targetSnapshot,e=t.currentSnapshot,r=t.guards,i=r.canActivateChecks,o=r.canDeactivateChecks;return 0===o.length&&0===i.length?d.of(m(m({},t),{guardsResult:!0})):function(e,t,n,r){return d.from(e).pipe(f.mergeMap(function(e){return function(r,i,o,a,s){var e=i&&i.routeConfig?i.routeConfig.canDeactivate:null;if(!e||0===e.length)return d.of(!0);var t=e.map(function(e){var t,n=Qt(e,i,s);if(function(e){return e&&Rt(e.canDeactivate)}(n))t=be(n.canDeactivate(r,i,o,a));else{if(!Rt(n))throw new Error(\"Invalid CanDeactivate guard\");t=be(n(r,i,o,a))}return t.pipe(f.first())});return d.of(t).pipe(en())}(e.component,e.route,n,t,r)}),f.first(function(e){return!0!==e},!0))}(o,n,e,a).pipe(f.mergeMap(function(e){return e&&function(e){return\"boolean\"==typeof e}(e)?function(t,e,n,r){return d.from(e).pipe(f.concatMap(function(e){return d.from([function(e,t){null!==e&&t&&t(new G(e));return d.of(!0)}(e.route.parent,r),function(e,t){null!==e&&t&&t(new Q(e));return d.of(!0)}(e.route,r),function(i,e,o){var a=e[e.length-1],t=e.slice(0,e.length-1).reverse().map(function(e){return function(e){var t=e.routeConfig?e.routeConfig.canActivateChild:null;return t&&0!==t.length?{node:e,guards:t}:null}(e)}).filter(function(e){return null!==e}).map(function(r){return d.defer(function(){var e=r.guards.map(function(e){var t,n=Qt(e,r.node,o);if(function(e){return e&&Rt(e.canActivateChild)}(n))t=be(n.canActivateChild(a,i));else{if(!Rt(n))throw new Error(\"Invalid CanActivateChild guard\");t=be(n(a,i))}return t.pipe(f.first())});return d.of(e).pipe(en())})});return d.of(t).pipe(en())}(t,e.path,n),function(r,i,o){var e=i.routeConfig?i.routeConfig.canActivate:null;if(!e||0===e.length)return d.of(!0);var t=e.map(function(n){return d.defer(function(){var e,t=Qt(n,i,o);if(function(e){return e&&Rt(e.canActivate)}(t))e=be(t.canActivate(i,r));else{if(!Rt(t))throw new Error(\"Invalid CanActivate guard\");e=be(t(i,r))}return e.pipe(f.first())})});return d.of(t).pipe(en())}(t,e.route,n)]).pipe(f.concatAll(),f.first(function(e){return!0!==e},!0))}),f.first(function(e){return!0!==e},!0))}(n,i,a,s):d.of(e)}),f.map(function(e){return m(m({},t),{guardsResult:e})}))}))}}var nn=function(){};var rn=(on.prototype.recognize=function(){try{var e=ln(this.urlTree.root,[],[],this.config,this.relativeLinkResolution).segmentGroup,t=this.processSegmentGroup(this.config,e,ie),n=new lt([],Object.freeze({}),Object.freeze(m({},this.urlTree.queryParams)),this.urlTree.fragment,{},ie,this.rootComponentType,null,this.urlTree.root,-1,{}),r=new $e(n,t),i=new pt(this.url,r);return this.inheritParamsAndData(i._root),d.of(i)}catch(t){return new d.Observable(function(e){return e.error(t)})}},on.prototype.inheritParamsAndData=function(e){var t=this,n=e.value,r=st(n,this.paramsInheritanceStrategy);n.params=Object.freeze(r.params),n.data=Object.freeze(r.data),e.children.forEach(function(e){return t.inheritParamsAndData(e)})},on.prototype.processSegmentGroup=function(e,t,n){return 0===t.segments.length&&t.hasChildren()?this.processChildren(e,t):this.processSegment(e,t,t.segments,n)},on.prototype.processChildren=function(n,e){var r=this,t=Ie(e,function(e,t){return r.processSegmentGroup(n,e,t)});return function(e){var i={};e.forEach(function(e){var t=i[e.value.outlet];if(t){var n=t.url.map(function(e){return e.toString()}).join(\"/\"),r=e.value.url.map(function(e){return e.toString()}).join(\"/\");throw new Error(\"Two segments cannot have the same outlet name: '\"+n+\"' and '\"+r+\"'.\")}i[e.value.outlet]=e.value})}(t),function(e){e.sort(function(e,t){return e.value.outlet===ie?-1:t.value.outlet===ie?1:e.value.outlet.localeCompare(t.value.outlet)})}(t),t},on.prototype.processSegment=function(e,t,n,r){var i,o;try{for(var a=v(e),s=a.next();!s.done;s=a.next()){var l=s.value;try{return this.processSegmentAgainstRoute(l,t,n,r)}catch(e){if(!(e instanceof nn))throw e}}}catch(e){i={error:e}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}if(this.noLeftoversInUrl(t,n,r))return[];throw new nn},on.prototype.noLeftoversInUrl=function(e,t,n){return 0===t.length&&!e.children[n]},on.prototype.processSegmentAgainstRoute=function(e,t,n,r){if(e.redirectTo)throw new nn;if((e.outlet||ie)!==r)throw new nn;var i,o=[],a=[];if(\"**\"===e.path){var s=0<n.length?ge(n).parameters:{};i=new lt(n,s,Object.freeze(m({},this.urlTree.queryParams)),this.urlTree.fragment,pn(e),r,e.component,e,an(t),sn(t)+n.length,dn(e))}else{var l=function(e,t,n){if(\"\"===t.path){if(\"full\"===t.pathMatch&&(e.hasChildren()||0<n.length))throw new nn;return{consumedSegments:[],lastChild:0,parameters:{}}}var r=(t.matcher||ce)(n,e,t);if(!r)throw new nn;var i={};_e(r.posParams,function(e,t){i[t]=e.path});var o=0<r.consumed.length?m(m({},i),r.consumed[r.consumed.length-1].parameters):i;return{consumedSegments:r.consumed,lastChild:r.consumed.length,parameters:o}}(t,e,n);o=l.consumedSegments,a=n.slice(l.lastChild),i=new lt(o,l.parameters,Object.freeze(m({},this.urlTree.queryParams)),this.urlTree.fragment,pn(e),r,e.component,e,an(t),sn(t)+o.length,dn(e))}var u=function(e){return e.children?e.children:e.loadChildren?e._loadedConfig.routes:[]}(e),c=ln(t,o,a,u,this.relativeLinkResolution),p=c.segmentGroup,d=c.slicedSegments;if(0===d.length&&p.hasChildren()){var h=this.processChildren(u,p);return[new $e(i,h)]}if(0===u.length&&0===d.length)return[new $e(i,[])];var f=this.processSegment(u,p,d,ie);return[new $e(i,f)]},on);function on(e,t,n,r,i,o){this.rootComponentType=e,this.config=t,this.urlTree=n,this.url=r,this.paramsInheritanceStrategy=i,this.relativeLinkResolution=o}function an(e){for(var t=e;t._sourceSegment;)t=t._sourceSegment;return t}function sn(e){for(var t=e,n=t._segmentIndexShift?t._segmentIndexShift:0;t._sourceSegment;)n+=(t=t._sourceSegment)._segmentIndexShift?t._segmentIndexShift:0;return n-1}function ln(e,t,n,r,i){if(0<n.length&&function(t,n,e){return e.some(function(e){return un(t,n,e)&&cn(e)!==ie})}(e,n,r)){var o=new Ee(t,function(e,t,n,r){var i,o,a={};(a[ie]=r)._sourceSegment=e,r._segmentIndexShift=t.length;try{for(var s=v(n),l=s.next();!l.done;l=s.next()){var u=l.value;if(\"\"===u.path&&cn(u)!==ie){var c=new Ee([],{});c._sourceSegment=e,c._segmentIndexShift=t.length,a[cn(u)]=c}}}catch(e){i={error:e}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return a}(e,t,r,new Ee(n,e.children)));return o._sourceSegment=e,o._segmentIndexShift=t.length,{segmentGroup:o,slicedSegments:[]}}if(0===n.length&&function(t,n,e){return e.some(function(e){return un(t,n,e)})}(e,n,r)){var a=new Ee(e.segments,function(e,t,n,r,i,o){var a,s,l={};try{for(var u=v(r),c=u.next();!c.done;c=u.next()){var p=c.value;if(un(e,n,p)&&!i[cn(p)]){var d=new Ee([],{});d._sourceSegment=e,d._segmentIndexShift=\"legacy\"===o?e.segments.length:t.length,l[cn(p)]=d}}}catch(e){a={error:e}}finally{try{c&&!c.done&&(s=u.return)&&s.call(u)}finally{if(a)throw a.error}}return m(m({},i),l)}(e,t,n,r,e.children,i));return a._sourceSegment=e,a._segmentIndexShift=t.length,{segmentGroup:a,slicedSegments:n}}var s=new Ee(e.segments,e.children);return s._sourceSegment=e,s._segmentIndexShift=t.length,{segmentGroup:s,slicedSegments:n}}function un(e,t,n){return(!(e.hasChildren()||0<t.length)||\"full\"!==n.pathMatch)&&(\"\"===n.path&&void 0===n.redirectTo)}function cn(e){return e.outlet||ie}function pn(e){return e.data||{}}function dn(e){return e.resolve||{}}function hn(n,r,i,o,a){return function(e){return e.pipe(f.mergeMap(function(t){return function(e,t,n,r,i,o){return void 0===i&&(i=\"emptyOnly\"),void 0===o&&(o=\"legacy\"),new rn(e,t,n,r,i,o).recognize()}(n,r,t.urlAfterRedirects,i(t.urlAfterRedirects),o,a).pipe(f.map(function(e){return m(m({},t),{targetSnapshot:e})}))}))}}function fn(r,i){return function(e){return e.pipe(f.mergeMap(function(t){var n=t.targetSnapshot,e=t.guards.canActivateChecks;return e.length?d.from(e).pipe(f.concatMap(function(e){return function(t,e,n,r){return function(e,n,r,i){var t=Object.keys(e);if(0===t.length)return d.of({});if(1===t.length){var o=t[0];return mn(e[o],n,r,i).pipe(f.map(function(e){var t;return(t={})[o]=e,t}))}var a={};return d.from(t).pipe(f.mergeMap(function(t){return mn(e[t],n,r,i).pipe(f.map(function(e){return a[t]=e}))})).pipe(f.last(),f.map(function(){return a}))}(t._resolve,t,e,r).pipe(f.map(function(e){return t._resolvedData=e,t.data=m(m({},t.data),st(t,n).resolve),null}))}(e.route,n,r,i)}),f.reduce(function(e,t){return e}),f.map(function(e){return t})):d.of(t)}))}}function mn(e,t,n,r){var i=Qt(e,t,r);return i.resolve?be(i.resolve(t,n)):be(i(t,n))}function vn(n){return function(e){return e.pipe(f.switchMap(function(e){var t=n(e);return t?d.from(t).pipe(f.map(function(){return e})):d.from([e])}))}}function yn(){}var gn=(_n.prototype.shouldDetach=function(e){return!1},_n.prototype.store=function(e,t){},_n.prototype.shouldAttach=function(e){return!1},_n.prototype.retrieve=function(e){return null},_n.prototype.shouldReuseRoute=function(e,t){return e.routeConfig===t.routeConfig},_n);function _n(){}var bn=new p.InjectionToken(\"ROUTES\"),wn=(xn.prototype.load=function(n,r){var i=this;return this.onLoadStartListener&&this.onLoadStartListener(r),this.loadModuleFactory(r.loadChildren).pipe(f.map(function(e){i.onLoadEndListener&&i.onLoadEndListener(r);var t=e.create(n);return new pe(ye(t.injector.get(bn)).map(me),t)}))},xn.prototype.loadModuleFactory=function(e){var t=this;return\"string\"==typeof e?d.from(this.loader.load(e)):be(e()).pipe(f.mergeMap(function(e){return e instanceof p.NgModuleFactory?d.of(e):d.from(t.compiler.compileModuleAsync(e))}))},xn);function xn(e,t,n,r){this.loader=e,this.compiler=t,this.onLoadStartListener=n,this.onLoadEndListener=r}function Cn(){}var Sn=(En.prototype.shouldProcessUrl=function(e){return!0},En.prototype.extract=function(e){return e},En.prototype.merge=function(e,t){return e},En);function En(){}function On(e){throw e}function kn(e,t,n){return t.parse(\"/\")}function Dn(e,t){return d.of(null)}var Tn=(In.prototype.setupNavigations=function(e){var u=this,c=this.events;return e.pipe(f.filter(function(e){return 0!==e.id}),f.map(function(e){return m(m({},e),{extractedUrl:u.urlHandlingStrategy.extract(e.rawUrl)})}),f.switchMap(function(i){var t=!1,o=!1;return d.of(i).pipe(f.tap(function(e){u.currentNavigation={id:e.id,initialUrl:e.currentRawUrl,extractedUrl:e.extractedUrl,trigger:e.source,extras:e.extras,previousNavigation:u.lastSuccessfulNavigation?m(m({},u.lastSuccessfulNavigation),{previousNavigation:null}):null}}),f.switchMap(function(e){var t=!u.navigated||e.extractedUrl.toString()!==u.browserUrlTree.toString();if((\"reload\"===u.onSameUrlNavigation||t)&&u.urlHandlingStrategy.shouldProcessUrl(e.rawUrl))return d.of(e).pipe(f.switchMap(function(e){var t=u.transitions.getValue();return c.next(new y(e.id,u.serializeUrl(e.extractedUrl),e.source,e.restoredState)),t!==u.transitions.getValue()?d.EMPTY:[e]}),f.switchMap(function(e){return Promise.resolve(e)}),Yt(u.ngModule.injector,u.configLoader,u.urlSerializer,u.config),f.tap(function(e){u.currentNavigation=m(m({},u.currentNavigation),{finalUrl:e.urlAfterRedirects})}),hn(u.rootComponentType,u.config,function(e){return u.serializeUrl(e)},u.paramsInheritanceStrategy,u.relativeLinkResolution),f.tap(function(e){\"eager\"===u.urlUpdateStrategy&&(e.extras.skipLocationChange||u.setBrowserUrl(e.urlAfterRedirects,!!e.extras.replaceUrl,e.id,e.extras.state),u.browserUrlTree=e.urlAfterRedirects)}),f.tap(function(e){var t=new D(e.id,u.serializeUrl(e.extractedUrl),u.serializeUrl(e.urlAfterRedirects),e.targetSnapshot);c.next(t)}));if(t&&u.rawUrlTree&&u.urlHandlingStrategy.shouldProcessUrl(u.rawUrlTree)){var n=e.id,r=e.extractedUrl,i=e.source,o=e.restoredState,a=e.extras,s=new y(n,u.serializeUrl(r),i,o);c.next(s);var l=it(r,u.rootComponentType).snapshot;return d.of(m(m({},e),{targetSnapshot:l,urlAfterRedirects:r,extras:m(m({},a),{skipLocationChange:!1,replaceUrl:!1})}))}return u.rawUrlTree=e.rawUrl,u.browserUrlTree=e.urlAfterRedirects,e.resolve(null),d.EMPTY}),vn(function(e){var t=e.targetSnapshot,n=e.id,r=e.extractedUrl,i=e.rawUrl,o=e.extras,a=o.skipLocationChange,s=o.replaceUrl;return u.hooks.beforePreactivation(t,{navigationId:n,appliedUrlTree:r,rawUrlTree:i,skipLocationChange:!!a,replaceUrl:!!s})}),f.tap(function(e){var t=new P(e.id,u.serializeUrl(e.extractedUrl),u.serializeUrl(e.urlAfterRedirects),e.targetSnapshot);u.triggerEvent(t)}),f.map(function(e){return m(m({},e),{guards:function(e,t,n){var r=e._root;return Xt(r,t?t._root:null,n,[r.value])}(e.targetSnapshot,e.currentSnapshot,u.rootContexts)})}),tn(u.ngModule.injector,function(e){return u.triggerEvent(e)}),f.tap(function(e){if(Nt(e.guardsResult)){var t=ue('Redirecting to \"'+u.serializeUrl(e.guardsResult)+'\"');throw t.url=e.guardsResult,t}}),f.tap(function(e){var t=new R(e.id,u.serializeUrl(e.extractedUrl),u.serializeUrl(e.urlAfterRedirects),e.targetSnapshot,!!e.guardsResult);u.triggerEvent(t)}),f.filter(function(e){if(e.guardsResult)return!0;u.resetUrlToCurrentUrlTree();var t=new x(e.id,u.serializeUrl(e.extractedUrl),\"\");return c.next(t),e.resolve(!1),!1}),vn(function(e){if(e.guards.canActivateChecks.length)return d.of(e).pipe(f.tap(function(e){var t=new F(e.id,u.serializeUrl(e.extractedUrl),u.serializeUrl(e.urlAfterRedirects),e.targetSnapshot);u.triggerEvent(t)}),fn(u.paramsInheritanceStrategy,u.ngModule.injector),f.tap(function(e){var t=new B(e.id,u.serializeUrl(e.extractedUrl),u.serializeUrl(e.urlAfterRedirects),e.targetSnapshot);u.triggerEvent(t)}))}),vn(function(e){var t=e.targetSnapshot,n=e.id,r=e.extractedUrl,i=e.rawUrl,o=e.extras,a=o.skipLocationChange,s=o.replaceUrl;return u.hooks.afterPreactivation(t,{navigationId:n,appliedUrlTree:r,rawUrlTree:i,skipLocationChange:!!a,replaceUrl:!!s})}),f.map(function(e){var t=function(e,t,n){var r=yt(e,t._root,n?n._root:void 0);return new nt(r,t)}(u.routeReuseStrategy,e.targetSnapshot,e.currentRouterState);return m(m({},e),{targetRouterState:t})}),f.tap(function(e){u.currentUrlTree=e.urlAfterRedirects,u.rawUrlTree=u.urlHandlingStrategy.merge(u.currentUrlTree,e.rawUrl),u.routerState=e.targetRouterState,\"deferred\"===u.urlUpdateStrategy&&(e.extras.skipLocationChange||u.setBrowserUrl(u.rawUrlTree,!!e.extras.replaceUrl,e.id,e.extras.state),u.browserUrlTree=e.urlAfterRedirects)}),function(t,n,r){return f.map(function(e){return new Pt(n,e.targetRouterState,e.currentRouterState,r).activate(t),e})}(u.rootContexts,u.routeReuseStrategy,function(e){return u.triggerEvent(e)}),f.tap({next:function(){t=!0},complete:function(){t=!0}}),f.finalize(function(){if(!t&&!o){u.resetUrlToCurrentUrlTree();var e=new x(i.id,u.serializeUrl(i.extractedUrl),\"Navigation ID \"+i.id+\" is not equal to the current navigation id \"+u.navigationId);c.next(e),i.resolve(!1)}u.currentNavigation=null}),f.catchError(function(n){if(o=!0,function(e){return e&&e[le]}(n)){var e=Nt(n.url);e||(u.navigated=!0,u.resetStateAndUrl(i.currentRouterState,i.currentUrlTree,i.rawUrl));var t=new x(i.id,u.serializeUrl(i.extractedUrl),n.message);c.next(t),e?setTimeout(function(){var e=u.urlHandlingStrategy.merge(n.url,u.rawUrlTree),t={skipLocationChange:i.extras.skipLocationChange,replaceUrl:\"eager\"===u.urlUpdateStrategy};return u.scheduleNavigation(e,\"imperative\",null,t,{resolve:i.resolve,reject:i.reject,promise:i.promise})},0):i.resolve(!1)}else{u.resetStateAndUrl(i.currentRouterState,i.currentUrlTree,i.rawUrl);var r=new E(i.id,u.serializeUrl(i.extractedUrl),n);c.next(r);try{i.resolve(u.errorHandler(n))}catch(e){i.reject(e)}}return d.EMPTY}))}))},In.prototype.resetRootComponentType=function(e){this.rootComponentType=e,this.routerState.root.component=this.rootComponentType},In.prototype.getTransition=function(){var e=this.transitions.value;return e.urlAfterRedirects=this.browserUrlTree,e},In.prototype.setTransition=function(e){this.transitions.next(m(m({},this.getTransition()),e))},In.prototype.initialNavigation=function(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})},In.prototype.setUpLocationChangeListener=function(){var i=this;this.locationSubscription||(this.locationSubscription=this.location.subscribe(function(e){var t=i.parseUrl(e.url),n=\"popstate\"===e.type?\"popstate\":\"hashchange\",r=e.state&&e.state.navigationId?e.state:null;setTimeout(function(){i.scheduleNavigation(t,n,r,{replaceUrl:!0})},0)}))},Object.defineProperty(In.prototype,\"url\",{get:function(){return this.serializeUrl(this.currentUrlTree)},enumerable:!0,configurable:!0}),In.prototype.getCurrentNavigation=function(){return this.currentNavigation},In.prototype.triggerEvent=function(e){this.events.next(e)},In.prototype.resetConfig=function(e){de(e),this.config=e.map(me),this.navigated=!1,this.lastSuccessfulId=-1},In.prototype.ngOnDestroy=function(){this.dispose()},In.prototype.dispose=function(){this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=null)},In.prototype.createUrlTree=function(e,t){void 0===t&&(t={});var n=t.relativeTo,r=t.queryParams,i=t.fragment,o=t.preserveQueryParams,a=t.queryParamsHandling,s=t.preserveFragment;p.isDevMode()&&o&&console&&console.warn&&console.warn(\"preserveQueryParams is deprecated, use queryParamsHandling instead.\");var l=n||this.routerState.root,u=s?this.currentUrlTree.fragment:i,c=null;if(a)switch(a){case\"merge\":c=m(m({},this.currentUrlTree.queryParams),r);break;case\"preserve\":c=this.currentUrlTree.queryParams;break;default:c=r||null}else c=o?this.currentUrlTree.queryParams:r||null;return null!==c&&(c=this.removeEmptyProps(c)),gt(l,this.currentUrlTree,e,c,u)},In.prototype.navigateByUrl=function(e,t){void 0===t&&(t={skipLocationChange:!1}),p.isDevMode()&&this.isNgZoneEnabled&&!p.NgZone.isInAngularZone()&&this.console.warn(\"Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?\");var n=Nt(e)?e:this.parseUrl(e),r=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(r,\"imperative\",null,t)},In.prototype.navigate=function(e,t){return void 0===t&&(t={skipLocationChange:!1}),function(e){for(var t=0;t<e.length;t++){var n=e[t];if(null==n)throw new Error(\"The requested path contains \"+n+\" segment at index \"+t)}}(e),this.navigateByUrl(this.createUrlTree(e,t),t)},In.prototype.serializeUrl=function(e){return this.urlSerializer.serialize(e)},In.prototype.parseUrl=function(t){var n;try{n=this.urlSerializer.parse(t)}catch(e){n=this.malformedUriErrorHandler(e,this.urlSerializer,t)}return n},In.prototype.isActive=function(e,t){if(Nt(e))return we(this.currentUrlTree,e,t);var n=this.parseUrl(e);return we(this.currentUrlTree,n,t)},In.prototype.removeEmptyProps=function(r){return Object.keys(r).reduce(function(e,t){var n=r[t];return null!=n&&(e[t]=n),e},{})},In.prototype.processNavigations=function(){var t=this;this.navigations.subscribe(function(e){t.navigated=!0,t.lastSuccessfulId=e.id,t.events.next(new _(e.id,t.serializeUrl(e.extractedUrl),t.serializeUrl(t.currentUrlTree))),t.lastSuccessfulNavigation=t.currentNavigation,t.currentNavigation=null,e.resolve(!0)},function(e){t.console.warn(\"Unhandled Navigation Error: \")})},In.prototype.scheduleNavigation=function(e,t,n,r,i){var o,a,s,l=this.getTransition();if(l&&\"imperative\"!==t&&\"imperative\"===l.source&&l.rawUrl.toString()===e.toString())return Promise.resolve(!0);if(l&&\"hashchange\"==t&&\"popstate\"===l.source&&l.rawUrl.toString()===e.toString())return Promise.resolve(!0);if(l&&\"popstate\"==t&&\"hashchange\"===l.source&&l.rawUrl.toString()===e.toString())return Promise.resolve(!0);s=i?(o=i.resolve,a=i.reject,i.promise):new Promise(function(e,t){o=e,a=t});var u=++this.navigationId;return this.setTransition({id:u,source:t,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:e,extras:r,resolve:o,reject:a,promise:s,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),s.catch(function(e){return Promise.reject(e)})},In.prototype.setBrowserUrl=function(e,t,n,r){var i=this.urlSerializer.serialize(e);r=r||{},this.location.isCurrentPathEqualTo(i)||t?this.location.replaceState(i,\"\",m(m({},r),{navigationId:n})):this.location.go(i,\"\",m(m({},r),{navigationId:n}))},In.prototype.resetStateAndUrl=function(e,t,n){this.routerState=e,this.currentUrlTree=t,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n),this.resetUrlToCurrentUrlTree()},In.prototype.resetUrlToCurrentUrlTree=function(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),\"\",{navigationId:this.lastSuccessfulId})},In);function In(e,t,n,r,i,o,a,s){var l=this;this.rootComponentType=e,this.urlSerializer=t,this.rootContexts=n,this.location=r,this.config=s,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.navigationId=0,this.isNgZoneEnabled=!1,this.events=new d.Subject,this.errorHandler=On,this.malformedUriErrorHandler=kn,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:Dn,afterPreactivation:Dn},this.urlHandlingStrategy=new Sn,this.routeReuseStrategy=new gn,this.onSameUrlNavigation=\"ignore\",this.paramsInheritanceStrategy=\"emptyOnly\",this.urlUpdateStrategy=\"deferred\",this.relativeLinkResolution=\"legacy\";this.ngModule=i.get(p.NgModuleRef),this.console=i.get(p.ɵConsole);var u=i.get(p.NgZone);this.isNgZoneEnabled=u instanceof p.NgZone,this.resetConfig(s),this.currentUrlTree=new Ce(new Ee([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.configLoader=new wn(o,a,function(e){return l.triggerEvent(new z(e))},function(e){return l.triggerEvent(new H(e))}),this.routerState=it(this.currentUrlTree,this.rootComponentType),this.transitions=new d.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(!0),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()}var Pn=(Object.defineProperty(An.prototype,\"routerLink\",{set:function(e){this.commands=null!=e?Array.isArray(e)?e:[e]:[]},enumerable:!0,configurable:!0}),Object.defineProperty(An.prototype,\"preserveQueryParams\",{set:function(e){p.isDevMode()&&console&&console.warn&&console.warn(\"preserveQueryParams is deprecated!, use queryParamsHandling instead.\"),this.preserve=e},enumerable:!0,configurable:!0}),An.prototype.onClick=function(){var e={skipLocationChange:Nn(this.skipLocationChange),replaceUrl:Nn(this.replaceUrl)};return this.router.navigateByUrl(this.urlTree,e),!0},Object.defineProperty(An.prototype,\"urlTree\",{get:function(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:Nn(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:Nn(this.preserveFragment)})},enumerable:!0,configurable:!0}),n([p.Input(),o(\"design:type\",Object)],An.prototype,\"queryParams\",void 0),n([p.Input(),o(\"design:type\",String)],An.prototype,\"fragment\",void 0),n([p.Input(),o(\"design:type\",String)],An.prototype,\"queryParamsHandling\",void 0),n([p.Input(),o(\"design:type\",Boolean)],An.prototype,\"preserveFragment\",void 0),n([p.Input(),o(\"design:type\",Boolean)],An.prototype,\"skipLocationChange\",void 0),n([p.Input(),o(\"design:type\",Boolean)],An.prototype,\"replaceUrl\",void 0),n([p.Input(),o(\"design:type\",Object)],An.prototype,\"state\",void 0),n([p.Input(),o(\"design:type\",Object),o(\"design:paramtypes\",[Object])],An.prototype,\"routerLink\",null),n([p.Input(),o(\"design:type\",Boolean),o(\"design:paramtypes\",[Boolean])],An.prototype,\"preserveQueryParams\",null),n([p.HostListener(\"click\"),o(\"design:type\",Function),o(\"design:paramtypes\",[]),o(\"design:returntype\",Boolean)],An.prototype,\"onClick\",null),An=n([p.Directive({selector:\":not(a):not(area)[routerLink]\"}),i(2,p.Attribute(\"tabindex\")),o(\"design:paramtypes\",[Tn,ot,String,p.Renderer2,p.ElementRef])],An));function An(e,t,n,r,i){this.router=e,this.route=t,this.commands=[],null==n&&r.setAttribute(i.nativeElement,\"tabindex\",\"0\")}var Mn=(Object.defineProperty(Rn.prototype,\"routerLink\",{set:function(e){this.commands=null!=e?Array.isArray(e)?e:[e]:[]},enumerable:!0,configurable:!0}),Object.defineProperty(Rn.prototype,\"preserveQueryParams\",{set:function(e){p.isDevMode()&&console&&console.warn&&console.warn(\"preserveQueryParams is deprecated, use queryParamsHandling instead.\"),this.preserve=e},enumerable:!0,configurable:!0}),Rn.prototype.ngOnChanges=function(e){this.updateTargetUrlAndHref()},Rn.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},Rn.prototype.onClick=function(e,t,n,r){if(0!==e||t||n||r)return!0;if(\"string\"==typeof this.target&&\"_self\"!=this.target)return!0;var i={skipLocationChange:Nn(this.skipLocationChange),replaceUrl:Nn(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,i),!1},Rn.prototype.updateTargetUrlAndHref=function(){this.href=this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree))},Object.defineProperty(Rn.prototype,\"urlTree\",{get:function(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:Nn(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:Nn(this.preserveFragment)})},enumerable:!0,configurable:!0}),n([p.HostBinding(\"attr.target\"),p.Input(),o(\"design:type\",String)],Rn.prototype,\"target\",void 0),n([p.Input(),o(\"design:type\",Object)],Rn.prototype,\"queryParams\",void 0),n([p.Input(),o(\"design:type\",String)],Rn.prototype,\"fragment\",void 0),n([p.Input(),o(\"design:type\",String)],Rn.prototype,\"queryParamsHandling\",void 0),n([p.Input(),o(\"design:type\",Boolean)],Rn.prototype,\"preserveFragment\",void 0),n([p.Input(),o(\"design:type\",Boolean)],Rn.prototype,\"skipLocationChange\",void 0),n([p.Input(),o(\"design:type\",Boolean)],Rn.prototype,\"replaceUrl\",void 0),n([p.Input(),o(\"design:type\",Object)],Rn.prototype,\"state\",void 0),n([p.HostBinding(),o(\"design:type\",String)],Rn.prototype,\"href\",void 0),n([p.Input(),o(\"design:type\",Object),o(\"design:paramtypes\",[Object])],Rn.prototype,\"routerLink\",null),n([p.Input(),o(\"design:type\",Boolean),o(\"design:paramtypes\",[Boolean])],Rn.prototype,\"preserveQueryParams\",null),n([p.HostListener(\"click\",[\"$event.button\",\"$event.ctrlKey\",\"$event.metaKey\",\"$event.shiftKey\"]),o(\"design:type\",Function),o(\"design:paramtypes\",[Number,Boolean,Boolean,Boolean]),o(\"design:returntype\",Boolean)],Rn.prototype,\"onClick\",null),Rn=n([p.Directive({selector:\"a[routerLink],area[routerLink]\"}),o(\"design:paramtypes\",[Tn,ot,h.LocationStrategy])],Rn));function Rn(e,t,n){var r=this;this.router=e,this.route=t,this.locationStrategy=n,this.commands=[],this.subscription=e.events.subscribe(function(e){e instanceof _&&r.updateTargetUrlAndHref()})}function Nn(e){return\"\"===e||!!e}var jn=(Fn.prototype.ngAfterContentInit=function(){var t=this;this.links.changes.subscribe(function(e){return t.update()}),this.linksWithHrefs.changes.subscribe(function(e){return t.update()}),this.update()},Object.defineProperty(Fn.prototype,\"routerLinkActive\",{set:function(e){var t=Array.isArray(e)?e:e.split(\" \");this.classes=t.filter(function(e){return!!e})},enumerable:!0,configurable:!0}),Fn.prototype.ngOnChanges=function(e){this.update()},Fn.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},Fn.prototype.update=function(){var n=this;this.links&&this.linksWithHrefs&&this.router.navigated&&Promise.resolve().then(function(){var t=n.hasActiveLinks();n.isActive!==t&&(n.isActive=t,n.classes.forEach(function(e){t?n.renderer.addClass(n.element.nativeElement,e):n.renderer.removeClass(n.element.nativeElement,e)}))})},Fn.prototype.isLinkActive=function(t){var n=this;return function(e){return t.isActive(e.urlTree,n.routerLinkActiveOptions.exact)}},Fn.prototype.hasActiveLinks=function(){var e=this.isLinkActive(this.router);return this.link&&e(this.link)||this.linkWithHref&&e(this.linkWithHref)||this.links.some(e)||this.linksWithHrefs.some(e)},n([p.ContentChildren(Pn,{descendants:!0}),o(\"design:type\",p.QueryList)],Fn.prototype,\"links\",void 0),n([p.ContentChildren(Mn,{descendants:!0}),o(\"design:type\",p.QueryList)],Fn.prototype,\"linksWithHrefs\",void 0),n([p.Input(),o(\"design:type\",Object)],Fn.prototype,\"routerLinkActiveOptions\",void 0),n([p.Input(),o(\"design:type\",Object),o(\"design:paramtypes\",[Object])],Fn.prototype,\"routerLinkActive\",null),Fn=n([p.Directive({selector:\"[routerLinkActive]\",exportAs:\"routerLinkActive\"}),i(3,p.Optional()),i(4,p.Optional()),o(\"design:paramtypes\",[Tn,p.ElementRef,p.Renderer2,Pn,Mn])],Fn));function Fn(e,t,n,r,i){var o=this;this.router=e,this.element=t,this.renderer=n,this.link=r,this.linkWithHref=i,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.subscription=e.events.subscribe(function(e){e instanceof _&&o.update()})}var Ln=function(){this.outlet=null,this.route=null,this.resolver=null,this.children=new Vn,this.attachRef=null},Vn=(Bn.prototype.onChildOutletCreated=function(e,t){var n=this.getOrCreateContext(e);n.outlet=t,this.contexts.set(e,n)},Bn.prototype.onChildOutletDestroyed=function(e){var t=this.getContext(e);t&&(t.outlet=null)},Bn.prototype.onOutletDeactivated=function(){var e=this.contexts;return this.contexts=new Map,e},Bn.prototype.onOutletReAttached=function(e){this.contexts=e},Bn.prototype.getOrCreateContext=function(e){var t=this.getContext(e);return t||(t=new Ln,this.contexts.set(e,t)),t},Bn.prototype.getContext=function(e){return this.contexts.get(e)||null},Bn);function Bn(){this.contexts=new Map}var Un=(zn.prototype.ngOnDestroy=function(){this.parentContexts.onChildOutletDestroyed(this.name)},zn.prototype.ngOnInit=function(){if(!this.activated){var e=this.parentContexts.getContext(this.name);e&&e.route&&(e.attachRef?this.attach(e.attachRef,e.route):this.activateWith(e.route,e.resolver||null))}},Object.defineProperty(zn.prototype,\"isActivated\",{get:function(){return!!this.activated},enumerable:!0,configurable:!0}),Object.defineProperty(zn.prototype,\"component\",{get:function(){if(!this.activated)throw new Error(\"Outlet is not activated\");return this.activated.instance},enumerable:!0,configurable:!0}),Object.defineProperty(zn.prototype,\"activatedRoute\",{get:function(){if(!this.activated)throw new Error(\"Outlet is not activated\");return this._activatedRoute},enumerable:!0,configurable:!0}),Object.defineProperty(zn.prototype,\"activatedRouteData\",{get:function(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}},enumerable:!0,configurable:!0}),zn.prototype.detach=function(){if(!this.activated)throw new Error(\"Outlet is not activated\");this.location.detach();var e=this.activated;return this.activated=null,this._activatedRoute=null,e},zn.prototype.attach=function(e,t){this.activated=e,this._activatedRoute=t,this.location.insert(e.hostView)},zn.prototype.deactivate=function(){if(this.activated){var e=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(e)}},zn.prototype.activateWith=function(e,t){if(this.isActivated)throw new Error(\"Cannot activate an already activated outlet\");var n=(this._activatedRoute=e)._futureSnapshot.routeConfig.component,r=(t=t||this.resolver).resolveComponentFactory(n),i=this.parentContexts.getOrCreateContext(this.name).children,o=new qn(e,i,this.location.injector);this.activated=this.location.createComponent(r,this.location.length,o),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)},n([p.Output(\"activate\"),o(\"design:type\",Object)],zn.prototype,\"activateEvents\",void 0),n([p.Output(\"deactivate\"),o(\"design:type\",Object)],zn.prototype,\"deactivateEvents\",void 0),zn=n([p.Directive({selector:\"router-outlet\",exportAs:\"outlet\"}),i(3,p.Attribute(\"name\")),o(\"design:paramtypes\",[Vn,p.ViewContainerRef,p.ComponentFactoryResolver,String,p.ChangeDetectorRef])],zn));function zn(e,t,n,r,i){this.parentContexts=e,this.location=t,this.resolver=n,this.changeDetector=i,this.activated=null,this._activatedRoute=null,this.activateEvents=new p.EventEmitter,this.deactivateEvents=new p.EventEmitter,this.name=r||ie,e.onChildOutletCreated(this.name,this)}var qn=(Hn.prototype.get=function(e,t){return e===ot?this.route:e===Vn?this.childContexts:this.parent.get(e,t)},Hn);function Hn(e,t,n){this.route=e,this.childContexts=t,this.parent=n}function Wn(){}var Gn=(Yn.prototype.preload=function(e,t){return t().pipe(f.catchError(function(){return d.of(null)}))},Yn);function Yn(){}var Kn=(Zn.prototype.preload=function(e,t){return d.of(null)},Zn);function Zn(){}var Qn=(Xn.prototype.setUpPreloading=function(){var e=this;this.subscription=this.router.events.pipe(f.filter(function(e){return e instanceof _}),f.concatMap(function(){return e.preload()})).subscribe(function(){})},Xn.prototype.preload=function(){var e=this.injector.get(p.NgModuleRef);return this.processRoutes(e,this.router.config)},Xn.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},Xn.prototype.processRoutes=function(e,t){var n,r,i=[];try{for(var o=v(t),a=o.next();!a.done;a=o.next()){var s=a.value;if(s.loadChildren&&!s.canLoad&&s._loadedConfig){var l=s._loadedConfig;i.push(this.processRoutes(l.module,l.routes))}else s.loadChildren&&!s.canLoad?i.push(this.preloadConfig(e,s)):s.children&&i.push(this.processRoutes(e,s.children))}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return d.from(i).pipe(f.mergeAll(),f.map(function(e){}))},Xn.prototype.preloadConfig=function(e,t){var n=this;return this.preloadingStrategy.preload(t,function(){return n.loader.load(e.injector,t).pipe(f.mergeMap(function(e){return t._loadedConfig=e,n.processRoutes(e.module,e.routes)}))})},Xn=n([p.Injectable(),o(\"design:paramtypes\",[Tn,p.NgModuleFactoryLoader,p.Compiler,p.Injector,Wn])],Xn));function Xn(t,e,n,r,i){this.router=t,this.injector=r,this.preloadingStrategy=i;this.loader=new wn(e,n,function(e){return t.triggerEvent(new z(e))},function(e){return t.triggerEvent(new H(e))})}var $n=(Jn.prototype.init=function(){\"disabled\"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration(\"manual\"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()},Jn.prototype.createScrollEvents=function(){var t=this;return this.router.events.subscribe(function(e){e instanceof y?(t.store[t.lastId]=t.viewportScroller.getScrollPosition(),t.lastSource=e.navigationTrigger,t.restoredId=e.restoredState?e.restoredState.navigationId:0):e instanceof _&&(t.lastId=e.id,t.scheduleScrollEvent(e,t.router.parseUrl(e.urlAfterRedirects).fragment))})},Jn.prototype.consumeScrollEvents=function(){var t=this;return this.router.events.subscribe(function(e){e instanceof ee&&(e.position?\"top\"===t.options.scrollPositionRestoration?t.viewportScroller.scrollToPosition([0,0]):\"enabled\"===t.options.scrollPositionRestoration&&t.viewportScroller.scrollToPosition(e.position):e.anchor&&\"enabled\"===t.options.anchorScrolling?t.viewportScroller.scrollToAnchor(e.anchor):\"disabled\"!==t.options.scrollPositionRestoration&&t.viewportScroller.scrollToPosition([0,0]))})},Jn.prototype.scheduleScrollEvent=function(e,t){this.router.triggerEvent(new ee(e,\"popstate\"===this.lastSource?this.store[this.restoredId]:null,t))},Jn.prototype.ngOnDestroy=function(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()},Jn);function Jn(e,t,n){void 0===n&&(n={}),this.router=e,this.viewportScroller=t,this.options=n,this.lastId=0,this.lastSource=\"imperative\",this.restoredId=0,this.store={},n.scrollPositionRestoration=n.scrollPositionRestoration||\"disabled\",n.anchorScrolling=n.anchorScrolling||\"disabled\"}var er=[Un,Pn,Mn,jn,ne],tr=new p.InjectionToken(\"ROUTER_CONFIGURATION\"),nr=new p.InjectionToken(\"ROUTER_FORROOT_GUARD\"),rr=[h.Location,{provide:Pe,useClass:Ae},{provide:Tn,useFactory:dr,deps:[p.ApplicationRef,Pe,Vn,h.Location,p.Injector,p.NgModuleFactoryLoader,p.Compiler,bn,tr,[Cn,new p.Optional],[yn,new p.Optional]]},Vn,{provide:ot,useFactory:hr,deps:[Tn]},{provide:p.NgModuleFactoryLoader,useClass:p.SystemJsNgModuleLoader},Qn,Kn,Gn,{provide:tr,useValue:{enableTracing:!1}}];function ir(){return new p.NgProbeToken(\"Router\",Tn)}var or,ar=((or=sr).forRoot=function(e,t){return{ngModule:or,providers:[rr,pr(e),{provide:nr,useFactory:cr,deps:[[Tn,new p.Optional,new p.SkipSelf]]},{provide:tr,useValue:t||{}},{provide:h.LocationStrategy,useFactory:ur,deps:[h.PlatformLocation,[new p.Inject(h.APP_BASE_HREF),new p.Optional],tr]},{provide:$n,useFactory:lr,deps:[Tn,h.ViewportScroller,tr]},{provide:Wn,useExisting:t&&t.preloadingStrategy?t.preloadingStrategy:Kn},{provide:p.NgProbeToken,multi:!0,useFactory:ir},_r()]}},sr.forChild=function(e){return{ngModule:or,providers:[pr(e)]}},sr=or=n([p.NgModule({declarations:er,exports:er,entryComponents:[ne]}),i(0,p.Optional()),i(0,p.Inject(nr)),i(1,p.Optional()),o(\"design:paramtypes\",[Object,Tn])],sr));function sr(e,t){}function lr(e,t,n){return n.scrollOffset&&t.setOffset(n.scrollOffset),new $n(e,t,n)}function ur(e,t,n){return void 0===n&&(n={}),n.useHash?new h.HashLocationStrategy(e,t):new h.PathLocationStrategy(e,t)}function cr(e){if(e)throw new Error(\"RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.\");return\"guarded\"}function pr(e){return[{provide:p.ANALYZE_FOR_ENTRY_COMPONENTS,multi:!0,useValue:e},{provide:bn,multi:!0,useValue:e}]}function dr(e,t,n,r,i,o,a,s,l,u,c){void 0===l&&(l={});var p=new Tn(null,t,n,r,i,o,a,ye(s));if(u&&(p.urlHandlingStrategy=u),c&&(p.routeReuseStrategy=c),l.errorHandler&&(p.errorHandler=l.errorHandler),l.malformedUriErrorHandler&&(p.malformedUriErrorHandler=l.malformedUriErrorHandler),l.enableTracing){var d=h.ɵgetDOM();p.events.subscribe(function(e){d.logGroup(\"Router Event: \"+e.constructor.name),d.log(e.toString()),d.log(e),d.logGroupEnd()})}return l.onSameUrlNavigation&&(p.onSameUrlNavigation=l.onSameUrlNavigation),l.paramsInheritanceStrategy&&(p.paramsInheritanceStrategy=l.paramsInheritanceStrategy),l.urlUpdateStrategy&&(p.urlUpdateStrategy=l.urlUpdateStrategy),l.relativeLinkResolution&&(p.relativeLinkResolution=l.relativeLinkResolution),p}function hr(e){return e.routerState.root}var fr=(mr.prototype.appInitializer=function(){var i=this;return this.injector.get(h.LOCATION_INITIALIZED,Promise.resolve(null)).then(function(){var t=null,e=new Promise(function(e){return t=e}),n=i.injector.get(Tn),r=i.injector.get(tr);if(i.isLegacyDisabled(r)||i.isLegacyEnabled(r))t(!0);else if(\"disabled\"===r.initialNavigation)n.setUpLocationChangeListener(),t(!0);else{if(\"enabled\"!==r.initialNavigation)throw new Error(\"Invalid initialNavigation options: '\"+r.initialNavigation+\"'\");n.hooks.afterPreactivation=function(){return i.initNavigation?d.of(null):(i.initNavigation=!0,t(!0),i.resultOfPreactivationDone)},n.initialNavigation()}return e})},mr.prototype.bootstrapListener=function(e){var t=this.injector.get(tr),n=this.injector.get(Qn),r=this.injector.get($n),i=this.injector.get(Tn),o=this.injector.get(p.ApplicationRef);e===o.components[0]&&(this.isLegacyEnabled(t)?i.initialNavigation():this.isLegacyDisabled(t)&&i.setUpLocationChangeListener(),n.setUpPreloading(),r.init(),i.resetRootComponentType(o.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())},mr.prototype.isLegacyEnabled=function(e){return\"legacy_enabled\"===e.initialNavigation||!0===e.initialNavigation||void 0===e.initialNavigation},mr.prototype.isLegacyDisabled=function(e){return\"legacy_disabled\"===e.initialNavigation||!1===e.initialNavigation},mr=n([p.Injectable(),o(\"design:paramtypes\",[p.Injector])],mr));function mr(e){this.injector=e,this.initNavigation=!1,this.resultOfPreactivationDone=new d.Subject}function vr(e){return e.appInitializer.bind(e)}function yr(e){return e.bootstrapListener.bind(e)}var gr=new p.InjectionToken(\"Router Initializer\");function _r(){return[fr,{provide:p.APP_INITIALIZER,multi:!0,useFactory:vr,deps:[fr]},{provide:gr,useFactory:yr,deps:[fr]},{provide:p.APP_BOOTSTRAP_LISTENER,multi:!0,useExisting:gr}]}var br=new p.Version(\"9.0.0-next.12\");e.ɵangular_packages_router_router_l=ne,e.ɵEmptyOutletComponent=ne,e.ɵangular_packages_router_router_a=nr,e.ɵangular_packages_router_router_h=fr,e.ɵangular_packages_router_router_c=lr,e.ɵangular_packages_router_router_i=vr,e.ɵangular_packages_router_router_j=yr,e.ɵangular_packages_router_router_e=cr,e.ɵangular_packages_router_router_d=ur,e.ɵangular_packages_router_router_k=_r,e.ɵangular_packages_router_router_g=hr,e.ɵangular_packages_router_router_b=ir,e.ɵangular_packages_router_router_f=dr,e.ɵangular_packages_router_router_o=$n,e.ɵangular_packages_router_router_m=Ke,e.ɵangular_packages_router_router_n=$e,e.RouterLink=Pn,e.RouterLinkWithHref=Mn,e.RouterLinkActive=jn,e.RouterOutlet=Un,e.ActivationEnd=$,e.ActivationStart=Q,e.ChildActivationEnd=K,e.ChildActivationStart=G,e.GuardsCheckEnd=R,e.GuardsCheckStart=P,e.NavigationCancel=x,e.NavigationEnd=_,e.NavigationError=E,e.NavigationStart=y,e.ResolveEnd=B,e.ResolveStart=F,e.RouteConfigLoadEnd=H,e.RouteConfigLoadStart=z,e.RouterEvent=s,e.RoutesRecognized=D,e.Scroll=ee,e.RouteReuseStrategy=yn,e.Router=Tn,e.ROUTES=bn,e.ROUTER_CONFIGURATION=tr,e.ROUTER_INITIALIZER=gr,e.RouterModule=ar,e.provideRoutes=pr,e.ChildrenOutletContexts=Vn,e.OutletContext=Ln,e.NoPreloading=Kn,e.PreloadAllModules=Gn,e.PreloadingStrategy=Wn,e.RouterPreloader=Qn,e.ActivatedRoute=ot,e.ActivatedRouteSnapshot=lt,e.RouterState=nt,e.RouterStateSnapshot=pt,e.PRIMARY_OUTLET=ie,e.convertToParamMap=se,e.UrlHandlingStrategy=Cn,e.DefaultUrlSerializer=Ae,e.UrlSegment=ke,e.UrlSegmentGroup=Ee,e.UrlSerializer=Pe,e.UrlTree=Ce,e.VERSION=br,e.ɵROUTER_PROVIDERS=rr,e.ɵflatten=ye,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/compiler\"),require(\"@angular/core\"),require(\"@angular/common\"),require(\"@angular/platform-browser\")):System.registerDynamic(\"npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js\",[\"@angular/compiler\",\"@angular/core\",\"@angular/common\",\"@angular/platform-browser\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/compiler\"),e(\"@angular/core\"),e(\"@angular/common\"),e(\"@angular/platform-browser\"))})}(0,function(e,p,a,t,n){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function i(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function o(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(o(arguments[t]));return e}var l,u=((l=new Map).set(p.Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS,a.ANALYZE_FOR_ENTRY_COMPONENTS),l.set(p.Identifiers.ElementRef,a.ElementRef),l.set(p.Identifiers.NgModuleRef,a.NgModuleRef),l.set(p.Identifiers.ViewContainerRef,a.ViewContainerRef),l.set(p.Identifiers.ChangeDetectorRef,a.ChangeDetectorRef),l.set(p.Identifiers.Renderer2,a.Renderer2),l.set(p.Identifiers.QueryList,a.QueryList),l.set(p.Identifiers.TemplateRef,a.TemplateRef),l.set(p.Identifiers.CodegenComponentFactoryResolver,a.ɵCodegenComponentFactoryResolver),l.set(p.Identifiers.ComponentFactoryResolver,a.ComponentFactoryResolver),l.set(p.Identifiers.ComponentFactory,a.ComponentFactory),l.set(p.Identifiers.ComponentRef,a.ComponentRef),l.set(p.Identifiers.NgModuleFactory,a.NgModuleFactory),l.set(p.Identifiers.createModuleFactory,a.ɵcmf),l.set(p.Identifiers.moduleDef,a.ɵmod),l.set(p.Identifiers.moduleProviderDef,a.ɵmpd),l.set(p.Identifiers.RegisterModuleFactoryFn,a.ɵregisterModuleFactory),l.set(p.Identifiers.Injector,a.Injector),l.set(p.Identifiers.ViewEncapsulation,a.ViewEncapsulation),l.set(p.Identifiers.ChangeDetectionStrategy,a.ChangeDetectionStrategy),l.set(p.Identifiers.SecurityContext,a.SecurityContext),l.set(p.Identifiers.LOCALE_ID,a.LOCALE_ID),l.set(p.Identifiers.TRANSLATIONS_FORMAT,a.TRANSLATIONS_FORMAT),l.set(p.Identifiers.inlineInterpolate,a.ɵinlineInterpolate),l.set(p.Identifiers.interpolate,a.ɵinterpolate),l.set(p.Identifiers.EMPTY_ARRAY,a.ɵEMPTY_ARRAY),l.set(p.Identifiers.EMPTY_MAP,a.ɵEMPTY_MAP),l.set(p.Identifiers.viewDef,a.ɵvid),l.set(p.Identifiers.elementDef,a.ɵeld),l.set(p.Identifiers.anchorDef,a.ɵand),l.set(p.Identifiers.textDef,a.ɵted),l.set(p.Identifiers.directiveDef,a.ɵdid),l.set(p.Identifiers.providerDef,a.ɵprd),l.set(p.Identifiers.queryDef,a.ɵqud),l.set(p.Identifiers.pureArrayDef,a.ɵpad),l.set(p.Identifiers.pureObjectDef,a.ɵpod),l.set(p.Identifiers.purePipeDef,a.ɵppd),l.set(p.Identifiers.pipeDef,a.ɵpid),l.set(p.Identifiers.nodeValue,a.ɵnov),l.set(p.Identifiers.ngContentDef,a.ɵncd),l.set(p.Identifiers.unwrapValue,a.ɵunv),l.set(p.Identifiers.createRendererType2,a.ɵcrt),l.set(p.Identifiers.createComponentFactory,a.ɵccf),l),c=(d.prototype.componentModuleUrl=function(e,t){var n=t.moduleId;if(\"string\"==typeof n)return p.getUrlScheme(n)?n:\"package:\"+n;if(null!=n)throw p.syntaxError('moduleId should be a string in \"'+a.ɵstringify(e)+\"\\\". See https://goo.gl/wIDDiL for more information.\\nIf you're using Webpack you should inline the template and the styles, see https://goo.gl/X2J8zc.\");return\"./\"+a.ɵstringify(e)},d.prototype.parameters=function(e){return this.reflectionCapabilities.parameters(e)},d.prototype.tryAnnotations=function(e){return this.annotations(e)},d.prototype.annotations=function(e){return this.reflectionCapabilities.annotations(e)},d.prototype.shallowAnnotations=function(e){throw new Error(\"Not supported in JIT mode\")},d.prototype.propMetadata=function(e){return this.reflectionCapabilities.propMetadata(e)},d.prototype.hasLifecycleHook=function(e,t){return this.reflectionCapabilities.hasLifecycleHook(e,t)},d.prototype.guards=function(e){return this.reflectionCapabilities.guards(e)},d.prototype.resolveExternalReference=function(e){return u.get(e)||e.runtime},d);function d(){this.reflectionCapabilities=new a.ɵReflectionCapabilities}var h=new a.InjectionToken(\"ErrorCollector\"),f={provide:a.PACKAGE_ROOT_URL,useValue:\"/\"},m={get:function(e){throw new Error(\"No ResourceLoader implementation has been provided. Can't read the url \\\"\"+e+'\"')}},v=new a.InjectionToken(\"HtmlParser\"),y=(g.prototype.getExtraNgModuleProviders=function(){return[this._metadataResolver.getProviderMetadata(new p.ProviderMeta(a.Compiler,{useValue:this}))]},g.prototype.compileModuleSync=function(e){return this._delegate.compileModuleSync(e)},g.prototype.compileModuleAsync=function(e){return this._delegate.compileModuleAsync(e)},g.prototype.compileModuleAndAllComponentsSync=function(e){var t=this._delegate.compileModuleAndAllComponentsSync(e);return{ngModuleFactory:t.ngModuleFactory,componentFactories:t.componentFactories}},g.prototype.compileModuleAndAllComponentsAsync=function(e){return this._delegate.compileModuleAndAllComponentsAsync(e).then(function(e){return{ngModuleFactory:e.ngModuleFactory,componentFactories:e.componentFactories}})},g.prototype.loadAotSummaries=function(e){this._delegate.loadAotSummaries(e)},g.prototype.hasAotSummary=function(e){return this._delegate.hasAotSummary(e)},g.prototype.getComponentFactory=function(e){return this._delegate.getComponentFactory(e)},g.prototype.clearCache=function(){this._delegate.clearCache()},g.prototype.clearCacheFor=function(e){this._delegate.clearCacheFor(e)},g.prototype.getModuleId=function(e){var t=this._metadataResolver.getNgModuleMetadata(e);return t&&t.id||void 0},g);function g(e,t,n,r,i,o,a,s,l,u,c){this._metadataResolver=t,this._delegate=new p.JitCompiler(t,n,r,i,o,a,s,l,u,c,this.getExtraNgModuleProviders.bind(this)),this.injector=e}var _=new c,b=m,w=new p.CompilerConfig,x=[{provide:p.CompileReflector,useValue:_},{provide:p.ResourceLoader,useValue:b},{provide:p.JitSummaryResolver,deps:[]},{provide:p.SummaryResolver,useExisting:p.JitSummaryResolver},{provide:a.ɵConsole,deps:[]},{provide:p.Lexer,deps:[]},{provide:p.Parser,deps:[p.Lexer]},{provide:v,useClass:p.HtmlParser,deps:[]},{provide:p.I18NHtmlParser,useFactory:function(e,t,n,r,i){var o=(t=t||\"\")?r.missingTranslation:a.MissingTranslationStrategy.Ignore;return new p.I18NHtmlParser(e,t,n,o,i)},deps:[v,[new a.Optional,new a.Inject(a.TRANSLATIONS)],[new a.Optional,new a.Inject(a.TRANSLATIONS_FORMAT)],[p.CompilerConfig],[a.ɵConsole]]},{provide:p.HtmlParser,useExisting:p.I18NHtmlParser},{provide:p.TemplateParser,deps:[p.CompilerConfig,p.CompileReflector,p.Parser,p.ElementSchemaRegistry,p.I18NHtmlParser,a.ɵConsole]},{provide:p.JitEvaluator,useClass:p.JitEvaluator,deps:[]},{provide:p.DirectiveNormalizer,deps:[p.ResourceLoader,p.UrlResolver,p.HtmlParser,p.CompilerConfig]},{provide:p.CompileMetadataResolver,deps:[p.CompilerConfig,p.HtmlParser,p.NgModuleResolver,p.DirectiveResolver,p.PipeResolver,p.SummaryResolver,p.ElementSchemaRegistry,p.DirectiveNormalizer,a.ɵConsole,[a.Optional,p.StaticSymbolCache],p.CompileReflector,[a.Optional,h]]},f,{provide:p.StyleCompiler,deps:[p.UrlResolver]},{provide:p.ViewCompiler,deps:[p.CompileReflector]},{provide:p.NgModuleCompiler,deps:[p.CompileReflector]},{provide:p.CompilerConfig,useValue:w},{provide:a.Compiler,useClass:y,deps:[a.Injector,p.CompileMetadataResolver,p.TemplateParser,p.StyleCompiler,p.ViewCompiler,p.NgModuleCompiler,p.SummaryResolver,p.CompileReflector,p.JitEvaluator,p.CompilerConfig,a.ɵConsole]},{provide:p.DomElementSchemaRegistry,deps:[]},{provide:p.ElementSchemaRegistry,useExisting:p.DomElementSchemaRegistry},{provide:p.UrlResolver,deps:[a.PACKAGE_ROOT_URL]},{provide:p.DirectiveResolver,deps:[p.CompileReflector]},{provide:p.PipeResolver,deps:[p.CompileReflector]},{provide:p.NgModuleResolver,deps:[p.CompileReflector]}],C=[{provide:a.Compiler,useFactory:function(){return new a.Compiler}}],S=x,E=(O.prototype.createCompiler=function(e){void 0===e&&(e=[]);var t=function(e){return{useJit:k(e.map(function(e){return e.useJit})),defaultEncapsulation:k(e.map(function(e){return e.defaultEncapsulation})),providers:function(e){var t=[];return e.forEach(function(e){return e&&t.push.apply(t,s(e))}),t}(e.map(function(e){return e.providers})),missingTranslation:k(e.map(function(e){return e.missingTranslation})),preserveWhitespaces:k(e.map(function(e){return e.preserveWhitespaces}))}}(this._defaultOptions.concat(e));return a.Injector.create([S,{provide:p.CompilerConfig,useFactory:function(){return new p.CompilerConfig({useJit:t.useJit,jitDevMode:a.isDevMode(),defaultEncapsulation:t.defaultEncapsulation,missingTranslation:t.missingTranslation,preserveWhitespaces:t.preserveWhitespaces})},deps:[]},t.providers]).get(a.Compiler)},O);function O(e){var t={useJit:!0,defaultEncapsulation:a.ViewEncapsulation.Emulated,missingTranslation:a.MissingTranslationStrategy.Warning};this._defaultOptions=s([t],e)}function k(e){for(var t=e.length-1;0<=t;t--)if(void 0!==e[t])return e[t]}var D,T=a.createPlatformFactory(a.platformCore,\"coreDynamic\",[{provide:a.COMPILER_OPTIONS,useValue:{},multi:!0},{provide:a.CompilerFactory,useClass:E,deps:[a.COMPILER_OPTIONS]}]),I=(i(P,D=p.ResourceLoader),P.prototype.get=function(n){var r,i,e=new Promise(function(e,t){r=e,i=t}),o=new XMLHttpRequest;return o.open(\"GET\",n,!0),o.responseType=\"text\",o.onload=function(){var e=o.response||o.responseText,t=1223===o.status?204:o.status;0===t&&(t=e?200:0),200<=t&&t<=300?r(e):i(\"Failed to load \"+n)},o.onerror=function(){i(\"Failed to load \"+n)},o.send(),e},P=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}([a.Injectable()],P));function P(){return null!==D&&D.apply(this,arguments)||this}var A,M={providers:[{provide:p.ResourceLoader,useClass:I,deps:[]}]},R=t.ɵPLATFORM_BROWSER_ID,N=[n.ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS,{provide:a.COMPILER_OPTIONS,useValue:M,multi:!0},{provide:a.PLATFORM_ID,useValue:R}],j=(i(F,A=p.ResourceLoader),F.prototype.get=function(e){return this._cache.hasOwnProperty(e)?Promise.resolve(this._cache[e]):Promise.reject(\"CachedResourceLoader: Did not find cached template for \"+e)},F);function F(){var e=A.call(this)||this;if(e._cache=a.ɵglobal.$templateCache,null==e._cache)throw new Error(\"CachedResourceLoader: Template cache was not found in $templateCache.\");return e}var L=new a.Version(\"9.0.0-next.12\"),V=[{provide:p.ResourceLoader,useClass:j,deps:[]}],B=a.createPlatformFactory(T,\"browserDynamic\",N);e.ɵangular_packages_platform_browser_dynamic_platform_browser_dynamic_a=j,e.RESOURCE_CACHE_PROVIDER=V,e.platformBrowserDynamic=B,e.VERSION=L,e.JitCompilerFactory=E,e.ɵCOMPILER_PROVIDERS__POST_R3__=C,e.ɵCompilerImpl=y,e.ɵplatformCoreDynamic=T,e.ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS=N,e.ɵResourceLoaderImpl=I,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/platform-browser\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js\",[\"@angular/core\",\"@angular/platform-browser\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/platform-browser\"),e(\"@angular/common\"))})}(0,function(e,t,n,r){\"use strict\";var i=(Object.defineProperty(o.prototype,\"_ua\",{get:function(){return\"string\"==typeof this._overrideUa?this._overrideUa:r.ɵgetDOM()?r.ɵgetDOM().getUserAgent():\"\"},enumerable:!0,configurable:!0}),o.setup=function(){new o(null)},Object.defineProperty(o.prototype,\"isFirefox\",{get:function(){return-1<this._ua.indexOf(\"Firefox\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isAndroid\",{get:function(){return-1<this._ua.indexOf(\"Mozilla/5.0\")&&-1<this._ua.indexOf(\"Android\")&&-1<this._ua.indexOf(\"AppleWebKit\")&&-1==this._ua.indexOf(\"Chrome\")&&-1==this._ua.indexOf(\"IEMobile\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isEdge\",{get:function(){return-1<this._ua.indexOf(\"Edge\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isIE\",{get:function(){return-1<this._ua.indexOf(\"Trident\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isWebkit\",{get:function(){return-1<this._ua.indexOf(\"AppleWebKit\")&&-1==this._ua.indexOf(\"Edge\")&&-1==this._ua.indexOf(\"IEMobile\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isIOS7\",{get:function(){return(-1<this._ua.indexOf(\"iPhone OS 7\")||-1<this._ua.indexOf(\"iPad OS 7\"))&&-1==this._ua.indexOf(\"IEMobile\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isSlow\",{get:function(){return this.isAndroid||this.isIE||this.isIOS7},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"supportsNativeIntlApi\",{get:function(){return!!t.ɵglobal.Intl&&t.ɵglobal.Intl!==t.ɵglobal.IntlPolyfill},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isChromeDesktop\",{get:function(){return-1<this._ua.indexOf(\"Chrome\")&&-1==this._ua.indexOf(\"Mobile Safari\")&&-1==this._ua.indexOf(\"Edge\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"isOldChrome\",{get:function(){return-1<this._ua.indexOf(\"Chrome\")&&-1<this._ua.indexOf(\"Chrome/3\")&&-1==this._ua.indexOf(\"Edge\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"supportsCustomElements\",{get:function(){return void 0!==t.ɵglobal.customElements},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"supportsDeprecatedCustomCustomElementsV0\",{get:function(){return void 0!==document.registerElement},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"supportsRegExUnicodeFlag\",{get:function(){return RegExp.prototype.hasOwnProperty(\"unicode\")},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"supportsShadowDom\",{get:function(){return void 0!==document.createElement(\"div\").attachShadow},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"supportsDeprecatedShadowDomV0\",{get:function(){return void 0!==document.createElement(\"div\").createShadowRoot},enumerable:!0,configurable:!0}),o);function o(e){this._overrideUa=e}i.setup();function a(){return new t.NgZone({enableLongStackTrace:!0})}var s=[{provide:t.PLATFORM_INITIALIZER,useValue:function(){n.ɵBrowserDomAdapter.makeCurrent(),i.setup()},multi:!0}],l=t.createPlatformFactory(t.platformCore,\"browserTesting\",s),u=a,c=p=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}([t.NgModule({exports:[n.BrowserModule],providers:[{provide:t.APP_ID,useValue:\"a\"},n.ɵELEMENT_PROBE_PROVIDERS,{provide:t.NgZone,useFactory:u}]})],p);function p(){}e.ɵangular_packages_platform_browser_testing_testing_a=a,e.platformBrowserTesting=l,e.BrowserTestingModule=c,e.ɵ0=u,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/compiler\")):System.registerDynamic(\"npm:@angular/compiler/bundles/compiler-testing.umd.js\",[\"@angular/compiler\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/compiler\"))})}(0,function(e,r){\"use strict\";var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function t(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var n,o=(t(a,n=r.ResourceLoader),a.prototype.get=function(e){var t=new s(e);return this._requests.push(t),t.getPromise()},a.prototype.hasPendingRequests=function(){return!!this._requests.length},a.prototype.expect=function(e,t){var n=new u(e,t);this._expectations.push(n)},a.prototype.when=function(e,t){this._definitions.set(e,t)},a.prototype.flush=function(){if(0===this._requests.length)throw new Error(\"No pending requests to flush\");for(;this._processRequest(this._requests.shift()),0<this._requests.length;);this.verifyNoOutstandingExpectations()},a.prototype.verifyNoOutstandingExpectations=function(){if(0!==this._expectations.length){for(var e=[],t=0;t<this._expectations.length;t++){var n=this._expectations[t];e.push(n.url)}throw new Error(\"Unsatisfied requests: \"+e.join(\", \"))}},a.prototype._processRequest=function(e){var t=e.url;if(0<this._expectations.length){var n=this._expectations[0];if(n.url==t)return function(e,t){var n=e.indexOf(t);-1<n&&e.splice(n,1)}(this._expectations,n),void e.complete(n.response)}if(!this._definitions.has(t))throw new Error(\"Unexpected request \"+t);var r=this._definitions.get(t);e.complete(null==r?null:r)},a);function a(){var e=null!==n&&n.apply(this,arguments)||this;return e._expectations=[],e._definitions=new Map,e._requests=[],e}var s=(l.prototype.complete=function(e){null==e?this.reject(\"Failed to load \"+this.url):this.resolve(e)},l.prototype.getPromise=function(){return this.promise},l);function l(e){var n=this;this.url=e,this.promise=new Promise(function(e,t){n.resolve=e,n.reject=t})}var u=function(e,t){this.url=e,this.response=t};var c=(p.prototype.hasProperty=function(e,t,n){var r=this.existingProperties[t];return void 0===r||r},p.prototype.hasElement=function(e,t){var n=this.existingElements[e.toLowerCase()];return void 0===n||n},p.prototype.allKnownElementNames=function(){return Object.keys(this.existingElements)},p.prototype.securityContext=function(e,t,n){return r.core.SecurityContext.NONE},p.prototype.getMappedPropName=function(e){return this.attrPropMapping[e]||e},p.prototype.getDefaultComponentElementName=function(){return\"ng-component\"},p.prototype.validateProperty=function(e){return-1<this.invalidProperties.indexOf(e)?{error:!0,msg:\"Binding to property '\"+e+\"' is disallowed for security reasons\"}:{error:!1}},p.prototype.validateAttribute=function(e){return-1<this.invalidAttributes.indexOf(e)?{error:!0,msg:\"Binding to attribute '\"+e+\"' is disallowed for security reasons\"}:{error:!1}},p.prototype.normalizeAnimationStyleProperty=function(e){return e},p.prototype.normalizeAnimationStyleValue=function(e,t,n){return{error:null,value:n.toString()}},p);function p(e,t,n,r,i){this.existingProperties=e,this.attrPropMapping=t,this.existingElements=n,this.invalidProperties=r,this.invalidAttributes=i}var d,h=(t(f,d=r.DirectiveResolver),f.prototype.resolve=function(e,t){return void 0===t&&(t=!0),this._directives.get(e)||d.prototype.resolve.call(this,e,t)},f.prototype.setDirective=function(e,t){this._directives.set(e,t)},f);function f(e){var t=d.call(this,e)||this;return t._directives=new Map,t}var m,v=(t(y,m=r.NgModuleResolver),y.prototype.setNgModule=function(e,t){this._ngModules.set(e,t)},y.prototype.resolve=function(e,t){return void 0===t&&(t=!0),this._ngModules.get(e)||m.prototype.resolve.call(this,e,t)},y);function y(e){var t=m.call(this,e)||this;return t._ngModules=new Map,t}var g,_=(t(b,g=r.PipeResolver),b.prototype.setPipe=function(e,t){this._pipes.set(e,t)},b.prototype.resolve=function(e,t){void 0===t&&(t=!0);var n=this._pipes.get(e);return n=n||g.prototype.resolve.call(this,e,t)},b);function b(e){var t=g.call(this,e)||this;return t._pipes=new Map,t}e.MockResourceLoader=o,e.MockSchemaRegistry=c,e.MockDirectiveResolver=h,e.MockNgModuleResolver=v,e.MockPipeResolver=_,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/core/testing\"),require(\"@angular/platform-browser-dynamic\"),require(\"@angular/platform-browser/testing\"),require(\"@angular/common\"),require(\"@angular/compiler\"),require(\"@angular/compiler/testing\")):System.registerDynamic(\"npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js\",[\"@angular/core\",\"@angular/core/testing\",\"@angular/platform-browser-dynamic\",\"@angular/platform-browser/testing\",\"@angular/common\",\"@angular/compiler\",\"@angular/compiler/testing\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/core/testing\"),e(\"@angular/platform-browser-dynamic\"),e(\"@angular/platform-browser/testing\"),e(\"@angular/common\"),e(\"@angular/compiler\"),e(\"@angular/compiler/testing\"))})}(0,function(e,r,i,t,n,o,a,s){\"use strict\";var l=function(e,t){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function u(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}var c,p,d,h,f,m=(f=i.TestComponentRenderer,l(d=y,h=f),void(d.prototype=null===h?Object.create(h):(v.prototype=h.prototype,new v)),y.prototype.insertRootElement=function(e){var t=o.ɵgetDOM().getDefaultDocument().createElement(\"template\");t.innerHTML='<div id=\"'+e+'\"></div>';for(var n=function(e){return\"content\"in e?e.content:e}(t).firstChild,r=this._doc.querySelectorAll(\"[id^=root]\"),i=0;i<r.length;i++)o.ɵgetDOM().remove(r[i]);this._doc.body.appendChild(n)},y=u([r.Injectable(),(c=0,p=r.Inject(o.DOCUMENT),function(e,t){p(e,t,c)}),function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}(\"design:paramtypes\",[Object])],y));function v(){this.constructor=d}function y(e){var t=f.call(this)||this;return t._doc=e,t}var g=[{provide:s.MockPipeResolver,deps:[a.CompileReflector]},{provide:a.PipeResolver,useExisting:s.MockPipeResolver},{provide:s.MockDirectiveResolver,deps:[a.CompileReflector]},{provide:a.DirectiveResolver,useExisting:s.MockDirectiveResolver},{provide:s.MockNgModuleResolver,deps:[a.CompileReflector]},{provide:a.NgModuleResolver,useExisting:s.MockNgModuleResolver}],_=(b.prototype.createTestingCompiler=function(e){var t=this._compilerFactory.createCompiler(e);return new w(t,t.injector.get(s.MockDirectiveResolver),t.injector.get(s.MockPipeResolver),t.injector.get(s.MockNgModuleResolver))},b);function b(e,t){this._injector=e,this._compilerFactory=t}var w=(Object.defineProperty(x.prototype,\"injector\",{get:function(){return this._compiler.injector},enumerable:!0,configurable:!0}),x.prototype.compileModuleSync=function(e){return this._compiler.compileModuleSync(e)},x.prototype.compileModuleAsync=function(e){return this._compiler.compileModuleAsync(e)},x.prototype.compileModuleAndAllComponentsSync=function(e){return this._compiler.compileModuleAndAllComponentsSync(e)},x.prototype.compileModuleAndAllComponentsAsync=function(e){return this._compiler.compileModuleAndAllComponentsAsync(e)},x.prototype.getComponentFactory=function(e){return this._compiler.getComponentFactory(e)},x.prototype.checkOverrideAllowed=function(e){if(this._compiler.hasAotSummary(e))throw new Error(r.ɵstringify(e)+\" was AOT compiled, so its metadata cannot be changed.\")},x.prototype.overrideModule=function(e,t){this.checkOverrideAllowed(e);var n=this._moduleResolver.resolve(e,!1);this._moduleResolver.setNgModule(e,this._overrider.overrideMetadata(r.NgModule,n,t)),this.clearCacheFor(e)},x.prototype.overrideDirective=function(e,t){this.checkOverrideAllowed(e);var n=this._directiveResolver.resolve(e,!1);this._directiveResolver.setDirective(e,this._overrider.overrideMetadata(r.Directive,n,t)),this.clearCacheFor(e)},x.prototype.overrideComponent=function(e,t){this.checkOverrideAllowed(e);var n=this._directiveResolver.resolve(e,!1);this._directiveResolver.setDirective(e,this._overrider.overrideMetadata(r.Component,n,t)),this.clearCacheFor(e)},x.prototype.overridePipe=function(e,t){this.checkOverrideAllowed(e);var n=this._pipeResolver.resolve(e,!1);this._pipeResolver.setPipe(e,this._overrider.overrideMetadata(r.Pipe,n,t)),this.clearCacheFor(e)},x.prototype.loadAotSummaries=function(e){this._compiler.loadAotSummaries(e)},x.prototype.clearCache=function(){this._compiler.clearCache()},x.prototype.clearCacheFor=function(e){this._compiler.clearCacheFor(e)},x.prototype.getComponentFromError=function(e){return e[a.ERROR_COMPONENT_TYPE]||null},x.prototype.getModuleId=function(e){return this._moduleResolver.resolve(e,!0).id},x);function x(e,t,n,r){this._compiler=e,this._directiveResolver=t,this._pipeResolver=n,this._moduleResolver=r,this._overrider=new i.ɵMetadataOverrider}var C={providers:g},S=r.createPlatformFactory(t.ɵplatformCoreDynamic,\"coreDynamicTesting\",[{provide:r.COMPILER_OPTIONS,useValue:C,multi:!0},{provide:i.ɵTestingCompilerFactory,useClass:_,deps:[r.Injector,r.CompilerFactory]}]),E=r.createPlatformFactory(S,\"browserDynamicTesting\",t.ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS),O=k=u([r.NgModule({exports:[n.BrowserTestingModule],providers:[{provide:i.TestComponentRenderer,useClass:m}]})],k);function k(){}e.ɵangular_packages_platform_browser_dynamic_testing_testing_a=g,e.ɵangular_packages_platform_browser_dynamic_testing_testing_b=_,e.platformBrowserDynamicTesting=E,e.BrowserDynamicTestingModule=O,e.ɵDOMTestComponentRenderer=m,e.ɵplatformCoreDynamicTesting=S,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports):System.registerDynamic(\"npm:@angular/compiler/bundles/compiler.umd.js\",[],!1,function(e,t,n){return r.call(t,t)})}(0,function(E){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function f(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var e,m=function(){return(m=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function z(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function U(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function q(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(U(arguments[t]));return e}function H(e){if(\":\"!=e[0])return[null,e];var t=e.indexOf(\":\",1);if(-1==t)throw new Error('Unsupported format \"'+e+'\" expecting \":namespace:name\"');return[e.slice(1,t),e.slice(t+1)]}function W(e){return\"ng-container\"===H(e)[1]}function l(e){return\"ng-content\"===H(e)[1]}function V(e){return\"ng-template\"===H(e)[1]}function c(e){return null===e?null:H(e)[0]}function p(e,t){return e?\":\"+e+\":\"+t:t}(e=E.TagContentType||(E.TagContentType={}))[e.RAW_TEXT=0]=\"RAW_TEXT\",e[e.ESCAPABLE_RAW_TEXT=1]=\"ESCAPABLE_RAW_TEXT\",e[e.PARSABLE_DATA=2]=\"PARSABLE_DATA\";var u={Aacute:\"Á\",aacute:\"á\",Acirc:\"Â\",acirc:\"â\",acute:\"´\",AElig:\"Æ\",aelig:\"æ\",Agrave:\"À\",agrave:\"à\",alefsym:\"ℵ\",Alpha:\"Α\",alpha:\"α\",amp:\"&\",and:\"∧\",ang:\"∠\",apos:\"'\",Aring:\"Å\",aring:\"å\",asymp:\"≈\",Atilde:\"Ã\",atilde:\"ã\",Auml:\"Ä\",auml:\"ä\",bdquo:\"„\",Beta:\"Β\",beta:\"β\",brvbar:\"¦\",bull:\"•\",cap:\"∩\",Ccedil:\"Ç\",ccedil:\"ç\",cedil:\"¸\",cent:\"¢\",Chi:\"Χ\",chi:\"χ\",circ:\"ˆ\",clubs:\"♣\",cong:\"≅\",copy:\"©\",crarr:\"↵\",cup:\"∪\",curren:\"¤\",dagger:\"†\",Dagger:\"‡\",darr:\"↓\",dArr:\"⇓\",deg:\"°\",Delta:\"Δ\",delta:\"δ\",diams:\"♦\",divide:\"÷\",Eacute:\"É\",eacute:\"é\",Ecirc:\"Ê\",ecirc:\"ê\",Egrave:\"È\",egrave:\"è\",empty:\"∅\",emsp:\" \",ensp:\" \",Epsilon:\"Ε\",epsilon:\"ε\",equiv:\"≡\",Eta:\"Η\",eta:\"η\",ETH:\"Ð\",eth:\"ð\",Euml:\"Ë\",euml:\"ë\",euro:\"€\",exist:\"∃\",fnof:\"ƒ\",forall:\"∀\",frac12:\"½\",frac14:\"¼\",frac34:\"¾\",frasl:\"⁄\",Gamma:\"Γ\",gamma:\"γ\",ge:\"≥\",gt:\">\",harr:\"↔\",hArr:\"⇔\",hearts:\"♥\",hellip:\"…\",Iacute:\"Í\",iacute:\"í\",Icirc:\"Î\",icirc:\"î\",iexcl:\"¡\",Igrave:\"Ì\",igrave:\"ì\",image:\"ℑ\",infin:\"∞\",int:\"∫\",Iota:\"Ι\",iota:\"ι\",iquest:\"¿\",isin:\"∈\",Iuml:\"Ï\",iuml:\"ï\",Kappa:\"Κ\",kappa:\"κ\",Lambda:\"Λ\",lambda:\"λ\",lang:\"⟨\",laquo:\"«\",larr:\"←\",lArr:\"⇐\",lceil:\"⌈\",ldquo:\"“\",le:\"≤\",lfloor:\"⌊\",lowast:\"∗\",loz:\"◊\",lrm:\"‎\",lsaquo:\"‹\",lsquo:\"‘\",lt:\"<\",macr:\"¯\",mdash:\"—\",micro:\"µ\",middot:\"·\",minus:\"−\",Mu:\"Μ\",mu:\"μ\",nabla:\"∇\",nbsp:\" \",ndash:\"–\",ne:\"≠\",ni:\"∋\",not:\"¬\",notin:\"∉\",nsub:\"⊄\",Ntilde:\"Ñ\",ntilde:\"ñ\",Nu:\"Ν\",nu:\"ν\",Oacute:\"Ó\",oacute:\"ó\",Ocirc:\"Ô\",ocirc:\"ô\",OElig:\"Œ\",oelig:\"œ\",Ograve:\"Ò\",ograve:\"ò\",oline:\"‾\",Omega:\"Ω\",omega:\"ω\",Omicron:\"Ο\",omicron:\"ο\",oplus:\"⊕\",or:\"∨\",ordf:\"ª\",ordm:\"º\",Oslash:\"Ø\",oslash:\"ø\",Otilde:\"Õ\",otilde:\"õ\",otimes:\"⊗\",Ouml:\"Ö\",ouml:\"ö\",para:\"¶\",permil:\"‰\",perp:\"⊥\",Phi:\"Φ\",phi:\"φ\",Pi:\"Π\",pi:\"π\",piv:\"ϖ\",plusmn:\"±\",pound:\"£\",prime:\"′\",Prime:\"″\",prod:\"∏\",prop:\"∝\",Psi:\"Ψ\",psi:\"ψ\",quot:'\"',radic:\"√\",rang:\"⟩\",raquo:\"»\",rarr:\"→\",rArr:\"⇒\",rceil:\"⌉\",rdquo:\"”\",real:\"ℜ\",reg:\"®\",rfloor:\"⌋\",Rho:\"Ρ\",rho:\"ρ\",rlm:\"‏\",rsaquo:\"›\",rsquo:\"’\",sbquo:\"‚\",Scaron:\"Š\",scaron:\"š\",sdot:\"⋅\",sect:\"§\",shy:\"­\",Sigma:\"Σ\",sigma:\"σ\",sigmaf:\"ς\",sim:\"∼\",spades:\"♠\",sub:\"⊂\",sube:\"⊆\",sum:\"∑\",sup:\"⊃\",sup1:\"¹\",sup2:\"²\",sup3:\"³\",supe:\"⊇\",szlig:\"ß\",Tau:\"Τ\",tau:\"τ\",there4:\"∴\",Theta:\"Θ\",theta:\"θ\",thetasym:\"ϑ\",thinsp:\" \",THORN:\"Þ\",thorn:\"þ\",tilde:\"˜\",times:\"×\",trade:\"™\",Uacute:\"Ú\",uacute:\"ú\",uarr:\"↑\",uArr:\"⇑\",Ucirc:\"Û\",ucirc:\"û\",Ugrave:\"Ù\",ugrave:\"ù\",uml:\"¨\",upsih:\"ϒ\",Upsilon:\"Υ\",upsilon:\"υ\",Uuml:\"Ü\",uuml:\"ü\",weierp:\"℘\",Xi:\"Ξ\",xi:\"ξ\",Yacute:\"Ý\",yacute:\"ý\",yen:\"¥\",yuml:\"ÿ\",Yuml:\"Ÿ\",Zeta:\"Ζ\",zeta:\"ζ\",zwj:\"‍\",zwnj:\"‌\"};u.ngsp=\"\";var t,n,i=(o.prototype.isClosedByChild=function(e){return this.isVoid||e.toLowerCase()in this.closedByChildren},o);function o(e){var t=this,n=void 0===e?{}:e,r=n.closedByChildren,i=n.implicitNamespacePrefix,o=n.contentType,a=void 0===o?E.TagContentType.PARSABLE_DATA:o,s=n.closedByParent,l=void 0!==s&&s,u=n.isVoid,c=void 0!==u&&u,p=n.ignoreFirstLf,d=void 0!==p&&p;this.closedByChildren={},this.closedByParent=!1,this.canSelfClose=!1,r&&0<r.length&&r.forEach(function(e){return t.closedByChildren[e]=!0}),this.isVoid=c,this.closedByParent=l||c,this.implicitNamespacePrefix=i||null,this.contentType=a,this.ignoreFirstLf=d}function d(e){return n||(t=new i,n={base:new i({isVoid:!0}),meta:new i({isVoid:!0}),area:new i({isVoid:!0}),embed:new i({isVoid:!0}),link:new i({isVoid:!0}),img:new i({isVoid:!0}),input:new i({isVoid:!0}),param:new i({isVoid:!0}),hr:new i({isVoid:!0}),br:new i({isVoid:!0}),source:new i({isVoid:!0}),track:new i({isVoid:!0}),wbr:new i({isVoid:!0}),p:new i({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:!0}),thead:new i({closedByChildren:[\"tbody\",\"tfoot\"]}),tbody:new i({closedByChildren:[\"tbody\",\"tfoot\"],closedByParent:!0}),tfoot:new i({closedByChildren:[\"tbody\"],closedByParent:!0}),tr:new i({closedByChildren:[\"tr\"],closedByParent:!0}),td:new i({closedByChildren:[\"td\",\"th\"],closedByParent:!0}),th:new i({closedByChildren:[\"td\",\"th\"],closedByParent:!0}),col:new i({isVoid:!0}),svg:new i({implicitNamespacePrefix:\"svg\"}),math:new i({implicitNamespacePrefix:\"math\"}),li:new i({closedByChildren:[\"li\"],closedByParent:!0}),dt:new i({closedByChildren:[\"dt\",\"dd\"]}),dd:new i({closedByChildren:[\"dt\",\"dd\"],closedByParent:!0}),rb:new i({closedByChildren:[\"rb\",\"rt\",\"rtc\",\"rp\"],closedByParent:!0}),rt:new i({closedByChildren:[\"rb\",\"rt\",\"rtc\",\"rp\"],closedByParent:!0}),rtc:new i({closedByChildren:[\"rb\",\"rtc\",\"rp\"],closedByParent:!0}),rp:new i({closedByChildren:[\"rb\",\"rt\",\"rtc\",\"rp\"],closedByParent:!0}),optgroup:new i({closedByChildren:[\"optgroup\"],closedByParent:!0}),option:new i({closedByChildren:[\"option\",\"optgroup\"],closedByParent:!0}),pre:new i({ignoreFirstLf:!0}),listing:new i({ignoreFirstLf:!0}),style:new i({contentType:E.TagContentType.RAW_TEXT}),script:new i({contentType:E.TagContentType.RAW_TEXT}),title:new i({contentType:E.TagContentType.ESCAPABLE_RAW_TEXT}),textarea:new i({contentType:E.TagContentType.ESCAPABLE_RAW_TEXT,ignoreFirstLf:!0})}),n[e.toLowerCase()]||t}var s=new RegExp(\"(\\\\:not\\\\()|([-\\\\w]+)|(?:\\\\.([-\\\\w]+))|(?:\\\\[([-.\\\\w*]+)(?:=([\\\"']?)([^\\\\]\\\"']*)\\\\5)?\\\\])|(\\\\))|(\\\\s*,\\\\s*)\",\"g\"),B=(h.parse=function(e){function t(e,t){0<t.notSelectors.length&&!t.element&&0==t.classNames.length&&0==t.attrs.length&&(t.element=\"*\"),e.push(t)}var n,r=[],i=new h,o=i,a=!1;for(s.lastIndex=0;n=s.exec(e);){if(n[1]){if(a)throw new Error(\"Nesting :not is not allowed in a selector\");a=!0,o=new h,i.notSelectors.push(o)}if(n[2]&&o.setElement(n[2]),n[3]&&o.addClassName(n[3]),n[4]&&o.addAttribute(n[4],n[6]),n[7]&&(a=!1,o=i),n[8]){if(a)throw new Error(\"Multiple selectors in :not are not supported\");t(r,i),i=o=new h}}return t(r,i),r},h.prototype.isElementSelector=function(){return this.hasElementSelector()&&0==this.classNames.length&&0==this.attrs.length&&0===this.notSelectors.length},h.prototype.hasElementSelector=function(){return!!this.element},h.prototype.setElement=function(e){void 0===e&&(e=null),this.element=e},h.prototype.getMatchingElementTemplate=function(){for(var e=this.element||\"div\",t=0<this.classNames.length?' class=\"'+this.classNames.join(\" \")+'\"':\"\",n=\"\",r=0;r<this.attrs.length;r+=2)n+=\" \"+this.attrs[r]+(\"\"!==this.attrs[r+1]?'=\"'+this.attrs[r+1]+'\"':\"\");return d(e).isVoid?\"<\"+e+t+n+\"/>\":\"<\"+e+t+n+\"></\"+e+\">\"},h.prototype.getAttrs=function(){var e=[];return 0<this.classNames.length&&e.push(\"class\",this.classNames.join(\" \")),e.concat(this.attrs)},h.prototype.addAttribute=function(e,t){void 0===t&&(t=\"\"),this.attrs.push(e,t&&t.toLowerCase()||\"\")},h.prototype.addClassName=function(e){this.classNames.push(e.toLowerCase())},h.prototype.toString=function(){var t=this.element||\"\";if(this.classNames&&this.classNames.forEach(function(e){return t+=\".\"+e}),this.attrs)for(var e=0;e<this.attrs.length;e+=2){var n=this.attrs[e],r=this.attrs[e+1];t+=\"[\"+n+(r?\"=\"+r:\"\")+\"]\"}return this.notSelectors.forEach(function(e){return t+=\":not(\"+e+\")\"}),t},h);function h(){this.element=null,this.classNames=[],this.attrs=[],this.notSelectors=[]}var T=(a.createNotMatcher=function(e){var t=new a;return t.addSelectables(e,null),t},a.prototype.addSelectables=function(e,t){var n=null;1<e.length&&(n=new v(e),this._listContexts.push(n));for(var r=0;r<e.length;r++)this._addSelectable(e[r],t,n)},a.prototype._addSelectable=function(e,t,n){var r=this,i=e.element,o=e.classNames,a=e.attrs,s=new y(e,t,n);if(i&&((u=0===a.length&&0===o.length)?this._addTerminal(r._elementMap,i,s):r=this._addPartial(r._elementPartialMap,i)),o)for(var l=0;l<o.length;l++){var u=0===a.length&&l===o.length-1,c=o[l];u?this._addTerminal(r._classMap,c,s):r=this._addPartial(r._classPartialMap,c)}if(a)for(l=0;l<a.length;l+=2){u=l===a.length-2;var p=a[l],d=a[l+1];if(u){var h=r._attrValueMap,f=h.get(p);f||(f=new Map,h.set(p,f)),this._addTerminal(f,d,s)}else{var m=r._attrValuePartialMap,v=m.get(p);v||(v=new Map,m.set(p,v)),r=this._addPartial(v,d)}}},a.prototype._addTerminal=function(e,t,n){var r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)},a.prototype._addPartial=function(e,t){var n=e.get(t);return n||(n=new a,e.set(t,n)),n},a.prototype.match=function(e,t){for(var n=!1,r=e.element,i=e.classNames,o=e.attrs,a=0;a<this._listContexts.length;a++)this._listContexts[a].alreadyMatched=!1;if(n=this._matchTerminal(this._elementMap,r,e,t)||n,n=this._matchPartial(this._elementPartialMap,r,e,t)||n,i)for(a=0;a<i.length;a++){var s=i[a];n=this._matchTerminal(this._classMap,s,e,t)||n,n=this._matchPartial(this._classPartialMap,s,e,t)||n}if(o)for(a=0;a<o.length;a+=2){var l=o[a],u=o[a+1],c=this._attrValueMap.get(l);u&&(n=this._matchTerminal(c,\"\",e,t)||n),n=this._matchTerminal(c,u,e,t)||n;var p=this._attrValuePartialMap.get(l);u&&(n=this._matchPartial(p,\"\",e,t)||n),n=this._matchPartial(p,u,e,t)||n}return n},a.prototype._matchTerminal=function(e,t,n,r){if(!e||\"string\"!=typeof t)return!1;var i=e.get(t)||[],o=e.get(\"*\");if(o&&(i=i.concat(o)),0===i.length)return!1;for(var a=!1,s=0;s<i.length;s++)a=i[s].finalize(n,r)||a;return a},a.prototype._matchPartial=function(e,t,n,r){if(!e||\"string\"!=typeof t)return!1;var i=e.get(t);return!!i&&i.match(n,r)},a);function a(){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=[]}var v=function(e){this.selectors=e,this.alreadyMatched=!1},y=(g.prototype.finalize=function(e,t){var n=!0;return!(0<this.notSelectors.length)||this.listContext&&this.listContext.alreadyMatched||(n=!T.createNotMatcher(this.notSelectors).match(e,null)),!n||!t||this.listContext&&this.listContext.alreadyMatched||(this.listContext&&(this.listContext.alreadyMatched=!0),t(this.selector,this.cbContext)),n},g);function g(e,t,n){this.selector=e,this.cbContext=t,this.listContext=n,this.notSelectors=e.notSelectors}var I,_,P,b,w=oe(\"Inject\",function(e){return{token:e}}),x=oe(\"InjectionToken\",function(e){return{_desc:e,\"ɵprov\":void 0}}),C=oe(\"Attribute\",function(e){return{attributeName:e}}),S=oe(\"ContentChildren\",function(e,t){return void 0===t&&(t={}),m({selector:e,first:!1,isViewQuery:!1,descendants:!1},t)}),O=oe(\"ContentChild\",function(e,t){return void 0===t&&(t={}),m({selector:e,first:!0,isViewQuery:!1,descendants:!0},t)}),k=oe(\"ViewChildren\",function(e,t){return void 0===t&&(t={}),m({selector:e,first:!1,isViewQuery:!0,descendants:!0},t)}),D=oe(\"ViewChild\",function(e,t){return m({selector:e,first:!0,isViewQuery:!0,descendants:!0},t)}),A=oe(\"Directive\",function(e){return void 0===e&&(e={}),e});(_=I=I||{})[_.Emulated=0]=\"Emulated\",_[_.Native=1]=\"Native\",_[_.None=2]=\"None\",_[_.ShadowDom=3]=\"ShadowDom\",(b=P=P||{})[b.OnPush=0]=\"OnPush\",b[b.Default=1]=\"Default\";var M,R,N,j,F=oe(\"Component\",function(e){return void 0===e&&(e={}),m({changeDetection:P.Default},e)}),L=oe(\"Pipe\",function(e){return m({pure:!0},e)}),G=oe(\"Input\",function(e){return{bindingPropertyName:e}}),Y=oe(\"Output\",function(e){return{bindingPropertyName:e}}),K=oe(\"HostBinding\",function(e){return{hostPropertyName:e}}),Z=oe(\"HostListener\",function(e,t){return{eventName:e,args:t}}),Q=oe(\"NgModule\",function(e){return e}),X=oe(\"Injectable\",function(e){return void 0===e&&(e={}),e}),$={name:\"custom-elements\"},J={name:\"no-errors-schema\"},ee=oe(\"Optional\"),te=oe(\"Self\"),ne=oe(\"SkipSelf\"),re=oe(\"Host\"),ie=Function;function oe(r,i){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=i?i.apply(void 0,q(e)):{};return m({ngMetadataName:r},n)}return e.isTypeOf=function(e){return e&&e.ngMetadataName===r},e.ngMetadataName=r,e}function ae(e){var t=function(e){var t=e.classNames&&e.classNames.length?q([8],e.classNames):[];return q([e.element&&\"*\"!==e.element?e.element:\"\"],e.attrs,t)}(e),n=e.notSelectors&&e.notSelectors.length?e.notSelectors.map(function(e){return function(e){var t=e.classNames&&e.classNames.length?q([8],e.classNames):[];return e.element?q([5,e.element],e.attrs,t):e.attrs.length?q([3],e.attrs,t):e.classNames&&e.classNames.length?q([9],e.classNames):[]}(e)}):[];return t.concat.apply(t,q(n))}function se(e){return e?B.parse(e).map(ae):[]}(R=M=M||{})[R.NONE=0]=\"NONE\",R[R.HTML=1]=\"HTML\",R[R.STYLE=2]=\"STYLE\",R[R.SCRIPT=3]=\"SCRIPT\",R[R.URL=4]=\"URL\",R[R.RESOURCE_URL=5]=\"RESOURCE_URL\",(j=N=N||{})[j.Error=0]=\"Error\",j[j.Warning=1]=\"Warning\",j[j.Ignore=2]=\"Ignore\";var le,ue,ce=Object.freeze({createInject:w,createInjectionToken:x,createAttribute:C,createContentChildren:S,createContentChild:O,createViewChildren:k,createViewChild:D,createDirective:A,get ViewEncapsulation(){return I},get ChangeDetectionStrategy(){return P},createComponent:F,createPipe:L,createInput:G,createOutput:Y,createHostBinding:K,createHostListener:Z,createNgModule:Q,createInjectable:X,CUSTOM_ELEMENTS_SCHEMA:$,NO_ERRORS_SCHEMA:J,createOptional:ee,createSelf:te,createSkipSelf:ne,createHost:re,Type:ie,get SecurityContext(){return M},get MissingTranslationStrategy(){return N},parseSelectorToR3Selector:se});(ue=le=le||{})[ue.Const=0]=\"Const\";var pe,de=(he.prototype.hasModifier=function(e){return-1!==this.modifiers.indexOf(e)},he);function he(e){void 0===e&&(e=null),(this.modifiers=e)||(this.modifiers=[])}(pe=E.BuiltinTypeName||(E.BuiltinTypeName={}))[pe.Dynamic=0]=\"Dynamic\",pe[pe.Bool=1]=\"Bool\",pe[pe.String=2]=\"String\",pe[pe.Int=3]=\"Int\",pe[pe.Number=4]=\"Number\",pe[pe.Function=5]=\"Function\",pe[pe.Inferred=6]=\"Inferred\",pe[pe.None=7]=\"None\";var fe,me=(f(ve,fe=de),ve.prototype.visitType=function(e,t){return e.visitBuiltinType(this,t)},ve);function ve(e,t){void 0===t&&(t=null);var n=fe.call(this,t)||this;return n.name=e,n}var ye,ge=(f(_e,ye=de),_e.prototype.visitType=function(e,t){return e.visitExpressionType(this,t)},_e);function _e(e,t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=ye.call(this,t)||this;return r.value=e,r.typeParams=n,r}var be,we=(f(xe,be=de),xe.prototype.visitType=function(e,t){return e.visitArrayType(this,t)},xe);function xe(e,t){void 0===t&&(t=null);var n=be.call(this,t)||this;return n.of=e,n}var Ce,Se=(f(Ee,Ce=de),Ee.prototype.visitType=function(e,t){return e.visitMapType(this,t)},Ee);function Ee(e,t){void 0===t&&(t=null);var n=Ce.call(this,t)||this;return n.valueType=e||null,n}var Oe,ke=new me(E.BuiltinTypeName.Dynamic),De=new me(E.BuiltinTypeName.Inferred),Te=new me(E.BuiltinTypeName.Bool),Ie=(new me(E.BuiltinTypeName.Int),new me(E.BuiltinTypeName.Number)),Pe=new me(E.BuiltinTypeName.String),Ae=(new me(E.BuiltinTypeName.Function),new me(E.BuiltinTypeName.None));function Me(e,t){return null==e||null==t?e==t:e.isEquivalent(t)}function Re(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(!e[r].isEquivalent(t[r]))return!1;return!0}(Oe=E.BinaryOperator||(E.BinaryOperator={}))[Oe.Equals=0]=\"Equals\",Oe[Oe.NotEquals=1]=\"NotEquals\",Oe[Oe.Identical=2]=\"Identical\",Oe[Oe.NotIdentical=3]=\"NotIdentical\",Oe[Oe.Minus=4]=\"Minus\",Oe[Oe.Plus=5]=\"Plus\",Oe[Oe.Divide=6]=\"Divide\",Oe[Oe.Multiply=7]=\"Multiply\",Oe[Oe.Modulo=8]=\"Modulo\",Oe[Oe.And=9]=\"And\",Oe[Oe.Or=10]=\"Or\",Oe[Oe.BitwiseAnd=11]=\"BitwiseAnd\",Oe[Oe.Lower=12]=\"Lower\",Oe[Oe.LowerEquals=13]=\"LowerEquals\",Oe[Oe.Bigger=14]=\"Bigger\",Oe[Oe.BiggerEquals=15]=\"BiggerEquals\";var Ne,je=(Fe.prototype.prop=function(e,t){return new qt(this,e,null,t)},Fe.prototype.key=function(e,t,n){return new Gt(this,e,t,n)},Fe.prototype.callMethod=function(e,t,n){return new it(this,e,t,null,n)},Fe.prototype.callFn=function(e,t){return new st(this,e,null,t)},Fe.prototype.instantiate=function(e,t,n){return new ct(this,e,t,n)},Fe.prototype.conditional=function(e,t,n){return void 0===t&&(t=null),new Ct(this,e,t,null,n)},Fe.prototype.equals=function(e,t){return new Bt(E.BinaryOperator.Equals,this,e,null,t)},Fe.prototype.notEquals=function(e,t){return new Bt(E.BinaryOperator.NotEquals,this,e,null,t)},Fe.prototype.identical=function(e,t){return new Bt(E.BinaryOperator.Identical,this,e,null,t)},Fe.prototype.notIdentical=function(e,t){return new Bt(E.BinaryOperator.NotIdentical,this,e,null,t)},Fe.prototype.minus=function(e,t){return new Bt(E.BinaryOperator.Minus,this,e,null,t)},Fe.prototype.plus=function(e,t){return new Bt(E.BinaryOperator.Plus,this,e,null,t)},Fe.prototype.divide=function(e,t){return new Bt(E.BinaryOperator.Divide,this,e,null,t)},Fe.prototype.multiply=function(e,t){return new Bt(E.BinaryOperator.Multiply,this,e,null,t)},Fe.prototype.modulo=function(e,t){return new Bt(E.BinaryOperator.Modulo,this,e,null,t)},Fe.prototype.and=function(e,t){return new Bt(E.BinaryOperator.And,this,e,null,t)},Fe.prototype.bitwiseAnd=function(e,t,n){return void 0===n&&(n=!0),new Bt(E.BinaryOperator.BitwiseAnd,this,e,null,t,n)},Fe.prototype.or=function(e,t){return new Bt(E.BinaryOperator.Or,this,e,null,t)},Fe.prototype.lower=function(e,t){return new Bt(E.BinaryOperator.Lower,this,e,null,t)},Fe.prototype.lowerEquals=function(e,t){return new Bt(E.BinaryOperator.LowerEquals,this,e,null,t)},Fe.prototype.bigger=function(e,t){return new Bt(E.BinaryOperator.Bigger,this,e,null,t)},Fe.prototype.biggerEquals=function(e,t){return new Bt(E.BinaryOperator.BiggerEquals,this,e,null,t)},Fe.prototype.isBlank=function(e){return this.equals(ln,e)},Fe.prototype.cast=function(e,t){return new At(this,e,t)},Fe.prototype.toStmt=function(){return new gn(this,null)},Fe);function Fe(e,t){this.type=e||null,this.sourceSpan=t||null}(Ne=E.BuiltinVar||(E.BuiltinVar={}))[Ne.This=0]=\"This\",Ne[Ne.Super=1]=\"Super\",Ne[Ne.CatchError=2]=\"CatchError\",Ne[Ne.CatchStack=3]=\"CatchStack\";var Le,Ve=(f(Be,Le=je),Be.prototype.isEquivalent=function(e){return e instanceof Be&&this.name===e.name&&this.builtin===e.builtin},Be.prototype.isConstant=function(){return!1},Be.prototype.visitExpression=function(e,t){return e.visitReadVarExpr(this,t)},Be.prototype.set=function(e){if(!this.name)throw new Error(\"Built in variable \"+this.builtin+\" can not be assigned to.\");return new Ke(this.name,e,null,this.sourceSpan)},Be);function Be(e,t,n){var r=Le.call(this,t,n)||this;return\"string\"==typeof e?(r.name=e,r.builtin=null):(r.name=null,r.builtin=e),r}var Ue,ze=(f(qe,Ue=je),qe.prototype.visitExpression=function(e,t){return e.visitTypeofExpr(this,t)},qe.prototype.isEquivalent=function(e){return e instanceof qe&&e.expr.isEquivalent(this.expr)},qe.prototype.isConstant=function(){return this.expr.isConstant()},qe);function qe(e,t,n){var r=Ue.call(this,t,n)||this;return r.expr=e,r}var He,We=(f(Ge,He=je),Ge.prototype.isEquivalent=function(e){return e instanceof Ge&&this.node===e.node},Ge.prototype.isConstant=function(){return!1},Ge.prototype.visitExpression=function(e,t){return e.visitWrappedNodeExpr(this,t)},Ge);function Ge(e,t,n){var r=He.call(this,t,n)||this;return r.node=e,r}var Ye,Ke=(f(Ze,Ye=je),Ze.prototype.isEquivalent=function(e){return e instanceof Ze&&this.name===e.name&&this.value.isEquivalent(e.value)},Ze.prototype.isConstant=function(){return!1},Ze.prototype.visitExpression=function(e,t){return e.visitWriteVarExpr(this,t)},Ze.prototype.toDeclStmt=function(e,t){return new dn(this.name,this.value,e,t,this.sourceSpan)},Ze.prototype.toConstDecl=function(){return this.toDeclStmt(De,[E.StmtModifier.Final])},Ze);function Ze(e,t,n,r){var i=Ye.call(this,n||t.type,r)||this;return i.name=e,i.value=t,i}var Qe,Xe=(f($e,Qe=je),$e.prototype.isEquivalent=function(e){return e instanceof $e&&this.receiver.isEquivalent(e.receiver)&&this.index.isEquivalent(e.index)&&this.value.isEquivalent(e.value)},$e.prototype.isConstant=function(){return!1},$e.prototype.visitExpression=function(e,t){return e.visitWriteKeyExpr(this,t)},$e);function $e(e,t,n,r,i){var o=Qe.call(this,r||n.type,i)||this;return o.receiver=e,o.index=t,o.value=n,o}var Je,et,tt=(f(nt,Je=je),nt.prototype.isEquivalent=function(e){return e instanceof nt&&this.receiver.isEquivalent(e.receiver)&&this.name===e.name&&this.value.isEquivalent(e.value)},nt.prototype.isConstant=function(){return!1},nt.prototype.visitExpression=function(e,t){return e.visitWritePropExpr(this,t)},nt);function nt(e,t,n,r,i){var o=Je.call(this,r||n.type,i)||this;return o.receiver=e,o.name=t,o.value=n,o}(et=E.BuiltinMethod||(E.BuiltinMethod={}))[et.ConcatArray=0]=\"ConcatArray\",et[et.SubscribeObservable=1]=\"SubscribeObservable\",et[et.Bind=2]=\"Bind\";var rt,it=(f(ot,rt=je),ot.prototype.isEquivalent=function(e){return e instanceof ot&&this.receiver.isEquivalent(e.receiver)&&this.name===e.name&&this.builtin===e.builtin&&Re(this.args,e.args)},ot.prototype.isConstant=function(){return!1},ot.prototype.visitExpression=function(e,t){return e.visitInvokeMethodExpr(this,t)},ot);function ot(e,t,n,r,i){var o=rt.call(this,r,i)||this;return o.receiver=e,o.args=n,\"string\"==typeof t?(o.name=t,o.builtin=null):(o.name=null,o.builtin=t),o}var at,st=(f(lt,at=je),lt.prototype.isEquivalent=function(e){return e instanceof lt&&this.fn.isEquivalent(e.fn)&&Re(this.args,e.args)&&this.pure===e.pure},lt.prototype.isConstant=function(){return!1},lt.prototype.visitExpression=function(e,t){return e.visitInvokeFunctionExpr(this,t)},lt);function lt(e,t,n,r,i){void 0===i&&(i=!1);var o=at.call(this,n,r)||this;return o.fn=e,o.args=t,o.pure=i,o}var ut,ct=(f(pt,ut=je),pt.prototype.isEquivalent=function(e){return e instanceof pt&&this.classExpr.isEquivalent(e.classExpr)&&Re(this.args,e.args)},pt.prototype.isConstant=function(){return!1},pt.prototype.visitExpression=function(e,t){return e.visitInstantiateExpr(this,t)},pt);function pt(e,t,n,r){var i=ut.call(this,n,r)||this;return i.classExpr=e,i.args=t,i}var dt,ht=(f(ft,dt=je),ft.prototype.isEquivalent=function(e){return e instanceof ft&&this.value===e.value},ft.prototype.isConstant=function(){return!0},ft.prototype.visitExpression=function(e,t){return e.visitLiteralExpr(this,t)},ft);function ft(e,t,n){var r=dt.call(this,t,n)||this;return r.value=e,r}var mt,vt=(f(yt,mt=je),yt.prototype.isEquivalent=function(e){return!1},yt.prototype.isConstant=function(){return!1},yt.prototype.visitExpression=function(e,t){return e.visitLocalizedString(this,t)},yt);function yt(e,t,n,r,i){var o=mt.call(this,Pe,i)||this;return o.metaBlock=e,o.messageParts=t,o.placeHolderNames=n,o.expressions=r,o}var gt,_t=(f(bt,gt=je),bt.prototype.isEquivalent=function(e){return e instanceof bt&&this.value.name===e.value.name&&this.value.moduleName===e.value.moduleName&&this.value.runtime===e.value.runtime},bt.prototype.isConstant=function(){return!1},bt.prototype.visitExpression=function(e,t){return e.visitExternalExpr(this,t)},bt);function bt(e,t,n,r){void 0===n&&(n=null);var i=gt.call(this,t,r)||this;return i.value=e,i.typeParams=n,i}var wt,xt=function(e,t,n){this.moduleName=e,this.name=t,this.runtime=n},Ct=(f(St,wt=je),St.prototype.isEquivalent=function(e){return e instanceof St&&this.condition.isEquivalent(e.condition)&&this.trueCase.isEquivalent(e.trueCase)&&Me(this.falseCase,e.falseCase)},St.prototype.isConstant=function(){return!1},St.prototype.visitExpression=function(e,t){return e.visitConditionalExpr(this,t)},St);function St(e,t,n,r,i){void 0===n&&(n=null);var o=wt.call(this,r||t.type,i)||this;return o.condition=e,o.falseCase=n,o.trueCase=t,o}var Et,Ot=(f(kt,Et=je),kt.prototype.isEquivalent=function(e){return e instanceof kt&&this.condition.isEquivalent(e.condition)},kt.prototype.isConstant=function(){return!1},kt.prototype.visitExpression=function(e,t){return e.visitNotExpr(this,t)},kt);function kt(e,t){var n=Et.call(this,Te,t)||this;return n.condition=e,n}var Dt,Tt=(f(It,Dt=je),It.prototype.isEquivalent=function(e){return e instanceof It&&this.condition.isEquivalent(e.condition)},It.prototype.isConstant=function(){return!1},It.prototype.visitExpression=function(e,t){return e.visitAssertNotNullExpr(this,t)},It);function It(e,t){var n=Dt.call(this,e.type,t)||this;return n.condition=e,n}var Pt,At=(f(Mt,Pt=je),Mt.prototype.isEquivalent=function(e){return e instanceof Mt&&this.value.isEquivalent(e.value)},Mt.prototype.isConstant=function(){return!1},Mt.prototype.visitExpression=function(e,t){return e.visitCastExpr(this,t)},Mt);function Mt(e,t,n){var r=Pt.call(this,t,n)||this;return r.value=e,r}var Rt=(Nt.prototype.isEquivalent=function(e){return this.name===e.name},Nt);function Nt(e,t){void 0===t&&(t=null),this.name=e,this.type=t}var jt,Ft=(f(Lt,jt=je),Lt.prototype.isEquivalent=function(e){return e instanceof Lt&&Re(this.params,e.params)&&Re(this.statements,e.statements)},Lt.prototype.isConstant=function(){return!1},Lt.prototype.visitExpression=function(e,t){return e.visitFunctionExpr(this,t)},Lt.prototype.toDeclStmt=function(e,t){return void 0===t&&(t=null),new mn(e,this.params,this.statements,this.type,t,this.sourceSpan)},Lt);function Lt(e,t,n,r,i){var o=jt.call(this,n,r)||this;return o.params=e,o.statements=t,o.name=i,o}var Vt,Bt=(f(Ut,Vt=je),Ut.prototype.isEquivalent=function(e){return e instanceof Ut&&this.operator===e.operator&&this.lhs.isEquivalent(e.lhs)&&this.rhs.isEquivalent(e.rhs)},Ut.prototype.isConstant=function(){return!1},Ut.prototype.visitExpression=function(e,t){return e.visitBinaryOperatorExpr(this,t)},Ut);function Ut(e,t,n,r,i,o){void 0===o&&(o=!0);var a=Vt.call(this,r||t.type,i)||this;return a.operator=e,a.rhs=n,a.parens=o,a.lhs=t,a}var zt,qt=(f(Ht,zt=je),Ht.prototype.isEquivalent=function(e){return e instanceof Ht&&this.receiver.isEquivalent(e.receiver)&&this.name===e.name},Ht.prototype.isConstant=function(){return!1},Ht.prototype.visitExpression=function(e,t){return e.visitReadPropExpr(this,t)},Ht.prototype.set=function(e){return new tt(this.receiver,this.name,e,null,this.sourceSpan)},Ht);function Ht(e,t,n,r){var i=zt.call(this,n,r)||this;return i.receiver=e,i.name=t,i}var Wt,Gt=(f(Yt,Wt=je),Yt.prototype.isEquivalent=function(e){return e instanceof Yt&&this.receiver.isEquivalent(e.receiver)&&this.index.isEquivalent(e.index)},Yt.prototype.isConstant=function(){return!1},Yt.prototype.visitExpression=function(e,t){return e.visitReadKeyExpr(this,t)},Yt.prototype.set=function(e){return new Xe(this.receiver,this.index,e,null,this.sourceSpan)},Yt);function Yt(e,t,n,r){var i=Wt.call(this,n,r)||this;return i.receiver=e,i.index=t,i}var Kt,Zt=(f(Qt,Kt=je),Qt.prototype.isConstant=function(){return this.entries.every(function(e){return e.isConstant()})},Qt.prototype.isEquivalent=function(e){return e instanceof Qt&&Re(this.entries,e.entries)},Qt.prototype.visitExpression=function(e,t){return e.visitLiteralArrayExpr(this,t)},Qt);function Qt(e,t,n){var r=Kt.call(this,t,n)||this;return r.entries=e,r}var Xt=($t.prototype.isEquivalent=function(e){return this.key===e.key&&this.value.isEquivalent(e.value)},$t);function $t(e,t,n){this.key=e,this.value=t,this.quoted=n}var Jt,en=(f(tn,Jt=je),tn.prototype.isEquivalent=function(e){return e instanceof tn&&Re(this.entries,e.entries)},tn.prototype.isConstant=function(){return this.entries.every(function(e){return e.value.isConstant()})},tn.prototype.visitExpression=function(e,t){return e.visitLiteralMapExpr(this,t)},tn);function tn(e,t,n){var r=Jt.call(this,t,n)||this;return r.entries=e,r.valueType=null,t&&(r.valueType=t.valueType),r}var nn,rn=(f(on,nn=je),on.prototype.isEquivalent=function(e){return e instanceof on&&Re(this.parts,e.parts)},on.prototype.isConstant=function(){return!1},on.prototype.visitExpression=function(e,t){return e.visitCommaExpr(this,t)},on);function on(e,t){var n=nn.call(this,e[e.length-1].type,t)||this;return n.parts=e,n}new Ve(E.BuiltinVar.This,null,null),new Ve(E.BuiltinVar.Super,null,null),new Ve(E.BuiltinVar.CatchError,null,null),new Ve(E.BuiltinVar.CatchStack,null,null);var an,sn=new ht(null,null,null),ln=new ht(null,De,null);(an=E.StmtModifier||(E.StmtModifier={}))[an.Final=0]=\"Final\",an[an.Private=1]=\"Private\",an[an.Exported=2]=\"Exported\",an[an.Static=3]=\"Static\";var un=(cn.prototype.hasModifier=function(e){return-1!==this.modifiers.indexOf(e)},cn);function cn(e,t){this.modifiers=e||[],this.sourceSpan=t||null}var pn,dn=(f(hn,pn=un),hn.prototype.isEquivalent=function(e){return e instanceof hn&&this.name===e.name&&(this.value?!!e.value&&this.value.isEquivalent(e.value):!e.value)},hn.prototype.visitStatement=function(e,t){return e.visitDeclareVarStmt(this,t)},hn);function hn(e,t,n,r,i){void 0===r&&(r=null);var o=pn.call(this,r,i)||this;return o.name=e,o.value=t,o.type=n||t&&t.type||null,o}var fn,mn=(f(vn,fn=un),vn.prototype.isEquivalent=function(e){return e instanceof vn&&Re(this.params,e.params)&&Re(this.statements,e.statements)},vn.prototype.visitStatement=function(e,t){return e.visitDeclareFunctionStmt(this,t)},vn);function vn(e,t,n,r,i,o){void 0===i&&(i=null);var a=fn.call(this,i,o)||this;return a.name=e,a.params=t,a.statements=n,a.type=r||null,a}var yn,gn=(f(_n,yn=un),_n.prototype.isEquivalent=function(e){return e instanceof _n&&this.expr.isEquivalent(e.expr)},_n.prototype.visitStatement=function(e,t){return e.visitExpressionStmt(this,t)},_n);function _n(e,t){var n=yn.call(this,null,t)||this;return n.expr=e,n}var bn,wn=(f(xn,bn=un),xn.prototype.isEquivalent=function(e){return e instanceof xn&&this.value.isEquivalent(e.value)},xn.prototype.visitStatement=function(e,t){return e.visitReturnStmt(this,t)},xn);function xn(e,t){var n=bn.call(this,null,t)||this;return n.value=e,n}var Cn=(Sn.prototype.hasModifier=function(e){return-1!==this.modifiers.indexOf(e)},Sn);function Sn(e,t){(this.modifiers=t)||(this.modifiers=[]),this.type=e||null}var En,On=(f(kn,En=Cn),kn.prototype.isEquivalent=function(e){return this.name===e.name},kn);function kn(e,t,n,r){void 0===n&&(n=null);var i=En.call(this,t,n)||this;return i.name=e,i.initializer=r,i}var Dn,Tn=(f(In,Dn=Cn),In.prototype.isEquivalent=function(e){return this.name===e.name&&Re(this.body,e.body)},In);function In(e,t,n,r,i){void 0===i&&(i=null);var o=Dn.call(this,r,i)||this;return o.name=e,o.params=t,o.body=n,o}var Pn,An=(f(Mn,Pn=Cn),Mn.prototype.isEquivalent=function(e){return this.name===e.name&&Re(this.body,e.body)},Mn);function Mn(e,t,n,r){void 0===r&&(r=null);var i=Pn.call(this,n,r)||this;return i.name=e,i.body=t,i}var Rn,Nn=(f(jn,Rn=un),jn.prototype.isEquivalent=function(e){return e instanceof jn&&this.name===e.name&&Me(this.parent,e.parent)&&Re(this.fields,e.fields)&&Re(this.getters,e.getters)&&this.constructorMethod.isEquivalent(e.constructorMethod)&&Re(this.methods,e.methods)},jn.prototype.visitStatement=function(e,t){return e.visitDeclareClassStmt(this,t)},jn);function jn(e,t,n,r,i,o,a,s){void 0===a&&(a=null);var l=Rn.call(this,a,s)||this;return l.name=e,l.parent=t,l.fields=n,l.getters=r,l.constructorMethod=i,l.methods=o,l}var Fn,Ln=(f(Vn,Fn=un),Vn.prototype.isEquivalent=function(e){return e instanceof Vn&&this.condition.isEquivalent(e.condition)&&Re(this.trueCase,e.trueCase)&&Re(this.falseCase,e.falseCase)},Vn.prototype.visitStatement=function(e,t){return e.visitIfStmt(this,t)},Vn);function Vn(e,t,n,r){void 0===n&&(n=[]);var i=Fn.call(this,null,r)||this;return i.condition=e,i.trueCase=t,i.falseCase=n,i}var Bn,Un=(f(zn,Bn=un),zn.prototype.isEquivalent=function(e){return e instanceof zn},zn.prototype.visitStatement=function(e,t){return e.visitCommentStmt(this,t)},zn);function zn(e,t,n){void 0===t&&(t=!1);var r=Bn.call(this,null,n)||this;return r.comment=e,r.multiline=t,r}var qn,Hn=(f(Wn,qn=un),Wn.prototype.isEquivalent=function(e){return e instanceof Wn&&this.toString()===e.toString()},Wn.prototype.visitStatement=function(e,t){return e.visitJSDocCommentStmt(this,t)},Wn.prototype.toString=function(){return function(e){var t,n;if(0===e.length)return\"\";var r=\"*\\n\";try{for(var i=z(e),o=i.next();!o.done;o=i.next()){var a=o.value;r+=\" *\",r+=Cr(a).replace(/\\n/g,\"\\n * \"),r+=\"\\n\"}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r+=\" \"}(this.tags)},Wn);function Wn(e,t){void 0===e&&(e=[]);var n=qn.call(this,null,t)||this;return n.tags=e,n}var Gn,Yn=(f(Kn,Gn=un),Kn.prototype.isEquivalent=function(e){return e instanceof Kn&&Re(this.bodyStmts,e.bodyStmts)&&Re(this.catchStmts,e.catchStmts)},Kn.prototype.visitStatement=function(e,t){return e.visitTryCatchStmt(this,t)},Kn);function Kn(e,t,n){var r=Gn.call(this,null,n)||this;return r.bodyStmts=e,r.catchStmts=t,r}var Zn,Qn=(f(Xn,Zn=un),Xn.prototype.isEquivalent=function(e){return e instanceof Yn&&this.error.isEquivalent(e.error)},Xn.prototype.visitStatement=function(e,t){return e.visitThrowStmt(this,t)},Xn);function Xn(e,t){var n=Zn.call(this,null,t)||this;return n.error=e,n}var $n=(Jn.prototype.transformExpr=function(e,t){return e},Jn.prototype.transformStmt=function(e,t){return e},Jn.prototype.visitReadVarExpr=function(e,t){return this.transformExpr(e,t)},Jn.prototype.visitWrappedNodeExpr=function(e,t){return this.transformExpr(e,t)},Jn.prototype.visitTypeofExpr=function(e,t){return this.transformExpr(new ze(e.expr.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitWriteVarExpr=function(e,t){return this.transformExpr(new Ke(e.name,e.value.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitWriteKeyExpr=function(e,t){return this.transformExpr(new Xe(e.receiver.visitExpression(this,t),e.index.visitExpression(this,t),e.value.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitWritePropExpr=function(e,t){return this.transformExpr(new tt(e.receiver.visitExpression(this,t),e.name,e.value.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitInvokeMethodExpr=function(e,t){var n=e.builtin||e.name;return this.transformExpr(new it(e.receiver.visitExpression(this,t),n,this.visitAllExpressions(e.args,t),e.type,e.sourceSpan),t)},Jn.prototype.visitInvokeFunctionExpr=function(e,t){return this.transformExpr(new st(e.fn.visitExpression(this,t),this.visitAllExpressions(e.args,t),e.type,e.sourceSpan),t)},Jn.prototype.visitInstantiateExpr=function(e,t){return this.transformExpr(new ct(e.classExpr.visitExpression(this,t),this.visitAllExpressions(e.args,t),e.type,e.sourceSpan),t)},Jn.prototype.visitLiteralExpr=function(e,t){return this.transformExpr(e,t)},Jn.prototype.visitLocalizedString=function(e,t){return this.transformExpr(new vt(e.metaBlock,e.messageParts,e.placeHolderNames,this.visitAllExpressions(e.expressions,t),e.sourceSpan),t)},Jn.prototype.visitExternalExpr=function(e,t){return this.transformExpr(e,t)},Jn.prototype.visitConditionalExpr=function(e,t){return this.transformExpr(new Ct(e.condition.visitExpression(this,t),e.trueCase.visitExpression(this,t),e.falseCase.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitNotExpr=function(e,t){return this.transformExpr(new Ot(e.condition.visitExpression(this,t),e.sourceSpan),t)},Jn.prototype.visitAssertNotNullExpr=function(e,t){return this.transformExpr(new Tt(e.condition.visitExpression(this,t),e.sourceSpan),t)},Jn.prototype.visitCastExpr=function(e,t){return this.transformExpr(new At(e.value.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitFunctionExpr=function(e,t){return this.transformExpr(new Ft(e.params,this.visitAllStatements(e.statements,t),e.type,e.sourceSpan),t)},Jn.prototype.visitBinaryOperatorExpr=function(e,t){return this.transformExpr(new Bt(e.operator,e.lhs.visitExpression(this,t),e.rhs.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitReadPropExpr=function(e,t){return this.transformExpr(new qt(e.receiver.visitExpression(this,t),e.name,e.type,e.sourceSpan),t)},Jn.prototype.visitReadKeyExpr=function(e,t){return this.transformExpr(new Gt(e.receiver.visitExpression(this,t),e.index.visitExpression(this,t),e.type,e.sourceSpan),t)},Jn.prototype.visitLiteralArrayExpr=function(e,t){return this.transformExpr(new Zt(this.visitAllExpressions(e.entries,t),e.type,e.sourceSpan),t)},Jn.prototype.visitLiteralMapExpr=function(e,t){var n=this,r=e.entries.map(function(e){return new Xt(e.key,e.value.visitExpression(n,t),e.quoted)}),i=new Se(e.valueType,null);return this.transformExpr(new en(r,i,e.sourceSpan),t)},Jn.prototype.visitCommaExpr=function(e,t){return this.transformExpr(new rn(this.visitAllExpressions(e.parts,t),e.sourceSpan),t)},Jn.prototype.visitAllExpressions=function(e,t){var n=this;return e.map(function(e){return e.visitExpression(n,t)})},Jn.prototype.visitDeclareVarStmt=function(e,t){var n=e.value&&e.value.visitExpression(this,t);return this.transformStmt(new dn(e.name,n,e.type,e.modifiers,e.sourceSpan),t)},Jn.prototype.visitDeclareFunctionStmt=function(e,t){return this.transformStmt(new mn(e.name,e.params,this.visitAllStatements(e.statements,t),e.type,e.modifiers,e.sourceSpan),t)},Jn.prototype.visitExpressionStmt=function(e,t){return this.transformStmt(new gn(e.expr.visitExpression(this,t),e.sourceSpan),t)},Jn.prototype.visitReturnStmt=function(e,t){return this.transformStmt(new wn(e.value.visitExpression(this,t),e.sourceSpan),t)},Jn.prototype.visitDeclareClassStmt=function(e,t){var n=this,r=e.parent.visitExpression(this,t),i=e.getters.map(function(e){return new An(e.name,n.visitAllStatements(e.body,t),e.type,e.modifiers)}),o=e.constructorMethod&&new Tn(e.constructorMethod.name,e.constructorMethod.params,this.visitAllStatements(e.constructorMethod.body,t),e.constructorMethod.type,e.constructorMethod.modifiers),a=e.methods.map(function(e){return new Tn(e.name,e.params,n.visitAllStatements(e.body,t),e.type,e.modifiers)});return this.transformStmt(new Nn(e.name,r,e.fields,i,o,a,e.modifiers,e.sourceSpan),t)},Jn.prototype.visitIfStmt=function(e,t){return this.transformStmt(new Ln(e.condition.visitExpression(this,t),this.visitAllStatements(e.trueCase,t),this.visitAllStatements(e.falseCase,t),e.sourceSpan),t)},Jn.prototype.visitTryCatchStmt=function(e,t){return this.transformStmt(new Yn(this.visitAllStatements(e.bodyStmts,t),this.visitAllStatements(e.catchStmts,t),e.sourceSpan),t)},Jn.prototype.visitThrowStmt=function(e,t){return this.transformStmt(new Qn(e.error.visitExpression(this,t),e.sourceSpan),t)},Jn.prototype.visitCommentStmt=function(e,t){return this.transformStmt(e,t)},Jn.prototype.visitJSDocCommentStmt=function(e,t){return this.transformStmt(e,t)},Jn.prototype.visitAllStatements=function(e,t){var n=this;return e.map(function(e){return e.visitStatement(n,t)})},Jn);function Jn(){}var er=(tr.prototype.visitType=function(e,t){return e},tr.prototype.visitExpression=function(e,t){return e.type&&e.type.visitType(this,t),e},tr.prototype.visitBuiltinType=function(e,t){return this.visitType(e,t)},tr.prototype.visitExpressionType=function(e,t){var n=this;return e.value.visitExpression(this,t),null!==e.typeParams&&e.typeParams.forEach(function(e){return n.visitType(e,t)}),this.visitType(e,t)},tr.prototype.visitArrayType=function(e,t){return this.visitType(e,t)},tr.prototype.visitMapType=function(e,t){return this.visitType(e,t)},tr.prototype.visitWrappedNodeExpr=function(e,t){return e},tr.prototype.visitTypeofExpr=function(e,t){return this.visitExpression(e,t)},tr.prototype.visitReadVarExpr=function(e,t){return this.visitExpression(e,t)},tr.prototype.visitWriteVarExpr=function(e,t){return e.value.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitWriteKeyExpr=function(e,t){return e.receiver.visitExpression(this,t),e.index.visitExpression(this,t),e.value.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitWritePropExpr=function(e,t){return e.receiver.visitExpression(this,t),e.value.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitInvokeMethodExpr=function(e,t){return e.receiver.visitExpression(this,t),this.visitAllExpressions(e.args,t),this.visitExpression(e,t)},tr.prototype.visitInvokeFunctionExpr=function(e,t){return e.fn.visitExpression(this,t),this.visitAllExpressions(e.args,t),this.visitExpression(e,t)},tr.prototype.visitInstantiateExpr=function(e,t){return e.classExpr.visitExpression(this,t),this.visitAllExpressions(e.args,t),this.visitExpression(e,t)},tr.prototype.visitLiteralExpr=function(e,t){return this.visitExpression(e,t)},tr.prototype.visitLocalizedString=function(e,t){return this.visitExpression(e,t)},tr.prototype.visitExternalExpr=function(e,t){var n=this;return e.typeParams&&e.typeParams.forEach(function(e){return e.visitType(n,t)}),this.visitExpression(e,t)},tr.prototype.visitConditionalExpr=function(e,t){return e.condition.visitExpression(this,t),e.trueCase.visitExpression(this,t),e.falseCase.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitNotExpr=function(e,t){return e.condition.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitAssertNotNullExpr=function(e,t){return e.condition.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitCastExpr=function(e,t){return e.value.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitFunctionExpr=function(e,t){return this.visitAllStatements(e.statements,t),this.visitExpression(e,t)},tr.prototype.visitBinaryOperatorExpr=function(e,t){return e.lhs.visitExpression(this,t),e.rhs.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitReadPropExpr=function(e,t){return e.receiver.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitReadKeyExpr=function(e,t){return e.receiver.visitExpression(this,t),e.index.visitExpression(this,t),this.visitExpression(e,t)},tr.prototype.visitLiteralArrayExpr=function(e,t){return this.visitAllExpressions(e.entries,t),this.visitExpression(e,t)},tr.prototype.visitLiteralMapExpr=function(e,t){var n=this;return e.entries.forEach(function(e){return e.value.visitExpression(n,t)}),this.visitExpression(e,t)},tr.prototype.visitCommaExpr=function(e,t){return this.visitAllExpressions(e.parts,t),this.visitExpression(e,t)},tr.prototype.visitAllExpressions=function(e,t){var n=this;e.forEach(function(e){return e.visitExpression(n,t)})},tr.prototype.visitDeclareVarStmt=function(e,t){return e.value&&e.value.visitExpression(this,t),e.type&&e.type.visitType(this,t),e},tr.prototype.visitDeclareFunctionStmt=function(e,t){return this.visitAllStatements(e.statements,t),e.type&&e.type.visitType(this,t),e},tr.prototype.visitExpressionStmt=function(e,t){return e.expr.visitExpression(this,t),e},tr.prototype.visitReturnStmt=function(e,t){return e.value.visitExpression(this,t),e},tr.prototype.visitDeclareClassStmt=function(e,t){var n=this;return e.parent.visitExpression(this,t),e.getters.forEach(function(e){return n.visitAllStatements(e.body,t)}),e.constructorMethod&&this.visitAllStatements(e.constructorMethod.body,t),e.methods.forEach(function(e){return n.visitAllStatements(e.body,t)}),e},tr.prototype.visitIfStmt=function(e,t){return e.condition.visitExpression(this,t),this.visitAllStatements(e.trueCase,t),this.visitAllStatements(e.falseCase,t),e},tr.prototype.visitTryCatchStmt=function(e,t){return this.visitAllStatements(e.bodyStmts,t),this.visitAllStatements(e.catchStmts,t),e},tr.prototype.visitThrowStmt=function(e,t){return e.error.visitExpression(this,t),e},tr.prototype.visitCommentStmt=function(e,t){return e},tr.prototype.visitJSDocCommentStmt=function(e,t){return e},tr.prototype.visitAllStatements=function(e,t){var n=this;e.forEach(function(e){return e.visitStatement(n,t)})},tr);function tr(){}function nr(e){var t=new ir;return t.visitAllStatements(e,null),t.varNames}var rr,ir=(f(or,rr=er),or.prototype.visitDeclareFunctionStmt=function(e,t){return e},or.prototype.visitDeclareClassStmt=function(e,t){return e},or.prototype.visitReadVarExpr=function(e,t){return e.name&&this.varNames.add(e.name),null},or);function or(){var e=null!==rr&&rr.apply(this,arguments)||this;return e.varNames=new Set,e}var ar,sr=(f(lr,ar=er),lr.prototype.visitExternalExpr=function(e,t){return this.externalReferences.push(e.value),ar.prototype.visitExternalExpr.call(this,e,t)},lr);function lr(){var e=null!==ar&&ar.apply(this,arguments)||this;return e.externalReferences=[],e}function ur(e,t){if(!t)return e;var n=new dr(t);return e.visitStatement(n,null)}function cr(e,t){if(!t)return e;var n=new dr(t);return e.visitExpression(n,null)}var pr,dr=(f(hr,pr=$n),hr.prototype._clone=function(e){var t,n,r=Object.create(e.constructor.prototype);try{for(var i=z(Object.keys(e)),o=i.next();!o.done;o=i.next()){var a=o.value;r[a]=e[a]}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r},hr.prototype.transformExpr=function(e,t){return e.sourceSpan||((e=this._clone(e)).sourceSpan=this.sourceSpan),e},hr.prototype.transformStmt=function(e,t){return e.sourceSpan||((e=this._clone(e)).sourceSpan=this.sourceSpan),e},hr);function hr(e){var t=pr.call(this)||this;return t.sourceSpan=e,t}function fr(e,t,n){return new Ve(e,t,n)}function mr(e,t,n){return void 0===t&&(t=null),new _t(e,null,t,n)}function vr(e,t,n){return void 0===t&&(t=null),void 0===n&&(n=null),null!=e?yr(mr(e,t,null),n):null}function yr(e,t,n){return void 0===t&&(t=null),void 0===n&&(n=null),new ge(e,t,n)}function gr(e,t,n){return new Zt(e,t,n)}function _r(e,t){return void 0===t&&(t=null),new en(e.map(function(e){return new Xt(e.key,e.value,e.quoted)}),t,null)}function br(e,t,n,r,i){return new Ft(e,t,n,r,i)}function wr(e,t,n){return new Ln(e,t,n)}function xr(e,t,n){return new ht(e,t,n)}function Cr(e){var t=\"\";if(e.tagName&&(t+=\" @\"+e.tagName),e.text){if(e.text.match(/\\/\\*|\\*\\//))throw new Error('JSDoc text cannot contain \"/*\" and \"*/\"');t+=\" \"+e.text.replace(/@/g,\"\\\\@\")}return t}var Sr=/-+([a-z0-9])/g;function Er(e,t){return Or(e,\":\",t)}function Or(e,t,n){var r=e.indexOf(t);return-1==r?n:[e.slice(0,r).trim(),e.slice(r+1).trim()]}function kr(e,t,n){return Array.isArray(e)?t.visitArray(e,n):function(e){return\"object\"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Br}(e)?t.visitStringMap(e,n):null==e||\"string\"==typeof e||\"number\"==typeof e||\"boolean\"==typeof e?t.visitPrimitive(e,n):t.visitOther(e,n)}function Dr(e){return null!=e}function Tr(e){return void 0===e?null:e}var Ir=(Pr.prototype.visitArray=function(e,t){var n=this;return e.map(function(e){return kr(e,n,t)})},Pr.prototype.visitStringMap=function(t,n){var r=this,i={};return Object.keys(t).forEach(function(e){i[e]=kr(t[e],r,n)}),i},Pr.prototype.visitPrimitive=function(e,t){return e},Pr.prototype.visitOther=function(e,t){return e},Pr);function Pr(){}var Ar=function(e){if(Hr(e))throw new Error(\"Illegal state: value cannot be a promise\");return e},Mr=function(e,t){return Hr(e)?e.then(t):t(e)},Rr=function(e){return e.some(Hr)?Promise.all(e):e};function Nr(e){throw new Error(\"Internal Error: \"+e)}function jr(e,t){var n=Error(e);return n[Fr]=!0,t&&(n[Lr]=t),n}var Fr=\"ngSyntaxError\",Lr=\"ngParseErrors\";function Vr(e){return e.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\"\\\\$1\")}var Br=Object.getPrototypeOf({});function Ur(e){for(var t=\"\",n=0;n<e.length;n++){var r=e.charCodeAt(n);if(55296<=r&&r<=56319&&e.length>n+1){var i=e.charCodeAt(n+1);56320<=i&&i<=57343&&(n++,r=(r-55296<<10)+i-56320+65536)}r<=127?t+=String.fromCharCode(r):r<=2047?t+=String.fromCharCode(r>>6&31|192,63&r|128):r<=65535?t+=String.fromCharCode(r>>12|224,r>>6&63|128,63&r|128):r<=2097151&&(t+=String.fromCharCode(r>>18&7|240,r>>12&63|128,r>>6&63|128,63&r|128))}return t}function zr(e){if(\"string\"==typeof e)return e;if(Array.isArray(e))return\"[\"+e.map(zr).join(\", \")+\"]\";if(null==e)return\"\"+e;if(e.overriddenName)return\"\"+e.overriddenName;if(e.name)return\"\"+e.name;if(!e.toString)return\"object\";var t=e.toString();if(null==t)return\"\"+t;var n=t.indexOf(\"\\n\");return-1===n?t:t.substring(0,n)}function qr(e){return\"function\"==typeof e&&e.hasOwnProperty(\"__forward_ref__\")?e():e}function Hr(e){return!!e&&\"function\"==typeof e.then}var Wr=function(e){var t=(this.full=e).split(\".\");this.major=t[0],this.minor=t[1],this.patch=t.slice(2).join(\".\")},Gr=\"undefined\"!=typeof window&&window,Yr=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,Kr=\"undefined\"!=typeof global&&global||Gr||Yr;function Zr(e,t){for(var n=[],r=0;r<e;r++)n.push(t);return n}var Qr,Xr={},$r=(f(Jr,Qr=je),Jr.prototype.visitExpression=function(e,t){return t===Xr?this.original.visitExpression(e,t):this.resolved.visitExpression(e,t)},Jr.prototype.isEquivalent=function(e){return e instanceof Jr&&this.resolved.isEquivalent(e.resolved)},Jr.prototype.isConstant=function(){return!0},Jr.prototype.fixup=function(e){this.resolved=e,this.shared=!0},Jr);function Jr(e){var t=Qr.call(this,e.type)||this;return t.resolved=e,t.original=e,t}var ei=(ti.prototype.getConstLiteral=function(e,t){if(e instanceof ht||e instanceof $r)return e;var n=this.keyOf(e),r=this.literals.get(n),i=!1;if(r||(r=new $r(e),this.literals.set(n,r),i=!0),!i&&!r.shared||i&&t){var o=this.freshName();this.statements.push(fr(o).set(e).toDeclStmt(De,[E.StmtModifier.Final])),r.fixup(fr(o))}return r},ti.prototype.getDefinition=function(e,t,n,r){void 0===r&&(r=!1);var i=this.definitionsOf(t),o=i.get(e),a=!1;if(!o){var s=this.propertyNameOf(t);o=new $r(n.importExpr(e).prop(s)),i.set(e,o),a=!0}if(!a&&!o.shared||a&&r){var l=this.freshName();this.statements.push(fr(l).set(o.resolved).toDeclStmt(De,[E.StmtModifier.Final])),o.fixup(fr(l))}return o},ti.prototype.getLiteralFactory=function(n){if(n instanceof Zt){var e=n.entries.map(function(e){return e.isConstant()?e:xr(null)}),t=this.keyOf(gr(e));return this._getLiteralFactory(t,n.entries,function(e){return gr(e)})}var r=_r(n.entries.map(function(e){return{key:e.key,value:e.value.isConstant()?e.value:xr(null),quoted:e.quoted}}));return t=this.keyOf(r),this._getLiteralFactory(t,n.entries.map(function(e){return e.value}),function(e){return _r(e.map(function(e,t){return{key:n.entries[t].key,value:e,quoted:n.entries[t].quoted}}))})},ti.prototype._getLiteralFactory=function(e,t,n){var r=this,i=this.literalFactories.get(e),o=t.filter(function(e){return!e.isConstant()});if(!i){var a=t.map(function(e,t){return e.isConstant()?r.getConstLiteral(e,!0):fr(\"a\"+t)}),s=br(a.filter(oi).map(function(e){return new Rt(e.name,ke)}),[new wn(n(a))],De),l=this.freshName();this.statements.push(fr(l).set(s).toDeclStmt(De,[E.StmtModifier.Final])),i=fr(l),this.literalFactories.set(e,i)}return{literalFactory:i,literalFactoryArguments:o}},ti.prototype.uniqueName=function(e){return\"\"+e+this.nextNameIndex++},ti.prototype.definitionsOf=function(e){switch(e){case 2:return this.componentDefinitions;case 1:return this.directiveDefinitions;case 0:return this.injectorDefinitions;case 3:return this.pipeDefinitions}return Nr(\"Unknown definition kind \"+e),this.componentDefinitions},ti.prototype.propertyNameOf=function(e){switch(e){case 2:return\"ɵcmp\";case 1:return\"ɵdir\";case 0:return\"ɵinj\";case 3:return\"ɵpipe\"}return Nr(\"Unknown definition kind \"+e),\"<unknown>\"},ti.prototype.freshName=function(){return this.uniqueName(\"_c\")},ti.prototype.keyOf=function(e){return e.visitExpression(new ni,Xr)},ti);function ti(){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}var ni=(ri.prototype.visitLiteralExpr=function(e){return\"\"+(\"string\"==typeof e.value?'\"'+e.value+'\"':e.value)},ri.prototype.visitLiteralArrayExpr=function(e,t){var n=this;return\"[\"+e.entries.map(function(e){return e.visitExpression(n,t)}).join(\",\")+\"]\"},ri.prototype.visitLiteralMapExpr=function(e,t){var n=this;return\"{\"+e.entries.map(function(e){return function(e){var t=e.quoted?'\"':\"\";return t+e.key+t}(e)+\":\"+e.value.visitExpression(n,t)}).join(\",\")},ri.prototype.visitExternalExpr=function(e){return e.value.moduleName?\"EX:\"+e.value.moduleName+\":\"+e.value.name:\"EX:\"+e.value.runtime.name},ri.prototype.visitReadVarExpr=function(e){return\"VAR:\"+e.name},ri.prototype.visitTypeofExpr=function(e,t){return\"TYPEOF:\"+e.expr.visitExpression(this,t)},ri);function ri(){this.visitWrappedNodeExpr=ii,this.visitWriteVarExpr=ii,this.visitWriteKeyExpr=ii,this.visitWritePropExpr=ii,this.visitInvokeMethodExpr=ii,this.visitInvokeFunctionExpr=ii,this.visitInstantiateExpr=ii,this.visitConditionalExpr=ii,this.visitNotExpr=ii,this.visitAssertNotNullExpr=ii,this.visitCastExpr=ii,this.visitFunctionExpr=ii,this.visitBinaryOperatorExpr=ii,this.visitReadPropExpr=ii,this.visitReadKeyExpr=ii,this.visitCommaExpr=ii,this.visitLocalizedString=ii}function ii(e){throw new Error(\"Invalid state: Visitor \"+this.constructor.name+\" doesn't handle \"+e.constructor.name)}function oi(e){return e instanceof Ve}var ai=\"@angular/core\",si=(li.ANALYZE_FOR_ENTRY_COMPONENTS={name:\"ANALYZE_FOR_ENTRY_COMPONENTS\",moduleName:ai},li.ElementRef={name:\"ElementRef\",moduleName:ai},li.NgModuleRef={name:\"NgModuleRef\",moduleName:ai},li.ViewContainerRef={name:\"ViewContainerRef\",moduleName:ai},li.ChangeDetectorRef={name:\"ChangeDetectorRef\",moduleName:ai},li.QueryList={name:\"QueryList\",moduleName:ai},li.TemplateRef={name:\"TemplateRef\",moduleName:ai},li.Renderer2={name:\"Renderer2\",moduleName:ai},li.CodegenComponentFactoryResolver={name:\"ɵCodegenComponentFactoryResolver\",moduleName:ai},li.ComponentFactoryResolver={name:\"ComponentFactoryResolver\",moduleName:ai},li.ComponentFactory={name:\"ComponentFactory\",moduleName:ai},li.ComponentRef={name:\"ComponentRef\",moduleName:ai},li.NgModuleFactory={name:\"NgModuleFactory\",moduleName:ai},li.createModuleFactory={name:\"ɵcmf\",moduleName:ai},li.moduleDef={name:\"ɵmod\",moduleName:ai},li.moduleProviderDef={name:\"ɵmpd\",moduleName:ai},li.RegisterModuleFactoryFn={name:\"ɵregisterModuleFactory\",moduleName:ai},li.inject={name:\"ɵɵinject\",moduleName:ai},li.directiveInject={name:\"ɵɵdirectiveInject\",moduleName:ai},li.INJECTOR={name:\"INJECTOR\",moduleName:ai},li.Injector={name:\"Injector\",moduleName:ai},li.ɵɵdefineInjectable={name:\"ɵɵdefineInjectable\",moduleName:ai},li.InjectableDef={name:\"ɵɵInjectableDef\",moduleName:ai},li.ViewEncapsulation={name:\"ViewEncapsulation\",moduleName:ai},li.ChangeDetectionStrategy={name:\"ChangeDetectionStrategy\",moduleName:ai},li.SecurityContext={name:\"SecurityContext\",moduleName:ai},li.LOCALE_ID={name:\"LOCALE_ID\",moduleName:ai},li.TRANSLATIONS_FORMAT={name:\"TRANSLATIONS_FORMAT\",moduleName:ai},li.inlineInterpolate={name:\"ɵinlineInterpolate\",moduleName:ai},li.interpolate={name:\"ɵinterpolate\",moduleName:ai},li.EMPTY_ARRAY={name:\"ɵEMPTY_ARRAY\",moduleName:ai},li.EMPTY_MAP={name:\"ɵEMPTY_MAP\",moduleName:ai},li.Renderer={name:\"Renderer\",moduleName:ai},li.viewDef={name:\"ɵvid\",moduleName:ai},li.elementDef={name:\"ɵeld\",moduleName:ai},li.anchorDef={name:\"ɵand\",moduleName:ai},li.textDef={name:\"ɵted\",moduleName:ai},li.directiveDef={name:\"ɵdid\",moduleName:ai},li.providerDef={name:\"ɵprd\",moduleName:ai},li.queryDef={name:\"ɵqud\",moduleName:ai},li.pureArrayDef={name:\"ɵpad\",moduleName:ai},li.pureObjectDef={name:\"ɵpod\",moduleName:ai},li.purePipeDef={name:\"ɵppd\",moduleName:ai},li.pipeDef={name:\"ɵpid\",moduleName:ai},li.nodeValue={name:\"ɵnov\",moduleName:ai},li.ngContentDef={name:\"ɵncd\",moduleName:ai},li.unwrapValue={name:\"ɵunv\",moduleName:ai},li.createRendererType2={name:\"ɵcrt\",moduleName:ai},li.RendererType2={name:\"RendererType2\",moduleName:ai},li.ViewDefinition={name:\"ɵViewDefinition\",moduleName:ai},li.createComponentFactory={name:\"ɵccf\",moduleName:ai},li.setClassMetadata={name:\"ɵsetClassMetadata\",moduleName:ai},li);function li(){}function ui(e){return{identifier:{reference:e}}}function ci(e,t){return ui(e.resolveExternalReference(t))}var pi=(di.prototype.assertNoMembers=function(){if(this.members.length)throw new Error(\"Illegal state: symbol without members expected, but got \"+JSON.stringify(this)+\".\")},di);function di(e,t,n){this.filePath=e,this.name=t,this.members=n}var hi=(fi.prototype.get=function(e,t,n){var r='\"'+e+'\".'+t+((n=n||[]).length?\".\"+n.join(\".\"):\"\"),i=this.cache.get(r);return i||(i=new pi(e,t,n),this.cache.set(r,i)),i},fi);function fi(){this.cache=new Map}var mi=/^(?:(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\)))|(\\@[-\\w]+)$/;function vi(e){return e.replace(/\\W/g,\"_\")}var yi,gi=0;function _i(e){if(!e||!e.reference)return null;var t=e.reference;if(t instanceof pi)return t.name;if(t.__anonymousType)return t.__anonymousType;var n=zr(t);return 0<=n.indexOf(\"(\")?(n=\"anonymous_\"+gi++,t.__anonymousType=n):n=vi(n),n}function bi(e){var t=e.reference;return t instanceof pi?t.filePath:\"./\"+zr(t)}function wi(e,t){return\"View_\"+_i({reference:e})+\"_\"+t}function xi(e){return\"RenderType_\"+_i({reference:e})}function Ci(e){return\"HostView_\"+_i({reference:e})}function Si(e){return _i({reference:e})+\"NgFactory\"}function Ei(e){return null!=e.value?vi(e.value):_i(e.identifier)}function Oi(e){return null!=e.identifier?e.identifier.reference:e.value}(yi=E.CompileSummaryKind||(E.CompileSummaryKind={}))[yi.Pipe=0]=\"Pipe\",yi[yi.Directive=1]=\"Directive\",yi[yi.NgModule=2]=\"NgModule\",yi[yi.Injectable=3]=\"Injectable\";var ki=function(e){var t=void 0===e?{}:e,n=t.moduleUrl,r=t.styles,i=t.styleUrls;this.moduleUrl=n||null,this.styles=Vi(r),this.styleUrls=Vi(i)},Di=(Ti.prototype.toSummary=function(){return{ngContentSelectors:this.ngContentSelectors,encapsulation:this.encapsulation,styles:this.styles,animations:this.animations}},Ti);function Ti(e){var t=e.encapsulation,n=e.template,r=e.templateUrl,i=e.htmlAst,o=e.styles,a=e.styleUrls,s=e.externalStylesheets,l=e.animations,u=e.ngContentSelectors,c=e.interpolation,p=e.isInline,d=e.preserveWhitespaces;if(this.encapsulation=t,this.template=n,this.templateUrl=r,this.htmlAst=i,this.styles=Vi(o),this.styleUrls=Vi(a),this.externalStylesheets=Vi(s),this.animations=l?Ui(l):[],this.ngContentSelectors=u||[],c&&2!=c.length)throw new Error(\"'interpolation' should have a start and an end symbol.\");this.interpolation=c,this.isInline=p,this.preserveWhitespaces=d}var Ii=(Pi.create=function(e){var t=e.isHost,n=e.type,r=e.isComponent,i=e.selector,o=e.exportAs,a=e.changeDetection,s=e.inputs,l=e.outputs,u=e.host,c=e.providers,p=e.viewProviders,d=e.queries,h=e.guards,f=e.viewQueries,m=e.entryComponents,v=e.template,y=e.componentViewType,g=e.rendererType,_=e.componentFactory,b={},w={},x={};null!=u&&Object.keys(u).forEach(function(e){var t=u[e],n=e.match(mi);null===n?x[e]=t:null!=n[1]?w[n[1]]=t:null!=n[2]&&(b[n[2]]=t)});var C={};null!=s&&s.forEach(function(e){var t=Er(e,[e,e]);C[t[0]]=t[1]});var S={};return null!=l&&l.forEach(function(e){var t=Er(e,[e,e]);S[t[0]]=t[1]}),new Pi({isHost:t,type:n,isComponent:!!r,selector:i,exportAs:o,changeDetection:a,inputs:C,outputs:S,hostListeners:b,hostProperties:w,hostAttributes:x,providers:c,viewProviders:p,queries:d,guards:h,viewQueries:f,entryComponents:m,template:v,componentViewType:y,rendererType:g,componentFactory:_})},Pi.prototype.toSummary=function(){return{summaryKind:E.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}},Pi);function Pi(e){var t=e.isHost,n=e.type,r=e.isComponent,i=e.selector,o=e.exportAs,a=e.changeDetection,s=e.inputs,l=e.outputs,u=e.hostListeners,c=e.hostProperties,p=e.hostAttributes,d=e.providers,h=e.viewProviders,f=e.queries,m=e.guards,v=e.viewQueries,y=e.entryComponents,g=e.template,_=e.componentViewType,b=e.rendererType,w=e.componentFactory;this.isHost=!!t,this.type=n,this.isComponent=r,this.selector=i,this.exportAs=o,this.changeDetection=a,this.inputs=s,this.outputs=l,this.hostListeners=u,this.hostProperties=c,this.hostAttributes=p,this.providers=Vi(d),this.viewProviders=Vi(h),this.queries=Vi(f),this.guards=m,this.viewQueries=Vi(v),this.entryComponents=Vi(y),this.template=g,this.componentViewType=_,this.rendererType=b,this.componentFactory=w}var Ai=(Mi.prototype.toSummary=function(){return{summaryKind:E.CompileSummaryKind.Pipe,type:this.type,name:this.name,pure:this.pure}},Mi);function Mi(e){var t=e.type,n=e.name,r=e.pure;this.type=t,this.name=n,this.pure=!!r}function Ri(){}var Ni=(ji.prototype.toSummary=function(){var e=this.transitiveModule;return{summaryKind:E.CompileSummaryKind.NgModule,type:this.type,entryComponents:e.entryComponents,providers:e.providers,modules:e.modules,exportedDirectives:e.exportedDirectives,exportedPipes:e.exportedPipes}},ji);function ji(e){var t=e.type,n=e.providers,r=e.declaredDirectives,i=e.exportedDirectives,o=e.declaredPipes,a=e.exportedPipes,s=e.entryComponents,l=e.bootstrapComponents,u=e.importedModules,c=e.exportedModules,p=e.schemas,d=e.transitiveModule,h=e.id;this.type=t||null,this.declaredDirectives=Vi(r),this.exportedDirectives=Vi(i),this.declaredPipes=Vi(o),this.exportedPipes=Vi(a),this.providers=Vi(n),this.entryComponents=Vi(s),this.bootstrapComponents=Vi(l),this.importedModules=Vi(u),this.exportedModules=Vi(c),this.schemas=Vi(p),this.id=h||null,this.transitiveModule=d||null}var Fi=(Li.prototype.addProvider=function(e,t){this.providers.push({provider:e,module:t})},Li.prototype.addDirective=function(e){this.directivesSet.has(e.reference)||(this.directivesSet.add(e.reference),this.directives.push(e))},Li.prototype.addExportedDirective=function(e){this.exportedDirectivesSet.has(e.reference)||(this.exportedDirectivesSet.add(e.reference),this.exportedDirectives.push(e))},Li.prototype.addPipe=function(e){this.pipesSet.has(e.reference)||(this.pipesSet.add(e.reference),this.pipes.push(e))},Li.prototype.addExportedPipe=function(e){this.exportedPipesSet.has(e.reference)||(this.exportedPipesSet.add(e.reference),this.exportedPipes.push(e))},Li.prototype.addModule=function(e){this.modulesSet.has(e.reference)||(this.modulesSet.add(e.reference),this.modules.push(e))},Li.prototype.addEntryComponent=function(e){this.entryComponentsSet.has(e.componentType)||(this.entryComponentsSet.add(e.componentType),this.entryComponents.push(e))},Li);function Li(){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=[]}function Vi(e){return e||[]}var Bi=function(e,t){var n=t.useClass,r=t.useValue,i=t.useExisting,o=t.useFactory,a=t.deps,s=t.multi;this.token=e,this.useClass=n||null,this.useValue=r,this.useExisting=i,this.useFactory=o||null,this.dependencies=a||null,this.multi=!!s};function Ui(e){return e.reduce(function(e,t){var n=Array.isArray(t)?Ui(t):t;return e.concat(n)},[])}function zi(e){return e.replace(/(\\w+:\\/\\/[\\w:-]+)?(\\/+)?/,\"ng:///\")}function qi(e,t,n){var r;return r=n.isInline?t.type.reference instanceof pi?t.type.reference.filePath+\".\"+t.type.reference.name+\".html\":_i(e)+\"/\"+_i(t.type)+\".html\":n.templateUrl,t.type.reference instanceof pi?r:zi(r)}function Hi(e,t){var n=e.moduleUrl.split(/\\/\\\\/g);return zi(\"css/\"+t+n[n.length-1]+\".ngstyle.js\")}function Wi(e){return zi(_i(e.type)+\"/module.ngfactory.js\")}function Gi(e,t){return zi(_i(e)+\"/\"+_i(t.type)+\".ngfactory.js\")}var Yi=\"@angular/core\",Ki=(Zi.NEW_METHOD=\"factory\",Zi.TRANSFORM_METHOD=\"transform\",Zi.PATCH_DEPS=\"patchedDeps\",Zi.namespaceHTML={name:\"ɵɵnamespaceHTML\",moduleName:Yi},Zi.namespaceMathML={name:\"ɵɵnamespaceMathML\",moduleName:Yi},Zi.namespaceSVG={name:\"ɵɵnamespaceSVG\",moduleName:Yi},Zi.element={name:\"ɵɵelement\",moduleName:Yi},Zi.elementStart={name:\"ɵɵelementStart\",moduleName:Yi},Zi.elementEnd={name:\"ɵɵelementEnd\",moduleName:Yi},Zi.select={name:\"ɵɵselect\",moduleName:Yi},Zi.advance={name:\"ɵɵadvance\",moduleName:Yi},Zi.updateSyntheticHostBinding={name:\"ɵɵupdateSyntheticHostBinding\",moduleName:Yi},Zi.componentHostSyntheticListener={name:\"ɵɵcomponentHostSyntheticListener\",moduleName:Yi},Zi.attribute={name:\"ɵɵattribute\",moduleName:Yi},Zi.attributeInterpolate1={name:\"ɵɵattributeInterpolate1\",moduleName:Yi},Zi.attributeInterpolate2={name:\"ɵɵattributeInterpolate2\",moduleName:Yi},Zi.attributeInterpolate3={name:\"ɵɵattributeInterpolate3\",moduleName:Yi},Zi.attributeInterpolate4={name:\"ɵɵattributeInterpolate4\",moduleName:Yi},Zi.attributeInterpolate5={name:\"ɵɵattributeInterpolate5\",moduleName:Yi},Zi.attributeInterpolate6={name:\"ɵɵattributeInterpolate6\",moduleName:Yi},Zi.attributeInterpolate7={name:\"ɵɵattributeInterpolate7\",moduleName:Yi},Zi.attributeInterpolate8={name:\"ɵɵattributeInterpolate8\",moduleName:Yi},Zi.attributeInterpolateV={name:\"ɵɵattributeInterpolateV\",moduleName:Yi},Zi.classProp={name:\"ɵɵclassProp\",moduleName:Yi},Zi.elementContainerStart={name:\"ɵɵelementContainerStart\",moduleName:Yi},Zi.elementContainerEnd={name:\"ɵɵelementContainerEnd\",moduleName:Yi},Zi.elementContainer={name:\"ɵɵelementContainer\",moduleName:Yi},Zi.styleMap={name:\"ɵɵstyleMap\",moduleName:Yi},Zi.classMap={name:\"ɵɵclassMap\",moduleName:Yi},Zi.classMapInterpolate1={name:\"ɵɵclassMapInterpolate1\",moduleName:Yi},Zi.classMapInterpolate2={name:\"ɵɵclassMapInterpolate2\",moduleName:Yi},Zi.classMapInterpolate3={name:\"ɵɵclassMapInterpolate3\",moduleName:Yi},Zi.classMapInterpolate4={name:\"ɵɵclassMapInterpolate4\",moduleName:Yi},Zi.classMapInterpolate5={name:\"ɵɵclassMapInterpolate5\",moduleName:Yi},Zi.classMapInterpolate6={name:\"ɵɵclassMapInterpolate6\",moduleName:Yi},Zi.classMapInterpolate7={name:\"ɵɵclassMapInterpolate7\",moduleName:Yi},Zi.classMapInterpolate8={name:\"ɵɵclassMapInterpolate8\",moduleName:Yi},Zi.classMapInterpolateV={name:\"ɵɵclassMapInterpolateV\",moduleName:Yi},Zi.styleProp={name:\"ɵɵstyleProp\",moduleName:Yi},Zi.stylePropInterpolate1={name:\"ɵɵstylePropInterpolate1\",moduleName:Yi},Zi.stylePropInterpolate2={name:\"ɵɵstylePropInterpolate2\",moduleName:Yi},Zi.stylePropInterpolate3={name:\"ɵɵstylePropInterpolate3\",moduleName:Yi},Zi.stylePropInterpolate4={name:\"ɵɵstylePropInterpolate4\",moduleName:Yi},Zi.stylePropInterpolate5={name:\"ɵɵstylePropInterpolate5\",moduleName:Yi},Zi.stylePropInterpolate6={name:\"ɵɵstylePropInterpolate6\",moduleName:Yi},Zi.stylePropInterpolate7={name:\"ɵɵstylePropInterpolate7\",moduleName:Yi},Zi.stylePropInterpolate8={name:\"ɵɵstylePropInterpolate8\",moduleName:Yi},Zi.stylePropInterpolateV={name:\"ɵɵstylePropInterpolateV\",moduleName:Yi},Zi.styleSanitizer={name:\"ɵɵstyleSanitizer\",moduleName:Yi},Zi.elementHostAttrs={name:\"ɵɵelementHostAttrs\",moduleName:Yi},Zi.containerCreate={name:\"ɵɵcontainer\",moduleName:Yi},Zi.nextContext={name:\"ɵɵnextContext\",moduleName:Yi},Zi.templateCreate={name:\"ɵɵtemplate\",moduleName:Yi},Zi.text={name:\"ɵɵtext\",moduleName:Yi},Zi.enableBindings={name:\"ɵɵenableBindings\",moduleName:Yi},Zi.disableBindings={name:\"ɵɵdisableBindings\",moduleName:Yi},Zi.allocHostVars={name:\"ɵɵallocHostVars\",moduleName:Yi},Zi.getCurrentView={name:\"ɵɵgetCurrentView\",moduleName:Yi},Zi.textInterpolate={name:\"ɵɵtextInterpolate\",moduleName:Yi},Zi.textInterpolate1={name:\"ɵɵtextInterpolate1\",moduleName:Yi},Zi.textInterpolate2={name:\"ɵɵtextInterpolate2\",moduleName:Yi},Zi.textInterpolate3={name:\"ɵɵtextInterpolate3\",moduleName:Yi},Zi.textInterpolate4={name:\"ɵɵtextInterpolate4\",moduleName:Yi},Zi.textInterpolate5={name:\"ɵɵtextInterpolate5\",moduleName:Yi},Zi.textInterpolate6={name:\"ɵɵtextInterpolate6\",moduleName:Yi},Zi.textInterpolate7={name:\"ɵɵtextInterpolate7\",moduleName:Yi},Zi.textInterpolate8={name:\"ɵɵtextInterpolate8\",moduleName:Yi},Zi.textInterpolateV={name:\"ɵɵtextInterpolateV\",moduleName:Yi},Zi.restoreView={name:\"ɵɵrestoreView\",moduleName:Yi},Zi.pureFunction0={name:\"ɵɵpureFunction0\",moduleName:Yi},Zi.pureFunction1={name:\"ɵɵpureFunction1\",moduleName:Yi},Zi.pureFunction2={name:\"ɵɵpureFunction2\",moduleName:Yi},Zi.pureFunction3={name:\"ɵɵpureFunction3\",moduleName:Yi},Zi.pureFunction4={name:\"ɵɵpureFunction4\",moduleName:Yi},Zi.pureFunction5={name:\"ɵɵpureFunction5\",moduleName:Yi},Zi.pureFunction6={name:\"ɵɵpureFunction6\",moduleName:Yi},Zi.pureFunction7={name:\"ɵɵpureFunction7\",moduleName:Yi},Zi.pureFunction8={name:\"ɵɵpureFunction8\",moduleName:Yi},Zi.pureFunctionV={name:\"ɵɵpureFunctionV\",moduleName:Yi},Zi.pipeBind1={name:\"ɵɵpipeBind1\",moduleName:Yi},Zi.pipeBind2={name:\"ɵɵpipeBind2\",moduleName:Yi},Zi.pipeBind3={name:\"ɵɵpipeBind3\",moduleName:Yi},Zi.pipeBind4={name:\"ɵɵpipeBind4\",moduleName:Yi},Zi.pipeBindV={name:\"ɵɵpipeBindV\",moduleName:Yi},Zi.hostProperty={name:\"ɵɵhostProperty\",moduleName:Yi},Zi.property={name:\"ɵɵproperty\",moduleName:Yi},Zi.propertyInterpolate={name:\"ɵɵpropertyInterpolate\",moduleName:Yi},Zi.propertyInterpolate1={name:\"ɵɵpropertyInterpolate1\",moduleName:Yi},Zi.propertyInterpolate2={name:\"ɵɵpropertyInterpolate2\",moduleName:Yi},Zi.propertyInterpolate3={name:\"ɵɵpropertyInterpolate3\",moduleName:Yi},Zi.propertyInterpolate4={name:\"ɵɵpropertyInterpolate4\",moduleName:Yi},Zi.propertyInterpolate5={name:\"ɵɵpropertyInterpolate5\",moduleName:Yi},Zi.propertyInterpolate6={name:\"ɵɵpropertyInterpolate6\",moduleName:Yi},Zi.propertyInterpolate7={name:\"ɵɵpropertyInterpolate7\",moduleName:Yi},Zi.propertyInterpolate8={name:\"ɵɵpropertyInterpolate8\",moduleName:Yi},Zi.propertyInterpolateV={name:\"ɵɵpropertyInterpolateV\",moduleName:Yi},Zi.i18n={name:\"ɵɵi18n\",moduleName:Yi},Zi.i18nAttributes={name:\"ɵɵi18nAttributes\",moduleName:Yi},Zi.i18nExp={name:\"ɵɵi18nExp\",moduleName:Yi},Zi.i18nStart={name:\"ɵɵi18nStart\",moduleName:Yi},Zi.i18nEnd={name:\"ɵɵi18nEnd\",moduleName:Yi},Zi.i18nApply={name:\"ɵɵi18nApply\",moduleName:Yi},Zi.i18nPostprocess={name:\"ɵɵi18nPostprocess\",moduleName:Yi},Zi.pipe={name:\"ɵɵpipe\",moduleName:Yi},Zi.projection={name:\"ɵɵprojection\",moduleName:Yi},Zi.projectionDef={name:\"ɵɵprojectionDef\",moduleName:Yi},Zi.reference={name:\"ɵɵreference\",moduleName:Yi},Zi.inject={name:\"ɵɵinject\",moduleName:Yi},Zi.injectAttribute={name:\"ɵɵinjectAttribute\",moduleName:Yi},Zi.injectPipeChangeDetectorRef={name:\"ɵɵinjectPipeChangeDetectorRef\",moduleName:Yi},Zi.directiveInject={name:\"ɵɵdirectiveInject\",moduleName:Yi},Zi.templateRefExtractor={name:\"ɵɵtemplateRefExtractor\",moduleName:Yi},Zi.resolveWindow={name:\"ɵɵresolveWindow\",moduleName:Yi},Zi.resolveDocument={name:\"ɵɵresolveDocument\",moduleName:Yi},Zi.resolveBody={name:\"ɵɵresolveBody\",moduleName:Yi},Zi.defineBase={name:\"ɵɵdefineBase\",moduleName:Yi},Zi.BaseDef={name:\"ɵɵBaseDef\",moduleName:Yi},Zi.defineComponent={name:\"ɵɵdefineComponent\",moduleName:Yi},Zi.setComponentScope={name:\"ɵɵsetComponentScope\",moduleName:Yi},Zi.ComponentDefWithMeta={name:\"ɵɵComponentDefWithMeta\",moduleName:Yi},Zi.FactoryDef={name:\"ɵɵFactoryDef\",moduleName:Yi},Zi.defineDirective={name:\"ɵɵdefineDirective\",moduleName:Yi},Zi.DirectiveDefWithMeta={name:\"ɵɵDirectiveDefWithMeta\",moduleName:Yi},Zi.InjectorDef={name:\"ɵɵInjectorDef\",moduleName:Yi},Zi.defineInjector={name:\"ɵɵdefineInjector\",moduleName:Yi},Zi.NgModuleDefWithMeta={name:\"ɵɵNgModuleDefWithMeta\",moduleName:Yi},Zi.defineNgModule={name:\"ɵɵdefineNgModule\",moduleName:Yi},Zi.setNgModuleScope={name:\"ɵɵsetNgModuleScope\",moduleName:Yi},Zi.PipeDefWithMeta={name:\"ɵɵPipeDefWithMeta\",moduleName:Yi},Zi.definePipe={name:\"ɵɵdefinePipe\",moduleName:Yi},Zi.queryRefresh={name:\"ɵɵqueryRefresh\",moduleName:Yi},Zi.viewQuery={name:\"ɵɵviewQuery\",moduleName:Yi},Zi.staticViewQuery={name:\"ɵɵstaticViewQuery\",moduleName:Yi},Zi.staticContentQuery={name:\"ɵɵstaticContentQuery\",moduleName:Yi},Zi.loadQuery={name:\"ɵɵloadQuery\",moduleName:Yi},Zi.contentQuery={name:\"ɵɵcontentQuery\",moduleName:Yi},Zi.NgOnChangesFeature={name:\"ɵɵNgOnChangesFeature\",moduleName:Yi},Zi.InheritDefinitionFeature={name:\"ɵɵInheritDefinitionFeature\",moduleName:Yi},Zi.ProvidersFeature={name:\"ɵɵProvidersFeature\",moduleName:Yi},Zi.listener={name:\"ɵɵlistener\",moduleName:Yi},Zi.getFactoryOf={name:\"ɵɵgetFactoryOf\",moduleName:Yi},Zi.getInheritedFactory={name:\"ɵɵgetInheritedFactory\",moduleName:Yi},Zi.sanitizeHtml={name:\"ɵɵsanitizeHtml\",moduleName:Yi},Zi.sanitizeStyle={name:\"ɵɵsanitizeStyle\",moduleName:Yi},Zi.defaultStyleSanitizer={name:\"ɵɵdefaultStyleSanitizer\",moduleName:Yi},Zi.sanitizeResourceUrl={name:\"ɵɵsanitizeResourceUrl\",moduleName:Yi},Zi.sanitizeScript={name:\"ɵɵsanitizeScript\",moduleName:Yi},Zi.sanitizeUrl={name:\"ɵɵsanitizeUrl\",moduleName:Yi},Zi.sanitizeUrlOrResourceUrl={name:\"ɵɵsanitizeUrlOrResourceUrl\",moduleName:Yi},Zi);function Zi(){}function Qi(t){return _r(Object.keys(t).map(function(e){return{key:e,value:t[e],quoted:!1}}))}function Xi(e,t){if(Array.isArray(e))return gr(e.map(function(e){return Xi(e,t)}));if(e instanceof pi)return t.importExpr(e);if(null==e)return xr(e);throw new Error(\"Internal error: Unsupported or unknown metadata: \"+e)}function $i(e,t){var n=null;if(0<t){n=[];for(var r=0;r<t;r++)n.push(ke)}return yr(e,null,n)}var Ji=\"@\";function eo(e){return\"\"+Ji+e}function to(e,t){return\"animation_\"+e+\"_\"+t}var no=9,ro=10,io=11,oo=12,ao=13,so=32,lo=34,uo=36,co=39,po=43,ho=45,fo=48,mo=57,vo=65,yo=69,go=70,_o=90,bo=95,wo=97,xo=101,Co=102,So=110,Eo=114,Oo=116,ko=118,Do=122,To=123,Io=125,Po=160,Ao=96;function Mo(e){return no<=e&&e<=so||e==Po}function Ro(e){return fo<=e&&e<=mo}function No(e){return wo<=e&&e<=Do||vo<=e&&e<=_o}function jo(e){return e===ro||e===ao}function Fo(e){return fo<=e&&e<=55}var Lo=(Vo.prototype.toString=function(){return null!=this.offset?this.file.url+\"@\"+this.line+\":\"+this.col:this.file.url},Vo.prototype.moveBy=function(e){for(var t=this.file.content,n=t.length,r=this.offset,i=this.line,o=this.col;0<r&&e<0;)if(r--,e++,(s=t.charCodeAt(r))==ro){i--;var a=t.substr(0,r-1).lastIndexOf(String.fromCharCode(ro));o=0<a?r-a:r}else o--;for(;r<n&&0<e;){var s=t.charCodeAt(r);r++,e--,s==ro?(i++,o=0):o++}return new Vo(this.file,r,i,o)},Vo.prototype.getContext=function(e,t){var n=this.file.content,r=this.offset;if(null==r)return null;r>n.length-1&&(r=n.length-1);for(var i=r,o=0,a=0;o<e&&0<r&&(o++,\"\\n\"!=n[--r]||++a!=t););for(a=o=0;o<e&&i<n.length-1&&(o++,\"\\n\"!=n[++i]||++a!=t););return{before:n.substring(r,this.offset),after:n.substring(this.offset,i+1)}},Vo);function Vo(e,t,n,r){this.file=e,this.offset=t,this.line=n,this.col=r}var Bo=function(e,t){this.content=e,this.url=t},Uo=(zo.prototype.toString=function(){return this.start.file.content.substring(this.start.offset,this.end.offset)},zo);function zo(e,t,n){void 0===n&&(n=null),this.start=e,this.end=t,this.details=n}var qo,Ho=new Lo(new Bo(\"\",\"\"),0,0,0),Wo=new Uo(Ho,Ho);(qo=E.ParseErrorLevel||(E.ParseErrorLevel={}))[qo.WARNING=0]=\"WARNING\",qo[qo.ERROR=1]=\"ERROR\";var Go=(Yo.prototype.contextualMessage=function(){var e=this.span.start.getContext(100,3);return e?this.msg+' (\"'+e.before+\"[\"+E.ParseErrorLevel[this.level]+\" ->]\"+e.after+'\")':this.msg},Yo.prototype.toString=function(){var e=this.span.details?\", \"+this.span.details:\"\";return this.contextualMessage()+\": \"+this.span.start+e},Yo);function Yo(e,t,n){void 0===n&&(n=E.ParseErrorLevel.ERROR),this.span=e,this.msg=t,this.level=n}function Ko(e,t){var n=bi(t),r=null!=n?\"in \"+e+\" \"+_i(t)+\" in \"+n:\"in \"+e+\" \"+_i(t),i=new Bo(\"\",r);return new Uo(new Lo(i,-1,-1,-1),new Lo(i,-1,-1,-1))}function Zo(e,t,n){var r=new Bo(\"\",\"in \"+e+\" \"+t+\" in \"+n);return new Uo(new Lo(r,-1,-1,-1),new Lo(r,-1,-1,-1))}var Qo=(Xo.prototype.visit=function(e){return e.visitText(this)},Xo);function Xo(e,t){this.value=e,this.sourceSpan=t}var $o=(Jo.prototype.visit=function(e){return e.visitBoundText(this)},Jo);function Jo(e,t,n){this.value=e,this.sourceSpan=t,this.i18n=n}var ea=(ta.prototype.visit=function(e){return e.visitTextAttribute(this)},ta);function ta(e,t,n,r,i){this.name=e,this.value=t,this.sourceSpan=n,this.valueSpan=r,this.i18n=i}var na=(ra.fromBoundElementProperty=function(e,t){return new ra(e.name,e.type,e.securityContext,e.value,e.unit,e.sourceSpan,e.valueSpan,t)},ra.prototype.visit=function(e){return e.visitBoundAttribute(this)},ra);function ra(e,t,n,r,i,o,a,s){this.name=e,this.type=t,this.securityContext=n,this.value=r,this.unit=i,this.sourceSpan=o,this.valueSpan=a,this.i18n=s}var ia=(oa.fromParsedEvent=function(e){var t=0===e.type?e.targetOrPhase:null,n=1===e.type?e.targetOrPhase:null;return new oa(e.name,e.type,e.handler,t,n,e.sourceSpan,e.handlerSpan)},oa.prototype.visit=function(e){return e.visitBoundEvent(this)},oa);function oa(e,t,n,r,i,o,a){this.name=e,this.type=t,this.handler=n,this.target=r,this.phase=i,this.sourceSpan=o,this.handlerSpan=a}var aa=(sa.prototype.visit=function(e){return e.visitElement(this)},sa);function sa(e,t,n,r,i,o,a,s,l,u){this.name=e,this.attributes=t,this.inputs=n,this.outputs=r,this.children=i,this.references=o,this.sourceSpan=a,this.startSourceSpan=s,this.endSourceSpan=l,this.i18n=u,0===i.length&&s&&l&&(this.sourceSpan=new Uo(a.start,l.end))}var la=(ua.prototype.visit=function(e){return e.visitTemplate(this)},ua);function ua(e,t,n,r,i,o,a,s,l,u,c,p){this.tagName=e,this.attributes=t,this.inputs=n,this.outputs=r,this.templateAttrs=i,this.children=o,this.references=a,this.variables=s,this.sourceSpan=l,this.startSourceSpan=u,this.endSourceSpan=c,this.i18n=p}var ca=(pa.prototype.visit=function(e){return e.visitContent(this)},pa);function pa(e,t,n,r){this.selector=e,this.attributes=t,this.sourceSpan=n,this.i18n=r}var da=(ha.prototype.visit=function(e){return e.visitVariable(this)},ha);function ha(e,t,n,r){this.name=e,this.value=t,this.sourceSpan=n,this.valueSpan=r}var fa=(ma.prototype.visit=function(e){return e.visitReference(this)},ma);function ma(e,t,n,r){this.name=e,this.value=t,this.sourceSpan=n,this.valueSpan=r}var va=(ya.prototype.visit=function(e){return e.visitIcu(this)},ya);function ya(e,t,n,r){this.vars=e,this.placeholders=t,this.sourceSpan=n,this.i18n=r}ga.prototype.visitElement=function(e){},ga.prototype.visitTemplate=function(e){},ga.prototype.visitContent=function(e){},ga.prototype.visitVariable=function(e){},ga.prototype.visitReference=function(e){},ga.prototype.visitTextAttribute=function(e){},ga.prototype.visitBoundAttribute=function(e){},ga.prototype.visitBoundEvent=function(e){},ga.prototype.visitText=function(e){},ga.prototype.visitBoundText=function(e){},ga.prototype.visitIcu=function(e){};function ga(){}var _a=(ba.prototype.visitElement=function(e){xa(this,e.attributes),xa(this,e.children),xa(this,e.references)},ba.prototype.visitTemplate=function(e){xa(this,e.attributes),xa(this,e.children),xa(this,e.references),xa(this,e.variables)},ba.prototype.visitContent=function(e){},ba.prototype.visitVariable=function(e){},ba.prototype.visitReference=function(e){},ba.prototype.visitTextAttribute=function(e){},ba.prototype.visitBoundAttribute=function(e){},ba.prototype.visitBoundEvent=function(e){},ba.prototype.visitText=function(e){},ba.prototype.visitBoundText=function(e){},ba.prototype.visitIcu=function(e){},ba);function ba(){}wa.prototype.visitElement=function(e){var t=Ca(this,e.attributes),n=Ca(this,e.inputs),r=Ca(this,e.outputs),i=Ca(this,e.children),o=Ca(this,e.references);return t!=e.attributes||n!=e.inputs||r!=e.outputs||i!=e.children||o!=e.references?new aa(e.name,t,n,r,i,o,e.sourceSpan,e.startSourceSpan,e.endSourceSpan):e},wa.prototype.visitTemplate=function(e){var t=Ca(this,e.attributes),n=Ca(this,e.inputs),r=Ca(this,e.outputs),i=Ca(this,e.templateAttrs),o=Ca(this,e.children),a=Ca(this,e.references),s=Ca(this,e.variables);return t!=e.attributes||n!=e.inputs||r!=e.outputs||i!=e.templateAttrs||o!=e.children||a!=e.references||s!=e.variables?new la(e.tagName,t,n,r,i,o,a,s,e.sourceSpan,e.startSourceSpan,e.endSourceSpan):e},wa.prototype.visitContent=function(e){return e},wa.prototype.visitVariable=function(e){return e},wa.prototype.visitReference=function(e){return e},wa.prototype.visitTextAttribute=function(e){return e},wa.prototype.visitBoundAttribute=function(e){return e},wa.prototype.visitBoundEvent=function(e){return e},wa.prototype.visitText=function(e){return e},wa.prototype.visitBoundText=function(e){return e},wa.prototype.visitIcu=function(e){return e};function wa(){}function xa(e,t){var n,r,i,o,a=[];if(e.visit)try{for(var s=z(t),l=s.next();!l.done;l=s.next())var u=l.value,c=e.visit(u)||u.visit(e)}catch(e){n={error:e}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}else try{for(var p=z(t),d=p.next();!d.done;d=p.next()){(c=(u=d.value).visit(e))&&a.push(c)}}catch(e){i={error:e}}finally{try{d&&!d.done&&(o=p.return)&&o.call(p)}finally{if(i)throw i.error}}return a}function Ca(e,t){var n,r,i=[],o=!1;try{for(var a=z(t),s=a.next();!s.done;s=a.next()){var l=s.value,u=l.visit(e);u&&i.push(u),o=o||u!=l}}catch(e){n={error:e}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return o?i:t}var Sa=function(e,t,n,r,i,o){this.nodes=e,this.placeholders=t,this.placeholderToMessage=n,this.meaning=r,this.description=i,this.customId=o,this.id=this.customId,this.legacyId=\"\",e.length?this.sources=[{filePath:e[0].sourceSpan.start.file.url,startLine:e[0].sourceSpan.start.line+1,startCol:e[0].sourceSpan.start.col+1,endLine:e[e.length-1].sourceSpan.end.line+1,endCol:e[0].sourceSpan.start.col+1}]:this.sources=[]},Ea=(Oa.prototype.visit=function(e,t){return e.visitText(this,t)},Oa);function Oa(e,t){this.value=e,this.sourceSpan=t}var ka=(Da.prototype.visit=function(e,t){return e.visitContainer(this,t)},Da);function Da(e,t){this.children=e,this.sourceSpan=t}var Ta=(Ia.prototype.visit=function(e,t){return e.visitIcu(this,t)},Ia);function Ia(e,t,n,r){this.expression=e,this.type=t,this.cases=n,this.sourceSpan=r}var Pa=(Aa.prototype.visit=function(e,t){return e.visitTagPlaceholder(this,t)},Aa);function Aa(e,t,n,r,i,o,a){this.tag=e,this.attrs=t,this.startName=n,this.closeName=r,this.children=i,this.isVoid=o,this.sourceSpan=a}var Ma=(Ra.prototype.visit=function(e,t){return e.visitPlaceholder(this,t)},Ra);function Ra(e,t,n){this.value=e,this.name=t,this.sourceSpan=n}var Na=(ja.prototype.visit=function(e,t){return e.visitIcuPlaceholder(this,t)},ja);function ja(e,t,n){this.value=e,this.name=t,this.sourceSpan=n}var Fa=(La.prototype.visitText=function(e,t){return new Ea(e.value,e.sourceSpan)},La.prototype.visitContainer=function(e,t){var n=this,r=e.children.map(function(e){return e.visit(n,t)});return new ka(r,e.sourceSpan)},La.prototype.visitIcu=function(t,n){var r=this,i={};Object.keys(t.cases).forEach(function(e){return i[e]=t.cases[e].visit(r,n)});var e=new Ta(t.expression,t.type,i,t.sourceSpan);return e.expressionPlaceholder=t.expressionPlaceholder,e},La.prototype.visitTagPlaceholder=function(e,t){var n=this,r=e.children.map(function(e){return e.visit(n,t)});return new Pa(e.tag,e.attrs,e.startName,e.closeName,r,e.isVoid,e.sourceSpan)},La.prototype.visitPlaceholder=function(e,t){return new Ma(e.value,e.name,e.sourceSpan)},La.prototype.visitIcuPlaceholder=function(e,t){return new Na(e.value,e.name,e.sourceSpan)},La);function La(){}var Va=(Ba.prototype.visitText=function(e,t){},Ba.prototype.visitContainer=function(e,t){var n=this;e.children.forEach(function(e){return e.visit(n)})},Ba.prototype.visitIcu=function(t,e){var n=this;Object.keys(t.cases).forEach(function(e){t.cases[e].visit(n)})},Ba.prototype.visitTagPlaceholder=function(e,t){var n=this;e.children.forEach(function(e){return e.visit(n)})},Ba.prototype.visitPlaceholder=function(e,t){},Ba.prototype.visitIcuPlaceholder=function(e,t){},Ba);function Ba(){}function Ua(e){return e.id||za(e)}function za(e){return function(e){var t,n,r=Ur(e),i=function(e,t){for(var n=e.length+3>>>2,r=[],i=0;i<n;i++)r[i]=us(e,4*i,t);return r}(r,Za.Big),o=8*r.length,a=Zr(80),s=U([1732584193,4023233417,2562383102,271733878,3285377520],5),l=s[0],u=s[1],c=s[2],p=s[3],d=s[4];i[o>>5]|=128<<24-o%32,i[15+(64+o>>9<<4)]=o;for(var h=0;h<i.length;h+=16){for(var f=U([l,u,c,p,d],5),m=f[0],v=f[1],y=f[2],g=f[3],_=f[4],b=0;b<80;b++){a[b]=b<16?i[h+b]:ss(a[b-3]^a[b-8]^a[b-14]^a[b-16],1);var w=U(Ja(b,u,c,p),2),x=w[0],C=w[1],S=[ss(l,5),x,d,C,a[b]].reduce(is);t=U([p,c,ss(u,30),l,S],5),d=t[0],p=t[1],c=t[2],u=t[3],l=t[4]}n=U([is(l,m),is(u,v),is(c,y),is(p,g),is(d,_)],5),l=n[0],u=n[1],c=n[2],p=n[3],d=n[4]}return function(e){for(var t=\"\",n=0;n<e.length;n++){var r=ls(e,n);t+=(r>>>4).toString(16)+(15&r).toString(16)}return t.toLowerCase()}(cs([l,u,c,p,d]))}(function(e){return e.map(function(e){return e.visit(Ya,null)})}(e.nodes).join(\"\")+\"[\"+e.meaning+\"]\")}function qa(e){return e.id||Ha(e)}function Ha(e){var t=new Xa;return ts(e.nodes.map(function(e){return e.visit(t,null)}).join(\"\"),e.meaning)}var Wa=(Ga.prototype.visitText=function(e,t){return e.value},Ga.prototype.visitContainer=function(e,t){var n=this;return\"[\"+e.children.map(function(e){return e.visit(n)}).join(\", \")+\"]\"},Ga.prototype.visitIcu=function(t,e){var n=this,r=Object.keys(t.cases).map(function(e){return e+\" {\"+t.cases[e].visit(n)+\"}\"});return\"{\"+t.expression+\", \"+t.type+\", \"+r.join(\", \")+\"}\"},Ga.prototype.visitTagPlaceholder=function(e,t){var n=this;return e.isVoid?'<ph tag name=\"'+e.startName+'\"/>':'<ph tag name=\"'+e.startName+'\">'+e.children.map(function(e){return e.visit(n)}).join(\", \")+'</ph name=\"'+e.closeName+'\">'},Ga.prototype.visitPlaceholder=function(e,t){return e.value?'<ph name=\"'+e.name+'\">'+e.value+\"</ph>\":'<ph name=\"'+e.name+'\"/>'},Ga.prototype.visitIcuPlaceholder=function(e,t){return'<ph icu name=\"'+e.name+'\">'+e.value.visit(this)+\"</ph>\"},Ga);function Ga(){}var Ya=new Wa;var Ka,Za,Qa,Xa=(f($a,Ka=Wa),$a.prototype.visitIcu=function(t,e){var n=this,r=Object.keys(t.cases).map(function(e){return e+\" {\"+t.cases[e].visit(n)+\"}\"});return\"{\"+t.type+\", \"+r.join(\", \")+\"}\"},$a);function $a(){return null!==Ka&&Ka.apply(this,arguments)||this}function Ja(e,t,n,r){return e<20?[t&n|~t&r,1518500249]:e<40?[t^n^r,1859775393]:e<60?[t&n|t&r|n&r,2400959708]:[t^n^r,3395469782]}function es(e){var t=Ur(e),n=U([ns(t,0),ns(t,102072)],2),r=n[0],i=n[1];return 0!=r||0!=i&&1!=i||(r^=319790063,i^=-1801410264),[r,i]}function ts(e,t){var n;void 0===t&&(t=\"\");var r=U(es(e),2),i=r[0],o=r[1];if(t){var a=U(es(t),2),s=a[0],l=a[1];i=(n=U(function(e,t){var n=U(e,2),r=n[0],i=n[1],o=U(t,2),a=o[0],s=o[1],l=U(os(i,s),2),u=l[0],c=l[1];return[is(is(r,a),u),c]}(function(e,t){var n=U(e,2),r=n[0],i=n[1];return[r<<t|i>>>32-t,i<<t|r>>>32-t]}([i,o],1),[s,l]),2))[0],o=n[1]}return function(e){for(var t=\"\",n=\"1\",r=e.length-1;0<=r;r--)t=ps(t,ds(ls(e,r),n)),n=ds(256,n);return t.split(\"\").reverse().join(\"\")}(cs([2147483647&i,o]))}function ns(e,t){var n,r,i=U([2654435769,2654435769],2),o=i[0],a=i[1],s=e.length;for(r=0;r+12<=s;r+=12)o=(n=U(rs([o=is(o,us(e,r,Za.Little)),a=is(a,us(e,r+4,Za.Little)),t=is(t,us(e,r+8,Za.Little))]),3))[0],a=n[1],t=n[2];return rs([o=is(o,us(e,r,Za.Little)),a=is(a,us(e,r+4,Za.Little)),t=is(t=is(t,s),us(e,r+8,Za.Little)<<8)])[2]}function rs(e){var t=U(e,3),n=t[0],r=t[1],i=t[2];return n=as(n=as(n,r),i),n^=i>>>13,r=as(r=as(r,i),n),r^=n<<8,i=as(i=as(i,n),r),i^=r>>>13,n=as(n=as(n,r),i),n^=i>>>12,r=as(r=as(r,i),n),r^=n<<16,i=as(i=as(i,n),r),i^=r>>>5,n=as(n=as(n,r),i),n^=i>>>3,r=as(r=as(r,i),n),r^=n<<10,i=as(i=as(i,n),r),[n,r,i^=r>>>15]}function is(e,t){return os(e,t)[1]}function os(e,t){var n=(65535&e)+(65535&t),r=(e>>>16)+(t>>>16)+(n>>>16);return[r>>>16,r<<16|65535&n]}function as(e,t){var n=(65535&e)-(65535&t);return(e>>16)-(t>>16)+(n>>16)<<16|65535&n}function ss(e,t){return e<<t|e>>>32-t}function ls(e,t){return t>=e.length?0:255&e.charCodeAt(t)}function us(e,t,n){var r=0;if(n===Za.Big)for(var i=0;i<4;i++)r+=ls(e,t+i)<<24-8*i;else for(i=0;i<4;i++)r+=ls(e,t+i)<<8*i;return r}function cs(e){return e.reduce(function(e,t){return e+function(e){for(var t=\"\",n=0;n<4;n++)t+=String.fromCharCode(e>>>8*(3-n)&255);return t}(t)},\"\")}function ps(e,t){for(var n=\"\",r=Math.max(e.length,t.length),i=0,o=0;i<r||o;i++){var a=o+ +(e[i]||0)+ +(t[i]||0);10<=a?(o=1,n+=a-10):(o=0,n+=a)}return n}function ds(e,t){for(var n=\"\",r=t;0!==e;e>>>=1)1&e&&(n=ps(n,r)),r=ps(r,r);return n}(Qa=Za=Za||{})[Qa.Little=0]=\"Little\",Qa[Qa.Big=1]=\"Big\";var hs=(fs.prototype.createNameMapper=function(e){return null},fs);function fs(){}var ms,vs=(f(ys,ms=Va),ys.prototype.toPublicName=function(e){return this.internalToPublic.hasOwnProperty(e)?this.internalToPublic[e]:null},ys.prototype.toInternalName=function(e){return this.publicToInternal.hasOwnProperty(e)?this.publicToInternal[e]:null},ys.prototype.visitText=function(e,t){return null},ys.prototype.visitTagPlaceholder=function(e,t){this.visitPlaceholderName(e.startName),ms.prototype.visitTagPlaceholder.call(this,e,t),this.visitPlaceholderName(e.closeName)},ys.prototype.visitPlaceholder=function(e,t){this.visitPlaceholderName(e.name)},ys.prototype.visitIcuPlaceholder=function(e,t){this.visitPlaceholderName(e.name)},ys.prototype.visitPlaceholderName=function(e){if(e&&!this.internalToPublic.hasOwnProperty(e)){var t=this.mapName(e);if(this.publicToInternal.hasOwnProperty(t)){var n=this.publicToNextId[t];this.publicToNextId[t]=n+1,t=t+\"_\"+n}else this.publicToNextId[t]=1;this.internalToPublic[e]=t,this.publicToInternal[t]=e}},ys);function ys(e,t){var n=ms.call(this)||this;return n.mapName=t,n.internalToPublic={},n.publicToNextId={},n.publicToInternal={},e.nodes.forEach(function(e){return e.visit(n)}),n}function gs(){}var _s=new(gs.prototype.visitTag=function(e){var t=this,n=this._serializeAttributes(e.attrs);if(0==e.children.length)return\"<\"+e.name+n+\"/>\";var r=e.children.map(function(e){return e.visit(t)});return\"<\"+e.name+n+\">\"+r.join(\"\")+\"</\"+e.name+\">\"},gs.prototype.visitText=function(e){return e.value},gs.prototype.visitDeclaration=function(e){return\"<?xml\"+this._serializeAttributes(e.attrs)+\" ?>\"},gs.prototype._serializeAttributes=function(t){var e=Object.keys(t).map(function(e){return e+'=\"'+t[e]+'\"'}).join(\" \");return 0<e.length?\" \"+e:\"\"},gs.prototype.visitDoctype=function(e){return\"<!DOCTYPE \"+e.rootTag+\" [\\n\"+e.dtd+\"\\n]>\"},gs);function bs(e){return e.map(function(e){return e.visit(_s)}).join(\"\")}var ws=(xs.prototype.visit=function(e){return e.visitDeclaration(this)},xs);function xs(t){var n=this;this.attrs={},Object.keys(t).forEach(function(e){n.attrs[e]=Ms(t[e])})}var Cs=(Ss.prototype.visit=function(e){return e.visitDoctype(this)},Ss);function Ss(e,t){this.rootTag=e,this.dtd=t}var Es=(Os.prototype.visit=function(e){return e.visitTag(this)},Os);function Os(e,t,n){var r=this;void 0===t&&(t={}),void 0===n&&(n=[]),this.name=e,this.children=n,this.attrs={},Object.keys(t).forEach(function(e){r.attrs[e]=Ms(t[e])})}var ks=(Ds.prototype.visit=function(e){return e.visitText(this)},Ds);function Ds(e){this.value=Ms(e)}var Ts,Is=(f(Ps,Ts=ks),Ps);function Ps(e){return void 0===e&&(e=0),Ts.call(this,\"\\n\"+new Array(e+1).join(\" \"))||this}var As=[[/&/g,\"&amp;\"],[/\"/g,\"&quot;\"],[/'/g,\"&apos;\"],[/</g,\"&lt;\"],[/>/g,\"&gt;\"]];function Ms(e){return As.reduce(function(e,t){return e.replace(t[0],t[1])},e)}var Rs,Ns=\"messagebundle\",js=\"ph\",Fs=\"ex\",Ls=(f(Vs,Rs=hs),Vs.prototype.write=function(e,t){var n=new qs,r=new Bs,i=new Es(Ns);return e.forEach(function(e){var t={id:e.id};e.description&&(t.desc=e.description),e.meaning&&(t.meaning=e.meaning);var n=[];e.sources.forEach(function(e){n.push(new Es(\"source\",{},[new ks(e.filePath+\":\"+e.startLine+(e.endLine!==e.startLine?\",\"+e.endLine:\"\"))]))}),i.children.push(new Is(2),new Es(\"msg\",t,q(n,r.serialize(e.nodes))))}),i.children.push(new Is),bs([new ws({version:\"1.0\",encoding:\"UTF-8\"}),new Is,new Cs(Ns,'<!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)>'),new Is,n.addDefaultExamples(i),new Is])},Vs.prototype.load=function(e,t){throw new Error(\"Unsupported\")},Vs.prototype.digest=function(e){return zs(e)},Vs.prototype.createNameMapper=function(e){return new vs(e,Ws)},Vs);function Vs(){return null!==Rs&&Rs.apply(this,arguments)||this}var Bs=(Us.prototype.visitText=function(e,t){return[new ks(e.value)]},Us.prototype.visitContainer=function(e,t){var n=this,r=[];return e.children.forEach(function(e){return r.push.apply(r,q(e.visit(n)))}),r},Us.prototype.visitIcu=function(t,e){var n=this,r=[new ks(\"{\"+t.expressionPlaceholder+\", \"+t.type+\", \")];return Object.keys(t.cases).forEach(function(e){r.push.apply(r,q([new ks(e+\" {\")],t.cases[e].visit(n),[new ks(\"} \")]))}),r.push(new ks(\"}\")),r},Us.prototype.visitTagPlaceholder=function(e,t){var n=new ks(\"<\"+e.tag+\">\"),r=new Es(Fs,{},[n]),i=new Es(js,{name:e.startName},[r,n]);if(e.isVoid)return[i];var o=new ks(\"</\"+e.tag+\">\"),a=new Es(Fs,{},[o]),s=new Es(js,{name:e.closeName},[a,o]);return q([i],this.serialize(e.children),[s])},Us.prototype.visitPlaceholder=function(e,t){var n=new ks(\"{{\"+e.value+\"}}\"),r=new Es(Fs,{},[n]);return[new Es(js,{name:e.name},[r,n])]},Us.prototype.visitIcuPlaceholder=function(e,t){var n=e.value.expression,r=e.value.type,i=Object.keys(e.value.cases).map(function(e){return e+\" {...}\"}).join(\" \"),o=new ks(\"{\"+n+\", \"+r+\", \"+i+\"}\"),a=new Es(Fs,{},[o]);return[new Es(js,{name:e.name},[a,o])]},Us.prototype.serialize=function(e){var t=this;return[].concat.apply([],q(e.map(function(e){return e.visit(t)})))},Us);function Us(){}function zs(e){return qa(e)}var qs=(Hs.prototype.addDefaultExamples=function(e){return e.visit(this),e},Hs.prototype.visitTag=function(e){var t=this;if(e.name===js){if(!e.children||0==e.children.length){var n=new ks(e.attrs.name||\"...\");e.children=[new Es(Fs,{},[n])]}}else e.children&&e.children.forEach(function(e){return e.visit(t)})},Hs.prototype.visitText=function(e){},Hs.prototype.visitDeclaration=function(e){},Hs.prototype.visitDoctype=function(e){},Hs);function Hs(){}function Ws(e){return e.toUpperCase().replace(/[^A-Z0-9_]/g,\"_\")}var Gs=\"i18n\",Ys=\"i18n-\",Ks=\"�\";function Zs(e){return e===Gs||e.startsWith(Ys)}function Qs(e){return e instanceof Sa}function Xs(e){return Qs(e)&&1===e.nodes.length&&e.nodes[0]instanceof Ta}function $s(e){return e.nodes[0]}function Js(e,t){return void 0===t&&(t=0),\"\"+Ks+e+(0<t?\":\"+t:\"\")+Ks}function el(e){var n={};return e.forEach(function(e,t){n[t]=xr(1<e.length?\"[\"+e.join(\"|\")+\"]\":e[0])}),n}function tl(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var i=e.get(t)||[];i.push.apply(i,q(n)),e.set(t,i)}function nl(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0);var i=t,o=new Map,n=e instanceof Sa?e.nodes.find(function(e){return e instanceof ka}):e;return n&&n.children.filter(function(e){return e instanceof Ma}).forEach(function(e,t){var n=Js(i+t,r);tl(o,e.name,n)}),o}function rl(t,n){void 0===t&&(t={});var r={};return t&&Object.keys(t).length&&Object.keys(t).forEach(function(e){return r[il(e,n)]=t[e]}),r}function il(e,t){void 0===t&&(t=!0);var n=Ws(e);if(!t)return n;var r,i=n.split(\"_\");if(1===i.length)return e.toLowerCase();/^\\d+$/.test(i[i.length-1])&&(r=i.pop());var o=i.shift().toLowerCase();return i.length&&(o+=i.map(function(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}).join(\"\")),r?o+\"_\"+r:o}function ol(e){return(\"MSG_\"+e).toUpperCase()}var al=/[-.]/,sl=\"_t\",ll=\"ctx\",ul=\"rf\";function cl(e,t){var n=null;return function(){return n||(e.push(new dn(sl,void 0,ke)),n=fr(t)),n}}function pl(e){if(this)throw new Error(\"Builder \"+this.constructor.name+\" doesn't support \"+e+\" yet\");throw new Error(\"Feature \"+e+\" is not supported yet\")}function dl(e){throw new Error(\"Invalid state: Visitor \"+this.constructor.name+\" doesn't handle \"+e.constructor.name)}function hl(e){return Array.isArray(e)?gr(e.map(hl)):xr(e,De)}function fl(e,t){return 0<Object.getOwnPropertyNames(e).length?function(s,l){return _r(Object.getOwnPropertyNames(s).map(function(e){var t,n,r,i,o,a=s[e];return Array.isArray(a)?(i=(t=U(a,2))[0],r=t[1]):(r=(n=U(Er(e,[e,a]),2))[0],i=n[1]),{key:o=r,quoted:al.test(o),value:l&&i!==r?gr([hl(i),hl(r)]):hl(i)}}))}(e,t):null}function ml(e){for(;(t=e[e.length-1])instanceof ht&&null===t.value;)e.pop();var t;return e}var vl,yl,gl,_l=(bl.prototype.set=function(e,t){t&&this.values.push({key:e,value:t,quoted:!1})},bl.prototype.toLiteralMap=function(){return _r(this.values)},bl);function bl(){this.values=[]}function wl(e){var t={};return e instanceof la&&\"ng-template\"!==e.tagName?e.templateAttrs.forEach(function(e){return t[e.name]=\"\"}):(e.attributes.forEach(function(e){Zs(e.name)||(t[e.name]=e.value)}),e.inputs.forEach(function(e){t[e.name]=\"\"}),e.outputs.forEach(function(e){t[e.name]=\"\"})),t}function xl(e,t,n){var r=mr(e,null,n);if(0<t.length)for(var i=0;i<t.length;i++)r=r.callFn(t[i],n);else r=r.callFn([],n);return r}function Cl(e){var t=e.expressions,n=e.strings;return 1===t.length&&2===n.length&&\"\"===n[0]&&\"\"===n[1]?1:t.length+n.length}function Sl(r,e){void 0===e&&(e=!1);var i=fr(\"t\"),t=[],n=Dl(r)?i:new Bt(E.BinaryOperator.Or,i,r.type),o=null;if(null!==r.deps)\"invalid\"!==r.deps&&(o=new ct(n,Ol(r.deps,r.injectFn,e)));else{var a=fr(\"ɵ\"+r.name+\"_BaseFactory\"),s=mr(Ki.getInheritedFactory),l=a.set(s.callFn([r.type])).toDeclStmt(De,[E.StmtModifier.Exported,E.StmtModifier.Final]);t.push(l),o=a.callFn([n])}var u=o,c=[],p=null;function d(e){var t=fr(\"r\");c.push(t.set(sn).toDeclStmt());var n=null;return n=null!==u?t.set(u).toStmt():kl(r.name),c.push(wr(i,[n],[t.set(e).toStmt()])),t}if(Dl(r)&&r.delegateType===vl.Factory){var h=fr(\"ɵ\"+r.name+\"_BaseFactory\"),f=mr(Ki.getFactoryOf);if(r.delegate.isEquivalent(r.type))throw new Error(\"Illegal state: compiling factory that delegates to itself\");var m=h.set(f.callFn([r.delegate])).toDeclStmt(De,[E.StmtModifier.Exported,E.StmtModifier.Final]);t.push(m),p=d(h.callFn([]))}else if(Dl(r)){var v=Ol(r.delegateDeps,r.injectFn,e);p=d(new(r.delegateType===vl.Class?ct:st)(r.delegate,v))}else p=function(e){return void 0!==e.expression}(r)?d(r.expression):o;return null!==p?c.push(new wn(p)):c.push(kl(r.name)),{factory:br([new Rt(\"t\",ke)],c,De,void 0,r.name+\"_Factory\"),statements:t,type:yr(mr(Ki.FactoryDef,[$i(r.type,r.typeArgumentCount)]))}}function El(e){return Sl({name:e.name,type:e.type,deps:e.deps,typeArgumentCount:e.typeArgumentCount,injectFn:e.injectFn},e.isPipe)}function Ol(e,t,n){return e.map(function(e){return function(e,t,n){switch(e.resolved){case E.R3ResolvedDependencyType.Token:case E.R3ResolvedDependencyType.ChangeDetectorRef:var r=0|(e.self?2:0)|(e.skipSelf?4:0)|(e.host?1:0)|(e.optional?8:0),i=0!=r||e.optional?xr(r):null;if(n&&e.resolved===E.R3ResolvedDependencyType.ChangeDetectorRef)return mr(Ki.injectPipeChangeDetectorRef).callFn(i?[i]:[]);var o=[e.token];return i&&o.push(i),mr(t).callFn(o);case E.R3ResolvedDependencyType.Attribute:return mr(Ki.injectAttribute).callFn([e.token]);default:return pl(\"Unknown R3ResolvedDependencyType: \"+E.R3ResolvedDependencyType[e.resolved])}}(e,t,n)})}function kl(e){return new Qn(new ct(new Ve(\"Error\"),[xr(e+\" has a constructor which is not compatible with Dependency Injection. It should probably not be @Injectable().\")]))}function Dl(e){return void 0!==e.delegateType}function Tl(e){var t=null,n={name:e.name,type:e.type,typeArgumentCount:e.typeArgumentCount,deps:[],injectFn:si.inject};if(void 0!==e.useClass){var r=e.useClass.isEquivalent(e.type),i=void 0;void 0!==e.userDeps&&(i=e.userDeps),t=void 0!==i?Sl(m(m({},n),{delegate:e.useClass,delegateDeps:i,delegateType:vl.Class})):r?Sl(n):Il(e.useClass)}else t=void 0!==e.useFactory?void 0!==e.userDeps?Sl(m(m({},n),{delegate:e.useFactory,delegateDeps:e.userDeps||[],delegateType:vl.Function})):{statements:[],factory:br([],[new wn(e.useFactory.callFn([]))])}:void 0!==e.useValue?Sl(m(m({},n),{expression:e.useValue})):void 0!==e.useExisting?Sl(m(m({},n),{expression:mr(si.inject).callFn([e.useExisting])})):Il(e.type);var o=e.type,a=e.providedIn;return{expression:mr(si.ɵɵdefineInjectable).callFn([Qi({token:o,factory:t.factory,providedIn:a})]),type:new ge(mr(si.InjectableDef,[$i(e.type,e.typeArgumentCount)])),statements:t.statements}}function Il(e){return{statements:[],factory:br([new Rt(\"t\",ke)],[new wn(e.callMethod(\"ɵfac\",[fr(\"t\")]))])}}function Pl(e,t){if(null!=t){if(!Array.isArray(t))throw new Error(\"Expected '\"+e+\"' to be an array of strings.\");for(var n=0;n<t.length;n+=1)if(\"string\"!=typeof t[n])throw new Error(\"Expected '\"+e+\"' to be an array of strings.\")}}(yl=vl=vl||{})[yl.Class=0]=\"Class\",yl[yl.Function=1]=\"Function\",yl[yl.Factory=2]=\"Factory\",(gl=E.R3ResolvedDependencyType||(E.R3ResolvedDependencyType={}))[gl.Token=0]=\"Token\",gl[gl.Attribute=1]=\"Attribute\",gl[gl.ChangeDetectorRef=2]=\"ChangeDetectorRef\";var Al=[/^\\s*$/,/[<>]/,/^[{}]$/,/&(#|[a-z])/i,/^\\/\\//];function Ml(e,t){if(!(null==t||Array.isArray(t)&&2==t.length))throw new Error(\"Expected '\"+e+\"' to be an array, [start, end].\");if(null!=t){var n=t[0],r=t[1];Al.forEach(function(e){if(e.test(n)||e.test(r))throw new Error(\"['\"+n+\"', '\"+r+\"'] contains unusable interpolation symbol.\")})}}var Rl=(Nl.fromArray=function(e){return e?(Ml(\"interpolation\",e),new Nl(e[0],e[1])):Fl},Nl);function Nl(e,t){this.start=e,this.end=t}var jl,Fl=new Rl(\"{{\",\"}}\");(jl=E.TokenType||(E.TokenType={}))[jl.Character=0]=\"Character\",jl[jl.Identifier=1]=\"Identifier\",jl[jl.Keyword=2]=\"Keyword\",jl[jl.String=3]=\"String\",jl[jl.Operator=4]=\"Operator\",jl[jl.Number=5]=\"Number\",jl[jl.Error=6]=\"Error\";var Ll=[\"var\",\"let\",\"as\",\"null\",\"undefined\",\"true\",\"false\",\"if\",\"else\",\"this\"],Vl=(Bl.prototype.tokenize=function(e){for(var t=new Gl(e),n=[],r=t.scanToken();null!=r;)n.push(r),r=t.scanToken();return n},Bl);function Bl(){}var Ul=(zl.prototype.isCharacter=function(e){return this.type==E.TokenType.Character&&this.numValue==e},zl.prototype.isNumber=function(){return this.type==E.TokenType.Number},zl.prototype.isString=function(){return this.type==E.TokenType.String},zl.prototype.isOperator=function(e){return this.type==E.TokenType.Operator&&this.strValue==e},zl.prototype.isIdentifier=function(){return this.type==E.TokenType.Identifier},zl.prototype.isKeyword=function(){return this.type==E.TokenType.Keyword},zl.prototype.isKeywordLet=function(){return this.type==E.TokenType.Keyword&&\"let\"==this.strValue},zl.prototype.isKeywordAs=function(){return this.type==E.TokenType.Keyword&&\"as\"==this.strValue},zl.prototype.isKeywordNull=function(){return this.type==E.TokenType.Keyword&&\"null\"==this.strValue},zl.prototype.isKeywordUndefined=function(){return this.type==E.TokenType.Keyword&&\"undefined\"==this.strValue},zl.prototype.isKeywordTrue=function(){return this.type==E.TokenType.Keyword&&\"true\"==this.strValue},zl.prototype.isKeywordFalse=function(){return this.type==E.TokenType.Keyword&&\"false\"==this.strValue},zl.prototype.isKeywordThis=function(){return this.type==E.TokenType.Keyword&&\"this\"==this.strValue},zl.prototype.isError=function(){return this.type==E.TokenType.Error},zl.prototype.toNumber=function(){return this.type==E.TokenType.Number?this.numValue:-1},zl.prototype.toString=function(){switch(this.type){case E.TokenType.Character:case E.TokenType.Identifier:case E.TokenType.Keyword:case E.TokenType.Operator:case E.TokenType.String:case E.TokenType.Error:return this.strValue;case E.TokenType.Number:return this.numValue.toString();default:return null}},zl);function zl(e,t,n,r){this.index=e,this.type=t,this.numValue=n,this.strValue=r}function ql(e,t){return new Ul(e,E.TokenType.Character,t,String.fromCharCode(t))}function Hl(e,t){return new Ul(e,E.TokenType.Operator,0,t)}var Wl=new Ul(-1,E.TokenType.Character,0,\"\"),Gl=(Yl.prototype.advance=function(){this.peek=++this.index>=this.length?0:this.input.charCodeAt(this.index)},Yl.prototype.scanToken=function(){for(var e=this.input,t=this.length,n=this.peek,r=this.index;n<=so;){if(++r>=t){n=0;break}n=e.charCodeAt(r)}if(this.peek=n,t<=(this.index=r))return null;if(Kl(n))return this.scanIdentifier();if(Ro(n))return this.scanNumber(r);var i=r;switch(n){case 46:return this.advance(),Ro(this.peek)?this.scanNumber(i):ql(i,46);case 40:case 41:case To:case Io:case 91:case 93:case 44:case 58:case 59:return this.scanCharacter(i,n);case co:case lo:return this.scanString();case 35:case po:case ho:case 42:case 47:case 37:case 94:return this.scanOperator(i,String.fromCharCode(n));case 63:return this.scanComplexOperator(i,\"?\",46,\".\");case 60:case 62:return this.scanComplexOperator(i,String.fromCharCode(n),61,\"=\");case 33:case 61:return this.scanComplexOperator(i,String.fromCharCode(n),61,\"=\",61,\"=\");case 38:return this.scanComplexOperator(i,\"&\",38,\"&\");case 124:return this.scanComplexOperator(i,\"|\",124,\"|\");case Po:for(;Mo(this.peek);)this.advance();return this.scanToken()}return this.advance(),this.error(\"Unexpected character [\"+String.fromCharCode(n)+\"]\",0)},Yl.prototype.scanCharacter=function(e,t){return this.advance(),ql(e,t)},Yl.prototype.scanOperator=function(e,t){return this.advance(),Hl(e,t)},Yl.prototype.scanComplexOperator=function(e,t,n,r,i,o){this.advance();var a=t;return this.peek==n&&(this.advance(),a+=r),null!=i&&this.peek==i&&(this.advance(),a+=o),Hl(e,a)},Yl.prototype.scanIdentifier=function(){var e=this.index;for(this.advance();Ql(this.peek);)this.advance();var t=this.input.substring(e,this.index);return-1<Ll.indexOf(t)?function(e,t){return new Ul(e,E.TokenType.Keyword,0,t)}(e,t):function(e,t){return new Ul(e,E.TokenType.Identifier,0,t)}(e,t)},Yl.prototype.scanNumber=function(e){var t,n,r=this.index===e;for(this.advance();;){if(Ro(this.peek));else if(46==this.peek)r=!1;else{if((n=this.peek)!=xo&&n!=yo)break;if(this.advance(),(t=this.peek)!=ho&&t!=po||this.advance(),!Ro(this.peek))return this.error(\"Invalid exponent\",-1);r=!1}this.advance()}var i=this.input.substring(e,this.index);return function(e,t){return new Ul(e,E.TokenType.Number,t,\"\")}(e,r?function(e){var t=parseInt(e);if(isNaN(t))throw new Error(\"Invalid integer literal when parsing \"+e);return t}(i):parseFloat(i))},Yl.prototype.scanString=function(){var e=this.index,t=this.peek;this.advance();for(var n=\"\",r=this.index,i=this.input;this.peek!=t;)if(92==this.peek){n+=i.substring(r,this.index),this.advance();var o=void 0;if(this.peek=this.peek,117==this.peek){var a=i.substring(this.index+1,this.index+5);if(!/^[0-9a-f]+$/i.test(a))return this.error(\"Invalid unicode escape [\\\\u\"+a+\"]\",0);o=parseInt(a,16);for(var s=0;s<5;s++)this.advance()}else o=$l(this.peek),this.advance();n+=String.fromCharCode(o),r=this.index}else{if(0==this.peek)return this.error(\"Unterminated quote\",0);this.advance()}var l=i.substring(r,this.index);return this.advance(),function(e,t){return new Ul(e,E.TokenType.String,0,t)}(e,n+l)},Yl.prototype.error=function(e,t){var n=this.index+t;return function(e,t){return new Ul(e,E.TokenType.Error,0,t)}(n,\"Lexer Error: \"+e+\" at column \"+n+\" in expression [\"+this.input+\"]\")},Yl);function Yl(e){this.input=e,this.peek=0,this.index=-1,this.length=e.length,this.advance()}function Kl(e){return wo<=e&&e<=Do||vo<=e&&e<=_o||e==bo||e==uo}function Zl(e){if(0==e.length)return!1;var t=new Gl(e);if(!Kl(t.peek))return!1;for(t.advance();0!==t.peek;){if(!Ql(t.peek))return!1;t.advance()}return!0}function Ql(e){return No(e)||Ro(e)||e==bo||e==uo}function Xl(e){return e===co||e===lo||e===Ao}function $l(e){switch(e){case So:return ro;case Co:return oo;case Eo:return ao;case Oo:return no;case ko:return io;default:return e}}var Jl=function(e,t,n,r){this.input=t,this.errLocation=n,this.ctxLocation=r,this.message=\"Parser Error: \"+e+\" \"+n+\" [\"+t+\"] in \"+r},eu=(tu.prototype.toAbsolute=function(e){return new fc(e+this.start,e+this.end)},tu);function tu(e,t){this.start=e,this.end=t}var nu=(ru.prototype.visit=function(e,t){return void 0===t&&(t=null),null},ru.prototype.toString=function(){return\"AST\"},ru);function ru(e,t){this.span=e,this.sourceSpan=t}var iu,ou=(f(au,iu=nu),au.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitQuote(this,t)},au.prototype.toString=function(){return\"Quote\"},au);function au(e,t,n,r,i){var o=iu.call(this,e,t)||this;return o.prefix=n,o.uninterpretedExpression=r,o.location=i,o}var su,lu=(f(uu,su=nu),uu.prototype.visit=function(e,t){void 0===t&&(t=null)},uu);function uu(){return null!==su&&su.apply(this,arguments)||this}var cu,pu=(f(du,cu=nu),du.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitImplicitReceiver(this,t)},du);function du(){return null!==cu&&cu.apply(this,arguments)||this}var hu,fu=(f(mu,hu=nu),mu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitChain(this,t)},mu);function mu(e,t,n){var r=hu.call(this,e,t)||this;return r.expressions=n,r}var vu,yu=(f(gu,vu=nu),gu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitConditional(this,t)},gu);function gu(e,t,n,r,i){var o=vu.call(this,e,t)||this;return o.condition=n,o.trueExp=r,o.falseExp=i,o}var _u,bu=(f(wu,_u=nu),wu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitPropertyRead(this,t)},wu);function wu(e,t,n,r){var i=_u.call(this,e,t)||this;return i.receiver=n,i.name=r,i}var xu,Cu=(f(Su,xu=nu),Su.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitPropertyWrite(this,t)},Su);function Su(e,t,n,r,i){var o=xu.call(this,e,t)||this;return o.receiver=n,o.name=r,o.value=i,o}var Eu,Ou=(f(ku,Eu=nu),ku.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitSafePropertyRead(this,t)},ku);function ku(e,t,n,r){var i=Eu.call(this,e,t)||this;return i.receiver=n,i.name=r,i}var Du,Tu=(f(Iu,Du=nu),Iu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitKeyedRead(this,t)},Iu);function Iu(e,t,n,r){var i=Du.call(this,e,t)||this;return i.obj=n,i.key=r,i}var Pu,Au=(f(Mu,Pu=nu),Mu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitKeyedWrite(this,t)},Mu);function Mu(e,t,n,r,i){var o=Pu.call(this,e,t)||this;return o.obj=n,o.key=r,o.value=i,o}var Ru,Nu=(f(ju,Ru=nu),ju.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitPipe(this,t)},ju);function ju(e,t,n,r,i){var o=Ru.call(this,e,t)||this;return o.exp=n,o.name=r,o.args=i,o}var Fu,Lu=(f(Vu,Fu=nu),Vu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitLiteralPrimitive(this,t)},Vu);function Vu(e,t,n){var r=Fu.call(this,e,t)||this;return r.value=n,r}var Bu,Uu=(f(zu,Bu=nu),zu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitLiteralArray(this,t)},zu);function zu(e,t,n){var r=Bu.call(this,e,t)||this;return r.expressions=n,r}var qu,Hu=(f(Wu,qu=nu),Wu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitLiteralMap(this,t)},Wu);function Wu(e,t,n,r){var i=qu.call(this,e,t)||this;return i.keys=n,i.values=r,i}var Gu,Yu=(f(Ku,Gu=nu),Ku.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitInterpolation(this,t)},Ku);function Ku(e,t,n,r){var i=Gu.call(this,e,t)||this;return i.strings=n,i.expressions=r,i}var Zu,Qu=(f(Xu,Zu=nu),Xu.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitBinary(this,t)},Xu);function Xu(e,t,n,r,i){var o=Zu.call(this,e,t)||this;return o.operation=n,o.left=r,o.right=i,o}var $u,Ju=(f(ec,$u=nu),ec.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitPrefixNot(this,t)},ec);function ec(e,t,n){var r=$u.call(this,e,t)||this;return r.expression=n,r}var tc,nc=(f(rc,tc=nu),rc.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitNonNullAssert(this,t)},rc);function rc(e,t,n){var r=tc.call(this,e,t)||this;return r.expression=n,r}var ic,oc=(f(ac,ic=nu),ac.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitMethodCall(this,t)},ac);function ac(e,t,n,r,i){var o=ic.call(this,e,t)||this;return o.receiver=n,o.name=r,o.args=i,o}var sc,lc=(f(uc,sc=nu),uc.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitSafeMethodCall(this,t)},uc);function uc(e,t,n,r,i){var o=sc.call(this,e,t)||this;return o.receiver=n,o.name=r,o.args=i,o}var cc,pc=(f(dc,cc=nu),dc.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitFunctionCall(this,t)},dc);function dc(e,t,n,r){var i=cc.call(this,e,t)||this;return i.target=n,i.args=r,i}var hc,fc=function(e,t){this.start=e,this.end=t},mc=(f(vc,hc=nu),vc.prototype.visit=function(e,t){return void 0===t&&(t=null),e.visitASTWithSource?e.visitASTWithSource(this,t):this.ast.visit(e,t)},vc.prototype.toString=function(){return this.source+\" in \"+this.location},vc);function vc(e,t,n,r,i){var o=hc.call(this,new eu(0,null===t?0:t.length),new fc(r,null===t?r:r+t.length))||this;return o.ast=e,o.source=t,o.location=n,o.errors=i,o}var yc=function(e,t,n,r,i,o){this.span=e,this.key=n,this.keyIsVar=r,this.name=i,this.expression=o},gc=(_c.prototype.visitBinary=function(e,t){},_c.prototype.visitChain=function(e,t){},_c.prototype.visitConditional=function(e,t){},_c.prototype.visitFunctionCall=function(e,t){},_c.prototype.visitImplicitReceiver=function(e,t){},_c.prototype.visitInterpolation=function(e,t){},_c.prototype.visitKeyedRead=function(e,t){},_c.prototype.visitKeyedWrite=function(e,t){},_c.prototype.visitLiteralArray=function(e,t){},_c.prototype.visitLiteralMap=function(e,t){},_c.prototype.visitLiteralPrimitive=function(e,t){},_c.prototype.visitMethodCall=function(e,t){},_c.prototype.visitPipe=function(e,t){},_c.prototype.visitPrefixNot=function(e,t){},_c.prototype.visitNonNullAssert=function(e,t){},_c.prototype.visitPropertyRead=function(e,t){},_c.prototype.visitPropertyWrite=function(e,t){},_c.prototype.visitQuote=function(e,t){},_c.prototype.visitSafeMethodCall=function(e,t){},_c.prototype.visitSafePropertyRead=function(e,t){},_c);function _c(){}var bc=(wc.prototype.visitBinary=function(e,t){return e.left.visit(this,t),e.right.visit(this,t),null},wc.prototype.visitChain=function(e,t){return this.visitAll(e.expressions,t)},wc.prototype.visitConditional=function(e,t){return e.condition.visit(this,t),e.trueExp.visit(this,t),e.falseExp.visit(this,t),null},wc.prototype.visitPipe=function(e,t){return e.exp.visit(this,t),this.visitAll(e.args,t),null},wc.prototype.visitFunctionCall=function(e,t){return e.target.visit(this,t),this.visitAll(e.args,t),null},wc.prototype.visitImplicitReceiver=function(e,t){return null},wc.prototype.visitInterpolation=function(e,t){return this.visitAll(e.expressions,t)},wc.prototype.visitKeyedRead=function(e,t){return e.obj.visit(this,t),e.key.visit(this,t),null},wc.prototype.visitKeyedWrite=function(e,t){return e.obj.visit(this,t),e.key.visit(this,t),e.value.visit(this,t),null},wc.prototype.visitLiteralArray=function(e,t){return this.visitAll(e.expressions,t)},wc.prototype.visitLiteralMap=function(e,t){return this.visitAll(e.values,t)},wc.prototype.visitLiteralPrimitive=function(e,t){return null},wc.prototype.visitMethodCall=function(e,t){return e.receiver.visit(this,t),this.visitAll(e.args,t)},wc.prototype.visitPrefixNot=function(e,t){return e.expression.visit(this,t),null},wc.prototype.visitNonNullAssert=function(e,t){return e.expression.visit(this,t),null},wc.prototype.visitPropertyRead=function(e,t){return e.receiver.visit(this,t),null},wc.prototype.visitPropertyWrite=function(e,t){return e.receiver.visit(this,t),e.value.visit(this,t),null},wc.prototype.visitSafePropertyRead=function(e,t){return e.receiver.visit(this,t),null},wc.prototype.visitSafeMethodCall=function(e,t){return e.receiver.visit(this,t),this.visitAll(e.args,t)},wc.prototype.visitAll=function(e,t){var n=this;return e.forEach(function(e){return e.visit(n,t)}),null},wc.prototype.visitQuote=function(e,t){return null},wc);function wc(){}var xc=(Cc.prototype.visitImplicitReceiver=function(e,t){return e},Cc.prototype.visitInterpolation=function(e,t){return new Yu(e.span,e.sourceSpan,e.strings,this.visitAll(e.expressions))},Cc.prototype.visitLiteralPrimitive=function(e,t){return new Lu(e.span,e.sourceSpan,e.value)},Cc.prototype.visitPropertyRead=function(e,t){return new bu(e.span,e.sourceSpan,e.receiver.visit(this),e.name)},Cc.prototype.visitPropertyWrite=function(e,t){return new Cu(e.span,e.sourceSpan,e.receiver.visit(this),e.name,e.value.visit(this))},Cc.prototype.visitSafePropertyRead=function(e,t){return new Ou(e.span,e.sourceSpan,e.receiver.visit(this),e.name)},Cc.prototype.visitMethodCall=function(e,t){return new oc(e.span,e.sourceSpan,e.receiver.visit(this),e.name,this.visitAll(e.args))},Cc.prototype.visitSafeMethodCall=function(e,t){return new lc(e.span,e.sourceSpan,e.receiver.visit(this),e.name,this.visitAll(e.args))},Cc.prototype.visitFunctionCall=function(e,t){return new pc(e.span,e.sourceSpan,e.target.visit(this),this.visitAll(e.args))},Cc.prototype.visitLiteralArray=function(e,t){return new Uu(e.span,e.sourceSpan,this.visitAll(e.expressions))},Cc.prototype.visitLiteralMap=function(e,t){return new Hu(e.span,e.sourceSpan,e.keys,this.visitAll(e.values))},Cc.prototype.visitBinary=function(e,t){return new Qu(e.span,e.sourceSpan,e.operation,e.left.visit(this),e.right.visit(this))},Cc.prototype.visitPrefixNot=function(e,t){return new Ju(e.span,e.sourceSpan,e.expression.visit(this))},Cc.prototype.visitNonNullAssert=function(e,t){return new nc(e.span,e.sourceSpan,e.expression.visit(this))},Cc.prototype.visitConditional=function(e,t){return new yu(e.span,e.sourceSpan,e.condition.visit(this),e.trueExp.visit(this),e.falseExp.visit(this))},Cc.prototype.visitPipe=function(e,t){return new Nu(e.span,e.sourceSpan,e.exp.visit(this),e.name,this.visitAll(e.args))},Cc.prototype.visitKeyedRead=function(e,t){return new Tu(e.span,e.sourceSpan,e.obj.visit(this),e.key.visit(this))},Cc.prototype.visitKeyedWrite=function(e,t){return new Au(e.span,e.sourceSpan,e.obj.visit(this),e.key.visit(this),e.value.visit(this))},Cc.prototype.visitAll=function(e){for(var t=[],n=0;n<e.length;++n)t[n]=e[n].visit(this);return t},Cc.prototype.visitChain=function(e,t){return new fu(e.span,e.sourceSpan,this.visitAll(e.expressions))},Cc.prototype.visitQuote=function(e,t){return new ou(e.span,e.sourceSpan,e.prefix,e.uninterpretedExpression,e.location)},Cc);function Cc(){}var Sc=(Ec.prototype.visitImplicitReceiver=function(e,t){return e},Ec.prototype.visitInterpolation=function(e,t){var n=this.visitAll(e.expressions);return n!==e.expressions?new Yu(e.span,e.sourceSpan,e.strings,n):e},Ec.prototype.visitLiteralPrimitive=function(e,t){return e},Ec.prototype.visitPropertyRead=function(e,t){var n=e.receiver.visit(this);return n!==e.receiver?new bu(e.span,e.sourceSpan,n,e.name):e},Ec.prototype.visitPropertyWrite=function(e,t){var n=e.receiver.visit(this),r=e.value.visit(this);return n!==e.receiver||r!==e.value?new Cu(e.span,e.sourceSpan,n,e.name,r):e},Ec.prototype.visitSafePropertyRead=function(e,t){var n=e.receiver.visit(this);return n!==e.receiver?new Ou(e.span,e.sourceSpan,n,e.name):e},Ec.prototype.visitMethodCall=function(e,t){var n=e.receiver.visit(this),r=this.visitAll(e.args);return n!==e.receiver||r!==e.args?new oc(e.span,e.sourceSpan,n,e.name,r):e},Ec.prototype.visitSafeMethodCall=function(e,t){var n=e.receiver.visit(this),r=this.visitAll(e.args);return n!==e.receiver||r!==e.args?new lc(e.span,e.sourceSpan,n,e.name,r):e},Ec.prototype.visitFunctionCall=function(e,t){var n=e.target&&e.target.visit(this),r=this.visitAll(e.args);return n!==e.target||r!==e.args?new pc(e.span,e.sourceSpan,n,r):e},Ec.prototype.visitLiteralArray=function(e,t){var n=this.visitAll(e.expressions);return n!==e.expressions?new Uu(e.span,e.sourceSpan,n):e},Ec.prototype.visitLiteralMap=function(e,t){var n=this.visitAll(e.values);return n!==e.values?new Hu(e.span,e.sourceSpan,e.keys,n):e},Ec.prototype.visitBinary=function(e,t){var n=e.left.visit(this),r=e.right.visit(this);return n!==e.left||r!==e.right?new Qu(e.span,e.sourceSpan,e.operation,n,r):e},Ec.prototype.visitPrefixNot=function(e,t){var n=e.expression.visit(this);return n!==e.expression?new Ju(e.span,e.sourceSpan,n):e},Ec.prototype.visitNonNullAssert=function(e,t){var n=e.expression.visit(this);return n!==e.expression?new nc(e.span,e.sourceSpan,n):e},Ec.prototype.visitConditional=function(e,t){var n=e.condition.visit(this),r=e.trueExp.visit(this),i=e.falseExp.visit(this);return n!==e.condition||r!==e.trueExp||i!==e.falseExp?new yu(e.span,e.sourceSpan,n,r,i):e},Ec.prototype.visitPipe=function(e,t){var n=e.exp.visit(this),r=this.visitAll(e.args);return n!==e.exp||r!==e.args?new Nu(e.span,e.sourceSpan,n,e.name,r):e},Ec.prototype.visitKeyedRead=function(e,t){var n=e.obj.visit(this),r=e.key.visit(this);return n!==e.obj||r!==e.key?new Tu(e.span,e.sourceSpan,n,r):e},Ec.prototype.visitKeyedWrite=function(e,t){var n=e.obj.visit(this),r=e.key.visit(this),i=e.value.visit(this);return n!==e.obj||r!==e.key||i!==e.value?new Au(e.span,e.sourceSpan,n,r,i):e},Ec.prototype.visitAll=function(e){for(var t=[],n=!1,r=0;r<e.length;++r){var i=e[r],o=i.visit(this);t[r]=o,n=n||o!==i}return n?t:e},Ec.prototype.visitChain=function(e,t){var n=this.visitAll(e.expressions);return n!==e.expressions?new fu(e.span,e.sourceSpan,n):e},Ec.prototype.visitQuote=function(e,t){return e},Ec);function Ec(){}var Oc,kc=function(e,t,n,r,i){this.name=e,this.expression=t,this.type=n,this.sourceSpan=r,this.valueSpan=i,this.isLiteral=this.type===E.ParsedPropertyType.LITERAL_ATTR,this.isAnimation=this.type===E.ParsedPropertyType.ANIMATION};(Oc=E.ParsedPropertyType||(E.ParsedPropertyType={}))[Oc.DEFAULT=0]=\"DEFAULT\",Oc[Oc.LITERAL_ATTR=1]=\"LITERAL_ATTR\",Oc[Oc.ANIMATION=2]=\"ANIMATION\";var Dc=function(e,t,n,r,i,o){this.name=e,this.targetOrPhase=t,this.type=n,this.handler=r,this.sourceSpan=i,this.handlerSpan=o},Tc=function(e,t,n){this.name=e,this.value=t,this.sourceSpan=n},Ic=function(e,t,n,r,i,o,a){this.name=e,this.type=t,this.securityContext=n,this.value=r,this.unit=i,this.sourceSpan=o,this.valueSpan=a},Pc=function(e,t,n){this.strings=e,this.expressions=t,this.offsets=n},Ac=function(e,t,n){this.templateBindings=e,this.warnings=t,this.errors=n};function Mc(e){var t=Vr(e.start)+\"([\\\\s\\\\S]*?)\"+Vr(e.end);return new RegExp(t,\"g\")}var Rc=(Nc.prototype.parseAction=function(e,t,n,r){void 0===r&&(r=Fl),this._checkNoInterpolation(e,t,r);var i=this._stripComments(e),o=this._lexer.tokenize(this._stripComments(e)),a=new jc(e,t,n,o,i.length,!0,this.errors,e.length-i.length).parseChain();return new mc(a,e,t,n,this.errors)},Nc.prototype.parseBinding=function(e,t,n,r){void 0===r&&(r=Fl);var i=this._parseBindingAst(e,t,n,r);return new mc(i,e,t,n,this.errors)},Nc.prototype.parseSimpleBinding=function(e,t,n,r){void 0===r&&(r=Fl);var i=this._parseBindingAst(e,t,n,r),o=Lc.check(i);return 0<o.length&&this._reportError(\"Host binding expression cannot contain \"+o.join(\" \"),e,t),new mc(i,e,t,n,this.errors)},Nc.prototype._reportError=function(e,t,n,r){this.errors.push(new Jl(e,t,n,r))},Nc.prototype._parseBindingAst=function(e,t,n,r){var i=this._parseQuote(e,t,n);if(null!=i)return i;this._checkNoInterpolation(e,t,r);var o=this._stripComments(e),a=this._lexer.tokenize(o);return new jc(e,t,n,a,o.length,!1,this.errors,e.length-o.length).parseChain()},Nc.prototype._parseQuote=function(e,t,n){if(null==e)return null;var r=e.indexOf(\":\");if(-1==r)return null;var i=e.substring(0,r).trim();if(!Zl(i))return null;var o=e.substring(r+1),a=new eu(0,e.length);return new ou(a,a.toAbsolute(n),i,o,t)},Nc.prototype.parseTemplateBindings=function(e,t,n,r){var i=this._lexer.tokenize(t);return new jc(t,n,r,i,t.length,!1,this.errors,0).parseTemplateBindings(e)},Nc.prototype.parseInterpolation=function(e,t,n,r){void 0===r&&(r=Fl);var i=this.splitInterpolation(e,t,r);if(null==i)return null;for(var o=[],a=0;a<i.expressions.length;++a){var s=i.expressions[a],l=this._stripComments(s),u=this._lexer.tokenize(l),c=new jc(e,t,n,u,l.length,!1,this.errors,i.offsets[a]+(s.length-l.length)).parseChain();o.push(c)}var p=new eu(0,null==e?0:e.length);return new mc(new Yu(p,p.toAbsolute(n),i.strings,o),e,t,n,this.errors)},Nc.prototype.splitInterpolation=function(e,t,n){void 0===n&&(n=Fl);var r=Mc(n),i=e.split(r);if(i.length<=1)return null;for(var o=[],a=[],s=[],l=0,u=0;u<i.length;u++){var c=i[u];u%2==0?(o.push(c),l+=c.length):0<c.trim().length?(l+=n.start.length,a.push(c),s.push(l),l+=c.length+n.end.length):(this._reportError(\"Blank expressions are not allowed in interpolated strings\",e,\"at column \"+this._findInterpolationErrorColumn(i,u,n)+\" in\",t),a.push(\"$implict\"),s.push(l))}return new Pc(o,a,s)},Nc.prototype.wrapLiteralPrimitive=function(e,t,n){var r=new eu(0,null==e?0:e.length);return new mc(new Lu(r,r.toAbsolute(n),e),e,t,n,this.errors)},Nc.prototype._stripComments=function(e){var t=this._commentStart(e);return null!=t?e.substring(0,t).trim():e},Nc.prototype._commentStart=function(e){for(var t=null,n=0;n<e.length-1;n++){var r=e.charCodeAt(n),i=e.charCodeAt(n+1);if(47===r&&47==i&&null==t)return n;t===r?t=null:null==t&&Xl(r)&&(t=r)}return null},Nc.prototype._checkNoInterpolation=function(e,t,n){var r=Mc(n),i=e.split(r);1<i.length&&this._reportError(\"Got interpolation (\"+n.start+n.end+\") where expression was expected\",e,\"at column \"+this._findInterpolationErrorColumn(i,1,n)+\" in\",t)},Nc.prototype._findInterpolationErrorColumn=function(e,t,n){for(var r=\"\",i=0;i<t;i++)r+=i%2==0?e[i]:\"\"+n.start+e[i]+n.end;return r.length},Nc);function Nc(e){this._lexer=e,this.errors=[]}var jc=(Fc.prototype.peek=function(e){var t=this.index+e;return t<this.tokens.length?this.tokens[t]:Wl},Object.defineProperty(Fc.prototype,\"next\",{get:function(){return this.peek(0)},enumerable:!0,configurable:!0}),Object.defineProperty(Fc.prototype,\"inputIndex\",{get:function(){return this.index<this.tokens.length?this.next.index+this.offset:this.inputLength+this.offset},enumerable:!0,configurable:!0}),Fc.prototype.span=function(e){return new eu(e,this.inputIndex)},Fc.prototype.sourceSpan=function(e){var t=e+\"@\"+this.inputIndex;return this.sourceSpanCache.has(t)||this.sourceSpanCache.set(t,this.span(e).toAbsolute(this.absoluteOffset)),this.sourceSpanCache.get(t)},Fc.prototype.advance=function(){this.index++},Fc.prototype.optionalCharacter=function(e){return!!this.next.isCharacter(e)&&(this.advance(),!0)},Fc.prototype.peekKeywordLet=function(){return this.next.isKeywordLet()},Fc.prototype.peekKeywordAs=function(){return this.next.isKeywordAs()},Fc.prototype.expectCharacter=function(e){this.optionalCharacter(e)||this.error(\"Missing expected \"+String.fromCharCode(e))},Fc.prototype.optionalOperator=function(e){return!!this.next.isOperator(e)&&(this.advance(),!0)},Fc.prototype.expectOperator=function(e){this.optionalOperator(e)||this.error(\"Missing expected operator \"+e)},Fc.prototype.expectIdentifierOrKeyword=function(){var e=this.next;return e.isIdentifier()||e.isKeyword()?(this.advance(),e.toString()):(this.error(\"Unexpected token \"+e+\", expected identifier or keyword\"),\"\")},Fc.prototype.expectIdentifierOrKeywordOrString=function(){var e=this.next;return e.isIdentifier()||e.isKeyword()||e.isString()?(this.advance(),e.toString()):(this.error(\"Unexpected token \"+e+\", expected identifier, keyword, or string\"),\"\")},Fc.prototype.parseChain=function(){for(var e=[],t=this.inputIndex;this.index<this.tokens.length;){var n=this.parsePipe();if(e.push(n),this.optionalCharacter(59))for(this.parseAction||this.error(\"Binding expression cannot contain chained expression\");this.optionalCharacter(59););else this.index<this.tokens.length&&this.error(\"Unexpected token '\"+this.next+\"'\")}return 0==e.length?new lu(this.span(t),this.sourceSpan(t)):1==e.length?e[0]:new fu(this.span(t),this.sourceSpan(t),e)},Fc.prototype.parsePipe=function(){var e=this.parseExpression();if(this.optionalOperator(\"|\")){this.parseAction&&this.error(\"Cannot have a pipe in an action expression\");do{for(var t=this.expectIdentifierOrKeyword(),n=[];this.optionalCharacter(58);)n.push(this.parseExpression());var r=e.span.start;e=new Nu(this.span(r),this.sourceSpan(r),e,t,n)}while(this.optionalOperator(\"|\"))}return e},Fc.prototype.parseExpression=function(){return this.parseConditional()},Fc.prototype.parseConditional=function(){var e=this.inputIndex,t=this.parseLogicalOr();if(this.optionalOperator(\"?\")){var n=this.parsePipe(),r=void 0;if(this.optionalCharacter(58))r=this.parsePipe();else{var i=this.inputIndex,o=this.input.substring(e,i);this.error(\"Conditional expression \"+o+\" requires all 3 expressions\"),r=new lu(this.span(e),this.sourceSpan(e))}return new yu(this.span(e),this.sourceSpan(e),t,n,r)}return t},Fc.prototype.parseLogicalOr=function(){for(var e=this.parseLogicalAnd();this.optionalOperator(\"||\");){var t=this.parseLogicalAnd(),n=e.span.start;e=new Qu(this.span(n),this.sourceSpan(n),\"||\",e,t)}return e},Fc.prototype.parseLogicalAnd=function(){for(var e=this.parseEquality();this.optionalOperator(\"&&\");){var t=this.parseEquality(),n=e.span.start;e=new Qu(this.span(n),this.sourceSpan(n),\"&&\",e,t)}return e},Fc.prototype.parseEquality=function(){for(var e=this.parseRelational();this.next.type==E.TokenType.Operator;){var t=this.next.strValue;switch(t){case\"==\":case\"===\":case\"!=\":case\"!==\":this.advance();var n=this.parseRelational(),r=e.span.start;e=new Qu(this.span(r),this.sourceSpan(r),t,e,n);continue}break}return e},Fc.prototype.parseRelational=function(){for(var e=this.parseAdditive();this.next.type==E.TokenType.Operator;){var t=this.next.strValue;switch(t){case\"<\":case\">\":case\"<=\":case\">=\":this.advance();var n=this.parseAdditive(),r=e.span.start;e=new Qu(this.span(r),this.sourceSpan(r),t,e,n);continue}break}return e},Fc.prototype.parseAdditive=function(){for(var e=this.parseMultiplicative();this.next.type==E.TokenType.Operator;){var t=this.next.strValue;switch(t){case\"+\":case\"-\":this.advance();var n=this.parseMultiplicative(),r=e.span.start;e=new Qu(this.span(r),this.sourceSpan(r),t,e,n);continue}break}return e},Fc.prototype.parseMultiplicative=function(){for(var e=this.parsePrefix();this.next.type==E.TokenType.Operator;){var t=this.next.strValue;switch(t){case\"*\":case\"%\":case\"/\":this.advance();var n=this.parsePrefix(),r=e.span.start;e=new Qu(this.span(r),this.sourceSpan(r),t,e,n);continue}break}return e},Fc.prototype.parsePrefix=function(){if(this.next.type==E.TokenType.Operator){var e=this.inputIndex,t=this.next.strValue,n=new eu(e,e),r=n.toAbsolute(this.absoluteOffset),i=void 0;switch(t){case\"+\":return this.advance(),i=this.parsePrefix(),new Qu(this.span(e),this.sourceSpan(e),\"-\",i,new Lu(n,r,0));case\"-\":return this.advance(),i=this.parsePrefix(),new Qu(this.span(e),this.sourceSpan(e),t,new Lu(n,r,0),i);case\"!\":return this.advance(),i=this.parsePrefix(),new Ju(this.span(e),this.sourceSpan(e),i)}}return this.parseCallChain()},Fc.prototype.parseCallChain=function(){for(var e=this.parsePrimary(),t=e.span.start;;)if(this.optionalCharacter(46))e=this.parseAccessMemberOrMethodCall(e,!1);else if(this.optionalOperator(\"?.\"))e=this.parseAccessMemberOrMethodCall(e,!0);else if(this.optionalCharacter(91)){this.rbracketsExpected++;var n=this.parsePipe();if(this.rbracketsExpected--,this.expectCharacter(93),this.optionalOperator(\"=\")){var r=this.parseConditional();e=new Au(this.span(t),this.sourceSpan(t),e,n,r)}else e=new Tu(this.span(t),this.sourceSpan(t),e,n)}else if(this.optionalCharacter(40)){this.rparensExpected++;var i=this.parseCallArguments();this.rparensExpected--,this.expectCharacter(41),e=new pc(this.span(t),this.sourceSpan(t),e,i)}else{if(!this.optionalOperator(\"!\"))return e;e=new nc(this.span(t),this.sourceSpan(t),e)}},Fc.prototype.parsePrimary=function(){var e=this.inputIndex;if(this.optionalCharacter(40)){this.rparensExpected++;var t=this.parsePipe();return this.rparensExpected--,this.expectCharacter(41),t}if(this.next.isKeywordNull())return this.advance(),new Lu(this.span(e),this.sourceSpan(e),null);if(this.next.isKeywordUndefined())return this.advance(),new Lu(this.span(e),this.sourceSpan(e),void 0);if(this.next.isKeywordTrue())return this.advance(),new Lu(this.span(e),this.sourceSpan(e),!0);if(this.next.isKeywordFalse())return this.advance(),new Lu(this.span(e),this.sourceSpan(e),!1);if(this.next.isKeywordThis())return this.advance(),new pu(this.span(e),this.sourceSpan(e));if(this.optionalCharacter(91)){this.rbracketsExpected++;var n=this.parseExpressionList(93);return this.rbracketsExpected--,this.expectCharacter(93),new Uu(this.span(e),this.sourceSpan(e),n)}if(this.next.isCharacter(To))return this.parseLiteralMap();if(this.next.isIdentifier())return this.parseAccessMemberOrMethodCall(new pu(this.span(e),this.sourceSpan(e)),!1);if(this.next.isNumber()){var r=this.next.toNumber();return this.advance(),new Lu(this.span(e),this.sourceSpan(e),r)}if(this.next.isString()){var i=this.next.toString();return this.advance(),new Lu(this.span(e),this.sourceSpan(e),i)}return this.index>=this.tokens.length?this.error(\"Unexpected end of expression: \"+this.input):this.error(\"Unexpected token \"+this.next),new lu(this.span(e),this.sourceSpan(e))},Fc.prototype.parseExpressionList=function(e){var t=[];if(!this.next.isCharacter(e))for(;t.push(this.parsePipe()),this.optionalCharacter(44););return t},Fc.prototype.parseLiteralMap=function(){var e=[],t=[],n=this.inputIndex;if(this.expectCharacter(To),!this.optionalCharacter(Io)){this.rbracesExpected++;do{var r=this.next.isString(),i=this.expectIdentifierOrKeywordOrString();e.push({key:i,quoted:r}),this.expectCharacter(58),t.push(this.parsePipe())}while(this.optionalCharacter(44));this.rbracesExpected--,this.expectCharacter(Io)}return new Hu(this.span(n),this.sourceSpan(n),e,t)},Fc.prototype.parseAccessMemberOrMethodCall=function(e,t){void 0===t&&(t=!1);var n=e.span.start,r=this.expectIdentifierOrKeyword();if(this.optionalCharacter(40)){this.rparensExpected++;var i=this.parseCallArguments();this.expectCharacter(41),this.rparensExpected--;var o=this.span(n),a=this.sourceSpan(n);return t?new lc(o,a,e,r,i):new oc(o,a,e,r,i)}if(t)return this.optionalOperator(\"=\")?(this.error(\"The '?.' operator cannot be used in the assignment\"),new lu(this.span(n),this.sourceSpan(n))):new Ou(this.span(n),this.sourceSpan(n),e,r);if(this.optionalOperator(\"=\")){if(!this.parseAction)return this.error(\"Bindings cannot contain assignments\"),new lu(this.span(n),this.sourceSpan(n));var s=this.parseConditional();return new Cu(this.span(n),this.sourceSpan(n),e,r,s)}return o=this.span(n),new bu(this.span(n),this.sourceSpan(n),e,r)},Fc.prototype.parseCallArguments=function(){if(this.next.isCharacter(41))return[];for(var e=[];e.push(this.parsePipe()),this.optionalCharacter(44););return e},Fc.prototype.expectTemplateBindingKey=function(){for(var e=\"\",t=!1;e+=this.expectIdentifierOrKeywordOrString(),(t=this.optionalOperator(\"-\"))&&(e+=\"-\"),t;);return e.toString()},Fc.prototype.parseTemplateBindings=function(e){var t=!0,n=[];do{var r=this.inputIndex,i=void 0,o=void 0,a=!1;t?(i=o=e,t=!1):((a=this.peekKeywordLet())&&this.advance(),i=this.expectTemplateBindingKey(),o=a?i:e+i[0].toUpperCase()+i.substring(1),this.optionalCharacter(58));var s=null,l=null;if(a)s=this.optionalOperator(\"=\")?this.expectTemplateBindingKey():\"$implicit\";else if(this.peekKeywordAs())this.advance(),s=i,o=this.expectTemplateBindingKey(),a=!0;else if(this.next!==Wl&&!this.peekKeywordLet()){var u=this.inputIndex,c=this.parsePipe(),p=this.input.substring(u-this.offset,this.inputIndex-this.offset);l=new mc(c,p,this.location,this.absoluteOffset,this.errors)}if(n.push(new yc(this.span(r),this.sourceSpan(r),o,a,s,l)),this.peekKeywordAs()&&!a){var d=this.inputIndex;this.advance();var h=this.expectTemplateBindingKey();n.push(new yc(this.span(d),this.sourceSpan(d),h,!0,o,null))}this.optionalCharacter(59)||this.optionalCharacter(44)}while(this.index<this.tokens.length);return new Ac(n,[],this.errors)},Fc.prototype.error=function(e,t){void 0===t&&(t=null),this.errors.push(new Jl(e,this.input,this.locationText(t),this.location)),this.skip()},Fc.prototype.locationText=function(e){return void 0===e&&(e=null),null==e&&(e=this.index),e<this.tokens.length?\"at column \"+(this.tokens[e].index+1)+\" in\":\"at the end of the expression\"},Fc.prototype.skip=function(){for(var e=this.next;this.index<this.tokens.length&&!e.isCharacter(59)&&(this.rparensExpected<=0||!e.isCharacter(41))&&(this.rbracesExpected<=0||!e.isCharacter(Io))&&(this.rbracketsExpected<=0||!e.isCharacter(93));)this.next.isError()&&this.errors.push(new Jl(this.next.toString(),this.input,this.locationText(),this.location)),this.advance(),e=this.next},Fc);function Fc(e,t,n,r,i,o,a,s){this.input=e,this.location=t,this.absoluteOffset=n,this.tokens=r,this.inputLength=i,this.parseAction=o,this.errors=a,this.offset=s,this.rparensExpected=0,this.rbracketsExpected=0,this.rbracesExpected=0,this.sourceSpanCache=new Map,this.index=0}var Lc=(Vc.check=function(e){var t=new Vc;return e.visit(t),t.errors},Vc.prototype.visitImplicitReceiver=function(e,t){},Vc.prototype.visitInterpolation=function(e,t){},Vc.prototype.visitLiteralPrimitive=function(e,t){},Vc.prototype.visitPropertyRead=function(e,t){},Vc.prototype.visitPropertyWrite=function(e,t){},Vc.prototype.visitSafePropertyRead=function(e,t){},Vc.prototype.visitMethodCall=function(e,t){},Vc.prototype.visitSafeMethodCall=function(e,t){},Vc.prototype.visitFunctionCall=function(e,t){},Vc.prototype.visitLiteralArray=function(e,t){this.visitAll(e.expressions)},Vc.prototype.visitLiteralMap=function(e,t){this.visitAll(e.values)},Vc.prototype.visitBinary=function(e,t){},Vc.prototype.visitPrefixNot=function(e,t){},Vc.prototype.visitNonNullAssert=function(e,t){},Vc.prototype.visitConditional=function(e,t){},Vc.prototype.visitPipe=function(e,t){this.errors.push(\"pipes\")},Vc.prototype.visitKeyedRead=function(e,t){},Vc.prototype.visitKeyedWrite=function(e,t){},Vc.prototype.visitAll=function(e){var t=this;return e.map(function(e){return e.visit(t)})},Vc.prototype.visitChain=function(e,t){},Vc.prototype.visitQuote=function(e,t){},Vc);function Vc(){this.errors=[]}var Bc=(Object.defineProperty(Uc.prototype,\"empty\",{get:function(){return!this.path||!this.path.length},enumerable:!0,configurable:!0}),Object.defineProperty(Uc.prototype,\"head\",{get:function(){return this.path[0]},enumerable:!0,configurable:!0}),Object.defineProperty(Uc.prototype,\"tail\",{get:function(){return this.path[this.path.length-1]},enumerable:!0,configurable:!0}),Uc.prototype.parentOf=function(e){return e&&this.path[this.path.indexOf(e)-1]},Uc.prototype.childOf=function(e){return this.path[this.path.indexOf(e)+1]},Uc.prototype.first=function(e){for(var t=this.path.length-1;0<=t;t--){var n=this.path[t];if(n instanceof e)return n}},Uc.prototype.push=function(e){this.path.push(e)},Uc.prototype.pop=function(){return this.path.pop()},Uc);function Uc(e,t){void 0===t&&(t=-1),this.path=e,this.position=t}var zc=(qc.prototype.visit=function(e,t){return e.visitText(this,t)},qc);function qc(e,t,n){this.value=e,this.sourceSpan=t,this.i18n=n}var Hc=(Wc.prototype.visit=function(e,t){return e.visitExpansion(this,t)},Wc);function Wc(e,t,n,r,i,o){this.switchValue=e,this.type=t,this.cases=n,this.sourceSpan=r,this.switchValueSourceSpan=i,this.i18n=o}var Gc=(Yc.prototype.visit=function(e,t){return e.visitExpansionCase(this,t)},Yc);function Yc(e,t,n,r,i){this.value=e,this.expression=t,this.sourceSpan=n,this.valueSourceSpan=r,this.expSourceSpan=i}var Kc=(Zc.prototype.visit=function(e,t){return e.visitAttribute(this,t)},Zc);function Zc(e,t,n,r,i){this.name=e,this.value=t,this.sourceSpan=n,this.valueSpan=r,this.i18n=i}var Qc=(Xc.prototype.visit=function(e,t){return e.visitElement(this,t)},Xc);function Xc(e,t,n,r,i,o,a){void 0===i&&(i=null),void 0===o&&(o=null),this.name=e,this.attrs=t,this.children=n,this.sourceSpan=r,this.startSourceSpan=i,this.endSourceSpan=o,this.i18n=a}var $c=(Jc.prototype.visit=function(e,t){return e.visitComment(this,t)},Jc);function Jc(e,t){this.value=e,this.sourceSpan=t}function ep(t,e,n){void 0===n&&(n=null);var r=[],i=t.visit?function(e){return t.visit(e,n)||e.visit(t,n)}:function(e){return e.visit(t,n)};return e.forEach(function(e){var t=i(e);t&&r.push(t)}),r}var tp=(np.prototype.visitElement=function(t,e){this.visitChildren(e,function(e){e(t.attrs),e(t.children)})},np.prototype.visitAttribute=function(e,t){},np.prototype.visitText=function(e,t){},np.prototype.visitComment=function(e,t){},np.prototype.visitExpansion=function(t,e){return this.visitChildren(e,function(e){e(t.cases)})},np.prototype.visitExpansionCase=function(e,t){},np.prototype.visitChildren=function(t,e){var n=[],r=this;return e(function(e){e&&n.push(ep(r,e,t))}),Array.prototype.concat.apply([],n)},np);function np(){}var rp={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\"},ip=(op.prototype.getStartTagPlaceholderName=function(e,t,n){var r=this._hashTag(e,t,n);if(this._signatureToName[r])return this._signatureToName[r];var i=e.toUpperCase(),o=rp[i]||\"TAG_\"+i,a=this._generateUniqueName(n?o:\"START_\"+o);return this._signatureToName[r]=a},op.prototype.getCloseTagPlaceholderName=function(e){var t=this._hashClosingTag(e);if(this._signatureToName[t])return this._signatureToName[t];var n=e.toUpperCase(),r=rp[n]||\"TAG_\"+n,i=this._generateUniqueName(\"CLOSE_\"+r);return this._signatureToName[t]=i},op.prototype.getPlaceholderName=function(e,t){var n=e.toUpperCase(),r=\"PH: \"+n+\"=\"+t;if(this._signatureToName[r])return this._signatureToName[r];var i=this._generateUniqueName(n);return this._signatureToName[r]=i},op.prototype.getUniquePlaceholder=function(e){return this._generateUniqueName(e.toUpperCase())},op.prototype._hashTag=function(e,t,n){return\"<\"+e+Object.keys(t).sort().map(function(e){return\" \"+e+\"=\"+t[e]}).join(\"\")+(n?\"/>\":\"></\"+e+\">\")},op.prototype._hashClosingTag=function(e){return this._hashTag(\"/\"+e,{},!1)},op.prototype._generateUniqueName=function(e){if(!this._placeHolderNameCounts.hasOwnProperty(e))return this._placeHolderNameCounts[e]=1,e;var t=this._placeHolderNameCounts[e];return this._placeHolderNameCounts[e]=t+1,e+\"_\"+t},op);function op(){this._placeHolderNameCounts={},this._signatureToName={}}var ap=new Rc(new Vl);function sp(e){var o=new lp(ap,e);return function(e,t,n,r,i){return o.toI18nMessage(e,t,n,r,i)}}var lp=(up.prototype.toI18nMessage=function(e,t,n,r,i){this._isIcu=1==e.length&&e[0]instanceof Hc,this._icuDepth=0,this._placeholderRegistry=new ip,this._placeholderToContent={},this._placeholderToMessage={},this._visitNodeFn=i;var o=ep(this,e,{});return new Sa(o,this._placeholderToContent,this._placeholderToMessage,t,n,r)},up.prototype._visitNode=function(e,t){return this._visitNodeFn&&this._visitNodeFn(e,t),t},up.prototype.visitElement=function(e,t){var n=ep(this,e.children),r={};e.attrs.forEach(function(e){r[e.name]=e.value});var i=d(e.name).isVoid,o=this._placeholderRegistry.getStartTagPlaceholderName(e.name,r,i);this._placeholderToContent[o]=e.sourceSpan.toString();var a=\"\";i||(a=this._placeholderRegistry.getCloseTagPlaceholderName(e.name),this._placeholderToContent[a]=\"</\"+e.name+\">\");var s=new Pa(e.name,r,o,a,n,i,e.sourceSpan);return this._visitNode(e,s)},up.prototype.visitAttribute=function(e,t){var n=this._visitTextWithInterpolation(e.value,e.sourceSpan);return this._visitNode(e,n)},up.prototype.visitText=function(e,t){var n=this._visitTextWithInterpolation(e.value,e.sourceSpan);return this._visitNode(e,n)},up.prototype.visitComment=function(e,t){return null},up.prototype.visitExpansion=function(e,t){var n=this;this._icuDepth++;var r={},i=new Ta(e.switchValue,e.type,r,e.sourceSpan);if(e.cases.forEach(function(e){r[e.value]=new ka(e.expression.map(function(e){return e.visit(n,{})}),e.expSourceSpan)}),this._icuDepth--,this._isIcu||0<this._icuDepth){var o=this._placeholderRegistry.getUniquePlaceholder(\"VAR_\"+e.type);return i.expressionPlaceholder=o,this._placeholderToContent[o]=e.switchValue,this._visitNode(e,i)}var a=this._placeholderRegistry.getPlaceholderName(\"ICU\",e.sourceSpan.toString()),s=new up(this._expressionParser,this._interpolationConfig);this._placeholderToMessage[a]=s.toI18nMessage([e],\"\",\"\",\"\");var l=new Na(i,a,e.sourceSpan);return this._visitNode(e,l)},up.prototype.visitExpansionCase=function(e,t){throw new Error(\"Unreachable code\")},up.prototype._visitTextWithInterpolation=function(e,t){var n=this._expressionParser.splitInterpolation(e,t.start.toString(),this._interpolationConfig);if(!n)return new Ea(e,t);for(var r=[],i=new ka(r,t),o=this._interpolationConfig,a=o.start,s=o.end,l=0;l<n.strings.length-1;l++){var u=n.expressions[l],c=u.split(cp)[2]||\"INTERPOLATION\",p=this._placeholderRegistry.getPlaceholderName(c,u);n.strings[l].length&&r.push(new Ea(n.strings[l],t)),r.push(new Ma(u,p,t)),this._placeholderToContent[p]=a+u+s}var d=n.strings.length-1;return n.strings[d].length&&r.push(new Ea(n.strings[d],t)),i},up);function up(e,t){this._expressionParser=e,this._interpolationConfig=t}var cp=/\\/\\/[\\s\\S]*i18n[\\s\\S]*\\([\\s\\S]*ph[\\s\\S]*=[\\s\\S]*(\"|')([\\s\\S]*?)\\1[\\s\\S]*\\)/g;function pp(e,t){e.i18n=t}var dp=(hp.prototype._generateI18nMessage=function(e,t,n){void 0===t&&(t=\"\");var r=\"string\"==typeof t?function(e){var t,n,r,i,o;if(e){var a=e.indexOf(vp),s=e.indexOf(mp),l=void 0;t=U(-1<a?[e.slice(0,a),e.slice(a+2)]:[e,\"\"],2),l=t[0],r=t[1],n=U(-1<s?[l.slice(0,s),l.slice(s+1)]:[\"\",l],2),i=n[0],o=n[1]}return{customId:r,meaning:i,description:o}}(t):fp(t),i=this._createI18nMessage(e,r.meaning||\"\",r.description||\"\",r.customId||\"\",n);return i.id||(i.id=\"string\"!=typeof t&&t.id||qa(i)),\"xlf\"===this.i18nLegacyMessageIdFormat||\"xliff\"===this.i18nLegacyMessageIdFormat?i.legacyId=za(i):\"xlf2\"===this.i18nLegacyMessageIdFormat||\"xliff2\"===this.i18nLegacyMessageIdFormat||\"xmb\"===this.i18nLegacyMessageIdFormat?i.legacyId=Ha(i):\"string\"!=typeof t&&(i.legacyId=t.legacyId),i},hp.prototype.visitElement=function(e,t){var n,r,i,o;if(function(e){return e.attrs.some(function(e){return Zs(e.name)})}(e)){var a=[],s={};try{for(var l=z(e.attrs),u=l.next();!u.done;u=l.next())if((f=u.value).name===Gs){var c=e.i18n||f.value,p=this._generateI18nMessage(e.children,c,pp);p.nodes.length&&(e.i18n=p)}else f.name.startsWith(Ys)?s[f.name.slice(Ys.length)]=f.value:a.push(f)}catch(e){n={error:e}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}if(Object.keys(s).length)try{for(var d=z(a),h=d.next();!h.done;h=d.next()){var f,m=s[(f=h.value).name];void 0!==m&&f.value&&(f.i18n=this._generateI18nMessage([f],f.i18n||m))}}catch(e){i={error:e}}finally{try{h&&!h.done&&(o=d.return)&&o.call(d)}finally{if(i)throw i.error}}this.keepI18nAttrs||(e.attrs=a)}return ep(this,e.children,e.i18n),e},hp.prototype.visitExpansion=function(e,t){var n,r=e.i18n;if(r instanceof Na){var i=r.name;$s(n=this._generateI18nMessage([e],r)).name=i}else n=this._generateI18nMessage([e],t||r);return e.i18n=n,e},hp.prototype.visitText=function(e,t){return e},hp.prototype.visitAttribute=function(e,t){return e},hp.prototype.visitComment=function(e,t){return e},hp.prototype.visitExpansionCase=function(e,t){return e},hp);function hp(e,t,n){void 0===e&&(e=Fl),void 0===t&&(t=!1),void 0===n&&(n=\"\"),this.interpolationConfig=e,this.keepI18nAttrs=t,this.i18nLegacyMessageIdFormat=n,this._createI18nMessage=sp(this.interpolationConfig)}function fp(e,t){return void 0===t&&(t=null),{id:\"string\"==typeof t?t:e.id||\"\",customId:e.customId,legacyId:e.legacyId,meaning:e.meaning||\"\",description:e.description||\"\"}}var mp=\"|\",vp=\"@@\";function yp(e,t){var n=e.description||\"\";return e.meaning&&(n=e.meaning+\"|\"+n),(e.customId||e.legacyId)&&(n=n+\"@@\"+(e.customId||e.legacyId)),\"\"===n?gp(t):\":\"+function(e){return e.replace(/:/g,\"\\\\:\")}(n)+\":\"+t}function gp(e){return e.replace(/^:/,\"\\\\:\")}var _p=(bp.prototype.addSource=function(e,t){return void 0===t&&(t=null),this.sourcesContent.has(e)||this.sourcesContent.set(e,t),this},bp.prototype.addLine=function(){return this.lines.push([]),this.lastCol0=0,this},bp.prototype.addMapping=function(e,t,n,r){if(!this.currentLine)throw new Error(\"A line must be added before mappings can be added\");if(null!=t&&!this.sourcesContent.has(t))throw new Error('Unknown source file \"'+t+'\"');if(null==e)throw new Error(\"The column in the generated code must be provided\");if(e<this.lastCol0)throw new Error(\"Mapping should be added in output order\");if(t&&(null==n||null==r))throw new Error(\"The source location must be provided when a source url is provided\");return this.hasMappings=!0,this.lastCol0=e,this.currentLine.push({col0:e,sourceUrl:t,sourceLine0:n,sourceCol0:r}),this},Object.defineProperty(bp.prototype,\"currentLine\",{get:function(){return this.lines.slice(-1)[0]},enumerable:!0,configurable:!0}),bp.prototype.toJSON=function(){var n=this;if(!this.hasMappings)return null;var r=new Map,i=[],o=[];Array.from(this.sourcesContent.keys()).forEach(function(e,t){r.set(e,t),i.push(e),o.push(n.sourcesContent.get(e)||null)});var t=\"\",a=0,s=0,l=0,u=0;return this.lines.forEach(function(e){a=0,t+=e.map(function(e){var t=wp(e.col0-a);return a=e.col0,null!=e.sourceUrl&&(t+=wp(r.get(e.sourceUrl)-s),s=r.get(e.sourceUrl),t+=wp(e.sourceLine0-l),l=e.sourceLine0,t+=wp(e.sourceCol0-u),u=e.sourceCol0),t}).join(\",\"),t+=\";\"}),t=t.slice(0,-1),{file:this.file||\"\",version:3,sourceRoot:\"\",sources:i,sourcesContent:o,mappings:t}},bp.prototype.toJsComment=function(){return this.hasMappings?\"//# sourceMappingURL=data:application/json;base64,\"+function(e){var t=\"\";e=Ur(e);for(var n=0;n<e.length;){var r=e.charCodeAt(n++),i=e.charCodeAt(n++),o=e.charCodeAt(n++);t+=Cp(r>>2),t+=Cp((3&r)<<4|(isNaN(i)?0:i>>4)),t+=isNaN(i)?\"=\":Cp((15&i)<<2|o>>6),t+=isNaN(i)||isNaN(o)?\"=\":Cp(63&o)}return t}(JSON.stringify(this,null,0)):\"\"},bp);function bp(e){void 0===e&&(e=null),this.file=e,this.sourcesContent=new Map,this.lines=[],this.lastCol0=0,this.hasMappings=!1}function wp(e){e=e<0?1+(-e<<1):e<<1;var t=\"\";do{var n=31&e;0<(e>>=5)&&(n|=32),t+=Cp(n)}while(0<e);return t}var xp=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function Cp(e){if(e<0||64<=e)throw new Error(\"Can only encode value in the range [0, 63]\");return xp[e]}var Sp=/'|\\\\|\\n|\\r|\\$/g,Ep=/^[$A-Z_][0-9A-Z_$]*$/i,Op=fr(\"error\",null,null),kp=fr(\"stack\",null,null),Dp=function(e){this.indent=e,this.partsLength=0,this.parts=[],this.srcSpans=[]},Tp=(Ip.createRoot=function(){return new Ip(0)},Object.defineProperty(Ip.prototype,\"_currentLine\",{get:function(){return this._lines[this._lines.length-1]},enumerable:!0,configurable:!0}),Ip.prototype.println=function(e,t){void 0===t&&(t=\"\"),this.print(e||null,t,!0)},Ip.prototype.lineIsEmpty=function(){return 0===this._currentLine.parts.length},Ip.prototype.lineLength=function(){return this._currentLine.indent*\"  \".length+this._currentLine.partsLength},Ip.prototype.print=function(e,t,n){void 0===n&&(n=!1),0<t.length&&(this._currentLine.parts.push(t),this._currentLine.partsLength+=t.length,this._currentLine.srcSpans.push(e&&e.sourceSpan||null)),n&&this._lines.push(new Dp(this._indent))},Ip.prototype.removeEmptyLastLine=function(){this.lineIsEmpty()&&this._lines.pop()},Ip.prototype.incIndent=function(){this._indent++,this.lineIsEmpty()&&(this._currentLine.indent=this._indent)},Ip.prototype.decIndent=function(){this._indent--,this.lineIsEmpty()&&(this._currentLine.indent=this._indent)},Ip.prototype.pushClass=function(e){this._classes.push(e)},Ip.prototype.popClass=function(){return this._classes.pop()},Object.defineProperty(Ip.prototype,\"currentClass\",{get:function(){return 0<this._classes.length?this._classes[this._classes.length-1]:null},enumerable:!0,configurable:!0}),Ip.prototype.toSource=function(){return this.sourceLines.map(function(e){return 0<e.parts.length?Rp(e.indent)+e.parts.join(\"\"):\"\"}).join(\"\\n\")},Ip.prototype.toSourceMapGenerator=function(e,t){void 0===t&&(t=0);for(var c=new _p(e),p=!1,d=function(){p||(c.addSource(e,\" \").addMapping(0,e,0,0),p=!0)},n=0;n<t;n++)c.addLine(),d();return this.sourceLines.forEach(function(e,t){c.addLine();for(var n=e.srcSpans,r=e.parts,i=e.indent*\"  \".length,o=0;o<n.length&&!n[o];)i+=r[o].length,o++;for(o<n.length&&0===t&&0===i?p=!0:d();o<n.length;){var a=n[o],s=a.start.file,l=a.start.line,u=a.start.col;for(c.addSource(s.url,s.content).addMapping(i,s.url,l,u),i+=r[o].length,o++;o<n.length&&(a===n[o]||!n[o]);)i+=r[o].length,o++}}),c},Ip.prototype.setPreambleLineCount=function(e){return this._preambleLineCount=e},Ip.prototype.spanOf=function(e,t){var n=this._lines[e-this._preambleLineCount];if(n)for(var r=t-Rp(n.indent).length,i=0;i<n.parts.length;i++){var o=n.parts[i];if(o.length>r)return n.srcSpans[i];r-=o.length}return null},Object.defineProperty(Ip.prototype,\"sourceLines\",{get:function(){return this._lines.length&&0===this._lines[this._lines.length-1].parts.length?this._lines.slice(0,-1):this._lines},enumerable:!0,configurable:!0}),Ip);function Ip(e){this._indent=e,this._classes=[],this._preambleLineCount=0,this._lines=[new Dp(e)]}var Pp=(Ap.prototype.visitExpressionStmt=function(e,t){return e.expr.visitExpression(this,t),t.println(e,\";\"),null},Ap.prototype.visitReturnStmt=function(e,t){return t.print(e,\"return \"),e.value.visitExpression(this,t),t.println(e,\";\"),null},Ap.prototype.visitIfStmt=function(e,t){t.print(e,\"if (\"),e.condition.visitExpression(this,t),t.print(e,\") {\");var n=null!=e.falseCase&&0<e.falseCase.length;return e.trueCase.length<=1&&!n?(t.print(e,\" \"),this.visitAllStatements(e.trueCase,t),t.removeEmptyLastLine(),t.print(e,\" \")):(t.println(),t.incIndent(),this.visitAllStatements(e.trueCase,t),t.decIndent(),n&&(t.println(e,\"} else {\"),t.incIndent(),this.visitAllStatements(e.falseCase,t),t.decIndent())),t.println(e,\"}\"),null},Ap.prototype.visitThrowStmt=function(e,t){return t.print(e,\"throw \"),e.error.visitExpression(this,t),t.println(e,\";\"),null},Ap.prototype.visitCommentStmt=function(t,n){return t.multiline?n.println(t,\"/* \"+t.comment+\" */\"):t.comment.split(\"\\n\").forEach(function(e){n.println(t,\"// \"+e)}),null},Ap.prototype.visitJSDocCommentStmt=function(e,t){return t.println(e,\"/*\"+e.toString()+\"*/\"),null},Ap.prototype.visitWriteVarExpr=function(e,t){var n=t.lineIsEmpty();return n||t.print(e,\"(\"),t.print(e,e.name+\" = \"),e.value.visitExpression(this,t),n||t.print(e,\")\"),null},Ap.prototype.visitWriteKeyExpr=function(e,t){var n=t.lineIsEmpty();return n||t.print(e,\"(\"),e.receiver.visitExpression(this,t),t.print(e,\"[\"),e.index.visitExpression(this,t),t.print(e,\"] = \"),e.value.visitExpression(this,t),n||t.print(e,\")\"),null},Ap.prototype.visitWritePropExpr=function(e,t){var n=t.lineIsEmpty();return n||t.print(e,\"(\"),e.receiver.visitExpression(this,t),t.print(e,\".\"+e.name+\" = \"),e.value.visitExpression(this,t),n||t.print(e,\")\"),null},Ap.prototype.visitInvokeMethodExpr=function(e,t){e.receiver.visitExpression(this,t);var n=e.name;return null!=e.builtin&&null==(n=this.getBuiltinMethodName(e.builtin))||(t.print(e,\".\"+n+\"(\"),this.visitAllExpressions(e.args,t,\",\"),t.print(e,\")\")),null},Ap.prototype.visitInvokeFunctionExpr=function(e,t){return e.fn.visitExpression(this,t),t.print(e,\"(\"),this.visitAllExpressions(e.args,t,\",\"),t.print(e,\")\"),null},Ap.prototype.visitWrappedNodeExpr=function(e,t){throw new Error(\"Abstract emitter cannot visit WrappedNodeExpr.\")},Ap.prototype.visitTypeofExpr=function(e,t){t.print(e,\"typeof \"),e.expr.visitExpression(this,t)},Ap.prototype.visitReadVarExpr=function(e,t){var n=e.name;if(null!=e.builtin)switch(e.builtin){case E.BuiltinVar.Super:n=\"super\";break;case E.BuiltinVar.This:n=\"this\";break;case E.BuiltinVar.CatchError:n=Op.name;break;case E.BuiltinVar.CatchStack:n=kp.name;break;default:throw new Error(\"Unknown builtin variable \"+e.builtin)}return t.print(e,n),null},Ap.prototype.visitInstantiateExpr=function(e,t){return t.print(e,\"new \"),e.classExpr.visitExpression(this,t),t.print(e,\"(\"),this.visitAllExpressions(e.args,t,\",\"),t.print(e,\")\"),null},Ap.prototype.visitLiteralExpr=function(e,t){var n=e.value;return\"string\"==typeof n?t.print(e,Mp(n,this._escapeDollarInStrings)):t.print(e,\"\"+n),null},Ap.prototype.visitLocalizedString=function(e,t){var n,r,i=yp(e.metaBlock,e.messageParts[0]);t.print(e,\"$localize `\"+Np(i));for(var o=1;o<e.messageParts.length;o++)t.print(e,\"${\"),e.expressions[o-1].visitExpression(this,t),t.print(e,\"}\"+Np((n=e.placeHolderNames[o-1],r=e.messageParts[o],\"\"===n?gp(r):\":\"+n+\":\"+r)));return t.print(e,\"`\"),null},Ap.prototype.visitConditionalExpr=function(e,t){return t.print(e,\"(\"),e.condition.visitExpression(this,t),t.print(e,\"? \"),e.trueCase.visitExpression(this,t),t.print(e,\": \"),e.falseCase.visitExpression(this,t),t.print(e,\")\"),null},Ap.prototype.visitNotExpr=function(e,t){return t.print(e,\"!\"),e.condition.visitExpression(this,t),null},Ap.prototype.visitAssertNotNullExpr=function(e,t){return e.condition.visitExpression(this,t),null},Ap.prototype.visitBinaryOperatorExpr=function(e,t){var n;switch(e.operator){case E.BinaryOperator.Equals:n=\"==\";break;case E.BinaryOperator.Identical:n=\"===\";break;case E.BinaryOperator.NotEquals:n=\"!=\";break;case E.BinaryOperator.NotIdentical:n=\"!==\";break;case E.BinaryOperator.And:n=\"&&\";break;case E.BinaryOperator.BitwiseAnd:n=\"&\";break;case E.BinaryOperator.Or:n=\"||\";break;case E.BinaryOperator.Plus:n=\"+\";break;case E.BinaryOperator.Minus:n=\"-\";break;case E.BinaryOperator.Divide:n=\"/\";break;case E.BinaryOperator.Multiply:n=\"*\";break;case E.BinaryOperator.Modulo:n=\"%\";break;case E.BinaryOperator.Lower:n=\"<\";break;case E.BinaryOperator.LowerEquals:n=\"<=\";break;case E.BinaryOperator.Bigger:n=\">\";break;case E.BinaryOperator.BiggerEquals:n=\">=\";break;default:throw new Error(\"Unknown operator \"+e.operator)}return e.parens&&t.print(e,\"(\"),e.lhs.visitExpression(this,t),t.print(e,\" \"+n+\" \"),e.rhs.visitExpression(this,t),e.parens&&t.print(e,\")\"),null},Ap.prototype.visitReadPropExpr=function(e,t){return e.receiver.visitExpression(this,t),t.print(e,\".\"),t.print(e,e.name),null},Ap.prototype.visitReadKeyExpr=function(e,t){return e.receiver.visitExpression(this,t),t.print(e,\"[\"),e.index.visitExpression(this,t),t.print(e,\"]\"),null},Ap.prototype.visitLiteralArrayExpr=function(e,t){return t.print(e,\"[\"),this.visitAllExpressions(e.entries,t,\",\"),t.print(e,\"]\"),null},Ap.prototype.visitLiteralMapExpr=function(t,n){var r=this;return n.print(t,\"{\"),this.visitAllObjects(function(e){n.print(t,Mp(e.key,r._escapeDollarInStrings,e.quoted)+\":\"),e.value.visitExpression(r,n)},t.entries,n,\",\"),n.print(t,\"}\"),null},Ap.prototype.visitCommaExpr=function(e,t){return t.print(e,\"(\"),this.visitAllExpressions(e.parts,t,\",\"),t.print(e,\")\"),null},Ap.prototype.visitAllExpressions=function(e,t,n){var r=this;this.visitAllObjects(function(e){return e.visitExpression(r,t)},e,t,n)},Ap.prototype.visitAllObjects=function(e,t,n,r){for(var i=!1,o=0;o<t.length;o++)0<o&&(80<n.lineLength()?(n.print(null,r,!0),i||(n.incIndent(),n.incIndent(),i=!0)):n.print(null,r,!1)),e(t[o]);i&&(n.decIndent(),n.decIndent())},Ap.prototype.visitAllStatements=function(e,t){var n=this;e.forEach(function(e){return e.visitStatement(n,t)})},Ap);function Ap(e){this._escapeDollarInStrings=e}function Mp(e,n,t){if(void 0===t&&(t=!0),null==e)return null;var r=e.replace(Sp,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return\"$\"==e[0]?n?\"\\\\$\":\"$\":\"\\n\"==e[0]?\"\\\\n\":\"\\r\"==e[0]?\"\\\\r\":\"\\\\\"+e[0]});return t||!Ep.test(r)?\"'\"+r+\"'\":r}function Rp(e){for(var t=\"\",n=0;n<e;n++)t+=\"  \";return t}function Np(e){return e.replace(/`/g,\"\\\\`\")}var jp,Fp=(f(Lp,jp=Pp),Lp.prototype.visitDeclareClassStmt=function(t,n){var r=this;return n.pushClass(t),this._visitClassConstructor(t,n),null!=t.parent&&(n.print(t,t.name+\".prototype = Object.create(\"),t.parent.visitExpression(this,n),n.println(t,\".prototype);\")),t.getters.forEach(function(e){return r._visitClassGetter(t,e,n)}),t.methods.forEach(function(e){return r._visitClassMethod(t,e,n)}),n.popClass(),null},Lp.prototype._visitClassConstructor=function(e,t){t.print(e,\"function \"+e.name+\"(\"),null!=e.constructorMethod&&this._visitParams(e.constructorMethod.params,t),t.println(e,\") {\"),t.incIndent(),null!=e.constructorMethod&&0<e.constructorMethod.body.length&&(t.println(e,\"var self = this;\"),this.visitAllStatements(e.constructorMethod.body,t)),t.decIndent(),t.println(e,\"}\")},Lp.prototype._visitClassGetter=function(e,t,n){n.println(e,\"Object.defineProperty(\"+e.name+\".prototype, '\"+t.name+\"', { get: function() {\"),n.incIndent(),0<t.body.length&&(n.println(e,\"var self = this;\"),this.visitAllStatements(t.body,n)),n.decIndent(),n.println(e,\"}});\")},Lp.prototype._visitClassMethod=function(e,t,n){n.print(e,e.name+\".prototype.\"+t.name+\" = function(\"),this._visitParams(t.params,n),n.println(e,\") {\"),n.incIndent(),0<t.body.length&&(n.println(e,\"var self = this;\"),this.visitAllStatements(t.body,n)),n.decIndent(),n.println(e,\"};\")},Lp.prototype.visitWrappedNodeExpr=function(e,t){throw new Error(\"Cannot emit a WrappedNodeExpr in Javascript.\")},Lp.prototype.visitReadVarExpr=function(e,t){if(e.builtin===E.BuiltinVar.This)t.print(e,\"self\");else{if(e.builtin===E.BuiltinVar.Super)throw new Error(\"'super' needs to be handled at a parent ast node, not at the variable level!\");jp.prototype.visitReadVarExpr.call(this,e,t)}return null},Lp.prototype.visitDeclareVarStmt=function(e,t){return t.print(e,\"var \"+e.name),e.value&&(t.print(e,\" = \"),e.value.visitExpression(this,t)),t.println(e,\";\"),null},Lp.prototype.visitCastExpr=function(e,t){return e.value.visitExpression(this,t),null},Lp.prototype.visitInvokeFunctionExpr=function(e,t){var n=e.fn;return n instanceof Ve&&n.builtin===E.BuiltinVar.Super?(t.currentClass.parent.visitExpression(this,t),t.print(e,\".call(this\"),0<e.args.length&&(t.print(e,\", \"),this.visitAllExpressions(e.args,t,\",\")),t.print(e,\")\")):jp.prototype.visitInvokeFunctionExpr.call(this,e,t),null},Lp.prototype.visitFunctionExpr=function(e,t){return t.print(e,\"function\"+(e.name?\" \"+e.name:\"\")+\"(\"),this._visitParams(e.params,t),t.println(e,\") {\"),t.incIndent(),this.visitAllStatements(e.statements,t),t.decIndent(),t.print(e,\"}\"),null},Lp.prototype.visitDeclareFunctionStmt=function(e,t){return t.print(e,\"function \"+e.name+\"(\"),this._visitParams(e.params,t),t.println(e,\") {\"),t.incIndent(),this.visitAllStatements(e.statements,t),t.decIndent(),t.println(e,\"}\"),null},Lp.prototype.visitTryCatchStmt=function(e,t){t.println(e,\"try {\"),t.incIndent(),this.visitAllStatements(e.bodyStmts,t),t.decIndent(),t.println(e,\"} catch (\"+Op.name+\") {\"),t.incIndent();var n=[kp.set(Op.prop(\"stack\")).toDeclStmt(null,[E.StmtModifier.Final])].concat(e.catchStmts);return this.visitAllStatements(n,t),t.decIndent(),t.println(e,\"}\"),null},Lp.prototype._visitParams=function(e,t){this.visitAllObjects(function(e){return t.print(null,e.name)},e,t,\",\")},Lp.prototype.getBuiltinMethodName=function(e){var t;switch(e){case E.BuiltinMethod.ConcatArray:t=\"concat\";break;case E.BuiltinMethod.SubscribeObservable:t=\"subscribe\";break;case E.BuiltinMethod.Bind:t=\"bind\";break;default:throw new Error(\"Unknown builtin method: \"+e)}return t},Lp);function Lp(){return jp.call(this,!1)||this}var Vp=(Bp.prototype.evaluateStatements=function(e,t,n,r){var i=new zp(n),o=Tp.createRoot();return 0<t.length&&!function(e){return e.isEquivalent(xr(\"use strict\").toStmt())}(t[0])&&(t=q([xr(\"use strict\").toStmt()],t)),i.visitAllStatements(t,o),i.createReturnStmt(o),this.evaluateCode(e,o,i.getArgs(),r)},Bp.prototype.evaluateCode=function(e,t,n,r){var i='\"use strict\";'+t.toSource()+\"\\n//# sourceURL=\"+e,o=[],a=[];for(var s in n)a.push(n[s]),o.push(s);if(r){var l=(new(Function.bind.apply(Function,q([void 0],o.concat(\"return null;\"))))).toString(),u=l.slice(0,l.indexOf(\"return null;\")).split(\"\\n\").length-1;i+=\"\\n\"+t.toSourceMapGenerator(e,u).toJsComment()}var c=new(Function.bind.apply(Function,q([void 0],o.concat(i))));return this.executeFunction(c,a)},Bp.prototype.executeFunction=function(e,t){return e.apply(void 0,q(t))},Bp);function Bp(){}var Up,zp=(f(qp,Up=Fp),qp.prototype.createReturnStmt=function(e){new wn(new en(this._evalExportedVars.map(function(e){return new Xt(e,fr(e),!1)}))).visitStatement(this,e)},qp.prototype.getArgs=function(){for(var e={},t=0;t<this._evalArgNames.length;t++)e[this._evalArgNames[t]]=this._evalArgValues[t];return e},qp.prototype.visitExternalExpr=function(e,t){return this._emitReferenceToExternal(e,this.reflector.resolveExternalReference(e.value),t),null},qp.prototype.visitWrappedNodeExpr=function(e,t){return this._emitReferenceToExternal(e,e.node,t),null},qp.prototype.visitDeclareVarStmt=function(e,t){return e.hasModifier(E.StmtModifier.Exported)&&this._evalExportedVars.push(e.name),Up.prototype.visitDeclareVarStmt.call(this,e,t)},qp.prototype.visitDeclareFunctionStmt=function(e,t){return e.hasModifier(E.StmtModifier.Exported)&&this._evalExportedVars.push(e.name),Up.prototype.visitDeclareFunctionStmt.call(this,e,t)},qp.prototype.visitDeclareClassStmt=function(e,t){return e.hasModifier(E.StmtModifier.Exported)&&this._evalExportedVars.push(e.name),Up.prototype.visitDeclareClassStmt.call(this,e,t)},qp.prototype._emitReferenceToExternal=function(e,t,n){var r=this._evalArgValues.indexOf(t);if(-1===r){r=this._evalArgValues.length,this._evalArgValues.push(t);var i=_i({reference:t})||\"val\";this._evalArgNames.push(\"jit_\"+i+\"_\"+r)}n.print(e,this._evalArgNames[r])},qp);function qp(e){var t=Up.call(this)||this;return t.reflector=e,t._evalArgNames=[],t._evalArgValues=[],t._evalExportedVars=[],t}var Hp=(Wp.prototype.resolveExternalReference=function(e){if(\"@angular/core\"!==e.moduleName)throw new Error(\"Cannot resolve external reference to \"+e.moduleName+\", only references to @angular/core are supported.\");if(!this.context.hasOwnProperty(e.name))throw new Error(\"No value provided for @angular/core symbol '\"+e.name+\"'.\");return this.context[e.name]},Wp.prototype.parameters=function(e){throw new Error(\"Not implemented.\")},Wp.prototype.annotations=function(e){throw new Error(\"Not implemented.\")},Wp.prototype.shallowAnnotations=function(e){throw new Error(\"Not implemented.\")},Wp.prototype.tryAnnotations=function(e){throw new Error(\"Not implemented.\")},Wp.prototype.propMetadata=function(e){throw new Error(\"Not implemented.\")},Wp.prototype.hasLifecycleHook=function(e,t){throw new Error(\"Not implemented.\")},Wp.prototype.guards=function(e){throw new Error(\"Not implemented.\")},Wp.prototype.componentModuleUrl=function(e,t){throw new Error(\"Not implemented.\")},Wp);function Wp(e){this.context=e}function Gp(t,n){return void 0===n&&(n=!1),_r(Object.keys(t).map(function(e){return{key:e,quoted:n,value:t[e]}}))}function Yp(e){var t=e.type,n=e.bootstrap,r=e.declarations,i=e.imports,o=e.exports,a=e.schemas,s=e.containsForwardDecls,l=e.emitInline,u=e.id,c=[],p={type:t};if(n.length&&(p.bootstrap=Qp(n,s)),l)r.length&&(p.declarations=Qp(r,s)),i.length&&(p.imports=Qp(i,s)),o.length&&(p.exports=Qp(o,s));else{var d=function(e){var t=e.type,n=e.declarations,r=e.imports,i=e.exports,o=e.containsForwardDecls,a={};n.length&&(a.declarations=Qp(n,o));r.length&&(a.imports=Qp(r,o));i.length&&(a.exports=Qp(i,o));return 0!==Object.keys(a).length?new st(mr(Ki.setNgModuleScope),[t,Qi(a)],void 0,void 0,!0).toStmt():null}(e);null!==d&&c.push(d)}return a&&a.length&&(p.schemas=gr(a.map(function(e){return e.value}))),u&&(p.id=u),{expression:mr(Ki.defineNgModule).callFn([Qi(p)]),type:new ge(mr(Ki.NgModuleDefWithMeta,[new ge(t),Zp(r),Zp(i),Zp(o)])),additionalStatements:c}}function Kp(e){var t=Sl({name:e.name,type:e.type,typeArgumentCount:0,deps:e.deps,injectFn:Ki.inject}),n={factory:t.factory};return null!==e.providers&&(n.providers=e.providers),0<e.imports.length&&(n.imports=gr(e.imports)),{expression:mr(Ki.defineInjector).callFn([Qi(n)]),type:new ge(mr(Ki.InjectorDef,[new ge(e.type)])),statements:t.statements}}function Zp(e){var t=e.map(function(e){return function(e){return new ze(e)}(e.type)});return 0<e.length?yr(gr(t)):Ae}function Qp(e,t){var n=gr(e.map(function(e){return e.value}));return t?br([],[new wn(n)]):n}function Xp(e){var t=[];return t.push({key:\"name\",value:xr(e.pipeName),quoted:!1}),t.push({key:\"type\",value:e.type,quoted:!1}),t.push({key:\"pure\",value:xr(e.pure),quoted:!1}),{expression:mr(Ki.definePipe).callFn([_r(t)]),type:new ge(mr(Ki.PipeDefWithMeta,[$i(e.type,e.typeArgumentCount),new ge(new ht(e.pipeName))]))}}function $p(e,t,n){var r=_i(t.type);if(!r)return Nr(\"Cannot resolve the name of \"+t.type);var i={name:r,pipeName:t.name,type:e.importExpr(t.type.reference),typeArgumentCount:0,deps:function(e,t,n){n.resolveExternalReference(si.Injector);var r,i,o=[];try{for(var a=z(e.diDeps),s=a.next();!s.done;s=a.next()){var l=s.value;if(l.token){var u=Oi(l.token),c=l.isAttribute?E.R3ResolvedDependencyType.Attribute:E.R3ResolvedDependencyType.Token,p=u instanceof pi?t.importExpr(u):xr(u);o.push({token:p,resolved:c,host:!!l.isHost,optional:!!l.isOptional,self:!!l.isSelf,skipSelf:!!l.isSkipSelf})}else pl(\"dependency without a token\")}}catch(e){r={error:e}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(r)throw r.error}}return o}(t.type,e,n),pure:t.pure},o=Xp(i),a=El(m(m({},i),{injectFn:Ki.directiveInject,isPipe:!0})),s=e.constantPool.propertyNameOf(3),l=new Nn(r,null,[new On(\"ɵfac\",De,[E.StmtModifier.Static],a.factory)],[],new Tn(null,[],[]),[]),u=new Nn(r,null,[new On(s,De,[E.StmtModifier.Static],o.expression)],[],new Tn(null,[],[]),[]);e.statements.push(l,u)}var Jp=(ed.event=fr(\"$event\"),ed);function ed(){}var td=function(e,n){this.stmts=e,this.allowDefault=n,this.render3Stmts=e.map(function(e){if(e instanceof dn&&e.name==n.name&&e.value instanceof Bt){var t=e.value.lhs;return new wn(t.value)}return e})};function nd(e,t,n,r,i,o){e=e||new bd;var a=rd({createLiteralArrayConverter:function(e){return function(e){return gr(e)}},createLiteralMapConverter:function(e){return function(n){return _r(e.map(function(e,t){return{key:e.key,value:n[t],quoted:e.quoted}}))}},createPipeConverter:function(e){throw new Error(\"Illegal State: Actions are not allowed to contain pipes. Pipe: \"+e)}},n),s=new gd(e,t,r,i,o),l=[];!function t(e,n){Array.isArray(e)?e.forEach(function(e){return t(e,n)}):n.push(e)}(a.visit(s,ad.Statement),l),function(e,t,n){for(var r=e-1;0<=r;r--)n.unshift(dd(t,r))}(s.temporaryCount,r,l),s.usesImplicitReceiver&&e.notifyImplicitReceiverUse();var u=l.length-1,c=null;if(0<=u){var p=function(e){{if(e instanceof gn)return e.expr;if(e instanceof wn)return e.value}return null}(l[u]);p&&(c=function(e){return fr(\"pd_\"+e)}(r),l[u]=c.set(p.cast(ke).notIdentical(xr(!1))).toDeclStmt(null,[E.StmtModifier.Final]))}return new td(l,c)}function rd(e,t){return function(e,t){var n=new vd(e);return t.visit(n)}(e,t)}var id,od,ad,sd,ld=function(e,t){this.stmts=e,this.currValExpr=t};function ud(e,t,n,r,i,o){e=e||new bd;var a=function(e){return fr(\"currVal_\"+e)}(r),s=new gd(e,t,r,o),l=n.visit(s,ad.Expression),u=cd(s,r);return s.usesImplicitReceiver&&e.notifyImplicitReceiverUse(),0===s.temporaryCount&&i==id.TrySimple?new ld([],l):(u.push(a.set(l).toDeclStmt(ke,[E.StmtModifier.Final])),new ld(u,a))}function cd(e,t){for(var n=[],r=0;r<e.temporaryCount;r++)n.push(dd(t,r));return n}function pd(e,t){return\"tmp_\"+e+\"_\"+t}function dd(e,t){return new dn(pd(e,t),sn)}function hd(e,t){if(e!==ad.Expression)throw new Error(\"Expected an expression, but saw \"+t)}function fd(e,t){return e===ad.Statement?t.toStmt():t}(od=id=id||{})[od.General=0]=\"General\",od[od.TrySimple=1]=\"TrySimple\",(sd=ad=ad||{})[sd.Statement=0]=\"Statement\",sd[sd.Expression=1]=\"Expression\";var md,vd=(f(yd,md=xc),yd.prototype.visitPipe=function(e,t){var n=this,r=q([e.exp],e.args).map(function(e){return e.visit(n,t)});return new Cd(e.span,e.sourceSpan,r,this._converterFactory.createPipeConverter(e.name,r.length))},yd.prototype.visitLiteralArray=function(e,t){var n=this,r=e.expressions.map(function(e){return e.visit(n,t)});return new Cd(e.span,e.sourceSpan,r,this._converterFactory.createLiteralArrayConverter(e.expressions.length))},yd.prototype.visitLiteralMap=function(e,t){var n=this,r=e.values.map(function(e){return e.visit(n,t)});return new Cd(e.span,e.sourceSpan,r,this._converterFactory.createLiteralMapConverter(e.keys))},yd);function yd(e){var t=md.call(this)||this;return t._converterFactory=e,t}var gd=(_d.prototype.visitBinary=function(e,t){var n;switch(e.operation){case\"+\":n=E.BinaryOperator.Plus;break;case\"-\":n=E.BinaryOperator.Minus;break;case\"*\":n=E.BinaryOperator.Multiply;break;case\"/\":n=E.BinaryOperator.Divide;break;case\"%\":n=E.BinaryOperator.Modulo;break;case\"&&\":n=E.BinaryOperator.And;break;case\"||\":n=E.BinaryOperator.Or;break;case\"==\":n=E.BinaryOperator.Equals;break;case\"!=\":n=E.BinaryOperator.NotEquals;break;case\"===\":n=E.BinaryOperator.Identical;break;case\"!==\":n=E.BinaryOperator.NotIdentical;break;case\"<\":n=E.BinaryOperator.Lower;break;case\">\":n=E.BinaryOperator.Bigger;break;case\"<=\":n=E.BinaryOperator.LowerEquals;break;case\">=\":n=E.BinaryOperator.BiggerEquals;break;default:throw new Error(\"Unsupported operation \"+e.operation)}return fd(t,new Bt(n,this._visit(e.left,ad.Expression),this._visit(e.right,ad.Expression),void 0,this.convertSourceSpan(e.span)))},_d.prototype.visitChain=function(e,t){return function(e,t){if(e!==ad.Statement)throw new Error(\"Expected a statement, but saw \"+t)}(t,e),this.visitAll(e.expressions,t)},_d.prototype.visitConditional=function(e,t){return fd(t,this._visit(e.condition,ad.Expression).conditional(this._visit(e.trueExp,ad.Expression),this._visit(e.falseExp,ad.Expression),this.convertSourceSpan(e.span)))},_d.prototype.visitPipe=function(e,t){throw new Error(\"Illegal state: Pipes should have been converted into functions. Pipe: \"+e.name)},_d.prototype.visitFunctionCall=function(e,t){var n=this.visitAll(e.args,ad.Expression);return fd(t,e instanceof Cd?e.converter(n):this._visit(e.target,ad.Expression).callFn(n,this.convertSourceSpan(e.span)))},_d.prototype.visitImplicitReceiver=function(e,t){return hd(t,e),this.usesImplicitReceiver=!0,this._implicitReceiver},_d.prototype.visitInterpolation=function(e,t){hd(t,e);for(var n=[xr(e.expressions.length)],r=0;r<e.strings.length-1;r++)n.push(xr(e.strings[r])),n.push(this._visit(e.expressions[r],ad.Expression));return n.push(xr(e.strings[e.strings.length-1])),this.interpolationFunction?this.interpolationFunction(n):e.expressions.length<=9?mr(si.inlineInterpolate).callFn(n):mr(si.interpolate).callFn([n[0],gr(n.slice(1),void 0,this.convertSourceSpan(e.span))])},_d.prototype.visitKeyedRead=function(e,t){var n=this.leftMostSafeNode(e);return n?this.convertSafeAccess(e,n,t):fd(t,this._visit(e.obj,ad.Expression).key(this._visit(e.key,ad.Expression)))},_d.prototype.visitKeyedWrite=function(e,t){var n=this._visit(e.obj,ad.Expression),r=this._visit(e.key,ad.Expression),i=this._visit(e.value,ad.Expression);return fd(t,n.key(r).set(i))},_d.prototype.visitLiteralArray=function(e,t){throw new Error(\"Illegal State: literal arrays should have been converted into functions\")},_d.prototype.visitLiteralMap=function(e,t){throw new Error(\"Illegal State: literal maps should have been converted into functions\")},_d.prototype.visitLiteralPrimitive=function(e,t){var n=null===e.value||void 0===e.value||!0===e.value||!0===e.value?De:void 0;return fd(t,xr(e.value,n,this.convertSourceSpan(e.span)))},_d.prototype._getLocal=function(e){return this._localResolver.getLocal(e)},_d.prototype.visitMethodCall=function(e,t){if(e.receiver instanceof pu&&\"$any\"==e.name){if(1!=(r=this.visitAll(e.args,ad.Expression)).length)throw new Error(\"Invalid call to $any, expected 1 argument but received \"+(r.length||\"none\"));return r[0].cast(ke,this.convertSourceSpan(e.span))}var n=this.leftMostSafeNode(e);if(n)return this.convertSafeAccess(e,n,t);var r=this.visitAll(e.args,ad.Expression),i=this.usesImplicitReceiver,o=null,a=this._visit(e.receiver,ad.Expression);if(a===this._implicitReceiver){var s=this._getLocal(e.name);s&&(this.usesImplicitReceiver=i,o=s.callFn(r))}return null==o&&(o=a.callMethod(e.name,r,this.convertSourceSpan(e.span))),fd(t,o)},_d.prototype.visitPrefixNot=function(e,t){return fd(t,function(e,t){return new Ot(e,t)}(this._visit(e.expression,ad.Expression)))},_d.prototype.visitNonNullAssert=function(e,t){return fd(t,function(e,t){return new Tt(e,t)}(this._visit(e.expression,ad.Expression)))},_d.prototype.visitPropertyRead=function(e,t){var n=this.leftMostSafeNode(e);if(n)return this.convertSafeAccess(e,n,t);var r=null,i=this.usesImplicitReceiver,o=this._visit(e.receiver,ad.Expression);return o===this._implicitReceiver&&(r=this._getLocal(e.name))&&(this.usesImplicitReceiver=i),null==r&&(r=o.prop(e.name)),fd(t,r)},_d.prototype.visitPropertyWrite=function(e,t){var n=this._visit(e.receiver,ad.Expression),r=this.usesImplicitReceiver,i=null;if(n===this._implicitReceiver){var o=this._getLocal(e.name);if(o){if(!(o instanceof qt))throw new Error(\"Cannot assign to a reference or variable!\");i=o,this.usesImplicitReceiver=r}}return null===i&&(i=n.prop(e.name)),fd(t,i.set(this._visit(e.value,ad.Expression)))},_d.prototype.visitSafePropertyRead=function(e,t){return this.convertSafeAccess(e,this.leftMostSafeNode(e),t)},_d.prototype.visitSafeMethodCall=function(e,t){return this.convertSafeAccess(e,this.leftMostSafeNode(e),t)},_d.prototype.visitAll=function(e,t){var n=this;return e.map(function(e){return n._visit(e,t)})},_d.prototype.visitQuote=function(e,t){throw new Error(\"Quotes are not supported for evaluation!\\n        Statement: \"+e.uninterpretedExpression+\" located at \"+e.location)},_d.prototype._visit=function(e,t){var n=this._resultMap.get(e);return n||(this._nodeMap.get(e)||e).visit(this,t)},_d.prototype.convertSafeAccess=function(e,t,n){var r=this._visit(t.receiver,ad.Expression),i=void 0;this.needsTemporary(t.receiver)&&(r=(i=this.allocateTemporary()).set(r),this._resultMap.set(t.receiver,i));var o=r.isBlank();t instanceof lc?this._nodeMap.set(t,new oc(t.span,t.sourceSpan,t.receiver,t.name,t.args)):this._nodeMap.set(t,new bu(t.span,t.sourceSpan,t.receiver,t.name));var a=this._visit(e,ad.Expression);return this._nodeMap.delete(t),i&&this.releaseTemporary(i),fd(n,o.conditional(xr(null),a))},_d.prototype.leftMostSafeNode=function(e){function t(e,t){return(n._nodeMap.get(t)||t).visit(e)}var n=this;return e.visit({visitBinary:function(e){return null},visitChain:function(e){return null},visitConditional:function(e){return null},visitFunctionCall:function(e){return null},visitImplicitReceiver:function(e){return null},visitInterpolation:function(e){return null},visitKeyedRead:function(e){return t(this,e.obj)},visitKeyedWrite:function(e){return null},visitLiteralArray:function(e){return null},visitLiteralMap:function(e){return null},visitLiteralPrimitive:function(e){return null},visitMethodCall:function(e){return t(this,e.receiver)},visitPipe:function(e){return null},visitPrefixNot:function(e){return null},visitNonNullAssert:function(e){return null},visitPropertyRead:function(e){return t(this,e.receiver)},visitPropertyWrite:function(e){return null},visitQuote:function(e){return null},visitSafeMethodCall:function(e){return t(this,e.receiver)||e},visitSafePropertyRead:function(e){return t(this,e.receiver)||e}})},_d.prototype.needsTemporary=function(e){function n(e,t){return t&&(r._nodeMap.get(t)||t).visit(e)}var r=this;return e.visit({visitBinary:function(e){return n(this,e.left)||n(this,e.right)},visitChain:function(e){return!1},visitConditional:function(e){return n(this,e.condition)||n(this,e.trueExp)||n(this,e.falseExp)},visitFunctionCall:function(e){return!0},visitImplicitReceiver:function(e){return!1},visitInterpolation:function(e){return function(t,e){return e.some(function(e){return n(t,e)})}(this,e.expressions)},visitKeyedRead:function(e){return!1},visitKeyedWrite:function(e){return!1},visitLiteralArray:function(e){return!0},visitLiteralMap:function(e){return!0},visitLiteralPrimitive:function(e){return!1},visitMethodCall:function(e){return!0},visitPipe:function(e){return!0},visitPrefixNot:function(e){return n(this,e.expression)},visitNonNullAssert:function(e){return n(this,e.expression)},visitPropertyRead:function(e){return!1},visitPropertyWrite:function(e){return!1},visitQuote:function(e){return!1},visitSafeMethodCall:function(e){return!0},visitSafePropertyRead:function(e){return!1}})},_d.prototype.allocateTemporary=function(){var e=this._currentTemporary++;return this.temporaryCount=Math.max(this._currentTemporary,this.temporaryCount),new Ve(pd(this.bindingId,e))},_d.prototype.releaseTemporary=function(e){if(this._currentTemporary--,e.name!=pd(this.bindingId,this._currentTemporary))throw new Error(\"Temporary \"+e.name+\" released out of order\")},_d.prototype.convertSourceSpan=function(e){if(this.baseSourceSpan){var t=this.baseSourceSpan.start.moveBy(e.start),n=this.baseSourceSpan.start.moveBy(e.end);return new Uo(t,n)}return null},_d);function _d(e,t,n,r,i){this._localResolver=e,this._implicitReceiver=t,this.bindingId=n,this.interpolationFunction=r,this.baseSourceSpan=i,this._nodeMap=new Map,this._resultMap=new Map,this._currentTemporary=0,this.temporaryCount=0,this.usesImplicitReceiver=!1}var bd=(wd.prototype.notifyImplicitReceiverUse=function(){},wd.prototype.getLocal=function(e){return e===Jp.event.name?Jp.event:null},wd);function wd(){}var xd,Cd=(f(Sd,xd=pc),Sd);function Sd(e,t,n,r){var i=xd.call(this,e,t,null,n)||this;return i.args=n,i.converter=r,i}var Ed=(Od.prototype.shimCssText=function(e,t,n){void 0===n&&(n=\"\");var r=function(e){return e.match(Gd)||[]}(e);return e=function(e){return e.replace(Wd,\"\")}(e),e=this._insertDirectives(e),q([this._scopeCssText(e,t,n)],r).join(\"\\n\")},Od.prototype._insertDirectives=function(e){return e=this._insertPolyfillDirectivesInCssText(e),this._insertPolyfillRulesInCssText(e)},Od.prototype._insertPolyfillDirectivesInCssText=function(e){return e.replace(Td,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e[2]+\"{\"})},Od.prototype._insertPolyfillRulesInCssText=function(e){return e.replace(Id,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[0].replace(e[1],\"\").replace(e[2],\"\");return e[4]+n})},Od.prototype._scopeCssText=function(e,t,n){var r=this._extractUnscopedRulesFromCssText(e);return e=this._insertPolyfillHostInCssText(e),e=this._convertColonHost(e),e=this._convertColonHostContext(e),e=this._convertShadowDOMSelectors(e),t&&(e=this._scopeSelectors(e,t,n)),(e=e+\"\\n\"+r).trim()},Od.prototype._extractUnscopedRulesFromCssText=function(e){var t,n=\"\";for(Pd.lastIndex=0;null!==(t=Pd.exec(e));)n+=t[0].replace(t[2],\"\").replace(t[1],t[4])+\"\\n\\n\";return n},Od.prototype._convertColonHost=function(e){return this._convertColonRule(e,Nd,this._colonHostPartReplacer)},Od.prototype._convertColonHostContext=function(e){return this._convertColonRule(e,jd,this._colonHostContextPartReplacer)},Od.prototype._convertColonRule=function(e,t,a){return e.replace(t,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(e[2]){for(var n=e[2].split(\",\"),r=[],i=0;i<n.length;i++){var o=n[i].trim();if(!o)break;r.push(a(Fd,o,e[3]))}return r.join(\",\")}return Fd+e[3]})},Od.prototype._colonHostContextPartReplacer=function(e,t,n){return-1<t.indexOf(Ad)?this._colonHostPartReplacer(e,t,n):e+t+n+\", \"+t+\" \"+e+n},Od.prototype._colonHostPartReplacer=function(e,t,n){return e+t.replace(Ad,\"\")+n},Od.prototype._convertShadowDOMSelectors=function(e){return Vd.reduce(function(e,t){return e.replace(t,\" \")},e)},Od.prototype._scopeSelectors=function(e,r,i){var o=this;return function(e,s){var l=function(e){for(var t=e.split(Kd),n=[],r=[],i=0,o=[],a=0;a<t.length;a++){var s=t[a];s==Qd&&i--,0<i?o.push(s):(0<o.length&&(r.push(o.join(\"\")),n.push(Xd),o=[]),n.push(s)),s==Zd&&i++}return 0<o.length&&(r.push(o.join(\"\")),n.push(Xd)),new Jd(n.join(\"\"),r)}(e),u=0;return l.escapedString.replace(Yd,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[2],r=\"\",i=e[4],o=\"\";i&&i.startsWith(\"{\"+Xd)&&(r=l.blocks[u++],i=i.substring(Xd.length+1),o=\"{\");var a=s(new $d(n,r));return\"\"+e[1]+a.selector+e[3]+o+a.content+i})}(e,function(e){var t=e.selector,n=e.content;return\"@\"!=e.selector[0]?t=o._scopeSelector(e.selector,r,i,o.strictStyling):(e.selector.startsWith(\"@media\")||e.selector.startsWith(\"@supports\")||e.selector.startsWith(\"@page\")||e.selector.startsWith(\"@document\"))&&(n=o._scopeSelectors(e.content,r,i)),new $d(t,n)})},Od.prototype._scopeSelector=function(e,o,a,s){var l=this;return e.split(\",\").map(function(e){return e.trim().split(Bd)}).map(function(e){var t,n=U(e),r=n[0],i=n.slice(1);return q([(t=r,l._selectorNeedsScoping(t,o)?s?l._applyStrictSelectorScope(t,o,a):l._applySelectorScope(t,o,a):t)],i).join(\" \")}).join(\", \")},Od.prototype._selectorNeedsScoping=function(e,t){return!this._makeScopeMatcher(t).test(e)},Od.prototype._makeScopeMatcher=function(e){return e=e.replace(/\\[/g,\"\\\\[\").replace(/\\]/g,\"\\\\]\"),new RegExp(\"^(\"+e+\")\"+Ud,\"m\")},Od.prototype._applySelectorScope=function(e,t,n){return this._applySimpleSelectorScope(e,t,n)},Od.prototype._applySimpleSelectorScope=function(e,t,n){if(zd.lastIndex=0,zd.test(e)){var i=this.strictStyling?\"[\"+n+\"]\":t;return e.replace(Ld,function(e,t){return t.replace(/([^:]*)(:*)(.*)/,function(e,t,n,r){return t+i+n+r})}).replace(zd,i+\" \")}return t+\" \"+e},Od.prototype._applyStrictSelectorScope=function(e,i,o){for(var t,a=this,s=\"[\"+(i=i.replace(/\\[is=([^\\]]*)\\]/g,function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t[0]}))+\"]\",n=function(e){var t=e.trim();if(!t)return\"\";if(-1<e.indexOf(Fd))t=a._applySimpleSelectorScope(e,i,o);else{var n=e.replace(zd,\"\");if(0<n.length){var r=n.match(/([^:]*)(:*)(.*)/);r&&(t=r[1]+s+r[2]+r[3])}}return t},r=new kd(e),l=\"\",u=0,c=/( |>|\\+|~(?!=))\\s*/g,p=!(-1<(e=r.content()).indexOf(Fd));null!==(t=c.exec(e));){var d=t[1],h=e.slice(u,t.index).trim();l+=((p=p||-1<h.indexOf(Fd))?n(h):h)+\" \"+d+\" \",u=c.lastIndex}var f=e.substring(u);return l+=(p=p||-1<f.indexOf(Fd))?n(f):f,r.restore(l)},Od.prototype._insertPolyfillHostInCssText=function(e){return e.replace(Hd,Md).replace(qd,Ad)},Od);function Od(){this.strictStyling=!0}var kd=(Dd.prototype.restore=function(e){var n=this;return e.replace(/__ph-(\\d+)__/g,function(e,t){return n.placeholders[+t]})},Dd.prototype.content=function(){return this._content},Dd);function Dd(e){var i=this;this.placeholders=[],this.index=0,e=e.replace(/(\\[[^\\]]*\\])/g,function(e,t){var n=\"__ph-\"+i.index+\"__\";return i.placeholders.push(t),i.index++,n}),this._content=e.replace(/(:nth-[-\\w]+)(\\([^)]+\\))/g,function(e,t,n){var r=\"__ph-\"+i.index+\"__\";return i.placeholders.push(n),i.index++,t+r})}var Td=/polyfill-next-selector[^}]*content:[\\s]*?(['\"])(.*?)\\1[;\\s]*}([^{]*?){/gim,Id=/(polyfill-rule)[^}]*(content:[\\s]*(['\"])(.*?)\\3)[;\\s]*[^}]*}/gim,Pd=/(polyfill-unscoped-rule)[^}]*(content:[\\s]*(['\"])(.*?)\\3)[;\\s]*[^}]*}/gim,Ad=\"-shadowcsshost\",Md=\"-shadowcsscontext\",Rd=\")(?:\\\\(((?:\\\\([^)(]*\\\\)|[^)(]*)+?)\\\\))?([^,{]*)\",Nd=new RegExp(\"(\"+Ad+Rd,\"gim\"),jd=new RegExp(\"(\"+Md+Rd,\"gim\"),Fd=Ad+\"-no-combinator\",Ld=/-shadowcsshost-no-combinator([^\\s]*)/,Vd=[/::shadow/g,/::content/g,/\\/shadow-deep\\//g,/\\/shadow\\//g],Bd=/(?:>>>)|(?:\\/deep\\/)|(?:::ng-deep)/g,Ud=\"([>\\\\s~+[.,{:][\\\\s\\\\S]*)?$\",zd=/-shadowcsshost/gim,qd=/:host/gim,Hd=/:host-context/gim,Wd=/\\/\\*\\s*[\\s\\S]*?\\*\\//g;var Gd=/\\/\\*\\s*#\\s*source(Mapping)?URL=[\\s\\S]+?\\*\\//g;var Yd=/(\\s*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))/g,Kd=/([{}])/g,Zd=\"{\",Qd=\"}\",Xd=\"%BLOCK%\",$d=function(e,t){this.selector=e,this.content=t};var Jd=function(e,t){this.escapedString=e,this.blocks=t};var eh,th,nh=\"_nghost-%COMP%\",rh=\"_ngcontent-%COMP%\",ih=function(e,t,n){this.name=e,this.moduleUrl=t,this.setValue=n},oh=function(e,t,n,r,i){this.outputCtx=e,this.stylesVar=t,this.dependencies=n,this.isShimmed=r,this.meta=i},ah=(sh.prototype.compileComponent=function(e,t){var n=t.template;return this._compileStyles(e,t,new ki({styles:n.styles,styleUrls:n.styleUrls,moduleUrl:bi(t.type)}),this.needsStyleShim(t),!0)},sh.prototype.compileStyles=function(e,t,n,r){return void 0===r&&(r=this.needsStyleShim(t)),this._compileStyles(e,t,n,r,!1)},sh.prototype.needsStyleShim=function(e){return e.template.encapsulation===I.Emulated},sh.prototype._compileStyles=function(n,e,t,r,i){var o=this,a=t.styles.map(function(e){return xr(o._shimIfNeeded(e,r))}),s=[];t.styleUrls.forEach(function(e){var t=a.length;a.push(null),s.push(new ih(lh(null),e,function(e){return a[t]=n.importExpr(e)}))});var l=lh(i?e:null),u=fr(l).set(gr(a,new we(ke,[le.Const]))).toDeclStmt(null,i?[E.StmtModifier.Final]:[E.StmtModifier.Final,E.StmtModifier.Exported]);return n.statements.push(u),new oh(n,l,s,r,t)},sh.prototype._shimIfNeeded=function(e,t){return t?this._shadowCss.shimCssText(e,rh,nh):e},sh);function sh(e){this._urlResolver=e,this._shadowCss=new Ed}function lh(e){var t=\"styles\";return e&&(t+=\"_\"+_i(e.type)),t}(th=eh=eh||{})[th.TAG_OPEN_START=0]=\"TAG_OPEN_START\",th[th.TAG_OPEN_END=1]=\"TAG_OPEN_END\",th[th.TAG_OPEN_END_VOID=2]=\"TAG_OPEN_END_VOID\",th[th.TAG_CLOSE=3]=\"TAG_CLOSE\",th[th.TEXT=4]=\"TEXT\",th[th.ESCAPABLE_RAW_TEXT=5]=\"ESCAPABLE_RAW_TEXT\",th[th.RAW_TEXT=6]=\"RAW_TEXT\",th[th.COMMENT_START=7]=\"COMMENT_START\",th[th.COMMENT_END=8]=\"COMMENT_END\",th[th.CDATA_START=9]=\"CDATA_START\",th[th.CDATA_END=10]=\"CDATA_END\",th[th.ATTR_NAME=11]=\"ATTR_NAME\",th[th.ATTR_QUOTE=12]=\"ATTR_QUOTE\",th[th.ATTR_VALUE=13]=\"ATTR_VALUE\",th[th.DOC_TYPE=14]=\"DOC_TYPE\",th[th.EXPANSION_FORM_START=15]=\"EXPANSION_FORM_START\",th[th.EXPANSION_CASE_VALUE=16]=\"EXPANSION_CASE_VALUE\",th[th.EXPANSION_CASE_EXP_START=17]=\"EXPANSION_CASE_EXP_START\",th[th.EXPANSION_CASE_EXP_END=18]=\"EXPANSION_CASE_EXP_END\",th[th.EXPANSION_FORM_END=19]=\"EXPANSION_FORM_END\",th[th.EOF=20]=\"EOF\";var uh,ch=function(e,t,n){this.type=e,this.parts=t,this.sourceSpan=n},ph=(f(dh,uh=Go),dh);function dh(e,t,n){var r=uh.call(this,n,e)||this;return r.tokenType=t,r}var hh=function(e,t){this.tokens=e,this.errors=t};var fh=/\\r\\n?/g;function mh(e){return'Unexpected character \"'+(0===e?\"EOF\":String.fromCharCode(e))+'\"'}function vh(e){return'Unknown entity \"'+e+'\" - use the \"&#<decimal>;\" or  \"&#x<hex>;\" syntax'}var yh=function(e){this.error=e},gh=(_h.prototype._processCarriageReturns=function(e){return e.replace(fh,\"\\n\")},_h.prototype.tokenize=function(){for(;0!==this._cursor.peek();){var e=this._cursor.clone();try{this._attemptCharCode(60)?this._attemptCharCode(33)?this._attemptCharCode(91)?this._consumeCdata(e):this._attemptCharCode(ho)?this._consumeComment(e):this._consumeDocType(e):this._attemptCharCode(47)?this._consumeTagClose(e):this._consumeTagOpen(e):this._tokenizeIcu&&this._tokenizeExpansionForm()||this._consumeText()}catch(e){this.handleError(e)}}return this._beginToken(eh.EOF),this._endToken([]),new hh(function(e){for(var t=[],n=void 0,r=0;r<e.length;r++){var i=e[r];n&&n.type==eh.TEXT&&i.type==eh.TEXT?(n.parts[0]+=i.parts[0],n.sourceSpan.end=i.sourceSpan.end):(n=i,t.push(n))}return t}(this.tokens),this.errors)},_h.prototype._tokenizeExpansionForm=function(){if(this.isExpansionFormStart())return this._consumeExpansionFormStart(),!0;if(function(e){return 61===e||No(e)||Ro(e)}(this._cursor.peek())&&this._isInExpansionForm())return this._consumeExpansionCaseStart(),!0;if(this._cursor.peek()===Io){if(this._isInExpansionCase())return this._consumeExpansionCaseEnd(),!0;if(this._isInExpansionForm())return this._consumeExpansionFormEnd(),!0}return!1},_h.prototype._beginToken=function(e,t){void 0===t&&(t=this._cursor.clone()),this._currentTokenStart=t,this._currentTokenType=e},_h.prototype._endToken=function(e,t){if(void 0===t&&(t=this._cursor.clone()),null===this._currentTokenStart)throw new ph(\"Programming error - attempted to end a token when there was no start to the token\",this._currentTokenType,this._cursor.getSpan(t));if(null===this._currentTokenType)throw new ph(\"Programming error - attempted to end a token which has no token type\",null,this._cursor.getSpan(this._currentTokenStart));var n=new ch(this._currentTokenType,e,this._cursor.getSpan(this._currentTokenStart,this._leadingTriviaCodePoints));return this.tokens.push(n),this._currentTokenStart=null,this._currentTokenType=null,n},_h.prototype._createError=function(e,t){this._isInExpansionForm()&&(e+=' (Do you have an unescaped \"{\" in your template? Use \"{{ \\'{\\' }}\") to escape it.)');var n=new ph(e,this._currentTokenType,t);return this._currentTokenStart=null,this._currentTokenType=null,new yh(n)},_h.prototype.handleError=function(e){if(e instanceof Ph&&(e=this._createError(e.msg,this._cursor.getSpan(e.cursor))),!(e instanceof yh))throw e;this.errors.push(e.error)},_h.prototype._attemptCharCode=function(e){return this._cursor.peek()===e&&(this._cursor.advance(),!0)},_h.prototype._attemptCharCodeCaseInsensitive=function(e){return!!function(e,t){return Sh(e)==Sh(t)}(this._cursor.peek(),e)&&(this._cursor.advance(),!0)},_h.prototype._requireCharCode=function(e){var t=this._cursor.clone();if(!this._attemptCharCode(e))throw this._createError(mh(this._cursor.peek()),this._cursor.getSpan(t))},_h.prototype._attemptStr=function(e){var t=e.length;if(this._cursor.charsLeft()<t)return!1;for(var n=this._cursor.clone(),r=0;r<t;r++)if(!this._attemptCharCode(e.charCodeAt(r)))return this._cursor=n,!1;return!0},_h.prototype._attemptStrCaseInsensitive=function(e){for(var t=0;t<e.length;t++)if(!this._attemptCharCodeCaseInsensitive(e.charCodeAt(t)))return!1;return!0},_h.prototype._requireStr=function(e){var t=this._cursor.clone();if(!this._attemptStr(e))throw this._createError(mh(this._cursor.peek()),this._cursor.getSpan(t))},_h.prototype._attemptCharCodeUntilFn=function(e){for(;!e(this._cursor.peek());)this._cursor.advance()},_h.prototype._requireCharCodeUntilFn=function(e,t){var n=this._cursor.clone();if(this._attemptCharCodeUntilFn(e),this._cursor.clone().diff(n)<t)throw this._createError(mh(this._cursor.peek()),this._cursor.getSpan(n))},_h.prototype._attemptUntilChar=function(e){for(;this._cursor.peek()!==e;)this._cursor.advance()},_h.prototype._readChar=function(e){if(e&&38===this._cursor.peek())return this._decodeEntity();var t=String.fromCodePoint(this._cursor.peek());return this._cursor.advance(),t},_h.prototype._decodeEntity=function(){var t=this._cursor.clone();if(this._cursor.advance(),!this._attemptCharCode(35)){var e=this._cursor.clone();if(this._attemptCharCodeUntilFn(Ch),59!=this._cursor.peek())return this._cursor=e,\"&\";var n=this._cursor.getChars(e);this._cursor.advance();var r=u[n];if(!r)throw this._createError(vh(n),this._cursor.getSpan(t));return r}var i=this._attemptCharCode(120)||this._attemptCharCode(88),o=this._cursor.clone();if(this._attemptCharCodeUntilFn(xh),59!=this._cursor.peek())throw this._createError(mh(this._cursor.peek()),this._cursor.getSpan());var a=this._cursor.getChars(o);this._cursor.advance();try{var s=parseInt(a,i?16:10);return String.fromCharCode(s)}catch(e){throw this._createError(vh(this._cursor.getChars(t)),this._cursor.getSpan())}},_h.prototype._consumeRawText=function(e,t){this._beginToken(e?eh.ESCAPABLE_RAW_TEXT:eh.RAW_TEXT);for(var n=[];;){var r=this._cursor.clone(),i=t();if(this._cursor=r,i)break;n.push(this._readChar(e))}return this._endToken([this._processCarriageReturns(n.join(\"\"))])},_h.prototype._consumeComment=function(e){var t=this;this._beginToken(eh.COMMENT_START,e),this._requireCharCode(ho),this._endToken([]),this._consumeRawText(!1,function(){return t._attemptStr(\"--\\x3e\")}),this._beginToken(eh.COMMENT_END),this._requireStr(\"--\\x3e\"),this._endToken([])},_h.prototype._consumeCdata=function(e){var t=this;this._beginToken(eh.CDATA_START,e),this._requireStr(\"CDATA[\"),this._endToken([]),this._consumeRawText(!1,function(){return t._attemptStr(\"]]>\")}),this._beginToken(eh.CDATA_END),this._requireStr(\"]]>\"),this._endToken([])},_h.prototype._consumeDocType=function(e){this._beginToken(eh.DOC_TYPE,e);var t=this._cursor.clone();this._attemptUntilChar(62);var n=this._cursor.getChars(t);this._cursor.advance(),this._endToken([n])},_h.prototype._consumePrefixAndName=function(){for(var e,t,n=this._cursor.clone(),r=\"\";58!==this._cursor.peek()&&!(((e=this._cursor.peek())<wo||Do<e)&&(e<vo||_o<e)&&(e<fo||mo<e));)this._cursor.advance();return t=58===this._cursor.peek()?(r=this._cursor.getChars(n),this._cursor.advance(),this._cursor.clone()):n,this._requireCharCodeUntilFn(wh,\"\"===r?0:1),[r,this._cursor.getChars(t)]},_h.prototype._consumeTagOpen=function(t){var e,n,r,i=this.tokens.length,o=this._cursor.clone();try{if(!No(this._cursor.peek()))throw this._createError(mh(this._cursor.peek()),this._cursor.getSpan(t));for(n=(r=this._consumeTagOpenStart(t)).parts[0],e=r.parts[1],this._attemptCharCodeUntilFn(bh);47!==this._cursor.peek()&&62!==this._cursor.peek();)this._consumeAttributeName(),this._attemptCharCodeUntilFn(bh),this._attemptCharCode(61)&&(this._attemptCharCodeUntilFn(bh),this._consumeAttributeValue()),this._attemptCharCodeUntilFn(bh);this._consumeTagOpenEnd()}catch(e){if(e instanceof yh)return this._cursor=o,r&&(this.tokens.length=i),this._beginToken(eh.TEXT,t),void this._endToken([\"<\"]);throw e}var a=this._getTagDefinition(e).contentType;a===E.TagContentType.RAW_TEXT?this._consumeRawTextWithTagClose(n,e,!1):a===E.TagContentType.ESCAPABLE_RAW_TEXT&&this._consumeRawTextWithTagClose(n,e,!0)},_h.prototype._consumeRawTextWithTagClose=function(e,t,n){var r=this;this._consumeRawText(n,function(){return!!r._attemptCharCode(60)&&!!r._attemptCharCode(47)&&(r._attemptCharCodeUntilFn(bh),!!r._attemptStrCaseInsensitive(t)&&(r._attemptCharCodeUntilFn(bh),r._attemptCharCode(62)))}),this._beginToken(eh.TAG_CLOSE),this._requireCharCodeUntilFn(function(e){return 62===e},3),this._cursor.advance(),this._endToken([e,t])},_h.prototype._consumeTagOpenStart=function(e){this._beginToken(eh.TAG_OPEN_START,e);var t=this._consumePrefixAndName();return this._endToken(t)},_h.prototype._consumeAttributeName=function(){var e=this._cursor.peek();if(e===co||e===lo)throw this._createError(mh(e),this._cursor.getSpan());this._beginToken(eh.ATTR_NAME);var t=this._consumePrefixAndName();this._endToken(t)},_h.prototype._consumeAttributeValue=function(){var e;if(this._cursor.peek()===co||this._cursor.peek()===lo){this._beginToken(eh.ATTR_QUOTE);var t=this._cursor.peek();this._cursor.advance(),this._endToken([String.fromCodePoint(t)]),this._beginToken(eh.ATTR_VALUE);for(var n=[];this._cursor.peek()!==t;)n.push(this._readChar(!0));e=n.join(\"\"),this._endToken([this._processCarriageReturns(e)]),this._beginToken(eh.ATTR_QUOTE),this._cursor.advance(),this._endToken([String.fromCodePoint(t)])}else{this._beginToken(eh.ATTR_VALUE);var r=this._cursor.clone();this._requireCharCodeUntilFn(wh,1),e=this._cursor.getChars(r),this._endToken([this._processCarriageReturns(e)])}},_h.prototype._consumeTagOpenEnd=function(){var e=this._attemptCharCode(47)?eh.TAG_OPEN_END_VOID:eh.TAG_OPEN_END;this._beginToken(e),this._requireCharCode(62),this._endToken([])},_h.prototype._consumeTagClose=function(e){this._beginToken(eh.TAG_CLOSE,e),this._attemptCharCodeUntilFn(bh);var t=this._consumePrefixAndName();this._attemptCharCodeUntilFn(bh),this._requireCharCode(62),this._endToken(t)},_h.prototype._consumeExpansionFormStart=function(){this._beginToken(eh.EXPANSION_FORM_START),this._requireCharCode(To),this._endToken([]),this._expansionCaseStack.push(eh.EXPANSION_FORM_START),this._beginToken(eh.RAW_TEXT);var e=this._readUntil(44);this._endToken([e]),this._requireCharCode(44),this._attemptCharCodeUntilFn(bh),this._beginToken(eh.RAW_TEXT);var t=this._readUntil(44);this._endToken([t]),this._requireCharCode(44),this._attemptCharCodeUntilFn(bh)},_h.prototype._consumeExpansionCaseStart=function(){this._beginToken(eh.EXPANSION_CASE_VALUE);var e=this._readUntil(To).trim();this._endToken([e]),this._attemptCharCodeUntilFn(bh),this._beginToken(eh.EXPANSION_CASE_EXP_START),this._requireCharCode(To),this._endToken([]),this._attemptCharCodeUntilFn(bh),this._expansionCaseStack.push(eh.EXPANSION_CASE_EXP_START)},_h.prototype._consumeExpansionCaseEnd=function(){this._beginToken(eh.EXPANSION_CASE_EXP_END),this._requireCharCode(Io),this._endToken([]),this._attemptCharCodeUntilFn(bh),this._expansionCaseStack.pop()},_h.prototype._consumeExpansionFormEnd=function(){this._beginToken(eh.EXPANSION_FORM_END),this._requireCharCode(Io),this._endToken([]),this._expansionCaseStack.pop()},_h.prototype._consumeText=function(){var e=this._cursor.clone();this._beginToken(eh.TEXT,e);for(var t=[];this._interpolationConfig&&this._attemptStr(this._interpolationConfig.start)?(t.push(this._interpolationConfig.start),this._inInterpolation=!0):this._interpolationConfig&&this._inInterpolation&&this._attemptStr(this._interpolationConfig.end)?(t.push(this._interpolationConfig.end),this._inInterpolation=!1):t.push(this._readChar(!0)),!this._isTextEnd(););this._endToken([this._processCarriageReturns(t.join(\"\"))])},_h.prototype._isTextEnd=function(){if(60===this._cursor.peek()||0===this._cursor.peek())return!0;if(this._tokenizeIcu&&!this._inInterpolation){if(this.isExpansionFormStart())return!0;if(this._cursor.peek()===Io&&this._isInExpansionCase())return!0}return!1},_h.prototype._readUntil=function(e){var t=this._cursor.clone();return this._attemptUntilChar(e),this._cursor.getChars(t)},_h.prototype._isInExpansionCase=function(){return 0<this._expansionCaseStack.length&&this._expansionCaseStack[this._expansionCaseStack.length-1]===eh.EXPANSION_CASE_EXP_START},_h.prototype._isInExpansionForm=function(){return 0<this._expansionCaseStack.length&&this._expansionCaseStack[this._expansionCaseStack.length-1]===eh.EXPANSION_FORM_START},_h.prototype.isExpansionFormStart=function(){if(this._cursor.peek()!==To)return!1;if(this._interpolationConfig){var e=this._cursor.clone(),t=this._attemptStr(this._interpolationConfig.start);return this._cursor=e,!t}return!0},_h);function _h(e,t,n){this._getTagDefinition=t,this._currentTokenStart=null,this._currentTokenType=null,this._expansionCaseStack=[],this._inInterpolation=!1,this.tokens=[],this.errors=[],this._tokenizeIcu=n.tokenizeExpansionForms||!1,this._interpolationConfig=n.interpolationConfig||Fl,this._leadingTriviaCodePoints=n.leadingTriviaChars&&n.leadingTriviaChars.map(function(e){return e.codePointAt(0)||0});var r=n.range||{endPos:e.content.length,startPos:0,startLine:0,startCol:0};this._cursor=n.escapedString?new Dh(e,r):new Eh(e,r);try{this._cursor.init()}catch(e){this.handleError(e)}}function bh(e){return!Mo(e)||0===e}function wh(e){return Mo(e)||62===e||47===e||e===co||e===lo||61===e}function xh(e){return 59==e||0==e||!function(e){return wo<=e&&e<=Co||vo<=e&&e<=go||Ro(e)}(e)}function Ch(e){return 59==e||0==e||!No(e)}function Sh(e){return wo<=e&&e<=Do?e-wo+vo:e}var Eh=(Oh.prototype.clone=function(){return new Oh(this)},Oh.prototype.peek=function(){return this.state.peek},Oh.prototype.charsLeft=function(){return this.end-this.state.offset},Oh.prototype.diff=function(e){return this.state.offset-e.state.offset},Oh.prototype.advance=function(){this.advanceState(this.state)},Oh.prototype.init=function(){this.updatePeek(this.state)},Oh.prototype.getSpan=function(e,t){if(e=e||this,t)for(e=e.clone();0<this.diff(e)&&-1!==t.indexOf(e.peek());)e.advance();return new Uo(new Lo(e.file,e.state.offset,e.state.line,e.state.column),new Lo(this.file,this.state.offset,this.state.line,this.state.column))},Oh.prototype.getChars=function(e){return this.input.substring(e.state.offset,this.state.offset)},Oh.prototype.charAt=function(e){return this.input.charCodeAt(e)},Oh.prototype.advanceState=function(e){if(e.offset>=this.end)throw this.state=e,new Ph('Unexpected character \"EOF\"',this);var t=this.charAt(e.offset);t===ro?(e.line++,e.column=0):jo(t)||e.column++,e.offset++,this.updatePeek(e)},Oh.prototype.updatePeek=function(e){e.peek=e.offset>=this.end?0:this.charAt(e.offset)},Oh);function Oh(e,t){if(e instanceof Oh)this.file=e.file,this.input=e.input,this.end=e.end,this.state=m({},e.state);else{if(!t)throw new Error(\"Programming error: the range argument must be provided with a file argument.\");this.file=e,this.input=e.content,this.end=t.endPos,this.state={peek:-1,offset:t.startPos,line:t.startLine,column:t.startCol}}}var kh,Dh=(f(Th,kh=Eh),Th.prototype.advance=function(){this.state=this.internalState,kh.prototype.advance.call(this),this.processEscapeSequence()},Th.prototype.init=function(){kh.prototype.init.call(this),this.processEscapeSequence()},Th.prototype.clone=function(){return new Th(this)},Th.prototype.getChars=function(e){for(var t=e.clone(),n=\"\";t.internalState.offset<this.internalState.offset;)n+=String.fromCodePoint(t.peek()),t.advance();return n},Th.prototype.processEscapeSequence=function(){function e(){return t.internalState.peek}var t=this;if(92===e())if(this.internalState=m({},this.state),this.advanceState(this.internalState),e()===So)this.state.peek=ro;else if(e()===Eo)this.state.peek=ao;else if(e()===ko)this.state.peek=io;else if(e()===Oo)this.state.peek=no;else if(98===e())this.state.peek=8;else if(e()===Co)this.state.peek=oo;else if(117===e())if(this.advanceState(this.internalState),e()===To){this.advanceState(this.internalState);for(var n=this.clone(),r=0;e()!==Io;)this.advanceState(this.internalState),r++;this.state.peek=this.decodeHexDigits(n,r)}else n=this.clone(),this.advanceState(this.internalState),this.advanceState(this.internalState),this.advanceState(this.internalState),this.state.peek=this.decodeHexDigits(n,4);else if(120===e())this.advanceState(this.internalState),n=this.clone(),this.advanceState(this.internalState),this.state.peek=this.decodeHexDigits(n,2);else if(Fo(e())){for(var i=\"\",o=0,a=this.clone();Fo(e())&&o<3;)a=this.clone(),i+=String.fromCodePoint(e()),this.advanceState(this.internalState),o++;this.state.peek=parseInt(i,8),this.internalState=a.internalState}else jo(this.internalState.peek)?(this.advanceState(this.internalState),this.state=this.internalState):this.state.peek=this.internalState.peek},Th.prototype.decodeHexDigits=function(e,t){var n=this.input.substr(e.internalState.offset,t),r=parseInt(n,16);if(isNaN(r))throw e.state=e.internalState,new Ph(\"Invalid hexadecimal escape sequence\",e);return r},Th);function Th(e,t){var n=this;return e instanceof Th?(n=kh.call(this,e)||this).internalState=m({},e.internalState):(n=kh.call(this,e,t)||this).internalState=n.state,n}var Ih,Ph=function(e,t){this.msg=e,this.cursor=t},Ah=(f(Mh,Ih=Go),Mh.create=function(e,t,n){return new Mh(e,t,n)},Mh);function Mh(e,t,n){var r=Ih.call(this,t,n)||this;return r.elementName=e,r}var Rh=function(e,t){this.rootNodes=e,this.errors=t},Nh=(jh.prototype.parse=function(e,t,n){var r=function(e,t,n,r){return void 0===r&&(r={}),new gh(new Bo(e,t),n,r).tokenize()}(e,t,this.getTagDefinition,n),i=new Fh(r.tokens,this.getTagDefinition).build();return new Rh(i.rootNodes,r.errors.concat(i.errors))},jh);function jh(e){this.getTagDefinition=e}var Fh=(Lh.prototype.build=function(){for(;this._peek.type!==eh.EOF;)this._peek.type===eh.TAG_OPEN_START?this._consumeStartTag(this._advance()):this._peek.type===eh.TAG_CLOSE?this._consumeEndTag(this._advance()):this._peek.type===eh.CDATA_START?(this._closeVoidElement(),this._consumeCdata(this._advance())):this._peek.type===eh.COMMENT_START?(this._closeVoidElement(),this._consumeComment(this._advance())):this._peek.type===eh.TEXT||this._peek.type===eh.RAW_TEXT||this._peek.type===eh.ESCAPABLE_RAW_TEXT?(this._closeVoidElement(),this._consumeText(this._advance())):this._peek.type===eh.EXPANSION_FORM_START?this._consumeExpansion(this._advance()):this._advance();return new Rh(this._rootNodes,this._errors)},Lh.prototype._advance=function(){var e=this._peek;return this._index<this.tokens.length-1&&this._index++,this._peek=this.tokens[this._index],e},Lh.prototype._advanceIf=function(e){return this._peek.type===e?this._advance():null},Lh.prototype._consumeCdata=function(e){this._consumeText(this._advance()),this._advanceIf(eh.CDATA_END)},Lh.prototype._consumeComment=function(e){var t=this._advanceIf(eh.RAW_TEXT);this._advanceIf(eh.COMMENT_END);var n=null!=t?t.parts[0].trim():null;this._addToParent(new $c(n,e.sourceSpan))},Lh.prototype._consumeExpansion=function(e){for(var t=this._advance(),n=this._advance(),r=[];this._peek.type===eh.EXPANSION_CASE_VALUE;){var i=this._parseExpansionCase();if(!i)return;r.push(i)}if(this._peek.type===eh.EXPANSION_FORM_END){var o=new Uo(e.sourceSpan.start,this._peek.sourceSpan.end);this._addToParent(new Hc(t.parts[0],n.parts[0],r,o,t.sourceSpan)),this._advance()}else this._errors.push(Ah.create(null,this._peek.sourceSpan,\"Invalid ICU message. Missing '}'.\"))},Lh.prototype._parseExpansionCase=function(){var e=this._advance();if(this._peek.type!==eh.EXPANSION_CASE_EXP_START)return this._errors.push(Ah.create(null,this._peek.sourceSpan,\"Invalid ICU message. Missing '{'.\")),null;var t=this._advance(),n=this._collectExpansionExpTokens(t);if(!n)return null;var r=this._advance();n.push(new ch(eh.EOF,[],r.sourceSpan));var i=new Lh(n,this.getTagDefinition).build();if(0<i.errors.length)return this._errors=this._errors.concat(i.errors),null;var o=new Uo(e.sourceSpan.start,r.sourceSpan.end),a=new Uo(t.sourceSpan.start,r.sourceSpan.end);return new Gc(e.parts[0],i.rootNodes,o,e.sourceSpan,a)},Lh.prototype._collectExpansionExpTokens=function(e){for(var t=[],n=[eh.EXPANSION_CASE_EXP_START];;){if(this._peek.type!==eh.EXPANSION_FORM_START&&this._peek.type!==eh.EXPANSION_CASE_EXP_START||n.push(this._peek.type),this._peek.type===eh.EXPANSION_CASE_EXP_END){if(!Vh(n,eh.EXPANSION_CASE_EXP_START))return this._errors.push(Ah.create(null,e.sourceSpan,\"Invalid ICU message. Missing '}'.\")),null;if(n.pop(),0==n.length)return t}if(this._peek.type===eh.EXPANSION_FORM_END){if(!Vh(n,eh.EXPANSION_FORM_START))return this._errors.push(Ah.create(null,e.sourceSpan,\"Invalid ICU message. Missing '}'.\")),null;n.pop()}if(this._peek.type===eh.EOF)return this._errors.push(Ah.create(null,e.sourceSpan,\"Invalid ICU message. Missing '}'.\")),null;t.push(this._advance())}},Lh.prototype._consumeText=function(e){var t=e.parts[0];if(0<t.length&&\"\\n\"==t[0]){var n=this._getParentElement();null!=n&&0==n.children.length&&this.getTagDefinition(n.name).ignoreFirstLf&&(t=t.substring(1))}0<t.length&&this._addToParent(new zc(t,e.sourceSpan))},Lh.prototype._closeVoidElement=function(){var e=this._getParentElement();e&&this.getTagDefinition(e.name).isVoid&&this._elementStack.pop()},Lh.prototype._consumeStartTag=function(e){for(var t=e.parts[0],n=e.parts[1],r=[];this._peek.type===eh.ATTR_NAME;)r.push(this._consumeAttr(this._advance()));var i=this._getElementFullName(t,n,this._getParentElement()),o=!1;if(this._peek.type===eh.TAG_OPEN_END_VOID){this._advance(),o=!0;var a=this.getTagDefinition(i);a.canSelfClose||null!==c(i)||a.isVoid||this._errors.push(Ah.create(i,e.sourceSpan,'Only void and foreign elements can be self closed \"'+e.parts[1]+'\"'))}else this._peek.type===eh.TAG_OPEN_END&&(this._advance(),o=!1);var s=this._peek.sourceSpan.start,l=new Uo(e.sourceSpan.start,s),u=new Qc(i,r,[],l,l,void 0);this._pushElement(u),o&&(this._popElement(i),u.endSourceSpan=l)},Lh.prototype._pushElement=function(e){var t=this._getParentElement();t&&this.getTagDefinition(t.name).isClosedByChild(e.name)&&this._elementStack.pop(),this._addToParent(e),this._elementStack.push(e)},Lh.prototype._consumeEndTag=function(e){var t=this._getElementFullName(e.parts[0],e.parts[1],this._getParentElement());if(this._getParentElement()&&(this._getParentElement().endSourceSpan=e.sourceSpan),this.getTagDefinition(t).isVoid)this._errors.push(Ah.create(t,e.sourceSpan,'Void elements do not have end tags \"'+e.parts[1]+'\"'));else if(!this._popElement(t)){var n='Unexpected closing tag \"'+t+'\". 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(Ah.create(t,e.sourceSpan,n))}},Lh.prototype._popElement=function(e){for(var t=this._elementStack.length-1;0<=t;t--){var n=this._elementStack[t];if(n.name==e)return this._elementStack.splice(t,this._elementStack.length-t),!0;if(!this.getTagDefinition(n.name).closedByParent)return!1}return!1},Lh.prototype._consumeAttr=function(e){var t=p(e.parts[0],e.parts[1]),n=e.sourceSpan.end,r=\"\",i=void 0;if(this._peek.type===eh.ATTR_QUOTE&&this._advance(),this._peek.type===eh.ATTR_VALUE){var o=this._advance();r=o.parts[0],n=o.sourceSpan.end,i=o.sourceSpan}return this._peek.type===eh.ATTR_QUOTE&&(n=this._advance().sourceSpan.end),new Kc(t,r,new Uo(e.sourceSpan.start,n),i)},Lh.prototype._getParentElement=function(){return 0<this._elementStack.length?this._elementStack[this._elementStack.length-1]:null},Lh.prototype._getParentElementSkippingContainers=function(){for(var e=null,t=this._elementStack.length-1;0<=t;t--){if(!W(this._elementStack[t].name))return{parent:this._elementStack[t],container:e};e=this._elementStack[t]}return{parent:null,container:e}},Lh.prototype._addToParent=function(e){var t=this._getParentElement();null!=t?t.children.push(e):this._rootNodes.push(e)},Lh.prototype._insertBeforeContainer=function(e,t,n){if(t){if(e){var r=e.children.indexOf(t);e.children[r]=n}else this._rootNodes.push(n);n.children.push(t),this._elementStack.splice(this._elementStack.indexOf(t),0,n)}else this._addToParent(n),this._elementStack.push(n)},Lh.prototype._getElementFullName=function(e,t,n){return\"\"===e&&\"\"===(e=this.getTagDefinition(t).implicitNamespacePrefix||\"\")&&null!=n&&(e=c(n.name)),p(e,t)},Lh);function Lh(e,t){this.tokens=e,this.getTagDefinition=t,this._index=-1,this._rootNodes=[],this._errors=[],this._elementStack=[],this._advance()}function Vh(e,t){return 0<e.length&&e[e.length-1]===t}var Bh,Uh=(f(zh,Bh=Nh),zh.prototype.parse=function(e,t,n){return Bh.prototype.parse.call(this,e,t,n)},zh);function zh(){return Bh.call(this,d)||this}var qh=\"ngPreserveWhitespaces\",Hh=new Set([\"pre\",\"template\",\"textarea\",\"script\",\"style\"]),Wh=\" \\f\\n\\r\\t\\v ᠎ - \\u2028\\u2029  　\\ufeff\",Gh=new RegExp(\"[^\"+Wh+\"]\"),Yh=new RegExp(\"[\"+Wh+\"]{2,}\",\"g\");function Kh(e){return e.replace(new RegExp(\"\",\"g\"),\" \")}var Zh=(Qh.prototype.visitElement=function(e,t){return Hh.has(e.name)||function(e){return e.some(function(e){return e.name===qh})}(e.attrs)?new Qc(e.name,ep(this,e.attrs),e.children,e.sourceSpan,e.startSourceSpan,e.endSourceSpan,e.i18n):new Qc(e.name,e.attrs,function(i,o){var a=[];return o.forEach(function(e,t){var n={prev:o[t-1],next:o[t+1]},r=e.visit(i,n);r&&a.push(r)}),a}(this,e.children),e.sourceSpan,e.startSourceSpan,e.endSourceSpan,e.i18n)},Qh.prototype.visitAttribute=function(e,t){return e.name!==qh?e:null},Qh.prototype.visitText=function(e,t){var n=e.value.match(Gh),r=t&&(t.prev instanceof Hc||t.next instanceof Hc);return n||r?new zc(Kh(e.value).replace(Yh,\" \"),e.sourceSpan,e.i18n):null},Qh.prototype.visitComment=function(e,t){return e},Qh.prototype.visitExpansion=function(e,t){return e},Qh.prototype.visitExpansionCase=function(e,t){return e},Qh);function Qh(){}function Xh(e){return new Rh(ep(new Zh,e.rootNodes),e.errors)}var $h=[\"zero\",\"one\",\"two\",\"few\",\"many\",\"other\"];function Jh(e){var t=new af;return new tf(ep(t,e),t.isExpanded,t.errors)}var ef,tf=function(e,t,n){this.nodes=e,this.expanded=t,this.errors=n},nf=(f(rf,ef=Go),rf);function rf(e,t){return ef.call(this,e,t)||this}var of,af=(sf.prototype.visitElement=function(e,t){return new Qc(e.name,e.attrs,ep(this,e.children),e.sourceSpan,e.startSourceSpan,e.endSourceSpan)},sf.prototype.visitAttribute=function(e,t){return e},sf.prototype.visitText=function(e,t){return e},sf.prototype.visitComment=function(e,t){return e},sf.prototype.visitExpansion=function(e,t){return this.isExpanded=!0,\"plural\"==e.type?function(e,n){var t=e.cases.map(function(e){-1!=$h.indexOf(e.value)||e.value.match(/^=\\d+$/)||n.push(new nf(e.valueSourceSpan,'Plural cases should be \"=<number>\" or one of '+$h.join(\", \")));var t=Jh(e.expression);return n.push.apply(n,q(t.errors)),new Qc(\"ng-template\",[new Kc(\"ngPluralCase\",\"\"+e.value,e.valueSourceSpan)],t.nodes,e.sourceSpan,e.sourceSpan,e.sourceSpan)}),r=new Kc(\"[ngPlural]\",e.switchValue,e.switchValueSourceSpan);return new Qc(\"ng-container\",[r],t,e.sourceSpan,e.sourceSpan,e.sourceSpan)}(e,this.errors):function(e,n){var t=e.cases.map(function(e){var t=Jh(e.expression);return n.push.apply(n,q(t.errors)),\"other\"===e.value?new Qc(\"ng-template\",[new Kc(\"ngSwitchDefault\",\"\",e.valueSourceSpan)],t.nodes,e.sourceSpan,e.sourceSpan,e.sourceSpan):new Qc(\"ng-template\",[new Kc(\"ngSwitchCase\",\"\"+e.value,e.valueSourceSpan)],t.nodes,e.sourceSpan,e.sourceSpan,e.sourceSpan)}),r=new Kc(\"[ngSwitch]\",e.switchValue,e.switchValueSourceSpan);return new Qc(\"ng-container\",[r],t,e.sourceSpan,e.sourceSpan,e.sourceSpan)}(e,this.errors)},sf.prototype.visitExpansionCase=function(e,t){throw new Error(\"Should not be reached\")},sf);function sf(){this.isExpanded=!1,this.errors=[]}var lf=(uf.prototype.visit=function(e,t){return e.visitText(this,t)},uf);function uf(e,t,n){this.value=e,this.ngContentIndex=t,this.sourceSpan=n}var cf=(pf.prototype.visit=function(e,t){return e.visitBoundText(this,t)},pf);function pf(e,t,n){this.value=e,this.ngContentIndex=t,this.sourceSpan=n}var df=(hf.prototype.visit=function(e,t){return e.visitAttr(this,t)},hf);function hf(e,t,n){this.name=e,this.value=t,this.sourceSpan=n}var ff=((of={})[4]=4,of[1]=1,of[2]=2,of[0]=0,of[3]=3,of),mf=(vf.fromBoundProperty=function(e){var t=ff[e.type];return new vf(e.name,t,e.securityContext,e.value,e.unit,e.sourceSpan)},vf.prototype.visit=function(e,t){return e.visitElementProperty(this,t)},vf);function vf(e,t,n,r,i,o){this.name=e,this.type=t,this.securityContext=n,this.value=r,this.unit=i,this.sourceSpan=o,this.isAnimation=4===this.type}var yf=(gf.calcFullName=function(e,t,n){return t?t+\":\"+e:n?\"@\"+e+\".\"+n:e},gf.fromParsedEvent=function(e){var t=0===e.type?e.targetOrPhase:null,n=1===e.type?e.targetOrPhase:null;return new gf(e.name,t,n,e.handler,e.sourceSpan,e.handlerSpan)},gf.prototype.visit=function(e,t){return e.visitEvent(this,t)},gf);function gf(e,t,n,r,i,o){this.name=e,this.target=t,this.phase=n,this.handler=r,this.sourceSpan=i,this.handlerSpan=o,this.fullName=gf.calcFullName(this.name,this.target,this.phase),this.isAnimation=!!this.phase}var _f=(bf.prototype.visit=function(e,t){return e.visitReference(this,t)},bf);function bf(e,t,n,r){this.name=e,this.value=t,this.originalValue=n,this.sourceSpan=r}var wf=(xf.fromParsedVariable=function(e){return new xf(e.name,e.value,e.sourceSpan)},xf.prototype.visit=function(e,t){return e.visitVariable(this,t)},xf);function xf(e,t,n){this.name=e,this.value=t,this.sourceSpan=n}var Cf=(Sf.prototype.visit=function(e,t){return e.visitElement(this,t)},Sf);function Sf(e,t,n,r,i,o,a,s,l,u,c,p,d){this.name=e,this.attrs=t,this.inputs=n,this.outputs=r,this.references=i,this.directives=o,this.providers=a,this.hasViewContainer=s,this.queryMatches=l,this.children=u,this.ngContentIndex=c,this.sourceSpan=p,this.endSourceSpan=d}var Ef=(Of.prototype.visit=function(e,t){return e.visitEmbeddedTemplate(this,t)},Of);function Of(e,t,n,r,i,o,a,s,l,u,c){this.attrs=e,this.outputs=t,this.references=n,this.variables=r,this.directives=i,this.providers=o,this.hasViewContainer=a,this.queryMatches=s,this.children=l,this.ngContentIndex=u,this.sourceSpan=c}var kf=(Df.prototype.visit=function(e,t){return e.visitDirectiveProperty(this,t)},Df);function Df(e,t,n,r){this.directiveName=e,this.templateName=t,this.value=n,this.sourceSpan=r}var Tf=(If.prototype.visit=function(e,t){return e.visitDirective(this,t)},If);function If(e,t,n,r,i,o){this.directive=e,this.inputs=t,this.hostProperties=n,this.hostEvents=r,this.contentQueryStartId=i,this.sourceSpan=o}var Pf,Af=(Mf.prototype.visit=function(e,t){return null},Mf);function Mf(e,t,n,r,i,o,a,s){this.token=e,this.multiProvider=t,this.eager=n,this.providers=r,this.providerType=i,this.lifecycleHooks=o,this.sourceSpan=a,this.isModule=s}(Pf=E.ProviderAstType||(E.ProviderAstType={}))[Pf.PublicService=0]=\"PublicService\",Pf[Pf.PrivateService=1]=\"PrivateService\",Pf[Pf.Component=2]=\"Component\",Pf[Pf.Directive=3]=\"Directive\",Pf[Pf.Builtin=4]=\"Builtin\";var Rf=(Nf.prototype.visit=function(e,t){return e.visitNgContent(this,t)},Nf);function Nf(e,t,n){this.index=e,this.ngContentIndex=t,this.sourceSpan=n}var jf=(Ff.prototype.visitNgContent=function(e,t){},Ff.prototype.visitEmbeddedTemplate=function(e,t){},Ff.prototype.visitElement=function(e,t){},Ff.prototype.visitReference=function(e,t){},Ff.prototype.visitVariable=function(e,t){},Ff.prototype.visitEvent=function(e,t){},Ff.prototype.visitElementProperty=function(e,t){},Ff.prototype.visitAttr=function(e,t){},Ff.prototype.visitBoundText=function(e,t){},Ff.prototype.visitText=function(e,t){},Ff.prototype.visitDirective=function(e,t){},Ff.prototype.visitDirectiveProperty=function(e,t){},Ff);function Ff(){}var Lf,Vf=(f(Bf,Lf=jf),Bf.prototype.visitEmbeddedTemplate=function(t,e){return this.visitChildren(e,function(e){e(t.attrs),e(t.references),e(t.variables),e(t.directives),e(t.providers),e(t.children)})},Bf.prototype.visitElement=function(t,e){return this.visitChildren(e,function(e){e(t.attrs),e(t.inputs),e(t.outputs),e(t.references),e(t.directives),e(t.providers),e(t.children)})},Bf.prototype.visitDirective=function(t,e){return this.visitChildren(e,function(e){e(t.inputs),e(t.hostProperties),e(t.hostEvents)})},Bf.prototype.visitChildren=function(t,e){var n=[],r=this;return e(function(e){e&&e.length&&n.push(Uf(r,e,t))}),Array.prototype.concat.apply([],n)},Bf);function Bf(){return Lf.call(this)||this}function Uf(t,e,n){void 0===n&&(n=null);var r=[],i=t.visit?function(e){return t.visit(e,n)||e.visit(t,n)}:function(e){return e.visit(t,n)};return e.forEach(function(e){var t=i(e);t&&r.push(t)}),r}var zf,qf=(f(Hf,zf=Go),Hf);function Hf(e,t){return zf.call(this,t,e)||this}var Wf=function(e,t){var n=this;this.reflector=e,this.component=t,this.errors=[],this.viewQueries=function(e){var t=1,n=new Map;return e.viewQueries&&e.viewQueries.forEach(function(e){return Jf(n,{meta:e,queryId:t++})}),n}(t),this.viewProviders=new Map,t.viewProviders.forEach(function(e){null==n.viewProviders.get(Oi(e.token))&&n.viewProviders.set(Oi(e.token),!0)})},Gf=(Yf.prototype.afterElement=function(){var t=this;Array.from(this._allProviders.values()).forEach(function(e){t._getOrCreateLocalProvider(e.providerType,e.token,!1)})},Object.defineProperty(Yf.prototype,\"transformProviders\",{get:function(){var t=[],n=[];return this._transformedProviders.forEach(function(e){e.eager?n.push(e):t.push(e)}),t.concat(n)},enumerable:!0,configurable:!0}),Object.defineProperty(Yf.prototype,\"transformedDirectiveAsts\",{get:function(){var n=this.transformProviders.map(function(e){return e.token.identifier}),e=this._directiveAsts.slice();return e.sort(function(e,t){return n.indexOf(e.directive.type)-n.indexOf(t.directive.type)}),e},enumerable:!0,configurable:!0}),Object.defineProperty(Yf.prototype,\"queryMatches\",{get:function(){var t=[];return this._queriedTokens.forEach(function(e){t.push.apply(t,q(e))}),t},enumerable:!0,configurable:!0}),Yf.prototype._addQueryReadsTo=function(e,i,o){this._getQueriesFor(e).forEach(function(e){var t=e.meta.read||i,n=Oi(t),r=o.get(n);r||(r=[],o.set(n,r)),r.push({queryId:e.queryId,value:t})})},Yf.prototype._getQueriesFor=function(e){for(var t,n=[],r=this,i=0;null!==r;)(t=r._contentQueries.get(Oi(e)))&&n.push.apply(n,q(t.filter(function(e){return e.meta.descendants||i<=1}))),0<r._directiveAsts.length&&i++,r=r._parent;return(t=this.viewContext.viewQueries.get(Oi(e)))&&n.push.apply(n,q(t)),n},Yf.prototype._getOrCreateLocalProvider=function(e,t,o){var a=this,s=this._allProviders.get(Oi(t));if(!s||(e===E.ProviderAstType.Directive||e===E.ProviderAstType.PublicService)&&s.providerType===E.ProviderAstType.PrivateService||(e===E.ProviderAstType.PrivateService||e===E.ProviderAstType.PublicService)&&s.providerType===E.ProviderAstType.Builtin)return null;var n=this._transformedProviders.get(Oi(t));if(n)return n;if(null!=this._seenProviders.get(Oi(t)))return this.viewContext.errors.push(new qf(\"Cannot instantiate cyclic dependency! \"+Ei(t),this._sourceSpan)),null;this._seenProviders.set(Oi(t),!0);var r=s.providers.map(function(e){var t=e.useValue,n=e.useExisting,r=void 0;if(null!=e.useExisting){var i=a._getDependency(s.providerType,{token:e.useExisting},o);null!=i.token?n=i.token:(n=null,t=i.value)}else e.useFactory?r=(e.deps||e.useFactory.diDeps).map(function(e){return a._getDependency(s.providerType,e,o)}):e.useClass&&(r=(e.deps||e.useClass.diDeps).map(function(e){return a._getDependency(s.providerType,e,o)}));return Qf(e,{useExisting:n,useValue:t,deps:r})});return n=Xf(s,{eager:o,providers:r}),this._transformedProviders.set(Oi(t),n),n},Yf.prototype._getLocalDependency=function(e,t,n){if(void 0===n&&(n=!1),t.isAttribute){var r=this._attrs[t.token.value];return{isValue:!0,value:null==r?null:r}}if(null!=t.token){if(e===E.ProviderAstType.Directive||e===E.ProviderAstType.Component){if(Oi(t.token)===this.viewContext.reflector.resolveExternalReference(si.Renderer)||Oi(t.token)===this.viewContext.reflector.resolveExternalReference(si.ElementRef)||Oi(t.token)===this.viewContext.reflector.resolveExternalReference(si.ChangeDetectorRef)||Oi(t.token)===this.viewContext.reflector.resolveExternalReference(si.TemplateRef))return t;Oi(t.token)===this.viewContext.reflector.resolveExternalReference(si.ViewContainerRef)&&(this.transformedHasViewContainer=!0)}if(Oi(t.token)===this.viewContext.reflector.resolveExternalReference(si.Injector))return t;if(null!=this._getOrCreateLocalProvider(e,t.token,n))return t}return null},Yf.prototype._getDependency=function(e,t,n){void 0===n&&(n=!1);var r=this,i=n,o=null;if(t.isSkipSelf||(o=this._getLocalDependency(e,t,n)),t.isSelf)!o&&t.isOptional&&(o={isValue:!0,value:null});else{for(;!o&&r._parent;){var a=r;r=r._parent,a._isViewRoot&&(i=!1),o=r._getLocalDependency(E.ProviderAstType.PublicService,t,i)}o=o||(!t.isHost||this.viewContext.component.isHost||this.viewContext.component.type.reference===Oi(t.token)||null!=this.viewContext.viewProviders.get(Oi(t.token))?t:t.isOptional?{isValue:!0,value:null}:null)}return o||this.viewContext.errors.push(new qf(\"No provider for \"+Ei(t.token),this._sourceSpan)),o},Yf);function Yf(e,t,n,r,i,o,a,s,l){var u=this;this.viewContext=e,this._parent=t,this._isViewRoot=n,this._directiveAsts=r,this._sourceSpan=l,this._transformedProviders=new Map,this._seenProviders=new Map,this._queriedTokens=new Map,this.transformedHasViewContainer=!1,this._attrs={},i.forEach(function(e){return u._attrs[e.name]=e.value});var c=r.map(function(e){return e.directive});if(this._allProviders=function(e,t,n){var r=new Map;return e.forEach(function(e){$f([{token:{identifier:e.type},useClass:e.type}],e.isComponent?E.ProviderAstType.Component:E.ProviderAstType.Directive,!0,t,n,r,!1)}),e.filter(function(e){return e.isComponent}).concat(e.filter(function(e){return!e.isComponent})).forEach(function(e){$f(e.providers,E.ProviderAstType.PublicService,!1,t,n,r,!1),$f(e.viewProviders,E.ProviderAstType.PrivateService,!1,t,n,r,!1)}),r}(c,l,e.errors),this._contentQueries=function(e,t){var n=e,r=new Map;return t.forEach(function(e,t){e.queries&&e.queries.forEach(function(e){return Jf(r,{meta:e,queryId:n++})})}),r}(s,c),Array.from(this._allProviders.values()).forEach(function(e){u._addQueryReadsTo(e.token,e.token,u._queriedTokens)}),a){var p=ci(this.viewContext.reflector,si.TemplateRef);this._addQueryReadsTo(p,p,this._queriedTokens)}o.forEach(function(e){var t=e.value||ci(u.viewContext.reflector,si.ElementRef);u._addQueryReadsTo({value:e.name},t,u._queriedTokens)}),this._queriedTokens.get(this.viewContext.reflector.resolveExternalReference(si.ViewContainerRef))&&(this.transformedHasViewContainer=!0),Array.from(this._allProviders.values()).forEach(function(e){(e.eager||u._queriedTokens.get(Oi(e.token)))&&u._getOrCreateLocalProvider(e.providerType,e.token,!0)})}var Kf=(Zf.prototype.parse=function(){var t=this;if(Array.from(this._allProviders.values()).forEach(function(e){t._getOrCreateLocalProvider(e.token,e.eager)}),0<this._errors.length){var e=this._errors.join(\"\\n\");throw new Error(\"Provider parse errors:\\n\"+e)}var n=[],r=[];return this._transformedProviders.forEach(function(e){e.eager?r.push(e):n.push(e)}),n.concat(r)},Zf.prototype._getOrCreateLocalProvider=function(e,o){var a=this,s=this._allProviders.get(Oi(e));if(!s)return null;var t=this._transformedProviders.get(Oi(e));if(t)return t;if(null!=this._seenProviders.get(Oi(e)))return this._errors.push(new qf(\"Cannot instantiate cyclic dependency! \"+Ei(e),s.sourceSpan)),null;this._seenProviders.set(Oi(e),!0);var n=s.providers.map(function(e){var t=e.useValue,n=e.useExisting,r=void 0;if(null!=e.useExisting){var i=a._getDependency({token:e.useExisting},o,s.sourceSpan);null!=i.token?n=i.token:(n=null,t=i.value)}else e.useFactory?r=(e.deps||e.useFactory.diDeps).map(function(e){return a._getDependency(e,o,s.sourceSpan)}):e.useClass&&(r=(e.deps||e.useClass.diDeps).map(function(e){return a._getDependency(e,o,s.sourceSpan)}));return Qf(e,{useExisting:n,useValue:t,deps:r})});return t=Xf(s,{eager:o,providers:n}),this._transformedProviders.set(Oi(e),t),t},Zf.prototype._getDependency=function(e,t,n){return void 0===t&&(t=!1),e.isSkipSelf||null==e.token||Oi(e.token)===this.reflector.resolveExternalReference(si.Injector)||Oi(e.token)===this.reflector.resolveExternalReference(si.ComponentFactoryResolver)||this._getOrCreateLocalProvider(e.token,t),e},Zf);function Zf(e,t,n,r){var i=this;this.reflector=e,this._transformedProviders=new Map,this._seenProviders=new Map,this._errors=[],this._allProviders=new Map,t.transitiveModule.modules.forEach(function(e){$f([{token:{identifier:e},useClass:e}],E.ProviderAstType.PublicService,!0,r,i._errors,i._allProviders,!0)}),$f(t.transitiveModule.providers.map(function(e){return e.provider}).concat(n),E.ProviderAstType.PublicService,!1,r,this._errors,this._allProviders,!1)}function Qf(e,t){var n=t.useExisting,r=t.useValue,i=t.deps;return{token:e.token,useClass:e.useClass,useExisting:n,useFactory:e.useFactory,useValue:r,deps:i,multi:e.multi}}function Xf(e,t){var n=t.eager,r=t.providers;return new Af(e.token,e.multiProvider,e.eager||n,r,e.providerType,e.lifecycleHooks,e.sourceSpan,e.isModule)}function $f(e,i,o,a,s,l,u){e.forEach(function(e){var t=l.get(Oi(e.token));if(null!=t&&!!t.multiProvider!=!!e.multi&&s.push(new qf(\"Mixing multi and non multi provider is not possible for token \"+Ei(t.token),a)),t)e.multi||(t.providers.length=0),t.providers.push(e);else{var n=e.token.identifier&&e.token.identifier.lifecycleHooks?e.token.identifier.lifecycleHooks:[],r=!(e.useClass||e.useExisting||e.useFactory);t=new Af(e.token,!!e.multi,o||r,[e],i,n,a,u),l.set(Oi(e.token),t)}})}function Jf(n,r){r.meta.selectors.forEach(function(e){var t=n.get(Oi(e));t||(t=[],n.set(Oi(e),t)),t.push(r)})}var em=function(e,t){this.style=e,this.styleUrls=t};function tm(e){if(null==e||0===e.length||\"/\"==e[0])return!1;var t=e.match(im);return null===t||\"package\"==t[1]||\"asset\"==t[1]}var nm=/@import\\s+(?:url\\()?\\s*(?:(?:['\"]([^'\"]*))|([^;\\)\\s]*))[^;]*;?/g,rm=/\\/\\*(?!#\\s*(?:sourceURL|sourceMappingURL)=)[\\s\\S]+?\\*\\//g,im=/^([^:/?#]+):/,om=(Object.defineProperty(am.prototype,\"interpolationConfig\",{get:function(){return this._interpolationConfig},enumerable:!0,configurable:!0}),am.prototype.getUsedPipes=function(){return Array.from(this._usedPipes.values())},am.prototype.createBoundHostProperties=function(n,r){var i=this;if(n.hostProperties){var o=[];return Object.keys(n.hostProperties).forEach(function(e){var t=n.hostProperties[e];\"string\"==typeof t?i.parsePropertyBinding(e,t,!0,r,r.start.offset,void 0,[],o):i._reportError('Value of the host property binding \"'+e+'\" needs to be a string representing an expression but got \"'+t+'\" ('+typeof t+\")\",r)}),o}return null},am.prototype.createDirectiveHostPropertyAsts=function(e,t,n){var r=this,i=this.createBoundHostProperties(e,n);return i&&i.map(function(e){return r.createBoundElementProperty(t,e)})},am.prototype.createDirectiveHostEventAsts=function(n,r){var i=this;if(n.hostListeners){var o=[];return Object.keys(n.hostListeners).forEach(function(e){var t=n.hostListeners[e];\"string\"==typeof t?i.parseEvent(e,t,r,r,[],o):i._reportError('Value of the host listener \"'+e+'\" needs to be a string representing an expression but got \"'+t+'\" ('+typeof t+\")\",r)}),o}return null},am.prototype.parseInterpolation=function(e,t){var n=t.start.toString();try{var r=this._exprParser.parseInterpolation(e,n,t.start.offset,this._interpolationConfig);return r&&this._reportExpressionParserErrors(r.errors,t),this._checkPipes(r,t),r}catch(e){return this._reportError(\"\"+e,t),this._exprParser.wrapLiteralPrimitive(\"ERROR\",n,t.start.offset)}},am.prototype.parseInlineTemplateBinding=function(e,t,n,r,i,o,a){for(var s=this._parseTemplateBindings(e,t,n,r),l=0;l<s.length;l++){var u=s[l];u.keyIsVar?a.push(new Tc(u.key,u.name,n)):u.expression?this._parsePropertyAst(u.key,u.expression,n,void 0,i,o):(i.push([u.key,\"\"]),this.parseLiteralAttr(u.key,null,n,r,void 0,i,o))}},am.prototype._parseTemplateBindings=function(e,t,n,r){var i=this,o=n.start.toString();try{var a=this._exprParser.parseTemplateBindings(e,t,o,r);return this._reportExpressionParserErrors(a.errors,n),a.templateBindings.forEach(function(e){e.expression&&i._checkPipes(e.expression,n)}),a.warnings.forEach(function(e){i._reportError(e,n,E.ParseErrorLevel.WARNING)}),a.templateBindings}catch(e){return this._reportError(\"\"+e,n),[]}},am.prototype.parseLiteralAttr=function(e,t,n,r,i,o,a){cm(e)?(e=e.substring(1),t&&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.',n,E.ParseErrorLevel.ERROR),this._parseAnimation(e,t,n,r,i,o,a)):a.push(new kc(e,this._exprParser.wrapLiteralPrimitive(t,\"\",r),E.ParsedPropertyType.LITERAL_ATTR,n,i))},am.prototype.parsePropertyBinding=function(e,t,n,r,i,o,a,s){var l=!1;e.startsWith(\"animate-\")?(l=!0,e=e.substring(\"animate-\".length)):cm(e)&&(l=!0,e=e.substring(1)),l?this._parseAnimation(e,t,r,i,o,a,s):this._parsePropertyAst(e,this._parseBinding(t,n,o||r,i),r,o,a,s)},am.prototype.parsePropertyInterpolation=function(e,t,n,r,i,o){var a=this.parseInterpolation(t,r||n);return!!a&&(this._parsePropertyAst(e,a,n,r,i,o),!0)},am.prototype._parsePropertyAst=function(e,t,n,r,i,o){i.push([e,t.source]),o.push(new kc(e,t,E.ParsedPropertyType.DEFAULT,n,r))},am.prototype._parseAnimation=function(e,t,n,r,i,o,a){var s=this._parseBinding(t||\"undefined\",!1,i||n,r);o.push([e,s.source]),a.push(new kc(e,s,E.ParsedPropertyType.ANIMATION,n,i))},am.prototype._parseBinding=function(e,t,n,r){var i=(n&&n.start||\"(unknown)\").toString();try{var o=t?this._exprParser.parseSimpleBinding(e,i,r,this._interpolationConfig):this._exprParser.parseBinding(e,i,r,this._interpolationConfig);return o&&this._reportExpressionParserErrors(o.errors,n),this._checkPipes(o,n),o}catch(e){return this._reportError(\"\"+e,n),this._exprParser.wrapLiteralPrimitive(\"ERROR\",i,r)}},am.prototype.createBoundElementProperty=function(e,t,n,r){if(void 0===n&&(n=!1),void 0===r&&(r=!0),t.isAnimation)return new Ic(t.name,4,M.NONE,t.expression,null,t.sourceSpan,t.valueSpan);var i=null,o=void 0,a=null,s=t.name.split(\".\"),l=void 0;if(1<s.length)if(\"attr\"==s[0]){a=s[1],n||this._validatePropertyOrAttributeName(a,t.sourceSpan,!0),l=pm(this._schemaRegistry,e,a,!0);var u=a.indexOf(\":\");-1<u&&(a=p(a.substring(0,u),a.substring(u+1))),o=1}else\"class\"==s[0]?(a=s[1],o=2,l=[M.NONE]):\"style\"==s[0]&&(i=2<s.length?s[2]:null,a=s[1],o=3,l=[M.STYLE]);if(null===a){var c=this._schemaRegistry.getMappedPropName(t.name);a=r?c:t.name,l=pm(this._schemaRegistry,e,c,!1),o=0,n||this._validatePropertyOrAttributeName(c,t.sourceSpan,!1)}return new Ic(a,o,l[0],t.expression,i,t.sourceSpan,t.valueSpan)},am.prototype.parseEvent=function(e,t,n,r,i,o){cm(e)?(e=e.substr(1),this._parseAnimationEvent(e,t,n,r,o)):this._parseRegularEvent(e,t,n,r,i,o)},am.prototype.calcPossibleSecurityContexts=function(e,t,n){var r=this._schemaRegistry.getMappedPropName(t);return pm(this._schemaRegistry,e,r,n)},am.prototype._parseAnimationEvent=function(e,t,n,r,i){var o=function(e,t){return Or(e,\".\",t)}(e,[e,\"\"]),a=o[0],s=o[1].toLowerCase();if(s)switch(s){case\"start\":case\"done\":var l=this._parseAction(t,r);i.push(new Dc(a,s,1,l,n,r));break;default:this._reportError('The provided animation output phase value \"'+s+'\" for \"@'+a+'\" is not supported (use start or done)',n)}else this._reportError(\"The animation trigger output event (@\"+a+\") is missing its phase value name (start or done are currently supported)\",n)},am.prototype._parseRegularEvent=function(e,t,n,r,i,o){var a=U(Er(e,[null,e]),2),s=a[0],l=a[1],u=this._parseAction(t,r);i.push([e,u.source]),o.push(new Dc(l,s,0,u,n,r))},am.prototype._parseAction=function(e,t){var n=(t&&t.start||\"(unknown\").toString(),r=t&&t.start?t.start.offset:0;try{var i=this._exprParser.parseAction(e,n,r,this._interpolationConfig);return i&&this._reportExpressionParserErrors(i.errors,t),!i||i.ast instanceof lu?(this._reportError(\"Empty expressions are not allowed\",t),this._exprParser.wrapLiteralPrimitive(\"ERROR\",n,r)):(this._checkPipes(i,t),i)}catch(e){return this._reportError(\"\"+e,t),this._exprParser.wrapLiteralPrimitive(\"ERROR\",n,r)}},am.prototype._reportError=function(e,t,n){void 0===n&&(n=E.ParseErrorLevel.ERROR),this.errors.push(new Go(t,e,n))},am.prototype._reportExpressionParserErrors=function(e,t){var n,r;try{for(var i=z(e),o=i.next();!o.done;o=i.next()){var a=o.value;this._reportError(a.message,t)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}},am.prototype._checkPipes=function(e,r){var i=this;if(e&&this.pipesByName){var t=new lm;e.visit(t),t.pipes.forEach(function(e,t){var n=i.pipesByName.get(t);n?i._usedPipes.set(t,n):i._reportError(\"The pipe '\"+t+\"' could not be found\",new Uo(r.start.moveBy(e.span.start),r.start.moveBy(e.span.end)))})}},am.prototype._validatePropertyOrAttributeName=function(e,t,n){var r=n?this._schemaRegistry.validateAttribute(e):this._schemaRegistry.validateProperty(e);r.error&&this._reportError(r.msg,t,E.ParseErrorLevel.ERROR)},am);function am(e,t,n,r,i){if(this._exprParser=e,this._interpolationConfig=t,this._schemaRegistry=n,this.errors=i,this.pipesByName=null,this._usedPipes=new Map,r){var o=new Map;r.forEach(function(e){return o.set(e.name,e)}),this.pipesByName=o}}var sm,lm=(f(um,sm=bc),um.prototype.visitPipe=function(e,t){return this.pipes.set(e.name,e),e.exp.visit(this),this.visitAll(e.args,t),null},um);function um(){var e=null!==sm&&sm.apply(this,arguments)||this;return e.pipes=new Map,e}function cm(e){return\"@\"==e[0]}function pm(i,e,o,a){var s=[];return B.parse(e).forEach(function(e){var t=e.element?[e.element]:i.allKnownElementNames(),n=new Set(e.notSelectors.filter(function(e){return e.isElementSelector()}).map(function(e){return e.element})),r=t.filter(function(e){return!n.has(e)});s.push.apply(s,q(r.map(function(e){return i.securityContext(e,o,a)})))}),0===s.length?[M.NONE]:Array.from(new Set(s)).sort()}var dm,hm;function fm(e){var n=null,r=null,i=null,o=!1,a=\"\";e.attrs.forEach(function(e){var t=e.name.toLowerCase();\"select\"==t?n=e.value:\"href\"==t?r=e.value:\"rel\"==t?i=e.value:\"ngNonBindable\"==e.name?o=!0:\"ngProjectAs\"==e.name&&0<e.value.length&&(a=e.value)}),n=function(e){return null!==e&&0!==e.length?e:\"*\"}(n);var t=e.name.toLowerCase(),s=dm.OTHER;return l(t)?s=dm.NG_CONTENT:\"style\"==t?s=dm.STYLE:\"script\"==t?s=dm.SCRIPT:\"link\"==t&&\"stylesheet\"==i&&(s=dm.STYLESHEET),new mm(s,n,r,o,a)}(hm=dm=dm||{})[hm.NG_CONTENT=0]=\"NG_CONTENT\",hm[hm.STYLE=1]=\"STYLE\",hm[hm.STYLESHEET=2]=\"STYLESHEET\",hm[hm.SCRIPT=3]=\"SCRIPT\",hm[hm.OTHER=4]=\"OTHER\";var mm=function(e,t,n,r,i){this.type=e,this.selectAttr=t,this.hrefAttr=n,this.nonBindable=r,this.projectAs=i};var vm,ym=/^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/;function gm(){return vm=vm||B.parse(\"*\")[0]}var _m,bm=(f(wm,_m=Go),wm);function wm(e,t,n){return _m.call(this,t,e,n)||this}var xm=function(e,t,n){this.templateAst=e,this.usedPipes=t,this.errors=n},Cm=(Object.defineProperty(Sm.prototype,\"expressionParser\",{get:function(){return this._exprParser},enumerable:!0,configurable:!0}),Sm.prototype.parse=function(e,t,n,r,i,o,a){var s=this.tryParse(e,t,n,r,i,o,a),l=s.errors.filter(function(e){return e.level===E.ParseErrorLevel.WARNING}),u=s.errors.filter(function(e){return e.level===E.ParseErrorLevel.ERROR});if(0<l.length&&this._console.warn(\"Template parse warnings:\\n\"+l.join(\"\\n\")),0<u.length)throw jr(\"Template parse errors:\\n\"+u.join(\"\\n\"),u);return{template:s.templateAst,pipes:s.usedPipes}},Sm.prototype.tryParse=function(e,t,n,r,i,o,a){var s=\"string\"==typeof t?this._htmlParser.parse(t,o,{tokenizeExpansionForms:!0,interpolationConfig:this.getInterpolationConfig(e)}):t;return a||(s=Xh(s)),this.tryParseHtml(this.expandHtml(s),e,n,r,i)},Sm.prototype.tryParseHtml=function(e,t,n,r,i){var o,a=e.errors,s=[];if(0<e.rootNodes.length){var l=Lm(n),u=Lm(r),c=new Wf(this._reflector,t),p=void 0;t.template&&t.template.interpolation&&(p={start:t.template.interpolation[0],end:t.template.interpolation[1]});var d=new om(this._exprParser,p,this._schemaRegistry,u,a),h=new Em(this._reflector,this._config,c,l,d,this._schemaRegistry,i,a);o=ep(h,e.rootNodes,Nm),a.push.apply(a,q(c.errors)),s.push.apply(s,q(d.getUsedPipes()))}else o=[];return this._assertNoReferenceDuplicationOnTemplate(o,a),0<a.length||this.transforms&&this.transforms.forEach(function(e){o=Uf(e,o)}),new xm(o,s,a)},Sm.prototype.expandHtml=function(e,t){void 0===t&&(t=!1);var n=e.errors;if(0==n.length||t){var r=Jh(e.rootNodes);n.push.apply(n,q(r.errors)),e=new Rh(r.nodes,n)}return e},Sm.prototype.getInterpolationConfig=function(e){if(e.template)return Rl.fromArray(e.template.interpolation)},Sm.prototype._assertNoReferenceDuplicationOnTemplate=function(e,r){var i=[];e.filter(function(e){return!!e.references}).forEach(function(e){return e.references.forEach(function(e){var t=e.name;if(i.indexOf(t)<0)i.push(t);else{var n=new bm('Reference \"#'+t+'\" is defined several times',e.sourceSpan,E.ParseErrorLevel.ERROR);r.push(n)}})})},Sm);function Sm(e,t,n,r,i,o,a){this._config=e,this._reflector=t,this._exprParser=n,this._schemaRegistry=r,this._htmlParser=i,this._console=o,this.transforms=a}var Em=(Om.prototype.visitExpansion=function(e,t){return null},Om.prototype.visitExpansionCase=function(e,t){return null},Om.prototype.visitText=function(e,t){var n=t.findNgContentIndex(gm()),r=Kh(e.value),i=this._bindingParser.parseInterpolation(r,e.sourceSpan);return i?new cf(i,n,e.sourceSpan):new lf(r,n,e.sourceSpan)},Om.prototype.visitAttribute=function(e,t){return new df(e.name,e.value,e.sourceSpan)},Om.prototype.visitComment=function(e,t){return null},Om.prototype.visitElement=function(e,t){var s=this,n=this.contentQueryStartId,r=e.name,i=fm(e);if(i.type===dm.SCRIPT||i.type===dm.STYLE)return null;if(i.type===dm.STYLESHEET&&tm(i.hrefAttr))return null;var l=[],u=[],c=[],p=[],d=[],h=[],f=[],m=[],v=!1,y=[],g=V(e.name);e.attrs.forEach(function(e){var t,n,r=s._parseAttr(g,e,l,u,d,c,p);p.push.apply(p,q([].map(function(e){return wf.fromParsedVariable(e)})));var i=s._normalizeAttributeName(e.name);i.startsWith(\"*\")&&(t=e.value,n=i.substring(\"*\".length));var o=null!=t;if(o){v&&s._reportError(\"Can't have multiple template bindings on one element. Use only one attribute prefixed with *\",e.sourceSpan),v=!0;var a=[];s._bindingParser.parseInlineTemplateBinding(n,t,e.sourceSpan,e.sourceSpan.start.offset,f,h,a),m.push.apply(m,q(a.map(function(e){return wf.fromParsedVariable(e)})))}r||o||(y.push(s.visitAttribute(e,null)),l.push([e.name,e.value]))});var o=Rm(r,l),a=this._parseDirectives(this.selectorMatcher,o),_=a.directives,b=a.matchElement,w=[],x=new Set,C=this._createDirectiveAsts(g,e.name,_,u,c,e.sourceSpan,w,x),S=this._createElementPropertyAsts(e.name,u,x),E=t.isTemplateElement||v,O=new Gf(this.providerViewContext,t.providerContext,E,C,y,w,g,n,e.sourceSpan),k=ep(i.nonBindable?jm:this,e.children,Am.create(g,C,g?t.providerContext:O));O.afterElement();var D,T=\"\"!=i.projectAs?B.parse(i.projectAs)[0]:o,I=t.findNgContentIndex(T);if(i.type===dm.NG_CONTENT)e.children&&!e.children.every(Fm)&&this._reportError(\"<ng-content> element cannot have content.\",e.sourceSpan),D=new Rf(this.ngContentCount++,v?null:I,e.sourceSpan);else if(g)this._assertAllEventsPublishedByDirectives(C,d),this._assertNoComponentsNorElementBindingsOnTemplate(C,S,e.sourceSpan),D=new Ef(y,d,w,p,O.transformedDirectiveAsts,O.transformProviders,O.transformedHasViewContainer,O.queryMatches,k,v?null:I,e.sourceSpan);else{this._assertElementExists(b,e),this._assertOnlyOneComponent(C,e.sourceSpan);var P=v?null:t.findNgContentIndex(T);D=new Cf(r,y,S,d,w,O.transformedDirectiveAsts,O.transformProviders,O.transformedHasViewContainer,O.queryMatches,k,v?null:P,e.sourceSpan,e.endSourceSpan||null)}if(v){var A=this.contentQueryStartId,M=Rm(\"ng-template\",f),R=this._parseDirectives(this.selectorMatcher,M).directives,N=new Set,j=this._createDirectiveAsts(!0,r,R,h,[],e.sourceSpan,[],N),F=this._createElementPropertyAsts(r,h,N);this._assertNoComponentsNorElementBindingsOnTemplate(j,F,e.sourceSpan);var L=new Gf(this.providerViewContext,t.providerContext,t.isTemplateElement,j,[],[],!0,A,e.sourceSpan);L.afterElement(),D=new Ef([],[],[],m,L.transformedDirectiveAsts,L.transformProviders,L.transformedHasViewContainer,L.queryMatches,[D],I,e.sourceSpan)}return D},Om.prototype._parseAttr=function(e,t,n,r,i,o,a){var s=this._normalizeAttributeName(t.name),l=t.value,u=t.sourceSpan,c=t.valueSpan?t.valueSpan.start.offset:u.start.offset,p=[],d=s.match(ym),h=!1;if(null!==d)if(h=!0,null!=d[1])this._bindingParser.parsePropertyBinding(d[7],l,!1,u,c,t.valueSpan,n,r);else if(d[2])if(e){var f=d[7];this._parseVariable(f,l,u,a)}else this._reportError('\"let-\" is only supported on ng-template elements.',u);else d[3]?(f=d[7],this._parseReference(f,l,u,o)):d[4]?this._bindingParser.parseEvent(d[7],l,u,t.valueSpan||u,n,p):d[5]?(this._bindingParser.parsePropertyBinding(d[7],l,!1,u,c,t.valueSpan,n,r),this._parseAssignmentEvent(d[7],l,u,t.valueSpan||u,n,p)):d[6]?this._bindingParser.parseLiteralAttr(s,l,u,c,t.valueSpan,n,r):d[8]?(this._bindingParser.parsePropertyBinding(d[8],l,!1,u,c,t.valueSpan,n,r),this._parseAssignmentEvent(d[8],l,u,t.valueSpan||u,n,p)):d[9]?this._bindingParser.parsePropertyBinding(d[9],l,!1,u,c,t.valueSpan,n,r):d[10]&&this._bindingParser.parseEvent(d[10],l,u,t.valueSpan||u,n,p);else h=this._bindingParser.parsePropertyInterpolation(s,l,u,t.valueSpan,n,r);return h||this._bindingParser.parseLiteralAttr(s,l,u,c,t.valueSpan,n,r),i.push.apply(i,q(p.map(function(e){return yf.fromParsedEvent(e)}))),h},Om.prototype._normalizeAttributeName=function(e){return/^data-/i.test(e)?e.substring(5):e},Om.prototype._parseVariable=function(e,t,n,r){-1<e.indexOf(\"-\")&&this._reportError('\"-\" is not allowed in variable names',n),r.push(new wf(e,t,n))},Om.prototype._parseReference=function(e,t,n,r){-1<e.indexOf(\"-\")&&this._reportError('\"-\" is not allowed in reference names',n),r.push(new Tm(e,t,n))},Om.prototype._parseAssignmentEvent=function(e,t,n,r,i,o){this._bindingParser.parseEvent(e+\"Change\",t+\"=$event\",n,r,i,o)},Om.prototype._parseDirectives=function(e,t){var n=this,r=Zr(this.directivesIndex.size),i=!1;return e.match(t,function(e,t){r[n.directivesIndex.get(t)]=t,i=i||e.hasElementSelector()}),{directives:r.filter(function(e){return!!e}),matchElement:i}},Om.prototype._createDirectiveAsts=function(n,s,e,l,u,c,p,d){var h=this,f=new Set,m=null,t=e.map(function(t){var e=new Uo(c.start,c.end,\"Directive \"+_i(t.type));t.isComponent&&(m=t);var n=[],r=h._bindingParser.createDirectiveHostPropertyAsts(t,s,e).map(function(e){return mf.fromBoundProperty(e)});r=h._checkPropertiesInSchema(s,r);var i=h._bindingParser.createDirectiveHostEventAsts(t,e);h._createDirectivePropertyAsts(t.inputs,l,n,d),u.forEach(function(e){(0===e.value.length&&t.isComponent||e.isReferenceToDirective(t))&&(p.push(new _f(e.name,ui(t.type.reference),e.value,e.sourceSpan)),f.add(e.name))});var o=i.map(function(e){return yf.fromParsedEvent(e)}),a=h.contentQueryStartId;return h.contentQueryStartId+=t.queries.length,new Tf(t,n,r,o,a,e)});return u.forEach(function(e){if(0<e.value.length)f.has(e.name)||h._reportError('There is no directive with \"exportAs\" set to \"'+e.value+'\"',e.sourceSpan);else if(!m){var t=null;n&&(t=ci(h.reflector,si.TemplateRef)),p.push(new _f(e.name,t,e.value,e.sourceSpan))}}),t},Om.prototype._createDirectivePropertyAsts=function(r,e,i,o){if(r){var a=new Map;e.forEach(function(e){var t=a.get(e.name);t&&!t.isLiteral||a.set(e.name,e)}),Object.keys(r).forEach(function(e){var t=r[e],n=a.get(t);n&&(o.add(n.name),Vm(n.expression)||i.push(new kf(e,n.name,n.expression,n.sourceSpan)))})}},Om.prototype._createElementPropertyAsts=function(n,e,r){var i=this,o=[];return e.forEach(function(e){if(!e.isLiteral&&!r.has(e.name)){var t=i._bindingParser.createBoundElementProperty(n,e);o.push(mf.fromBoundProperty(t))}}),this._checkPropertiesInSchema(n,o)},Om.prototype._findComponentDirectives=function(e){return e.filter(function(e){return e.directive.isComponent})},Om.prototype._findComponentDirectiveNames=function(e){return this._findComponentDirectives(e).map(function(e){return _i(e.directive.type)})},Om.prototype._assertOnlyOneComponent=function(e,t){var n=this._findComponentDirectiveNames(e);1<n.length&&this._reportError(\"More than one component matched on this element.\\nMake sure that only one component's selector can match a given element.\\nConflicting components: \"+n.join(\",\"),t)},Om.prototype._assertElementExists=function(e,t){var n=t.name.replace(/^:xhtml:/,\"\");if(!e&&!this._schemaRegistry.hasElement(n,this._schemas)){var r=\"'\"+n+\"' is not a known element:\\n\";r+=\"1. If '\"+n+\"' is an Angular component, then verify that it is part of this module.\\n\",-1<n.indexOf(\"-\")?r+=\"2. If '\"+n+\"' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.\":r+=\"2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.\",this._reportError(r,t.sourceSpan)}},Om.prototype._assertNoComponentsNorElementBindingsOnTemplate=function(e,t,n){var r=this,i=this._findComponentDirectiveNames(e);0<i.length&&this._reportError(\"Components on an embedded template: \"+i.join(\",\"),n),t.forEach(function(e){r._reportError(\"Property binding \"+e.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\".',n)})},Om.prototype._assertAllEventsPublishedByDirectives=function(e,t){var n=this,r=new Set;e.forEach(function(n){Object.keys(n.directive.outputs).forEach(function(e){var t=n.directive.outputs[e];r.add(t)})}),t.forEach(function(e){null==e.target&&r.has(e.name)||n._reportError(\"Event binding \"+e.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\".',e.sourceSpan)})},Om.prototype._checkPropertiesInSchema=function(n,e){var r=this;return e.filter(function(e){if(0===e.type&&!r._schemaRegistry.hasProperty(n,e.name,r._schemas)){var t=\"Can't bind to '\"+e.name+\"' since it isn't a known property of '\"+n+\"'.\";n.startsWith(\"ng-\")?t+=\"\\n1. If '\"+e.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.\":-1<n.indexOf(\"-\")&&(t+=\"\\n1. If '\"+n+\"' is an Angular component and it has '\"+e.name+\"' input, then verify that it is part of this module.\\n2. If '\"+n+\"' 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.\"),r._reportError(t,e.sourceSpan)}return!Vm(e.value)})},Om.prototype._reportError=function(e,t,n){void 0===n&&(n=E.ParseErrorLevel.ERROR),this._targetErrors.push(new Go(t,e,n))},Om);function Om(e,t,n,r,i,o,a,s){var l=this;this.reflector=e,this.config=t,this.providerViewContext=n,this._bindingParser=i,this._schemaRegistry=o,this._schemas=a,this._targetErrors=s,this.selectorMatcher=new T,this.directivesIndex=new Map,this.ngContentCount=0,this.contentQueryStartId=n.component.viewQueries.length+1,r.forEach(function(e,t){var n=B.parse(e.selector);l.selectorMatcher.addSelectables(n,e),l.directivesIndex.set(e,t)})}var km=(Dm.prototype.visitElement=function(e,t){var n=fm(e);if(n.type===dm.SCRIPT||n.type===dm.STYLE||n.type===dm.STYLESHEET)return null;var r=e.attrs.map(function(e){return[e.name,e.value]}),i=Rm(e.name,r),o=t.findNgContentIndex(i),a=ep(this,e.children,Nm);return new Cf(e.name,ep(this,e.attrs),[],[],[],[],[],!1,[],a,o,e.sourceSpan,e.endSourceSpan)},Dm.prototype.visitComment=function(e,t){return null},Dm.prototype.visitAttribute=function(e,t){return new df(e.name,e.value,e.sourceSpan)},Dm.prototype.visitText=function(e,t){var n=t.findNgContentIndex(gm());return new lf(e.value,n,e.sourceSpan)},Dm.prototype.visitExpansion=function(e,t){return e},Dm.prototype.visitExpansionCase=function(e,t){return e},Dm);function Dm(){}var Tm=(Im.prototype.isReferenceToDirective=function(e){return-1!==function(e){return e?e.split(\",\").map(function(e){return e.trim()}):[]}(e.exportAs).indexOf(this.value)},Im);function Im(e,t,n){this.name=e,this.value=t,this.sourceSpan=n}function Pm(e){return e.trim().split(/\\s+/g)}var Am=(Mm.create=function(e,t,n){var r=new T,i=null,o=t.find(function(e){return e.directive.isComponent});if(o)for(var a=o.directive.template.ngContentSelectors,s=0;s<a.length;s++)\"*\"===a[s]?i=s:r.addSelectables(B.parse(a[s]),s);return new Mm(e,r,i,n)},Mm.prototype.findNgContentIndex=function(e){var n=[];return this._ngContentIndexMatcher.match(e,function(e,t){n.push(t)}),n.sort(),null!=this._wildcardNgContentIndex&&n.push(this._wildcardNgContentIndex),0<n.length?n[0]:null},Mm);function Mm(e,t,n,r){this.isTemplateElement=e,this._ngContentIndexMatcher=t,this._wildcardNgContentIndex=n,this.providerContext=r}function Rm(e,t){var n=new B,r=H(e)[1];n.setElement(r);for(var i=0;i<t.length;i++){var o=t[i][0],a=H(o)[1],s=t[i][1];if(n.addAttribute(a,s),\"class\"==o.toLowerCase())Pm(s).forEach(function(e){return n.addClassName(e)})}return n}var Nm=new Am(!0,new T,null,null),jm=new km;function Fm(e){return e instanceof zc&&0==e.value.trim().length}function Lm(e){var t=new Map;return e.forEach(function(e){t.get(e.type.reference)||t.set(e.type.reference,e)}),Array.from(t.values())}function Vm(e){return e instanceof mc&&(e=e.ast),e instanceof lu}function Bm(e){var t=e.charCodeAt(0);if(t==e.charCodeAt(e.length-1)&&(39==t||34==t)){var n=e.substring(1,e.length-1);-1==n.indexOf(\"'\")&&-1==n.indexOf('\"')&&(e=n)}return e}function Um(e){return e.replace(/[a-z][A-Z]/g,function(e){return e.charAt(0)+\"-\"+e.charAt(1)}).toLowerCase()}var zm,qm=(Hm.prototype.registerBoundInput=function(e){var t=null,n=e.name;switch(e.type){case 0:t=this.registerInputBasedOnName(n,e.value,e.sourceSpan);break;case 3:t=this.registerStyleInput(n,!1,e.value,e.sourceSpan,e.unit);break;case 2:t=this.registerClassInput(n,!1,e.value,e.sourceSpan)}return!!t},Hm.prototype.registerInputBasedOnName=function(e,t,n){var r=null,i=e.substring(0,6),o=\"style\"===e||\"style.\"===i||\"style!\"===i;if(o||!o&&(\"class\"===e||\"className\"===e||\"class.\"===i||\"class!\"===i)){var a=\".\"!==e.charAt(5),s=e.substr(a?5:6);r=o?this.registerStyleInput(s,a,t,n):this.registerClassInput(s,a,t,n)}return r},Hm.prototype.registerStyleInput=function(e,t,n,r,i){if(Vm(n))return null;var o=Gm(e=function(e){return Um(e)}(e)),a=o.property,s=o.hasOverrideFlag,l=o.unit,u={name:a,unit:i||l,value:n,sourceSpan:r,hasOverrideFlag:s};return t?(this._useDefaultSanitizer=!0,this._styleMapInput=u):((this._singleStyleInputs=this._singleStyleInputs||[]).push(u),this._useDefaultSanitizer=this._useDefaultSanitizer||function(e){return\"background-image\"===e||\"backgroundImage\"===e||\"background\"===e||\"border-image\"===e||\"borderImage\"===e||\"filter\"===e||\"list-style\"===e||\"listStyle\"===e||\"list-style-image\"===e||\"listStyleImage\"===e||\"clip-path\"===e||\"clipPath\"===e}(e),Wm(this._stylesIndex,a)),this._lastStylingInput=u,this._firstStylingInput=this._firstStylingInput||u,this._checkForPipes(n),this.hasBindings=!0,u},Hm.prototype.registerClassInput=function(e,t,n,r){if(Vm(n))return null;var i=Gm(e),o=i.property,a={name:o,value:n,sourceSpan:r,hasOverrideFlag:i.hasOverrideFlag,unit:null};if(t){if(this._classMapInput)throw new Error(\"[class] and [className] bindings cannot be used on the same element simultaneously\");this._classMapInput=a}else(this._singleClassInputs=this._singleClassInputs||[]).push(a),Wm(this._classesIndex,o);return this._lastStylingInput=a,this._firstStylingInput=this._firstStylingInput||a,this._checkForPipes(n),this.hasBindings=!0,a},Hm.prototype._checkForPipes=function(e){e instanceof mc&&e.ast instanceof Nu&&(this.hasBindingsWithPipes=!0)},Hm.prototype.registerStyleAttr=function(e){this._initialStyleValues=function(e){for(var t=[],n=0,r=0,i=0,o=0,a=0,s=null,l=!1;n<e.length;)switch(e.charCodeAt(n++)){case 40:r++;break;case 41:r--;break;case 39:l=l||0<o,0===i?i=39:39===i&&92!==e.charCodeAt(n-1)&&(i=0);break;case 34:l=l||0<o,0===i?i=34:34===i&&92!==e.charCodeAt(n-1)&&(i=0);break;case 58:s||0!==r||0!==i||(s=Um(e.substring(a,n-1).trim()),o=n);break;case 59:if(s&&0<o&&0===r&&0===i){var u=e.substring(o,n-1).trim();t.push(s,l?Bm(u):u),a=n,o=0,s=null,l=!1}}return s&&o&&(u=e.substr(o).trim(),t.push(s,l?Bm(u):u)),t}(e),this._hasInitialValues=!0},Hm.prototype.registerClassAttr=function(e){this._initialClassValues=e.trim().split(/\\s+/g),this._hasInitialValues=!0},Hm.prototype.populateInitialStylingAttrs=function(e){if(this._initialClassValues.length){e.push(xr(1));for(var t=0;t<this._initialClassValues.length;t++)e.push(xr(this._initialClassValues[t]))}if(this._initialStyleValues.length)for(e.push(xr(2)),t=0;t<this._initialStyleValues.length;t+=2)e.push(xr(this._initialStyleValues[t]),xr(this._initialStyleValues[t+1]))},Hm.prototype.buildHostAttrsInstruction=function(e,t,n){var r=this;return this._directiveExpr&&(t.length||this._hasInitialValues)?{sourceSpan:e,reference:Ki.elementHostAttrs,allocateBindingSlots:0,params:function(){return r.populateInitialStylingAttrs(t),[t.some(function(e){return e instanceof We})?gr(t):function(e,t){return t.length?e.getConstLiteral(gr(t),!0):sn}(n,t)]}}:null},Hm.prototype.buildClassMapInstruction=function(e){return this._classMapInput?this._buildMapBasedInstruction(e,!0,this._classMapInput):null},Hm.prototype.buildStyleMapInstruction=function(e){return this._styleMapInput?this._buildMapBasedInstruction(e,!1,this._styleMapInput):null},Hm.prototype._buildMapBasedInstruction=function(e,t,n){var r,i=1,o=n.value.visit(e);return r=o instanceof Yu&&t?(i+=o.expressions.length,function(e){switch(Cl(e)){case 1:return Ki.classMap;case 3:return Ki.classMapInterpolate1;case 5:return Ki.classMapInterpolate2;case 7:return Ki.classMapInterpolate3;case 9:return Ki.classMapInterpolate4;case 11:return Ki.classMapInterpolate5;case 13:return Ki.classMapInterpolate6;case 15:return Ki.classMapInterpolate7;case 17:return Ki.classMapInterpolate8;default:return Ki.classMapInterpolateV}}(o)):t?Ki.classMap:Ki.styleMap,{sourceSpan:n.sourceSpan,reference:r,allocateBindingSlots:i,supportsInterpolation:t,params:function(e){var t=e(o);return Array.isArray(t)?t:[t]}}},Hm.prototype._buildSingleInputs=function(t,e,n,o,a,s){return e.map(function(r){var i=r.value.visit(a),e=1;return i instanceof Yu&&(e+=i.expressions.length,s&&(t=s(i))),{sourceSpan:r.sourceSpan,supportsInterpolation:!!s,allocateBindingSlots:e,reference:t,params:function(e){var t=[];t.push(xr(r.name));var n=e(i);return Array.isArray(n)?t.push.apply(t,q(n)):t.push(n),o&&r.unit&&t.push(xr(r.unit)),t}}})},Hm.prototype._buildClassInputs=function(e){return this._singleClassInputs?this._buildSingleInputs(Ki.classProp,this._singleClassInputs,this._classesIndex,!1,e):[]},Hm.prototype._buildStyleInputs=function(e){return this._singleStyleInputs?this._buildSingleInputs(Ki.styleProp,this._singleStyleInputs,this._stylesIndex,!0,e,Ym):[]},Hm.prototype._buildSanitizerFn=function(){return{sourceSpan:this._firstStylingInput?this._firstStylingInput.sourceSpan:null,reference:Ki.styleSanitizer,allocateBindingSlots:0,params:function(){return[mr(Ki.defaultStyleSanitizer)]}}},Hm.prototype.buildUpdateLevelInstructions=function(e){var t=[];if(this.hasBindings){this._useDefaultSanitizer&&t.push(this._buildSanitizerFn());var n=this.buildStyleMapInstruction(e);n&&t.push(n);var r=this.buildClassMapInstruction(e);r&&t.push(r),t.push.apply(t,q(this._buildStyleInputs(e))),t.push.apply(t,q(this._buildClassInputs(e)))}return t},Hm);function Hm(e,t){this._elementIndexExpr=e,this._directiveExpr=t,this._hasInitialValues=!1,this.hasBindings=!1,this.hasBindingsWithPipes=!1,this._classMapInput=null,this._styleMapInput=null,this._singleStyleInputs=null,this._singleClassInputs=null,this._lastStylingInput=null,this._firstStylingInput=null,this._stylesIndex=new Map,this._classesIndex=new Map,this._initialStyleValues=[],this._initialClassValues=[],this._useDefaultSanitizer=!1}function Wm(e,t){e.has(t)||e.set(t,e.size)}function Gm(e){var t=!1,n=e.indexOf(\"!important\");-1!==n&&(e=0<n?e.substring(0,n):\"\",t=!0);var r=\"\",i=e,o=e.lastIndexOf(\".\");return 0<o&&(r=e.substr(o+1),i=e.substring(0,o)),{property:i,unit:r,hasOverrideFlag:t}}function Ym(e){switch(Cl(e)){case 1:return Ki.styleProp;case 3:return Ki.stylePropInterpolate1;case 5:return Ki.stylePropInterpolate2;case 7:return Ki.stylePropInterpolate3;case 9:return Ki.stylePropInterpolate4;case 11:return Ki.stylePropInterpolate5;case 13:return Ki.stylePropInterpolate6;case 15:return Ki.stylePropInterpolate7;case 17:return Ki.stylePropInterpolate8;default:return Ki.stylePropInterpolateV}}function Km(){return zm||(zm={},Zm(M.HTML,[\"iframe|srcdoc\",\"*|innerHTML\",\"*|outerHTML\"]),Zm(M.STYLE,[\"*|style\"]),Zm(M.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\"]),Zm(M.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\"])),zm}function Zm(e,t){var n,r;try{for(var i=z(t),o=i.next();!o.done;o=i.next()){var a=o.value;zm[a.toLowerCase()]=e}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}}function Qm(){}var Xm,$m=[\"[Element]|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop,slot,*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:|\"],Jm={class:\"className\",for:\"htmlFor\",formaction:\"formAction\",innerHtml:\"innerHTML\",readonly:\"readOnly\",tabindex:\"tabIndex\"},ev=(f(tv,Xm=Qm),tv.prototype.hasProperty=function(e,t,n){if(n.some(function(e){return e.name===J.name}))return!0;if(-1<e.indexOf(\"-\")){if(W(e)||l(e))return!1;if(n.some(function(e){return e.name===$.name}))return!0}return!!(this._schema[e.toLowerCase()]||this._schema.unknown)[t]},tv.prototype.hasElement=function(e,t){if(t.some(function(e){return e.name===J.name}))return!0;if(-1<e.indexOf(\"-\")){if(W(e)||l(e))return!0;if(t.some(function(e){return e.name===$.name}))return!0}return!!this._schema[e.toLowerCase()]},tv.prototype.securityContext=function(e,t,n){n&&(t=this.getMappedPropName(t)),e=e.toLowerCase(),t=t.toLowerCase();var r=Km()[e+\"|\"+t];return(r=r||Km()[\"*|\"+t])||M.NONE},tv.prototype.getMappedPropName=function(e){return Jm[e]||e},tv.prototype.getDefaultComponentElementName=function(){return\"ng-component\"},tv.prototype.validateProperty=function(e){return e.toLowerCase().startsWith(\"on\")?{error:!0,msg:\"Binding to event property '\"+e+\"' is disallowed for security reasons, please use (\"+e.slice(2)+\")=...\\nIf '\"+e+\"' is a directive input, make sure the directive is imported by the current module.\"}:{error:!1}},tv.prototype.validateAttribute=function(e){return e.toLowerCase().startsWith(\"on\")?{error:!0,msg:\"Binding to event attribute '\"+e+\"' is disallowed for security reasons, please use (\"+e.slice(2)+\")=...\"}:{error:!1}},tv.prototype.allKnownElementNames=function(){return Object.keys(this._schema)},tv.prototype.normalizeAnimationStyleProperty=function(e){return function(e){return e.replace(Sr,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e[1].toUpperCase()})}(e)},tv.prototype.normalizeAnimationStyleValue=function(e,t,n){var r=\"\",i=n.toString().trim(),o=null;if(function(e){switch(e){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 1;default:return 0}}(e)&&0!==n&&\"0\"!==n)if(\"number\"==typeof n)r=\"px\";else{var a=n.match(/^[+-]?[\\d\\.]+([a-z]*)$/);a&&0==a[1].length&&(o=\"Please provide a CSS unit value for \"+t+\":\"+n)}return{error:o,value:i+r}},tv);function tv(){var u=Xm.call(this)||this;return u._schema={},$m.forEach(function(e){var t={},n=U(e.split(\"|\"),2),r=n[0],i=n[1].split(\",\"),o=U(r.split(\"^\"),2),a=o[0],s=o[1];a.split(\",\").forEach(function(e){return u._schema[e.toLowerCase()]=t});var l=s&&u._schema[s.toLowerCase()];l&&Object.keys(l).forEach(function(e){t[e]=l[e]}),i.forEach(function(e){if(0<e.length)switch(e[0]){case\"*\":break;case\"!\":t[e.substring(1)]=\"boolean\";break;case\"#\":t[e.substring(1)]=\"number\";break;case\"%\":t[e.substring(1)]=\"object\";break;default:t[e]=\"string\"}})}),u}var nv=/^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/;function rv(e,t){var n=new iv(t),r=ep(n,e),i=t.errors.concat(n.errors),o=i.filter(function(e){return e.level===E.ParseErrorLevel.ERROR});if(0<o.length)throw jr(\"Template parse errors:\\n\"+o.join(\"\\n\"),o);return{nodes:r,errors:i,styleUrls:n.styleUrls,styles:n.styles}}var iv=(ov.prototype.visitElement=function(e){var t,n,r=this,i=fm(e);if(i.type===dm.SCRIPT)return null;if(i.type===dm.STYLE){var o=function(e){return 1===e.children.length&&e.children[0]instanceof zc?e.children[0].value:null}(e);return null!==o&&this.styles.push(o),null}if(i.type===dm.STYLESHEET&&tm(i.hrefAttr))return this.styleUrls.push(i.hrefAttr),null;var a=V(e.name),s=[],l=[],u=[],c=[],p=[],d={},h=[],f=[],m=!1;try{for(var v=z(e.attrs),y=v.next();!y.done;y=v.next()){var g=y.value,_=!1,b=cv(g.name),w=!1;if(g.i18n&&(d[g.name]=g.i18n),b.startsWith(\"*\")){m&&this.reportError(\"Can't have multiple template bindings on one element. Use only one attribute prefixed with *\",g.sourceSpan),m=w=!0;var x=g.value,C=b.substring(\"*\".length),S=[],E=g.valueSpan?g.valueSpan.start.offset:g.sourceSpan.start.offset;this.bindingParser.parseInlineTemplateBinding(C,x,g.sourceSpan,E,[],h,S),f.push.apply(f,q(S.map(function(e){return new da(e.name,e.value,e.sourceSpan)})))}else _=this.parseAttribute(a,g,[],s,l,u,c);_||w||p.push(this.visitAttribute(g))}}catch(e){t={error:e}}finally{try{y&&!y.done&&(n=v.return)&&n.call(v)}finally{if(t)throw t.error}}var O,k=ep(i.nonBindable?uv:this,e.children);if(i.type===dm.NG_CONTENT){e.children&&!e.children.every(function(e){return function(e){return e instanceof zc&&0==e.value.trim().length}(e)||function(e){return e instanceof $c}(e)})&&this.reportError(\"<ng-content> element cannot have content.\",e.sourceSpan);var D=i.selectAttr,T=e.attrs.map(function(e){return r.visitAttribute(e)});O=new ca(D,T,e.sourceSpan,e.i18n)}else O=a?(T=this.extractAttributes(e.name,s,d),new la(e.name,p,T.bound,l,[],k,c,u,e.sourceSpan,e.startSourceSpan,e.endSourceSpan,e.i18n)):(T=this.extractAttributes(e.name,s,d),new aa(e.name,p,T.bound,l,k,c,e.sourceSpan,e.startSourceSpan,e.endSourceSpan,e.i18n));if(m){T=this.extractAttributes(\"ng-template\",h,d);var I=[];T.literal.forEach(function(e){return I.push(e)}),T.bound.forEach(function(e){return I.push(e)});var P=O instanceof aa?{attributes:O.attributes,inputs:O.inputs,outputs:O.outputs}:{attributes:[],inputs:[],outputs:[]},A=a&&Qs(e.i18n)?void 0:e.i18n;O=new la(O.name,P.attributes,P.inputs,P.outputs,I,[O],[],f,e.sourceSpan,e.startSourceSpan,e.endSourceSpan,A)}return O},ov.prototype.visitAttribute=function(e){return new ea(e.name,e.value,e.sourceSpan,e.valueSpan,e.i18n)},ov.prototype.visitText=function(e){return this._visitTextWithInterpolation(e.value,e.sourceSpan,e.i18n)},ov.prototype.visitExpansion=function(i){var o=this,a=i.i18n;if(!a)return null;var s={},l={};return Object.keys(a.placeholders).forEach(function(e){var t=a.placeholders[e];if(e.startsWith(\"VAR_\")){var n=o.bindingParser.interpolationConfig,r=\"\"+n.start+t+n.end;s[e]=o._visitTextWithInterpolation(r,i.sourceSpan)}else l[e]=o._visitTextWithInterpolation(t,i.sourceSpan)}),new va(s,l,i.sourceSpan,a)},ov.prototype.visitExpansionCase=function(e){return null},ov.prototype.visitComment=function(e){return null},ov.prototype.extractAttributes=function(r,e,i){var o=this,a=[],s=[];return e.forEach(function(e){var t=i[e.name];if(e.isLiteral)s.push(new ea(e.name,e.expression.source||\"\",e.sourceSpan,void 0,t));else{var n=o.bindingParser.createBoundElementProperty(r,e,!0,!1);a.push(na.fromBoundElementProperty(n,t))}}),{bound:a,literal:s}},ov.prototype.parseAttribute=function(e,t,n,r,i,o,a){var s=cv(t.name),l=t.value,u=t.sourceSpan,c=t.valueSpan?t.valueSpan.start.offset:u.start.offset,p=s.match(nv),d=!1;if(p)if(d=!0,null!=p[1])this.bindingParser.parsePropertyBinding(p[7],l,!1,u,c,t.valueSpan,n,r);else if(p[2])if(e){var h=p[7];this.parseVariable(h,l,u,t.valueSpan,o)}else this.reportError('\"let-\" is only supported on ng-template elements.',u);else if(p[3])h=p[7],this.parseReference(h,l,u,t.valueSpan,a);else if(p[4]){var f=[];this.bindingParser.parseEvent(p[7],l,u,t.valueSpan||u,n,f),pv(f,i)}else p[5]?(this.bindingParser.parsePropertyBinding(p[7],l,!1,u,c,t.valueSpan,n,r),this.parseAssignmentEvent(p[7],l,u,t.valueSpan,n,i)):p[6]?this.bindingParser.parseLiteralAttr(s,l,u,c,t.valueSpan,n,r):p[8]?(this.bindingParser.parsePropertyBinding(p[8],l,!1,u,c,t.valueSpan,n,r),this.parseAssignmentEvent(p[8],l,u,t.valueSpan,n,i)):p[9]?this.bindingParser.parsePropertyBinding(p[9],l,!1,u,c,t.valueSpan,n,r):p[10]&&(f=[],this.bindingParser.parseEvent(p[10],l,u,t.valueSpan||u,n,f),pv(f,i));else d=this.bindingParser.parsePropertyInterpolation(s,l,u,t.valueSpan,n,r);return d},ov.prototype._visitTextWithInterpolation=function(e,t,n){var r=Kh(e),i=this.bindingParser.parseInterpolation(r,t);return i?new $o(i,t,n):new Qo(r,t)},ov.prototype.parseVariable=function(e,t,n,r,i){-1<e.indexOf(\"-\")&&this.reportError('\"-\" is not allowed in variable names',n),i.push(new da(e,t,n,r))},ov.prototype.parseReference=function(e,t,n,r,i){-1<e.indexOf(\"-\")&&this.reportError('\"-\" is not allowed in reference names',n),i.push(new fa(e,t,n,r))},ov.prototype.parseAssignmentEvent=function(e,t,n,r,i,o){var a=[];this.bindingParser.parseEvent(e+\"Change\",t+\"=$event\",n,r||n,i,a),pv(a,o)},ov.prototype.reportError=function(e,t,n){void 0===n&&(n=E.ParseErrorLevel.ERROR),this.errors.push(new Go(t,e,n))},ov);function ov(e){this.bindingParser=e,this.errors=[],this.styles=[],this.styleUrls=[]}function av(){}var sv,lv,uv=new(av.prototype.visitElement=function(e){var t=fm(e);if(t.type===dm.SCRIPT||t.type===dm.STYLE||t.type===dm.STYLESHEET)return null;var n=ep(this,e.children,null);return new aa(e.name,ep(this,e.attrs),[],[],n,[],e.sourceSpan,e.startSourceSpan,e.endSourceSpan)},av.prototype.visitComment=function(e){return null},av.prototype.visitAttribute=function(e){return new ea(e.name,e.value,e.sourceSpan,void 0,e.i18n)},av.prototype.visitText=function(e){return new Qo(e.value,e.sourceSpan)},av.prototype.visitExpansion=function(e){return null},av.prototype.visitExpansionCase=function(e){return null},av);function cv(e){return/^data-/i.test(e)?e.substring(5):e}function pv(e,t){t.push.apply(t,q(e.map(function(e){return ia.fromParsedEvent(e)})))}function dv(){return{getUniqueId:function(e){void 0===e&&(e=0);var t=e;return function(){return t++}}(),icus:new Map}}(lv=sv=sv||{})[lv.ELEMENT=0]=\"ELEMENT\",lv[lv.TEMPLATE=1]=\"TEMPLATE\",lv[lv.PROJECTION=2]=\"PROJECTION\";var hv=(fv.prototype.appendTag=function(e,t,n,r){if(!t.isVoid||!r){var i=t.isVoid||!r?t.startName:t.closeName,o={type:e,index:n,ctx:this.id,isVoid:t.isVoid,closed:r};tl(this.placeholders,i,o)}},Object.defineProperty(fv.prototype,\"icus\",{get:function(){return this._registry.icus},enumerable:!0,configurable:!0}),Object.defineProperty(fv.prototype,\"isRoot\",{get:function(){return 0===this.level},enumerable:!0,configurable:!0}),Object.defineProperty(fv.prototype,\"isResolved\",{get:function(){return 0===this._unresolvedCtxCount},enumerable:!0,configurable:!0}),fv.prototype.getSerializedPlaceholders=function(){var n=new Map;return this.placeholders.forEach(function(e,t){return n.set(t,e.map(gv))}),n},fv.prototype.appendBinding=function(e){this.bindings.add(e)},fv.prototype.appendIcu=function(e,t){tl(this._registry.icus,e,t)},fv.prototype.appendBoundText=function(e){var n=this;nl(e,this.bindings.size,this.id).forEach(function(e,t){return tl.apply(void 0,q([n.placeholders,t],e))})},fv.prototype.appendTemplate=function(e,t){this.appendTag(sv.TEMPLATE,e,t,!1),this.appendTag(sv.TEMPLATE,e,t,!0),this._unresolvedCtxCount++},fv.prototype.appendElement=function(e,t,n){this.appendTag(sv.ELEMENT,e,t,n)},fv.prototype.appendProjection=function(e,t){this.appendTag(sv.PROJECTION,e,t,!1),this.appendTag(sv.PROJECTION,e,t,!0)},fv.prototype.forkChildContext=function(e,t,n){return new fv(e,this.ref,this.level+1,t,n,this._registry)},fv.prototype.reconcileChildContext=function(o){var a=this;[\"start\",\"close\"].forEach(function(e){var t=o.meta[e+\"Name\"],n=(a.placeholders.get(t)||[]).find(yv(a.id,o.templateIndex));n&&(n.ctx=o.id)}),o.placeholders.forEach(function(e,t){var n=a.placeholders.get(t);if(n){var r=n.findIndex(yv(o.id,o.templateIndex));if(0<=r){var i=t.startsWith(\"CLOSE\");t.endsWith(\"NG-TEMPLATE\")?n.splice.apply(n,q([r+(i?0:1),0],e)):(e[i?e.length-1:0].tmpl=n[r],n.splice.apply(n,q([r,1],e)))}else n.push.apply(n,q(e));a.placeholders.set(t,n)}else a.placeholders.set(t,e)}),this._unresolvedCtxCount--},fv);function fv(e,t,n,r,i,o){void 0===n&&(n=0),void 0===r&&(r=null),this.index=e,this.ref=t,this.level=n,this.templateIndex=r,this.meta=i,this.registry=o,this.bindings=new Set,this.placeholders=new Map,this.isEmitted=!1,this._unresolvedCtxCount=0,this._registry=o||dv(),this.id=this._registry.getUniqueId()}function mv(e,t,n,r){return Js((r?\"/\":\"\")+e+t,n)}function vv(e,t,n){var r=t.index,i=t.ctx;return t.isVoid?mv(e,r,i)+mv(e,r,i,!0):mv(e,r,i,n)}function yv(t,n){return function(e){return\"object\"==typeof e&&e.type===sv.TEMPLATE&&e.index===n&&e.ctx===t}}function gv(e){function t(e,t){return vv(\"#\",e,t)}function n(e,t){return vv(\"*\",e,t)}var r,i;switch(e.type){case sv.ELEMENT:return e.closed?t(e,!0)+(e.tmpl?n(e.tmpl,!0):\"\"):e.tmpl?n(e.tmpl)+t(e)+(e.isVoid?n(e.tmpl,!0):\"\"):t(e);case sv.TEMPLATE:return n(e,e.closed);case sv.PROJECTION:return i=(r=e).closed,vv(\"!\",r,i);default:return e}}function _v(){}var bv=new(_v.prototype.visitText=function(e){return e.value},_v.prototype.visitContainer=function(e){var t=this;return e.children.map(function(e){return e.visit(t)}).join(\"\")},_v.prototype.visitIcu=function(t){var n=this,e=Object.keys(t.cases).map(function(e){return e+\" {\"+t.cases[e].visit(n)+\"}\"});return\"{\"+t.expressionPlaceholder+\", \"+t.type+\", \"+e.join(\" \")+\"}\"},_v.prototype.visitTagPlaceholder=function(e){var t=this;return e.isVoid?this.formatPh(e.startName):\"\"+this.formatPh(e.startName)+e.children.map(function(e){return e.visit(t)}).join(\"\")+this.formatPh(e.closeName)},_v.prototype.visitPlaceholder=function(e){return this.formatPh(e.name)},_v.prototype.visitIcuPlaceholder=function(e,t){return this.formatPh(e.name)},_v.prototype.formatPh=function(e){return\"{\"+il(e,!1)+\"}\"},_v);function wv(e){return e.visit(bv)}var xv=\"goog.getMsg\";function Cv(e,t,n,r){var i=[xr(function(e){return e.nodes.map(function(e){return e.visit(Ev,null)}).join(\"\")}(t))];Object.keys(r).length&&i.push(Gp(r,!0));var o=[],a=function(e){var t=[];return e.description&&t.push({tagName:\"desc\",text:e.description}),e.meaning&&t.push({tagName:\"meaning\",text:e.meaning}),0==t.length?null:new Hn(t)}(fp(t));return null!==a&&o.push(a),o.push(n.set(fr(xv).callFn(i)).toConstDecl()),o.push(new gn(e.set(n))),o}function Sv(){}var Ev=new(Sv.prototype.formatPh=function(e){return\"{$\"+il(e)+\"}\"},Sv.prototype.visitText=function(e){return e.value},Sv.prototype.visitContainer=function(e){var t=this;return e.children.map(function(e){return e.visit(t)}).join(\"\")},Sv.prototype.visitIcu=function(e){return wv(e)},Sv.prototype.visitTagPlaceholder=function(e){var t=this;return e.isVoid?this.formatPh(e.startName):\"\"+this.formatPh(e.startName)+e.children.map(function(e){return e.visit(t)}).join(\"\")+this.formatPh(e.closeName)},Sv.prototype.visitPlaceholder=function(e){return this.formatPh(e.name)},Sv.prototype.visitIcuPlaceholder=function(e,t){return this.formatPh(e.name)},Sv);function Ov(e,t,n){var r=[],i=function(e){var t=[];return e.nodes.forEach(function(e){return e.visit(Nv,t)}),function(e){var t=[],n=[];e[0]instanceof Av&&t.push(\"\");for(var r=0;r<e.length;r++){var i=e[r];i instanceof Tv?t.push(i.text):(n.push(i.text),e[r-1]instanceof Av&&t.push(\"\"))}e[e.length-1]instanceof Av&&t.push(\"\");return{messageParts:t,placeHolders:n}}(t)}(t),o=i.messageParts,a=i.placeHolders;return r.push(new gn(e.set(function(e,t,n,r,i){return new vt(e,t,n,r,i)}(fp(t),o,a,a.map(function(e){return n[e]}))))),r}function kv(e){this.text=e}var Dv,Tv=(f(Iv,Dv=kv),Iv);function Iv(){return null!==Dv&&Dv.apply(this,arguments)||this}var Pv,Av=(f(Mv,Pv=kv),Mv);function Mv(e){return Pv.call(this,il(e,!1))||this}function Rv(){}var Nv=new(Rv.prototype.visitText=function(e,t){t[t.length-1]instanceof Tv?t[t.length-1].text+=e.value:t.push(new Tv(e.value))},Rv.prototype.visitContainer=function(e,t){var n=this;e.children.forEach(function(e){return e.visit(n,t)})},Rv.prototype.visitIcu=function(e,t){t.push(new Tv(wv(e)))},Rv.prototype.visitTagPlaceholder=function(e,t){var n=this;t.push(new Av(e.startName)),e.isVoid||(e.children.forEach(function(e){return e.visit(n,t)}),t.push(new Av(e.closeName)))},Rv.prototype.visitPlaceholder=function(e,t){t.push(new Av(e.name))},Rv.prototype.visitIcuPlaceholder=function(e,t){t.push(new Av(e.name))},Rv);var jv=\"ngProjectAs\",Fv=new Map([[\"window\",Ki.resolveWindow],[\"document\",Ki.resolveDocument],[\"body\",Ki.resolveBody]]),Lv=[\" \",\"\\n\",\"\\r\",\"\\t\"];function Vv(e,t){return wr(fr(ul).bitwiseAnd(xr(e),null,!1),t)}function Bv(e,t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=e.type,i=e.name,o=e.target,a=e.phase,s=e.handler;if(o&&!Fv.has(o))throw new Error(\"Unexpected global target '\"+o+\"' defined for '\"+i+\"' event.\\n        Supported list of global targets: \"+Array.from(Fv.keys())+\".\");var l=null===n||0===n.bindingLevel?fr(ll):n.getOrCreateSharedContextVar(0),u=nd(n,l,s,\"b\",function(){return Nr(\"Unexpected interpolation\")},e.handlerSpan),c=[];n&&(c.push.apply(c,q(n.restoreViewStatement())),c.push.apply(c,q(n.variableDeclarations()))),c.push.apply(c,q(u.render3Stmts));var p=1===r?function(e,t){return\"\"+Ji+e+\".\"+t}(i,a):i,d=t&&vi(t),h=br([new Rt(\"$event\",ke)],c,De,null,d),f=[xr(p),h];return o&&f.push(xr(!1),mr(Fv.get(o))),f}var Uv=(zv.prototype.buildTemplateFunction=function(e,t,n,r){var i=this;void 0===n&&(n=0),this._ngContentSelectorsOffset=n,this._namespace!==Ki.namespaceHTML&&this.creationInstruction(null,this._namespace),t.forEach(function(e){return i.registerContextVariables(e)});var o=this.i18nContext||Qs(r)&&!Xs(r)&&!(function(e){return 1===e.length&&e[0]instanceof aa}(e)&&e[0].i18n===r),a=ay(e);if(o&&this.i18nStart(null,r,a),xa(this,e),this._pureFunctionSlots+=this._bindingSlots,this._valueConverter.updatePipeSlotOffsets(this._bindingSlots),this._nestedTemplateFns.forEach(function(e){return e()}),0===this.level&&this._ngContentReservedSlots.length){var s=[];if(1<this._ngContentReservedSlots.length||\"*\"!==this._ngContentReservedSlots[0]){var l=this._ngContentReservedSlots.map(function(e){return\"*\"!==e?se(e):e});s.push(this.constantPool.getConstLiteral(hl(l),!0))}this.creationInstruction(null,Ki.projectionDef,s,!0)}o&&this.i18nEnd(null,a);var u=this._creationCodeFns.map(function(e){return e()}),c=this._updateCodeFns.map(function(e){return e()}),p=this._bindingScope.viewSnapshotStatements(),d=this._bindingScope.variableDeclarations().concat(this._tempVariables),h=0<u.length?[Vv(1,p.concat(u))]:[],f=0<c.length?[Vv(2,d.concat(c))]:[];return br([new Rt(ul,Ie),new Rt(ll,null)],q(this._prefixCode,h,f),De,null,this.templateName)},zv.prototype.getLocal=function(e){return this._bindingScope.get(e)},zv.prototype.notifyImplicitReceiverUse=function(){this._bindingScope.notifyImplicitReceiverUse()},zv.prototype.i18nTranslate=function(e,t,n,r){var i;void 0===t&&(t={});var o=n||fr(this.constantPool.uniqueName(\"I18N_\")),a=function(e,t,n,r,i){void 0===r&&(r={});var o=[function(e){return new dn(e.name,void 0,De,null,e.sourceSpan)}(t),wr(fr(sy),Cv(t,e,n,rl(r,!0)),Ov(t,e,rl(r,!1)))];return i&&o.push(new gn(t.set(i(t)))),o}(e,o,this.i18nGenerateClosureVar(e.id),t,r);return(i=this.constantPool.statements).push.apply(i,q(a)),o},zv.prototype.registerContextVariables=function(i){var e=this._bindingScope.freshReferenceName(),o=this.level,a=fr(i.name+e);this._bindingScope.set(o,i.name,a,1,function(e,t){var n;if(e.bindingLevel===o)n=fr(ll);else{var r=e.getSharedContextName(o);n=r||Zv(t)}return[a.set(n.prop(i.value||\"$implicit\")).toConstDecl()]})},zv.prototype.i18nAppendBindings=function(e){var t=this;0<e.length&&e.forEach(function(e){return t.i18n.appendBinding(e)})},zv.prototype.i18nBindProps=function(l){var u=this,c={};return Object.keys(l).forEach(function(e){var t=l[e];if(t instanceof Qo)c[e]=xr(t.value);else{var n=t.value.visit(u._valueConverter);if(u.allocateBindingSlots(n),n instanceof Yu){var r=n.strings,i=n.expressions,o=u.i18n,a=o.id,s=function(e,t,n){if(void 0===t&&(t=0),void 0===n&&(n=0),!e.length)return\"\";for(var r=\"\",i=e.length-1,o=0;o<i;o++)r+=\"\"+e[o]+Js(t+o,n);return r+=e[i]}(r,o.bindings.size,a);u.i18nAppendBindings(i),c[e]=xr(s)}}}),c},zv.prototype.i18nGenerateClosureVar=function(e){var t,n=this.fileBasedI18nSuffix.toUpperCase();if(this.i18nUseExternalIds){var r=ol(\"EXTERNAL_\"),i=this.constantPool.uniqueName(n);t=\"\"+r+vi(e)+\"$$\"+i}else r=ol(n),t=this.constantPool.uniqueName(r);return fr(t)},zv.prototype.i18nUpdateRef=function(e){var t=e.icus,n=e.meta,r=e.isRoot,i=e.isResolved,o=e.isEmitted;if(r&&i&&!o&&!Xs(n)){e.isEmitted=!0;var a=e.getSerializedPlaceholders(),s={},l=a.size?el(a):{};t.size&&t.forEach(function(e,t){if(1===e.length)l[t]=e[0];else{var n=Js(\"I18N_EXP_\"+t);l[t]=xr(n),s[t]=gr(e)}});var u=void 0;(Array.from(a.values()).some(function(e){return 1<e.length})||Object.keys(s).length)&&(u=function(e){var t=[e];return Object.keys(s).length&&t.push(Gp(s,!0)),Kv(null,Ki.i18nPostprocess,t)}),this.i18nTranslate(n,l,e.ref,u)}},zv.prototype.i18nStart=function(e,t,n){void 0===e&&(e=null);var r=this.allocateDataSlot();if(this.i18nContext)this.i18n=this.i18nContext.forkChildContext(r,this.templateIndex,t);else{var i=fr(this.constantPool.uniqueName(\"I18N_\"));this.i18n=new hv(r,i,0,this.templateIndex,t)}var o=this.i18n,a=o.id,s=o.ref,l=[xr(r),s];0<a&&l.push(xr(a)),this.creationInstruction(e,n?Ki.i18n:Ki.i18nStart,l)},zv.prototype.i18nEnd=function(t,e){var n=this;if(void 0===t&&(t=null),!this.i18n)throw new Error(\"i18nEnd is executed with no i18n context present\");this.i18nContext?(this.i18nContext.reconcileChildContext(this.i18n),this.i18nUpdateRef(this.i18nContext)):this.i18nUpdateRef(this.i18n);var r=this.i18n,i=r.index,o=r.bindings;if(o.size){var a=[];o.forEach(function(e){a.push({sourceSpan:t,value:function(){return n.convertPropertyBinding(e)}})}),this.updateInstructionChain(Ki.i18nExp,a),this.updateInstruction(t,Ki.i18nApply,[xr(i)])}e||this.creationInstruction(t,Ki.i18nEnd),this.i18n=null},zv.prototype.getNamespaceInstruction=function(e){switch(e){case\"math\":return Ki.namespaceMathML;case\"svg\":return Ki.namespaceSVG;default:return Ki.namespaceHTML}},zv.prototype.addNamespaceInstruction=function(e,t){this._namespace=e,this.creationInstruction(t.sourceSpan,e)},zv.prototype.interpolatedUpdateInstruction=function(e,t,n,r,i,o){var a=this;this.updateInstructionWithAdvance(t,r.sourceSpan,e,function(){return q([xr(n)],a.getUpdateInstructionArguments(i),o)})},zv.prototype.visitContent=function(e){var r,t=this.allocateDataSlot(),n=this._ngContentSelectorsOffset+this._ngContentReservedSlots.length,i=[xr(t)],o=[];this._ngContentReservedSlots.push(e.selector),e.attributes.forEach(function(e){var t=e.name,n=e.value;t===jv&&(r=e),\"select\"!==t.toLowerCase()&&o.push(xr(t),xr(n))}),r&&o.push.apply(o,q(ty(r))),0<o.length?i.push(xr(n),gr(o)):0!==n&&i.push(xr(n)),this.creationInstruction(e.sourceSpan,Ki.projection,i),this.i18n&&this.i18n.appendProjection(e.i18n,t)},zv.prototype.visitElement=function(i){var t,e,h=this,f=this.allocateDataSlot(),n=new qm(xr(f),null),r=!1,o=Qs(i.i18n)&&!Xs(i.i18n);if(o&&this.i18n)throw new Error(\"Could not mark an element as translatable inside of a translatable section\");var a,s=[],l=[],u=U(H(i.name),2),c=u[0],p=u[1],d=W(i.name);try{for(var m=z(i.attributes),v=m.next();!v.done;v=m.next()){var y=v.value,g=y.name,_=y.value;\"ngNonBindable\"===g?r=!0:\"style\"===g?n.registerStyleAttr(_):\"class\"===g?n.registerClassAttr(_):(y.name===jv&&(a=y),y.i18n?s.push(y):l.push(y))}}catch(e){t={error:e}}finally{try{v&&!v.done&&(e=m.return)&&e.call(m)}finally{if(t)throw t.error}}this.matchDirectives(i.name,i);var b=[xr(f)];d||b.push(xr(p));var w=[],x=[];i.inputs.forEach(function(e){n.registerBoundInput(e)||(0===e.type&&e.i18n?s.push(e):x.push(e))}),l.forEach(function(e){w.push.apply(w,q(Xv(e.name),[xr(e.value)]))}),w.push.apply(w,q(this.prepareNonRenderAttrs(x,i.outputs,n,[],s,a))),b.push(this.addConstants(w)),b.push(this.prepareRefsParameter(i.references));var C=this._namespace,S=this.getNamespaceInstruction(c);S!==C&&this.addNamespaceInstruction(S,i),this.i18n&&this.i18n.appendElement(i.i18n,f);var E=!o&&this.i18n?!ay(i.children):0<i.children.length,O=!n.hasBindingsWithPipes&&0===i.outputs.length&&0===s.length&&!E,k=!O&&ay(i.children);if(O)this.creationInstruction(i.sourceSpan,d?Ki.elementContainer:Ki.element,ml(b));else{if(this.creationInstruction(i.sourceSpan,d?Ki.elementContainerStart:Ki.elementStart,ml(b)),r&&this.creationInstruction(i.sourceSpan,Ki.disableBindings),s.length){var D=!1,T=[],I=[];if(s.forEach(function(e){var t=e.i18n;if(e instanceof ea)T.push(xr(e.name),h.i18nTranslate(t));else{var n=e.value.visit(h._valueConverter);if(h.allocateBindingSlots(n),n instanceof Yu){var r=el(nl(t));T.push(xr(e.name),h.i18nTranslate(t,r)),n.expressions.forEach(function(e){D=!0,I.push({sourceSpan:i.sourceSpan,value:function(){return h.convertPropertyBinding(e)}})})}}}),I.length&&this.updateInstructionChain(Ki.i18nExp,I),T.length){var P=xr(this.allocateDataSlot()),A=this.constantPool.getConstLiteral(gr(T),!0);this.creationInstruction(i.sourceSpan,Ki.i18nAttributes,[P,A]),D&&this.updateInstruction(i.sourceSpan,Ki.i18nApply,[P])}}i.outputs.forEach(function(e){h.creationInstruction(e.sourceSpan,Ki.listener,h.prepareListenerParameter(i.name,e,f))}),o&&this.i18nStart(i.sourceSpan,i.i18n,k)}for(var M=n.buildUpdateLevelInstructions(this._valueConverter),R=M.length-1,N=0;N<=R;N++){var j=M[N];this._bindingSlots+=j.allocateBindingSlots,this.processStylingInstruction(f,j,!1)}var F=xr(void 0),L=[],V=[];if(x.forEach(function(e){var t=e.type;if(4===t){var n=e.value.visit(h._valueConverter),r=!(n instanceof Lu&&!n.value);h.allocateBindingSlots(n),L.push({name:eo(e.name),sourceSpan:e.sourceSpan,value:function(){return r?h.convertPropertyBinding(n):F}})}else{if(e.i18n)return;var i=e.value.visit(h._valueConverter);if(void 0!==i){var o=[],a=U(H(e.name),2),s=a[0],l=a[1],u=1===t,c=iy(e.securityContext,u);if(c&&o.push(c),s){var p=xr(s);c?o.push(p):o.push(xr(null),p)}if(h.allocateBindingSlots(i),0===t)i instanceof Yu?h.interpolatedUpdateInstruction(function(e){switch(Cl(e)){case 1:return Ki.propertyInterpolate;case 3:return Ki.propertyInterpolate1;case 5:return Ki.propertyInterpolate2;case 7:return Ki.propertyInterpolate3;case 9:return Ki.propertyInterpolate4;case 11:return Ki.propertyInterpolate5;case 13:return Ki.propertyInterpolate6;case 15:return Ki.propertyInterpolate7;case 17:return Ki.propertyInterpolate8;default:return Ki.propertyInterpolateV}}(i),f,l,e,i,o):L.push({name:l,sourceSpan:e.sourceSpan,value:function(){return h.convertPropertyBinding(i)},params:o});else if(1===t)if(i instanceof Yu&&1<Cl(i))h.interpolatedUpdateInstruction(function(e){switch(Cl(e)){case 3:return Ki.attributeInterpolate1;case 5:return Ki.attributeInterpolate2;case 7:return Ki.attributeInterpolate3;case 9:return Ki.attributeInterpolate4;case 11:return Ki.attributeInterpolate5;case 13:return Ki.attributeInterpolate6;case 15:return Ki.attributeInterpolate7;case 17:return Ki.attributeInterpolate8;default:return Ki.attributeInterpolateV}}(i),f,l,e,i,o);else{var d=i instanceof Yu?i.expressions[0]:i;V.push({name:l,sourceSpan:e.sourceSpan,value:function(){return h.convertPropertyBinding(d)},params:o})}else h.updateInstructionWithAdvance(f,e.sourceSpan,Ki.classProp,function(){return q([xr(f),xr(l),h.convertPropertyBinding(i)],o)})}}}),0<L.length&&this.updateInstructionChainWithAdvance(f,Ki.property,L),0<V.length&&this.updateInstructionChainWithAdvance(f,Ki.attribute,V),xa(this,i.children),!o&&this.i18n&&this.i18n.appendElement(i.i18n,f,!0),!O){var B=i.endSourceSpan||i.sourceSpan;o&&this.i18nEnd(B,k),r&&this.creationInstruction(B,Ki.enableBindings),this.creationInstruction(B,d?Ki.elementContainerEnd:Ki.elementEnd)}},zv.prototype.visitTemplate=function(n){var r=this,e=\"ng-template\",t=this.allocateDataSlot();this.i18n&&this.i18n.appendTemplate(n.i18n,t);var i=vi(n.tagName||\"\"),o=this.contextName+(i?\"_\"+i:\"\")+\"_\"+t,a=o+\"_Template\",s=[xr(t),fr(a),xr(n.tagName?H(n.tagName)[1]:n.tagName)];this.matchDirectives(e,n);var l=[];n.attributes.forEach(function(e){l.push(hl(e.name),hl(e.value))}),l.push.apply(l,q(this.prepareNonRenderAttrs(n.inputs,n.outputs,void 0,n.templateAttrs))),s.push(this.addConstants(l)),n.references&&n.references.length&&(s.push(this.prepareRefsParameter(n.references)),s.push(mr(Ki.templateRefExtractor)));var u=new zv(this.constantPool,this._bindingScope,this.level+1,o,this.i18n,t,a,this.directiveMatcher,this.directives,this.pipeTypeByName,this.pipes,this._namespace,this.fileBasedI18nSuffix,this.i18nUseExternalIds,this._constants);this._nestedTemplateFns.push(function(){var e,t=u.buildTemplateFunction(n.children,n.variables,r._ngContentReservedSlots.length+r._ngContentSelectorsOffset,n.i18n);r.constantPool.statements.push(t.toDeclStmt(a,null)),u._ngContentReservedSlots.length&&(e=r._ngContentReservedSlots).push.apply(e,q(u._ngContentReservedSlots))}),this.creationInstruction(n.sourceSpan,Ki.templateCreate,function(){return s.splice(2,0,xr(u.getConstCount()),xr(u.getVarCount())),ml(s)}),this.templatePropertyBindings(t,n.templateAttrs),n.tagName===e&&(this.templatePropertyBindings(t,n.inputs),n.outputs.forEach(function(e){r.creationInstruction(e.sourceSpan,Ki.listener,r.prepareListenerParameter(\"ng_template\",e,t))}))},zv.prototype.visitBoundText=function(e){var t=this;if(this.i18n){var n=e.value.visit(this._valueConverter);return this.allocateBindingSlots(n),void(n instanceof Yu&&(this.i18n.appendBoundText(e.i18n),this.i18nAppendBindings(n.expressions)))}var r=this.allocateDataSlot();this.creationInstruction(e.sourceSpan,Ki.text,[xr(r)]);var i=e.value.visit(this._valueConverter);this.allocateBindingSlots(i),i instanceof Yu?this.updateInstructionWithAdvance(r,e.sourceSpan,function(e){switch(Cl(e)){case 1:return Ki.textInterpolate;case 3:return Ki.textInterpolate1;case 5:return Ki.textInterpolate2;case 7:return Ki.textInterpolate3;case 9:return Ki.textInterpolate4;case 11:return Ki.textInterpolate5;case 13:return Ki.textInterpolate6;case 15:return Ki.textInterpolate7;case 17:return Ki.textInterpolate8;default:return Ki.textInterpolateV}}(i),function(){return t.getUpdateInstructionArguments(i)}):Nr(\"Text nodes should be interpolated and never bound directly.\")},zv.prototype.visitText=function(e){this.i18n||this.creationInstruction(e.sourceSpan,Ki.text,[xr(this.allocateDataSlot()),xr(e.value)])},zv.prototype.visitIcu=function(e){var t=!1;function n(e){var t=rl(m(m({},i),o),!1);return Kv(null,Ki.i18nPostprocess,[e,Gp(t,!0)])}this.i18n||(t=!0,this.i18nStart(null,e.i18n,!0));var r=this.i18n,i=this.i18nBindProps(e.vars),o=this.i18nBindProps(e.placeholders),a=e.i18n;if(Xs(r.meta))this.i18nTranslate(a,{},r.ref,n);else{var s=this.i18nTranslate(a,{},void 0,n);r.appendIcu($s(a).name,s)}return t&&this.i18nEnd(null,!0),null},zv.prototype.allocateDataSlot=function(){return this._dataIndex++},zv.prototype.getConstCount=function(){return this._dataIndex},zv.prototype.getVarCount=function(){return this._pureFunctionSlots},zv.prototype.getConsts=function(){return this._constants},zv.prototype.getNgContentSelectors=function(){return this._ngContentReservedSlots.length?this.constantPool.getConstLiteral(hl(this._ngContentReservedSlots),!0):null},zv.prototype.bindingContext=function(){return\"\"+this._bindingContext++},zv.prototype.templatePropertyBindings=function(e,t){var n=this,r=[];t.forEach(function(e){if(e instanceof na){var t=e.value.visit(n._valueConverter);void 0!==t&&(n.allocateBindingSlots(t),r.push({name:e.name,sourceSpan:e.sourceSpan,value:function(){return n.convertPropertyBinding(t)}}))}}),0<r.length&&this.updateInstructionChainWithAdvance(e,Ki.property,r)},zv.prototype.instructionFn=function(e,t,n,r,i){void 0===i&&(i=!1),e[i?\"unshift\":\"push\"](function(){var e=Array.isArray(r)?r:r();return Kv(t,n,e).toStmt()})},zv.prototype.processStylingInstruction=function(e,t,n){var r=this;t&&(n?this.creationInstruction(t.sourceSpan,t.reference,function(){return t.params(function(e){return r.convertPropertyBinding(e)})}):this.updateInstructionWithAdvance(e,t.sourceSpan,t.reference,function(){return t.params(function(e){return t.supportsInterpolation&&e instanceof Yu?r.getUpdateInstructionArguments(e):r.convertPropertyBinding(e)})}))},zv.prototype.creationInstruction=function(e,t,n,r){this.instructionFn(this._creationCodeFns,e,t,n||[],r)},zv.prototype.updateInstructionWithAdvance=function(e,t,n,r){this.addAdvanceInstructionIfNecessary(e,t),this.updateInstruction(t,n,r)},zv.prototype.updateInstruction=function(e,t,n){this.instructionFn(this._updateCodeFns,e,t,n||[])},zv.prototype.updateInstructionChain=function(t,n){var r=n.length?n[0].sourceSpan:null;this._updateCodeFns.push(function(){var e=n.map(function(e){var t=q([e.value()],e.params||[]);return e.name&&t.unshift(xr(e.name)),t});return xl(t,e,r).toStmt()})},zv.prototype.updateInstructionChainWithAdvance=function(e,t,n){this.addAdvanceInstructionIfNecessary(e,n.length?n[0].sourceSpan:null),this.updateInstructionChain(t,n)},zv.prototype.addAdvanceInstructionIfNecessary=function(e,t){if(e!==this._currentIndex){var n=e-this._currentIndex;if(n<1)throw new Error(\"advance instruction can only go forwards\");this.instructionFn(this._updateCodeFns,t,Ki.advance,[xr(n)]),this._currentIndex=e}},zv.prototype.allocatePureFunctionSlots=function(e){var t=this._pureFunctionSlots;return this._pureFunctionSlots+=e,t},zv.prototype.allocateBindingSlots=function(e){this._bindingSlots+=e instanceof Yu?e.expressions.length:1},zv.prototype.getImplicitReceiverExpr=function(){return this._implicitReceiverExpr?this._implicitReceiverExpr:this._implicitReceiverExpr=0===this.level?fr(ll):this._bindingScope.getOrCreateSharedContextVar(0)},zv.prototype.convertPropertyBinding=function(e){var t,n=ud(this,this.getImplicitReceiverExpr(),e,this.bindingContext(),id.TrySimple,function(){return Nr(\"Unexpected interpolation\")}),r=n.currValExpr;return(t=this._tempVariables).push.apply(t,q(n.stmts)),r},zv.prototype.getUpdateInstructionArguments=function(e){var t,n=function(e,t,n,r){var i=new gd(e,t,r,void 0),o=n.visit(i,ad.Expression);i.usesImplicitReceiver&&e.notifyImplicitReceiverUse();var a=cd(i,r),s=o.args.slice(1);if(n instanceof Yu){var l=n.strings;3===s.length&&\"\"===l[0]&&\"\"===l[1]?s=[s[1]]:19<=s.length&&(s=[gr(s)])}return{stmts:a,args:s}}(this,this.getImplicitReceiverExpr(),e,this.bindingContext()),r=n.args,i=n.stmts;return(t=this._tempVariables).push.apply(t,q(i)),r},zv.prototype.matchDirectives=function(e,t){var n=this;if(this.directiveMatcher){var r=function(e,n){var r=new B;return r.setElement(e),Object.getOwnPropertyNames(n).forEach(function(e){var t=n[e];r.addAttribute(e,t),\"class\"===e.toLowerCase()&&t.trim().split(/\\s+/).forEach(function(e){return r.addClassName(e)})}),r}(e,wl(t));this.directiveMatcher.match(r,function(e,t){n.directives.add(t)})}},zv.prototype.prepareNonRenderAttrs=function(e,t,n,r,i,o){void 0===r&&(r=[]),void 0===i&&(i=[]);var a=new Set,s=[];function l(e,t){\"string\"==typeof e?a.has(e)||(s.push.apply(s,q(Xv(e))),void 0!==t&&s.push(t),a.add(e)):s.push(xr(e))}if(n&&n.populateInitialStylingAttrs(s),e.length||t.length){for(var u=s.length,c=0;c<e.length;c++){var p=e[c];4!==p.type&&1!==p.type&&l(p.name)}for(c=0;c<t.length;c++){var d=t[c];1!==d.type&&l(d.name)}s.length!==u&&s.splice(u,0,xr(3))}return r.length&&(s.push(xr(4)),r.forEach(function(e){return l(e.name)})),o&&s.push.apply(s,q(ty(o))),i.length&&(s.push(xr(6)),i.forEach(function(e){return l(e.name)})),s},zv.prototype.addConstants=function(e){if(0<e.length){for(var t=gr(e),n=0;n<this._constants.length;n++)if(this._constants[n].isEquivalent(t))return xr(n);return xr(this._constants.push(t)-1)}return ln},zv.prototype.prepareRefsParameter=function(e){var r=this;if(!e||0===e.length)return ln;var t=Ui(e.map(function(e){var i=r.allocateDataSlot(),t=r._bindingScope.freshReferenceName(),n=r.level,o=fr(t);return r._bindingScope.set(n,e.name,o,0,function(e,t){var n=0<t?[Zv(t).toStmt()]:[],r=o.set(mr(Ki.reference).callFn([xr(i)]));return n.concat(r.toConstDecl())},!0),[e.name,e.value]}));return this.constantPool.getConstLiteral(hl(t),!0)},zv.prototype.prepareListenerParameter=function(i,o,a){var s=this;return function(){var e=o.name,t=1===o.type?to(e,o.phase):vi(e),n=s.templateName+\"_\"+i+\"_\"+t+\"_\"+a+\"_listener\",r=s._bindingScope.nestedScope(s._bindingScope.bindingLevel);return Bv(o,n,r)}},zv);function zv(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f){var m=this;void 0===n&&(n=0),void 0===f&&(f=[]),this.constantPool=e,this.level=n,this.contextName=r,this.i18nContext=i,this.templateIndex=o,this.templateName=a,this.directiveMatcher=s,this.directives=l,this.pipeTypeByName=u,this.pipes=c,this._namespace=p,this.i18nUseExternalIds=h,this._constants=f,this._dataIndex=0,this._bindingContext=0,this._prefixCode=[],this._creationCodeFns=[],this._updateCodeFns=[],this._currentIndex=0,this._tempVariables=[],this._nestedTemplateFns=[],this._unsupported=pl,this.i18n=null,this._pureFunctionSlots=0,this._bindingSlots=0,this._ngContentReservedSlots=[],this._ngContentSelectorsOffset=0,this._implicitReceiverExpr=null,this.visitReference=dl,this.visitVariable=dl,this.visitTextAttribute=dl,this.visitBoundAttribute=dl,this.visitBoundEvent=dl,this._bindingScope=t.nestedScope(n),this.fileBasedI18nSuffix=d.replace(/[^A-Za-z0-9]/g,\"_\")+\"_\",this._valueConverter=new Hv(e,function(){return m.allocateDataSlot()},function(e){return m.allocatePureFunctionSlots(e)},function(e,t,n,r){var i=u.get(e);i&&m.pipes.add(i),m._bindingScope.set(m.level,t,r),m.creationInstruction(null,Ki.pipe,[xr(n),xr(e)])})}var qv,Hv=(f(Wv,qv=Sc),Wv.prototype.visitPipe=function(e,t){var n=this.allocateSlot(),r=\"PIPE:\"+n,i=this.allocatePureFunctionSlots(2+e.args.length),o=new bu(e.span,e.sourceSpan,new pu(e.span,e.sourceSpan),r),a=function(e){var t=Gv[e.length];return{identifier:t||Ki.pipeBindV,isVarLength:!t}}(e.args),s=a.identifier,l=a.isVarLength;this.definePipe(e.name,r,n,mr(s));var u=q([e.exp],e.args),c=l?this.visitAll([new Uu(e.span,e.sourceSpan,u)]):this.visitAll(u),p=new pc(e.span,e.sourceSpan,o,q([new Lu(e.span,e.sourceSpan,n),new Lu(e.span,e.sourceSpan,i)],c));return this._pipeBindExprs.push(p),p},Wv.prototype.updatePipeSlotOffsets=function(t){this._pipeBindExprs.forEach(function(e){e.args[1].value+=t})},Wv.prototype.visitLiteralArray=function(e,t){var n=this;return new Cd(e.span,e.sourceSpan,this.visitAll(e.expressions),function(e){var t=gr(e);return e.every(function(e){return e.isConstant()})?n.constantPool.getConstLiteral(t,!0):Qv(n.constantPool,t,n.allocatePureFunctionSlots)})},Wv.prototype.visitLiteralMap=function(n,e){var r=this;return new Cd(n.span,n.sourceSpan,this.visitAll(n.values),function(e){var t=_r(e.map(function(e,t){return{key:n.keys[t].key,value:e,quoted:n.keys[t].quoted}}));return e.every(function(e){return e.isConstant()})?r.constantPool.getConstLiteral(t,!0):Qv(r.constantPool,t,r.allocatePureFunctionSlots)})},Wv);function Wv(e,t,n,r){var i=qv.call(this)||this;return i.constantPool=e,i.allocateSlot=t,i.allocatePureFunctionSlots=n,i.definePipe=r,i._pipeBindExprs=[],i}var Gv=[Ki.pipeBind1,Ki.pipeBind2,Ki.pipeBind3,Ki.pipeBind4];var Yv=[Ki.pureFunction0,Ki.pureFunction1,Ki.pureFunction2,Ki.pureFunction3,Ki.pureFunction4,Ki.pureFunction5,Ki.pureFunction6,Ki.pureFunction7,Ki.pureFunction8];function Kv(e,t,n){return mr(t,null,e).callFn(n,e)}function Zv(e){return mr(Ki.nextContext).callFn(1<e?[xr(e)]:[])}function Qv(e,t,n){var r=e.getLiteralFactory(t),i=r.literalFactory,o=r.literalFactoryArguments,a=n(1+o.length);0<o.length||Nr(\"Expected arguments to a literal factory function\");var s=function(e){var t=Yv[e.length];return{identifier:t||Ki.pureFunctionV,isVarLength:!t}}(o),l=s.identifier,u=s.isVarLength,c=[xr(a),i];return u?c.push(gr(o)):c.push.apply(c,q(o)),mr(l).callFn(c)}function Xv(e){var t=U(H(e),2),n=t[0],r=xr(t[1]);return n?[xr(0),xr(n),r]:[r]}var $v=\"$$shared_ctx$$\",Jv=(Object.defineProperty(ey,\"ROOT_SCOPE\",{get:function(){return ey._ROOT_SCOPE||(ey._ROOT_SCOPE=(new ey).set(0,\"$event\",fr(\"$event\"))),ey._ROOT_SCOPE},enumerable:!0,configurable:!0}),ey.prototype.get=function(e){for(var t=this;t;){var n=t.map.get(e);if(null!=n)return t!==this&&(n={retrievalLevel:n.retrievalLevel,lhs:n.lhs,declareLocalCallback:n.declareLocalCallback,declare:!1,priority:n.priority,localRef:n.localRef},this.map.set(e,n),this.maybeGenerateSharedContextVar(n),this.maybeRestoreView(n.retrievalLevel,n.localRef)),n.declareLocalCallback&&!n.declare&&(n.declare=!0),n.lhs;t=t.parent}return 0===this.bindingLevel?null:this.getComponentProperty(e)},ey.prototype.set=function(e,t,n,r,i,o){if(void 0===r&&(r=0),this.map.has(t)){if(o)return this;Nr(\"The name \"+t+\" is already defined in scope to be \"+this.map.get(t))}return this.map.set(t,{retrievalLevel:e,lhs:n,declare:!1,declareLocalCallback:i,priority:r,localRef:o||!1}),this},ey.prototype.getLocal=function(e){return this.get(e)},ey.prototype.notifyImplicitReceiverUse=function(){0!==this.bindingLevel&&(this.map.get($v+0).declare=!0)},ey.prototype.nestedScope=function(e){var t=new ey(e,this);return 0<e&&t.generateSharedContextVar(0),t},ey.prototype.getOrCreateSharedContextVar=function(e){var t=$v+e;return this.map.has(t)||this.generateSharedContextVar(e),this.map.get(t).lhs},ey.prototype.getSharedContextName=function(e){var t=this.map.get($v+e);return t&&t.declare?t.lhs:null},ey.prototype.maybeGenerateSharedContextVar=function(e){if(1===e.priority&&e.retrievalLevel<this.bindingLevel){var t=this.map.get($v+e.retrievalLevel);t?t.declare=!0:this.generateSharedContextVar(e.retrievalLevel)}},ey.prototype.generateSharedContextVar=function(e){var n=fr(ll+this.freshReferenceName());this.map.set($v+e,{retrievalLevel:e,lhs:n,declareLocalCallback:function(e,t){return[n.set(Zv(t)).toConstDecl()]},declare:!1,priority:2,localRef:!1})},ey.prototype.getComponentProperty=function(e){var t=this.map.get($v+0);return t.declare=!0,this.maybeRestoreView(0,!1),t.lhs.prop(e)},ey.prototype.maybeRestoreView=function(e,t){this.isListenerScope()&&(e<this.bindingLevel||t)&&(this.parent.restoreViewVariable||(this.parent.restoreViewVariable=fr(this.parent.freshReferenceName())),this.restoreViewVariable=this.parent.restoreViewVariable)},ey.prototype.restoreViewStatement=function(){return this.restoreViewVariable?[Kv(null,Ki.restoreView,[this.restoreViewVariable]).toStmt()]:[]},ey.prototype.viewSnapshotStatements=function(){var e=Kv(null,Ki.getCurrentView,[]);return this.restoreViewVariable?[this.restoreViewVariable.set(e).toConstDecl()]:[]},ey.prototype.isListenerScope=function(){return this.parent&&this.parent.bindingLevel===this.bindingLevel},ey.prototype.variableDeclarations=function(){var i=this,o=0;return Array.from(this.map.values()).filter(function(e){return e.declare}).sort(function(e,t){return t.retrievalLevel-e.retrievalLevel||t.priority-e.priority}).reduce(function(e,t){var n=i.bindingLevel-t.retrievalLevel,r=t.declareLocalCallback(i,n-o);return o=n,e.concat(r)},[])},ey.prototype.freshReferenceName=function(){for(var e=this;e.parent;)e=e.parent;return\"_r\"+e.referenceNameIndex++},ey);function ey(e,t){void 0===e&&(e=0),void 0===t&&(t=null),this.bindingLevel=e,this.parent=t,this.map=new Map,this.referenceNameIndex=0,this.restoreViewVariable=null}function ty(e){var t=se(e.value)[0];return[xr(5),hl(t)]}function ny(e,t,n){void 0===n&&(n={});var r=n.interpolationConfig,i=n.preserveWhitespaces,o=n.i18nLegacyMessageIdFormat,a=ry(r),s=(new Uh).parse(e,t,m(m({leadingTriviaChars:Lv},n),{tokenizeExpansionForms:!0}));if(s.errors&&0<s.errors.length)return{errors:s.errors,nodes:[],styleUrls:[],styles:[]};var l=s.rootNodes;l=ep(new dp(r,!i,o),l),i||(l=ep(new Zh,l),l=ep(new dp(r,!1),l));var u=rv(l,a),c=u.nodes,p=u.errors,d=u.styleUrls,h=u.styles;return p&&0<p.length?{errors:p,nodes:[],styleUrls:[],styles:[]}:{nodes:c,styleUrls:d,styles:h}}function ry(e){return void 0===e&&(e=Fl),new om(new Rc(new Vl),e,new ev,null,[])}function iy(e,t){switch(e){case M.HTML:return mr(Ki.sanitizeHtml);case M.SCRIPT:return mr(Ki.sanitizeScript);case M.STYLE:return t?mr(Ki.sanitizeStyle):null;case M.URL:return mr(Ki.sanitizeUrl);case M.RESOURCE_URL:return mr(Ki.sanitizeResourceUrl);default:return null}}function oy(e){return e instanceof Qo||e instanceof $o||e instanceof va}function ay(e){return e.every(oy)}var sy=\"ngI18nClosureMode\";var ly=[],uy=/attr\\.([^\\]]+)/;function cy(e,t,n){var r=new _l;return r.set(\"type\",e.type),r.set(\"selectors\",function(e){return hl(se(e))}(e.selector)),0<e.queries.length&&r.set(\"contentQueries\",gy(e.queries,t,e.name)),e.viewQueries.length&&r.set(\"viewQuery\",xy(e.viewQueries,t,e.name)),r.set(\"hostBindings\",Cy(e.host,e.typeSourceSpan,n,t,e.selector||\"\",e.name)),r.set(\"inputs\",fl(e.inputs,!0)),r.set(\"outputs\",fl(e.outputs)),null!==e.exportAs&&r.set(\"exportAs\",gr(e.exportAs.map(function(e){return xr(e)}))),r}function py(e,t){var n=[],r=t.providers,i=t.viewProviders;if(r||i){var o=[r||new Zt([])];i&&o.push(i),n.push(mr(Ki.ProvidersFeature).callFn(o))}t.usesInheritance&&n.push(mr(Ki.InheritDefinitionFeature)),t.lifecycle.usesOnChanges&&n.push(mr(Ki.NgOnChangesFeature).callFn(ly)),n.length&&e.set(\"features\",gr(n))}function dy(e,t,n){var r=cy(e,t,n);return py(r,e),{expression:mr(Ki.defineDirective).callFn([r.toLiteralMap()]),type:wy(e,Ki.DirectiveDefWithMeta)}}function hy(e,t,n){var r=new _l;if(e.inputs){var i=e.inputs,o=Object.keys(i).map(function(e){var t=i[e];return{key:e,value:Array.isArray(t)?gr(t.map(function(e){return xr(e)})):xr(t),quoted:!1}});r.set(\"inputs\",_r(o))}if(e.outputs){var a=e.outputs,s=Object.keys(a).map(function(e){return{key:e,value:xr(a[e]),quoted:!1}});r.set(\"outputs\",_r(s))}return e.viewQueries&&0<e.viewQueries.length&&r.set(\"viewQuery\",xy(e.viewQueries,t)),e.queries&&0<e.queries.length&&r.set(\"contentQueries\",gy(e.queries,t)),e.host&&r.set(\"hostBindings\",Cy(e.host,e.typeSourceSpan,n,t,e.name)),{expression:mr(Ki.defineBase).callFn([r.toLiteralMap()]),type:new ge(mr(Ki.BaseDef),null,[yr(e.type)])}}function fy(e,t,n){var r,i,o=cy(e,t,n);py(o,e);var a=e.selector&&B.parse(e.selector),s=a&&a[0];if(s){var l=s.getAttrs();l.length&&o.set(\"attrs\",t.getConstLiteral(gr(l.map(function(e){return xr(null!=e?e:void 0)})),!0))}var u=null;if(0<e.directives.length){var c=new T;try{for(var p=z(e.directives),d=p.next();!d.done;d=p.next()){var h=d.value,f=h.selector,m=h.expression;c.addSelectables(B.parse(f),m)}}catch(e){r={error:e}}finally{try{d&&!d.done&&(i=p.return)&&i.call(p)}finally{if(r)throw r.error}}u=c}var v=e.name,y=v?v+\"_Template\":null,g=new Set,_=new Set,b=e.changeDetection,w=e.template,x=new Uv(t,Jv.ROOT_SCOPE,0,v,null,null,y,u,g,e.pipes,_,Ki.namespaceHTML,e.relativeContextFilePath,e.i18nUseExternalIds),C=x.buildTemplateFunction(w.nodes,[]),S=x.getNgContentSelectors();S&&o.set(\"ngContentSelectors\",S),o.set(\"decls\",xr(x.getConstCount())),o.set(\"vars\",xr(x.getVarCount()));var E=x.getConsts();if(0<E.length&&o.set(\"consts\",gr(E)),o.set(\"template\",C),g.size){var O=gr(Array.from(g));e.wrapDirectivesAndPipesInClosure&&(O=br([],[new wn(O)])),o.set(\"directives\",O)}if(_.size){var k=gr(Array.from(_));e.wrapDirectivesAndPipesInClosure&&(k=br([],[new wn(k)])),o.set(\"pipes\",k)}if(null===e.encapsulation&&(e.encapsulation=I.Emulated),e.styles&&e.styles.length){var D=(e.encapsulation==I.Emulated?function(e,t,n){var r=new Ed;return e.map(function(e){return r.shimCssText(e,t,n)})}(e.styles,rh,nh):e.styles).map(function(e){return xr(e)});o.set(\"styles\",gr(D))}else e.encapsulation===I.Emulated&&(e.encapsulation=I.None);e.encapsulation!==I.Emulated&&o.set(\"encapsulation\",xr(e.encapsulation)),null!==e.animations&&o.set(\"data\",_r([{key:\"animation\",value:e.animations,quoted:!1}])),null!=b&&b!==P.Default&&o.set(\"changeDetection\",xr(b));(e.selector||\"\").replace(/\\n/g,\"\");return{expression:mr(Ki.defineComponent).callFn([o.toLiteralMap()]),type:wy(e,Ki.ComponentDefWithMeta)}}function my(e,t,n,r,i,o,a){var s=_i(t.type);s||Nr(\"Cannot resolver the name of \"+t.type);var l=e.constantPool.propertyNameOf(2),u=t.toSummary(),c=m(m({},vy(t,e,r)),{selector:t.selector,template:{nodes:n.nodes},directives:[],pipes:function(e,i){var t=Array.from(e).map(function(e){var t=U(e,2),n=t[0],r=t[1];return[n,i.importExpr(r)]});return new Map(t)}(a,e),viewQueries:function(e,n){return e.map(function(e){var t=null;return e.read&&e.read.identifier&&(t=n.importExpr(e.read.identifier.reference)),{propertyName:e.propertyName,first:e.first,predicate:function(e,t){if(1<e.length||1==e.length&&e[0].value){var n=e.map(function(e){return e.value});return n.some(function(e){return!e})&&Nr(\"Found a type among the string selectors expected\"),t.constantPool.getConstLiteral(gr(n.map(function(e){return xr(e)})))}if(1==e.length){var r=e[0];if(r.identifier)return t.importExpr(r.identifier.reference)}return Nr(\"Unexpected query form\"),sn}(e.selectors,n),descendants:e.descendants,read:t,static:!!e.static}})}(t.viewQueries,e),wrapDirectivesAndPipesInClosure:!1,styles:u.template&&u.template.styles||ly,encapsulation:u.template&&u.template.encapsulation||I.Emulated,interpolation:Fl,animations:null,viewProviders:0<t.viewProviders.length?new We(t.viewProviders):null,relativeContextFilePath:\"\",i18nUseExternalIds:!0}),p=fy(c,e.constantPool,i),d=El(m(m({},c),{injectFn:Ki.directiveInject})),h=new Nn(s,null,[new On(\"ɵfac\",De,[E.StmtModifier.Static],d.factory)],[],new Tn(null,[],[]),[]),f=new Nn(s,null,[new On(l,De,[E.StmtModifier.Static],p.expression)],[],new Tn(null,[],[]),[]);e.statements.push(h,f)}function vy(){throw new Error(\"unsupported\")}function yy(e,t){var n=[function(e,t){if(Array.isArray(e.predicate)){var n=[];return e.predicate.forEach(function(e){var t=e.split(\",\").map(function(e){return xr(e.trim())});n.push.apply(n,q(t))}),t.getConstLiteral(gr(n),!0)}return e.predicate}(e,t),xr(e.descendants)];return e.read&&n.push(e.read),n}function gy(e,t,n){var r,i,o=[],a=[],s=cl(a,sl);try{for(var l=z(e),u=l.next();!u.done;u=l.next()){var c=u.value,p=c.static?Ki.staticContentQuery:Ki.contentQuery;o.push(mr(p).callFn(q([fr(\"dirIndex\")],yy(c,t))).toStmt());var d=s(),h=mr(Ki.loadQuery).callFn([]),f=mr(Ki.queryRefresh).callFn([d.set(h)]),m=fr(ll).prop(c.propertyName).set(c.first?d.prop(\"first\"):d);a.push(f.and(m).toStmt())}}catch(e){r={error:e}}finally{try{u&&!u.done&&(i=l.return)&&i.call(l)}finally{if(r)throw r.error}}var v=n?n+\"_ContentQueries\":null;return br([new Rt(ul,Ie),new Rt(ll,null),new Rt(\"dirIndex\",null)],[Vv(1,o),Vv(2,a)],De,null,v)}function _y(t){return yr(_r(Object.keys(t).map(function(e){return{key:e,value:xr(Array.isArray(t[e])?t[e][0]:t[e]),quoted:!0}})))}function by(e){return 0<e.length?yr(gr(e.map(function(e){return xr(e)}))):Ae}function wy(e,t){var n=(e.selector||\"\").replace(/\\n/g,\"\");return yr(mr(t,[$i(e.type,e.typeArgumentCount),function(e){return yr(xr(e))}(n),null!==e.exportAs?by(e.exportAs):Ae,_y(e.inputs),_y(e.outputs),by(e.queries.map(function(e){return e.propertyName}))]))}function xy(e,a,t){var s=[],l=[],u=cl(l,sl);e.forEach(function(e){var t=mr(e.static?Ki.staticViewQuery:Ki.viewQuery).callFn(yy(e,a));s.push(t.toStmt());var n=u(),r=mr(Ki.loadQuery).callFn([]),i=mr(Ki.queryRefresh).callFn([n.set(r)]),o=fr(ll).prop(e.propertyName).set(e.first?n.prop(\"first\"):n);l.push(i.and(o).toStmt())});var n=t?t+\"_Query\":null;return br([new Rt(ul,Ie),new Rt(ll,null)],[Vv(1,s),Vv(2,l)],De,null,n)}function Cy(e,t,p,n,d,r){var i=Object.keys(e.properties).length,o=fr(\"elIndex\"),h=fr(ll),f=new qm(o,h),a=e.specialAttributes,s=a.styleAttr,l=a.classAttr;void 0!==s&&f.registerStyleAttr(s),void 0!==l&&f.registerClassAttr(l);function m(){if(!u){u=new Hv(n,function(){return Nr(\"Unexpected node\")},function(e){var t=y;return y+=e,t},function(){return Nr(\"Unexpected pipe\")})}return u}var u,c=[],v=[],y=i,g=t,_=Oy(e),b=p.createDirectiveHostEventAsts(_,g);if(b&&b.length){var w=function(e,o){return e.map(function(e){var t=e.name&&vi(e.name),n=1===e.type?to(t,e.targetOrPhase):t,r=o&&t?o+\"_\"+n+\"_HostBindingHandler\":null,i=Bv(ia.fromParsedEvent(e),r);return mr(1==e.type?Ki.componentHostSyntheticListener:Ki.listener).callFn(i).toStmt()})}(b,r);c.push.apply(c,q(w))}var x=p.createBoundHostProperties(_,g),C=[],S=[],E=[];x&&x.forEach(function(e){var t=e.name;if(!f.registerInputBasedOnName(t,e.expression,e.sourceSpan)){var n=e.expression.visit(m()),r=Sy(h,n),i=function(e){var t,n=e.name,r=n.match(uy);t=r?(n=r[1],Ki.attribute):e.isAnimation?(n=eo(n),Ki.updateSyntheticHostBinding):Ki.hostProperty;return{bindingName:n,instruction:t,isAttribute:!!r}}(e),o=i.bindingName,a=i.instruction,s=i.isAttribute,l=p.calcPossibleSecurityContexts(d,o,s).filter(function(e){return e!==M.NONE}),u=null;l.length&&(u=2===l.length&&-1<l.indexOf(M.URL)&&-1<l.indexOf(M.RESOURCE_URL)?mr(Ki.sanitizeUrlOrResourceUrl):iy(l[0],s));var c=[xr(o),r.currValExpr];u&&c.push(u),v.push.apply(v,q(r.stmts)),a===Ki.hostProperty?C.push(c):a===Ki.attribute?S.push(c):a===Ki.updateSyntheticHostBinding?E.push(c):v.push(mr(a).callFn(c).toStmt())}}),0<C.length&&v.push(xl(Ki.hostProperty,C).toStmt()),0<S.length&&v.push(xl(Ki.attribute,S).toStmt()),0<E.length&&v.push(xl(Ki.updateSyntheticHostBinding,E).toStmt());var O=function(e){var t,n,r=[];try{for(var i=z(Object.getOwnPropertyNames(e)),o=i.next();!o.done;o=i.next()){var a=o.value,s=e[a];r.push(xr(a),s)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r}(e.attributes),k=f.buildHostAttrsInstruction(null,O,n);if(k&&c.push(Ey(k,h,Sy)),f.hasBindings&&f.buildUpdateLevelInstructions(m()).forEach(function(e){y+=Math.max(e.allocateBindingSlots-1,0),v.push(Ey(e,h,Sy))}),y&&c.unshift(mr(Ki.allocHostVars).callFn([xr(y)]).toStmt()),0<c.length||0<v.length){var D=r?r+\"_HostBindings\":null,T=[];return 0<c.length&&T.push(Vv(1,c)),0<v.length&&T.push(Vv(2,v)),br([new Rt(ul,Ie),new Rt(ll,null),new Rt(o.name,Ie)],T,De,null,D)}return null}function Sy(e,t){return ud(null,e,t,\"b\",id.TrySimple,function(){return Nr(\"Unexpected interpolation\")})}function Ey(e,t,n){var r=e.params(function(e){return n(t,e).currValExpr});return mr(e.reference,null,e.sourceSpan).callFn(r,e.sourceSpan).toStmt()}function Oy(e){return{hostAttributes:{},hostListeners:e.listeners,hostProperties:e.properties}}var ky=/^(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\))$/;function Dy(e){var t,n,r={},i={},o={},a={};try{for(var s=z(Object.keys(e)),l=s.next();!l.done;l=s.next()){var u=l.value,c=e[u],p=u.match(ky);if(null===p)switch(u){case\"class\":if(\"string\"!=typeof c)throw new Error(\"Class binding must be string\");a.classAttr=c;break;case\"style\":if(\"string\"!=typeof c)throw new Error(\"Style binding must be string\");a.styleAttr=c;break;default:r[u]=\"string\"==typeof c?xr(c):c}else if(null!=p[1]){if(\"string\"!=typeof c)throw new Error(\"Property binding must be string\");o[p[1]]=c}else if(null!=p[2]){if(\"string\"!=typeof c)throw new Error(\"Event binding must be string\");i[p[2]]=c}}}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}return{attributes:r,listeners:i,properties:o,specialAttributes:a}}function Ty(e,t){var n=Oy(e),r=ry();return r.createDirectiveHostEventAsts(n,t),r.createBoundHostProperties(n,t),r.errors}var Iy=(Py.prototype.get=function(e){return\"\"},Py);function Py(){}var Ay=(My.prototype.compilePipe=function(e,t,n){var r=Xp({name:n.name,type:new We(n.type),typeArgumentCount:n.typeArgumentCount,deps:qy(n.deps),pipeName:n.pipeName,pure:n.pure});return this.jitExpression(r.expression,e,t,[])},My.prototype.compileInjectable=function(e,t,n){var r=Tl({name:n.name,type:new We(n.type),typeArgumentCount:n.typeArgumentCount,providedIn:function(e){return null==e||\"string\"==typeof e?new ht(e):new We(e)}(n.providedIn),useClass:Uy(n,Ry),useFactory:Uy(n,Ny),useValue:Uy(n,jy),useExisting:Uy(n,Fy),userDeps:qy(n.userDeps)||void 0}),i=r.expression,o=r.statements;return this.jitExpression(i,e,t,o)},My.prototype.compileInjector=function(e,t,n){var r=Kp({name:n.name,type:new We(n.type),deps:qy(n.deps),providers:new We(n.providers),imports:n.imports.map(function(e){return new We(e)})});return this.jitExpression(r.expression,e,t,r.statements)},My.prototype.compileNgModule=function(e,t,n){var r=Yp({type:new We(n.type),bootstrap:n.bootstrap.map(Ly),declarations:n.declarations.map(Ly),imports:n.imports.map(Ly),exports:n.exports.map(Ly),emitInline:!0,containsForwardDecls:!1,schemas:n.schemas?n.schemas.map(Ly):null,id:n.id?new We(n.id):null});return this.jitExpression(r.expression,e,t,[])},My.prototype.compileDirective=function(e,t,n){var r=new ei,i=ry(),o=dy(By(n),r,i);return this.jitExpression(o.expression,e,t,r.statements)},My.prototype.compileComponent=function(e,t,n){var r=new ei,i=n.interpolation?Rl.fromArray(n.interpolation):Fl,o=ny(n.template,t,{preserveWhitespaces:n.preserveWhitespaces,interpolationConfig:i});if(void 0!==o.errors){var a=o.errors.map(function(e){return e.toString()}).join(\", \");throw new Error(\"Errors during JIT compilation of template for \"+n.name+\": \"+a)}var s=fy(m(m(m({},n),By(n)),{selector:n.selector||this.elementSchemaRegistry.getDefaultComponentElementName(),template:o,wrapDirectivesAndPipesInClosure:!1,styles:n.styles||[],encapsulation:n.encapsulation,interpolation:i,changeDetection:n.changeDetection,animations:null!=n.animations?new We(n.animations):null,viewProviders:null!=n.viewProviders?new We(n.viewProviders):null,relativeContextFilePath:\"\",i18nUseExternalIds:!0}),r,ry(i)),l=\"ng:///\"+n.name+\".js\";return this.jitExpression(s.expression,e,l,r.statements)},My.prototype.compileFactory=function(e,t,n){var r=El({name:n.name,type:new We(n.type),typeArgumentCount:n.typeArgumentCount,deps:qy(n.deps),injectFn:\"directiveInject\"===n.injectFn?si.directiveInject:si.inject,isPipe:n.isPipe});return this.jitExpression(r.factory,e,t,r.statements)},My.prototype.compileBase=function(e,t,n){var r=new ei,i=this.createParseSourceSpan(\"Base\",n.name,\"ng:///\"+n.name+\".js\"),o=hy(m(m({},n),{typeSourceSpan:i,viewQueries:n.viewQueries?n.viewQueries.map(Vy):n.viewQueries,queries:n.queries?n.queries.map(Vy):n.queries,host:Hy(n.propMetadata,i)}),r,ry());return this.jitExpression(o.expression,e,t,r.statements)},My.prototype.createParseSourceSpan=function(e,t,n){return Zo(e,t,n)},My.prototype.jitExpression=function(e,t,n,r){var i=q(r,[new dn(\"$def\",e,void 0,[E.StmtModifier.Exported])]);return this.jitEvaluator.evaluateStatements(n,i,new Hp(t),!0).$def},My);function My(e){void 0===e&&(e=new Vp),this.jitEvaluator=e,this.R3ResolvedDependencyType=E.R3ResolvedDependencyType,this.ResourceLoader=Iy,this.elementSchemaRegistry=new ev}var Ry=Object.keys({useClass:null})[0],Ny=Object.keys({useFactory:null})[0],jy=Object.keys({useValue:null})[0],Fy=Object.keys({useExisting:null})[0],Ly=function(e){var t=new We(e);return{value:t,type:t}};function Vy(e){return m(m({},e),{predicate:Array.isArray(e.predicate)?e.predicate:new We(e.predicate),read:e.read?new We(e.read):null,static:e.static})}function By(e){function t(t){i.hasOwnProperty(t)&&i[t].forEach(function(e){!function(e){return\"Input\"===e.ngMetadataName}(e)?function(e){return\"Output\"===e.ngMetadataName}(e)&&(a[t]=e.bindingPropertyName||t):o[t]=e.bindingPropertyName?[e.bindingPropertyName,t]:t})}var n=Wy(e.inputs||[]),r=Wy(e.outputs||[]),i=e.propMetadata,o={},a={};for(var s in i)t(s);return m(m({},e),{typeSourceSpan:e.typeSourceSpan,type:new We(e.type),deps:qy(e.deps),host:Hy(e.propMetadata,e.typeSourceSpan,e.host),inputs:m(m({},n),o),outputs:m(m({},r),a),queries:e.queries.map(Vy),providers:null!=e.providers?new We(e.providers):null,viewQueries:e.viewQueries.map(Vy)})}function Uy(e,t){return e.hasOwnProperty(t)?new We(e[t]):void 0}function zy(e){return{token:null===e.token?new ht(null):e.resolved===E.R3ResolvedDependencyType.Attribute?new ht(e.token):new We(e.token),resolved:e.resolved,host:e.host,optional:e.optional,self:e.self,skipSelf:e.skipSelf}}function qy(e){return null==e?null:e.map(zy)}function Hy(e,t,n){var r=Dy(n||{}),i=Ty(r,t);if(i.length)throw new Error(i.map(function(e){return e.msg}).join(\"\\n\"));function o(t){e.hasOwnProperty(t)&&e[t].forEach(function(e){!function(e){return\"HostBinding\"===e.ngMetadataName}(e)?function(e){return\"HostListener\"===e.ngMetadataName}(e)&&(r.listeners[e.eventName||t]=t+\"(\"+(e.args||[]).join(\",\")+\")\"):r.properties[e.hostPropertyName||t]=t})}for(var a in e)o(a);return r}function Wy(e){return e.reduce(function(e,t){var n=U(t.split(\",\").map(function(e){return e.trim()}),2),r=n[0],i=n[1];return e[r]=i||r,e},{})}function Gy(e){(e.ng||(e.ng={})).ɵcompilerFacade=new Ay}var Yy=new Wr(\"9.0.0-next.12\"),Ky=function(e){var t=void 0===e?{}:e,n=t.defaultEncapsulation,r=void 0===n?I.Emulated:n,i=t.useJit,o=void 0===i||i,a=t.jitDevMode,s=void 0!==a&&a,l=t.missingTranslation,u=void 0===l?null:l,c=t.preserveWhitespaces,p=t.strictInjectionParameters;this.defaultEncapsulation=r,this.useJit=!!o,this.jitDevMode=!!s,this.missingTranslation=u,this.preserveWhitespaces=Zy(Tr(c)),this.strictInjectionParameters=!0===p};function Zy(e,t){return void 0===t&&(t=!1),null===e?t:e}var Qy=(Xy.prototype.clearCache=function(){this._resourceLoaderCache.clear()},Xy.prototype.clearCacheFor=function(e){var t=this;if(e.isComponent){var n=e.template;this._resourceLoaderCache.delete(n.templateUrl),n.externalStylesheets.forEach(function(e){t._resourceLoaderCache.delete(e.moduleUrl)})}},Xy.prototype._fetch=function(e){var t=this._resourceLoaderCache.get(e);return t||(t=this._resourceLoader.get(e),this._resourceLoaderCache.set(e,t)),t},Xy.prototype.normalizeTemplate=function(t){var n=this;if(Dr(t.template)){if(Dr(t.templateUrl))throw jr(\"'\"+zr(t.componentType)+\"' component cannot define both template and templateUrl\");if(\"string\"!=typeof t.template)throw jr(\"The template specified for component \"+zr(t.componentType)+\" is not a string\")}else{if(!Dr(t.templateUrl))throw jr(\"No template specified for component \"+zr(t.componentType));if(\"string\"!=typeof t.templateUrl)throw jr(\"The templateUrl specified for component \"+zr(t.componentType)+\" is not a string\")}if(Dr(t.preserveWhitespaces)&&\"boolean\"!=typeof t.preserveWhitespaces)throw jr(\"The preserveWhitespaces option for component \"+zr(t.componentType)+\" must be a boolean\");return Mr(this._preParseTemplate(t),function(e){return n._normalizeTemplateMetadata(t,e)})},Xy.prototype._preParseTemplate=function(t){var e,n,r=this;return null!=t.template?(e=t.template,n=t.moduleUrl):(n=this._urlResolver.resolve(t.moduleUrl,t.templateUrl),e=this._fetch(n)),Mr(e,function(e){return r._preparseLoadedTemplate(t,e,n)})},Xy.prototype._preparseLoadedTemplate=function(e,t,n){var r=!!e.template,i=Rl.fromArray(e.interpolation),o=qi({reference:e.ngModuleType},{type:{reference:e.componentType}},{isInline:r,templateUrl:n}),a=this._htmlParser.parse(t,o,{tokenizeExpansionForms:!0,interpolationConfig:i});if(0<a.errors.length)throw jr(\"Template parse errors:\\n\"+a.errors.join(\"\\n\"));var s=this._normalizeStylesheet(new ki({styles:e.styles,moduleUrl:e.moduleUrl})),l=new $y;ep(l,a.rootNodes);var u=this._normalizeStylesheet(new ki({styles:l.styles,styleUrls:l.styleUrls,moduleUrl:n}));return{template:t,templateUrl:n,isInline:r,htmlAst:a,styles:s.styles.concat(u.styles),inlineStyleUrls:s.styleUrls.concat(u.styleUrls),styleUrls:this._normalizeStylesheet(new ki({styleUrls:e.styleUrls,moduleUrl:e.moduleUrl})).styleUrls,ngContentSelectors:l.ngContentSelectors}},Xy.prototype._normalizeTemplateMetadata=function(t,n){var r=this;return Mr(this._loadMissingExternalStylesheets(n.styleUrls.concat(n.inlineStyleUrls)),function(e){return r._normalizeLoadedTemplateMetadata(t,n,e)})},Xy.prototype._normalizeLoadedTemplateMetadata=function(e,t,r){var i=this,n=q(t.styles);this._inlineStyles(t.inlineStyleUrls,r,n);var o=t.styleUrls,a=o.map(function(e){var t=r.get(e),n=q(t.styles);return i._inlineStyles(t.styleUrls,r,n),new ki({moduleUrl:e,styles:n})}),s=e.encapsulation;return null==s&&(s=this._config.defaultEncapsulation),s===I.Emulated&&0===n.length&&0===o.length&&(s=I.None),new Di({encapsulation:s,template:t.template,templateUrl:t.templateUrl,htmlAst:t.htmlAst,styles:n,styleUrls:o,ngContentSelectors:t.ngContentSelectors,animations:e.animations,interpolation:e.interpolation,isInline:t.isInline,externalStylesheets:a,preserveWhitespaces:Zy(e.preserveWhitespaces,this._config.preserveWhitespaces)})},Xy.prototype._inlineStyles=function(e,n,r){var i=this;e.forEach(function(e){var t=n.get(e);t.styles.forEach(function(e){return r.push(e)}),i._inlineStyles(t.styleUrls,n,r)})},Xy.prototype._loadMissingExternalStylesheets=function(e,r){var i=this;return void 0===r&&(r=new Map),Mr(Rr(e.filter(function(e){return!r.has(e)}).map(function(n){return Mr(i._fetch(n),function(e){var t=i._normalizeStylesheet(new ki({styles:[e],moduleUrl:n}));return r.set(n,t),i._loadMissingExternalStylesheets(t.styleUrls,r)})})),function(e){return r})},Xy.prototype._normalizeStylesheet=function(e){var n=this,r=e.moduleUrl,i=e.styleUrls.filter(tm).map(function(e){return n._urlResolver.resolve(r,e)}),t=e.styles.map(function(e){var t=function(r,i,e){var o=[],t=e.replace(rm,\"\").replace(nm,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[1]||e[2];return tm(n)?(o.push(r.resolve(i,n)),\"\"):e[0]});return new em(t,o)}(n._urlResolver,r,e);return i.push.apply(i,q(t.styleUrls)),t.style});return new ki({styles:t,styleUrls:i,moduleUrl:r})},Xy);function Xy(e,t,n,r){this._resourceLoader=e,this._urlResolver=t,this._htmlParser=n,this._config=r,this._resourceLoaderCache=new Map}var $y=(Jy.prototype.visitElement=function(e,t){var n=fm(e);switch(n.type){case dm.NG_CONTENT:0===this.ngNonBindableStackCount&&this.ngContentSelectors.push(n.selectAttr);break;case dm.STYLE:var r=\"\";e.children.forEach(function(e){e instanceof zc&&(r+=e.value)}),this.styles.push(r);break;case dm.STYLESHEET:this.styleUrls.push(n.hrefAttr)}return n.nonBindable&&this.ngNonBindableStackCount++,ep(this,e.children),n.nonBindable&&this.ngNonBindableStackCount--,null},Jy.prototype.visitExpansion=function(e,t){ep(this,e.cases)},Jy.prototype.visitExpansionCase=function(e,t){ep(this,e.expression)},Jy.prototype.visitComment=function(e,t){return null},Jy.prototype.visitAttribute=function(e,t){return null},Jy.prototype.visitText=function(e,t){return null},Jy);function Jy(){this.ngContentSelectors=[],this.styles=[],this.styleUrls=[],this.ngNonBindableStackCount=0}var eg=[D,k,O,S],tg=(ng.prototype.isDirective=function(e){var t=this._reflector.annotations(qr(e));return t&&t.some(rg)},ng.prototype.resolve=function(e,t){void 0===t&&(t=!0);var n=this._reflector.annotations(qr(e));if(n){var r=ig(n,rg);if(r){var i=this._reflector.propMetadata(e),o=this._reflector.guards(e);return this._mergeWithPropertyMetadata(r,i,o,e)}}if(t)throw new Error(\"No Directive annotation found on \"+zr(e));return null},ng.prototype._mergeWithPropertyMetadata=function(e,i,t,n){var o=[],a=[],s={},l={};return Object.keys(i).forEach(function(n){var e=ig(i[n],function(e){return G.isTypeOf(e)});e&&(e.bindingPropertyName?o.push(n+\": \"+e.bindingPropertyName):o.push(n));var t=ig(i[n],function(e){return Y.isTypeOf(e)});t&&(t.bindingPropertyName?a.push(n+\": \"+t.bindingPropertyName):a.push(n)),i[n].filter(function(e){return K.isTypeOf(e)}).forEach(function(e){if(e.hostPropertyName){var t=e.hostPropertyName[0];if(\"(\"===t)throw new Error(\"@HostBinding can not bind to events. Use @HostListener instead.\");if(\"[\"===t)throw new Error(\"@HostBinding parameter should be a property name, 'class.<name>', or 'attr.<name>'.\");s[\"[\"+e.hostPropertyName+\"]\"]=n}else s[\"[\"+n+\"]\"]=n}),i[n].filter(function(e){return Z.isTypeOf(e)}).forEach(function(e){var t=e.args||[];s[\"(\"+e.eventName+\")\"]=n+\"(\"+t.join(\",\")+\")\"});var r=ig(i[n],function(t){return eg.some(function(e){return e.isTypeOf(t)})});r&&(l[n]=r)}),this._merge(e,o,a,s,l,t,n)},ng.prototype._extractPublicName=function(e){return Er(e,[null,e])[1].trim()},ng.prototype._dedupeBindings=function(e){for(var t=new Set,n=new Set,r=[],i=e.length-1;0<=i;i--){var o=e[i],a=this._extractPublicName(o);n.add(a),t.has(a)||(t.add(a),r.push(o))}return r.reverse()},ng.prototype._merge=function(e,t,n,r,i,o,a){var s=this._dedupeBindings(e.inputs?e.inputs.concat(t):t),l=this._dedupeBindings(e.outputs?e.outputs.concat(n):n),u=e.host?m(m({},e.host),r):r,c=e.queries?m(m({},e.queries),i):i;if(F.isTypeOf(e)){var p=e;return F({selector:p.selector,inputs:s,outputs:l,host:u,exportAs:p.exportAs,moduleId:p.moduleId,queries:c,changeDetection:p.changeDetection,providers:p.providers,viewProviders:p.viewProviders,entryComponents:p.entryComponents,template:p.template,templateUrl:p.templateUrl,styles:p.styles,styleUrls:p.styleUrls,encapsulation:p.encapsulation,animations:p.animations,interpolation:p.interpolation,preserveWhitespaces:e.preserveWhitespaces})}return A({selector:e.selector,inputs:s,outputs:l,host:u,exportAs:e.exportAs,queries:c,providers:e.providers,guards:o})},ng);function ng(e){this._reflector=e}function rg(e){return A.isTypeOf(e)||F.isTypeOf(e)}function ig(e,t){for(var n=e.length-1;0<=n;n--)if(t(e[n]))return e[n];return null}var og,ag=(f(sg,og=Go),sg);function sg(e,t){return og.call(this,e,t)||this}var lg=\"i18n-\",ug=/^i18n:?/,cg=!1;var pg,dg,hg=function(e,t){this.messages=e,this.errors=t};(dg=pg=pg||{})[dg.Extract=0]=\"Extract\",dg[dg.Merge=1]=\"Merge\";var fg=(mg.prototype.extract=function(e,t){var n=this;return this._init(pg.Extract,t),e.forEach(function(e){return e.visit(n,null)}),this._inI18nBlock&&this._reportError(e[e.length-1],\"Unclosed block\"),new hg(this._messages,this._errors)},mg.prototype.merge=function(e,t,n){this._init(pg.Merge,n),this._translations=t;var r=new Qc(\"wrapper\",[],e,void 0,void 0,void 0).visit(this,null);return this._inI18nBlock&&this._reportError(e[e.length-1],\"Unclosed block\"),new Rh(r.children,this._errors)},mg.prototype.visitExpansionCase=function(e,t){var n=ep(this,e.expression,t);if(this._mode===pg.Merge)return new Gc(e.value,n,e.sourceSpan,e.valueSourceSpan,e.expSourceSpan)},mg.prototype.visitExpansion=function(e,t){this._mayBeAddBlockChildren(e);var n=this._inIcu;this._inIcu||(this._isInTranslatableSection&&this._addMessage([e]),this._inIcu=!0);var r=ep(this,e.cases,t);return this._mode===pg.Merge&&(e=new Hc(e.switchValue,e.type,r,e.sourceSpan,e.switchValueSourceSpan)),this._inIcu=n,e},mg.prototype.visitComment=function(e,t){var n=function(e){return!!(e instanceof $c&&e.value&&e.value.startsWith(\"i18n\"))}(e);if(n&&this._isInTranslatableSection)this._reportError(e,\"Could not start a block inside a translatable section\");else{var r=function(e){return!!(e instanceof $c&&e.value&&\"/i18n\"===e.value)}(e);if(!r||this._inI18nBlock){if(!this._inI18nNode&&!this._inIcu)if(this._inI18nBlock){if(r){if(this._depth!=this._blockStartDepth)return void this._reportError(e,\"I18N blocks should not cross element boundaries\");this._closeTranslatableSection(e,this._blockChildren),this._inI18nBlock=!1;var i=this._addMessage(this._blockChildren,this._blockMeaningAndDesc),o=this._translateMessage(e,i);return ep(this,o)}}else if(n){if(!cg&&console&&console.warn){cg=!0;var a=e.sourceSpan.details?\", \"+e.sourceSpan.details:\"\";console.warn(\"I18n comments are deprecated, use an <ng-container> element instead (\"+e.sourceSpan.start+a+\")\")}this._inI18nBlock=!0,this._blockStartDepth=this._depth,this._blockChildren=[],this._blockMeaningAndDesc=e.value.replace(ug,\"\").trim(),this._openTranslatableSection(e)}}else this._reportError(e,\"Trying to close an unopened block\")}},mg.prototype.visitText=function(e,t){return this._isInTranslatableSection&&this._mayBeAddBlockChildren(e),e},mg.prototype.visitElement=function(t,n){var r=this;this._mayBeAddBlockChildren(t),this._depth++;var e=this._inI18nNode,i=this._inImplicitNode,o=[],a=void 0,s=function(e){return e.attrs.find(function(e){return\"i18n\"===e.name})||null}(t),l=s?s.value:\"\",u=this._implicitTags.some(function(e){return t.name===e})&&!this._inIcu&&!this._isInTranslatableSection,c=!i&&u;if(this._inImplicitNode=i||u,this._isInTranslatableSection||this._inIcu)(s||c)&&this._reportError(t,\"Could not mark an element as translatable inside a translatable section\"),this._mode==pg.Extract&&ep(this,t.children);else{if(s||c){this._inI18nNode=!0;var p=this._addMessage(t.children,l);a=this._translateMessage(t,p)}if(this._mode==pg.Extract){var d=s||c;d&&this._openTranslatableSection(t),ep(this,t.children),d&&this._closeTranslatableSection(t,t.children)}}if(this._mode===pg.Merge&&(a||t.children).forEach(function(e){var t=e.visit(r,n);t&&!r._isInTranslatableSection&&(o=o.concat(t))}),this._visitAttributesOf(t),this._depth--,this._inI18nNode=e,this._inImplicitNode=i,this._mode!==pg.Merge)return null;var h=this._translateAttributes(t);return new Qc(t.name,h,o,t.sourceSpan,t.startSourceSpan,t.endSourceSpan)},mg.prototype.visitAttribute=function(e,t){throw new Error(\"unreachable code\")},mg.prototype._init=function(e,t){this._mode=e,this._inI18nBlock=!1,this._inI18nNode=!1,this._depth=0,this._inIcu=!1,this._msgCountAtSectionStart=void 0,this._errors=[],this._messages=[],this._inImplicitNode=!1,this._createI18nMessage=sp(t)},mg.prototype._visitAttributesOf=function(e){var n=this,r={},i=this._implicitAttrs[e.name]||[];e.attrs.filter(function(e){return e.name.startsWith(lg)}).forEach(function(e){return r[e.name.slice(lg.length)]=e.value}),e.attrs.forEach(function(t){t.name in r?n._addMessage([t],r[t.name]):i.some(function(e){return t.name===e})&&n._addMessage([t])})},mg.prototype._addMessage=function(e,t){if(0==e.length||1==e.length&&e[0]instanceof Kc&&!e[0].value)return null;var n=vg(t),r=n.meaning,i=n.description,o=n.id,a=this._createI18nMessage(e,r,i,o);return this._messages.push(a),a},mg.prototype._translateMessage=function(e,t){if(t&&this._mode===pg.Merge){var n=this._translations.get(t);if(n)return n;this._reportError(e,'Translation unavailable for message id=\"'+this._translations.digest(t)+'\"')}return[]},mg.prototype._translateAttributes=function(l){var u=this,e=l.attrs,c={};e.forEach(function(e){e.name.startsWith(lg)&&(c[e.name.slice(lg.length)]=vg(e.value))});var p=[];return e.forEach(function(e){if(\"i18n\"!==e.name&&!e.name.startsWith(lg))if(e.value&&\"\"!=e.value&&c.hasOwnProperty(e.name)){var t=c[e.name],n=t.meaning,r=t.description,i=t.id,o=u._createI18nMessage([e],n,r,i),a=u._translations.get(o);if(a)if(0==a.length)p.push(new Kc(e.name,\"\",e.sourceSpan));else if(a[0]instanceof zc){var s=a[0].value;p.push(new Kc(e.name,s,e.sourceSpan))}else u._reportError(l,'Unexpected translation for attribute \"'+e.name+'\" (id=\"'+(i||u._translations.digest(o))+'\")');else u._reportError(l,'Translation unavailable for attribute \"'+e.name+'\" (id=\"'+(i||u._translations.digest(o))+'\")')}else p.push(e)}),p},mg.prototype._mayBeAddBlockChildren=function(e){this._inI18nBlock&&!this._inIcu&&this._depth==this._blockStartDepth&&this._blockChildren.push(e)},mg.prototype._openTranslatableSection=function(e){this._isInTranslatableSection?this._reportError(e,\"Unexpected section start\"):this._msgCountAtSectionStart=this._messages.length},Object.defineProperty(mg.prototype,\"_isInTranslatableSection\",{get:function(){return void 0!==this._msgCountAtSectionStart},enumerable:!0,configurable:!0}),mg.prototype._closeTranslatableSection=function(e,t){if(this._isInTranslatableSection){var n=this._msgCountAtSectionStart;if(1==t.reduce(function(e,t){return e+(t instanceof $c?0:1)},0))for(var r=this._messages.length-1;n<=r;r--){var i=this._messages[r].nodes;if(!(1==i.length&&i[0]instanceof Ea)){this._messages.splice(r,1);break}}this._msgCountAtSectionStart=void 0}else this._reportError(e,\"Unexpected section end\")},mg.prototype._reportError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},mg);function mg(e,t){this._implicitTags=e,this._implicitAttrs=t}function vg(e){if(!e)return{meaning:\"\",description:\"\",id:\"\"};var t=e.indexOf(\"@@\"),n=e.indexOf(\"|\"),r=U(-1<t?[e.slice(0,t),e.slice(t+2)]:[e,\"\"],2),i=r[0],o=r[1],a=U(-1<n?[i.slice(0,n),i.slice(n+1)]:[\"\",i],2);return{meaning:a[0],description:a[1],id:o}}function yg(){this.closedByParent=!1,this.contentType=E.TagContentType.PARSABLE_DATA,this.isVoid=!1,this.ignoreFirstLf=!1,this.canSelfClose=!0}var gg=new(yg.prototype.requireExtraParent=function(e){return!1},yg.prototype.isClosedByChild=function(e){return!1},yg);function _g(e){return gg}var bg,wg=(f(xg,bg=Nh),xg.prototype.parse=function(e,t,n){return bg.prototype.parse.call(this,e,t,n)},xg);function xg(){return bg.call(this,_g)||this}var Cg,Sg=\"trans-unit\",Eg=(f(Og,Cg=hs),Og.prototype.write=function(e,t){var i=new kg,o=[];e.forEach(function(e){var t,n=[];e.sources.forEach(function(e){var t=new Es(\"context-group\",{purpose:\"location\"});t.children.push(new Is(10),new Es(\"context\",{\"context-type\":\"sourcefile\"},[new ks(e.filePath)]),new Is(10),new Es(\"context\",{\"context-type\":\"linenumber\"},[new ks(\"\"+e.startLine)]),new Is(8)),n.push(new Is(8),t)});var r=new Es(Sg,{id:e.id,datatype:\"html\"});(t=r.children).push.apply(t,q([new Is(8),new Es(\"source\",{},i.serialize(e.nodes))],n)),e.description&&r.children.push(new Is(8),new Es(\"note\",{priority:\"1\",from:\"description\"},[new ks(e.description)])),e.meaning&&r.children.push(new Is(8),new Es(\"note\",{priority:\"1\",from:\"meaning\"},[new ks(e.meaning)])),r.children.push(new Is(6)),o.push(new Is(6),r)});var n=new Es(\"body\",{},q(o,[new Is(4)])),r=new Es(\"file\",{\"source-language\":t||\"en\",datatype:\"plaintext\",original:\"ng2.template\"},[new Is(4),n,new Is(2)]),a=new Es(\"xliff\",{version:\"1.2\",xmlns:\"urn:oasis:names:tc:xliff:document:1.2\"},[new Is(2),r,new Is]);return bs([new ws({version:\"1.0\",encoding:\"UTF-8\"}),new Is,a,new Is])},Og.prototype.load=function(e,i){var t=(new Tg).parse(e,i),n=t.locale,o=t.msgIdToHtml,a=t.errors,s={},l=new Pg;if(Object.keys(o).forEach(function(e){var t=l.convert(o[e],i),n=t.i18nNodes,r=t.errors;a.push.apply(a,q(r)),s[e]=n}),a.length)throw new Error(\"xliff parse errors:\\n\"+a.join(\"\\n\"));return{locale:n,i18nNodesByMsgId:s}},Og.prototype.digest=function(e){return Ua(e)},Og);function Og(){return null!==Cg&&Cg.apply(this,arguments)||this}var kg=(Dg.prototype.visitText=function(e,t){return[new ks(e.value)]},Dg.prototype.visitContainer=function(e,t){var n=this,r=[];return e.children.forEach(function(e){return r.push.apply(r,q(e.visit(n)))}),r},Dg.prototype.visitIcu=function(t,e){var n=this,r=[new ks(\"{\"+t.expressionPlaceholder+\", \"+t.type+\", \")];return Object.keys(t.cases).forEach(function(e){r.push.apply(r,q([new ks(e+\" {\")],t.cases[e].visit(n),[new ks(\"} \")]))}),r.push(new ks(\"}\")),r},Dg.prototype.visitTagPlaceholder=function(e,t){var n=function(e){switch(e.toLowerCase()){case\"br\":return\"lb\";case\"img\":return\"image\";default:return\"x-\"+e}}(e.tag);if(e.isVoid)return[new Es(\"x\",{id:e.startName,ctype:n,\"equiv-text\":\"<\"+e.tag+\"/>\"})];var r=new Es(\"x\",{id:e.startName,ctype:n,\"equiv-text\":\"<\"+e.tag+\">\"}),i=new Es(\"x\",{id:e.closeName,ctype:n,\"equiv-text\":\"</\"+e.tag+\">\"});return q([r],this.serialize(e.children),[i])},Dg.prototype.visitPlaceholder=function(e,t){return[new Es(\"x\",{id:e.name,\"equiv-text\":\"{{\"+e.value+\"}}\"})]},Dg.prototype.visitIcuPlaceholder=function(e,t){var n=\"{\"+e.value.expression+\", \"+e.value.type+\", \"+Object.keys(e.value.cases).map(function(e){return e+\" {...}\"}).join(\" \")+\"}\";return[new Es(\"x\",{id:e.name,\"equiv-text\":n})]},Dg.prototype.serialize=function(e){var t=this;return[].concat.apply([],q(e.map(function(e){return e.visit(t)})))},Dg);function Dg(){}var Tg=(Ig.prototype.parse=function(e,t){this._unitMlString=null,this._msgIdToHtml={};var n=(new wg).parse(e,t);return this._errors=n.errors,ep(this,n.rootNodes,null),{msgIdToHtml:this._msgIdToHtml,errors:this._errors,locale:this._locale}},Ig.prototype.visitElement=function(e,t){switch(e.name){case Sg:this._unitMlString=null;var n=e.attrs.find(function(e){return\"id\"===e.name});if(n){var r=n.value;this._msgIdToHtml.hasOwnProperty(r)?this._addError(e,\"Duplicated translations for msg \"+r):(ep(this,e.children,null),\"string\"==typeof this._unitMlString?this._msgIdToHtml[r]=this._unitMlString:this._addError(e,\"Message \"+r+\" misses a translation\"))}else this._addError(e,\"<\"+Sg+'> misses the \"id\" attribute');break;case\"source\":case\"seg-source\":break;case\"target\":var i=e.startSourceSpan.end.offset,o=e.endSourceSpan.start.offset,a=e.startSourceSpan.start.file.content.slice(i,o);this._unitMlString=a;break;case\"file\":var s=e.attrs.find(function(e){return\"target-language\"===e.name});s&&(this._locale=s.value),ep(this,e.children,null);break;default:ep(this,e.children,null)}},Ig.prototype.visitAttribute=function(e,t){},Ig.prototype.visitText=function(e,t){},Ig.prototype.visitComment=function(e,t){},Ig.prototype.visitExpansion=function(e,t){},Ig.prototype.visitExpansionCase=function(e,t){},Ig.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},Ig);function Ig(){this._locale=null}var Pg=(Ag.prototype.convert=function(e,t){var n=(new wg).parse(e,t,{tokenizeExpansionForms:!0});return this._errors=n.errors,{i18nNodes:0<this._errors.length||0==n.rootNodes.length?[]:[].concat.apply([],q(ep(this,n.rootNodes))),errors:this._errors}},Ag.prototype.visitText=function(e,t){return new Ea(e.value,e.sourceSpan)},Ag.prototype.visitElement=function(e,t){if(\"x\"!==e.name)return\"mrk\"===e.name?[].concat.apply([],q(ep(this,e.children))):(this._addError(e,\"Unexpected tag\"),null);var n=e.attrs.find(function(e){return\"id\"===e.name});return n?new Ma(\"\",n.value,e.sourceSpan):(this._addError(e,'<x> misses the \"id\" attribute'),null)},Ag.prototype.visitExpansion=function(t,e){var n={};return ep(this,t.cases).forEach(function(e){n[e.value]=new ka(e.nodes,t.sourceSpan)}),new Ta(t.switchValue,t.type,n,t.sourceSpan)},Ag.prototype.visitExpansionCase=function(e,t){return{value:e.value,nodes:ep(this,e.expression)}},Ag.prototype.visitComment=function(e,t){},Ag.prototype.visitAttribute=function(e,t){},Ag.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},Ag);function Ag(){}var Mg,Rg=(f(Ng,Mg=hs),Ng.prototype.write=function(e,t){var i=new jg,o=[];e.forEach(function(e){var t=new Es(\"unit\",{id:e.id}),n=new Es(\"notes\");(e.description||e.meaning)&&(e.description&&n.children.push(new Is(8),new Es(\"note\",{category:\"description\"},[new ks(e.description)])),e.meaning&&n.children.push(new Is(8),new Es(\"note\",{category:\"meaning\"},[new ks(e.meaning)]))),e.sources.forEach(function(e){n.children.push(new Is(8),new Es(\"note\",{category:\"location\"},[new ks(e.filePath+\":\"+e.startLine+(e.endLine!==e.startLine?\",\"+e.endLine:\"\"))]))}),n.children.push(new Is(6)),t.children.push(new Is(6),n);var r=new Es(\"segment\");r.children.push(new Is(8),new Es(\"source\",{},i.serialize(e.nodes)),new Is(6)),t.children.push(new Is(6),r,new Is(4)),o.push(new Is(4),t)});var n=new Es(\"file\",{original:\"ng.template\",id:\"ngi18n\"},q(o,[new Is(2)])),r=new Es(\"xliff\",{version:\"2.0\",xmlns:\"urn:oasis:names:tc:xliff:document:2.0\",srcLang:t||\"en\"},[new Is(2),n,new Is]);return bs([new ws({version:\"1.0\",encoding:\"UTF-8\"}),new Is,r,new Is])},Ng.prototype.load=function(e,i){var t=(new Lg).parse(e,i),n=t.locale,o=t.msgIdToHtml,a=t.errors,s={},l=new Bg;if(Object.keys(o).forEach(function(e){var t=l.convert(o[e],i),n=t.i18nNodes,r=t.errors;a.push.apply(a,q(r)),s[e]=n}),a.length)throw new Error(\"xliff2 parse errors:\\n\"+a.join(\"\\n\"));return{locale:n,i18nNodesByMsgId:s}},Ng.prototype.digest=function(e){return qa(e)},Ng);function Ng(){return null!==Mg&&Mg.apply(this,arguments)||this}var jg=(Fg.prototype.visitText=function(e,t){return[new ks(e.value)]},Fg.prototype.visitContainer=function(e,t){var n=this,r=[];return e.children.forEach(function(e){return r.push.apply(r,q(e.visit(n)))}),r},Fg.prototype.visitIcu=function(t,e){var n=this,r=[new ks(\"{\"+t.expressionPlaceholder+\", \"+t.type+\", \")];return Object.keys(t.cases).forEach(function(e){r.push.apply(r,q([new ks(e+\" {\")],t.cases[e].visit(n),[new ks(\"} \")]))}),r.push(new ks(\"}\")),r},Fg.prototype.visitTagPlaceholder=function(e,t){var n=this,r=function(e){switch(e.toLowerCase()){case\"br\":case\"b\":case\"i\":case\"u\":return\"fmt\";case\"img\":return\"image\";case\"a\":return\"link\";default:return\"other\"}}(e.tag);if(e.isVoid)return[new Es(\"ph\",{id:(this._nextPlaceholderId++).toString(),equiv:e.startName,type:r,disp:\"<\"+e.tag+\"/>\"})];var i=new Es(\"pc\",{id:(this._nextPlaceholderId++).toString(),equivStart:e.startName,equivEnd:e.closeName,type:r,dispStart:\"<\"+e.tag+\">\",dispEnd:\"</\"+e.tag+\">\"}),o=[].concat.apply([],q(e.children.map(function(e){return e.visit(n)})));return o.length?o.forEach(function(e){return i.children.push(e)}):i.children.push(new ks(\"\")),[i]},Fg.prototype.visitPlaceholder=function(e,t){var n=(this._nextPlaceholderId++).toString();return[new Es(\"ph\",{id:n,equiv:e.name,disp:\"{{\"+e.value+\"}}\"})]},Fg.prototype.visitIcuPlaceholder=function(e,t){var n=Object.keys(e.value.cases).map(function(e){return e+\" {...}\"}).join(\" \"),r=(this._nextPlaceholderId++).toString();return[new Es(\"ph\",{id:r,equiv:e.name,disp:\"{\"+e.value.expression+\", \"+e.value.type+\", \"+n+\"}\"})]},Fg.prototype.serialize=function(e){var t=this;return this._nextPlaceholderId=0,[].concat.apply([],q(e.map(function(e){return e.visit(t)})))},Fg);function Fg(){}var Lg=(Vg.prototype.parse=function(e,t){this._unitMlString=null,this._msgIdToHtml={};var n=(new wg).parse(e,t);return this._errors=n.errors,ep(this,n.rootNodes,null),{msgIdToHtml:this._msgIdToHtml,errors:this._errors,locale:this._locale}},Vg.prototype.visitElement=function(e,t){switch(e.name){case\"unit\":this._unitMlString=null;var n=e.attrs.find(function(e){return\"id\"===e.name});if(n){var r=n.value;this._msgIdToHtml.hasOwnProperty(r)?this._addError(e,\"Duplicated translations for msg \"+r):(ep(this,e.children,null),\"string\"==typeof this._unitMlString?this._msgIdToHtml[r]=this._unitMlString:this._addError(e,\"Message \"+r+\" misses a translation\"))}else this._addError(e,'<unit> misses the \"id\" attribute');break;case\"source\":break;case\"target\":var i=e.startSourceSpan.end.offset,o=e.endSourceSpan.start.offset,a=e.startSourceSpan.start.file.content.slice(i,o);this._unitMlString=a;break;case\"xliff\":var s=e.attrs.find(function(e){return\"trgLang\"===e.name});s&&(this._locale=s.value);var l=e.attrs.find(function(e){return\"version\"===e.name});if(l){var u=l.value;\"2.0\"!==u?this._addError(e,\"The XLIFF file version \"+u+\" is not compatible with XLIFF 2.0 serializer\"):ep(this,e.children,null)}break;default:ep(this,e.children,null)}},Vg.prototype.visitAttribute=function(e,t){},Vg.prototype.visitText=function(e,t){},Vg.prototype.visitComment=function(e,t){},Vg.prototype.visitExpansion=function(e,t){},Vg.prototype.visitExpansionCase=function(e,t){},Vg.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},Vg);function Vg(){this._locale=null}var Bg=(Ug.prototype.convert=function(e,t){var n=(new wg).parse(e,t,{tokenizeExpansionForms:!0});return this._errors=n.errors,{i18nNodes:0<this._errors.length||0==n.rootNodes.length?[]:[].concat.apply([],q(ep(this,n.rootNodes))),errors:this._errors}},Ug.prototype.visitText=function(e,t){return new Ea(e.value,e.sourceSpan)},Ug.prototype.visitElement=function(e,t){var n=this;switch(e.name){case\"ph\":var r=e.attrs.find(function(e){return\"equiv\"===e.name});if(r)return[new Ma(\"\",r.value,e.sourceSpan)];this._addError(e,'<ph> misses the \"equiv\" attribute');break;case\"pc\":var i=e.attrs.find(function(e){return\"equivStart\"===e.name}),o=e.attrs.find(function(e){return\"equivEnd\"===e.name});if(i){if(o){var a=i.value,s=o.value,l=[];return l.concat.apply(l,q([new Ma(\"\",a,e.sourceSpan)],e.children.map(function(e){return e.visit(n,null)}),[new Ma(\"\",s,e.sourceSpan)]))}this._addError(e,'<ph> misses the \"equivEnd\" attribute')}else this._addError(e,'<ph> misses the \"equivStart\" attribute');break;case\"mrk\":return[].concat.apply([],q(ep(this,e.children)));default:this._addError(e,\"Unexpected tag\")}return null},Ug.prototype.visitExpansion=function(t,e){var n={};return ep(this,t.cases).forEach(function(e){n[e.value]=new ka(e.nodes,t.sourceSpan)}),new Ta(t.switchValue,t.type,n,t.sourceSpan)},Ug.prototype.visitExpansionCase=function(e,t){return{value:e.value,nodes:[].concat.apply([],q(ep(this,e.expression)))}},Ug.prototype.visitComment=function(e,t){},Ug.prototype.visitAttribute=function(e,t){},Ug.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},Ug);function Ug(){}var zg,qg=\"translationbundle\",Hg=\"translation\",Wg=(f(Gg,zg=hs),Gg.prototype.write=function(e,t){throw new Error(\"Unsupported\")},Gg.prototype.load=function(e,i){var t=(new Yg).parse(e,i),n=t.locale,o=t.msgIdToHtml,r=t.errors,a={},s=new Zg;if(Object.keys(o).forEach(function(r){!function(t,n,r){Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get:function(){var e=r();return Object.defineProperty(t,n,{enumerable:!0,value:e}),e},set:function(e){throw new Error(\"Could not overwrite an XTB translation\")}})}(a,r,function(){var e=s.convert(o[r],i),t=e.i18nNodes,n=e.errors;if(n.length)throw new Error(\"xtb parse errors:\\n\"+n.join(\"\\n\"));return t})}),r.length)throw new Error(\"xtb parse errors:\\n\"+r.join(\"\\n\"));return{locale:n,i18nNodesByMsgId:a}},Gg.prototype.digest=function(e){return zs(e)},Gg.prototype.createNameMapper=function(e){return new vs(e,Ws)},Gg);function Gg(){return null!==zg&&zg.apply(this,arguments)||this}var Yg=(Kg.prototype.parse=function(e,t){this._bundleDepth=0,this._msgIdToHtml={};var n=(new wg).parse(e,t);return this._errors=n.errors,ep(this,n.rootNodes),{msgIdToHtml:this._msgIdToHtml,errors:this._errors,locale:this._locale}},Kg.prototype.visitElement=function(e,t){switch(e.name){case qg:this._bundleDepth++,1<this._bundleDepth&&this._addError(e,\"<\"+qg+\"> elements can not be nested\");var n=e.attrs.find(function(e){return\"lang\"===e.name});n&&(this._locale=n.value),ep(this,e.children,null),this._bundleDepth--;break;case Hg:var r=e.attrs.find(function(e){return\"id\"===e.name});if(r){var i=r.value;if(this._msgIdToHtml.hasOwnProperty(i))this._addError(e,\"Duplicated translations for msg \"+i);else{var o=e.startSourceSpan.end.offset,a=e.endSourceSpan.start.offset,s=e.startSourceSpan.start.file.content.slice(o,a);this._msgIdToHtml[i]=s}}else this._addError(e,\"<\"+Hg+'> misses the \"id\" attribute');break;default:this._addError(e,\"Unexpected tag\")}},Kg.prototype.visitAttribute=function(e,t){},Kg.prototype.visitText=function(e,t){},Kg.prototype.visitComment=function(e,t){},Kg.prototype.visitExpansion=function(e,t){},Kg.prototype.visitExpansionCase=function(e,t){},Kg.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},Kg);function Kg(){this._locale=null}var Zg=(Qg.prototype.convert=function(e,t){var n=(new wg).parse(e,t,{tokenizeExpansionForms:!0});return this._errors=n.errors,{i18nNodes:0<this._errors.length||0==n.rootNodes.length?[]:ep(this,n.rootNodes),errors:this._errors}},Qg.prototype.visitText=function(e,t){return new Ea(e.value,e.sourceSpan)},Qg.prototype.visitExpansion=function(t,e){var n={};return ep(this,t.cases).forEach(function(e){n[e.value]=new ka(e.nodes,t.sourceSpan)}),new Ta(t.switchValue,t.type,n,t.sourceSpan)},Qg.prototype.visitExpansionCase=function(e,t){return{value:e.value,nodes:ep(this,e.expression)}},Qg.prototype.visitElement=function(e,t){if(\"ph\"===e.name){var n=e.attrs.find(function(e){return\"name\"===e.name});if(n)return new Ma(\"\",n.value,e.sourceSpan);this._addError(e,'<ph> misses the \"name\" attribute')}else this._addError(e,\"Unexpected tag\");return null},Qg.prototype.visitComment=function(e,t){},Qg.prototype.visitAttribute=function(e,t){},Qg.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},Qg);function Qg(){}var Xg=($g.load=function(e,t,n,r,i){var o=n.load(e,t),a=o.locale;return new $g(o.i18nNodesByMsgId,a,function(e){return n.digest(e)},function(e){return n.createNameMapper(e)},r,i)},$g.prototype.get=function(e){var t=this._i18nToHtml.convert(e);if(t.errors.length)throw new Error(t.errors.join(\"\\n\"));return t.nodes},$g.prototype.has=function(e){return this.digest(e)in this._i18nNodesByMsgId},$g);function $g(e,t,n,r,i,o){void 0===e&&(e={}),void 0===i&&(i=N.Warning),this._i18nNodesByMsgId=e,this.digest=n,this.mapperFactory=r,this._i18nToHtml=new Jg(e,t,n,r,i,o)}var Jg=(e_.prototype.convert=function(e){this._contextStack.length=0,this._errors.length=0;var t=this._convertToText(e),n=e.nodes[0].sourceSpan.start.file.url,r=(new Uh).parse(t,n,{tokenizeExpansionForms:!0});return{nodes:r.rootNodes,errors:q(this._errors,r.errors)}},e_.prototype.visitText=function(e,t){return Ms(e.value)},e_.prototype.visitContainer=function(e,t){var n=this;return e.children.map(function(e){return e.visit(n)}).join(\"\")},e_.prototype.visitIcu=function(t,e){var n=this,r=Object.keys(t.cases).map(function(e){return e+\" {\"+t.cases[e].visit(n)+\"}\"});return\"{\"+(this._srcMsg.placeholders.hasOwnProperty(t.expression)?this._srcMsg.placeholders[t.expression]:t.expression)+\", \"+t.type+\", \"+r.join(\" \")+\"}\"},e_.prototype.visitPlaceholder=function(e,t){var n=this._mapper(e.name);return this._srcMsg.placeholders.hasOwnProperty(n)?this._srcMsg.placeholders[n]:this._srcMsg.placeholderToMessage.hasOwnProperty(n)?this._convertToText(this._srcMsg.placeholderToMessage[n]):(this._addError(e,'Unknown placeholder \"'+e.name+'\"'),\"\")},e_.prototype.visitTagPlaceholder=function(t,e){var n=this,r=\"\"+t.tag,i=Object.keys(t.attrs).map(function(e){return e+'=\"'+t.attrs[e]+'\"'}).join(\" \");return t.isVoid?\"<\"+r+\" \"+i+\"/>\":\"<\"+r+\" \"+i+\">\"+t.children.map(function(e){return e.visit(n)}).join(\"\")+\"</\"+r+\">\"},e_.prototype.visitIcuPlaceholder=function(e,t){return this._convertToText(this._srcMsg.placeholderToMessage[e.name])},e_.prototype._convertToText=function(e){var t,n=this,r=this._digest(e),i=this._mapperFactory?this._mapperFactory(e):null;if(this._contextStack.push({msg:this._srcMsg,mapper:this._mapper}),this._srcMsg=e,this._i18nNodesByMsgId.hasOwnProperty(r))t=this._i18nNodesByMsgId[r],this._mapper=function(e){return i?i.toInternalName(e):e};else{if(this._missingTranslationStrategy===N.Error){var o=this._locale?' for locale \"'+this._locale+'\"':\"\";this._addError(e.nodes[0],'Missing translation for message \"'+r+'\"'+o)}else this._console&&this._missingTranslationStrategy===N.Warning&&(o=this._locale?' for locale \"'+this._locale+'\"':\"\",this._console.warn('Missing translation for message \"'+r+'\"'+o));t=e.nodes,this._mapper=function(e){return e}}var a=t.map(function(e){return e.visit(n)}).join(\"\"),s=this._contextStack.pop();return this._srcMsg=s.msg,this._mapper=s.mapper,a},e_.prototype._addError=function(e,t){this._errors.push(new ag(e.sourceSpan,t))},e_);function e_(e,t,n,r,i,o){void 0===e&&(e={}),this._i18nNodesByMsgId=e,this._locale=t,this._digest=n,this._mapperFactory=r,this._missingTranslationStrategy=i,this._console=o,this._contextStack=[],this._errors=[]}var t_=(n_.prototype.parse=function(e,t,n){void 0===n&&(n={});var r=n.interpolationConfig||Fl,i=this._htmlParser.parse(e,t,m({interpolationConfig:r},n));return i.errors.length?new Rh(i.rootNodes,i.errors):function(e,t,n,r,i){return new fg(r,i).merge(e,t,n)}(i.rootNodes,this._translationBundle,r,[],{})},n_);function n_(e,t,n,r,i){if(void 0===r&&(r=N.Warning),this._htmlParser=e,t){var o=function(e){switch(e=(e||\"xlf\").toLowerCase()){case\"xmb\":return new Ls;case\"xtb\":return new Wg;case\"xliff2\":case\"xlf2\":return new Rg;case\"xliff\":case\"xlf\":default:return new Eg}}(n);this._translationBundle=Xg.load(t,\"i18n\",o,r,i)}else this._translationBundle=new Xg({},null,Ua,void 0,r,i)}function r_(e,t,n){return void 0===n&&(n=null),kr(t,new i_(e),n)}var i_=(o_.prototype.visitArray=function(e,t){var n=this;return gr(e.map(function(e){return kr(e,n,null)}),t)},o_.prototype.visitStringMap=function(t,e){var n=this,r=[],i=new Set(t&&t.$quoted$);return Object.keys(t).forEach(function(e){r.push(new Xt(e,kr(t[e],n,null),i.has(e)))}),new en(r,e)},o_.prototype.visitPrimitive=function(e,t){return xr(e,t)},o_.prototype.visitOther=function(e,t){return e instanceof je?e:this.ctx.importExpr(e)},o_);function o_(e){this.ctx=e}function a_(e,t){return{key:e,value:t,quoted:!1}}var s_=(l_.prototype.depsArray=function(e,s){var l=this;return e.map(function(e){var t,n=e,r=[n],i=0;if(Array.isArray(e))for(var o=0;o<e.length;o++){var a=e[o];a&&(\"Optional\"===a.ngMetadataName?i|=8:\"SkipSelf\"===a.ngMetadataName?i|=4:\"Self\"===a.ngMetadataName?i|=2:n=\"Inject\"===a.ngMetadataName?a.token:a)}return t=\"string\"==typeof n?xr(n):n===l.tokenInjector?mr(si.INJECTOR):s.importExpr(n),r=0!==i?[t,xr(i)]:[t],mr(si.inject).callFn(r)})},l_.prototype.factoryFor=function(e,t){var n;if(e.useExisting)n=mr(si.inject).callFn([t.importExpr(e.useExisting)]);else if(e.useFactory){var r=e.deps||[];if(!(0<r.length))return t.importExpr(e.useFactory);n=t.importExpr(e.useFactory).callFn(this.depsArray(r,t))}else if(e.useValue)n=r_(t,e.useValue);else{var i=e.useClass||e.symbol,o=this.depsArray(this.reflector.parameters(i),t);n=new ct(t.importExpr(i),o)}return br([],[new wn(n)],void 0,void 0,e.symbol.name+\"_Factory\")},l_.prototype.injectableDef=function(e,t){var n=sn;void 0!==e.providedIn&&(n=null===e.providedIn?sn:\"string\"==typeof e.providedIn?xr(e.providedIn):t.importExpr(e.providedIn));var r=[a_(\"factory\",this.factoryFor(e,t)),a_(\"token\",t.importExpr(e.type.reference)),a_(\"providedIn\",n)];return mr(si.ɵɵdefineInjectable).callFn([_r(r)])},l_.prototype.compile=function(e,t){if(this.alwaysGenerateDef||void 0!==e.providedIn){var n=_i(e.type),r=new Nn(n,null,[new On(\"ɵprov\",De,[E.StmtModifier.Static],this.injectableDef(e,t))],[],new Tn(null,[],[]),[]);t.statements.push(r)}},l_);function l_(e,t){this.reflector=e,this.alwaysGenerateDef=t,this.tokenInjector=e.resolveExternalReference(si.Injector)}var u_=/(\\.ts|\\.d\\.ts|\\.js|\\.jsx|\\.tsx)$/,c_=/\\.ngfactory\\.|\\.ngsummary\\./,p_=/\\.ngsummary\\./,d_=/NgSummary$/;function h_(e,t){void 0===t&&(t=!1);var n=m_(e,t);return n[0]+\".ngfactory\"+v_(n[1])}function f_(e){return e.replace(c_,\".\")}function m_(e,t){if(void 0===t&&(t=!1),e.endsWith(\".d.ts\"))return[e.slice(0,-5),t?\".ts\":\".d.ts\"];var n=e.lastIndexOf(\".\");return-1!==n?[e.substring(0,n),e.substring(n)]:[e,\"\"]}function v_(e){return\".tsx\"===e?\".ts\":e}function y_(e){return e.replace(u_,\"\")+\".ngsummary.json\"}function g_(e,t){void 0===t&&(t=!1);var n=m_(f_(e),t);return n[0]+\".ngsummary\"+n[1]}function __(e){return e+\"NgSummary\"}var b_,w_,x_=/\\u0275\\d+/;function C_(e){return x_.test(e)}(w_=b_=b_||{})[w_.OnInit=0]=\"OnInit\",w_[w_.OnDestroy=1]=\"OnDestroy\",w_[w_.DoCheck=2]=\"DoCheck\",w_[w_.OnChanges=3]=\"OnChanges\",w_[w_.AfterContentInit=4]=\"AfterContentInit\",w_[w_.AfterContentChecked=5]=\"AfterContentChecked\",w_[w_.AfterViewInit=6]=\"AfterViewInit\",w_[w_.AfterViewChecked=7]=\"AfterViewChecked\";var S_=[b_.OnInit,b_.OnDestroy,b_.DoCheck,b_.OnChanges,b_.AfterContentInit,b_.AfterContentChecked,b_.AfterViewInit,b_.AfterViewChecked];function E_(e,t,n){return e.hasLifecycleHook(n,function(e){switch(e){case b_.OnInit:return\"ngOnInit\";case b_.OnDestroy:return\"ngOnDestroy\";case b_.DoCheck:return\"ngDoCheck\";case b_.OnChanges:return\"ngOnChanges\";case b_.AfterContentInit:return\"ngAfterContentInit\";case b_.AfterContentChecked:return\"ngAfterContentChecked\";case b_.AfterViewInit:return\"ngAfterViewInit\";case b_.AfterViewChecked:return\"ngAfterViewChecked\";default:throw new Error(\"unexpected \"+e)}}(t))}var O_=\"ngComponentType\",k_=(D_.prototype.getReflector=function(){return this._reflector},D_.prototype.clearCacheFor=function(e){var t=this._directiveCache.get(e);this._directiveCache.delete(e),this._nonNormalizedDirectiveCache.delete(e),this._summaryCache.delete(e),this._pipeCache.delete(e),this._ngModuleOfTypes.delete(e),this._ngModuleCache.clear(),t&&this._directiveNormalizer.clearCacheFor(t)},D_.prototype.clearCache=function(){this._directiveCache.clear(),this._nonNormalizedDirectiveCache.clear(),this._summaryCache.clear(),this._pipeCache.clear(),this._ngModuleCache.clear(),this._ngModuleOfTypes.clear(),this._directiveNormalizer.clearCache()},D_.prototype._createProxyClass=function(e,t){function n(){if(!r)throw new Error(\"Illegal state: Class \"+t+\" for type \"+zr(e)+\" is not compiled yet!\");return r.apply(this,arguments)}var r=null;return n.setDelegate=function(e){n.prototype=(r=e).prototype},n.overriddenName=t,n},D_.prototype.getGeneratedClass=function(e,t){return e instanceof pi?this._staticSymbolCache.get(h_(e.filePath),t):this._createProxyClass(e,t)},D_.prototype.getComponentViewClass=function(e){return this.getGeneratedClass(e,wi(e,0))},D_.prototype.getHostComponentViewClass=function(e){return this.getGeneratedClass(e,Ci(e))},D_.prototype.getHostComponentType=function(e){var t=_i({reference:e})+\"_Host\";return e instanceof pi?this._staticSymbolCache.get(e.filePath,t):this._createProxyClass(e,t)},D_.prototype.getRendererType=function(e){return e instanceof pi?this._staticSymbolCache.get(h_(e.filePath),xi(e)):{}},D_.prototype.getComponentFactory=function(e,t,n,r){if(t instanceof pi)return this._staticSymbolCache.get(h_(t.filePath),Si(t));var i=this.getHostComponentViewClass(t);return this._reflector.resolveExternalReference(si.createComponentFactory)(e,t,i,n,r,[])},D_.prototype.initComponentFactory=function(e,t){var n;e instanceof pi||(n=e.ngContentSelectors).push.apply(n,q(t))},D_.prototype._loadSummary=function(e,t){var n=this._summaryCache.get(e);if(!n){var r=this._summaryResolver.resolveSummary(e);n=r?r.type:null,this._summaryCache.set(e,n||null)}return n&&n.summaryKind===t?n:null},D_.prototype.getHostComponentMetadata=function(e,t){var n=this.getHostComponentType(e.type.reference);t=t||this.getHostComponentViewClass(n);var r=B.parse(e.selector)[0].getMatchingElementTemplate(),i=this._htmlParser.parse(r,\"\");return Ii.create({isHost:!0,type:{reference:n,diDeps:[],lifecycleHooks:[]},template:new Di({encapsulation:I.None,template:r,templateUrl:\"\",htmlAst:i,styles:[],styleUrls:[],ngContentSelectors:[],animations:[],isInline:!0,externalStylesheets:[],interpolation:null,preserveWhitespaces:!1}),exportAs:null,changeDetection:P.Default,inputs:[],outputs:[],host:{},isComponent:!0,selector:\"*\",providers:[],viewProviders:[],queries:[],guards:{},viewQueries:[],componentViewType:t,rendererType:{id:\"__Host__\",encapsulation:I.None,styles:[],data:{}},entryComponents:[],componentFactory:null})},D_.prototype.loadDirectiveMetadata=function(e,n,t){var r=this;if(this._directiveCache.has(n))return null;function i(e){var t=new Ii({isHost:!1,type:s.type,isComponent:s.isComponent,selector:s.selector,exportAs:s.exportAs,changeDetection:s.changeDetection,inputs:s.inputs,outputs:s.outputs,hostListeners:s.hostListeners,hostProperties:s.hostProperties,hostAttributes:s.hostAttributes,providers:s.providers,viewProviders:s.viewProviders,queries:s.queries,guards:s.guards,viewQueries:s.viewQueries,entryComponents:s.entryComponents,componentViewType:s.componentViewType,rendererType:s.rendererType,componentFactory:s.componentFactory,template:e});return e&&r.initComponentFactory(s.componentFactory,e.ngContentSelectors),r._directiveCache.set(n,t),r._summaryCache.set(n,t.toSummary()),null}n=qr(n);var o=this.getNonNormalizedDirectiveMetadata(n),a=o.annotation,s=o.metadata;if(s.isComponent){var l=s.template,u=this._directiveNormalizer.normalizeTemplate({ngModuleType:e,componentType:n,moduleUrl:this._reflector.componentModuleUrl(n,a),encapsulation:l.encapsulation,template:l.template,templateUrl:l.templateUrl,styles:l.styles,styleUrls:l.styleUrls,animations:l.animations,interpolation:l.interpolation,preserveWhitespaces:l.preserveWhitespaces});return Hr(u)&&t?(this._reportError(function(e){var t=Error(\"Can't compile synchronously as \"+zr(e)+\" is still being loaded!\");return t[O_]=e,t}(n),n),null):Mr(u,i)}return i(null),null},D_.prototype.getNonNormalizedDirectiveMetadata=function(e){var t=this;if(!(e=qr(e)))return null;var n=this._nonNormalizedDirectiveCache.get(e);if(n)return n;var r=this._directiveResolver.resolve(e,!1);if(!r)return null;var i=void 0;if(F.isTypeOf(r)){Pl(\"styles\",(a=r).styles),Pl(\"styleUrls\",a.styleUrls),Ml(\"interpolation\",a.interpolation);var o=a.animations;i=new Di({encapsulation:Tr(a.encapsulation),template:Tr(a.template),templateUrl:Tr(a.templateUrl),htmlAst:null,styles:a.styles||[],styleUrls:a.styleUrls||[],animations:o||[],interpolation:Tr(a.interpolation),isInline:!!a.template,externalStylesheets:[],ngContentSelectors:[],preserveWhitespaces:Tr(r.preserveWhitespaces)})}var a,s=null,l=[],u=[],c=r.selector;c=F.isTypeOf(r)?(s=(a=r).changeDetection,a.viewProviders&&(l=this._getProvidersMetadata(a.viewProviders,u,'viewProviders for \"'+R_(e)+'\"',[],e)),a.entryComponents&&(u=T_(a.entryComponents).map(function(e){return t._getEntryComponentMetadata(e)}).concat(u)),c||this._schemaRegistry.getDefaultComponentElementName()):c||null;var p=[];null!=r.providers&&(p=this._getProvidersMetadata(r.providers,u,'providers for \"'+R_(e)+'\"',[],e));var d=[],h=[];null!=r.queries&&(d=this._getQueriesMetadata(r.queries,!1,e),h=this._getQueriesMetadata(r.queries,!0,e));var f=Ii.create({isHost:!1,selector:c,exportAs:Tr(r.exportAs),isComponent:!!i,type:this._getTypeMetadata(e),template:i,changeDetection:s,inputs:r.inputs||[],outputs:r.outputs||[],host:r.host||{},providers:p||[],viewProviders:l||[],queries:d||[],guards:r.guards||{},viewQueries:h||[],entryComponents:u,componentViewType:i?this.getComponentViewClass(e):null,rendererType:i?this.getRendererType(e):null,componentFactory:null});return i&&(f.componentFactory=this.getComponentFactory(c,e,f.inputs,f.outputs)),n={metadata:f,annotation:r},this._nonNormalizedDirectiveCache.set(e,n),n},D_.prototype.getDirectiveMetadata=function(e){var t=this._directiveCache.get(e);return t||this._reportError(jr(\"Illegal state: getDirectiveMetadata can only be called after loadNgModuleDirectiveAndPipeMetadata for a module that declares it. Directive \"+R_(e)+\".\"),e),t},D_.prototype.getDirectiveSummary=function(e){var t=this._loadSummary(e,E.CompileSummaryKind.Directive);return t||this._reportError(jr(\"Illegal state: Could not load the summary for directive \"+R_(e)+\".\"),e),t},D_.prototype.isDirective=function(e){return!!this._loadSummary(e,E.CompileSummaryKind.Directive)||this._directiveResolver.isDirective(e)},D_.prototype.isAbstractDirective=function(e){var t=this._loadSummary(e,E.CompileSummaryKind.Directive);if(t&&!t.isComponent)return!t.selector;var n=this._directiveResolver.resolve(e,!1);return!(!n||F.isTypeOf(n)||n.selector)},D_.prototype.isPipe=function(e){return!!this._loadSummary(e,E.CompileSummaryKind.Pipe)||this._pipeResolver.isPipe(e)},D_.prototype.isNgModule=function(e){return!!this._loadSummary(e,E.CompileSummaryKind.NgModule)||this._ngModuleResolver.isNgModule(e)},D_.prototype.getNgModuleSummary=function(e,t){void 0===t&&(t=null);var n=this._loadSummary(e,E.CompileSummaryKind.NgModule);if(!n){var r=this.getNgModuleMetadata(e,!1,t);(n=r?r.toSummary():null)&&this._summaryCache.set(e,n)}return n},D_.prototype.loadNgModuleDirectiveAndPipeMetadata=function(n,r,e){var i=this;void 0===e&&(e=!0);var t=this.getNgModuleMetadata(n,e),o=[];return t&&(t.declaredDirectives.forEach(function(e){var t=i.loadDirectiveMetadata(n,e.reference,r);t&&o.push(t)}),t.declaredPipes.forEach(function(e){return i._loadPipeMetadata(e.reference)})),Promise.all(o)},D_.prototype.getShallowModuleMetadata=function(e){var t=this._shallowModuleCache.get(e);if(t)return t;var n=ig(this._reflector.shallowAnnotations(e),Q.isTypeOf);return t={type:this._getTypeMetadata(e),rawExports:n.exports,rawImports:n.imports,rawProviders:n.providers},this._shallowModuleCache.set(e,t),t},D_.prototype.getNgModuleMetadata=function(i,e,o){var a=this;void 0===e&&(e=!0),void 0===o&&(o=null),i=qr(i);var t=this._ngModuleCache.get(i);if(t)return t;var n=this._ngModuleResolver.resolve(i,e);if(!n)return null;var r=[],s=[],l=[],u=[],c=[],p=[],d=[],h=[],f=[];n.imports&&T_(n.imports).forEach(function(e){var t=void 0;if(I_(e))t=e;else if(e&&e.ngModule){var n=e;t=n.ngModule,n.providers&&p.push.apply(p,q(a._getProvidersMetadata(n.providers,d,\"provider for the NgModule '\"+R_(t)+\"'\",[],e)))}if(t){if(!a._checkSelfImport(i,t))if((o=o||new Set).has(t))a._reportError(jr(a._getTypeDescriptor(t)+\" '\"+R_(e)+\"' is imported recursively by the module '\"+R_(i)+\"'.\"),i);else{o.add(t);var r=a.getNgModuleSummary(t,o);o.delete(t),r?u.push(r):a._reportError(jr(\"Unexpected \"+a._getTypeDescriptor(e)+\" '\"+R_(e)+\"' imported by the module '\"+R_(i)+\"'. Please add a @NgModule annotation.\"),i)}}else a._reportError(jr(\"Unexpected value '\"+R_(e)+\"' imported by the module '\"+R_(i)+\"'\"),i)}),n.exports&&T_(n.exports).forEach(function(e){if(I_(e))if((o=o||new Set).has(e))a._reportError(jr(a._getTypeDescriptor(e)+\" '\"+zr(e)+\"' is exported recursively by the module '\"+R_(i)+\"'\"),i);else{o.add(e);var t=a.getNgModuleSummary(e,o);o.delete(e),t?c.push(t):s.push(a._getIdentifierMetadata(e))}else a._reportError(jr(\"Unexpected value '\"+R_(e)+\"' exported by the module '\"+R_(i)+\"'\"),i)});var m=this._getTransitiveNgModuleMetadata(u,c);n.declarations&&T_(n.declarations).forEach(function(e){if(I_(e)){var t=a._getIdentifierMetadata(e);if(a.isDirective(e))a.isAbstractDirective(e)&&a._reportError(jr(\"Directive \"+R_(e)+\" has no selector, please add it!\"),e),m.addDirective(t),r.push(t),a._addTypeToModule(e,i);else{if(!a.isPipe(e))return void a._reportError(jr(\"Unexpected \"+a._getTypeDescriptor(e)+\" '\"+R_(e)+\"' declared by the module '\"+R_(i)+\"'. Please add a @Pipe/@Directive/@Component annotation.\"),i);m.addPipe(t),m.pipes.push(t),l.push(t),a._addTypeToModule(e,i)}}else a._reportError(jr(\"Unexpected value '\"+R_(e)+\"' declared by the module '\"+R_(i)+\"'\"),i)});var v=[],y=[];return s.forEach(function(e){if(m.directivesSet.has(e.reference))v.push(e),m.addExportedDirective(e);else{if(!m.pipesSet.has(e.reference))return void a._reportError(jr(\"Can't export \"+a._getTypeDescriptor(e.reference)+\" \"+R_(e.reference)+\" from \"+R_(i)+\" as it was neither declared nor imported!\"),i);y.push(e),m.addExportedPipe(e)}}),n.providers&&p.push.apply(p,q(this._getProvidersMetadata(n.providers,d,\"provider for the NgModule '\"+R_(i)+\"'\",[],i))),n.entryComponents&&d.push.apply(d,q(T_(n.entryComponents).map(function(e){return a._getEntryComponentMetadata(e)}))),n.bootstrap&&T_(n.bootstrap).forEach(function(e){I_(e)?h.push(a._getIdentifierMetadata(e)):a._reportError(jr(\"Unexpected value '\"+R_(e)+\"' used in the bootstrap property of module '\"+R_(i)+\"'\"),i)}),d.push.apply(d,q(h.map(function(e){return a._getEntryComponentMetadata(e.reference)}))),n.schemas&&f.push.apply(f,q(T_(n.schemas))),t=new Ni({type:this._getTypeMetadata(i),providers:p,entryComponents:d,bootstrapComponents:h,schemas:f,declaredDirectives:r,exportedDirectives:v,declaredPipes:l,exportedPipes:y,importedModules:u,exportedModules:c,transitiveModule:m,id:n.id||null}),d.forEach(function(e){return m.addEntryComponent(e)}),p.forEach(function(e){return m.addProvider(e,t.type)}),m.addModule(t.type),this._ngModuleCache.set(i,t),t},D_.prototype._checkSelfImport=function(e,t){return e===t&&(this._reportError(jr(\"'\"+R_(e)+\"' module can't import itself\"),e),!0)},D_.prototype._getTypeDescriptor=function(e){if(I_(e)){if(this.isDirective(e))return\"directive\";if(this.isPipe(e))return\"pipe\";if(this.isNgModule(e))return\"module\"}return e.provide?\"provider\":\"value\"},D_.prototype._addTypeToModule=function(e,t){var n=this._ngModuleOfTypes.get(e);n&&n!==t?this._reportError(jr(\"Type \"+R_(e)+\" is part of the declarations of 2 modules: \"+R_(n)+\" and \"+R_(t)+\"! Please consider moving \"+R_(e)+\" to a higher module that imports \"+R_(n)+\" and \"+R_(t)+\". You can also create a new NgModule that exports and includes \"+R_(e)+\" then import that NgModule in \"+R_(n)+\" and \"+R_(t)+\".\"),t):this._ngModuleOfTypes.set(e,t)},D_.prototype._getTransitiveNgModuleMetadata=function(e,t){var o=new Fi,a=new Map;return e.concat(t).forEach(function(e){e.modules.forEach(function(e){return o.addModule(e)}),e.entryComponents.forEach(function(e){return o.addEntryComponent(e)});var i=new Set;e.providers.forEach(function(e){var t=Oi(e.provider.token),n=a.get(t);n||(n=new Set,a.set(t,n));var r=e.module.reference;!i.has(t)&&n.has(r)||(n.add(r),i.add(t),o.addProvider(e.provider,e.module))})}),t.forEach(function(e){e.exportedDirectives.forEach(function(e){return o.addExportedDirective(e)}),e.exportedPipes.forEach(function(e){return o.addExportedPipe(e)})}),e.forEach(function(e){e.exportedDirectives.forEach(function(e){return o.addDirective(e)}),e.exportedPipes.forEach(function(e){return o.addPipe(e)})}),o},D_.prototype._getIdentifierMetadata=function(e){return{reference:e=qr(e)}},D_.prototype.isInjectable=function(e){return this._reflector.tryAnnotations(e).some(function(e){return X.isTypeOf(e)})},D_.prototype.getInjectableSummary=function(e){return{summaryKind:E.CompileSummaryKind.Injectable,type:this._getTypeMetadata(e,null,!1)}},D_.prototype.getInjectableMetadata=function(e,t,n){void 0===t&&(t=null),void 0===n&&(n=!0);var r=this._loadSummary(e,E.CompileSummaryKind.Injectable),i=r?r.type:this._getTypeMetadata(e,t,n),o=this._reflector.annotations(e).filter(function(e){return X.isTypeOf(e)});if(0===o.length)return null;var a=o[o.length-1];return{symbol:e,type:i,providedIn:a.providedIn,useValue:a.useValue,useClass:a.useClass,useExisting:a.useExisting,useFactory:a.useFactory,deps:a.deps}},D_.prototype._getTypeMetadata=function(e,t,n){void 0===t&&(t=null),void 0===n&&(n=!0);var r=this._getIdentifierMetadata(e);return{reference:r.reference,diDeps:this._getDependenciesMetadata(r.reference,t,n),lifecycleHooks:function(t,n){return S_.filter(function(e){return E_(t,e,n)})}(this._reflector,r.reference)}},D_.prototype._getFactoryMetadata=function(e,t){return void 0===t&&(t=null),{reference:e=qr(e),diDeps:this._getDependenciesMetadata(e,t)}},D_.prototype.getPipeMetadata=function(e){var t=this._pipeCache.get(e);return t||this._reportError(jr(\"Illegal state: getPipeMetadata can only be called after loadNgModuleDirectiveAndPipeMetadata for a module that declares it. Pipe \"+R_(e)+\".\"),e),t||null},D_.prototype.getPipeSummary=function(e){var t=this._loadSummary(e,E.CompileSummaryKind.Pipe);return t||this._reportError(jr(\"Illegal state: Could not load the summary for pipe \"+R_(e)+\".\"),e),t},D_.prototype.getOrLoadPipeMetadata=function(e){var t=this._pipeCache.get(e);return t=t||this._loadPipeMetadata(e)},D_.prototype._loadPipeMetadata=function(e){e=qr(e);var t=this._pipeResolver.resolve(e),n=new Ai({type:this._getTypeMetadata(e),name:t.name,pure:!!t.pure});return this._pipeCache.set(e,n),this._summaryCache.set(e,n.toSummary()),n},D_.prototype._getDependenciesMetadata=function(e,t,n){var s=this;void 0===n&&(n=!0);var l=!1,r=(t||this._reflector.parameters(e)||[]).map(function(e){var t=!1,n=!1,r=!1,i=!1,o=!1,a=null;return Array.isArray(e)?e.forEach(function(e){re.isTypeOf(e)?n=!0:te.isTypeOf(e)?r=!0:ne.isTypeOf(e)?i=!0:ee.isTypeOf(e)?o=!0:C.isTypeOf(e)?(t=!0,a=e.attributeName):w.isTypeOf(e)?a=e.token:x.isTypeOf(e)||e instanceof pi?a=e:I_(e)&&null==a&&(a=e)}):a=e,null==a?(l=!0,{}):{isAttribute:t,isHost:n,isSelf:r,isSkipSelf:i,isOptional:o,token:s._getTokenMetadata(a)}});if(l){var i=r.map(function(e){return e.token?R_(e.token):\"?\"}).join(\", \"),o=\"Can't resolve all parameters for \"+R_(e)+\": (\"+i+\").\";n||this._config.strictInjectionParameters?this._reportError(jr(o),e):this._console.warn(\"Warning: \"+o+\" This will become an error in Angular v6.x\")}return r},D_.prototype._getTokenMetadata=function(e){return\"string\"==typeof(e=qr(e))?{value:e}:{identifier:{reference:e}}},D_.prototype._getProvidersMetadata=function(i,o,a,s,l){var u=this;return void 0===s&&(s=[]),i.forEach(function(e,r){if(Array.isArray(e))u._getProvidersMetadata(e,o,a,s);else{var t=void 0;if((e=qr(e))&&\"object\"==typeof e&&e.hasOwnProperty(\"provide\"))u._validateProvider(e),t=new Bi(e.provide,e);else{if(!I_(e)){if(void 0===e)return void u._reportError(jr(\"Encountered undefined provider! Usually this means you have a circular dependencies. This might be caused by using 'barrel' index.ts files.\"));var n=i.reduce(function(e,t,n){return n<r?e.push(\"\"+R_(t)):n==r?e.push(\"?\"+R_(t)+\"?\"):n==r+1&&e.push(\"...\"),e},[]).join(\", \");return void u._reportError(jr(\"Invalid \"+(a||\"provider\")+\" - only instances of Provider and Type are allowed, got: [\"+n+\"]\"),l)}t=new Bi(e,{useClass:e})}t.token===u._reflector.resolveExternalReference(si.ANALYZE_FOR_ENTRY_COMPONENTS)?o.push.apply(o,q(u._getEntryComponentsFromProvider(t,l))):s.push(u.getProviderMetadata(t))}}),s},D_.prototype._validateProvider=function(e){e.hasOwnProperty(\"useClass\")&&null==e.useClass&&this._reportError(jr(\"Invalid provider for \"+R_(e.provide)+\". useClass cannot be \"+e.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.\"))},D_.prototype._getEntryComponentsFromProvider=function(e,t){var n=this,r=[],i=[];return e.useFactory||e.useExisting||e.useClass?(this._reportError(jr(\"The ANALYZE_FOR_ENTRY_COMPONENTS token only supports useValue!\"),t),[]):e.multi?(function(e,t){kr(e,new A_,t)}(e.useValue,i),i.forEach(function(e){var t=n._getEntryComponentMetadata(e.reference,!1);t&&r.push(t)}),r):(this._reportError(jr(\"The ANALYZE_FOR_ENTRY_COMPONENTS token only supports 'multi = true'!\"),t),[])},D_.prototype._getEntryComponentMetadata=function(e,t){void 0===t&&(t=!0);var n=this.getNonNormalizedDirectiveMetadata(e);if(n&&n.metadata.isComponent)return{componentType:e,componentFactory:n.metadata.componentFactory};var r=this._loadSummary(e,E.CompileSummaryKind.Directive);if(r&&r.isComponent)return{componentType:e,componentFactory:r.componentFactory};if(t)throw jr(e.name+\" cannot be used as an entry component.\");return null},D_.prototype._getInjectableTypeMetadata=function(e,t){void 0===t&&(t=null);var n=this._loadSummary(e,E.CompileSummaryKind.Injectable);return n?n.type:this._getTypeMetadata(e,t)},D_.prototype.getProviderMetadata=function(e){var t=void 0,n=null,r=null,i=this._getTokenMetadata(e.token);return e.useClass?(t=(n=this._getInjectableTypeMetadata(e.useClass,e.dependencies)).diDeps,e.token===e.useClass&&(i={identifier:n})):e.useFactory&&(t=(r=this._getFactoryMetadata(e.useFactory,e.dependencies)).diDeps),{token:i,useClass:n,useValue:e.useValue,useFactory:r,useExisting:e.useExisting?this._getTokenMetadata(e.useExisting):void 0,deps:t,multi:e.multi}},D_.prototype._getQueriesMetadata=function(n,r,i){var o=this,a=[];return Object.keys(n).forEach(function(e){var t=n[e];t.isViewQuery===r&&a.push(o._getQueryMetadata(t,e,i))}),a},D_.prototype._queryVarBindings=function(e){return e.split(/\\s*,\\s*/)},D_.prototype._getQueryMetadata=function(e,t,n){var r=this;return{selectors:\"string\"==typeof e.selector?this._queryVarBindings(e.selector).map(function(e){return r._getTokenMetadata(e)}):e.selector?[this._getTokenMetadata(e.selector)]:(this._reportError(jr(\"Can't construct a query for the property \\\"\"+t+'\" of \"'+R_(n)+\"\\\" since the query selector wasn't defined.\"),n),[]),first:e.first,descendants:e.descendants,propertyName:t,read:e.read?this._getTokenMetadata(e.read):null,static:e.static}},D_.prototype._reportError=function(e,t,n){if(!this._errorCollector)throw e;this._errorCollector(e,t),n&&this._errorCollector(e,n)},D_);function D_(e,t,n,r,i,o,a,s,l,u,c,p){this._config=e,this._htmlParser=t,this._ngModuleResolver=n,this._directiveResolver=r,this._pipeResolver=i,this._summaryResolver=o,this._schemaRegistry=a,this._directiveNormalizer=s,this._console=l,this._staticSymbolCache=u,this._reflector=c,this._errorCollector=p,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}function T_(e){return function(e){return e?Array.from(new Set(e)):[]}(function e(t,n){if(void 0===n&&(n=[]),t)for(var r=0;r<t.length;r++){var i=qr(t[r]);Array.isArray(i)?e(i,n):n.push(i)}return n}(e))}function I_(e){return e instanceof pi||e instanceof ie}var P_,A_=(f(M_,P_=Ir),M_.prototype.visitOther=function(e,t){t.push({reference:e})},M_);function M_(){return null!==P_&&P_.apply(this,arguments)||this}function R_(e){return e instanceof pi?e.name+\" in \"+e.filePath:zr(e)}function N_(e,t){var n=0;t.eager||(n|=4096),t.providerType===E.ProviderAstType.PrivateService&&(n|=8192),t.isModule&&(n|=1073741824),t.lifecycleHooks.forEach(function(e){e!==b_.OnDestroy&&t.providerType!==E.ProviderAstType.Directive&&t.providerType!==E.ProviderAstType.Component||(n|=V_(e))});var r=t.multiProvider?function(i,e,t){var o=[],a=[],n=t.map(function(e,t){var n;if(e.useClass){var r=s(t,e.deps||e.useClass.diDeps);n=i.importExpr(e.useClass.reference).instantiate(r)}else if(e.useFactory){r=s(t,e.deps||e.useFactory.diDeps);n=i.importExpr(e.useFactory.reference).callFn(r)}else if(e.useExisting){n=(r=s(t,[{token:e.useExisting}]))[0]}else n=r_(i,e.useValue);return n});return{providerExpr:br(a,[new wn(gr(n))],De),flags:1024|e,depsExpr:gr(o)};function s(r,e){return e.map(function(e,t){var n=\"p\"+r+\"_\"+t;return a.push(new Rt(n,ke)),o.push(L_(i,e)),fr(n)})}}(e,n,t.providers):j_(e,n,t.providerType,t.providers[0]);return{providerExpr:r.providerExpr,flags:r.flags,depsExpr:r.depsExpr,tokenExpr:F_(e,t.token)}}function j_(t,e,n,r){var i,o;return o=n===E.ProviderAstType.Directive||n===E.ProviderAstType.Component?(i=t.importExpr(r.useClass.reference),e|=16384,r.deps||r.useClass.diDeps):r.useClass?(i=t.importExpr(r.useClass.reference),e|=512,r.deps||r.useClass.diDeps):r.useFactory?(i=t.importExpr(r.useFactory.reference),e|=1024,r.deps||r.useFactory.diDeps):r.useExisting?(i=sn,e|=2048,[{token:r.useExisting}]):(i=r_(t,r.useValue),e|=256,[]),{providerExpr:i,flags:e,depsExpr:gr(o.map(function(e){return L_(t,e)}))}}function F_(e,t){return t.identifier?e.importExpr(t.identifier.reference):xr(t.value)}function L_(e,t){var n=t.isValue?r_(e,t.value):F_(e,t.token),r=0;return t.isSkipSelf&&(r|=1),t.isOptional&&(r|=2),t.isSelf&&(r|=4),t.isValue&&(r|=8),0===r?n:gr([xr(r),n])}function V_(e){var t=0;switch(e){case b_.AfterContentChecked:t=2097152;break;case b_.AfterContentInit:t=1048576;break;case b_.AfterViewChecked:t=8388608;break;case b_.AfterViewInit:t=4194304;break;case b_.DoCheck:t=262144;break;case b_.OnChanges:t=524288;break;case b_.OnDestroy:t=131072;break;case b_.OnInit:t=65536}return t}function B_(e,t,n,r){var i=r.map(function(e){return t.importExpr(e.componentFactory)}),o=ci(e,si.ComponentFactoryResolver),a={diDeps:[{isValue:!0,value:gr(i)},{token:o,isSkipSelf:!0,isOptional:!0},{token:ci(e,si.NgModuleRef)}],lifecycleHooks:[],reference:e.resolveExternalReference(si.CodegenComponentFactoryResolver)},s=j_(t,n,E.ProviderAstType.PrivateService,{token:o,multi:!1,useClass:a});return{providerExpr:s.providerExpr,flags:s.flags,depsExpr:s.depsExpr,tokenExpr:F_(t,o)}}var U_=function(e){this.ngModuleFactoryVar=e},z_=fr(\"_l\"),q_=(H_.prototype.compile=function(t,e,n){var r=Ko(\"NgModule\",e.type),i=e.transitiveModule.entryComponents,o=e.bootstrapComponents,a=new Kf(this.reflector,e,n,r),s=[B_(this.reflector,t,0,i)].concat(a.parse().map(function(e){return N_(t,e)})).map(function(e){var t=e.providerExpr,n=e.depsExpr,r=e.flags,i=e.tokenExpr;return mr(si.moduleProviderDef).callFn([xr(r),i,t,n])}),l=mr(si.moduleDef).callFn([gr(s)]),u=br([new Rt(z_.name)],[new wn(l)],De),c=_i(e.type)+\"NgFactory\";if(this._createNgModuleFactory(t,e.type.reference,mr(si.createModuleFactory).callFn([t.importExpr(e.type.reference),gr(o.map(function(e){return t.importExpr(e.reference)})),u])),e.id){var p=\"string\"==typeof e.id?xr(e.id):t.importExpr(e.id),d=mr(si.RegisterModuleFactoryFn).callFn([p,fr(c)]).toStmt();t.statements.push(d)}return new U_(c)},H_.prototype.createStub=function(e,t){this._createNgModuleFactory(e,t,sn)},H_.prototype._createNgModuleFactory=function(e,t,n){var r=fr(_i({reference:t})+\"NgFactory\").set(n).toDeclStmt(vr(si.NgModuleFactory,[yr(e.importExpr(t))],[le.Const]),[E.StmtModifier.Final,E.StmtModifier.Exported]);e.statements.push(r)},H_);function H_(e){this.reflector=e}var W_=(G_.prototype.isNgModule=function(e){return this._reflector.annotations(e).some(Q.isTypeOf)},G_.prototype.resolve=function(e,t){void 0===t&&(t=!0);var n=ig(this._reflector.annotations(e),Q.isTypeOf);if(n)return n;if(t)throw new Error(\"No NgModule metadata found for '\"+zr(e)+\"'.\");return null},G_);function G_(e){this._reflector=e}function Y_(e){var t=new X_,n=Tp.createRoot();return(Array.isArray(e)?e:[e]).forEach(function(e){if(e instanceof un)e.visitStatement(t,n);else if(e instanceof je)e.visitExpression(t,n);else{if(!(e instanceof de))throw new Error(\"Don't know how to print debug info for \"+e);e.visitType(t,n)}}),n.toSource()}var K_=(Z_.prototype.emitStatementsAndContext=function(e,t,n,r,i,o){void 0===n&&(n=\"\"),void 0===r&&(r=!0);var a=new X_(i,o),s=Tp.createRoot();a.visitAllStatements(t,s);var l=n?n.split(\"\\n\"):[];a.reexports.forEach(function(e,t){var n=e.map(function(e){return e.name+\" as \"+e.as}).join(\",\");l.push(\"export {\"+n+\"} from '\"+t+\"';\")}),a.importsWithPrefixes.forEach(function(e,t){l.push(\"import * as \"+e+\" from '\"+t+\"';\")});var u=r?s.toSourceMapGenerator(e,l.length).toJsComment():\"\",c=q(l,[s.toSource(),u]);return u&&c.push(\"\"),s.setPreambleLineCount(l.length),{sourceText:c.join(\"\\n\"),context:s}},Z_.prototype.emitStatements=function(e,t,n){return void 0===n&&(n=\"\"),this.emitStatementsAndContext(e,t,n).sourceText},Z_);function Z_(){}var Q_,X_=(f($_,Q_=Pp),$_.prototype.visitType=function(e,t,n){void 0===n&&(n=\"any\"),e?(this.typeExpression++,e.visitType(this,t),this.typeExpression--):t.print(null,n)},$_.prototype.visitLiteralExpr=function(e,t){var n=e.value;return null==n&&e.type!=De?(t.print(e,\"(\"+n+\" as any)\"),null):Q_.prototype.visitLiteralExpr.call(this,e,t)},$_.prototype.visitLiteralArrayExpr=function(e,t){0===e.entries.length&&t.print(e,\"(\");var n=Q_.prototype.visitLiteralArrayExpr.call(this,e,t);return 0===e.entries.length&&t.print(e,\" as any[])\"),n},$_.prototype.visitExternalExpr=function(e,t){return this._visitIdentifier(e.value,e.typeParams,t),null},$_.prototype.visitAssertNotNullExpr=function(e,t){var n=Q_.prototype.visitAssertNotNullExpr.call(this,e,t);return t.print(e,\"!\"),n},$_.prototype.visitDeclareVarStmt=function(e,t){if(e.hasModifier(E.StmtModifier.Exported)&&e.value instanceof _t&&!e.type){var n=e.value.value,r=n.name,i=n.moduleName;if(i){var o=this.reexports.get(i);return o||(o=[],this.reexports.set(i,o)),o.push({name:r,as:e.name}),null}}return e.hasModifier(E.StmtModifier.Exported)&&t.print(e,\"export \"),e.hasModifier(E.StmtModifier.Final)?t.print(e,\"const\"):t.print(e,\"var\"),t.print(e,\" \"+e.name),this._printColonType(e.type,t),e.value&&(t.print(e,\" = \"),e.value.visitExpression(this,t)),t.println(e,\";\"),null},$_.prototype.visitWrappedNodeExpr=function(e,t){throw new Error(\"Cannot visit a WrappedNodeExpr when outputting Typescript.\")},$_.prototype.visitCastExpr=function(e,t){return t.print(e,\"(<\"),e.type.visitType(this,t),t.print(e,\">\"),e.value.visitExpression(this,t),t.print(e,\")\"),null},$_.prototype.visitInstantiateExpr=function(e,t){return t.print(e,\"new \"),this.typeExpression++,e.classExpr.visitExpression(this,t),this.typeExpression--,t.print(e,\"(\"),this.visitAllExpressions(e.args,t,\",\"),t.print(e,\")\"),null},$_.prototype.visitDeclareClassStmt=function(e,t){var n=this;return t.pushClass(e),e.hasModifier(E.StmtModifier.Exported)&&t.print(e,\"export \"),t.print(e,\"class \"+e.name),null!=e.parent&&(t.print(e,\" extends \"),this.typeExpression++,e.parent.visitExpression(this,t),this.typeExpression--),t.println(e,\" {\"),t.incIndent(),e.fields.forEach(function(e){return n._visitClassField(e,t)}),null!=e.constructorMethod&&this._visitClassConstructor(e,t),e.getters.forEach(function(e){return n._visitClassGetter(e,t)}),e.methods.forEach(function(e){return n._visitClassMethod(e,t)}),t.decIndent(),t.println(e,\"}\"),t.popClass(),null},$_.prototype._visitClassField=function(e,t){e.hasModifier(E.StmtModifier.Private)&&t.print(null,\"/*private*/ \"),e.hasModifier(E.StmtModifier.Static)&&t.print(null,\"static \"),t.print(null,e.name),this._printColonType(e.type,t),e.initializer&&(t.print(null,\" = \"),e.initializer.visitExpression(this,t)),t.println(null,\";\")},$_.prototype._visitClassGetter=function(e,t){e.hasModifier(E.StmtModifier.Private)&&t.print(null,\"private \"),t.print(null,\"get \"+e.name+\"()\"),this._printColonType(e.type,t),t.println(null,\" {\"),t.incIndent(),this.visitAllStatements(e.body,t),t.decIndent(),t.println(null,\"}\")},$_.prototype._visitClassConstructor=function(e,t){t.print(e,\"constructor(\"),this._visitParams(e.constructorMethod.params,t),t.println(e,\") {\"),t.incIndent(),this.visitAllStatements(e.constructorMethod.body,t),t.decIndent(),t.println(e,\"}\")},$_.prototype._visitClassMethod=function(e,t){e.hasModifier(E.StmtModifier.Private)&&t.print(null,\"private \"),t.print(null,e.name+\"(\"),this._visitParams(e.params,t),t.print(null,\")\"),this._printColonType(e.type,t,\"void\"),t.println(null,\" {\"),t.incIndent(),this.visitAllStatements(e.body,t),t.decIndent(),t.println(null,\"}\")},$_.prototype.visitFunctionExpr=function(e,t){return e.name&&(t.print(e,\"function \"),t.print(e,e.name)),t.print(e,\"(\"),this._visitParams(e.params,t),t.print(e,\")\"),this._printColonType(e.type,t,\"void\"),e.name||t.print(e,\" => \"),t.println(e,\"{\"),t.incIndent(),this.visitAllStatements(e.statements,t),t.decIndent(),t.print(e,\"}\"),null},$_.prototype.visitDeclareFunctionStmt=function(e,t){return e.hasModifier(E.StmtModifier.Exported)&&t.print(e,\"export \"),t.print(e,\"function \"+e.name+\"(\"),this._visitParams(e.params,t),t.print(e,\")\"),this._printColonType(e.type,t,\"void\"),t.println(e,\" {\"),t.incIndent(),this.visitAllStatements(e.statements,t),t.decIndent(),t.println(e,\"}\"),null},$_.prototype.visitTryCatchStmt=function(e,t){t.println(e,\"try {\"),t.incIndent(),this.visitAllStatements(e.bodyStmts,t),t.decIndent(),t.println(e,\"} catch (\"+Op.name+\") {\"),t.incIndent();var n=[kp.set(Op.prop(\"stack\",null)).toDeclStmt(null,[E.StmtModifier.Final])].concat(e.catchStmts);return this.visitAllStatements(n,t),t.decIndent(),t.println(e,\"}\"),null},$_.prototype.visitBuiltinType=function(e,t){var n;switch(e.name){case E.BuiltinTypeName.Bool:n=\"boolean\";break;case E.BuiltinTypeName.Dynamic:n=\"any\";break;case E.BuiltinTypeName.Function:n=\"Function\";break;case E.BuiltinTypeName.Number:case E.BuiltinTypeName.Int:n=\"number\";break;case E.BuiltinTypeName.String:n=\"string\";break;case E.BuiltinTypeName.None:n=\"never\";break;default:throw new Error(\"Unsupported builtin type \"+e.name)}return t.print(null,n),null},$_.prototype.visitExpressionType=function(e,t){var n=this;return e.value.visitExpression(this,t),null!==e.typeParams&&(t.print(null,\"<\"),this.visitAllObjects(function(e){return n.visitType(e,t)},e.typeParams,t,\",\"),t.print(null,\">\")),null},$_.prototype.visitArrayType=function(e,t){return this.visitType(e.of,t),t.print(null,\"[]\"),null},$_.prototype.visitMapType=function(e,t){return t.print(null,\"{[key: string]:\"),this.visitType(e.valueType,t),t.print(null,\"}\"),null},$_.prototype.getBuiltinMethodName=function(e){var t;switch(e){case E.BuiltinMethod.ConcatArray:t=\"concat\";break;case E.BuiltinMethod.SubscribeObservable:t=\"subscribe\";break;case E.BuiltinMethod.Bind:t=\"bind\";break;default:throw new Error(\"Unknown builtin method: \"+e)}return t},$_.prototype._visitParams=function(e,t){var n=this;this.visitAllObjects(function(e){t.print(null,e.name),n._printColonType(e.type,t)},e,t,\",\")},$_.prototype._visitIdentifier=function(e,t,n){var r=this,i=e.name,o=e.moduleName;if(this.referenceFilter&&this.referenceFilter(e))n.print(null,\"(null as any)\");else{if(o&&(!this.importFilter||!this.importFilter(e))){var a=this.importsWithPrefixes.get(o);null==a&&(a=\"i\"+this.importsWithPrefixes.size,this.importsWithPrefixes.set(o,a)),n.print(null,a+\".\")}n.print(null,i),0<this.typeExpression&&0<(t||[]).length&&(n.print(null,\"<\"),this.visitAllObjects(function(e){return e.visitType(r,n)},t,n,\",\"),n.print(null,\">\"))}},$_.prototype._printColonType=function(e,t,n){e!==De&&(t.print(null,\":\"),this.visitType(e,t,n))},$_);function $_(e,t){var n=Q_.call(this,!1)||this;return n.referenceFilter=e,n.importFilter=t,n.typeExpression=0,n.importsWithPrefixes=new Map,n.reexports=new Map,n}var J_=(eb.prototype.isPipe=function(e){var t=this._reflector.annotations(qr(e));return t&&t.some(L.isTypeOf)},eb.prototype.resolve=function(e,t){void 0===t&&(t=!0);var n=this._reflector.annotations(qr(e));if(n){var r=ig(n,L.isTypeOf);if(r)return r}if(t)throw new Error(\"No Pipe decorator found on \"+zr(e));return null},eb);function eb(e){this._reflector=e}var tb=(nb.prototype.compileComponent=function(e,r,t,n,i,o){var a=this,s=new Map;n.forEach(function(e){return s.set(e.name,e.type.reference)});var l=0,u=function(e,t){var n=l++;return new ab(a.options,a.reflector,i,e,r.type.reference,r.isHost,n,s,t,o,u)},c=u(null,[]);return c.visitAll([],t),c.build(e)},nb);function nb(e,t){this.options=e,this.reflector=t}var rb=\"_any\";function ib(){}var ob=new(ib.prototype.notifyImplicitReceiverUse=function(){},ib.prototype.getLocal=function(e){return e===Jp.event.name?fr(rb):null},ib),ab=(sb.prototype.getOutputVar=function(e){var t;if(!(t=e===this.component&&this.isHostComponent?rb:e instanceof pi?this.externalReferenceVars.get(e):rb))throw new Error(\"Illegal State: referring to a type without a variable \"+JSON.stringify(e));return t},sb.prototype.getTypeGuardExpressions=function(e){var t,n,r,i,o=q(this.guards);try{for(var a=z(e.directives),s=a.next();!s.done;s=a.next()){var l=s.value;try{for(var u=(r=void 0,z(l.inputs)),c=u.next();!c.done;c=u.next()){var p=c.value,d=l.directive.guards[p.directiveName];if(d){var h=\"UseIf\"===d;o.push({guard:d,useIf:h,expression:{context:this.component,value:p.value}})}}}catch(e){r={error:e}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return o},sb.prototype.visitAll=function(e,t){this.variables=e,Uf(this,t)},sb.prototype.build=function(t,n){var r,e,u=this;void 0===n&&(n=[]),this.children.forEach(function(e){return e.build(t,n)});var c=[fr(rb).set(sn).toDeclStmt(ke)],p=0;if(this.updates.forEach(function(e){var t=u.preprocessUpdateExpression(e),n=t.sourceSpan,r=t.context,i=t.value,o=\"\"+p++,a=ud(r===u.component?u:ob,fr(u.getOutputVar(r)),i,o,id.General),s=a.stmts,l=a.currValExpr;s.push(new gn(l)),c.push.apply(c,q(s.map(function(e){return ur(e,n)})))}),this.actions.forEach(function(e){var t=e.sourceSpan,n=e.context,r=e.value,i=\"\"+p++,o=nd(n===u.component?u:ob,fr(u.getOutputVar(n)),r,i).stmts;c.push.apply(c,q(o.map(function(e){return ur(e,t)})))}),this.guards.length){var i=void 0;try{for(var o=z(this.guards),a=o.next();!a.done;a=o.next()){var s=a.value,l=this.preprocessUpdateExpression(s.expression),d=l.context,h=l.value,f=\"\"+p++,m=ud(d===this.component?this:ob,fr(this.getOutputVar(d)),h,f,id.TrySimple),v=m.stmts,y=m.currValExpr;if(0==v.length){var g=s.useIf?y:this.ctx.importExpr(s.guard).callFn([y]);i=i?i.and(g):g}}}catch(e){r={error:e}}finally{try{a&&!a.done&&(e=o.return)&&e.call(o)}finally{if(r)throw r.error}}i&&(c=[new Ln(i,c)])}var _=\"_View_\"+t+\"_\"+this.embeddedViewIndex,b=new mn(_,[],c);return n.push(b),n},sb.prototype.visitBoundText=function(t,e){var n=this;t.value.ast.expressions.forEach(function(e){return n.updates.push({context:n.component,value:e,sourceSpan:t.sourceSpan})})},sb.prototype.visitEmbeddedTemplate=function(e,t){if(this.visitElementOrTemplate(e),this.options.fullTemplateTypeCheck){var n=this.getTypeGuardExpressions(e),r=this.viewBuilderFactory(this,n);this.children.push(r),r.visitAll(e.variables,e.children)}},sb.prototype.visitElement=function(e,t){var n=this;this.visitElementOrTemplate(e),e.inputs.forEach(function(e){n.updates.push({context:n.component,value:e.value,sourceSpan:e.sourceSpan})}),Uf(this,e.children)},sb.prototype.visitElementOrTemplate=function(e){var n=this;e.directives.forEach(function(e){n.visitDirective(e)}),e.references.forEach(function(e){var t=null;t=e.value&&e.value.identifier&&n.options.fullTemplateTypeCheck?e.value.identifier.reference:E.BuiltinTypeName.Dynamic,n.refOutputVars.set(e.name,t)}),e.outputs.forEach(function(e){n.actions.push({context:n.component,value:e.handler,sourceSpan:e.sourceSpan})})},sb.prototype.visitDirective=function(e){var t=this,n=e.directive.type.reference;e.inputs.forEach(function(e){return t.updates.push({context:t.component,value:e.value,sourceSpan:e.sourceSpan})}),this.options.fullTemplateTypeCheck&&(e.hostProperties.forEach(function(e){return t.updates.push({context:n,value:e.value,sourceSpan:e.sourceSpan})}),e.hostEvents.forEach(function(e){return t.actions.push({context:n,value:e.handler,sourceSpan:e.sourceSpan})}))},sb.prototype.notifyImplicitReceiverUse=function(){},sb.prototype.getLocal=function(t){if(t==Jp.event.name)return fr(this.getOutputVar(E.BuiltinTypeName.Dynamic));for(var e=this;e;e=e.parent){var n=void 0;if(null==(n=e.refOutputVars.get(t))&&e.variables.find(function(e){return e.name===t})&&(n=E.BuiltinTypeName.Dynamic),null!=n)return fr(this.getOutputVar(n))}return null},sb.prototype.pipeOutputVar=function(e){var t=this.pipes.get(e);if(!t)throw new Error(\"Illegal State: Could not find pipe \"+e+\" in template of \"+this.component);return this.getOutputVar(t)},sb.prototype.preprocessUpdateExpression=function(e){var r=this;return{sourceSpan:e.sourceSpan,context:e.context,value:rd({createLiteralArrayConverter:function(e){return function(e){var t=gr(e);return r.options.fullTemplateTypeCheck?t:t.cast(ke)}},createLiteralMapConverter:function(t){return function(n){var e=_r(t.map(function(e,t){return{key:e.key,value:n[t],quoted:e.quoted}}));return r.options.fullTemplateTypeCheck?e:e.cast(ke)}},createPipeConverter:function(t,e){return function(e){return(r.options.fullTemplateTypeCheck?fr(r.pipeOutputVar(t)):fr(r.getOutputVar(E.BuiltinTypeName.Dynamic))).callMethod(\"transform\",e)}}},e.value)}},sb.prototype.visitNgContent=function(e,t){},sb.prototype.visitText=function(e,t){},sb.prototype.visitDirectiveProperty=function(e,t){},sb.prototype.visitReference=function(e,t){},sb.prototype.visitVariable=function(e,t){},sb.prototype.visitEvent=function(e,t){},sb.prototype.visitElementProperty=function(e,t){},sb.prototype.visitAttr=function(e,t){},sb);function sb(e,t,n,r,i,o,a,s,l,u,c){this.options=e,this.reflector=t,this.externalReferenceVars=n,this.parent=r,this.component=i,this.isHostComponent=o,this.embeddedViewIndex=a,this.pipes=s,this.guards=l,this.ctx=u,this.viewBuilderFactory=c,this.refOutputVars=new Map,this.variables=[],this.children=[],this.updates=[],this.actions=[]}var lb=\"class\",ub=\"style\",cb=function(e,t){this.viewClassVar=e,this.rendererTypeVar=t},pb=(db.prototype.compileComponent=function(n,r,e,t,i){var o,a=this,s=0,l=void 0;if(!r.isHost){var u=r.template,c=[];u.animations&&u.animations.length&&c.push(new Xt(\"animation\",r_(n,u.animations),!0));var p=fr(xi(r.type.reference));l=p.name,n.statements.push(p.set(mr(si.createRendererType2).callFn([new en([new Xt(\"encapsulation\",xr(u.encapsulation),!1),new Xt(\"styles\",t,!1),new Xt(\"data\",new en(c),!1)])])).toDeclStmt(vr(si.RendererType2),[E.StmtModifier.Final,E.StmtModifier.Exported]))}var d=function(e){var t=s++;return new _b(a._reflector,n,e,r,t,i,d)},h=d(null);return h.visitAll([],e),(o=n.statements).push.apply(o,q(h.build())),new cb(h.viewName,l)},db);function db(e){this._reflector=e}var hb=fr(\"_l\"),fb=fr(\"_v\"),mb=fr(\"_ck\"),vb=fr(\"_co\"),yb=fr(\"en\"),gb=fr(\"ad\"),_b=(bb.prototype.visitAll=function(e,t){var o=this;this.variables=e,this.parent||this.usedPipes.forEach(function(e){e.pure&&(o.purePipeNodeIndices[e.name]=o._createPipe(null,e))}),this.parent||this.component.viewQueries.forEach(function(e,t){var n=t+1,r=e.first?0:1,i=134217728|Sb(e);o.nodes.push(function(){return{sourceSpan:null,nodeFlags:i,nodeDef:mr(si.queryDef).callFn([xr(i),xr(n),new en([new Xt(e.propertyName,xr(r),!1)])])}})}),Uf(this,t),this.parent&&(0===t.length||function e(t){var n=t[t.length-1];return n instanceof Ef?n.hasViewContainer:n instanceof Cf?W(n.name)&&n.children.length?e(n.children):n.hasViewContainer:n instanceof Rf}(t))&&this.nodes.push(function(){return{sourceSpan:null,nodeFlags:1,nodeDef:mr(si.anchorDef).callFn([xr(0),sn,sn,xr(0)])}})},bb.prototype.build=function(t){void 0===t&&(t=[]),this.children.forEach(function(e){return e.build(t)});var e=this._createNodeExpressions(),n=e.updateRendererStmts,r=e.updateDirectivesStmts,i=e.nodeDefExprs,o=this._createUpdateFn(n),a=this._createUpdateFn(r),s=0;this.parent||this.component.changeDetection!==P.OnPush||(s|=2);var l=new mn(this.viewName,[new Rt(hb.name)],[new wn(mr(si.viewDef).callFn([xr(s),gr(i),a,o]))],vr(si.ViewDefinition),0===this.embeddedViewIndex?[E.StmtModifier.Exported]:[]);return t.push(l),t},bb.prototype._createUpdateFn=function(e){var t;if(0<e.length){var n=[];!this.component.isHost&&nr(e).has(vb.name)&&n.push(vb.set(fb.prop(\"component\")).toDeclStmt(this.compType)),t=br([new Rt(mb.name,De),new Rt(fb.name,De)],q(n,e),De)}else t=sn;return t},bb.prototype.visitNgContent=function(e,t){this.nodes.push(function(){return{sourceSpan:e.sourceSpan,nodeFlags:8,nodeDef:mr(si.ngContentDef).callFn([xr(e.ngContentIndex),xr(e.index)])}})},bb.prototype.visitText=function(e,t){this.nodes.push(function(){return{sourceSpan:e.sourceSpan,nodeFlags:2,nodeDef:mr(si.textDef).callFn([xr(-1),xr(e.ngContentIndex),gr([xr(e.value)])])}})},bb.prototype.visitBoundText=function(n,e){var r=this,i=this.nodes.length;this.nodes.push(null);var t=n.value.ast,o=t.expressions.map(function(e,t){return r._preprocessUpdateExpression({nodeIndex:i,bindingIndex:t,sourceSpan:n.sourceSpan,context:vb,value:e})}),a=i;this.nodes[i]=function(){return{sourceSpan:n.sourceSpan,nodeFlags:2,nodeDef:mr(si.textDef).callFn([xr(a),xr(n.ngContentIndex),gr(t.strings.map(function(e){return xr(e)}))]),updateRenderer:o}}},bb.prototype.visitEmbeddedTemplate=function(e,t){var n=this,r=this.nodes.length;this.nodes.push(null);var i=this._visitElementOrTemplate(r,e),o=i.flags,a=i.queryMatchesExpr,s=i.hostEvents,l=this.viewBuilderFactory(this);this.children.push(l),l.visitAll(e.variables,e.children);var u=this.nodes.length-r-1;this.nodes[r]=function(){return{sourceSpan:e.sourceSpan,nodeFlags:1|o,nodeDef:mr(si.anchorDef).callFn([xr(o),a,xr(e.ngContentIndex),xr(u),n._createElementHandleEventFn(r,s),fr(l.viewName)])}}},bb.prototype.visitElement=function(e,t){var n=this,r=this.nodes.length;this.nodes.push(null);var i=W(e.name)?null:e.name,o=this._visitElementOrTemplate(r,e),a=o.flags,s=o.usedEvents,l=o.queryMatchesExpr,u=o.hostBindings,c=o.hostEvents,p=[],d=[],h=[];if(i){var f=e.inputs.map(function(e){return{context:vb,inputAst:e,dirAst:null}}).concat(u);f.length&&(d=f.map(function(e,t){return n._preprocessUpdateExpression({context:e.context,nodeIndex:r,bindingIndex:t,sourceSpan:e.inputAst.sourceSpan,value:e.inputAst.value})}),p=f.map(function(e){return function(e,t){var n=e.type;switch(n){case 1:return gr([xr(1),xr(e.name),xr(e.securityContext)]);case 0:return gr([xr(8),xr(e.name),xr(e.securityContext)]);case 4:return gr([xr(8|(t&&t.directive.isComponent?32:16)),xr(\"@\"+e.name),xr(e.securityContext)]);case 2:return gr([xr(2),xr(e.name),sn]);case 3:return gr([xr(4),xr(e.name),xr(e.unit)]);default:throw new Error(\"unexpected \"+n)}}(e.inputAst,e.dirAst)})),h=s.map(function(e){var t=U(e,2),n=t[0],r=t[1];return gr([xr(n),xr(r)])})}Uf(this,e.children);var m=this.nodes.length-r-1,v=e.directives.find(function(e){return e.directive.isComponent}),y=sn,g=sn;v&&(g=this.outputCtx.importExpr(v.directive.componentViewType),y=this.outputCtx.importExpr(v.directive.rendererType));var _=r;this.nodes[r]=function(){return{sourceSpan:e.sourceSpan,nodeFlags:1|a,nodeDef:mr(si.elementDef).callFn([xr(_),xr(a),l,xr(e.ngContentIndex),xr(m),xr(i),i?function(e){var i=Object.create(null);return e.attrs.forEach(function(e){i[e.name]=e.value}),e.directives.forEach(function(r){Object.keys(r.directive.hostAttributes).forEach(function(e){var t=r.directive.hostAttributes[e],n=i[e];i[e]=null!=n?function(e,t,n){return e==lb||e==ub?t+\" \"+n:n}(e,n,t):t})}),gr(Object.keys(i).sort().map(function(e){return gr([xr(e),xr(i[e])])}))}(e):sn,p.length?gr(p):sn,h.length?gr(h):sn,n._createElementHandleEventFn(r,c),g,y]),updateRenderer:d}}},bb.prototype._visitElementOrTemplate=function(n,o){var a=this,e=0;o.hasViewContainer&&(e|=16777216);var s=new Map;o.outputs.forEach(function(e){var t=Cb(e,null),n=t.name,r=t.target;s.set(Eb(r,n),[r,n])}),o.directives.forEach(function(i){i.hostEvents.forEach(function(e){var t=Cb(e,i),n=t.name,r=t.target;s.set(Eb(r,n),[r,n])})});var l=[],u=[];this._visitComponentFactoryResolverProvider(o.directives),o.providers.forEach(function(t){var n=void 0;if(o.directives.forEach(function(e){e.directive.type.reference===Oi(t.token)&&(n=e)}),n){var e=a._visitDirective(t,n,o.references,o.queryMatches,s),r=e.hostBindings,i=e.hostEvents;l.push.apply(l,q(r)),u.push.apply(u,q(i))}else a._visitProvider(t,o.queryMatches)});var r=[];return o.queryMatches.forEach(function(e){var t=void 0;Oi(e.value)===a.reflector.resolveExternalReference(si.ElementRef)?t=0:Oi(e.value)===a.reflector.resolveExternalReference(si.ViewContainerRef)?t=3:Oi(e.value)===a.reflector.resolveExternalReference(si.TemplateRef)&&(t=2),null!=t&&r.push(gr([xr(e.queryId),xr(t)]))}),o.references.forEach(function(e){var t=void 0;e.value?Oi(e.value)===a.reflector.resolveExternalReference(si.TemplateRef)&&(t=2):t=1,null!=t&&(a.refNodeIndices[e.name]=n,r.push(gr([xr(e.name),xr(t)])))}),o.outputs.forEach(function(e){u.push({context:vb,eventAst:e,dirAst:null})}),{flags:e,usedEvents:Array.from(s.values()),queryMatchesExpr:r.length?gr(r):sn,hostBindings:l,hostEvents:u}},bb.prototype._visitDirective=function(t,o,e,n,r){var a=this,i=this.nodes.length;this.nodes.push(null),o.directive.queries.forEach(function(e,t){var n=o.contentQueryStartId+t,r=67108864|Sb(e),i=e.first?0:1;a.nodes.push(function(){return{sourceSpan:o.sourceSpan,nodeFlags:r,nodeDef:mr(si.queryDef).callFn([xr(r),xr(n),new en([new Xt(e.propertyName,xr(i),!1)])])}})});var s=this.nodes.length-i-1,l=this._visitProviderOrDirective(t,n),u=l.flags,c=l.queryMatchExprs,p=l.providerExpr,d=l.depsExpr;e.forEach(function(e){e.value&&Oi(e.value)===Oi(t.token)&&(a.refNodeIndices[e.name]=i,c.push(gr([xr(e.name),xr(4)])))}),o.directive.isComponent&&(u|=32768);var h=o.inputs.map(function(e,t){var n=gr([xr(t),xr(e.directiveName)]);return new Xt(e.directiveName,n,!1)}),f=[],m=o.directive;Object.keys(m.outputs).forEach(function(e){var t=m.outputs[e];r.has(t)&&f.push(new Xt(e,xr(t),!1))});var v=[];(o.inputs.length||0<(327680&u))&&(v=o.inputs.map(function(e,t){return a._preprocessUpdateExpression({nodeIndex:i,bindingIndex:t,sourceSpan:e.sourceSpan,context:vb,value:e.value})}));var y=mr(si.nodeValue).callFn([fb,xr(i)]),g=o.hostProperties.map(function(e){return{context:y,dirAst:o,inputAst:e}}),_=o.hostEvents.map(function(e){return{context:y,eventAst:e,dirAst:o}}),b=i;return this.nodes[i]=function(){return{sourceSpan:o.sourceSpan,nodeFlags:16384|u,nodeDef:mr(si.directiveDef).callFn([xr(b),xr(u),c.length?gr(c):sn,xr(s),p,d,h.length?new en(h):sn,f.length?new en(f):sn]),updateDirectives:v,directive:o.directive.type}},{hostBindings:g,hostEvents:_}},bb.prototype._visitProvider=function(e,t){this._addProviderNode(this._visitProviderOrDirective(e,t))},bb.prototype._visitComponentFactoryResolverProvider=function(e){var t=e.find(function(e){return e.directive.isComponent});if(t&&t.directive.entryComponents.length){var n=B_(this.reflector,this.outputCtx,8192,t.directive.entryComponents),r=n.providerExpr,i=n.depsExpr,o=n.flags,a=n.tokenExpr;this._addProviderNode({providerExpr:r,depsExpr:i,flags:o,tokenExpr:a,queryMatchExprs:[],sourceSpan:t.sourceSpan})}},bb.prototype._addProviderNode=function(e){this.nodes.push(function(){return{sourceSpan:e.sourceSpan,nodeFlags:e.flags,nodeDef:mr(si.providerDef).callFn([xr(e.flags),e.queryMatchExprs.length?gr(e.queryMatchExprs):sn,e.tokenExpr,e.providerExpr,e.depsExpr])}})},bb.prototype._visitProviderOrDirective=function(t,e){var n=[];e.forEach(function(e){Oi(e.value)===Oi(t.token)&&n.push(gr([xr(e.queryId),xr(4)]))});var r=N_(this.outputCtx,t),i=r.providerExpr,o=r.depsExpr,a=r.flags,s=r.tokenExpr;return{flags:0|a,queryMatchExprs:n,providerExpr:i,depsExpr:o,tokenExpr:s,sourceSpan:t.sourceSpan}},bb.prototype.getLocal=function(t){if(t==Jp.event.name)return Jp.event;for(var e=fb,n=this;n;n=n.parent,e=e.prop(\"parent\").cast(ke)){var r=n.refNodeIndices[t];if(null!=r)return mr(si.nodeValue).callFn([e,xr(r)]);var i=n.variables.find(function(e){return e.name===t});if(i){var o=i.value||\"$implicit\";return e.prop(\"context\").prop(o)}}return null},bb.prototype.notifyImplicitReceiverUse=function(){},bb.prototype._createLiteralArrayConverter=function(e,t){if(0===t){var n=mr(si.EMPTY_ARRAY);return function(){return n}}var r=this.nodes.length;return this.nodes.push(function(){return{sourceSpan:e,nodeFlags:32,nodeDef:mr(si.pureArrayDef).callFn([xr(r),xr(t)])}}),function(e){return wb(r,e)}},bb.prototype._createLiteralMapConverter=function(e,t){if(0===t.length){var n=mr(si.EMPTY_MAP);return function(){return n}}var r=_r(t.map(function(e,t){return m(m({},e),{value:xr(t)})})),i=this.nodes.length;return this.nodes.push(function(){return{sourceSpan:e,nodeFlags:64,nodeDef:mr(si.pureObjectDef).callFn([xr(i),r])}}),function(e){return wb(i,e)}},bb.prototype._createPipeConverter=function(t,n,e){var r=this.usedPipes.find(function(e){return e.name===n});if(r.pure){var i=this.nodes.length;this.nodes.push(function(){return{sourceSpan:t.sourceSpan,nodeFlags:128,nodeDef:mr(si.purePipeDef).callFn([xr(i),xr(e)])}});for(var o=fb,a=this;a.parent;)a=a.parent,o=o.prop(\"parent\").cast(ke);var s=a.purePipeNodeIndices[n],l=mr(si.nodeValue).callFn([o,xr(s)]);return function(e){return xb(t.nodeIndex,t.bindingIndex,wb(i,[l].concat(e)))}}var u=this._createPipe(t.sourceSpan,r),c=mr(si.nodeValue).callFn([fb,xr(u)]);return function(e){return xb(t.nodeIndex,t.bindingIndex,c.callMethod(\"transform\",e))}},bb.prototype._createPipe=function(e,t){var n=this,r=this.nodes.length,i=0;t.type.lifecycleHooks.forEach(function(e){e===b_.OnDestroy&&(i|=V_(e))});var o=t.type.diDeps.map(function(e){return L_(n.outputCtx,e)});return this.nodes.push(function(){return{sourceSpan:e,nodeFlags:16,nodeDef:mr(si.pipeDef).callFn([xr(i),n.outputCtx.importExpr(t.type.reference),gr(o)])}}),r},bb.prototype._preprocessUpdateExpression=function(n){var r=this;return{nodeIndex:n.nodeIndex,bindingIndex:n.bindingIndex,sourceSpan:n.sourceSpan,context:n.context,value:rd({createLiteralArrayConverter:function(e){return r._createLiteralArrayConverter(n.sourceSpan,e)},createLiteralMapConverter:function(e){return r._createLiteralMapConverter(n.sourceSpan,e)},createPipeConverter:function(e,t){return r._createPipeConverter(n,e,t)}},n.value)}},bb.prototype._createNodeExpressions=function(){var u=this,c=0,l=[],p=[],e=this.nodes.map(function(e,t){var n=e(),r=n.nodeDef,i=n.nodeFlags,o=n.updateDirectives,a=n.updateRenderer,s=n.sourceSpan;return a&&l.push.apply(l,q(d(t,s,a,!1))),o&&p.push.apply(p,q(d(t,s,o,0<(327680&i)))),cr(3&i?new rn([hb.callFn([]).callFn([]),r]):r,s)});return{updateRendererStmts:l,updateDirectivesStmts:p,nodeDefExprs:e};function d(e,t,n,r){var l=[],i=n.map(function(e){var t=e.sourceSpan,n=e.context,r=e.value,i=\"\"+c++,o=ud(n===vb?u:null,n,r,i,id.General),a=o.stmts,s=o.currValExpr;return l.push.apply(l,q(a.map(function(e){return ur(e,t)}))),cr(s,t)});return(n.length||r)&&l.push(ur(wb(e,i).toStmt(),t)),l}},bb.prototype._createElementHandleEventFn=function(e,t){var n,p=this,d=[],h=0;if(t.forEach(function(e){var t=e.context,n=e.eventAst,r=e.dirAst,i=\"\"+h++,o=nd(t===vb?p:null,t,n.handler,i),a=o.stmts,s=o.allowDefault,l=a;s&&l.push(gb.set(s.and(gb)).toStmt());var u=Cb(n,r),c=Eb(u.target,u.name);d.push(ur(new Ln(xr(c).identical(yb),l),n.sourceSpan))}),0<d.length){var r=[gb.set(xr(!0)).toDeclStmt(Te)];!this.component.isHost&&nr(d).has(vb.name)&&r.push(vb.set(fb.prop(\"component\")).toDeclStmt(this.compType)),n=br([new Rt(fb.name,De),new Rt(yb.name,De),new Rt(Jp.event.name,De)],q(r,d,[new wn(gb)]),De)}else n=sn;return n},bb.prototype.visitDirective=function(e,t){},bb.prototype.visitDirectiveProperty=function(e,t){},bb.prototype.visitReference=function(e,t){},bb.prototype.visitVariable=function(e,t){},bb.prototype.visitEvent=function(e,t){},bb.prototype.visitElementProperty=function(e,t){},bb.prototype.visitAttr=function(e,t){},bb);function bb(e,t,n,r,i,o,a){this.reflector=e,this.outputCtx=t,this.parent=n,this.component=r,this.embeddedViewIndex=i,this.usedPipes=o,this.viewBuilderFactory=a,this.nodes=[],this.purePipeNodeIndices=Object.create(null),this.refNodeIndices=Object.create(null),this.variables=[],this.children=[],this.compType=0<this.embeddedViewIndex?ke:yr(t.importExpr(this.component.type.reference)),this.viewName=wi(this.component.type.reference,this.embeddedViewIndex)}function wb(e,t){return 10<t.length?mb.callFn([fb,xr(e),xr(1),gr(t)]):mb.callFn(q([fb,xr(e),xr(0)],t))}function xb(e,t,n){return mr(si.unwrapValue).callFn([fb,xr(e),xr(t),n])}function Cb(e,t){return e.isAnimation?{name:\"@\"+e.name+\".\"+e.phase,target:t&&t.directive.isComponent?\"component\":null}:e}function Sb(e){var t=0;return e.first&&e.static?t|=268435456:t|=536870912,t}function Eb(e,t){return e?e+\":\"+t:t}var Ob=(kb.prototype.updateFromTemplate=function(e,t,n){var r,i=this._htmlParser.parse(e,t,{tokenizeExpansionForms:!0,interpolationConfig:n});if(i.errors.length)return i.errors;var o=function(e,t,n,r){return new fg(n,r).extract(e,t)}(i.rootNodes,n,this._implicitTags,this._implicitAttrs);return o.errors.length?o.errors:((r=this._messages).push.apply(r,q(o.messages)),[])},kb.prototype.getMessages=function(){return this._messages},kb.prototype.write=function(o,a){var s={},l=new Tb;this._messages.forEach(function(e){var t,n=o.digest(e);s.hasOwnProperty(n)?(t=s[n].sources).push.apply(t,q(e.sources)):s[n]=e});var e=Object.keys(s).map(function(e){var t=o.createNameMapper(s[e]),n=s[e],r=t?l.convert(n.nodes,t):n.nodes,i=new Sa(r,{},{},n.meaning,n.description,e);return i.sources=n.sources,a&&i.sources.forEach(function(e){return e.filePath=a(e.filePath)}),i});return o.write(e,this._locale)},kb);function kb(e,t,n,r){void 0===r&&(r=null),this._htmlParser=e,this._implicitTags=t,this._implicitAttrs=n,this._locale=r,this._messages=[]}var Db,Tb=(f(Ib,Db=Fa),Ib.prototype.convert=function(e,t){var n=this;return t?e.map(function(e){return e.visit(n,t)}):e},Ib.prototype.visitTagPlaceholder=function(e,t){var n=this,r=t.toPublicName(e.startName),i=e.closeName?t.toPublicName(e.closeName):e.closeName,o=e.children.map(function(e){return e.visit(n,t)});return new Pa(e.tag,e.attrs,r,i,o,e.isVoid,e.sourceSpan)},Ib.prototype.visitPlaceholder=function(e,t){return new Ma(e.value,t.toPublicName(e.name),e.sourceSpan)},Ib.prototype.visitIcuPlaceholder=function(e,t){return new Na(e.value,t.toPublicName(e.name),e.sourceSpan)},Ib);function Ib(){return null!==Db&&Db.apply(this,arguments)||this}var Pb=(Ab.prototype.isEquivalent=function(e){return this.genFileUrl===e.genFileUrl&&(this.source?this.source===e.source:null!=e.stmts&&Re(this.stmts,e.stmts))},Ab);function Ab(e,t,n){this.srcFileUrl=e,this.genFileUrl=t,\"string\"==typeof n?(this.source=n,this.stmts=null):(this.source=null,this.stmts=n)}function Mb(e,t){var n,r,i,o,a=[];try{for(var s=z(e.transitiveModule.providers),l=s.next();!l.done;l=s.next()){var u=l.value,c=u.provider,p=u.module;if(Oi(c.token)===t.ROUTES){var d=Rb(c.useValue);try{for(var h=(i=void 0,z(d)),f=h.next();!f.done;f=h.next()){var m=f.value;a.push(Nb(m,t,p.reference))}}catch(e){i={error:e}}finally{try{f&&!f.done&&(o=h.return)&&o.call(h)}finally{if(i)throw i.error}}}}}catch(e){n={error:e}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}return a}function Rb(e,t){var n,r;if(void 0===t&&(t=[]),\"string\"==typeof e)t.push(e);else if(Array.isArray(e))try{for(var i=z(e),o=i.next();!o.done;o=i.next()){Rb(o.value,t)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}else e.loadChildren?Rb(e.loadChildren,t):e.children&&Rb(e.children,t);return t}function Nb(e,t,n){var r=U(e.split(\"#\"),2),i=r[0],o=r[1],a=t.resolveExternalReference({moduleName:i,name:o},n?n.filePath:void 0);return{route:e,module:n||a,referencedModule:a}}var jb=/^(?!.*\\.d\\.ts$).*\\.ts$/,Fb=function(e,t){this.symbol=e,this.metadata=t},Lb=(Vb.prototype.resolveSymbol=function(e){if(0<e.members.length)return this._resolveSymbolMembers(e);var t=this._resolveSymbolFromSummary(e);if(t)return t;var n=this.resolvedSymbols.get(e);return n||(this._createSymbolsOf(e.filePath),this.resolvedSymbols.get(e))},Vb.prototype.getImportAs=function(e,t){if(void 0===t&&(t=!0),e.members.length){var n=this.getStaticSymbol(e.filePath,e.name);return(i=this.getImportAs(n,t))?this.getStaticSymbol(i.filePath,i.name,e.members):null}var r=function(e){return e.replace(p_,\".\")}(e.filePath);if(r!==e.filePath){var i,o=function(e){return e.replace(d_,\"\")}(e.name);return n=this.getStaticSymbol(r,o,e.members),(i=this.getImportAs(n,t))?this.getStaticSymbol(g_(i.filePath),__(i.name),n.members):null}var a=t&&this.summaryResolver.getImportAs(e)||null;return a=a||this.importAs.get(e)},Vb.prototype.getResourcePath=function(e){return this.symbolResourcePaths.get(e)||e.filePath},Vb.prototype.getTypeArity=function(e){if(function(e){return c_.test(e)}(e.filePath))return null;for(var t=Ub(this.resolveSymbol(e));t&&t.metadata instanceof pi;)t=Ub(this.resolveSymbol(t.metadata));return t&&t.metadata&&t.metadata.arity||null},Vb.prototype.getKnownModuleName=function(e){return this.knownFileNameToModuleNames.get(e)||null},Vb.prototype.recordImportAs=function(e,t){e.assertNoMembers(),t.assertNoMembers(),this.importAs.set(e,t)},Vb.prototype.recordModuleNameForFileName=function(e,t){this.knownFileNameToModuleNames.set(e,t)},Vb.prototype.invalidateFile=function(e){var t,n;this.metadataCache.delete(e);var r=this.symbolFromFile.get(e);if(!r)return[];this.symbolFromFile.delete(e);try{for(var i=z(r),o=i.next();!o.done;o=i.next()){var a=o.value;this.resolvedSymbols.delete(a),this.importAs.delete(a),this.symbolResourcePaths.delete(a)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r},Vb.prototype.ignoreErrorsFor=function(e){var t=this.errorRecorder;this.errorRecorder=function(){};try{return e()}finally{this.errorRecorder=t}},Vb.prototype._resolveSymbolMembers=function(e){var t=e.members,n=this.resolveSymbol(this.getStaticSymbol(e.filePath,e.name));if(!n)return null;var r=Ub(n.metadata);if(r instanceof pi)return new Fb(e,this.getStaticSymbol(r.filePath,r.name,t));if(r&&\"class\"===r.__symbolic)return r.statics&&1===t.length?new Fb(e,r.statics[t[0]]):null;for(var i=r,o=0;o<t.length&&i;o++)i=i[t[o]];return new Fb(e,i)},Vb.prototype._resolveSymbolFromSummary=function(e){var t=this.summaryResolver.resolveSummary(e);return t?new Fb(e,t.metadata):null},Vb.prototype.getStaticSymbol=function(e,t,n){return this.staticSymbolCache.get(e,t,n)},Vb.prototype.hasDecorators=function(e){var n=this.getModuleMetadata(e);return!!n.metadata&&Object.keys(n.metadata).some(function(e){var t=n.metadata[e];return t&&\"class\"===t.__symbolic&&t.decorators})},Vb.prototype.getSymbolsOf=function(e){var t=this.summaryResolver.getSymbolsOf(e);return t||(this._createSymbolsOf(e),this.symbolFromFile.get(e)||[])},Vb.prototype._createSymbolsOf=function(s){var t,e,n,r,l=this;if(!this.symbolFromFile.has(s)){var u=[],a=this.getModuleMetadata(s);if(a.importAs&&this.knownFileNameToModuleNames.set(s,a.importAs),a.exports){var i=function(a){if(a.export)a.export.forEach(function(e){var t,n=t=Bb(t=\"string\"==typeof e?e:e.as);\"string\"!=typeof e&&(n=Bb(e.name));var r=l.resolveModule(a.from,s);if(r){var i=l.getStaticSymbol(r,n),o=l.getStaticSymbol(s,t);u.push(l.createExport(o,i))}});else{var e=o.resolveModule(a.from,s);e&&o.getSymbolsOf(e).forEach(function(e){var t=l.getStaticSymbol(s,e.name);u.push(l.createExport(t,e))})}},o=this;try{for(var c=z(a.exports),p=c.next();!p.done;p=c.next())i(p.value)}catch(e){t={error:e}}finally{try{p&&!p.done&&(e=c.return)&&e.call(c)}finally{if(t)throw t.error}}}if(a.metadata){var d=new Set(Object.keys(a.metadata).map(Bb)),h=a.origins||{};Object.keys(a.metadata).forEach(function(e){var t=a.metadata[e],n=Bb(e),r=l.getStaticSymbol(s,n),i=h.hasOwnProperty(e)&&h[e];if(i){var o=l.resolveModule(i,s);o?l.symbolResourcePaths.set(r,o):l.reportError(new Error(\"Couldn't resolve original symbol for \"+i+\" from \"+l.host.getOutputName(s)))}u.push(l.createResolvedSymbol(r,s,d,t))})}var f=new Set;try{for(var m=z(u),v=m.next();!v.done;v=m.next()){var y=v.value;this.resolvedSymbols.set(y.symbol,y),f.add(y.symbol)}}catch(e){n={error:e}}finally{try{v&&!v.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}this.symbolFromFile.set(s,Array.from(f))}},Vb.prototype.createResolvedSymbol=function(l,u,c,e){var t,n=this,r=jb.test(l.filePath);if(this.summaryResolver.isLibraryFile(l.filePath)&&!r&&e&&\"class\"===e.__symbolic){var i={__symbolic:\"class\",arity:e.arity};return new Fb(l,i)}function p(){return t=t||n.host.getOutputName(u.replace(/((\\.ts)|(\\.d\\.ts)|)$/,\".ts\").replace(/^.*node_modules[/\\\\]/,\"\"))}var d,h=this;function o(){return null!==d&&d.apply(this,arguments)||this}var a=kr(e,(f(o,d=Ir),o.prototype.visitStringMap=function(e,t){var n=e.__symbolic;if(\"function\"===n){var r=t.length;t.push.apply(t,q(e.parameters||[]));var i=d.prototype.visitStringMap.call(this,e,t);return t.length=r,i}if(\"reference\"!==n)return\"error\"===n?m(m({},e),{fileName:p()}):d.prototype.visitStringMap.call(this,e,t);var o=e.module,a=e.name?Bb(e.name):e.name;if(!a)return null;var s=void 0;return o?(s=h.resolveModule(o,l.filePath))?{__symbolic:\"resolved\",symbol:h.getStaticSymbol(s,a),line:e.line,character:e.character,fileName:p()}:{__symbolic:\"error\",message:\"Could not resolve \"+o+\" relative to \"+h.host.getMetadataFor(l.filePath)+\".\",line:e.line,character:e.character,fileName:p()}:0<=t.indexOf(a)?{__symbolic:\"reference\",name:a}:c.has(a)?h.getStaticSymbol(u,a):void 0},new o),[]),s=Ub(a);return s instanceof pi?this.createExport(l,s):new Fb(l,a)},Vb.prototype.createExport=function(e,t){return e.assertNoMembers(),t.assertNoMembers(),this.summaryResolver.isLibraryFile(e.filePath)&&this.summaryResolver.isLibraryFile(t.filePath)&&this.importAs.set(t,this.getImportAs(e)||e),new Fb(e,t)},Vb.prototype.reportError=function(e,t,n){if(!this.errorRecorder)throw e;this.errorRecorder(e,t&&t.filePath||n)},Vb.prototype.getModuleMetadata=function(e){var t=this.metadataCache.get(e);if(!t){var n=this.host.getMetadataFor(e);if(n){var r=-1;n.forEach(function(e){e&&e.version>r&&(r=e.version,t=e)})}if(4!=(t=t||{__symbolic:\"module\",version:4,module:e,metadata:{}}).version){var i=2==t.version?\"Unsupported metadata version \"+t.version+\" for module \"+e+\". This module should be compiled with a newer version of ngc\":\"Metadata version mismatch for module \"+this.host.getOutputName(e)+\", found version \"+t.version+\", expected 4\";this.reportError(new Error(i))}this.metadataCache.set(e,t)}return t},Vb.prototype.getSymbolByModule=function(e,t,n){var r=this.resolveModule(e,n);return r?this.getStaticSymbol(r,t):(this.reportError(new Error(\"Could not resolve module \"+e+(n?\" relative to \"+this.host.getOutputName(n):\"\"))),this.getStaticSymbol(\"ERROR:\"+e,t))},Vb.prototype.resolveModule=function(t,n){try{return this.host.moduleNameToFileName(t,n)}catch(e){console.error(\"Could not resolve module '\"+t+\"' relative to file \"+n),this.reportError(e,void 0,n)}return null},Vb);function Vb(e,t,n,r){this.host=e,this.staticSymbolCache=t,this.summaryResolver=n,this.errorRecorder=r,this.metadataCache=new Map,this.resolvedSymbols=new Map,this.importAs=new Map,this.symbolResourcePaths=new Map,this.symbolFromFile=new Map,this.knownFileNameToModuleNames=new Map}function Bb(e){return e.startsWith(\"___\")?e.substr(1):e}function Ub(e){return e&&\"resolved\"===e.__symbolic?e.symbol:e}function zb(e,t,n){var r=__(t.name);e.statements.push(br([],[new wn(n)],new we(ke)).toDeclStmt(r,[E.StmtModifier.Final,E.StmtModifier.Exported]))}var qb,Hb=(f(Wb,qb=Ir),Wb.prototype.addSummary=function(e){var r=this,t=this.unprocessedSymbolSummariesBySymbol.get(e.symbol),n=this.processedSummaryBySymbol.get(e.symbol);if(t||(t={symbol:e.symbol,metadata:void 0},this.unprocessedSymbolSummariesBySymbol.set(e.symbol,t),n={symbol:this.processValue(e.symbol,0)},this.processedSummaries.push(n),this.processedSummaryBySymbol.set(e.symbol,n)),!t.metadata&&e.metadata){var i=e.metadata||{};if(\"class\"===i.__symbolic){var o={};Object.keys(i).forEach(function(e){\"decorators\"!==e&&(o[e]=i[e])}),i=o}else Xb(i)&&(function(e){return Xb(e)&&Ub(e.expression)instanceof pi}(i)||function(e){return Xb(e)&&e.expression&&\"select\"===e.expression.__symbolic&&Ub(e.expression.expression)instanceof pi}(i)||(i={__symbolic:\"error\",message:\"Complex function calls are not supported.\"}));if(t.metadata=i,n.metadata=this.processValue(i,1),i instanceof pi&&this.summaryResolver.isLibraryFile(i.filePath)){var a=this.symbols[this.indexBySymbol.get(i)];C_(a.name)||this.reexportedBy.set(a,e.symbol)}}if(!t.type&&e.type&&(t.type=e.type,n.type=this.processValue(e.type,0),e.type.summaryKind===E.CompileSummaryKind.NgModule)){var s=e.type;s.exportedDirectives.concat(s.exportedPipes).forEach(function(e){var t=e.reference;if(r.summaryResolver.isLibraryFile(t.filePath)&&!r.unprocessedSymbolSummariesBySymbol.has(t)){var n=r.summaryResolver.resolveSummary(t);n&&r.addSummary(n)}})}},Wb.prototype.serialize=function(o){var a=this,s=[];return{json:JSON.stringify({moduleName:this.moduleName,summaries:this.processedSummaries,symbols:this.symbols.map(function(e,t){e.assertNoMembers();var n=void 0;if(a.summaryResolver.isLibraryFile(e.filePath)){var r=a.reexportedBy.get(e);if(r)n=a.indexBySymbol.get(r);else if(o){var i=a.unprocessedSymbolSummariesBySymbol.get(e);i&&i.metadata&&\"interface\"===i.metadata.__symbolic||(n=e.name+\"_\"+t,s.push({symbol:e,exportAs:n}))}}return{__symbol:t,name:e.name,filePath:a.summaryResolver.toSummaryFileName(e.filePath,a.srcFileName),importAs:n}})}),exportAs:s}},Wb.prototype.processValue=function(e,t){return kr(e,this,t)},Wb.prototype.visitOther=function(e,t){if(e instanceof pi){var n=this.symbolResolver.getStaticSymbol(e.filePath,e.name);return{__symbol:this.visitStaticSymbol(n,t),members:e.members}}},Wb.prototype.visitStringMap=function(e,t){return\"resolved\"===e.__symbolic?kr(e.symbol,this,t):(\"error\"===e.__symbolic&&(delete e.line,delete e.character),qb.prototype.visitStringMap.call(this,e,t))},Wb.prototype.visitStaticSymbol=function(e,t){var n=this.indexBySymbol.get(e),r=null;if(1&t&&this.summaryResolver.isLibraryFile(e.filePath)){if(this.unprocessedSymbolSummariesBySymbol.has(e))return n;(r=this.loadSummary(e))&&r.metadata instanceof pi&&(n=this.visitStaticSymbol(r.metadata,t),r=null)}else if(null!=n)return n;return null==n&&(n=this.symbols.length,this.symbols.push(e)),this.indexBySymbol.set(e,n),r&&this.addSummary(r),n},Wb.prototype.loadSummary=function(e){var t=this.summaryResolver.resolveSummary(e);if(!t){var n=this.symbolResolver.resolveSymbol(e);n&&(t={symbol:n.symbol,metadata:n.metadata})}return t},Wb);function Wb(e,t,n){var r=qb.call(this)||this;return r.symbolResolver=e,r.summaryResolver=t,r.srcFileName=n,r.symbols=[],r.indexBySymbol=new Map,r.reexportedBy=new Map,r.processedSummaryBySymbol=new Map,r.processedSummaries=[],r.unprocessedSymbolSummariesBySymbol=new Map,r.moduleName=e.getKnownModuleName(n),r}var Gb=(Yb.prototype.addSourceType=function(e,t){this.data.push({summary:e,metadata:t,isLibrary:!1})},Yb.prototype.addLibType=function(e){this.data.push({summary:e,metadata:null,isLibrary:!0})},Yb.prototype.serialize=function(e){var t,n,r,i,o,a,s=this,l=new Map;try{for(var u=z(e),c=u.next();!c.done;c=u.next()){var p=c.value,d=p.symbol,h=p.exportAs;l.set(d,h)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(n=u.return)&&n.call(u)}finally{if(t)throw t.error}}var f=new Set;try{for(var m=z(this.data),v=m.next();!v.done;v=m.next()){var y=v.value,g=y.summary,_=y.metadata,b=y.isLibrary;if(g.summaryKind===E.CompileSummaryKind.NgModule){f.add(g.type.reference);var w=g;try{for(var x=(o=void 0,z(w.modules)),C=x.next();!C.done;C=x.next()){var S=C.value;f.add(S.reference)}}catch(e){o={error:e}}finally{try{C&&!C.done&&(a=x.return)&&a.call(x)}finally{if(o)throw o.error}}}b||(__(g.type.reference.name),zb(this.outputCtx,g.type.reference,this.serializeSummaryWithDeps(g,_)))}}catch(e){r={error:e}}finally{try{v&&!v.done&&(i=m.return)&&i.call(m)}finally{if(r)throw r.error}}f.forEach(function(e){if(s.summaryResolver.isLibraryFile(e.filePath)){var t=__(l.get(e)||e.name);s.outputCtx.statements.push(fr(t).set(s.serializeSummaryRef(e)).toDeclStmt(null,[E.StmtModifier.Exported]))}})},Yb.prototype.serializeSummaryWithDeps=function(e,t){var n=this,r=[this.serializeSummary(e)],i=[];if(t instanceof Ni)r.push.apply(r,q(t.declaredDirectives.concat(t.declaredPipes).map(function(e){return e.reference}).concat(t.transitiveModule.modules.map(function(e){return e.reference}).filter(function(e){return e!==t.type.reference})).map(function(e){return n.serializeSummaryRef(e)}))),i=t.providers;else if(e.summaryKind===E.CompileSummaryKind.Directive){var o=e;i=o.providers.concat(o.viewProviders)}return r.push.apply(r,q(i.filter(function(e){return!!e.useClass}).map(function(e){return n.serializeSummary({summaryKind:E.CompileSummaryKind.Injectable,type:e.useClass})}))),gr(r)},Yb.prototype.serializeSummaryRef=function(e){var t=this.symbolResolver.getStaticSymbol(g_(e.filePath),__(e.name));return this.outputCtx.importExpr(t)},Yb.prototype.serializeSummary=function(e){var n=this.outputCtx;function t(){}return kr(e,(t.prototype.visitArray=function(e,t){var n=this;return gr(e.map(function(e){return kr(e,n,t)}))},t.prototype.visitStringMap=function(t,n){var r=this;return new en(Object.keys(t).map(function(e){return new Xt(e,kr(t[e],r,n),!1)}))},t.prototype.visitPrimitive=function(e,t){return xr(e)},t.prototype.visitOther=function(e,t){if(e instanceof pi)return n.importExpr(e);throw new Error(\"Illegal State: Encountered value \"+e)},new t),null)},Yb);function Yb(e,t,n){this.outputCtx=e,this.symbolResolver=t,this.summaryResolver=n,this.data=[]}var Kb,Zb=(f(Qb,Kb=Ir),Qb.prototype.deserialize=function(i,e){var o=this,t=JSON.parse(e),a=[];this.symbols=t.symbols.map(function(e){return o.symbolCache.get(o.summaryResolver.fromSummaryFileName(e.filePath,i),e.name)}),t.symbols.forEach(function(e,t){var n=o.symbols[t],r=e.importAs;\"number\"==typeof r?a.push({symbol:n,importAs:o.symbols[r]}):\"string\"==typeof r&&a.push({symbol:n,importAs:o.symbolCache.get(h_(i),r)})});var n=kr(t.summaries,this,null);return{moduleName:t.moduleName,summaries:n,importAs:a}},Qb.prototype.visitStringMap=function(e,t){if(\"__symbol\"in e){var n=this.symbols[e.__symbol],r=e.members;return r.length?this.symbolCache.get(n.filePath,n.name,r):n}return Kb.prototype.visitStringMap.call(this,e,t)},Qb);function Qb(e,t){var n=Kb.call(this)||this;return n.symbolCache=e,n.summaryResolver=t,n}function Xb(e){return e&&\"call\"===e.__symbolic}var $b=(Jb.prototype.clearCache=function(){this._metadataResolver.clearCache()},Jb.prototype.analyzeModulesSync=function(e){var t=this,n=iw(e,this._host,this._symbolResolver,this._metadataResolver);return n.ngModules.forEach(function(e){return t._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(e.type.reference,!0)}),n},Jb.prototype.analyzeModulesAsync=function(e){var t=this,n=iw(e,this._host,this._symbolResolver,this._metadataResolver);return Promise.all(n.ngModules.map(function(e){return t._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(e.type.reference,!1)})).then(function(){return n})},Jb.prototype._analyzeFile=function(e){var t=this._analyzedFiles.get(e);return t||(t=aw(this._host,this._symbolResolver,this._metadataResolver,e),this._analyzedFiles.set(e,t)),t},Jb.prototype._analyzeFileForInjectables=function(e){var t=this._analyzedFilesForInjectables.get(e);return t||(t=sw(this._host,this._symbolResolver,this._metadataResolver,e),this._analyzedFilesForInjectables.set(e,t)),t},Jb.prototype.findGeneratedFileNames=function(e){var i=this,o=[],a=this._analyzeFile(e);(this._options.allowEmptyCodegenFiles||a.directives.length||a.pipes.length||a.injectables.length||a.ngModules.length||a.exportsNonSourceFiles)&&(o.push(h_(a.fileName,!0)),this._options.enableSummariesForJit&&o.push(g_(a.fileName,!0)));var s=v_(m_(a.fileName,!0)[1]);return a.directives.forEach(function(e){var r=i._metadataResolver.getNonNormalizedDirectiveMetadata(e).metadata;r.isComponent&&r.template.styleUrls.forEach(function(e){var t=i._host.resourceNameToFileName(e,a.fileName);if(!t)throw jr(\"Couldn't resolve resource \"+e+\" relative to \"+a.fileName);var n=(r.template.encapsulation||i._config.defaultEncapsulation)===I.Emulated;o.push(nw(t,n,s)),i._options.allowEmptyCodegenFiles&&o.push(nw(t,!n,s))})}),o},Jb.prototype.emitBasicStub=function(e,t){var n=this._createOutputContext(e);if(e.endsWith(\".ngfactory.ts\")){if(!t)throw new Error(\"Assertion error: require the original file for .ngfactory.ts stubs. File: \"+e);var r=this._analyzeFile(t);this._createNgFactoryStub(n,r,1)}else if(e.endsWith(\".ngsummary.ts\")){if(this._options.enableSummariesForJit){if(!t)throw new Error(\"Assertion error: require the original file for .ngsummary.ts stubs. File: \"+e);r=this._analyzeFile(t),ew(n),r.ngModules.forEach(function(e){!function(e,t){zb(e,t,sn)}(n,e.type.reference)})}}else e.endsWith(\".ngstyle.ts\")&&ew(n);return this._codegenSourceModule(\"unknown\",n)},Jb.prototype.emitTypeCheckStub=function(e,t){var n=this._analyzeFile(t),r=this._createOutputContext(e);return e.endsWith(\".ngfactory.ts\")&&this._createNgFactoryStub(r,n,2),0<r.statements.length?this._codegenSourceModule(n.fileName,r):null},Jb.prototype.loadFilesAsync=function(e,t){var n=this,r=e.map(function(e){return n._analyzeFile(e)}),i=[];r.forEach(function(e){return e.ngModules.forEach(function(e){return i.push(n._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(e.type.reference,!1))})});var o=t.map(function(e){return n._analyzeFileForInjectables(e)});return Promise.all(i).then(function(e){return{analyzedModules:uw(r),analyzedInjectables:o}})},Jb.prototype.loadFilesSync=function(e,t){var n=this,r=e.map(function(e){return n._analyzeFile(e)});r.forEach(function(e){return e.ngModules.forEach(function(e){return n._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(e.type.reference,!0)})});var i=t.map(function(e){return n._analyzeFileForInjectables(e)});return{analyzedModules:uw(r),analyzedInjectables:i}},Jb.prototype._createNgFactoryStub=function(o,e,t){var a=this,s=0;e.ngModules.forEach(function(n,r){a._ngModuleCompiler.createStub(o,n.type.reference);var e=q(n.transitiveModule.directives.map(function(e){return e.reference}),n.transitiveModule.pipes.map(function(e){return e.reference}),n.importedModules.map(function(e){return e.type.reference}),n.exportedModules.map(function(e){return e.type.reference}),a._externalIdentifierReferences([si.TemplateRef,si.ElementRef])),i=new Map;e.forEach(function(e,t){i.set(e,\"_decl\"+r+\"_\"+t)}),i.forEach(function(e,t){o.statements.push(fr(e).set(sn.cast(ke)).toDeclStmt(yr(o.importExpr(t,null,!1))))}),2&t&&n.declaredDirectives.forEach(function(e){var t=a._metadataResolver.getDirectiveMetadata(e.reference);t.isComponent&&(s++,a._createTypeCheckBlock(o,t.type.reference.name+\"_Host_\"+s,n,a._metadataResolver.getHostComponentMetadata(t),[t.type],i),a._createTypeCheckBlock(o,t.type.reference.name+\"_\"+s,n,t,n.transitiveModule.directives,i))})}),0===o.statements.length&&ew(o)},Jb.prototype._externalIdentifierReferences=function(e){var t,n,r=[];try{for(var i=z(e),o=i.next();!o.done;o=i.next()){var a=o.value,s=ci(this.reflector,a);s.identifier&&r.push(s.identifier.reference)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r},Jb.prototype._createTypeCheckBlock=function(e,t,n,r,i,o){var a,s=this._parseTemplate(r,n,i),l=s.template,u=s.pipes;(a=e.statements).push.apply(a,q(this._typeCheckCompiler.compileComponent(t,r,l,u,o,e)))},Jb.prototype.emitMessageBundle=function(e,t){var r=this,i=[],n=new Uh,o=new Ob(n,[],{},t);if(e.files.forEach(function(e){var n=[];e.directives.forEach(function(e){var t=r._metadataResolver.getDirectiveMetadata(e);t&&t.isComponent&&n.push(t)}),n.forEach(function(e){var t=e.template.template,n=e.template.templateUrl,r=Rl.fromArray(e.template.interpolation);i.push.apply(i,q(o.updateFromTemplate(t,n,r)))})}),i.length)throw new Error(i.map(function(e){return e.toString()}).join(\"\\n\"));return o},Jb.prototype.emitAllPartialModules=function(e,t){function n(e){return a.has(e)||a.set(e,r._createOutputContext(e)),a.get(e)}var r=this,i=e.ngModuleByPipeOrDirective,o=e.files,a=new Map;return o.forEach(function(e){return r._compilePartialModule(e.fileName,i,e.directives,e.pipes,e.ngModules,e.injectables,n(e.fileName))}),t.forEach(function(e){return r._compileShallowModules(e.fileName,e.shallowModules,n(e.fileName))}),Array.from(a.values()).map(function(e){return{fileName:e.genFilePath,statements:q(e.constantPool.statements,e.statements)}})},Jb.prototype._compileShallowModules=function(e,t,n){var r=this;t.forEach(function(e){return function(e,t,n){var r=_i(t.type),i=t.rawImports?[t.rawImports]:[],o=t.rawExports?[t.rawExports]:[],a=Gp({factory:n.factoryFor({type:t.type,symbol:t.type.reference},e),providers:Xi(t.rawProviders,e),imports:Xi(q(i,o),e)}),s=mr(Ki.defineInjector).callFn([a]);e.statements.push(new Nn(r,null,[new On(\"ɵinj\",De,[E.StmtModifier.Static],s)],[],new Tn(null,[],[]),[]))}(n,e,r._injectableCompiler)})},Jb.prototype._compilePartialModule=function(e,s,t,n,r,i,l){var u=this,o=new ev,c=new om(this._templateParser.expressionParser,Fl,o,[],[]);t.forEach(function(e){var t=u._metadataResolver.getDirectiveMetadata(e);if(t.isComponent){var n=s.get(e);n||Nr(\"Cannot determine the module for component '\"+_i(t.type)+\"'\");var r=t.template.htmlAst;t.template.preserveWhitespaces||(r=Xh(r));var i=rv(r.rootNodes,c),o=new Map;n.transitiveModule.directives.map(function(e){return u._metadataResolver.getDirectiveSummary(e.reference)}).forEach(function(e){e.selector&&o.set(e.selector,e.type.reference)});var a=new Map;n.transitiveModule.pipes.map(function(e){return u._metadataResolver.getPipeSummary(e.reference)}).forEach(function(e){a.set(e.name,e.type.reference)}),my(l,t,i,u.reflector,c,0,a)}else!function(e,t,n,r){var i=_i(t.type);i||Nr(\"Cannot resolver the name of \"+t.type);var o=e.constantPool.propertyNameOf(1),a=vy(),s=dy(a,e.constantPool,r),l=El(m(m({},a),{injectFn:Ki.directiveInject})),u=new Nn(i,null,[new On(\"ɵfac\",De,[E.StmtModifier.Static],l.factory)],[],new Tn(null,[],[]),[]),c=new Nn(i,null,[new On(o,De,[E.StmtModifier.Static],s.expression)],[],new Tn(null,[],[]),[]);e.statements.push(u,c)}(l,t,u.reflector,c)}),n.forEach(function(e){var t=u._metadataResolver.getPipeMetadata(e);t&&$p(l,t,u.reflector)}),i.forEach(function(e){return u._injectableCompiler.compile(e,l)})},Jb.prototype.emitAllPartialModules2=function(e){var n=this;return e.reduce(function(e,t){return e.push.apply(e,q(n._emitPartialModule2(t.fileName,t.injectables))),e},[])},Jb.prototype._emitPartialModule2=function(e,t){var n=this,r=this._createOutputContext(e);return t.forEach(function(e){return n._injectableCompiler.compile(e,r)}),r.statements&&0<r.statements.length?[{fileName:e,statements:q(r.constantPool.statements,r.statements)}]:[]},Jb.prototype.emitAllImpls=function(e){var t=this,n=e.ngModuleByPipeOrDirective;return Ui(e.files.map(function(e){return t._compileImplFile(e.fileName,n,e.directives,e.pipes,e.ngModules,e.injectables)}))},Jb.prototype._compileImplFile=function(i,o,e,t,n,r){var a=this,s=v_(m_(i,!0)[1]),l=[],u=this._createOutputContext(h_(i,!0));if(l.push.apply(l,q(this._createSummary(i,e,t,n,r,u))),n.forEach(function(e){return a._compileModule(u,e)}),e.forEach(function(e){var n=a._metadataResolver.getDirectiveMetadata(e);if(n.isComponent){var t=o.get(e);if(!t)throw new Error(\"Internal Error: cannot determine the module for component \"+_i(n.type)+\"!\");var r=a._styleCompiler.compileComponent(u,n);n.template.externalStylesheets.forEach(function(e){var t=a._styleCompiler.needsStyleShim(n);l.push(a._codegenStyles(i,n,e,t,s)),a._options.allowEmptyCodegenFiles&&l.push(a._codegenStyles(i,n,e,!t,s))}),a._compileComponent(u,n,t,t.transitiveModule.directives,r,s),a._compileComponentFactory(u,n,t,s)}}),0<u.statements.length||this._options.allowEmptyCodegenFiles){var c=this._codegenSourceModule(i,u);l.unshift(c)}return l},Jb.prototype._createSummary=function(e,t,n,r,i,o){var a=this,s=this._symbolResolver.getSymbolsOf(e).map(function(e){return a._symbolResolver.resolveSymbol(e)}),l=q(r.map(function(e){return{summary:a._metadataResolver.getNgModuleSummary(e.type.reference),metadata:a._metadataResolver.getNgModuleMetadata(e.type.reference)}}),t.map(function(e){return{summary:a._metadataResolver.getDirectiveSummary(e),metadata:a._metadataResolver.getDirectiveMetadata(e)}}),n.map(function(e){return{summary:a._metadataResolver.getPipeSummary(e),metadata:a._metadataResolver.getPipeMetadata(e)}}),i.map(function(e){return{summary:a._metadataResolver.getInjectableSummary(e.symbol),metadata:a._metadataResolver.getInjectableSummary(e.symbol).type}})),u=this._options.enableSummariesForJit?this._createOutputContext(g_(e,!0)):null,c=function(e,t,n,r,i,o,a){void 0===a&&(a=!1);var s=new Hb(r,n,e);i.forEach(function(e){return s.addSummary({symbol:e.symbol,metadata:e.metadata})}),o.forEach(function(e){var t=e.summary;e.metadata,s.addSummary({symbol:t.type.reference,metadata:void 0,type:t})});var l=s.serialize(a),u=l.json,c=l.exportAs;if(t){var p=new Gb(t,r,n);o.forEach(function(e){var t=e.summary,n=e.metadata;p.addSourceType(t,n)}),s.unprocessedSymbolSummariesBySymbol.forEach(function(e){n.isLibraryFile(e.symbol.filePath)&&e.type&&p.addLibType(e.type)}),p.serialize(c)}return{json:u,exportAs:c}}(e,u,this._summaryResolver,this._symbolResolver,s,l,this._options.createExternalSymbolFactoryReexports),p=c.json;c.exportAs.forEach(function(e){o.statements.push(fr(e.exportAs).set(o.importExpr(e.symbol)).toDeclStmt(null,[E.StmtModifier.Exported]))});var d=[new Pb(e,y_(e),p)];return u&&d.push(this._codegenSourceModule(e,u)),d},Jb.prototype._compileModule=function(e,t){var n=[];if(this._options.locale){var r=this._options.locale.replace(/_/g,\"-\");n.push({token:ci(this.reflector,si.LOCALE_ID),useValue:r})}this._options.i18nFormat&&n.push({token:ci(this.reflector,si.TRANSLATIONS_FORMAT),useValue:this._options.i18nFormat}),this._ngModuleCompiler.compile(e,t,n)},Jb.prototype._compileComponentFactory=function(e,t,n,r){var i=this._metadataResolver.getHostComponentMetadata(t),o=this._compileComponent(e,i,n,[t.type],null,r).viewClassVar,a=Si(t.type.reference),s=[];for(var l in t.inputs){var u=t.inputs[l];s.push(new Xt(l,xr(u),!1))}var c=[];for(var l in t.outputs)u=t.outputs[l],c.push(new Xt(l,xr(u),!1));e.statements.push(fr(a).set(mr(si.createComponentFactory).callFn([xr(t.selector),e.importExpr(t.type.reference),fr(o),new en(s),new en(c),gr(t.template.ngContentSelectors.map(function(e){return xr(e)}))])).toDeclStmt(vr(si.ComponentFactory,[yr(e.importExpr(t.type.reference))],[le.Const]),[E.StmtModifier.Final,E.StmtModifier.Exported]))},Jb.prototype._compileComponent=function(e,t,n,r,i,o){var a=this._parseTemplate(t,n,r),s=a.template,l=a.pipes,u=i?fr(i.stylesVar):gr([]),c=this._viewCompiler.compileComponent(e,t,s,u,l);return i&&tw(this._symbolResolver,i,this._styleCompiler.needsStyleShim(t),o),c},Jb.prototype._parseTemplate=function(e,t,n){var r=this;if(this._templateAstCache.has(e.type.reference))return this._templateAstCache.get(e.type.reference);var i=e.template.preserveWhitespaces,o=n.map(function(e){return r._metadataResolver.getDirectiveSummary(e.reference)}),a=t.transitiveModule.pipes.map(function(e){return r._metadataResolver.getPipeSummary(e.reference)}),s=this._templateParser.parse(e,e.template.htmlAst,o,a,t.schemas,qi(t.type,e,e.template),i);return this._templateAstCache.set(e.type.reference,s),s},Jb.prototype._createOutputContext=function(h){var f=this;return{statements:[],genFilePath:h,importExpr:function(e,t,n){if(void 0===t&&(t=null),void 0===n&&(n=!0),!(e instanceof pi))throw new Error(\"Internal error: unknown identifier \"+JSON.stringify(e));var r=f._symbolResolver.getTypeArity(e)||0,i=f._symbolResolver.getImportAs(e,n)||e,o=i.filePath,a=i.name,s=i.members,l=f._fileNameToModuleName(o,h),u=l===f._fileNameToModuleName(h,h)?null:l,c=t||[],p=r-c.length,d=c.concat(Zr(p,ke));return s.reduce(function(e,t){return e.prop(t)},mr(new xt(u,a,null),d))},constantPool:new ei}},Jb.prototype._fileNameToModuleName=function(e,t){return this._summaryResolver.getKnownModuleName(e)||this._symbolResolver.getKnownModuleName(e)||this._host.fileNameToModuleName(e,t)},Jb.prototype._codegenStyles=function(e,t,n,r,i){var o=this._createOutputContext(nw(n.moduleUrl,r,i)),a=this._styleCompiler.compileStyles(o,t,n,r);return tw(this._symbolResolver,a,r,i),this._codegenSourceModule(e,o)},Jb.prototype._codegenSourceModule=function(e,t){return new Pb(e,t.genFilePath,t.statements)},Jb.prototype.listLazyRoutes=function(e,t){var n,r,i,o,c=this;if(e)return function e(t,n,r){var i,o;if(void 0===n&&(n=new Set),void 0===r&&(r=[]),n.has(t)||!t.name)return r;n.add(t);var a=Mb(c._metadataResolver.getNgModuleMetadata(t,!0),c.reflector);try{for(var s=z(a),l=s.next();!l.done;l=s.next()){var u=l.value;r.push(u),e(u.referencedModule,n,r)}}catch(e){i={error:e}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return r}(Nb(e,this.reflector).referencedModule);if(t){var a=[];try{for(var s=z(t.ngModules),l=s.next();!l.done;l=s.next()){var u=Mb(l.value,this.reflector);try{for(var p=(i=void 0,z(u)),d=p.next();!d.done;d=p.next()){var h=d.value;a.push(h)}}catch(e){i={error:e}}finally{try{d&&!d.done&&(o=p.return)&&o.call(p)}finally{if(i)throw i.error}}}}catch(e){n={error:e}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}return a}throw new Error(\"Either route or analyzedModules has to be specified!\")},Jb);function Jb(e,t,n,r,i,o,a,s,l,u,c,p,d,h){this._config=e,this._options=t,this._host=n,this.reflector=r,this._metadataResolver=i,this._templateParser=o,this._styleCompiler=a,this._viewCompiler=s,this._typeCheckCompiler=l,this._ngModuleCompiler=u,this._injectableCompiler=c,this._outputEmitter=p,this._summaryResolver=d,this._symbolResolver=h,this._templateAstCache=new Map,this._analyzedFiles=new Map,this._analyzedFilesForInjectables=new Map}function ew(e){e.statements.push(mr(si.ComponentFactory).toStmt())}function tw(t,e,n,r){e.dependencies.forEach(function(e){e.setValue(t.getStaticSymbol(nw(e.moduleUrl,n,r),e.name))})}function nw(e,t,n){return e+(t?\".shim\":\"\")+\".ngstyle\"+n}function rw(e,t,n,r){return lw(function(e,n,r,i){var o=new Set,a=[],s=function(e){if(o.has(e)||!n.isSourceFile(e))return!1;o.add(e);var t=aw(n,r,i,e);a.push(t),t.ngModules.forEach(function(e){e.transitiveModule.modules.forEach(function(e){return s(e.reference.filePath)})})};return e.forEach(function(e){return s(e)}),a}(e,t,n,r))}function iw(e,t,n,r){return ow(rw(e,t,n,r))}function ow(e){if(e.symbolsMissingModule&&e.symbolsMissingModule.length)throw jr(e.symbolsMissingModule.map(function(e){return\"Cannot determine the module for class \"+e.name+\" in \"+e.filePath+\"! Add \"+e.name+\" to the NgModule to fix it.\"}).join(\"\\n\"));return e}function aw(o,a,s,e){var l=[],u=[],c=[],p=[],d=[],t=a.hasDecorators(e),h=!1,f=e.endsWith(\".d.ts\");return f&&!t||a.getSymbolsOf(e).forEach(function(e){var t=a.resolveSymbol(e).metadata;if(t&&\"error\"!==t.__symbolic){var n=!1;if(\"class\"===t.__symbolic)if(s.isDirective(e))n=!0,f?u.push(e):s.isAbstractDirective(e)?l.push(e):u.push(e);else if(s.isPipe(e))n=!0,c.push(e);else if(s.isNgModule(e)){var r=s.getNgModuleMetadata(e,!1);r&&(n=!0,d.push(r))}else if(s.isInjectable(e)){n=!0;var i=s.getInjectableMetadata(e,null,!1);i&&p.push(i)}n||(h=h||function(n,e){var r=!1,t=function(){function e(){}return e.prototype.visitArray=function(e,t){var n=this;e.forEach(function(e){return kr(e,n,t)})},e.prototype.visitStringMap=function(t,n){var r=this;Object.keys(t).forEach(function(e){return kr(t[e],r,n)})},e.prototype.visitPrimitive=function(e,t){},e.prototype.visitOther=function(e,t){e instanceof pi&&!n.isSourceFile(e.filePath)&&(r=!0)},e}();return kr(e,new t,null),r}(o,t))}}),{fileName:e,directives:u,abstractDirectives:l,pipes:c,ngModules:d,injectables:p,exportsNonSourceFiles:h}}function sw(e,i,o,t){var a=[],s=[];return i.hasDecorators(t)&&i.getSymbolsOf(t).forEach(function(e){var t=i.resolveSymbol(e).metadata;if(t&&\"error\"!==t.__symbolic&&\"class\"===t.__symbolic)if(o.isInjectable(e)){var n=o.getInjectableMetadata(e,null,!1);n&&a.push(n)}else if(o.isNgModule(e)){var r=o.getShallowModuleMetadata(e);r&&s.push(r)}}),{fileName:t,injectables:a,shallowModules:s}}function lw(e){var n=[],r=new Map,t=new Set;e.forEach(function(e){e.ngModules.forEach(function(t){n.push(t),t.declaredDirectives.forEach(function(e){return r.set(e.reference,t)}),t.declaredPipes.forEach(function(e){return r.set(e.reference,t)})}),e.directives.forEach(function(e){return t.add(e)}),e.pipes.forEach(function(e){return t.add(e)})});var i=[];return t.forEach(function(e){r.has(e)||i.push(e)}),{ngModules:n,ngModuleByPipeOrDirective:r,symbolsMissingModule:i,files:e}}function uw(e){return ow(lw(e))}var cw=\"ngFormattedMessage\";function pw(e,t){var n,r;if(void 0===t&&(t=0),!e)return\"\";var i=e.position?e.position.fileName+\"(\"+(e.position.line+1)+\",\"+(e.position.column+1)+\")\":\"\",o=i&&0!==t?\" at \"+i:\"\",a=(i&&0===t?i+\": \":\"\")+e.message+o;if(e.next)try{for(var s=z(e.next),l=s.next();!l.done;l=s.next()){a+=\"\\n\"+pw(l.value,t+2)}}catch(e){n={error:e}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}return\"\"+function e(t){if(t<=0)return\"\";if(t<6)return[\"\",\" \",\"  \",\"   \",\"    \",\"     \"][t];var n=e(Math.floor(t/2));return n+n+(t%2==1?\" \":\"\")}(t)+a}function dw(e){var t=jr(pw(e)+\".\");return t[cw]=!0,t.chain=e,t.position=e.position,t}var hw=\"@angular/core\",fw=/^\\$.*\\$$/,mw={__symbolic:\"ignore\"},vw=new Set([\"useValue\",\"useFactory\",\"data\",\"id\",\"loadChildren\"]);function yw(e){return e&&\"ignore\"==e.__symbolic}var gw=(_w.prototype.componentModuleUrl=function(e){var t=this.findSymbolDeclaration(e);return this.symbolResolver.getResourcePath(t)},_w.prototype.invalidateSymbols=function(e){var t,n;try{for(var r=z(e),i=r.next();!i.done;i=r.next()){var o=i.value;this.annotationCache.delete(o),this.shallowAnnotationCache.delete(o),this.propertyCache.delete(o),this.parameterCache.delete(o),this.methodCache.delete(o),this.staticCache.delete(o),this.conversionMap.delete(o)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},_w.prototype.resolveExternalReference=function(e,t){var n=void 0;if(!t){n=e.moduleName+\":\"+e.name;var r=this.resolvedExternalReferences.get(n);if(r)return r}var i=this.symbolResolver.getSymbolByModule(e.moduleName,e.name,t),o=this.findSymbolDeclaration(i);return t||(this.symbolResolver.recordModuleNameForFileName(i.filePath,e.moduleName),this.symbolResolver.recordImportAs(o,i)),n&&this.resolvedExternalReferences.set(n,o),o},_w.prototype.findDeclaration=function(e,t,n){return this.findSymbolDeclaration(this.symbolResolver.getSymbolByModule(e,t,n))},_w.prototype.tryFindDeclaration=function(e,t,n){var r=this;return this.symbolResolver.ignoreErrorsFor(function(){return r.findDeclaration(e,t,n)})},_w.prototype.findSymbolDeclaration=function(e){var t=this.symbolResolver.resolveSymbol(e);if(t){var n=t.metadata;if(n&&\"resolved\"===n.__symbolic&&(n=n.symbol),n instanceof pi)return this.findSymbolDeclaration(t.metadata)}return e},_w.prototype.tryAnnotations=function(e){var t=this.errorRecorder;this.errorRecorder=function(e,t){};try{return this.annotations(e)}finally{this.errorRecorder=t}},_w.prototype.annotations=function(e){var n=this;return this._annotations(e,function(e,t){return n.simplify(e,t)},this.annotationCache)},_w.prototype.shallowAnnotations=function(e){var n=this;return this._annotations(e,function(e,t){return n.simplify(e,t,!0)},this.shallowAnnotationCache)},_w.prototype._annotations=function(e,t,n){var r=n.get(e);if(!r){r=[];var i=this.getTypeMetadata(e),o=this.findParentType(e,i);if(o){var a=this.annotations(o);r.push.apply(r,q(a))}var s=[];if(i.decorators&&(s=t(e,i.decorators))&&r.push.apply(r,q(s)),o&&!this.summaryResolver.isLibraryFile(e.filePath)&&this.summaryResolver.isLibraryFile(o.filePath)){var l=this.summaryResolver.resolveSummary(o);if(l&&l.type){var u=this.annotationForParentClassWithSummaryKind.get(l.type.summaryKind);u.some(function(t){return s.some(function(e){return t.isTypeOf(e)})})||this.reportError(Fw(ww(\"Class \"+e.name+\" in \"+e.filePath+\" extends from a \"+E.CompileSummaryKind[l.type.summaryKind]+\" in another compilation unit without duplicating the decorator\",void 0,\"Please add a \"+u.map(function(e){return e.ngMetadataName}).join(\" or \")+\" decorator to the class\"),e),e)}}n.set(e,r.filter(function(e){return!!e}))}return r},_w.prototype.propMetadata=function(r){var i=this,o=this.propertyCache.get(r);if(!o){var e=this.getTypeMetadata(r);o={};var t=this.findParentType(r,e);if(t){var n=this.propMetadata(t);Object.keys(n).forEach(function(e){o[e]=n[e]})}var a=e.members||{};Object.keys(a).forEach(function(e){var t=a[e].find(function(e){return\"property\"==e.__symbolic||\"method\"==e.__symbolic}),n=[];o[e]&&n.push.apply(n,q(o[e])),o[e]=n,t&&t.decorators&&n.push.apply(n,q(i.simplify(r,t.decorators)))}),this.propertyCache.set(r,o)}return o},_w.prototype.parameters=function(o){var a=this;if(!(o instanceof pi))return this.reportError(new Error(\"parameters received \"+JSON.stringify(o)+\" which is not a StaticSymbol\"),o),[];try{var s=this.parameterCache.get(o);if(!s){var e=this.getTypeMetadata(o),t=this.findParentType(o,e),n=e?e.members:null,r=n?n.__ctor__:null;if(r){var i=r.find(function(e){return\"constructor\"==e.__symbolic}),l=i.parameters||[],u=this.simplify(o,i.parameterDecorators||[]);s=[],l.forEach(function(e,t){var n=[],r=a.trySimplify(o,e);r&&n.push(r);var i=u?u[t]:null;i&&n.push.apply(n,q(i)),s.push(n)})}else t&&(s=this.parameters(t));s=s||[],this.parameterCache.set(o,s)}return s}catch(e){throw console.error(\"Failed on type \"+JSON.stringify(o)+\" with error \"+e),e}},_w.prototype._methodNames=function(e){var n=this.methodCache.get(e);if(!n){var t=this.getTypeMetadata(e);n={};var r=this.findParentType(e,t);if(r){var i=this._methodNames(r);Object.keys(i).forEach(function(e){n[e]=i[e]})}var o=t.members||{};Object.keys(o).forEach(function(e){var t=o[e].some(function(e){return\"method\"==e.__symbolic});n[e]=n[e]||t}),this.methodCache.set(e,n)}return n},_w.prototype._staticMembers=function(e){var t=this.staticCache.get(e);if(!t){var n=this.getTypeMetadata(e).statics||{};t=Object.keys(n),this.staticCache.set(e,t)}return t},_w.prototype.findParentType=function(e,t){var n=this.trySimplify(e,t.extends);if(n instanceof pi)return n},_w.prototype.hasLifecycleHook=function(t,e){t instanceof pi||this.reportError(new Error(\"hasLifecycleHook received \"+JSON.stringify(t)+\" which is not a StaticSymbol\"),t);try{return!!this._methodNames(t)[e]}catch(e){throw console.error(\"Failed on type \"+JSON.stringify(t)+\" with error \"+e),e}},_w.prototype.guards=function(e){var t,n;if(!(e instanceof pi))return this.reportError(new Error(\"guards received \"+JSON.stringify(e)+\" which is not a StaticSymbol\"),e),{};var r=this._staticMembers(e),i={};try{for(var o=z(r),a=o.next();!a.done;a=o.next()){var s=a.value;if(s.endsWith(\"TypeGuard\")){var l=s.substr(0,s.length-\"TypeGuard\".length),u=void 0;u=l.endsWith(\"UseIf\")?(l=s.substr(0,l.length-\"UseIf\".length),\"UseIf\"):this.getStaticSymbol(e.filePath,e.name,[s]),i[l]=u}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return i},_w.prototype._registerDecoratorOrConstructor=function(e,n){this.conversionMap.set(e,function(e,t){return new(n.bind.apply(n,q([void 0],t)))})},_w.prototype._registerFunction=function(e,n){this.conversionMap.set(e,function(e,t){return n.apply(void 0,t)})},_w.prototype.initializeConversionMap=function(){this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Injectable\"),X),this.injectionToken=this.findDeclaration(hw,\"InjectionToken\"),this.opaqueToken=this.findDeclaration(hw,\"OpaqueToken\"),this.ROUTES=this.tryFindDeclaration(\"@angular/router\",\"ROUTES\"),this.ANALYZE_FOR_ENTRY_COMPONENTS=this.findDeclaration(hw,\"ANALYZE_FOR_ENTRY_COMPONENTS\"),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Host\"),re),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Self\"),te),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"SkipSelf\"),ne),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Inject\"),w),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Optional\"),ee),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Attribute\"),C),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"ContentChild\"),O),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"ContentChildren\"),S),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"ViewChild\"),D),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"ViewChildren\"),k),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Input\"),G),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Output\"),Y),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Pipe\"),L),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"HostBinding\"),K),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"HostListener\"),Z),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Directive\"),A),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Component\"),F),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"NgModule\"),Q),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Host\"),re),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Self\"),te),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"SkipSelf\"),ne),this._registerDecoratorOrConstructor(this.findDeclaration(hw,\"Optional\"),ee)},_w.prototype.getStaticSymbol=function(e,t,n){return this.symbolResolver.getStaticSymbol(e,t,n)},_w.prototype.trySimplify=function(e,t){var n=this.errorRecorder;this.errorRecorder=function(e,t){};var r=this.simplify(e,t);return this.errorRecorder=n,r},_w.prototype.simplify=function(t,e,n){void 0===n&&(n=!1);var r,V=this,B=Pw.empty,U=new Map;try{r=function P(A,e,M,R){function N(e){var t=V.symbolResolver.resolveSymbol(e);return t?t.metadata:null}function j(e){return P(A,e,M,0)}function F(t,e){if(t===A)return P(t,e,M+1,R);try{return P(t,e,M+1,R)}catch(e){if(!xw(e))throw e;var n=e.chain?\"references '\"+e.symbol.name+\"'\":function(e){if(e.summary)return e.summary;switch(e.message){case Cw:if(e.context&&e.context.className)return\"references non-exported class \"+e.context.className;break;case Sw:return\"is not initialized\";case Ew:return\"is a destructured variable\";case Ow:return\"could not be resolved\";case kw:return e.context&&e.context.name?\"calls '\"+e.context.name+\"'\":\"calls a function\";case Dw:return e.context&&e.context.name?\"references local variable \"+e.context.name:\"references a local variable\"}return\"contains the error\"}(e),r={message:\"'\"+t.name+\"' \"+n,position:e.position,next:e.chain};V.error({message:e.message,advise:e.advise,context:e.context,chain:r,symbol:t},A)}}function L(r){var t,e,n,i;if(Iw(r))return r;if(Array.isArray(r)){var o=[];try{for(var a=z(r),s=a.next();!s.done;s=a.next()){var l=s.value;if(l&&\"spread\"===l.__symbolic){var u=j(l.expression);if(Array.isArray(u)){try{for(var c=(n=void 0,z(u)),p=c.next();!p.done;p=c.next()){var d=p.value;o.push(d)}}catch(e){n={error:e}}finally{try{p&&!p.done&&(i=c.return)&&i.call(c)}finally{if(n)throw n.error}}continue}}var h=L(l);yw(h)||o.push(h)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}return o}if(r instanceof pi)return r===V.injectionToken||V.conversionMap.has(r)||0<R&&!r.members.length?r:null!=(C=N(f=r))?F(f,C):f;if(r){if(r.__symbolic){var f=void 0;switch(r.__symbolic){case\"binop\":var m=L(r.left);if(yw(m))return m;var v=L(r.right);if(yw(v))return v;switch(r.operator){case\"&&\":return m&&v;case\"||\":return m||v;case\"|\":return m|v;case\"^\":return m^v;case\"&\":return m&v;case\"==\":return m==v;case\"!=\":return m!=v;case\"===\":return m===v;case\"!==\":return m!==v;case\"<\":return m<v;case\">\":return v<m;case\"<=\":return m<=v;case\">=\":return v<=m;case\"<<\":return m<<v;case\">>\":return m>>v;case\"+\":return m+v;case\"-\":return m-v;case\"*\":return m*v;case\"/\":return m/v;case\"%\":return m%v}return null;case\"if\":return L(L(r.condition)?r.thenExpression:r.elseExpression);case\"pre\":var y=L(r.operand);if(yw(y))return y;switch(r.operator){case\"+\":return y;case\"-\":return-y;case\"!\":return!y;case\"~\":return~y}return null;case\"index\":var g=j(r.expression),_=j(r.index);return g&&Iw(_)?g[_]:null;case\"select\":var b=r.member,w=A,x=L(r.expression);if(x instanceof pi){var C,S=x.members.concat(b);return null!=(C=N(w=V.getStaticSymbol(x.filePath,x.name,S)))?F(w,C):w}return x&&Iw(b)?F(w,x[b]):null;case\"reference\":var E=r.name,O=B.resolve(E);if(O!=Pw.missing)return O;break;case\"resolved\":try{return L(r.symbol)}catch(e){throw xw(e)&&null!=r.fileName&&null!=r.line&&null!=r.character&&(e.position={fileName:r.fileName,line:r.line,column:r.character}),e}case\"class\":case\"function\":return A;case\"new\":case\"call\":if((f=P(A,r.expression,M+1,0))instanceof pi){if(f===V.injectionToken||f===V.opaqueToken)return A;var k=r.arguments||[],D=V.conversionMap.get(f);if(D){var T=k.map(function(e){return F(A,e)}).map(function(e){return yw(e)?void 0:e});return D(A,T)}return function(e,t,n,r){if(t&&\"function\"==t.__symbolic){U.get(e)&&V.error({message:\"Recursion is not supported\",summary:\"called '\"+e.name+\"' recursively\",value:t},e);try{var i=t.value;if(i&&(0!=M||\"error\"!=i.__symbolic)){var o=t.parameters,a=t.defaults;n=n.map(function(e){return F(A,e)}).map(function(e){return yw(e)?void 0:e}),a&&a.length>n.length&&n.push.apply(n,q(a.slice(n.length).map(function(e){return L(e)}))),U.set(e,!0);for(var s=Pw.build(),l=0;l<o.length;l++)s.define(o[l],n[l]);var u,c=B;try{B=s.done(),u=F(e,i)}finally{B=c}return u}}finally{U.delete(e)}}if(0===M)return mw;var p=void 0;if(r&&\"resolved\"==r.__symbolic){var d=r.line,h=r.character,f=r.fileName;null!=f&&null!=d&&null!=h&&(p={fileName:f,line:d,column:h})}V.error({message:kw,context:e,value:t,position:p},A)}(f,N(f),k,r.expression)}return mw;case\"error\":var I=r.message;return null!=r.line?V.error({message:I,context:r.context,value:r,position:{fileName:r.fileName,line:r.line,column:r.character}},A):V.error({message:I,context:r.context},A),mw;case\"ignore\":return r}return null}return function(n,r){if(!n)return{};var i={};return Object.keys(n).forEach(function(e){var t=r(n[e],e);yw(t)||(fw.test(e)?Object.defineProperty(i,e,{enumerable:!1,configurable:!0,value:t}):i[e]=t)}),i}(r,function(e,t){if(vw.has(t)){if(\"useValue\"===t&&\"provide\"in r){var n=L(r.provide);if(n===V.ROUTES||n==V.ANALYZE_FOR_ENTRY_COMPONENTS)return L(e)}return function(e){return P(A,e,M,R+1)}(e)}return L(e)})}return mw}return L(e)}(t,e,0,n?1:0)}catch(e){if(!this.errorRecorder)throw Fw(e,t);this.reportError(e,t)}if(!yw(r))return r},_w.prototype.getTypeMetadata=function(e){var t=this.symbolResolver.resolveSymbol(e);return t&&t.metadata?t.metadata:{__symbolic:\"class\"}},_w.prototype.reportError=function(e,t,n){if(!this.errorRecorder)throw e;this.errorRecorder(Fw(e,t),t&&t.filePath||n)},_w.prototype.error=function(e,t){var n=e.message,r=e.summary,i=e.advise,o=e.position,a=e.context,s=(e.value,e.symbol),l=e.chain;this.reportError(ww(n,r,i,o,s,a,l),t)},_w);function _w(e,t,n,r,i){var o=this;void 0===n&&(n=[]),void 0===r&&(r=[]),this.summaryResolver=e,this.symbolResolver=t,this.errorRecorder=i,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(),n.forEach(function(e){return o._registerDecoratorOrConstructor(o.getStaticSymbol(e.filePath,e.name),e.ctor)}),r.forEach(function(e){return o._registerFunction(o.getStaticSymbol(e.filePath,e.name),e.fn)}),this.annotationForParentClassWithSummaryKind.set(E.CompileSummaryKind.Directive,[A,F]),this.annotationForParentClassWithSummaryKind.set(E.CompileSummaryKind.Pipe,[L]),this.annotationForParentClassWithSummaryKind.set(E.CompileSummaryKind.NgModule,[Q]),this.annotationForParentClassWithSummaryKind.set(E.CompileSummaryKind.Injectable,[X,L,A,F,Q])}var bw=\"ngMetadataError\";function ww(e,t,n,r,i,o,a){var s=jr(e);return s[bw]=!0,n&&(s.advise=n),r&&(s.position=r),t&&(s.summary=t),o&&(s.context=o),a&&(s.chain=a),i&&(s.symbol=i),s}function xw(e){return!!e[bw]}var Cw=\"Reference to non-exported class\",Sw=\"Variable not initialized\",Ew=\"Destructuring not supported\",Ow=\"Could not resolve type\",kw=\"Function call not supported\",Dw=\"Reference to a local symbol\",Tw=\"Lambda not supported\";function Iw(e){return null===e||\"function\"!=typeof e&&\"object\"!=typeof e}var Pw=(Aw.build=function(){var n=new Map;return{define:function(e,t){return n.set(e,t),this},done:function(){return 0<n.size?new Rw(n):Aw.empty}}},Aw.missing={},Aw.empty={resolve:function(e){return Aw.missing}},Aw);function Aw(){}var Mw,Rw=(f(Nw,Mw=Pw),Nw.prototype.resolve=function(e){return this.bindings.has(e)?this.bindings.get(e):Pw.missing},Nw);function Nw(e){var t=Mw.call(this)||this;return t.bindings=e,t}function jw(e,t){var n=function(e,t){switch(e){case Cw:if(t&&t.className)return\"References to a non-exported class are not supported in decorators but \"+t.className+\" was referenced.\";break;case Sw:return\"Only initialized variables and constants can be referenced in decorators because the value of this variable is needed by the template compiler\";case Ew:return\"Referencing an exported destructured variable or constant is not supported in decorators and this value is needed by the template compiler\";case Ow:if(t&&t.typeName)return\"Could not resolve type \"+t.typeName;break;case kw:return t&&t.name?\"Function calls are not supported in decorators but '\"+t.name+\"' was called\":\"Function calls are not supported in decorators\";case Dw:if(t&&t.name)return\"Reference to a local (non-exported) symbols are not supported in decorators but '\"+t.name+\"' was referenced\";break;case Tw:return\"Function expressions are not supported in decorators\"}return e}(e.message,e.context)+(e.symbol?\" in '\"+e.symbol.name+\"'\":\"\"),r=e.position,i=e.next?jw(e.next,t):t?{message:t}:void 0;return{message:n,position:r,next:i?[i]:void 0}}function Fw(e,t){if(xw(e)){var n=e.position;return dw(jw({message:\"Error during template compile of '\"+t.name+\"'\",position:n,next:{message:e.message,next:e.chain,context:e.context,symbol:e.symbol}},e.advise||function(e,t){switch(e){case Cw:if(t&&t.className)return\"Consider exporting '\"+t.className+\"'\";break;case Ew:return\"Consider simplifying to avoid destructuring\";case Dw:if(t&&t.name)return\"Consider exporting '\"+t.name+\"'\";break;case Tw:return\"Consider changing the function expression into an exported function\"}}(e.message,e.context)))}return e}var Lw=(Vw.prototype.isLibraryFile=function(e){return!this.host.isSourceFile(f_(e))},Vw.prototype.toSummaryFileName=function(e,t){return this.host.toSummaryFileName(e,t)},Vw.prototype.fromSummaryFileName=function(e,t){return this.host.fromSummaryFileName(e,t)},Vw.prototype.resolveSummary=function(e){var t=e.members.length?this.staticSymbolCache.get(e.filePath,e.name):e,n=this.summaryCache.get(t);return n||(this._loadSummaryFile(e.filePath),n=this.summaryCache.get(e)),t===e&&n||null},Vw.prototype.getSymbolsOf=function(t){return this._loadSummaryFile(t)?Array.from(this.summaryCache.keys()).filter(function(e){return e.filePath===t}):null},Vw.prototype.getImportAs=function(e){return e.assertNoMembers(),this.importAs.get(e)},Vw.prototype.getKnownModuleName=function(e){return this.knownFileNameToModuleNames.get(e)||null},Vw.prototype.addSummary=function(e){this.summaryCache.set(e.symbol,e)},Vw.prototype._loadSummaryFile=function(e){var t=this,n=this.loadedFilePaths.get(e);if(null!=n)return n;var r=null;if(this.isLibraryFile(e)){var i=y_(e);try{r=this.host.loadSummary(i)}catch(e){throw console.error(\"Error loading summary file \"+i),e}}if(n=null!=r,this.loadedFilePaths.set(e,n),r){var o=function(e,t,n,r){return new Zb(e,t).deserialize(n,r)}(this.staticSymbolCache,this,e,r),a=o.moduleName,s=o.summaries,l=o.importAs;s.forEach(function(e){return t.summaryCache.set(e.symbol,e)}),a&&this.knownFileNameToModuleNames.set(e,a),l.forEach(function(e){t.importAs.set(e.symbol,e.importAs)})}return n},Vw);function Vw(e,t){this.host=e,this.staticSymbolCache=t,this.summaryCache=new Map,this.loadedFilePaths=new Map,this.importAs=new Map,this.knownFileNameToModuleNames=new Map}function Bw(r){return{resolve:function(e,t){var n=r.resourceNameToFileName(t,e);if(!n)throw jr(\"Couldn't resolve resource \"+t+\" from \"+e);return n}}}function Uw(){}var zw=(qw.prototype.isLibraryFile=function(){return!1},qw.prototype.toSummaryFileName=function(e){return e},qw.prototype.fromSummaryFileName=function(e){return e},qw.prototype.resolveSummary=function(e){return this._summaries.get(e)||null},qw.prototype.getSymbolsOf=function(){return[]},qw.prototype.getImportAs=function(e){return e},qw.prototype.getKnownModuleName=function(e){return null},qw.prototype.addSummary=function(e){this._summaries.set(e.symbol,e)},qw);function qw(){this._summaries=new Map}function Hw(e,t,n,r,i){for(var o=r.createChildWihtLocalVars(),a=0;a<e.length;a++)o.vars.set(e[a],t[a]);var s=i.visitAllStatements(n,o);return s?s.value:null}var Ww=(Gw.prototype.createChildWihtLocalVars=function(){return new Gw(this,this.instance,this.className,new Map)},Gw);function Gw(e,t,n,r){this.parent=e,this.instance=t,this.className=n,this.vars=r,this.exports=[]}var Yw=function(e){this.value=e};function Kw(o,a,s){var e={};o.getters.forEach(function(t){e[t.name]={configurable:!1,get:function(){var e=new Ww(a,this,o.name,a.vars);return Hw([],[],t.body,e,s)}}}),o.methods.forEach(function(r){var i=r.params.map(function(e){return e.name});e[r.name]={writable:!1,configurable:!1,value:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=new Ww(a,this,o.name,a.vars);return Hw(i,e,r.body,n,s)}}});function t(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=new Ww(a,this,o.name,a.vars);o.fields.forEach(function(e){t[e.name]=void 0}),Hw(i,e,o.constructorMethod.body,r,s)}var i=o.constructorMethod.params.map(function(e){return e.name}),n=o.parent?o.parent.visitExpression(s,a):Object;return t.prototype=Object.create(n.prototype,e),t}var Zw=(Qw.prototype.debugAst=function(e){return Y_(e)},Qw.prototype.visitDeclareVarStmt=function(e,t){var n=e.value?e.value.visitExpression(this,t):void 0;return t.vars.set(e.name,n),e.hasModifier(E.StmtModifier.Exported)&&t.exports.push(e.name),null},Qw.prototype.visitWriteVarExpr=function(e,t){for(var n=e.value.visitExpression(this,t),r=t;null!=r;){if(r.vars.has(e.name))return r.vars.set(e.name,n),n;r=r.parent}throw new Error(\"Not declared variable \"+e.name)},Qw.prototype.visitWrappedNodeExpr=function(e,t){throw new Error(\"Cannot interpret a WrappedNodeExpr.\")},Qw.prototype.visitTypeofExpr=function(e,t){throw new Error(\"Cannot interpret a TypeofExpr\")},Qw.prototype.visitReadVarExpr=function(e,t){var n=e.name;if(null!=e.builtin)switch(e.builtin){case E.BuiltinVar.Super:return Object.getPrototypeOf(t.instance);case E.BuiltinVar.This:return t.instance;case E.BuiltinVar.CatchError:n=$w;break;case E.BuiltinVar.CatchStack:n=Jw;break;default:throw new Error(\"Unknown builtin variable \"+e.builtin)}for(var r=t;null!=r;){if(r.vars.has(n))return r.vars.get(n);r=r.parent}throw new Error(\"Not declared variable \"+n)},Qw.prototype.visitWriteKeyExpr=function(e,t){var n=e.receiver.visitExpression(this,t),r=e.index.visitExpression(this,t),i=e.value.visitExpression(this,t);return n[r]=i},Qw.prototype.visitWritePropExpr=function(e,t){var n=e.receiver.visitExpression(this,t),r=e.value.visitExpression(this,t);return n[e.name]=r},Qw.prototype.visitInvokeMethodExpr=function(e,t){var n,r=e.receiver.visitExpression(this,t),i=this.visitAllExpressions(e.args,t);if(null!=e.builtin)switch(e.builtin){case E.BuiltinMethod.ConcatArray:n=r.concat.apply(r,q(i));break;case E.BuiltinMethod.SubscribeObservable:n=r.subscribe({next:i[0]});break;case E.BuiltinMethod.Bind:n=r.bind.apply(r,q(i));break;default:throw new Error(\"Unknown builtin method \"+e.builtin)}else n=r[e.name].apply(r,i);return n},Qw.prototype.visitInvokeFunctionExpr=function(e,t){var n=this.visitAllExpressions(e.args,t),r=e.fn;return r instanceof Ve&&r.builtin===E.BuiltinVar.Super?(t.instance.constructor.prototype.constructor.apply(t.instance,n),null):e.fn.visitExpression(this,t).apply(null,n)},Qw.prototype.visitReturnStmt=function(e,t){return new Yw(e.value.visitExpression(this,t))},Qw.prototype.visitDeclareClassStmt=function(e,t){var n=Kw(e,t,this);return t.vars.set(e.name,n),e.hasModifier(E.StmtModifier.Exported)&&t.exports.push(e.name),null},Qw.prototype.visitExpressionStmt=function(e,t){return e.expr.visitExpression(this,t)},Qw.prototype.visitIfStmt=function(e,t){return e.condition.visitExpression(this,t)?this.visitAllStatements(e.trueCase,t):null!=e.falseCase?this.visitAllStatements(e.falseCase,t):null},Qw.prototype.visitTryCatchStmt=function(t,n){try{return this.visitAllStatements(t.bodyStmts,n)}catch(e){var r=n.createChildWihtLocalVars();return r.vars.set($w,e),r.vars.set(Jw,e.stack),this.visitAllStatements(t.catchStmts,r)}},Qw.prototype.visitThrowStmt=function(e,t){throw e.error.visitExpression(this,t)},Qw.prototype.visitCommentStmt=function(e,t){return null},Qw.prototype.visitJSDocCommentStmt=function(e,t){return null},Qw.prototype.visitInstantiateExpr=function(e,t){var n=this.visitAllExpressions(e.args,t),r=e.classExpr.visitExpression(this,t);return new(r.bind.apply(r,q([void 0],n)))},Qw.prototype.visitLiteralExpr=function(e,t){return e.value},Qw.prototype.visitLocalizedString=function(e,t){return null},Qw.prototype.visitExternalExpr=function(e,t){return this.reflector.resolveExternalReference(e.value)},Qw.prototype.visitConditionalExpr=function(e,t){return e.condition.visitExpression(this,t)?e.trueCase.visitExpression(this,t):null!=e.falseCase?e.falseCase.visitExpression(this,t):null},Qw.prototype.visitNotExpr=function(e,t){return!e.condition.visitExpression(this,t)},Qw.prototype.visitAssertNotNullExpr=function(e,t){return e.condition.visitExpression(this,t)},Qw.prototype.visitCastExpr=function(e,t){return e.value.visitExpression(this,t)},Qw.prototype.visitFunctionExpr=function(e,t){return Xw(e.params.map(function(e){return e.name}),e.statements,t,this)},Qw.prototype.visitDeclareFunctionStmt=function(e,t){var n=e.params.map(function(e){return e.name});return t.vars.set(e.name,Xw(n,e.statements,t,this)),e.hasModifier(E.StmtModifier.Exported)&&t.exports.push(e.name),null},Qw.prototype.visitBinaryOperatorExpr=function(e,t){function n(){return e.lhs.visitExpression(i,t)}function r(){return e.rhs.visitExpression(i,t)}var i=this;switch(e.operator){case E.BinaryOperator.Equals:return n()==r();case E.BinaryOperator.Identical:return n()===r();case E.BinaryOperator.NotEquals:return n()!=r();case E.BinaryOperator.NotIdentical:return n()!==r();case E.BinaryOperator.And:return n()&&r();case E.BinaryOperator.Or:return n()||r();case E.BinaryOperator.Plus:return n()+r();case E.BinaryOperator.Minus:return n()-r();case E.BinaryOperator.Divide:return n()/r();case E.BinaryOperator.Multiply:return n()*r();case E.BinaryOperator.Modulo:return n()%r();case E.BinaryOperator.Lower:return n()<r();case E.BinaryOperator.LowerEquals:return n()<=r();case E.BinaryOperator.Bigger:return n()>r();case E.BinaryOperator.BiggerEquals:return n()>=r();default:throw new Error(\"Unknown operator \"+e.operator)}},Qw.prototype.visitReadPropExpr=function(e,t){return e.receiver.visitExpression(this,t)[e.name]},Qw.prototype.visitReadKeyExpr=function(e,t){return e.receiver.visitExpression(this,t)[e.index.visitExpression(this,t)]},Qw.prototype.visitLiteralArrayExpr=function(e,t){return this.visitAllExpressions(e.entries,t)},Qw.prototype.visitLiteralMapExpr=function(e,t){var n=this,r={};return e.entries.forEach(function(e){return r[e.key]=e.value.visitExpression(n,t)}),r},Qw.prototype.visitCommaExpr=function(e,t){var n=this.visitAllExpressions(e.parts,t);return n[n.length-1]},Qw.prototype.visitAllExpressions=function(e,t){var n=this;return e.map(function(e){return e.visitExpression(n,t)})},Qw.prototype.visitAllStatements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n].visitStatement(this,t);if(r instanceof Yw)return r}return null},Qw);function Qw(e){this.reflector=e}function Xw(n,r,i,o){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Hw(n,e,r,i,o)}}var $w=\"error\",Jw=\"stack\",ex=(tx.prototype.compileModuleSync=function(e){return Ar(this._compileModuleAndComponents(e,!0))},tx.prototype.compileModuleAsync=function(e){return Promise.resolve(this._compileModuleAndComponents(e,!1))},tx.prototype.compileModuleAndAllComponentsSync=function(e){return Ar(this._compileModuleAndAllComponents(e,!0))},tx.prototype.compileModuleAndAllComponentsAsync=function(e){return Promise.resolve(this._compileModuleAndAllComponents(e,!1))},tx.prototype.getComponentFactory=function(e){return this._metadataResolver.getDirectiveSummary(e).componentFactory},tx.prototype.loadAotSummaries=function(e){this.clearCache(),this._addAotSummaries(e)},tx.prototype._addAotSummaries=function(e){if(!this._addedAotSummaries.has(e)){this._addedAotSummaries.add(e);for(var t=e(),n=0;n<t.length;n++){var r=t[n];if(\"function\"==typeof r)this._addAotSummaries(r);else{var i=r;this._summaryResolver.addSummary({symbol:i.type.reference,metadata:null,type:i})}}}},tx.prototype.hasAotSummary=function(e){return!!this._summaryResolver.resolveSummary(e)},tx.prototype._filterJitIdentifiers=function(e){var t=this;return e.map(function(e){return e.reference}).filter(function(e){return!t.hasAotSummary(e)})},tx.prototype._compileModuleAndComponents=function(e,t){var n=this;return Mr(this._loadModules(e,t),function(){return n._compileComponents(e,null),n._compileModule(e)})},tx.prototype._compileModuleAndAllComponents=function(t,e){var n=this;return Mr(this._loadModules(t,e),function(){var e=[];return n._compileComponents(t,e),{ngModuleFactory:n._compileModule(t),componentFactories:e}})},tx.prototype._loadModules=function(e,r){var i=this,o=[],t=this._metadataResolver.getNgModuleMetadata(e);return this._filterJitIdentifiers(t.transitiveModule.modules).forEach(function(e){var n=i._metadataResolver.getNgModuleMetadata(e);i._filterJitIdentifiers(n.declaredDirectives).forEach(function(e){var t=i._metadataResolver.loadDirectiveMetadata(n.type.reference,e,r);t&&o.push(t)}),i._filterJitIdentifiers(n.declaredPipes).forEach(function(e){return i._metadataResolver.getOrLoadPipeMetadata(e)})}),Rr(o)},tx.prototype._compileModule=function(e){var t=this._compiledNgModuleCache.get(e);if(!t){var n=this._metadataResolver.getNgModuleMetadata(e),r=this.getExtraNgModuleProviders(n.type.reference),i=ox(),o=this._ngModuleCompiler.compile(i,n,r);t=this._interpretOrJit(Wi(n),i.statements)[o.ngModuleFactoryVar],this._compiledNgModuleCache.set(n.type.reference,t)}return t},tx.prototype._compileComponents=function(e,i){var o=this,t=this._metadataResolver.getNgModuleMetadata(e),a=new Map,s=new Set,n=this._filterJitIdentifiers(t.transitiveModule.modules);n.forEach(function(e){var r=o._metadataResolver.getNgModuleMetadata(e);o._filterJitIdentifiers(r.declaredDirectives).forEach(function(e){a.set(e,r);var t=o._metadataResolver.getDirectiveMetadata(e);if(t.isComponent&&(s.add(o._createCompiledTemplate(t,r)),i)){var n=o._createCompiledHostTemplate(t.type.reference,r);s.add(n),i.push(t.componentFactory)}})}),n.forEach(function(e){var t=o._metadataResolver.getNgModuleMetadata(e);o._filterJitIdentifiers(t.declaredDirectives).forEach(function(e){var t=o._metadataResolver.getDirectiveMetadata(e);t.isComponent&&t.entryComponents.forEach(function(e){var t=a.get(e.componentType);s.add(o._createCompiledHostTemplate(e.componentType,t))})}),t.entryComponents.forEach(function(e){if(!o.hasAotSummary(e.componentType)){var t=a.get(e.componentType);s.add(o._createCompiledHostTemplate(e.componentType,t))}})}),s.forEach(function(e){return o._compileTemplate(e)})},tx.prototype.clearCacheFor=function(e){this._compiledNgModuleCache.delete(e),this._metadataResolver.clearCacheFor(e),this._compiledHostTemplateCache.delete(e),this._compiledTemplateCache.get(e)&&this._compiledTemplateCache.delete(e)},tx.prototype.clearCache=function(){this._metadataResolver.clearCache(),this._compiledTemplateCache.clear(),this._compiledHostTemplateCache.clear(),this._compiledNgModuleCache.clear()},tx.prototype._createCompiledHostTemplate=function(e,t){if(!t)throw new Error(\"Component \"+zr(e)+\" is not part of any NgModule or the module has not been imported into your module.\");var n=this._compiledHostTemplateCache.get(e);if(!n){var r=this._metadataResolver.getDirectiveMetadata(e);ix(r);var i=this._metadataResolver.getHostComponentMetadata(r,r.componentFactory.viewDefFactory);n=new nx(!0,r.type,i,t,[r.type]),this._compiledHostTemplateCache.set(e,n)}return n},tx.prototype._createCompiledTemplate=function(e,t){var n=this._compiledTemplateCache.get(e.type.reference);return n||(ix(e),n=new nx(!1,e.type,e,t,t.transitiveModule.directives),this._compiledTemplateCache.set(e.type.reference,n)),n},tx.prototype._compileTemplate=function(e){var n=this;if(!e.isCompiled){var r=e.compMeta,i=new Map,t=ox(),o=this._styleCompiler.compileComponent(t,r);r.template.externalStylesheets.forEach(function(e){var t=n._styleCompiler.compileStyles(ox(),r,e);i.set(e.moduleUrl,t)}),this._resolveStylesCompileResult(o,i),e.ngModule.transitiveModule.pipes.map(function(e){return n._metadataResolver.getPipeSummary(e.reference)});var a=this._parseTemplate(r,e.ngModule,e.directives),s=a.template,l=a.pipes,u=this._viewCompiler.compileComponent(t,r,s,fr(o.stylesVar),l),c=this._interpretOrJit(Gi(e.ngModule.type,e.compMeta),t.statements),p=c[u.viewClassVar],d=c[u.rendererTypeVar];e.compiled(p,d)}},tx.prototype._parseTemplate=function(e,t,n){var r=this,i=e.template.preserveWhitespaces,o=n.map(function(e){return r._metadataResolver.getDirectiveSummary(e.reference)}),a=t.transitiveModule.pipes.map(function(e){return r._metadataResolver.getPipeSummary(e.reference)});return this._templateParser.parse(e,e.template.htmlAst,o,a,t.schemas,qi(t.type,e,e.template),i)},tx.prototype._resolveStylesCompileResult=function(e,i){var o=this;e.dependencies.forEach(function(e,t){var n=i.get(e.moduleUrl),r=o._resolveAndEvalStylesCompileResult(n,i);e.setValue(r)})},tx.prototype._resolveAndEvalStylesCompileResult=function(e,t){return this._resolveStylesCompileResult(e,t),this._interpretOrJit(Hi(e.meta,this._sharedStylesheetCount++),e.outputCtx.statements)[e.stylesVar]},tx.prototype._interpretOrJit=function(e,t){return this._compilerConfig.useJit?this._jitEvaluator.evaluateStatements(e,t,this._reflector,this._compilerConfig.jitDevMode):function(e,t){var n=new Ww(null,null,null,new Map);new Zw(t).visitAllStatements(e,n);var r={};return n.exports.forEach(function(e){r[e]=n.vars.get(e)}),r}(t,this._reflector)},tx);function tx(e,t,n,r,i,o,a,s,l,u,c){this._metadataResolver=e,this._templateParser=t,this._styleCompiler=n,this._viewCompiler=r,this._ngModuleCompiler=i,this._summaryResolver=o,this._reflector=a,this._jitEvaluator=s,this._compilerConfig=l,this._console=u,this.getExtraNgModuleProviders=c,this._compiledTemplateCache=new Map,this._compiledHostTemplateCache=new Map,this._compiledDirectiveWrapperCache=new Map,this._compiledNgModuleCache=new Map,this._sharedStylesheetCount=0,this._addedAotSummaries=new Set}var nx=(rx.prototype.compiled=function(e,t){for(var n in this._viewClass=e,this.compMeta.componentViewType.setDelegate(e),t)this.compMeta.rendererType[n]=t[n];this.isCompiled=!0},rx);function rx(e,t,n,r,i){this.isHost=e,this.compType=t,this.compMeta=n,this.ngModule=r,this.directives=i,this._viewClass=null,this.isCompiled=!1}function ix(e){if(!e.isComponent)throw new Error(\"Could not compile '\"+_i(e.type)+\"' because it is not a component.\")}function ox(){return{statements:[],genFilePath:\"\",importExpr:function(e){return mr({name:_i(e),moduleName:null,runtime:e})},constantPool:new ei}}function ax(){}var sx=(lx.prototype.resolve=function(e,t){var n=t;null!=e&&0<e.length&&(n=function(e,t){var n=dx(encodeURI(t)),r=dx(e);if(null!=n[ux.Scheme])return hx(n);n[ux.Scheme]=r[ux.Scheme];for(var i=ux.Scheme;i<=ux.Port;i++)null==n[i]&&(n[i]=r[i]);if(\"/\"==n[ux.Path][0])return hx(n);var o=r[ux.Path];null==o&&(o=\"/\");var a=o.lastIndexOf(\"/\");return o=o.substring(0,a+1)+n[ux.Path],n[ux.Path]=o,hx(n)}(e,n));var r=dx(n),i=this._packagePrefix;if(null==i||null==r||\"package\"!=r[ux.Scheme])return n;var o=r[ux.Path];return(i=i.replace(/\\/+$/,\"\"))+\"/\"+(o=o.replace(/^\\/+/,\"\"))},lx);function lx(e){void 0===e&&(e=null),this._packagePrefix=e}var ux,cx,px=new RegExp(\"^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\\\w\\\\d\\\\-\\\\u0100-\\\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\\\?([^#]*))?(?:#(.*))?$\");function dx(e){return e.match(px)}function hx(e){var t=e[ux.Path];return t=null==t?\"\":function(e){if(\"/\"==e)return\"/\";for(var t=\"/\"==e[0]?\"/\":\"\",n=\"/\"===e[e.length-1]?\"/\":\"\",r=e.split(\"/\"),i=[],o=0,a=0;a<r.length;a++){var s=r[a];switch(s){case\"\":case\".\":break;case\"..\":0<i.length?i.pop():o++;break;default:i.push(s)}}if(!t){for(;0<o--;)i.unshift(\"..\");0===i.length&&i.push(\".\")}return t+i.join(\"/\")+n}(t),e[ux.Path]=t,function(e,t,n,r,i,o,a){var s=[];return null!=e&&s.push(e+\":\"),null!=n&&(s.push(\"//\"),null!=t&&s.push(t+\"@\"),s.push(n),null!=r&&s.push(\":\"+r)),null!=i&&s.push(i),null!=o&&s.push(\"?\"+o),null!=a&&s.push(\"#\"+a),s.join(\"\")}(e[ux.Scheme],e[ux.UserInfo],e[ux.Domain],e[ux.Port],t,e[ux.QueryData],e[ux.Fragment])}(cx=ux=ux||{})[cx.Scheme=1]=\"Scheme\",cx[cx.UserInfo=2]=\"UserInfo\",cx[cx.Domain=3]=\"Domain\",cx[cx.Port=4]=\"Port\",cx[cx.Path=5]=\"Path\",cx[cx.QueryData=6]=\"QueryData\",cx[cx.Fragment=7]=\"Fragment\";var fx=(mx.prototype.extract=function(e){var o=this,t=iw(e,this.host,this.staticSymbolResolver,this.metadataResolver),n=t.files,r=t.ngModules;return Promise.all(r.map(function(e){return o.metadataResolver.loadNgModuleDirectiveAndPipeMetadata(e.type.reference,!1)})).then(function(){var i=[];if(n.forEach(function(e){var n=[];e.directives.forEach(function(e){var t=o.metadataResolver.getDirectiveMetadata(e);t&&t.isComponent&&n.push(t)}),n.forEach(function(e){var t=e.template.template,n=e.template.templateUrl,r=Rl.fromArray(e.template.interpolation);i.push.apply(i,q(o.messageBundle.updateFromTemplate(t,n,r)))})}),i.length)throw new Error(i.map(function(e){return e.toString()}).join(\"\\n\"));return o.messageBundle})},mx.create=function(t,e){var n=new Uh,r=Bw(t),i=new hi,o=new Lw(t,i),a=new Lb(t,i,o),s=new gw(o,a),l=new Ky({defaultEncapsulation:I.Emulated,useJit:!1}),u=new Qy({get:function(e){return t.loadResource(e)}},r,n,l),c=new ev,p=new k_(l,n,new W_(s),new tg(s),new J_(s),o,c,u,console,i,s),d=new Ob(n,[],{},e);return{extractor:new mx(t,a,d,p),staticReflector:s}},mx);function mx(e,t,n,r){this.host=e,this.staticSymbolResolver=t,this.messageBundle=n,this.metadataResolver=r}var vx=(yx.prototype.bind=function(e){if(!e.template)throw new Error(\"Binding without a template not yet supported\");var t=gx.apply(e.template),n=bx.apply(e.template,this.directiveMatcher),r=n.directives,i=n.bindings,o=n.references,a=Cx.apply(e.template,t),s=a.expressions,l=a.symbols,u=a.nestingLevel,c=a.usedPipes;return new Ex(e,r,i,o,s,l,u,c)},yx);function yx(e){this.directiveMatcher=e}var gx=(_x.apply=function(e){var t=new _x;return t.ingest(e),t},_x.prototype.ingest=function(e){var t=this;e instanceof la?(e.variables.forEach(function(e){return t.visitVariable(e)}),e.children.forEach(function(e){return e.visit(t)})):e.forEach(function(e){return e.visit(t)})},_x.prototype.visitElement=function(e){var t=this;e.references.forEach(function(e){return t.visitReference(e)}),e.children.forEach(function(e){return e.visit(t)})},_x.prototype.visitTemplate=function(e){var t=this;e.references.forEach(function(e){return t.visitReference(e)});var n=new _x(this);n.ingest(e),this.childScopes.set(e,n)},_x.prototype.visitVariable=function(e){this.maybeDeclare(e)},_x.prototype.visitReference=function(e){this.maybeDeclare(e)},_x.prototype.visitContent=function(e){},_x.prototype.visitBoundAttribute=function(e){},_x.prototype.visitBoundEvent=function(e){},_x.prototype.visitBoundText=function(e){},_x.prototype.visitText=function(e){},_x.prototype.visitTextAttribute=function(e){},_x.prototype.visitIcu=function(e){},_x.prototype.maybeDeclare=function(e){this.namedEntities.has(e.name)||this.namedEntities.set(e.name,e)},_x.prototype.lookup=function(e){return this.namedEntities.has(e)?this.namedEntities.get(e):void 0!==this.parentScope?this.parentScope.lookup(e):null},_x.prototype.getChildScope=function(e){var t=this.childScopes.get(e);if(void 0===t)throw new Error(\"Assertion error: child scope for \"+e+\" not found\");return t},_x);function _x(e){this.parentScope=e,this.namedEntities=new Map,this.childScopes=new Map}var bx=(wx.apply=function(e,t){var n=new Map,r=new Map,i=new Map;return new wx(t,n,r,i).ingest(e),{directives:n,bindings:r,references:i}},wx.prototype.ingest=function(e){var t=this;e.forEach(function(e){return e.visit(t)})},wx.prototype.visitElement=function(e){this.visitElementOrTemplate(e.name,e)},wx.prototype.visitTemplate=function(e){this.visitElementOrTemplate(\"ng-template\",e)},wx.prototype.visitElementOrTemplate=function(e,n){var r=this,i=new B;i.setElement(e);var o=wl(n);Object.getOwnPropertyNames(o).forEach(function(e){var t=o[e];i.addAttribute(e,t),\"class\"===e.toLowerCase()&&t.trim().split(/\\s+/g).forEach(function(e){return i.addClassName(e)})});var a=[];function t(t){var e=a.find(function(e){return e.inputs.hasOwnProperty(t.name)});void 0!==e?r.bindings.set(t,e):r.bindings.set(t,n)}this.matcher.match(i,function(e,t){return a.push(t)}),0<a.length&&this.directives.set(n,a),n.references.forEach(function(t){var e=null;if(\"\"===t.value.trim())e=a.find(function(e){return e.isComponent})||null;else if(null===(e=a.find(function(e){return null!==e.exportAs&&e.exportAs.some(function(e){return e===t.value})})||null))throw new Error(\"Assertion error: failed to find directive with exportAs: \"+t.value);null!==e?r.references.set(t,{directive:e,node:n}):r.references.set(t,n)}),n.attributes.forEach(t),n.inputs.forEach(t),n.outputs.forEach(t),n instanceof la&&n.templateAttrs.forEach(t),n.children.forEach(function(e){return e.visit(r)})},wx.prototype.visitContent=function(e){},wx.prototype.visitVariable=function(e){},wx.prototype.visitReference=function(e){},wx.prototype.visitTextAttribute=function(e){},wx.prototype.visitBoundAttribute=function(e){},wx.prototype.visitBoundEvent=function(e){},wx.prototype.visitBoundAttributeOrEvent=function(e){},wx.prototype.visitText=function(e){},wx.prototype.visitBoundText=function(e){},wx.prototype.visitIcu=function(e){},wx);function wx(e,t,n,r){this.matcher=e,this.directives=t,this.bindings=n,this.references=r}var xx,Cx=(f(Sx,xx=bc),Sx.apply=function(e,t){var n=new Map,r=new Map,i=new Map,o=new Set;return new Sx(n,r,o,i,t,e instanceof la?e:null,0).ingest(e),{expressions:n,symbols:r,nestingLevel:i,usedPipes:o}},Sx.prototype.ingest=function(e){e instanceof la?(e.variables.forEach(this.visitNode),e.children.forEach(this.visitNode),this.nestingLevel.set(e,this.level)):e.forEach(this.visitNode)},Sx.prototype.visitElement=function(e){e.inputs.forEach(this.visitNode),e.outputs.forEach(this.visitNode),e.children.forEach(this.visitNode)},Sx.prototype.visitTemplate=function(e){e.inputs.forEach(this.visitNode),e.outputs.forEach(this.visitNode),e.templateAttrs.forEach(this.visitNode),e.references.forEach(this.visitNode);var t=this.scope.getChildScope(e);new Sx(this.bindings,this.symbols,this.usedPipes,this.nestingLevel,t,e,this.level+1).ingest(e)},Sx.prototype.visitVariable=function(e){null!==this.template&&this.symbols.set(e,this.template)},Sx.prototype.visitReference=function(e){null!==this.template&&this.symbols.set(e,this.template)},Sx.prototype.visitText=function(e){},Sx.prototype.visitContent=function(e){},Sx.prototype.visitTextAttribute=function(e){},Sx.prototype.visitIcu=function(e){},Sx.prototype.visitBoundAttribute=function(e){e.value.visit(this)},Sx.prototype.visitBoundEvent=function(e){e.handler.visit(this)},Sx.prototype.visitBoundText=function(e){e.value.visit(this)},Sx.prototype.visitPipe=function(e,t){return this.usedPipes.add(e.name),xx.prototype.visitPipe.call(this,e,t)},Sx.prototype.visitPropertyRead=function(e,t){return this.maybeMap(t,e,e.name),xx.prototype.visitPropertyRead.call(this,e,t)},Sx.prototype.visitSafePropertyRead=function(e,t){return this.maybeMap(t,e,e.name),xx.prototype.visitSafePropertyRead.call(this,e,t)},Sx.prototype.visitPropertyWrite=function(e,t){return this.maybeMap(t,e,e.name),xx.prototype.visitPropertyWrite.call(this,e,t)},Sx.prototype.visitMethodCall=function(e,t){return this.maybeMap(t,e,e.name),xx.prototype.visitMethodCall.call(this,e,t)},Sx.prototype.visitSafeMethodCall=function(e,t){return this.maybeMap(t,e,e.name),xx.prototype.visitSafeMethodCall.call(this,e,t)},Sx.prototype.maybeMap=function(e,t,n){if(t.receiver instanceof pu){var r=this.scope.lookup(n);null!==r&&this.bindings.set(t,r)}},Sx);function Sx(e,t,n,r,i,o,a){var s=xx.call(this)||this;return s.bindings=e,s.symbols=t,s.usedPipes=n,s.nestingLevel=r,s.scope=i,s.template=o,s.level=a,s.pipesUsed=[],s.visitNode=function(e){return e.visit(s)},s}var Ex=(Ox.prototype.getDirectivesOfNode=function(e){return this.directives.get(e)||null},Ox.prototype.getReferenceTarget=function(e){return this.references.get(e)||null},Ox.prototype.getConsumerOfBinding=function(e){return this.bindings.get(e)||null},Ox.prototype.getExpressionTarget=function(e){return this.exprTargets.get(e)||null},Ox.prototype.getTemplateOfSymbol=function(e){return this.symbols.get(e)||null},Ox.prototype.getNestingLevel=function(e){return this.nestingLevel.get(e)||0},Ox.prototype.getUsedDirectives=function(){var t=new Set;return this.directives.forEach(function(e){return e.forEach(function(e){return t.add(e)})}),Array.from(t.values())},Ox.prototype.getUsedPipes=function(){return Array.from(this.usedPipes)},Ox);function Ox(e,t,n,r,i,o,a,s){this.target=e,this.directives=t,this.bindings=n,this.references=r,this.exprTargets=i,this.symbols=o,this.nestingLevel=a,this.usedPipes=s}Gy(Kr),E.core=ce,E.CUSTOM_ELEMENTS_SCHEMA=$,E.NO_ERRORS_SCHEMA=J,E.CompilerConfig=Ky,E.preserveWhitespacesDefault=Zy,E.isLoweredSymbol=C_,E.createLoweredSymbol=function(e){return\"ɵ\"+e},E.Identifiers=si,E.JitCompiler=ex,E.ConstantPool=ei,E.DirectiveResolver=tg,E.PipeResolver=J_,E.NgModuleResolver=W_,E.DEFAULT_INTERPOLATION_CONFIG=Fl,E.InterpolationConfig=Rl,E.NgModuleCompiler=q_,E.ArrayType=we,E.AssertNotNull=Tt,E.DYNAMIC_TYPE=ke,E.BinaryOperatorExpr=Bt,E.BuiltinType=me,E.CastExpr=At,E.ClassField=On,E.ClassMethod=Tn,E.ClassStmt=Nn,E.CommaExpr=rn,E.CommentStmt=Un,E.ConditionalExpr=Ct,E.DeclareFunctionStmt=mn,E.DeclareVarStmt=dn,E.Expression=je,E.ExpressionStatement=gn,E.ExpressionType=ge,E.ExternalExpr=_t,E.ExternalReference=xt,E.literalMap=_r,E.FunctionExpr=Ft,E.IfStmt=Ln,E.InstantiateExpr=ct,E.InvokeFunctionExpr=st,E.InvokeMethodExpr=it,E.JSDocCommentStmt=Hn,E.LiteralArrayExpr=Zt,E.LiteralExpr=ht,E.LiteralMapExpr=en,E.MapType=Se,E.NotExpr=Ot,E.ReadKeyExpr=Gt,E.ReadPropExpr=qt,E.ReadVarExpr=Ve,E.ReturnStatement=wn,E.ThrowStmt=Qn,E.TryCatchStmt=Yn,E.Type=de,E.WrappedNodeExpr=We,E.WriteKeyExpr=Xe,E.WritePropExpr=tt,E.WriteVarExpr=Ke,E.Statement=un,E.STRING_TYPE=Pe,E.TypeofExpr=ze,E.collectExternalReferences=function(e){var t=new sr;return t.visitAllStatements(e,null),t.externalReferences},E.EmitterVisitorContext=Tp,E.JitEvaluator=Vp,E.ViewCompiler=pb,E.getParseErrors=function(e){return e[Lr]||[]},E.isSyntaxError=function(e){return e[Fr]},E.syntaxError=jr,E.Version=Wr,E.TmplAstBoundAttribute=na,E.TmplAstBoundEvent=ia,E.TmplAstBoundText=$o,E.TmplAstContent=ca,E.TmplAstElement=aa,E.TmplAstRecursiveVisitor=_a,E.TmplAstReference=fa,E.TmplAstTemplate=la,E.TmplAstText=Qo,E.TmplAstTextAttribute=ea,E.TmplAstVariable=da,E.R3Identifiers=Ki,E.compileFactoryFromMetadata=El,E.compileInjector=Kp,E.compileNgModule=Yp,E.compilePipeFromMetadata=Xp,E.makeBindingParser=ry,E.parseTemplate=ny,E.compileBaseDefFromMetadata=hy,E.compileComponentFromMetadata=fy,E.compileDirectiveFromMetadata=dy,E.parseHostBindings=Dy,E.verifyHostBindings=Ty,E.publishFacade=Gy,E.VERSION=Yy,E.TextAst=lf,E.BoundTextAst=cf,E.AttrAst=df,E.BoundElementPropertyAst=mf,E.BoundEventAst=yf,E.ReferenceAst=_f,E.VariableAst=wf,E.ElementAst=Cf,E.EmbeddedTemplateAst=Ef,E.BoundDirectivePropertyAst=kf,E.DirectiveAst=Tf,E.ProviderAst=Af,E.NgContentAst=Rf,E.NullTemplateVisitor=jf,E.RecursiveTemplateAstVisitor=Vf,E.templateVisitAll=Uf,E.sanitizeIdentifier=vi,E.identifierName=_i,E.identifierModuleUrl=bi,E.viewClassName=wi,E.rendererTypeName=xi,E.hostViewClassName=Ci,E.componentFactoryName=Si,E.tokenName=Ei,E.tokenReference=Oi,E.CompileStylesheetMetadata=ki,E.CompileTemplateMetadata=Di,E.CompileDirectiveMetadata=Ii,E.CompilePipeMetadata=Ai,E.CompileShallowModuleMetadata=Ri,E.CompileNgModuleMetadata=Ni,E.TransitiveCompileNgModuleMetadata=Fi,E.ProviderMeta=Bi,E.flatten=Ui,E.templateSourceUrl=qi,E.sharedStylesheetJitUrl=Hi,E.ngModuleJitUrl=Wi,E.templateJitUrl=Gi,E.createAotUrlResolver=Bw,E.createAotCompiler=function(t,e,n){var r,i=e.translations||\"\",o=Bw(t),a=new hi,s=new Lw(t,a),l=new Lb(t,a,s),u=new gw(s,l,[],[],n);r=e.enableIvy?new Uh:new t_(new Uh,i,e.i18nFormat,e.missingTranslation,console);var c=new Ky({defaultEncapsulation:I.Emulated,useJit:!1,missingTranslation:e.missingTranslation,preserveWhitespaces:e.preserveWhitespaces,strictInjectionParameters:e.strictInjectionParameters}),p=new Qy({get:function(e){return t.loadResource(e)}},o,r,c),d=new Rc(new Vl),h=new ev,f=new Cm(c,u,d,h,r,console,[]),m=new k_(c,r,new W_(u),new tg(u),new J_(u),s,h,p,console,a,u,n),v=new pb(u),y=new tb(e,u);return{compiler:new $b(c,e,t,u,m,f,new ah(o),v,y,new q_(u),new s_(u,!!e.enableIvy),new K_,s,l),reflector:u}},E.AotCompiler=$b,E.analyzeNgModules=rw,E.analyzeAndValidateNgModules=iw,E.analyzeFile=aw,E.analyzeFileForInjectables=sw,E.mergeAnalyzedFiles=lw,E.GeneratedFile=Pb,E.toTypeScript=function(e,t){if(void 0===t&&(t=\"\"),!e.stmts)throw new Error(\"Illegal state: No stmts present on GeneratedFile \"+e.genFileUrl);return(new K_).emitStatements(e.genFileUrl,e.stmts,t)},E.formattedError=dw,E.isFormattedError=function(e){return!!e[cw]},E.StaticReflector=gw,E.StaticSymbol=pi,E.StaticSymbolCache=hi,E.ResolvedStaticSymbol=Fb,E.StaticSymbolResolver=Lb,E.unescapeIdentifier=Bb,E.unwrapResolvedMetadata=Ub,E.AotSummaryResolver=Lw,E.AstPath=Bc,E.SummaryResolver=Uw,E.JitSummaryResolver=zw,E.CompileReflector=ax,E.createUrlResolverWithoutPackagePrefix=function(){return new sx},E.createOfflineCompileUrlResolver=function(){return new sx(\".\")},E.UrlResolver=sx,E.getUrlScheme=function(e){var t=dx(e);return t&&t[ux.Scheme]||\"\"},E.ResourceLoader=Iy,E.ElementSchemaRegistry=Qm,E.computeMsgId=ts,E.Extractor=fx,E.I18NHtmlParser=t_,E.MessageBundle=Ob,E.Serializer=hs,E.Xliff=Eg,E.Xliff2=Rg,E.Xmb=Ls,E.Xtb=Wg,E.DirectiveNormalizer=Qy,E.ParserError=Jl,E.ParseSpan=eu,E.AST=nu,E.Quote=ou,E.EmptyExpr=lu,E.ImplicitReceiver=pu,E.Chain=fu,E.Conditional=yu,E.PropertyRead=bu,E.PropertyWrite=Cu,E.SafePropertyRead=Ou,E.KeyedRead=Tu,E.KeyedWrite=Au,E.BindingPipe=Nu,E.LiteralPrimitive=Lu,E.LiteralArray=Uu,E.LiteralMap=Hu,E.Interpolation=Yu,E.Binary=Qu,E.PrefixNot=Ju,E.NonNullAssert=nc,E.MethodCall=oc,E.SafeMethodCall=lc,E.FunctionCall=pc,E.AbsoluteSourceSpan=fc,E.ASTWithSource=mc,E.TemplateBinding=yc,E.NullAstVisitor=gc,E.RecursiveAstVisitor=bc,E.AstTransformer=xc,E.AstMemoryEfficientTransformer=Sc,E.visitAstChildren=function(e,t,n){function r(e){t.visit&&t.visit(e,n)||e.visit(t,n)}function i(e){e.forEach(r)}e.visit({visitBinary:function(e){r(e.left),r(e.right)},visitChain:function(e){i(e.expressions)},visitConditional:function(e){r(e.condition),r(e.trueExp),r(e.falseExp)},visitFunctionCall:function(e){e.target&&r(e.target),i(e.args)},visitImplicitReceiver:function(e){},visitInterpolation:function(e){i(e.expressions)},visitKeyedRead:function(e){r(e.obj),r(e.key)},visitKeyedWrite:function(e){r(e.obj),r(e.key),r(e.obj)},visitLiteralArray:function(e){i(e.expressions)},visitLiteralMap:function(e){},visitLiteralPrimitive:function(e){},visitMethodCall:function(e){r(e.receiver),i(e.args)},visitPipe:function(e){r(e.exp),i(e.args)},visitPrefixNot:function(e){r(e.expression)},visitNonNullAssert:function(e){r(e.expression)},visitPropertyRead:function(e){r(e.receiver)},visitPropertyWrite:function(e){r(e.receiver),r(e.value)},visitQuote:function(e){},visitSafeMethodCall:function(e){r(e.receiver),i(e.args)},visitSafePropertyRead:function(e){r(e.receiver)}})},E.ParsedProperty=kc,E.ParsedEvent=Dc,E.ParsedVariable=Tc,E.BoundElementProperty=Ic,E.Lexer=Vl,E.Token=Ul,E.EOF=Wl,E.isIdentifier=Zl,E.isQuote=Xl,E.SplitInterpolation=Pc,E.TemplateBindingParseResult=Ac,E.Parser=Rc,E._ParseAST=jc,E.ERROR_COMPONENT_TYPE=O_,E.CompileMetadataResolver=k_,E.Text=zc,E.Expansion=Hc,E.ExpansionCase=Gc,E.Attribute=Kc,E.Element=Qc,E.Comment=$c,E.visitAll=ep,E.RecursiveVisitor=tp,E.findNode=function(e,r){var t,i=[];function n(){return null!==t&&t.apply(this,arguments)||this}return ep((f(n,t=tp),n.prototype.visit=function(e,t){var n=function e(t){var n=t.sourceSpan.start.offset,r=t.sourceSpan.end.offset;return t instanceof Qc&&(t.endSourceSpan?r=t.endSourceSpan.end.offset:t.children&&t.children.length&&(r=e(t.children[t.children.length-1]).end)),{start:n,end:r}}(e);if(!(n.start<=r&&r<n.end))return!0;i.push(e)},new n),e),new Bc(i,r)},E.HtmlParser=Uh,E.ParseTreeResult=Rh,E.TreeError=Ah,E.HtmlTagDefinition=i,E.getHtmlTagDefinition=d,E.splitNsName=H,E.isNgContainer=W,E.isNgContent=l,E.isNgTemplate=V,E.getNsPrefix=c,E.mergeNsAndName=p,E.NAMED_ENTITIES=u,E.NGSP_UNICODE=\"\",E.XmlParser=wg,E.debugOutputAstAsTypeScript=Y_,E.TypeScriptEmitter=K_,E.ParseLocation=Lo,E.ParseSourceFile=Bo,E.ParseSourceSpan=Uo,E.EMPTY_PARSE_LOCATION=Ho,E.EMPTY_SOURCE_SPAN=Wo,E.ParseError=Go,E.typeSourceSpan=Ko,E.r3JitTypeSourceSpan=Zo,E.DomElementSchemaRegistry=ev,E.CssSelector=B,E.SelectorMatcher=T,E.SelectorListContext=v,E.SelectorContext=y,E.HOST_ATTR=nh,E.CONTENT_ATTR=rh,E.StylesCompileDependency=ih,E.CompiledStylesheet=oh,E.StyleCompiler=ah,E.TemplateParseError=bm,E.TemplateParseResult=xm,E.TemplateParser=Cm,E.splitClasses=Pm,E.createElementCssSelector=Rm,E.removeSummaryDuplicates=Lm,E.isEmptyExpression=Vm,E.compileInjectable=Tl,E.R3TargetBinder=vx,E.R3BoundTarget=Ex,Object.defineProperty(E,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/compiler\")):System.registerDynamic(\"npm:@angular/core/bundles/core-testing.umd.js\",[\"@angular/core\",\"@angular/compiler\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/compiler\"))})}(0,function(e,y,r){\"use strict\";var i=\"undefined\"==typeof window?global:window;function o(e,t,n,r){var i=Zone.current,o=Zone.AsyncTestZoneSpec;if(void 0===o)throw new Error(\"AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js\");var a=Zone.ProxyZoneSpec;if(void 0===a)throw new Error(\"ProxyZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/proxy.js\");var s=a.get();a.assertPresent();var l=Zone.current.getZoneWith(\"ProxyZoneSpec\"),u=s.getDelegate();return l.parent.run(function(){var t=new o(function(){i.run(function(){s.getDelegate()==t&&s.setDelegate(u),n()})},function(e){i.run(function(){s.getDelegate()==t&&s.setDelegate(u),r(e)})},\"test\");s.setDelegate(t)}),Zone.current.runGuarded(e,t)}var p=(t.prototype._tick=function(e){this.changeDetectorRef.detectChanges(),e&&this.checkNoChanges()},t.prototype.detectChanges=function(e){var t=this;void 0===e&&(e=!0),null!=this.ngZone?this.ngZone.run(function(){t._tick(e)}):this._tick(e)},t.prototype.checkNoChanges=function(){this.changeDetectorRef.checkNoChanges()},t.prototype.autoDetectChanges=function(e){if(void 0===e&&(e=!0),null==this.ngZone)throw new Error(\"Cannot call autoDetectChanges when ComponentFixtureNoNgZone is set\");this._autoDetect=e,this.detectChanges()},t.prototype.isStable=function(){return this._isStable&&!this.ngZone.hasPendingMacrotasks},t.prototype.whenStable=function(){var t=this;return this.isStable()?Promise.resolve(!1):(null!==this._promise||(this._promise=new Promise(function(e){t._resolve=e})),this._promise)},t.prototype._getRenderer=function(){return void 0===this._renderer&&(this._renderer=this.componentRef.injector.get(y.RendererFactory2,null)),this._renderer},t.prototype.whenRenderingDone=function(){var e=this._getRenderer();return e&&e.whenRenderingDone?e.whenRenderingDone():this.whenStable()},t.prototype.destroy=function(){this._isDestroyed||(this.componentRef.destroy(),null!=this._onUnstableSubscription&&(this._onUnstableSubscription.unsubscribe(),this._onUnstableSubscription=null),null!=this._onStableSubscription&&(this._onStableSubscription.unsubscribe(),this._onStableSubscription=null),null!=this._onMicrotaskEmptySubscription&&(this._onMicrotaskEmptySubscription.unsubscribe(),this._onMicrotaskEmptySubscription=null),null!=this._onErrorSubscription&&(this._onErrorSubscription.unsubscribe(),this._onErrorSubscription=null),this._isDestroyed=!0)},t);function t(e,t,n){var r=this;this.componentRef=e,this.ngZone=t,this._autoDetect=n,this._isStable=!0,this._isDestroyed=!1,this._resolve=null,this._promise=null,this._onUnstableSubscription=null,this._onStableSubscription=null,this._onMicrotaskEmptySubscription=null,this._onErrorSubscription=null,this.changeDetectorRef=e.changeDetectorRef,this.elementRef=e.location,this.debugElement=y.getDebugNode(this.elementRef.nativeElement),this.componentInstance=e.instance,this.nativeElement=this.elementRef.nativeElement,this.componentRef=e,(this.ngZone=t)&&t.runOutsideAngular(function(){r._onUnstableSubscription=t.onUnstable.subscribe({next:function(){r._isStable=!1}}),r._onMicrotaskEmptySubscription=t.onMicrotaskEmpty.subscribe({next:function(){r._autoDetect&&r.detectChanges(!0)}}),r._onStableSubscription=t.onStable.subscribe({next:function(){r._isStable=!0,null!==r._promise&&function(e){Zone.current.scheduleMicroTask(\"scheduleMicrotask\",e)}(function(){t.hasPendingMacrotasks||null!==r._promise&&(r._resolve(!0),r._resolve=null,r._promise=null)})}}),r._onErrorSubscription=t.onError.subscribe({next:function(e){throw e}})})}var n=\"undefined\"!=typeof Zone?Zone:null,a=n&&n.FakeAsyncTestZoneSpec,s=n&&n.ProxyZoneSpec,l=null;function u(){l=null,s&&s.assertPresent().resetDelegate()}var c=!1;function d(){if(null==l)throw new Error(\"The code should be running in the fakeAsync zone to call this function\");return l}function h(){d().flushMicrotasks()}var f=\"undefined\"!=typeof Zone?Zone:null,m=f&&f[f.__symbol__(\"fakeAsyncTest\")];function v(){return m?m.resetFakeAsyncZone():u()}var g=function(e,t){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function _(e,t){function n(){this.constructor=e}g(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function b(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function w(o,a,s,l){return new(s=s||Promise)(function(e,t){function n(e){try{i(l.next(e))}catch(e){t(e)}}function r(e){try{i(l.throw(e))}catch(e){t(e)}}function i(t){t.done?e(t.value):new s(function(e){e(t.value)}).then(n,r)}i((l=l.apply(o,a||[])).next())})}function x(n,r){var i,o,a,e,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return e={next:t(0),throw:t(1),return:t(2)},\"function\"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function t(t){return function(e){return function(t){if(i)throw new TypeError(\"Generator is already executing.\");for(;s;)try{if(i=1,o&&(a=2&t[0]?o.return:t[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,t[1])).done)return a;switch(o=0,a&&(t=[2&t[0],a.value]),t[0]){case 0:case 1:a=t;break;case 4:return s.label++,{value:t[1],done:!1};case 5:s.label++,o=t[1],t=[0];continue;case 7:t=s.ops.pop(),s.trys.pop();continue;default:if(!(a=0<(a=s.trys).length&&a[a.length-1])&&(6===t[0]||2===t[0])){s=0;continue}if(3===t[0]&&(!a||t[1]>a[0]&&t[1]<a[3])){s.label=t[1];break}if(6===t[0]&&s.label<a[1]){s.label=a[1],a=t;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(t);break}a[2]&&s.ops.pop(),s.trys.pop();continue}t=r.call(n,s)}catch(e){t=[6,e],o=0}finally{i=a=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([t,e])}}}function C(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function S(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function E(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(S(arguments[t]));return e}var O=(k.prototype.done=function(e){this._resolve(e)},k.prototype.fail=function(e,t){this._reject(e)},Object.defineProperty(k.prototype,\"promise\",{get:function(){return this._promise},enumerable:!0,configurable:!0}),k);function k(){var n=this;this._promise=new Promise(function(e,t){n._resolve=e,n._reject=t})}var D=(T.prototype.insertRootElement=function(e){},T);function T(){}var I=new y.InjectionToken(\"ComponentFixtureAutoDetect\"),P=new y.InjectionToken(\"ComponentFixtureNoNgZone\");var A=new Map;function M(r){var n=[],i=new Map;function l(e){var t=i.get(e);if(!t){var n=r(e);i.set(e,t=n.then(L))}return t}return R.forEach(function(r,e){var i=[];r.templateUrl&&i.push(l(r.templateUrl).then(function(e){r.template=e}));var o=r.styleUrls,a=r.styles||(r.styles=[]),s=r.styles.length;o&&o.forEach(function(t,n){a.push(\"\"),i.push(l(t).then(function(e){a[s+n]=e,o.splice(o.indexOf(t),1),0==o.length&&(r.styleUrls=void 0)}))});var t=Promise.all(i).then(function(){return function(e){N.delete(e)}(e)});n.push(t)}),F(),Promise.all(n).then(function(){})}var R=new Map,N=new Set;function j(e){return N.has(e)}function F(){var e=R;return R=new Map,e}function L(e){return\"string\"==typeof e?e:e.text()}var V=0,B=(U.prototype.overrideMetadata=function(e,t,n){var r={};if(t&&function(e){var n=[];Object.keys(e).forEach(function(e){e.startsWith(\"_\")||n.push(e)});for(var r=e;r=Object.getPrototypeOf(r);)Object.keys(r).forEach(function(e){var t=Object.getOwnPropertyDescriptor(r,e);!e.startsWith(\"_\")&&t&&\"get\"in t&&n.push(e)});return n}(t).forEach(function(e){return r[e]=t[e]}),n.set){if(n.remove||n.add)throw new Error(\"Cannot set and add/remove \"+y.ɵstringify(e)+\" at the same time!\");!function(e,t){for(var n in t)e[n]=t[n]}(r,n.set)}return n.remove&&function(n,r,i){function e(t){var e=r[t];Array.isArray(e)?e.forEach(function(e){o.add(z(t,e,i))}):o.add(z(t,e,i))}var o=new Set;for(var t in r)e(t);function a(t){var e=n[t];Array.isArray(e)?n[t]=e.filter(function(e){return!o.has(z(t,e,i))}):o.has(z(t,e,i))&&(n[t]=void 0)}for(var t in n)a(t)}(r,n.remove,this._references),n.add&&function(e,t){for(var n in t){var r=t[n],i=e[n];null!=i&&Array.isArray(i)?e[n]=i.concat(r):e[n]=r}}(r,n.add),new e(r)},U);function U(){this._references=new Map}function z(e,t,n){return e+\":\"+JSON.stringify(t,function(e,t){return\"function\"==typeof t&&(t=function(e,t){var n=t.get(e);n||(n=\"\"+y.ɵstringify(e)+V++,t.set(e,n));return n}(t,n)),t})}var q=new y.ɵReflectionCapabilities,H=(W.prototype.addOverride=function(e,t){var n=this.overrides.get(e)||[];n.push(t),this.overrides.set(e,n),this.resolved.delete(e)},W.prototype.setOverrides=function(e){var i=this;this.overrides.clear(),e.forEach(function(e){var t=S(e,2),n=t[0],r=t[1];i.addOverride(n,r)})},W.prototype.getAnnotation=function(e){for(var t=q.annotations(e),n=t.length-1;0<=n;n--){var r=t[n];if(r instanceof y.Directive||r instanceof y.Component||r instanceof y.Pipe||r instanceof y.NgModule)return r instanceof this.type?r:null}return null},W.prototype.resolve=function(e){var t=this,n=this.resolved.get(e)||null;if(!n){if(n=this.getAnnotation(e)){var r=this.overrides.get(e);if(r){var i=new B;r.forEach(function(e){n=i.overrideMetadata(t.type,n,e)})}}this.resolved.set(e,n)}return n},W);function W(){this.overrides=new Map,this.resolved=new Map}var G,Y=(_(K,G=H),Object.defineProperty(K.prototype,\"type\",{get:function(){return y.Directive},enumerable:!0,configurable:!0}),K);function K(){return null!==G&&G.apply(this,arguments)||this}var Z,Q=(_(X,Z=H),Object.defineProperty(X.prototype,\"type\",{get:function(){return y.Component},enumerable:!0,configurable:!0}),X);function X(){return null!==Z&&Z.apply(this,arguments)||this}var $,J=(_(ee,$=H),Object.defineProperty(ee.prototype,\"type\",{get:function(){return y.Pipe},enumerable:!0,configurable:!0}),ee);function ee(){return null!==$&&$.apply(this,arguments)||this}var te,ne,re,ie=(_(oe,te=H),Object.defineProperty(oe.prototype,\"type\",{get:function(){return y.NgModule},enumerable:!0,configurable:!0}),oe);function oe(){return null!==te&&te.apply(this,arguments)||this}(re=ne=ne||{})[re.DECLARATION=0]=\"DECLARATION\",re[re.OVERRIDE_TEMPLATE=1]=\"OVERRIDE_TEMPLATE\";var ae=(se.prototype.setCompilerProviders=function(e){this.compilerProviders=e,this._injector=null},se.prototype.configureTestingModule=function(e){var t,n,r,i;void 0!==e.declarations&&(this.queueTypeArray(e.declarations,ne.DECLARATION),(t=this.declarations).push.apply(t,E(e.declarations))),void 0!==e.imports&&(this.queueTypesFromModulesArray(e.imports),(n=this.imports).push.apply(n,E(e.imports))),void 0!==e.providers&&(r=this.providers).push.apply(r,E(e.providers)),void 0!==e.schemas&&(i=this.schemas).push.apply(i,E(e.schemas))},se.prototype.overrideModule=function(e,t){if(this.resolvers.module.addOverride(e,t),null===this.resolvers.module.resolve(e))throw new Error(e.name+\" is not an @NgModule or is missing metadata\");this.recompileNgModule(e),this.queueTypesFromModulesArray([e])},se.prototype.overrideComponent=function(e,t){this.resolvers.component.addOverride(e,t),this.pendingComponents.add(e)},se.prototype.overrideDirective=function(e,t){this.resolvers.directive.addOverride(e,t),this.pendingDirectives.add(e)},se.prototype.overridePipe=function(e,t){this.resolvers.pipe.addOverride(e,t),this.pendingPipes.add(e)},se.prototype.overrideProvider=function(e,t){var n,r=t.useFactory?{provide:e,useFactory:t.useFactory,deps:t.deps||[],multi:t.multi}:{provide:e,useValue:t.useValue,multi:t.multi};(\"string\"!=typeof e&&(n=y.ɵgetInjectableDef(e))&&\"root\"===n.providedIn?this.rootProviderOverrides:this.providerOverrides).push(r),this.providerOverridesByToken.set(e,r)},se.prototype.overrideTemplateUsingTestingModule=function(e,t){var n,r=this,i=e[y.ɵNG_COMP_DEF],o=!!i&&!j(e)&&!!(n=r.resolvers.component.resolve(e)).styleUrls&&0<n.styleUrls.length,a=o?{template:t,styles:[],styleUrls:[]}:{template:t};this.overrideComponent(e,{set:a}),o&&i.styles&&0<i.styles.length&&this.existingComponentStyles.set(e,i.styles),this.componentToModuleScope.set(e,ne.OVERRIDE_TEMPLATE)},se.prototype.compileComponents=function(){return w(this,void 0,void 0,function(){var t,n=this;return x(this,function(e){switch(e.label){case 0:return this.clearComponentResolutionQueue(),this.compileTypesSync()?[4,M(function(e){return t=t||n.injector.get(r.ResourceLoader),Promise.resolve(t.get(e))})]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})},se.prototype.finalize=function(){this.compileTypesSync(),this.compileTestModule(),this.applyTransitiveScopes(),this.applyProviderOverrides(),this.patchComponentsWithExistingStyles(),this.componentToModuleScope.clear();var e=this.platform.injector;this.testModuleRef=new y.ɵRender3NgModuleRef(this.testModuleType,e);var t=this.testModuleRef.injector.get(y.LOCALE_ID,y.ɵDEFAULT_LOCALE_ID);return y.ɵsetLocaleId(t),this.testModuleRef.injector.get(y.ApplicationInitStatus).runInitializers(),this.testModuleRef},se.prototype._compileNgModuleSync=function(e){this.queueTypesFromModulesArray([e]),this.compileTypesSync(),this.applyProviderOverrides(),this.applyProviderOverridesToModule(e),this.applyTransitiveScopes()},se.prototype._compileNgModuleAsync=function(t){return w(this,void 0,void 0,function(){return x(this,function(e){switch(e.label){case 0:return null===this.originalRegisteredModules&&(this.originalRegisteredModules=new Map(A)),this.queueTypesFromModulesArray([t]),[4,this.compileComponents()];case 1:return e.sent(),this.applyProviderOverrides(),this.applyProviderOverridesToModule(t),this.applyTransitiveScopes(),[2]}})})},se.prototype._getModuleResolver=function(){return this.resolvers.module},se.prototype._getComponentFactories=function(e){var r=this;return le(e.ɵmod.declarations).reduce(function(e,t){var n=t.ɵcmp;return n&&e.push(new y.ɵRender3ComponentFactory(n,r.testModuleRef)),e},[])},se.prototype.compileTypesSync=function(){var n=this,r=!1;return this.pendingComponents.forEach(function(e){r=r||j(e);var t=n.resolvers.component.resolve(e);n.maybeStoreNgDef(y.ɵNG_COMP_DEF,e),y.ɵcompileComponent(e,t)}),this.pendingComponents.clear(),this.pendingDirectives.forEach(function(e){var t=n.resolvers.directive.resolve(e);n.maybeStoreNgDef(y.ɵNG_DIR_DEF,e),y.ɵcompileDirective(e,t)}),this.pendingDirectives.clear(),this.pendingPipes.forEach(function(e){var t=n.resolvers.pipe.resolve(e);n.maybeStoreNgDef(y.ɵNG_PIPE_DEF,e),y.ɵcompilePipe(e,t)}),this.pendingPipes.clear(),r},se.prototype.applyTransitiveScopes=function(){function r(e){if(!n.has(e)){var t=function(e){return e===ne.DECLARATION||e===ne.OVERRIDE_TEMPLATE}(e)?i.testModuleType:e;n.set(e,y.ɵtransitiveScopesFor(t))}return n.get(e)}var i=this,n=new Map;this.componentToModuleScope.forEach(function(e,t){var n=r(e);i.storeFieldOfDefOnType(t,y.ɵNG_COMP_DEF,\"directiveDefs\"),i.storeFieldOfDefOnType(t,y.ɵNG_COMP_DEF,\"pipeDefs\"),y.ɵpatchComponentDefWithScope(t.ɵcmp,n)}),this.componentToModuleScope.clear()},se.prototype.applyProviderOverrides=function(){function e(n){return function(e){var t=(n===y.ɵNG_COMP_DEF?r.resolvers.component:r.resolvers.directive).resolve(e);r.hasProviderOverrides(t.providers)&&r.patchDefWithProviderOverrides(e,n)}}var r=this;this.seenComponents.forEach(e(y.ɵNG_COMP_DEF)),this.seenDirectives.forEach(e(y.ɵNG_DIR_DEF)),this.seenComponents.clear(),this.seenDirectives.clear()},se.prototype.applyProviderOverridesToModule=function(e){var t,n;if(!this.moduleProvidersOverridden.has(e)){this.moduleProvidersOverridden.add(e);var r=e[y.ɵNG_INJ_DEF];if(0<this.providerOverridesByToken.size){var i=E(ue(ue(r.imports,function(e){return function(e){return e.hasOwnProperty(\"ngModule\")}(e)?e.providers:[]})),r.providers);this.hasProviderOverrides(i)&&(this.maybeStoreNgDef(y.ɵNG_INJ_DEF,e),this.storeFieldOfDefOnType(e,y.ɵNG_INJ_DEF,\"providers\"),r.providers=this.getOverriddenProviders(i));var o=e[y.ɵNG_MOD_DEF];try{for(var a=C(o.imports),s=a.next();!s.done;s=a.next()){var l=s.value;this.applyProviderOverridesToModule(l)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}}}},se.prototype.patchComponentsWithExistingStyles=function(){this.existingComponentStyles.forEach(function(e,t){return t[y.ɵNG_COMP_DEF].styles=e}),this.existingComponentStyles.clear()},se.prototype.queueTypeArray=function(e,t){var n,r;try{for(var i=C(e),o=i.next();!o.done;o=i.next()){var a=o.value;Array.isArray(a)?this.queueTypeArray(a,t):this.queueType(a,t)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}},se.prototype.recompileNgModule=function(e){var t=this.resolvers.module.resolve(e);if(null===t)throw new Error(\"Unable to resolve metadata for NgModule: \"+e.name);this.maybeStoreNgDef(y.ɵNG_MOD_DEF,e),this.maybeStoreNgDef(y.ɵNG_INJ_DEF,e),y.ɵcompileNgModuleDefs(e,t)},se.prototype.queueType=function(e,t){return this.resolvers.component.resolve(e)?(!j(e)&&e.hasOwnProperty(y.ɵNG_COMP_DEF)||this.pendingComponents.add(e),this.seenComponents.add(e),void(this.componentToModuleScope.has(e)&&this.componentToModuleScope.get(e)!==ne.DECLARATION||this.componentToModuleScope.set(e,t))):this.resolvers.directive.resolve(e)?(e.hasOwnProperty(y.ɵNG_DIR_DEF)||this.pendingDirectives.add(e),void this.seenDirectives.add(e)):void(!this.resolvers.pipe.resolve(e)||e.hasOwnProperty(y.ɵNG_PIPE_DEF)||this.pendingPipes.add(e))},se.prototype.queueTypesFromModulesArray=function(e){var t,n;try{for(var r=C(e),i=r.next();!i.done;i=r.next()){var o=i.value;if(Array.isArray(o))this.queueTypesFromModulesArray(o);else if(o.hasOwnProperty(\"ɵmod\")){var a=o.ɵmod;this.queueTypeArray(le(a.declarations),o),this.queueTypesFromModulesArray(le(a.imports)),this.queueTypesFromModulesArray(le(a.exports))}}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},se.prototype.maybeStoreNgDef=function(e,t){if(!this.initialNgDefs.has(t)){var n=Object.getOwnPropertyDescriptor(t,e);this.initialNgDefs.set(t,[e,n])}},se.prototype.storeFieldOfDefOnType=function(e,t,n){var r=e[t],i=r[n];this.defCleanupOps.push({field:n,def:r,original:i})},se.prototype.clearComponentResolutionQueue=function(){var n=this;null===this.originalComponentResolutionQueue&&(this.originalComponentResolutionQueue=new Map),F().forEach(function(e,t){return n.originalComponentResolutionQueue.set(t,e)})},se.prototype.restoreComponentResolutionQueue=function(){null!==this.originalComponentResolutionQueue&&(function(e){N.clear(),e.forEach(function(e,t){return N.add(t)}),R=e}(this.originalComponentResolutionQueue),this.originalComponentResolutionQueue=null)},se.prototype.restoreOriginalState=function(){he(this.defCleanupOps,function(e){e.def[e.field]=e.original}),this.initialNgDefs.forEach(function(e,t){var n=S(e,2),r=n[0],i=n[1];i?Object.defineProperty(t,r,i):delete t[r]}),this.initialNgDefs.clear(),this.moduleProvidersOverridden.clear(),this.restoreComponentResolutionQueue(),this.originalRegisteredModules&&(function(e){A=new Map(e)}(this.originalRegisteredModules),this.originalRegisteredModules=null),y.ɵsetLocaleId(y.ɵDEFAULT_LOCALE_ID)},se.prototype.compileTestModule=function(){function e(){}var t=this;y.ɵcompileNgModuleDefs(e,{providers:E(this.rootProviderOverrides)});var n=new y.NgZone({enableLongStackTrace:!0}),r=E([{provide:y.NgZone,useValue:n},{provide:y.Compiler,useFactory:function(){return new fe(t)}}],this.providers,this.providerOverrides),i=[e,this.additionalModuleTypes,this.imports||[]];y.ɵcompileNgModuleDefs(this.testModuleType,{declarations:this.declarations,imports:i,schemas:this.schemas,providers:r},!0),this.applyProviderOverridesToModule(this.testModuleType)},Object.defineProperty(se.prototype,\"injector\",{get:function(){if(null!==this._injector)return this._injector;var t=[];function e(){}this.platform.injector.get(y.COMPILER_OPTIONS).forEach(function(e){e.providers&&t.push(e.providers)}),null!==this.compilerProviders&&t.push.apply(t,E(this.compilerProviders)),y.ɵcompileNgModuleDefs(e,{providers:t});var n=new y.ɵNgModuleFactory(e);return this._injector=n.create(this.platform.injector).injector,this._injector},enumerable:!0,configurable:!0}),se.prototype.getSingleProviderOverrides=function(e){var t=pe(e);return this.providerOverridesByToken.get(t)||null},se.prototype.getProviderOverrides=function(e){var t=this;return e&&e.length&&0!==this.providerOverridesByToken.size?ue(ue(e,function(e){return t.getSingleProviderOverrides(e)||[]})):[]},se.prototype.getOverriddenProviders=function(e){var n=this;if(!e||!e.length||0===this.providerOverridesByToken.size)return[];var t=this.getProviderOverrides(e),r=t.some(de),i=E(e,t);if(!r)return i;var o=[],a=new Set;return he(i,function(e){var t=pe(e);de(e)&&n.providerOverridesByToken.has(t)?a.has(t)||(a.add(t),e&&e.useValue&&Array.isArray(e.useValue)?he(e.useValue,function(e){o.unshift({provide:t,useValue:e,multi:!0})}):o.unshift(e)):o.unshift(e)}),o},se.prototype.hasProviderOverrides=function(e){return 0<this.getProviderOverrides(e).length},se.prototype.patchDefWithProviderOverrides=function(e,t){var n=this,r=e[t];if(r&&r.providersResolver){this.maybeStoreNgDef(t,e);var i=r.providersResolver,o=function(e){return n.getOverriddenProviders(e)};this.storeFieldOfDefOnType(e,t,\"providersResolver\"),r.providersResolver=function(e){return i(e,o)}}},se);function se(e,t){this.platform=e,this.additionalModuleTypes=t,this.originalComponentResolutionQueue=null,this.originalRegisteredModules=null,this.declarations=[],this.imports=[],this.providers=[],this.schemas=[],this.pendingComponents=new Set,this.pendingDirectives=new Set,this.pendingPipes=new Set,this.seenComponents=new Set,this.seenDirectives=new Set,this.existingComponentStyles=new Map,this.resolvers={module:new ie,component:new Q,directive:new Y,pipe:new J},this.componentToModuleScope=new Map,this.initialNgDefs=new Map,this.defCleanupOps=[],this._injector=null,this.compilerProviders=null,this.providerOverrides=[],this.rootProviderOverrides=[],this.providerOverridesByToken=new Map,this.moduleProvidersOverridden=new Set,this.testModuleRef=null;function n(){}this.testModuleType=n}function le(e){return e instanceof Function?e():e}function ue(e,t){var n=[];return e.forEach(function(e){Array.isArray(e)?n.push.apply(n,E(ue(e,t))):n.push(t?t(e):e)}),n}function ce(e,t){return e&&\"object\"==typeof e&&e[t]}function pe(e){return ce(e,\"provide\")||e}function de(e){return!!ce(e,\"multi\")}function he(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n)}var fe=(me.prototype.compileModuleSync=function(e){return this.testBed._compileNgModuleSync(e),new y.ɵNgModuleFactory(e)},me.prototype.compileModuleAsync=function(t){return w(this,void 0,void 0,function(){return x(this,function(e){switch(e.label){case 0:return[4,this.testBed._compileNgModuleAsync(t)];case 1:return e.sent(),[2,new y.ɵNgModuleFactory(t)]}})})},me.prototype.compileModuleAndAllComponentsSync=function(e){var t=this.compileModuleSync(e),n=this.testBed._getComponentFactories(e);return new y.ModuleWithComponentFactories(t,n)},me.prototype.compileModuleAndAllComponentsAsync=function(r){return w(this,void 0,void 0,function(){var t,n;return x(this,function(e){switch(e.label){case 0:return[4,this.compileModuleAsync(r)];case 1:return t=e.sent(),n=this.testBed._getComponentFactories(r),[2,new y.ModuleWithComponentFactories(t,n)]}})})},me.prototype.clearCache=function(){},me.prototype.clearCacheFor=function(e){},me.prototype.getModuleId=function(e){var t=this.testBed._getModuleResolver().resolve(e);return t&&t.id||void 0},me);function me(e){this.testBed=e}var ve,ye=0,ge=(_e.initTestEnvironment=function(e,t,n){var r=be();return r.initTestEnvironment(e,t,n),r},_e.resetTestEnvironment=function(){be().resetTestEnvironment()},_e.configureCompiler=function(e){return be().configureCompiler(e),_e},_e.configureTestingModule=function(e){return be().configureTestingModule(e),_e},_e.compileComponents=function(){return be().compileComponents()},_e.overrideModule=function(e,t){return be().overrideModule(e,t),_e},_e.overrideComponent=function(e,t){return be().overrideComponent(e,t),_e},_e.overrideDirective=function(e,t){return be().overrideDirective(e,t),_e},_e.overridePipe=function(e,t){return be().overridePipe(e,t),_e},_e.overrideTemplate=function(e,t){return be().overrideComponent(e,{set:{template:t,templateUrl:null}}),_e},_e.overrideTemplateUsingTestingModule=function(e,t){return be().overrideTemplateUsingTestingModule(e,t),_e},_e.overrideProvider=function(e,t){return be().overrideProvider(e,t),_e},_e.inject=function(e,t,n){return be().inject(e,t,n)},_e.get=function(e,t,n){return void 0===t&&(t=y.Injector.THROW_IF_NOT_FOUND),void 0===n&&(n=y.InjectFlags.Default),be().inject(e,t,n)},_e.createComponent=function(e){return be().createComponent(e)},_e.resetTestingModule=function(){return be().resetTestingModule(),_e},_e.prototype.initTestEnvironment=function(e,t,n){if(this.platform||this.ngModule)throw new Error(\"Cannot set base providers because it has already been called\");this.platform=t,this.ngModule=e,this._compiler=new ae(this.platform,this.ngModule)},_e.prototype.resetTestEnvironment=function(){this.resetTestingModule(),this._compiler=null,this.platform=null,this.ngModule=null},_e.prototype.resetTestingModule=function(){this.checkGlobalCompilationFinished(),y.ɵresetCompiledComponents(),null!==this._compiler&&this.compiler.restoreOriginalState(),this._compiler=new ae(this.platform,this.ngModule),this._testModuleRef=null,this.destroyActiveFixtures()},_e.prototype.configureCompiler=function(e){if(null!=e.useJit)throw new Error(\"the Render3 compiler JiT mode is not configurable !\");void 0!==e.providers&&this.compiler.setCompilerProviders(e.providers)},_e.prototype.configureTestingModule=function(e){this.assertNotInstantiated(\"R3TestBed.configureTestingModule\",\"configure the test module\"),this.compiler.configureTestingModule(e)},_e.prototype.compileComponents=function(){return this.compiler.compileComponents()},_e.prototype.inject=function(e,t,n){if(e===_e)return this;var r={},i=this.testModuleRef.injector.get(e,r,n);return i===r?this.compiler.injector.get(e,t,n):i},_e.prototype.get=function(e,t,n){return void 0===t&&(t=y.Injector.THROW_IF_NOT_FOUND),void 0===n&&(n=y.InjectFlags.Default),this.inject(e,t,n)},_e.prototype.execute=function(e,t,n){var r=this,i=e.map(function(e){return r.inject(e)});return t.apply(n,i)},_e.prototype.overrideModule=function(e,t){this.assertNotInstantiated(\"overrideModule\",\"override module metadata\"),this.compiler.overrideModule(e,t)},_e.prototype.overrideComponent=function(e,t){this.assertNotInstantiated(\"overrideComponent\",\"override component metadata\"),this.compiler.overrideComponent(e,t)},_e.prototype.overrideTemplateUsingTestingModule=function(e,t){this.assertNotInstantiated(\"R3TestBed.overrideTemplateUsingTestingModule\",\"Cannot override template when the test module has already been instantiated\"),this.compiler.overrideTemplateUsingTestingModule(e,t)},_e.prototype.overrideDirective=function(e,t){this.assertNotInstantiated(\"overrideDirective\",\"override directive metadata\"),this.compiler.overrideDirective(e,t)},_e.prototype.overridePipe=function(e,t){this.assertNotInstantiated(\"overridePipe\",\"override pipe metadata\"),this.compiler.overridePipe(e,t)},_e.prototype.overrideProvider=function(e,t){this.compiler.overrideProvider(e,t)},_e.prototype.createComponent=function(e){var t=this,n=this.inject(D),r=\"root-ng-internal-isolated-\"+ye++;n.insertRootElement(r);var i=e.ɵcmp;if(!i)throw new Error(\"It looks like '\"+y.ɵstringify(e)+\"' has not been IVY compiled - it has no 'ɵcmp' field\");function o(){var e=u.create(y.Injector.NULL,[],\"#\"+r,t.testModuleRef);return new p(e,l,s)}var a=this.inject(P,!1),s=this.inject(I,!1),l=a?null:this.inject(y.NgZone,null),u=new y.ɵRender3ComponentFactory(i),c=l?l.run(o):o();return this._activeFixtures.push(c),c},Object.defineProperty(_e.prototype,\"compiler\",{get:function(){if(null===this._compiler)throw new Error(\"Need to call TestBed.initTestEnvironment() first\");return this._compiler},enumerable:!0,configurable:!0}),Object.defineProperty(_e.prototype,\"testModuleRef\",{get:function(){return null===this._testModuleRef&&(this._testModuleRef=this.compiler.finalize()),this._testModuleRef},enumerable:!0,configurable:!0}),_e.prototype.assertNotInstantiated=function(e,t){if(null!==this._testModuleRef)throw new Error(\"Cannot \"+t+\" when the test module has already been instantiated. Make sure you are not using `inject` before `\"+e+\"`.\")},_e.prototype.checkGlobalCompilationFinished=function(){this._globalCompilationChecked||null!==this._testModuleRef||y.ɵflushModuleScopingQueueAsMuchAsPossible(),this._globalCompilationChecked=!0},_e.prototype.destroyActiveFixtures=function(){this._activeFixtures.forEach(function(t){try{t.destroy()}catch(e){console.error(\"Error during cleanup of component\",{component:t.componentInstance,stacktrace:e})}}),this._activeFixtures=[]},_e);function _e(){this.platform=null,this.ngModule=null,this._compiler=null,this._testModuleRef=null,this._activeFixtures=[],this._globalCompilationChecked=!1}function be(){return ve=ve||new ge}function we(){throw Error(\"unimplemented\")}var xe,Ce=(_(Se,xe=y.Compiler),Object.defineProperty(Se.prototype,\"injector\",{get:function(){throw we()},enumerable:!0,configurable:!0}),Se.prototype.overrideModule=function(e,t){throw we()},Se.prototype.overrideDirective=function(e,t){throw we()},Se.prototype.overrideComponent=function(e,t){throw we()},Se.prototype.overridePipe=function(e,t){throw we()},Se.prototype.loadAotSummaries=function(e){throw we()},Se.prototype.getComponentFactory=function(e){throw we()},Se.prototype.getComponentFromError=function(e){throw we()},Se=b([y.Injectable()],Se));function Se(){return null!==xe&&xe.apply(this,arguments)||this}function Ee(){}var Oe=0,ke=(De.initTestEnvironment=function(e,t,n){var r=Ae();return r.initTestEnvironment(e,t,n),r},De.resetTestEnvironment=function(){Ae().resetTestEnvironment()},De.resetTestingModule=function(){return Ae().resetTestingModule(),De},De.configureCompiler=function(e){return Ae().configureCompiler(e),De},De.configureTestingModule=function(e){return Ae().configureTestingModule(e),De},De.compileComponents=function(){return Pe().compileComponents()},De.overrideModule=function(e,t){return Ae().overrideModule(e,t),De},De.overrideComponent=function(e,t){return Ae().overrideComponent(e,t),De},De.overrideDirective=function(e,t){return Ae().overrideDirective(e,t),De},De.overridePipe=function(e,t){return Ae().overridePipe(e,t),De},De.overrideTemplate=function(e,t){return Ae().overrideComponent(e,{set:{template:t,templateUrl:null}}),De},De.overrideTemplateUsingTestingModule=function(e,t){return Ae().overrideTemplateUsingTestingModule(e,t),De},De.overrideProvider=function(e,t){return Ae().overrideProvider(e,t),De},De.inject=function(e,t,n){return Ae().inject(e,t,n)},De.get=function(e,t,n){return void 0===t&&(t=y.Injector.THROW_IF_NOT_FOUND),void 0===n&&(n=y.InjectFlags.Default),Ae().inject(e,t,n)},De.createComponent=function(e){return Ae().createComponent(e)},De.prototype.initTestEnvironment=function(e,t,n){if(this.platform||this.ngModule)throw new Error(\"Cannot set base providers because it has already been called\");this.platform=t,this.ngModule=e,n&&(this._testEnvAotSummaries=n)},De.prototype.resetTestEnvironment=function(){this.resetTestingModule(),this.platform=null,this.ngModule=null,this._testEnvAotSummaries=function(){return[]}},De.prototype.resetTestingModule=function(){y.ɵclearOverrides(),this._aotSummaries=[],this._templateOverrides=[],this._compiler=null,this._moduleOverrides=[],this._componentOverrides=[],this._directiveOverrides=[],this._pipeOverrides=[],this._isRoot=!0,this._rootProviderOverrides=[],this._moduleRef=null,this._moduleFactory=null,this._compilerOptions=[],this._providers=[],this._declarations=[],this._imports=[],this._schemas=[],this._instantiated=!1,this._activeFixtures.forEach(function(t){try{t.destroy()}catch(e){console.error(\"Error during cleanup of component\",{component:t.componentInstance,stacktrace:e})}}),this._activeFixtures=[]},De.prototype.configureCompiler=function(e){this._assertNotInstantiated(\"TestBed.configureCompiler\",\"configure the compiler\"),this._compilerOptions.push(e)},De.prototype.configureTestingModule=function(e){var t,n,r,i;this._assertNotInstantiated(\"TestBed.configureTestingModule\",\"configure the test module\"),e.providers&&(t=this._providers).push.apply(t,E(e.providers)),e.declarations&&(n=this._declarations).push.apply(n,E(e.declarations)),e.imports&&(r=this._imports).push.apply(r,E(e.imports)),e.schemas&&(i=this._schemas).push.apply(i,E(e.schemas)),e.aotSummaries&&this._aotSummaries.push(e.aotSummaries)},De.prototype.compileComponents=function(){var t=this;if(this._moduleFactory||this._instantiated)return Promise.resolve(null);var e=this._createCompilerAndModule();return this._compiler.compileModuleAndAllComponentsAsync(e).then(function(e){t._moduleFactory=e.ngModuleFactory})},De.prototype._initIfNeeded=function(){var t,e;if(!this._instantiated){if(!this._moduleFactory)try{var n=this._createCompilerAndModule();this._moduleFactory=this._compiler.compileModuleAndAllComponentsSync(n).ngModuleFactory}catch(e){var r=this._compiler.getComponentFromError(e);throw r?new Error(\"This test module uses the component \"+y.ɵstringify(r)+' which is using a \"templateUrl\" or \"styleUrls\", but they were never compiled. Please call \"TestBed.compileComponents\" before your test.'):e}try{for(var i=C(this._templateOverrides),o=i.next();!o.done;o=i.next()){var a=o.value,s=a.component,l=a.templateOf,u=this._compiler.getComponentFactory(l);y.ɵoverrideComponentView(s,u)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}var c=new y.NgZone({enableLongStackTrace:!0}),p=[{provide:y.NgZone,useValue:c}],d=y.Injector.create({providers:p,parent:this.platform.injector,name:this._moduleFactory.moduleType.name});this._moduleRef=this._moduleFactory.create(d),this._moduleRef.injector.get(y.ApplicationInitStatus).runInitializers(),this._instantiated=!0}},De.prototype._createCompilerAndModule=function(){var t,e,n=this,r=this._providers.concat([{provide:Ie,useValue:this}]),i=E(this._declarations,this._templateOverrides.map(function(e){return e.templateOf})),o=[],a=this._rootProviderOverrides;if(this._isRoot){var s=l=b([y.NgModule({providers:E(a),jit:!0})],l);o.push(s)}function l(){}r.push({provide:y.ɵINJECTOR_SCOPE,useValue:this._isRoot?\"root\":null});var u=[o,this.ngModule,this._imports],c=this._schemas,p=d=b([y.NgModule({providers:r,declarations:i,imports:u,schemas:c,jit:!0})],d);function d(){}var h=this.platform.injector.get(Ee);this._compiler=h.createTestingCompiler(this._compilerOptions);try{for(var f=C(E([this._testEnvAotSummaries],this._aotSummaries)),m=f.next();!m.done;m=f.next()){var v=m.value;this._compiler.loadAotSummaries(v)}}catch(e){t={error:e}}finally{try{m&&!m.done&&(e=f.return)&&e.call(f)}finally{if(t)throw t.error}}return this._moduleOverrides.forEach(function(e){return n._compiler.overrideModule(e[0],e[1])}),this._componentOverrides.forEach(function(e){return n._compiler.overrideComponent(e[0],e[1])}),this._directiveOverrides.forEach(function(e){return n._compiler.overrideDirective(e[0],e[1])}),this._pipeOverrides.forEach(function(e){return n._compiler.overridePipe(e[0],e[1])}),p},De.prototype._assertNotInstantiated=function(e,t){if(this._instantiated)throw new Error(\"Cannot \"+t+\" when the test module has already been instantiated. Make sure you are not using `inject` before `\"+e+\"`.\")},De.prototype.inject=function(e,t,n){if(this._initIfNeeded(),e===Ie)return this;var r={},i=this._moduleRef.injector.get(e,r,n);return i===r?this._compiler.injector.get(e,t,n):i},De.prototype.get=function(e,t,n){return void 0===t&&(t=y.Injector.THROW_IF_NOT_FOUND),void 0===n&&(n=y.InjectFlags.Default),this.inject(e,t,n)},De.prototype.execute=function(e,t,n){var r=this;this._initIfNeeded();var i=e.map(function(e){return r.inject(e)});return t.apply(n,i)},De.prototype.overrideModule=function(e,t){this._assertNotInstantiated(\"overrideModule\",\"override module metadata\"),this._moduleOverrides.push([e,t])},De.prototype.overrideComponent=function(e,t){this._assertNotInstantiated(\"overrideComponent\",\"override component metadata\"),this._componentOverrides.push([e,t])},De.prototype.overrideDirective=function(e,t){this._assertNotInstantiated(\"overrideDirective\",\"override directive metadata\"),this._directiveOverrides.push([e,t])},De.prototype.overridePipe=function(e,t){this._assertNotInstantiated(\"overridePipe\",\"override pipe metadata\"),this._pipeOverrides.push([e,t])},De.prototype.overrideProvider=function(e,t){this.overrideProviderImpl(e,t)},De.prototype.overrideProviderImpl=function(e,t,n){void 0===n&&(n=!1);var r=null;\"string\"!=typeof e&&(r=y.ɵgetInjectableDef(e))&&\"root\"===r.providedIn&&(t.useFactory?this._rootProviderOverrides.push({provide:e,useFactory:t.useFactory,deps:t.deps||[]}):this._rootProviderOverrides.push({provide:e,useValue:t.useValue}));var i,o=0;i=t.useFactory?(o|=1024,t.useFactory):(o|=256,t.useValue);var a=(t.deps||[]).map(function(e){var t,n=0;return Array.isArray(e)?e.forEach(function(e){e instanceof y.Optional?n|=2:e instanceof y.SkipSelf?n|=1:t=e}):t=e,[n,t]});y.ɵoverrideProvider({token:e,flags:o,deps:a,value:i,deprecatedBehavior:n})},De.prototype.overrideTemplateUsingTestingModule=function(e,t){this._assertNotInstantiated(\"overrideTemplateUsingTestingModule\",\"override template\");var n=r=b([y.Component({selector:\"empty\",template:t,jit:!0})],r);function r(){}this._templateOverrides.push({component:e,templateOf:n})},De.prototype.createComponent=function(e){var t=this;this._initIfNeeded();var n=this._compiler.getComponentFactory(e);if(!n)throw new Error(\"Cannot create the component \"+y.ɵstringify(e)+\" as it was not imported into the testing module!\");var r=this.inject(P,!1),i=this.inject(I,!1),o=r?null:this.inject(y.NgZone,null),a=this.inject(D),s=\"root\"+Oe++;function l(){var e=n.create(y.Injector.NULL,[],\"#\"+s,t._moduleRef);return new p(e,o,i)}a.insertRootElement(s);var u=o?o.run(l):l();return this._activeFixtures.push(u),u},De);function De(){this._instantiated=!1,this._compiler=null,this._moduleRef=null,this._moduleFactory=null,this._compilerOptions=[],this._moduleOverrides=[],this._componentOverrides=[],this._directiveOverrides=[],this._pipeOverrides=[],this._providers=[],this._declarations=[],this._imports=[],this._schemas=[],this._activeFixtures=[],this._testEnvAotSummaries=function(){return[]},this._aotSummaries=[],this._templateOverrides=[],this._isRoot=!0,this._rootProviderOverrides=[],this.platform=null,this.ngModule=null}var Te,Ie=y.ɵivyEnabled?ge:ke,Pe=y.ɵivyEnabled?be:Ae;function Ae(){return Te=Te||new ke}function Me(n,r){var i=Pe();return 0<=n.indexOf(O)?function(){var t=this;return i.compileComponents().then(function(){var e=i.inject(O);return i.execute(n,r,t),e.promise})}:function(){return i.execute(n,r,this)}}var Re=(Ne.prototype._addModule=function(){var e=this._moduleDef();e&&Pe().configureTestingModule(e)},Ne.prototype.inject=function(e,t){var n=this;return function(){return n._addModule(),Me(e,t).call(this)}},Ne);function Ne(e){this._moduleDef=e}var je=\"undefined\"==typeof window?global:window;je.beforeEach&&je.beforeEach(function(){Ie.resetTestingModule(),v()});e.ɵangular_packages_core_testing_testing_b=ge,e.ɵangular_packages_core_testing_testing_c=be,e.ɵangular_packages_core_testing_testing_a=ke,e.TestBed=Ie,e.getTestBed=Pe,e.inject=Me,e.InjectSetupWrapper=Re,e.withModule=function(t,n){return n?function(){var e=Pe();return t&&e.configureTestingModule(t),n.apply(this)}:new Re(function(){return t})},e.ɵMetadataOverrider=B,e.async=function(e){var t=\"undefined\"!=typeof Zone?Zone:null;if(!t)return function(){return Promise.reject(\"Zone is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/zone.js\")};var n=t&&t[t.__symbol__(\"asyncTest\")];return\"function\"==typeof n?n(e):function(r){return i.jasmine?function(t){t||((t=function(){}).fail=function(e){throw e}),o(r,this,t,function(e){if(\"string\"==typeof e)return t.fail(new Error(e));t.fail(e)})}:function(){var n=this;return new Promise(function(e,t){o(r,n,e,t)})}}(e)},e.ComponentFixture=p,e.resetFakeAsyncZone=v,e.fakeAsync=function(e){return m?m.fakeAsync(e):function(o){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=s.assertPresent();if(c)throw new Error(\"fakeAsync() calls can not be nested\");c=!0;try{if(!l){if(n.getDelegate()instanceof a)throw new Error(\"fakeAsync() calls can not be nested\");l=new a}var r=void 0,i=n.getDelegate();n.setDelegate(l);try{r=o.apply(this,e),h()}finally{n.setDelegate(i)}if(0<l.pendingPeriodicTimers.length)throw new Error(l.pendingPeriodicTimers.length+\" periodic timer(s) still in the queue.\");if(0<l.pendingTimers.length)throw new Error(l.pendingTimers.length+\" timer(s) still in the queue.\");return r}finally{c=!1,u()}}}(e)},e.tick=function(e){return void 0===e&&(e=0),m?m.tick(e):function(e){void 0===e&&(e=0),d().tick(e)}(e)},e.flush=function(e){return m?m.flush(e):function(e){return d().flush(e)}(e)},e.discardPeriodicTasks=function(){if(m)return m.discardPeriodicTasks();d().pendingPeriodicTimers.length=0},e.flushMicrotasks=function(){return m?m.flushMicrotasks():h()},e.TestComponentRenderer=D,e.ComponentFixtureAutoDetect=I,e.ComponentFixtureNoNgZone=P,e.__core_private_testing_placeholder__=\"\",e.ɵTestingCompiler=Ce,e.ɵTestingCompilerFactory=Ee,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/coercion\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"@angular/common\"),require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/cdk/platform\"),require(\"@angular/cdk/portal\"),require(\"@angular/cdk/scrolling\"),require(\"@angular/forms\"),require(\"@angular/material/form-field\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/material/bundles/material-autocomplete.umd.js\",[\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/coercion\",\"@angular/core\",\"@angular/material/core\",\"@angular/common\",\"@angular/cdk/overlay\",\"@angular/cdk/bidi\",\"@angular/cdk/keycodes\",\"@angular/cdk/platform\",\"@angular/cdk/portal\",\"@angular/cdk/scrolling\",\"@angular/forms\",\"@angular/material/form-field\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/coercion\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"@angular/common\"),e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/cdk/platform\"),e(\"@angular/cdk/portal\"),e(\"@angular/cdk/scrolling\"),e(\"@angular/forms\"),e(\"@angular/material/form-field\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,p,t,n,i,r,o,a,s,l,u,c,d,h,f,m,v){\"use strict\";function y(){}var g=0,_=function(e,t){this.source=e,this.option=t},b=r.mixinDisableRipple(y),w=new i.InjectionToken(\"mat-autocomplete-default-options\",{providedIn:\"root\",factory:x});function x(){return{autoActiveFirstOption:!1}}var C,S=(C=b,p.__extends(E,C),Object.defineProperty(E.prototype,\"isOpen\",{get:function(){return this._isOpen&&this.showPanel},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"autoActiveFirstOption\",{get:function(){return this._autoActiveFirstOption},set:function(e){this._autoActiveFirstOption=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"classList\",{set:function(e){e&&e.length?this._classList=e.split(\" \").reduce(function(e,t){return e[t.trim()]=!0,e},{}):this._classList={},this._setVisibilityClasses(this._classList),this._elementRef.nativeElement.className=\"\"},enumerable:!0,configurable:!0}),E.prototype.ngAfterContentInit=function(){this._keyManager=new t.ActiveDescendantKeyManager(this.options).withWrap(),this._setVisibility()},E.prototype._setScrollTop=function(e){this.panel&&(this.panel.nativeElement.scrollTop=e)},E.prototype._getScrollTop=function(){return this.panel?this.panel.nativeElement.scrollTop:0},E.prototype._setVisibility=function(){this.showPanel=!!this.options.length,this._setVisibilityClasses(this._classList),this._changeDetectorRef.markForCheck()},E.prototype._emitSelectEvent=function(e){var t=new _(this,e);this.optionSelected.emit(t)},E.prototype._setVisibilityClasses=function(e){e[\"mat-autocomplete-visible\"]=this.showPanel,e[\"mat-autocomplete-hidden\"]=!this.showPanel},E.decorators=[{type:i.Component,args:[{moduleId:module.id,selector:\"mat-autocomplete\",template:'<ng-template>\\n  <div class=\"mat-autocomplete-panel\" role=\"listbox\" [id]=\"id\" [ngClass]=\"_classList\" #panel>\\n    <ng-content></ng-content>\\n  </div>\\n</ng-template>\\n',encapsulation:i.ViewEncapsulation.None,changeDetection:i.ChangeDetectionStrategy.OnPush,exportAs:\"matAutocomplete\",inputs:[\"disableRipple\"],host:{class:\"mat-autocomplete\"},providers:[{provide:r.MAT_OPTION_PARENT_COMPONENT,useExisting:E}],styles:[\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}@media(-ms-high-contrast: active){.mat-autocomplete-panel{outline:solid 1px}}/*# sourceMappingURL=autocomplete.css.map */\\n\"]}]}],E.ctorParameters=function(){return[{type:i.ChangeDetectorRef},{type:i.ElementRef},{type:void 0,decorators:[{type:i.Inject,args:[w]}]}]},E.propDecorators={template:[{type:i.ViewChild,args:[i.TemplateRef,{static:!0}]}],panel:[{type:i.ViewChild,args:[\"panel\",{static:!1}]}],options:[{type:i.ContentChildren,args:[r.MatOption,{descendants:!0}]}],optionGroups:[{type:i.ContentChildren,args:[r.MatOptgroup]}],displayWith:[{type:i.Input}],autoActiveFirstOption:[{type:i.Input}],panelWidth:[{type:i.Input}],optionSelected:[{type:i.Output}],opened:[{type:i.Output}],closed:[{type:i.Output}],classList:[{type:i.Input,args:[\"class\"]}]},E);function E(e,t,n){var r=C.call(this)||this;return r._changeDetectorRef=e,r._elementRef=t,r.showPanel=!1,r._isOpen=!1,r.displayWith=null,r.optionSelected=new i.EventEmitter,r.opened=new i.EventEmitter,r.closed=new i.EventEmitter,r._classList={},r.id=\"mat-autocomplete-\"+g++,r._autoActiveFirstOption=!!n.autoActiveFirstOption,r}var O=(k.decorators=[{type:i.Directive,args:[{selector:\"[matAutocompleteOrigin]\",exportAs:\"matAutocompleteOrigin\"}]}],k.ctorParameters=function(){return[{type:i.ElementRef}]},k);function k(e){this.elementRef=e}var D=new i.InjectionToken(\"mat-autocomplete-scroll-strategy\");function T(e){return function(){return e.scrollStrategies.reposition()}}var I={provide:D,deps:[a.Overlay],useFactory:T},P={provide:h.NG_VALUE_ACCESSOR,useExisting:i.forwardRef(function(){return M}),multi:!0};function A(){return Error(\"Attempting to open an undefined instance of `mat-autocomplete`. Make sure that the id passed to the `matAutocomplete` is correct and that you're attempting to open it after the ngAfterContentInit hook.\")}var M=(Object.defineProperty(R.prototype,\"autocompleteDisabled\",{get:function(){return this._autocompleteDisabled},set:function(e){this._autocompleteDisabled=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),R.prototype.ngAfterViewInit=function(){var e=this;if(\"undefined\"!=typeof window&&(this._zone.runOutsideAngular(function(){window.addEventListener(\"blur\",e._windowBlurHandler)}),u._supportsShadowDom())){var t=this._element.nativeElement,n=t.getRootNode?t.getRootNode():null;this._isInsideShadowRoot=n instanceof window.ShadowRoot}},R.prototype.ngOnChanges=function(e){e.position&&this._positionStrategy&&(this._setStrategyPositions(this._positionStrategy),this.panelOpen&&this._overlayRef.updatePosition())},R.prototype.ngOnDestroy=function(){\"undefined\"!=typeof window&&window.removeEventListener(\"blur\",this._windowBlurHandler),this._viewportSubscription.unsubscribe(),this._componentDestroyed=!0,this._destroyPanel(),this._closeKeyEventStream.complete()},Object.defineProperty(R.prototype,\"panelOpen\",{get:function(){return this._overlayAttached&&this.autocomplete.showPanel},enumerable:!0,configurable:!0}),R.prototype.openPanel=function(){this._attachOverlay(),this._floatLabel()},R.prototype.closePanel=function(){this._resetLabel(),this._overlayAttached&&(this.panelOpen&&this.autocomplete.closed.emit(),this.autocomplete._isOpen=this._overlayAttached=!1,this._overlayRef&&this._overlayRef.hasAttached()&&(this._overlayRef.detach(),this._closingActionsSubscription.unsubscribe()),this._componentDestroyed||this._changeDetectorRef.detectChanges())},R.prototype.updatePosition=function(){this._overlayAttached&&this._overlayRef.updatePosition()},Object.defineProperty(R.prototype,\"panelClosingActions\",{get:function(){var e=this;return m.merge(this.optionSelections,this.autocomplete._keyManager.tabOut.pipe(v.filter(function(){return e._overlayAttached})),this._closeKeyEventStream,this._getOutsideClickStream(),this._overlayRef?this._overlayRef.detachments().pipe(v.filter(function(){return e._overlayAttached})):m.of()).pipe(v.map(function(e){return e instanceof r.MatOptionSelectionChange?e:null}))},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"activeOption\",{get:function(){return this.autocomplete&&this.autocomplete._keyManager?this.autocomplete._keyManager.activeItem:null},enumerable:!0,configurable:!0}),R.prototype._getOutsideClickStream=function(){var r=this;return m.merge(m.fromEvent(this._document,\"click\"),m.fromEvent(this._document,\"touchend\")).pipe(v.filter(function(e){var t=r._isInsideShadowRoot&&e.composedPath?e.composedPath()[0]:e.target,n=r._formField?r._formField._elementRef.nativeElement:null;return r._overlayAttached&&t!==r._element.nativeElement&&(!n||!n.contains(t))&&!!r._overlayRef&&!r._overlayRef.overlayElement.contains(t)}))},R.prototype.writeValue=function(e){var t=this;Promise.resolve(null).then(function(){return t._setTriggerValue(e)})},R.prototype.registerOnChange=function(e){this._onChange=e},R.prototype.registerOnTouched=function(e){this._onTouched=e},R.prototype.setDisabledState=function(e){this._element.nativeElement.disabled=e},R.prototype._handleKeydown=function(e){var t=e.keyCode;if(t===l.ESCAPE&&e.preventDefault(),this.activeOption&&t===l.ENTER&&this.panelOpen)this.activeOption._selectViaInteraction(),this._resetActiveItem(),e.preventDefault();else if(this.autocomplete){var n=this.autocomplete._keyManager.activeItem,r=t===l.UP_ARROW||t===l.DOWN_ARROW;this.panelOpen||t===l.TAB?this.autocomplete._keyManager.onKeydown(e):r&&this._canOpen()&&this.openPanel(),!r&&this.autocomplete._keyManager.activeItem===n||this._scrollToOption()}},R.prototype._handleInput=function(e){var t=e.target,n=t.value;\"number\"===t.type&&(n=\"\"==n?null:parseFloat(n)),this._previousValue!==n&&(this._previousValue=n,this._onChange(n),this._canOpen()&&this._document.activeElement===e.target&&this.openPanel())},R.prototype._handleFocus=function(){this._canOpenOnNextFocus?this._canOpen()&&(this._previousValue=this._element.nativeElement.value,this._attachOverlay(),this._floatLabel(!0)):this._canOpenOnNextFocus=!0},R.prototype._floatLabel=function(e){void 0===e&&(e=!1),this._formField&&\"auto\"===this._formField.floatLabel&&(e?this._formField._animateAndLockLabel():this._formField.floatLabel=\"always\",this._manuallyFloatingLabel=!0)},R.prototype._resetLabel=function(){this._manuallyFloatingLabel&&(this._formField.floatLabel=\"auto\",this._manuallyFloatingLabel=!1)},R.prototype._scrollToOption=function(){var e=this.autocomplete._keyManager.activeItemIndex||0,t=r._countGroupLabelsBeforeOption(e,this.autocomplete.options,this.autocomplete.optionGroups);if(0===e&&1===t)this.autocomplete._setScrollTop(0);else{var n=r._getOptionScrollPosition(e+t,48,this.autocomplete._getScrollTop(),256);this.autocomplete._setScrollTop(n)}},R.prototype._subscribeToClosingActions=function(){var t=this,e=this._zone.onStable.asObservable().pipe(v.take(1)),n=this.autocomplete.options.changes.pipe(v.tap(function(){return t._positionStrategy.reapplyLastPosition()}),v.delay(0));return m.merge(e,n).pipe(v.switchMap(function(){var e=t.panelOpen;return t._resetActiveItem(),t.autocomplete._setVisibility(),t.panelOpen&&(t._overlayRef.updatePosition(),e!==t.panelOpen&&t.autocomplete.opened.emit()),t.panelClosingActions}),v.take(1)).subscribe(function(e){return t._setValueAndClose(e)})},R.prototype._destroyPanel=function(){this._overlayRef&&(this.closePanel(),this._overlayRef.dispose(),this._overlayRef=null)},R.prototype._setTriggerValue=function(e){var t=this.autocomplete&&this.autocomplete.displayWith?this.autocomplete.displayWith(e):e,n=null!=t?t:\"\";this._formField?this._formField._control.value=n:this._element.nativeElement.value=n,this._previousValue=n},R.prototype._setValueAndClose=function(e){e&&e.source&&(this._clearPreviousSelectedOption(e.source),this._setTriggerValue(e.source.value),this._onChange(e.source.value),this._element.nativeElement.focus(),this.autocomplete._emitSelectEvent(e.source)),this.closePanel()},R.prototype._clearPreviousSelectedOption=function(t){this.autocomplete.options.forEach(function(e){e!=t&&e.selected&&e.deselect()})},R.prototype._attachOverlay=function(){var t=this;if(!this.autocomplete)throw A();var e=this._overlayRef;e?(this._positionStrategy.setOrigin(this._getConnectedElement()),e.updateSize({width:this._getPanelWidth()})):(this._portal=new c.TemplatePortal(this.autocomplete.template,this._viewContainerRef),e=this._overlay.create(this._getOverlayConfig()),(this._overlayRef=e).keydownEvents().subscribe(function(e){(e.keyCode===l.ESCAPE||e.keyCode===l.UP_ARROW&&e.altKey)&&(t._resetActiveItem(),t._closeKeyEventStream.next(),e.stopPropagation(),e.preventDefault())}),this._viewportRuler&&(this._viewportSubscription=this._viewportRuler.change().subscribe(function(){t.panelOpen&&e&&e.updateSize({width:t._getPanelWidth()})}))),e&&!e.hasAttached()&&(e.attach(this._portal),this._closingActionsSubscription=this._subscribeToClosingActions());var n=this.panelOpen;this.autocomplete._setVisibility(),this.autocomplete._isOpen=this._overlayAttached=!0,this.panelOpen&&n!==this.panelOpen&&this.autocomplete.opened.emit()},R.prototype._getOverlayConfig=function(){return new a.OverlayConfig({positionStrategy:this._getOverlayPosition(),scrollStrategy:this._scrollStrategy(),width:this._getPanelWidth(),direction:this._dir})},R.prototype._getOverlayPosition=function(){var e=this._overlay.position().flexibleConnectedTo(this._getConnectedElement()).withFlexibleDimensions(!1).withPush(!1);return this._setStrategyPositions(e),this._positionStrategy=e},R.prototype._setStrategyPositions=function(e){var t,n={originX:\"start\",originY:\"bottom\",overlayX:\"start\",overlayY:\"top\"},r={originX:\"start\",originY:\"top\",overlayX:\"start\",overlayY:\"bottom\",panelClass:\"mat-autocomplete-panel-above\"};t=\"above\"===this.position?[r]:\"below\"===this.position?[n]:[n,r],e.withPositions(t)},R.prototype._getConnectedElement=function(){return this.connectedTo?this.connectedTo.elementRef:this._formField?this._formField.getConnectedOverlayOrigin():this._element},R.prototype._getPanelWidth=function(){return this.autocomplete.panelWidth||this._getHostWidth()},R.prototype._getHostWidth=function(){return this._getConnectedElement().nativeElement.getBoundingClientRect().width},R.prototype._resetActiveItem=function(){this.autocomplete._keyManager.setActiveItem(this.autocomplete.autoActiveFirstOption?0:-1)},R.prototype._canOpen=function(){var e=this._element.nativeElement;return!e.readOnly&&!e.disabled&&!this._autocompleteDisabled},R.decorators=[{type:i.Directive,args:[{selector:\"input[matAutocomplete], textarea[matAutocomplete]\",host:{class:\"mat-autocomplete-trigger\",\"[attr.autocomplete]\":\"autocompleteAttribute\",\"[attr.role]\":'autocompleteDisabled ? null : \"combobox\"',\"[attr.aria-autocomplete]\":'autocompleteDisabled ? null : \"list\"',\"[attr.aria-activedescendant]\":\"(panelOpen && activeOption) ? activeOption.id : null\",\"[attr.aria-expanded]\":\"autocompleteDisabled ? null : panelOpen.toString()\",\"[attr.aria-owns]\":\"(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id\",\"[attr.aria-haspopup]\":\"!autocompleteDisabled\",\"(focusin)\":\"_handleFocus()\",\"(blur)\":\"_onTouched()\",\"(input)\":\"_handleInput($event)\",\"(keydown)\":\"_handleKeydown($event)\"},exportAs:\"matAutocompleteTrigger\",providers:[P]}]}],R.ctorParameters=function(){return[{type:i.ElementRef},{type:a.Overlay},{type:i.ViewContainerRef},{type:i.NgZone},{type:i.ChangeDetectorRef},{type:void 0,decorators:[{type:i.Inject,args:[D]}]},{type:s.Directionality,decorators:[{type:i.Optional}]},{type:f.MatFormField,decorators:[{type:i.Optional},{type:i.Host}]},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[o.DOCUMENT]}]},{type:d.ViewportRuler}]},R.propDecorators={autocomplete:[{type:i.Input,args:[\"matAutocomplete\"]}],position:[{type:i.Input,args:[\"matAutocompletePosition\"]}],connectedTo:[{type:i.Input,args:[\"matAutocompleteConnectedTo\"]}],autocompleteAttribute:[{type:i.Input,args:[\"autocomplete\"]}],autocompleteDisabled:[{type:i.Input,args:[\"matAutocompleteDisabled\"]}]},R);function R(e,t,n,r,i,o,a,s,l,u){var c=this;this._element=e,this._overlay=t,this._viewContainerRef=n,this._zone=r,this._changeDetectorRef=i,this._dir=a,this._formField=s,this._document=l,this._viewportRuler=u,this._componentDestroyed=!1,this._autocompleteDisabled=!1,this._manuallyFloatingLabel=!1,this._viewportSubscription=m.Subscription.EMPTY,this._canOpenOnNextFocus=!0,this._closeKeyEventStream=new m.Subject,this._windowBlurHandler=function(){c._canOpenOnNextFocus=c._document.activeElement!==c._element.nativeElement||c.panelOpen},this._onChange=function(){},this._onTouched=function(){},this.position=\"auto\",this.autocompleteAttribute=\"off\",this._overlayAttached=!1,this.optionSelections=m.defer(function(){return c.autocomplete&&c.autocomplete.options?m.merge.apply(void 0,p.__spread(c.autocomplete.options.map(function(e){return e.onSelectionChange}))):c._zone.onStable.asObservable().pipe(v.take(1),v.switchMap(function(){return c.optionSelections}))}),this._scrollStrategy=o}var N=(j.decorators=[{type:i.NgModule,args:[{imports:[r.MatOptionModule,a.OverlayModule,r.MatCommonModule,o.CommonModule],exports:[S,r.MatOptionModule,M,O,r.MatCommonModule],declarations:[S,M,O],providers:[I]}]}],j);function j(){}e.MatAutocompleteSelectedEvent=_,e.MAT_AUTOCOMPLETE_DEFAULT_OPTIONS=w,e.MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY=x,e.MatAutocomplete=S,e.MatAutocompleteModule=N,e.AUTOCOMPLETE_OPTION_HEIGHT=48,e.AUTOCOMPLETE_PANEL_HEIGHT=256,e.MAT_AUTOCOMPLETE_SCROLL_STRATEGY=D,e.MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY=T,e.MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER=I,e.MAT_AUTOCOMPLETE_VALUE_ACCESSOR=P,e.getMatAutocompleteMissingPanelError=A,e.MatAutocompleteTrigger=M,e.MatAutocompleteOrigin=O,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"@angular/cdk/a11y\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-badge.umd.js\",[\"@angular/core\",\"@angular/material/core\",\"@angular/cdk/a11y\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"@angular/cdk/a11y\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,s,t,n,r,i,o){\"use strict\";function a(){}var l,u=0,c=t.mixinDisabled(a),p=(l=c,r.__extends(d,l),Object.defineProperty(d.prototype,\"color\",{get:function(){return this._color},set:function(e){this._setColor(e),this._color=e},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,\"overlap\",{get:function(){return this._overlap},set:function(e){this._overlap=i.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,\"description\",{get:function(){return this._description},set:function(e){if(e!==this._description){var t=this._badgeElement;this._updateHostAriaDescription(e,this._description),this._description=e,t&&(e?t.setAttribute(\"aria-label\",e):t.removeAttribute(\"aria-label\"))}},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,\"hidden\",{get:function(){return this._hidden},set:function(e){this._hidden=i.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),d.prototype.isAbove=function(){return-1===this.position.indexOf(\"below\")},d.prototype.isAfter=function(){return-1===this.position.indexOf(\"before\")},d.prototype.ngOnChanges=function(e){var t=e.content;if(t){var n=t.currentValue;this._hasContent=null!=n&&0<(\"\"+n).trim().length,this._updateTextContent()}},d.prototype.ngOnDestroy=function(){var e=this._badgeElement;e&&(this.description&&this._ariaDescriber.removeDescription(e,this.description),this._renderer.destroyNode&&this._renderer.destroyNode(e))},d.prototype.getBadgeElement=function(){return this._badgeElement},d.prototype._updateTextContent=function(){return this._badgeElement?this._badgeElement.textContent=this.content:this._badgeElement=this._createBadgeElement(),this._badgeElement},d.prototype._createBadgeElement=function(){var e=this._renderer.createElement(\"span\"),t=\"mat-badge-active\",n=\"mat-badge-content\";return this._clearExistingBadges(n),e.setAttribute(\"id\",\"mat-badge-content-\"+this._id),e.classList.add(n),e.textContent=this.content,\"NoopAnimations\"===this._animationMode&&e.classList.add(\"_mat-animation-noopable\"),this.description&&e.setAttribute(\"aria-label\",this.description),this._elementRef.nativeElement.appendChild(e),\"function\"==typeof requestAnimationFrame&&\"NoopAnimations\"!==this._animationMode?this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){e.classList.add(t)})}):e.classList.add(t),e},d.prototype._updateHostAriaDescription=function(e,t){var n=this._updateTextContent();t&&this._ariaDescriber.removeDescription(n,t),e&&this._ariaDescriber.describe(n,e)},d.prototype._setColor=function(e){e!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove(\"mat-badge-\"+this._color),e&&this._elementRef.nativeElement.classList.add(\"mat-badge-\"+e))},d.prototype._clearExistingBadges=function(e){for(var t=this._elementRef.nativeElement,n=t.children.length;n--;){var r=t.children[n];r.classList.contains(e)&&t.removeChild(r)}},d.decorators=[{type:s.Directive,args:[{selector:\"[matBadge]\",inputs:[\"disabled: matBadgeDisabled\"],host:{class:\"mat-badge\",\"[class.mat-badge-overlap]\":\"overlap\",\"[class.mat-badge-above]\":\"isAbove()\",\"[class.mat-badge-below]\":\"!isAbove()\",\"[class.mat-badge-before]\":\"!isAfter()\",\"[class.mat-badge-after]\":\"isAfter()\",\"[class.mat-badge-small]\":'size === \"small\"',\"[class.mat-badge-medium]\":'size === \"medium\"',\"[class.mat-badge-large]\":'size === \"large\"',\"[class.mat-badge-hidden]\":\"hidden || !_hasContent\",\"[class.mat-badge-disabled]\":\"disabled\"}}]}],d.ctorParameters=function(){return[{type:s.NgZone},{type:s.ElementRef},{type:n.AriaDescriber},{type:s.Renderer2},{type:String,decorators:[{type:s.Optional},{type:s.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},d.propDecorators={color:[{type:s.Input,args:[\"matBadgeColor\"]}],overlap:[{type:s.Input,args:[\"matBadgeOverlap\"]}],position:[{type:s.Input,args:[\"matBadgePosition\"]}],content:[{type:s.Input,args:[\"matBadge\"]}],description:[{type:s.Input,args:[\"matBadgeDescription\"]}],size:[{type:s.Input,args:[\"matBadgeSize\"]}],hidden:[{type:s.Input,args:[\"matBadgeHidden\"]}]},d);function d(e,t,n,r,i){var o=l.call(this)||this;if(o._ngZone=e,o._elementRef=t,o._ariaDescriber=n,o._renderer=r,o._animationMode=i,o._hasContent=!1,o._color=\"primary\",o._overlap=!0,o.position=\"above after\",o.size=\"medium\",o._id=u++,s.isDevMode()){var a=t.nativeElement;if(a.nodeType!==a.ELEMENT_NODE)throw Error(\"matBadge must be attached to an element node.\")}return o}var h=(f.decorators=[{type:s.NgModule,args:[{imports:[n.A11yModule,t.MatCommonModule],exports:[p],declarations:[p]}]}],f);function f(){}e.MatBadgeModule=h,e.MatBadge=p,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/layout\"),require(\"@angular/animations\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"rxjs\"),require(\"@angular/cdk/keycodes\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/material/bundles/material-bottom-sheet.umd.js\",[\"@angular/cdk/overlay\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/layout\",\"@angular/animations\",\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"rxjs\",\"@angular/cdk/keycodes\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/layout\"),e(\"@angular/animations\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"rxjs\"),e(\"@angular/cdk/keycodes\"),e(\"rxjs/operators\"))})}(0,function(e,n,u,t,c,r,p,s,i,o,a,l,d,h){\"use strict\";var f,m=new c.InjectionToken(\"MatBottomSheetData\"),v=function(){this.data=null,this.hasBackdrop=!0,this.disableClose=!1,this.ariaLabel=null,this.closeOnNavigation=!0,this.autoFocus=!1,this.restoreFocus=!0},y={bottomSheetState:i.trigger(\"state\",[i.state(\"void, hidden\",i.style({transform:\"translateY(100%)\"})),i.state(\"visible\",i.style({transform:\"translateY(0%)\"})),i.transition(\"visible => void, visible => hidden\",i.animate(r.AnimationDurations.COMPLEX+\" \"+r.AnimationCurves.ACCELERATION_CURVE)),i.transition(\"void => visible\",i.animate(r.AnimationDurations.EXITING+\" \"+r.AnimationCurves.DECELERATION_CURVE))])},g=(f=u.BasePortalOutlet,p.__extends(_,f),_.prototype.attachComponentPortal=function(e){return this._validatePortalAttached(),this._setPanelClass(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachComponentPortal(e)},_.prototype.attachTemplatePortal=function(e){return this._validatePortalAttached(),this._setPanelClass(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachTemplatePortal(e)},_.prototype.enter=function(){this._destroyed||(this._animationState=\"visible\",this._changeDetectorRef.detectChanges())},_.prototype.exit=function(){this._destroyed||(this._animationState=\"hidden\",this._changeDetectorRef.markForCheck())},_.prototype.ngOnDestroy=function(){this._breakpointSubscription.unsubscribe(),this._destroyed=!0},_.prototype._onAnimationDone=function(e){\"hidden\"===e.toState?this._restoreFocus():\"visible\"===e.toState&&this._trapFocus(),this._animationStateChanged.emit(e)},_.prototype._onAnimationStart=function(e){this._animationStateChanged.emit(e)},_.prototype._toggleClass=function(e,t){var n=this._elementRef.nativeElement.classList;t?n.add(e):n.remove(e)},_.prototype._validatePortalAttached=function(){if(this._portalOutlet.hasAttached())throw Error(\"Attempting to attach bottom sheet content after content is already attached\")},_.prototype._setPanelClass=function(){var t=this._elementRef.nativeElement,e=this.bottomSheetConfig.panelClass;Array.isArray(e)?e.forEach(function(e){return t.classList.add(e)}):e&&t.classList.add(e)},_.prototype._trapFocus=function(){var e=this._elementRef.nativeElement;if(this._focusTrap||(this._focusTrap=this._focusTrapFactory.create(e)),this.bottomSheetConfig.autoFocus)this._focusTrap.focusInitialElementWhenReady();else{var t=this._document.activeElement;t===e||e.contains(t)||e.focus()}},_.prototype._restoreFocus=function(){var e=this._elementFocusedBeforeOpened;this.bottomSheetConfig.restoreFocus&&e&&\"function\"==typeof e.focus&&e.focus(),this._focusTrap&&this._focusTrap.destroy()},_.prototype._savePreviouslyFocusedElement=function(){var e=this;this._elementFocusedBeforeOpened=this._document.activeElement,this._elementRef.nativeElement.focus&&Promise.resolve().then(function(){return e._elementRef.nativeElement.focus()})},_.decorators=[{type:c.Component,args:[{moduleId:module.id,selector:\"mat-bottom-sheet-container\",template:\"<ng-template cdkPortalOutlet></ng-template>\\r\\n\",changeDetection:c.ChangeDetectionStrategy.OnPush,encapsulation:c.ViewEncapsulation.None,animations:[y.bottomSheetState],host:{class:\"mat-bottom-sheet-container\",tabindex:\"-1\",role:\"dialog\",\"aria-modal\":\"true\",\"[attr.aria-label]\":\"bottomSheetConfig?.ariaLabel\",\"[@state]\":\"_animationState\",\"(@state.start)\":\"_onAnimationStart($event)\",\"(@state.done)\":\"_onAnimationDone($event)\"},styles:[\".mat-bottom-sheet-container{padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto}@media(-ms-high-contrast: active){.mat-bottom-sheet-container{outline:1px solid}}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:4px;border-top-right-radius:4px}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}/*# sourceMappingURL=bottom-sheet-container.css.map */\\n\"]}]}],_.ctorParameters=function(){return[{type:c.ElementRef},{type:c.ChangeDetectorRef},{type:o.FocusTrapFactory},{type:s.BreakpointObserver},{type:void 0,decorators:[{type:c.Optional},{type:c.Inject,args:[t.DOCUMENT]}]},{type:v}]},_.propDecorators={_portalOutlet:[{type:c.ViewChild,args:[u.CdkPortalOutlet,{static:!0}]}]},_);function _(e,t,n,r,i,o){var a=f.call(this)||this;return a._elementRef=e,a._changeDetectorRef=t,a._focusTrapFactory=n,a.bottomSheetConfig=o,a._animationState=\"void\",a._animationStateChanged=new c.EventEmitter,a._elementFocusedBeforeOpened=null,a._document=i,a._breakpointSubscription=r.observe([s.Breakpoints.Medium,s.Breakpoints.Large,s.Breakpoints.XLarge]).subscribe(function(){a._toggleClass(\"mat-bottom-sheet-container-medium\",r.isMatched(s.Breakpoints.Medium)),a._toggleClass(\"mat-bottom-sheet-container-large\",r.isMatched(s.Breakpoints.Large)),a._toggleClass(\"mat-bottom-sheet-container-xlarge\",r.isMatched(s.Breakpoints.XLarge))}),a}var b=(w.decorators=[{type:c.NgModule,args:[{imports:[t.CommonModule,n.OverlayModule,r.MatCommonModule,u.PortalModule],exports:[g,r.MatCommonModule],declarations:[g],entryComponents:[g]}]}],w);function w(){}var x=(C.prototype.dismiss=function(e){var t=this;this._afterDismissed.closed||(this.containerInstance._animationStateChanged.pipe(h.filter(function(e){return\"start\"===e.phaseName}),h.take(1)).subscribe(function(e){t._closeFallbackTimeout=setTimeout(function(){t._overlayRef.dispose()},e.totalTime+100),t._overlayRef.detachBackdrop()}),this._result=e,this.containerInstance.exit())},C.prototype.afterDismissed=function(){return this._afterDismissed.asObservable()},C.prototype.afterOpened=function(){return this._afterOpened.asObservable()},C.prototype.backdropClick=function(){return this._overlayRef.backdropClick()},C.prototype.keydownEvents=function(){return this._overlayRef.keydownEvents()},C);function C(e,t,n){var r=this;this._overlayRef=t,this._afterDismissed=new l.Subject,this._afterOpened=new l.Subject,this.containerInstance=e,this.disableClose=e.bottomSheetConfig.disableClose,e._animationStateChanged.pipe(h.filter(function(e){return\"done\"===e.phaseName&&\"visible\"===e.toState}),h.take(1)).subscribe(function(){r._afterOpened.next(),r._afterOpened.complete()}),e._animationStateChanged.pipe(h.filter(function(e){return\"done\"===e.phaseName&&\"hidden\"===e.toState}),h.take(1)).subscribe(function(){clearTimeout(r._closeFallbackTimeout),t.dispose()}),t.detachments().pipe(h.take(1)).subscribe(function(){r._afterDismissed.next(r._result),r._afterDismissed.complete()}),l.merge(t.backdropClick(),t.keydownEvents().pipe(h.filter(function(e){return e.keyCode===d.ESCAPE}))).subscribe(function(e){r.disableClose||\"keydown\"===e.type&&d.hasModifierKey(e)||(e.preventDefault(),r.dismiss())})}var S=new c.InjectionToken(\"mat-bottom-sheet-default-options\"),E=(Object.defineProperty(O.prototype,\"_openedBottomSheetRef\",{get:function(){var e=this._parentBottomSheet;return e?e._openedBottomSheetRef:this._bottomSheetRefAtThisLevel},set:function(e){this._parentBottomSheet?this._parentBottomSheet._openedBottomSheetRef=e:this._bottomSheetRefAtThisLevel=e},enumerable:!0,configurable:!0}),O.prototype.open=function(e,t){var n=this,r=function(e,t){return p.__assign({},e,t)}(this._defaultOptions||new v,t),i=this._createOverlay(r),o=this._attachContainer(i,r),a=new x(o,i,this._location);if(e instanceof c.TemplateRef)o.attachTemplatePortal(new u.TemplatePortal(e,null,{$implicit:r.data,bottomSheetRef:a}));else{var s=new u.ComponentPortal(e,void 0,this._createInjector(r,a)),l=o.attachComponentPortal(s);a.instance=l.instance}return a.afterDismissed().subscribe(function(){n._openedBottomSheetRef==a&&(n._openedBottomSheetRef=null)}),this._openedBottomSheetRef?(this._openedBottomSheetRef.afterDismissed().subscribe(function(){return a.containerInstance.enter()}),this._openedBottomSheetRef.dismiss()):a.containerInstance.enter(),this._openedBottomSheetRef=a},O.prototype.dismiss=function(){this._openedBottomSheetRef&&this._openedBottomSheetRef.dismiss()},O.prototype.ngOnDestroy=function(){this._bottomSheetRefAtThisLevel&&this._bottomSheetRefAtThisLevel.dismiss()},O.prototype._attachContainer=function(e,t){var n=t&&t.viewContainerRef&&t.viewContainerRef.injector,r=new u.PortalInjector(n||this._injector,new WeakMap([[v,t]])),i=new u.ComponentPortal(g,t.viewContainerRef,r);return e.attach(i).instance},O.prototype._createOverlay=function(e){var t=new n.OverlayConfig({direction:e.direction,hasBackdrop:e.hasBackdrop,disposeOnNavigation:e.closeOnNavigation,maxWidth:\"100%\",scrollStrategy:e.scrollStrategy||this._overlay.scrollStrategies.block(),positionStrategy:this._overlay.position().global().centerHorizontally().bottom(\"0\")});return e.backdropClass&&(t.backdropClass=e.backdropClass),this._overlay.create(t)},O.prototype._createInjector=function(e,t){var n=e&&e.viewContainerRef&&e.viewContainerRef.injector,r=new WeakMap([[x,t],[m,e.data]]);return!e.direction||n&&n.get(a.Directionality,null)||r.set(a.Directionality,{value:e.direction,change:l.of()}),new u.PortalInjector(n||this._injector,r)},O.decorators=[{type:c.Injectable,args:[{providedIn:b}]}],O.ctorParameters=function(){return[{type:n.Overlay},{type:c.Injector},{type:O,decorators:[{type:c.Optional},{type:c.SkipSelf}]},{type:t.Location,decorators:[{type:c.Optional}]},{type:v,decorators:[{type:c.Optional},{type:c.Inject,args:[S]}]}]},O.ngInjectableDef=c.ɵɵdefineInjectable({factory:function(){return new O(c.ɵɵinject(n.Overlay),c.ɵɵinject(c.INJECTOR),c.ɵɵinject(O,12),c.ɵɵinject(t.Location,8),c.ɵɵinject(S,8))},token:O,providedIn:b}),O);function O(e,t,n,r,i){this._overlay=e,this._injector=t,this._parentBottomSheet=n,this._location=r,this._defaultOptions=i,this._bottomSheetRefAtThisLevel=null}e.MatBottomSheetModule=b,e.MAT_BOTTOM_SHEET_DEFAULT_OPTIONS=S,e.MatBottomSheet=E,e.MAT_BOTTOM_SHEET_DATA=m,e.MatBottomSheetConfig=v,e.MatBottomSheetContainer=g,e.matBottomSheetAnimations=y,e.MatBottomSheetRef=x,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/collections\"),require(\"@angular/core\"),require(\"@angular/forms\"),require(\"@angular/material/core\")):System.registerDynamic(\"npm:@angular/material/bundles/material-button-toggle.umd.js\",[\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/coercion\",\"@angular/cdk/collections\",\"@angular/core\",\"@angular/forms\",\"@angular/material/core\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/collections\"),e(\"@angular/core\"),e(\"@angular/forms\"),e(\"@angular/material/core\"))})}(0,function(e,t,n,r,i,l,o,a){\"use strict\";function s(){}var u=new l.InjectionToken(\"MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS\"),c={provide:o.NG_VALUE_ACCESSOR,useExisting:l.forwardRef(function(){return h}),multi:!0},p=0,d=function(e,t){this.source=e,this.value=t},h=(Object.defineProperty(f.prototype,\"name\",{get:function(){return this._name},set:function(e){var t=this;this._name=e,this._buttonToggles&&this._buttonToggles.forEach(function(e){e.name=t._name,e._markForCheck()})},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"vertical\",{get:function(){return this._vertical},set:function(e){this._vertical=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"value\",{get:function(){var e=this._selectionModel?this._selectionModel.selected:[];return this.multiple?e.map(function(e){return e.value}):e[0]?e[0].value:void 0},set:function(e){this._setSelectionByValue(e),this.valueChange.emit(this.value)},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"selected\",{get:function(){var e=this._selectionModel?this._selectionModel.selected:[];return this.multiple?e:e[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"multiple\",{get:function(){return this._multiple},set:function(e){this._multiple=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=r.coerceBooleanProperty(e),this._buttonToggles&&this._buttonToggles.forEach(function(e){return e._markForCheck()})},enumerable:!0,configurable:!0}),f.prototype.ngOnInit=function(){this._selectionModel=new i.SelectionModel(this.multiple,void 0,!1)},f.prototype.ngAfterContentInit=function(){var e;(e=this._selectionModel).select.apply(e,t.__spread(this._buttonToggles.filter(function(e){return e.checked})))},f.prototype.writeValue=function(e){this.value=e,this._changeDetector.markForCheck()},f.prototype.registerOnChange=function(e){this._controlValueAccessorChangeFn=e},f.prototype.registerOnTouched=function(e){this._onTouched=e},f.prototype.setDisabledState=function(e){this.disabled=e},f.prototype._emitChangeEvent=function(){var e=this.selected,t=Array.isArray(e)?e[e.length-1]:e,n=new d(t,this.value);this._controlValueAccessorChangeFn(n.value),this.change.emit(n)},f.prototype._syncButtonToggle=function(e,t,n,r){var i=this;void 0===n&&(n=!1),void 0===r&&(r=!1),this.multiple||!this.selected||e.checked||(this.selected.checked=!1),this._selectionModel?t?this._selectionModel.select(e):this._selectionModel.deselect(e):r=!0,r?Promise.resolve(function(){return i._updateModelValue(n)}):this._updateModelValue(n)},f.prototype._isSelected=function(e){return this._selectionModel&&this._selectionModel.isSelected(e)},f.prototype._isPrechecked=function(t){return void 0!==this._rawValue&&(this.multiple&&Array.isArray(this._rawValue)?this._rawValue.some(function(e){return null!=t.value&&e===t.value}):t.value===this._rawValue)},f.prototype._setSelectionByValue=function(e){var t=this;if(this._rawValue=e,this._buttonToggles)if(this.multiple&&e){if(!Array.isArray(e))throw Error(\"Value must be an array in multiple-selection mode.\");this._clearSelection(),e.forEach(function(e){return t._selectValue(e)})}else this._clearSelection(),this._selectValue(e)},f.prototype._clearSelection=function(){this._selectionModel.clear(),this._buttonToggles.forEach(function(e){return e.checked=!1})},f.prototype._selectValue=function(t){var e=this._buttonToggles.find(function(e){return null!=e.value&&e.value===t});e&&(e.checked=!0,this._selectionModel.select(e))},f.prototype._updateModelValue=function(e){e&&this._emitChangeEvent(),this.valueChange.emit(this.value)},f.decorators=[{type:l.Directive,args:[{selector:\"mat-button-toggle-group\",providers:[c,{provide:s,useExisting:f}],host:{role:\"group\",class:\"mat-button-toggle-group\",\"[attr.aria-disabled]\":\"disabled\",\"[class.mat-button-toggle-vertical]\":\"vertical\",\"[class.mat-button-toggle-group-appearance-standard]\":'appearance === \"standard\"'},exportAs:\"matButtonToggleGroup\"}]}],f.ctorParameters=function(){return[{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[u]}]}]},f.propDecorators={_buttonToggles:[{type:l.ContentChildren,args:[l.forwardRef(function(){return g})]}],appearance:[{type:l.Input}],name:[{type:l.Input}],vertical:[{type:l.Input}],value:[{type:l.Input}],valueChange:[{type:l.Output}],multiple:[{type:l.Input}],disabled:[{type:l.Input}],change:[{type:l.Output}]},f);function f(e,t){this._changeDetector=e,this._vertical=!1,this._multiple=!1,this._disabled=!1,this._controlValueAccessorChangeFn=function(){},this._onTouched=function(){},this._name=\"mat-button-toggle-group-\"+p++,this.valueChange=new l.EventEmitter,this.change=new l.EventEmitter,this.appearance=t&&t.appearance?t.appearance:\"standard\"}function m(){}var v,y=a.mixinDisableRipple(m),g=(v=y,t.__extends(_,v),Object.defineProperty(_.prototype,\"buttonId\",{get:function(){return this.id+\"-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"appearance\",{get:function(){return this.buttonToggleGroup?this.buttonToggleGroup.appearance:this._appearance},set:function(e){this._appearance=e},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"checked\",{get:function(){return this.buttonToggleGroup?this.buttonToggleGroup._isSelected(this):this._checked},set:function(e){var t=r.coerceBooleanProperty(e);t!==this._checked&&(this._checked=t,this.buttonToggleGroup&&this.buttonToggleGroup._syncButtonToggle(this,this._checked),this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"disabled\",{get:function(){return this._disabled||this.buttonToggleGroup&&this.buttonToggleGroup.disabled},set:function(e){this._disabled=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),_.prototype.ngOnInit=function(){this._isSingleSelector=this.buttonToggleGroup&&!this.buttonToggleGroup.multiple,this._type=this._isSingleSelector?\"radio\":\"checkbox\",this.id=this.id||\"mat-button-toggle-\"+p++,this._isSingleSelector&&(this.name=this.buttonToggleGroup.name),this.buttonToggleGroup&&this.buttonToggleGroup._isPrechecked(this)&&(this.checked=!0),this._focusMonitor.monitor(this._elementRef,!0)},_.prototype.ngOnDestroy=function(){var e=this.buttonToggleGroup;this._focusMonitor.stopMonitoring(this._elementRef),e&&e._isSelected(this)&&e._syncButtonToggle(this,!1,!1,!0)},_.prototype.focus=function(e){this._buttonElement.nativeElement.focus(e)},_.prototype._onButtonClick=function(){var e=!!this._isSingleSelector||!this._checked;e!==this._checked&&(this._checked=e,this.buttonToggleGroup&&(this.buttonToggleGroup._syncButtonToggle(this,this._checked,!0),this.buttonToggleGroup._onTouched())),this.change.emit(new d(this,this.value))},_.prototype._markForCheck=function(){this._changeDetectorRef.markForCheck()},_.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-button-toggle\",template:'<button #button class=\"mat-button-toggle-button\"\\n        type=\"button\"\\n        [id]=\"buttonId\"\\n        [attr.tabindex]=\"disabled ? -1 : tabIndex\"\\n        [attr.aria-pressed]=\"checked\"\\n        [disabled]=\"disabled || null\"\\n        [attr.name]=\"name || null\"\\n        [attr.aria-label]=\"ariaLabel\"\\n        [attr.aria-labelledby]=\"ariaLabelledby\"\\n        (click)=\"_onButtonClick()\">\\n  <div class=\"mat-button-toggle-label-content\">\\n    <ng-content></ng-content>\\n  </div>\\n</button>\\n\\n<div class=\"mat-button-toggle-focus-overlay\"></div>\\n<div class=\"mat-button-toggle-ripple\" matRipple\\n     [matRippleTrigger]=\"button\"\\n     [matRippleDisabled]=\"this.disableRipple || this.disabled\">\\n</div>\\n',encapsulation:l.ViewEncapsulation.None,exportAs:\"matButtonToggle\",changeDetection:l.ChangeDetectionStrategy.OnPush,inputs:[\"disableRipple\"],host:{\"[class.mat-button-toggle-standalone]\":\"!buttonToggleGroup\",\"[class.mat-button-toggle-checked]\":\"checked\",\"[class.mat-button-toggle-disabled]\":\"disabled\",\"[class.mat-button-toggle-appearance-standard]\":'appearance === \"standard\"',class:\"mat-button-toggle\",\"[attr.tabindex]\":\"-1\",\"[attr.id]\":\"id\",\"[attr.name]\":\"null\",\"(focus)\":\"focus()\"},styles:[\".mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:2px;-webkit-tap-highlight-color:transparent}@media(-ms-high-contrast: active){.mat-button-toggle-standalone,.mat-button-toggle-group{outline:solid 1px}}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:4px}@media(-ms-high-contrast: active){.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{outline:0}}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:1}@media(-ms-high-contrast: active){.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:.5}}.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{opacity:.04}.mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.12}@media(-ms-high-contrast: active){.mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.5}}@media(hover: none){.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;line-height:36px;padding:0 16px;position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px;padding:0 12px}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{border-radius:inherit;pointer-events:none;opacity:0;top:0;left:0;right:0;bottom:0;position:absolute}.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 36px}@media(-ms-high-contrast: active){.mat-button-toggle-checked .mat-button-toggle-focus-overlay{opacity:.5;height:0}}@media(-ms-high-contrast: active){.mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 48px}}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}/*# sourceMappingURL=button-toggle.css.map */\\n\"]}]}],_.ctorParameters=function(){return[{type:h,decorators:[{type:l.Optional}]},{type:l.ChangeDetectorRef},{type:l.ElementRef},{type:n.FocusMonitor},{type:String,decorators:[{type:l.Attribute,args:[\"tabindex\"]}]},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[u]}]}]},_.propDecorators={ariaLabel:[{type:l.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:l.Input,args:[\"aria-labelledby\"]}],_buttonElement:[{type:l.ViewChild,args:[\"button\",{static:!1}]}],id:[{type:l.Input}],name:[{type:l.Input}],value:[{type:l.Input}],tabIndex:[{type:l.Input}],appearance:[{type:l.Input}],checked:[{type:l.Input}],disabled:[{type:l.Input}],change:[{type:l.Output}]},_);function _(e,t,n,r,i,o){var a=v.call(this)||this;a._changeDetectorRef=t,a._elementRef=n,a._focusMonitor=r,a._isSingleSelector=!1,a._checked=!1,a.ariaLabelledby=null,a._disabled=!1,a.change=new l.EventEmitter;var s=Number(i);return a.tabIndex=s||0===s?s:null,a.buttonToggleGroup=e,a.appearance=o&&o.appearance?o.appearance:\"standard\",a}var b=(w.decorators=[{type:l.NgModule,args:[{imports:[a.MatCommonModule,a.MatRippleModule],exports:[a.MatCommonModule,h,g],declarations:[h,g]}]}],w);function w(){}e.MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS=u,e.MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR=c,e.MatButtonToggleGroupMultiple=s,e.MatButtonToggleChange=d,e.MatButtonToggleGroup=h,e.MatButtonToggle=g,e.MatButtonToggleModule=b,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/platform-browser/animations\"),require(\"@angular/material/core\")):System.registerDynamic(\"npm:@angular/material/bundles/material-card.umd.js\",[\"@angular/core\",\"@angular/platform-browser/animations\",\"@angular/material/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/platform-browser/animations\"),e(\"@angular/material/core\"))})}(0,function(e,t,n,r){\"use strict\";var i=(o.decorators=[{type:t.Directive,args:[{selector:\"mat-card-content\",host:{class:\"mat-card-content\"}}]}],o);function o(){}var a=(s.decorators=[{type:t.Directive,args:[{selector:\"mat-card-title, [mat-card-title], [matCardTitle]\",host:{class:\"mat-card-title\"}}]}],s);function s(){}var l=(u.decorators=[{type:t.Directive,args:[{selector:\"mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]\",host:{class:\"mat-card-subtitle\"}}]}],u);function u(){}var c=(p.decorators=[{type:t.Directive,args:[{selector:\"mat-card-actions\",exportAs:\"matCardActions\",host:{class:\"mat-card-actions\",\"[class.mat-card-actions-align-end]\":'align === \"end\"'}}]}],p.propDecorators={align:[{type:t.Input}]},p);function p(){this.align=\"start\"}var d=(h.decorators=[{type:t.Directive,args:[{selector:\"mat-card-footer\",host:{class:\"mat-card-footer\"}}]}],h);function h(){}var f=(m.decorators=[{type:t.Directive,args:[{selector:\"[mat-card-image], [matCardImage]\",host:{class:\"mat-card-image\"}}]}],m);function m(){}var v=(y.decorators=[{type:t.Directive,args:[{selector:\"[mat-card-sm-image], [matCardImageSmall]\",host:{class:\"mat-card-sm-image\"}}]}],y);function y(){}var g=(_.decorators=[{type:t.Directive,args:[{selector:\"[mat-card-md-image], [matCardImageMedium]\",host:{class:\"mat-card-md-image\"}}]}],_);function _(){}var b=(w.decorators=[{type:t.Directive,args:[{selector:\"[mat-card-lg-image], [matCardImageLarge]\",host:{class:\"mat-card-lg-image\"}}]}],w);function w(){}var x=(C.decorators=[{type:t.Directive,args:[{selector:\"[mat-card-xl-image], [matCardImageXLarge]\",host:{class:\"mat-card-xl-image\"}}]}],C);function C(){}var S=(E.decorators=[{type:t.Directive,args:[{selector:\"[mat-card-avatar], [matCardAvatar]\",host:{class:\"mat-card-avatar\"}}]}],E);function E(){}var O=(k.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-card\",exportAs:\"matCard\",template:'<ng-content></ng-content>\\n<ng-content select=\"mat-card-footer\"></ng-content>\\n',encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,host:{class:\"mat-card\",\"[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}@media(-ms-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}/*# sourceMappingURL=card.css.map */\\n\"]}]}],k.ctorParameters=function(){return[{type:String,decorators:[{type:t.Optional},{type:t.Inject,args:[n.ANIMATION_MODULE_TYPE]}]}]},k);function k(e){this._animationMode=e}var D=(T.decorators=[{type:t.Component,args:[{moduleId:module.id,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:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,host:{class:\"mat-card-header\"}}]}],T);function T(){}var I=(P.decorators=[{type:t.Component,args:[{moduleId:module.id,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:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,host:{class:\"mat-card-title-group\"}}]}],P);function P(){}var A=(M.decorators=[{type:t.NgModule,args:[{imports:[r.MatCommonModule],exports:[O,D,I,i,a,l,c,d,v,g,b,f,x,S,r.MatCommonModule],declarations:[O,D,I,i,a,l,c,d,v,g,b,f,x,S]}]}],M);function M(){}e.MatCardContent=i,e.MatCardTitle=a,e.MatCardSubtitle=l,e.MatCardActions=c,e.MatCardFooter=d,e.MatCardImage=f,e.MatCardSmImage=v,e.MatCardMdImage=g,e.MatCardLgImage=b,e.MatCardXlImage=x,e.MatCardAvatar=S,e.MatCard=O,e.MatCardHeader=D,e.MatCardTitleGroup=I,e.MatCardModule=A,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/coercion\"),require(\"@angular/core\"),require(\"@angular/forms\"),require(\"@angular/material/core\"),require(\"@angular/platform-browser/animations\"),require(\"@angular/cdk/observers\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/material/bundles/material-checkbox.umd.js\",[\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/coercion\",\"@angular/core\",\"@angular/forms\",\"@angular/material/core\",\"@angular/platform-browser/animations\",\"@angular/cdk/observers\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/coercion\"),e(\"@angular/core\"),e(\"@angular/forms\"),e(\"@angular/material/core\"),e(\"@angular/platform-browser/animations\"),e(\"@angular/cdk/observers\"),e(\"@angular/common\"))})}(0,function(l,e,t,n,u,r,i,o,a,s){\"use strict\";var c,p=new u.InjectionToken(\"mat-checkbox-click-action\"),d=0,h={provide:r.NG_VALUE_ACCESSOR,useExisting:u.forwardRef(function(){return g}),multi:!0};(c=l.TransitionCheckState||(l.TransitionCheckState={}))[c.Init=0]=\"Init\",c[c.Checked=1]=\"Checked\",c[c.Unchecked=2]=\"Unchecked\",c[c.Indeterminate=3]=\"Indeterminate\";function f(e){this._elementRef=e}var m,v=function(){},y=i.mixinTabIndex(i.mixinColor(i.mixinDisableRipple(i.mixinDisabled(f)),\"accent\")),g=(m=y,e.__extends(_,m),Object.defineProperty(_.prototype,\"inputId\",{get:function(){return(this.id||this._uniqueId)+\"-input\"},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),_.prototype.ngAfterViewChecked=function(){},_.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef)},Object.defineProperty(_.prototype,\"checked\",{get:function(){return this._checked},set:function(e){e!=this.checked&&(this._checked=e,this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){var t=n.coerceBooleanProperty(e);t!==this.disabled&&(this._disabled=t,this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"indeterminate\",{get:function(){return this._indeterminate},set:function(e){var t=e!=this._indeterminate;this._indeterminate=e,t&&(this._indeterminate?this._transitionCheckState(l.TransitionCheckState.Indeterminate):this._transitionCheckState(this.checked?l.TransitionCheckState.Checked:l.TransitionCheckState.Unchecked),this.indeterminateChange.emit(this._indeterminate))},enumerable:!0,configurable:!0}),_.prototype._isRippleDisabled=function(){return this.disableRipple||this.disabled},_.prototype._onLabelTextChange=function(){this._changeDetectorRef.detectChanges()},_.prototype.writeValue=function(e){this.checked=!!e},_.prototype.registerOnChange=function(e){this._controlValueAccessorChangeFn=e},_.prototype.registerOnTouched=function(e){this._onTouched=e},_.prototype.setDisabledState=function(e){this.disabled=e},_.prototype._getAriaChecked=function(){return this.checked?\"true\":this.indeterminate?\"mixed\":\"false\"},_.prototype._transitionCheckState=function(e){var t=this._currentCheckState,n=this._elementRef.nativeElement;if(t!==e&&(0<this._currentAnimationClass.length&&n.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(t,e),this._currentCheckState=e,0<this._currentAnimationClass.length)){n.classList.add(this._currentAnimationClass);var r=this._currentAnimationClass;this._ngZone.runOutsideAngular(function(){setTimeout(function(){n.classList.remove(r)},1e3)})}},_.prototype._emitChangeEvent=function(){var e=new v;e.source=this,e.checked=this.checked,this._controlValueAccessorChangeFn(this.checked),this.change.emit(e)},_.prototype.toggle=function(){this.checked=!this.checked},_.prototype._onInputClick=function(e){var t=this;e.stopPropagation(),this.disabled||\"noop\"===this._clickAction?this.disabled||\"noop\"!==this._clickAction||(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate):(this.indeterminate&&\"check\"!==this._clickAction&&Promise.resolve().then(function(){t._indeterminate=!1,t.indeterminateChange.emit(t._indeterminate)}),this.toggle(),this._transitionCheckState(this._checked?l.TransitionCheckState.Checked:l.TransitionCheckState.Unchecked),this._emitChangeEvent())},_.prototype.focus=function(e,t){void 0===e&&(e=\"keyboard\"),this._focusMonitor.focusVia(this._inputElement,e,t)},_.prototype._onInteractionEvent=function(e){e.stopPropagation()},_.prototype._getAnimationClassForCheckStateTransition=function(e,t){if(\"NoopAnimations\"===this._animationMode)return\"\";var n=\"\";switch(e){case l.TransitionCheckState.Init:if(t===l.TransitionCheckState.Checked)n=\"unchecked-checked\";else{if(t!=l.TransitionCheckState.Indeterminate)return\"\";n=\"unchecked-indeterminate\"}break;case l.TransitionCheckState.Unchecked:n=t===l.TransitionCheckState.Checked?\"unchecked-checked\":\"unchecked-indeterminate\";break;case l.TransitionCheckState.Checked:n=t===l.TransitionCheckState.Unchecked?\"checked-unchecked\":\"checked-indeterminate\";break;case l.TransitionCheckState.Indeterminate:n=t===l.TransitionCheckState.Checked?\"indeterminate-checked\":\"indeterminate-unchecked\"}return\"mat-checkbox-anim-\"+n},_.decorators=[{type:u.Component,args:[{moduleId:module.id,selector:\"mat-checkbox\",template:'<label [attr.for]=\"inputId\" class=\"mat-checkbox-layout\" #label>\\n  <div class=\"mat-checkbox-inner-container\"\\n       [class.mat-checkbox-inner-container-no-side-margin]=\"!checkboxLabel.textContent || !checkboxLabel.textContent.trim()\">\\n    <input #input\\n           class=\"mat-checkbox-input cdk-visually-hidden\" type=\"checkbox\"\\n           [id]=\"inputId\"\\n           [required]=\"required\"\\n           [checked]=\"checked\"\\n           [attr.value]=\"value\"\\n           [disabled]=\"disabled\"\\n           [attr.name]=\"name\"\\n           [tabIndex]=\"tabIndex\"\\n           [indeterminate]=\"indeterminate\"\\n           [attr.aria-label]=\"ariaLabel || null\"\\n           [attr.aria-labelledby]=\"ariaLabelledby\"\\n           [attr.aria-checked]=\"_getAriaChecked()\"\\n           (change)=\"_onInteractionEvent($event)\"\\n           (click)=\"_onInputClick($event)\">\\n    <div matRipple class=\"mat-checkbox-ripple\"\\n         [matRippleTrigger]=\"label\"\\n         [matRippleDisabled]=\"_isRippleDisabled()\"\\n         [matRippleRadius]=\"20\"\\n         [matRippleCentered]=\"true\"\\n         [matRippleAnimation]=\"{enterDuration: 150}\">\\n      <div class=\"mat-ripple-element mat-checkbox-persistent-ripple\"></div>\\n    </div>\\n    <div class=\"mat-checkbox-frame\"></div>\\n    <div class=\"mat-checkbox-background\">\\n      <svg version=\"1.1\"\\n           focusable=\"false\"\\n           class=\"mat-checkbox-checkmark\"\\n           viewBox=\"0 0 24 24\"\\n           xml:space=\"preserve\">\\n        <path class=\"mat-checkbox-checkmark-path\"\\n              fill=\"none\"\\n              stroke=\"white\"\\n              d=\"M4.1,12.7 9,17.6 20.3,6.3\"/>\\n      </svg>\\n      \\x3c!-- Element for rendering the indeterminate state checkbox. --\\x3e\\n      <div class=\"mat-checkbox-mixedmark\"></div>\\n    </div>\\n  </div>\\n  <span class=\"mat-checkbox-label\" #checkboxLabel (cdkObserveContent)=\"_onLabelTextChange()\">\\n    \\x3c!-- Add an invisible span so JAWS can read the label --\\x3e\\n    <span style=\"display:none\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </span>\\n</label>\\n',exportAs:\"matCheckbox\",host:{class:\"mat-checkbox\",\"[id]\":\"id\",\"[attr.tabindex]\":\"null\",\"[class.mat-checkbox-indeterminate]\":\"indeterminate\",\"[class.mat-checkbox-checked]\":\"checked\",\"[class.mat-checkbox-disabled]\":\"disabled\",\"[class.mat-checkbox-label-before]\":'labelPosition == \"before\"',\"[class._mat-animation-noopable]\":\"_animationMode === 'NoopAnimations'\"},providers:[h],inputs:[\"disableRipple\",\"color\",\"tabIndex\"],encapsulation:u.ViewEncapsulation.None,changeDetection:u.ChangeDetectionStrategy.OnPush,styles:[\"@keyframes mat-checkbox-fade-in-background{0%{opacity:0}50%{opacity:1}}@keyframes mat-checkbox-fade-out-background{0%,50%{opacity:1}100%{opacity:0}}@keyframes mat-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:22.910259}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1)}100%{stroke-dashoffset:0}}@keyframes mat-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mat-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);stroke-dashoffset:0}to{stroke-dashoffset:-22.910259}}@keyframes mat-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(45deg)}}@keyframes mat-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:0;transform:rotate(45deg)}to{opacity:1;transform:rotate(360deg)}}@keyframes mat-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:rotate(0deg)}}@keyframes mat-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(315deg)}}@keyframes mat-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;opacity:1;transform:scaleX(1)}32.8%,100%{opacity:0;transform:scaleX(0)}}.mat-checkbox-background,.mat-checkbox-frame{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:2px;box-sizing:border-box;pointer-events:none}.mat-checkbox{transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);cursor:pointer;-webkit-tap-highlight-color:transparent}._mat-animation-noopable.mat-checkbox{transition:none;animation:none}.mat-checkbox .mat-ripple-element:not(.mat-checkbox-persistent-ripple){opacity:.16}.mat-checkbox-layout{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:inherit;align-items:baseline;vertical-align:middle;display:inline-flex;white-space:nowrap}.mat-checkbox-label{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.mat-checkbox-inner-container{display:inline-block;height:16px;line-height:0;margin:auto;margin-right:8px;order:0;position:relative;vertical-align:middle;white-space:nowrap;width:16px;flex-shrink:0}[dir=rtl] .mat-checkbox-inner-container{margin-left:8px;margin-right:auto}.mat-checkbox-inner-container-no-side-margin{margin-left:0;margin-right:0}.mat-checkbox-frame{background-color:transparent;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1);border-width:2px;border-style:solid}._mat-animation-noopable .mat-checkbox-frame{transition:none}@media(-ms-high-contrast: active){.mat-checkbox.cdk-keyboard-focused .mat-checkbox-frame{border-style:dotted}}.mat-checkbox-background{align-items:center;display:inline-flex;justify-content:center;transition:background-color 90ms cubic-bezier(0, 0, 0.2, 0.1),opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}._mat-animation-noopable .mat-checkbox-background{transition:none}.mat-checkbox-persistent-ripple{width:100%;height:100%;transform:none}.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:.04}.mat-checkbox.cdk-keyboard-focused .mat-checkbox-persistent-ripple{opacity:.12}.mat-checkbox-persistent-ripple,.mat-checkbox.mat-checkbox-disabled .mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:0}@media(hover: none){.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{display:none}}.mat-checkbox-checkmark{top:0;left:0;right:0;bottom:0;position:absolute;width:100%}.mat-checkbox-checkmark-path{stroke-dashoffset:22.910259;stroke-dasharray:22.910259;stroke-width:2.1333333333px}.mat-checkbox-mixedmark{width:calc(100% - 6px);height:2px;opacity:0;transform:scaleX(0) rotate(0deg);border-radius:2px}@media(-ms-high-contrast: active){.mat-checkbox-mixedmark{height:0;border-top:solid 2px;margin-top:2px}}.mat-checkbox-label-before .mat-checkbox-inner-container{order:1;margin-left:8px;margin-right:auto}[dir=rtl] .mat-checkbox-label-before .mat-checkbox-inner-container{margin-left:auto;margin-right:8px}.mat-checkbox-checked .mat-checkbox-checkmark{opacity:1}.mat-checkbox-checked .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-checked .mat-checkbox-mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark{opacity:0;transform:rotate(45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-indeterminate .mat-checkbox-mixedmark{opacity:1;transform:scaleX(1) rotate(0deg)}.mat-checkbox-unchecked .mat-checkbox-background{background-color:transparent}.mat-checkbox-disabled{cursor:default}.mat-checkbox-anim-unchecked-checked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-checked .mat-checkbox-checkmark-path{animation:180ms linear 0ms mat-checkbox-unchecked-checked-checkmark-path}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-unchecked-indeterminate-mixedmark}.mat-checkbox-anim-checked-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-checked-unchecked .mat-checkbox-checkmark-path{animation:90ms linear 0ms mat-checkbox-checked-unchecked-checkmark-path}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-checkmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-checkmark}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-mixedmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-checkmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-checkmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-mixedmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-mixedmark}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-mixedmark{animation:300ms linear 0ms mat-checkbox-indeterminate-unchecked-mixedmark}.mat-checkbox-input{bottom:0;left:50%}.mat-checkbox .mat-checkbox-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}/*# sourceMappingURL=checkbox.css.map */\\n\"]}]}],_.ctorParameters=function(){return[{type:u.ElementRef},{type:u.ChangeDetectorRef},{type:t.FocusMonitor},{type:u.NgZone},{type:String,decorators:[{type:u.Attribute,args:[\"tabindex\"]}]},{type:void 0,decorators:[{type:u.Optional},{type:u.Inject,args:[p]}]},{type:String,decorators:[{type:u.Optional},{type:u.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},_.propDecorators={ariaLabel:[{type:u.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:u.Input,args:[\"aria-labelledby\"]}],id:[{type:u.Input}],required:[{type:u.Input}],labelPosition:[{type:u.Input}],name:[{type:u.Input}],change:[{type:u.Output}],indeterminateChange:[{type:u.Output}],value:[{type:u.Input}],_inputElement:[{type:u.ViewChild,args:[\"input\",{static:!1}]}],ripple:[{type:u.ViewChild,args:[i.MatRipple,{static:!1}]}],checked:[{type:u.Input}],disabled:[{type:u.Input}],indeterminate:[{type:u.Input}]},_);function _(e,t,n,r,i,o,a){var s=m.call(this,e)||this;return s._changeDetectorRef=t,s._focusMonitor=n,s._ngZone=r,s._clickAction=o,s._animationMode=a,s.ariaLabel=\"\",s.ariaLabelledby=null,s._uniqueId=\"mat-checkbox-\"+ ++d,s.id=s._uniqueId,s.labelPosition=\"after\",s.name=null,s.change=new u.EventEmitter,s.indeterminateChange=new u.EventEmitter,s._onTouched=function(){},s._currentAnimationClass=\"\",s._currentCheckState=l.TransitionCheckState.Init,s._controlValueAccessorChangeFn=function(){},s._checked=!1,s._disabled=!1,s._indeterminate=!1,s.tabIndex=parseInt(i)||0,s._focusMonitor.monitor(e,!0).subscribe(function(e){e||Promise.resolve().then(function(){s._onTouched(),t.markForCheck()})}),s}var b,w={provide:r.NG_VALIDATORS,useExisting:u.forwardRef(function(){return x}),multi:!0},x=(b=r.CheckboxRequiredValidator,e.__extends(C,b),C.decorators=[{type:u.Directive,args:[{selector:\"mat-checkbox[required][formControlName],\\n             mat-checkbox[required][formControl], mat-checkbox[required][ngModel]\",providers:[w]}]}],C);function C(){return null!==b&&b.apply(this,arguments)||this}var S=(E.decorators=[{type:u.NgModule,args:[{exports:[x],declarations:[x]}]}],E);function E(){}var O=(k.decorators=[{type:u.NgModule,args:[{imports:[s.CommonModule,i.MatRippleModule,i.MatCommonModule,a.ObserversModule,S],exports:[g,i.MatCommonModule,S],declarations:[g]}]}],k);function k(){}l.MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR=h,l.MatCheckboxChange=v,l.MatCheckbox=g,l.MAT_CHECKBOX_CLICK_ACTION=p,l._MatCheckboxRequiredValidatorModule=S,l.MatCheckboxModule=O,l.MAT_CHECKBOX_REQUIRED_VALIDATOR=w,l.MatCheckboxRequiredValidator=x,Object.defineProperty(l,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/keycodes\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/platform\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/platform-browser/animations\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/collections\"),require(\"@angular/forms\"),require(\"@angular/material/form-field\")):System.registerDynamic(\"npm:@angular/material/bundles/material-chips.umd.js\",[\"@angular/cdk/keycodes\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/cdk/platform\",\"rxjs\",\"rxjs/operators\",\"@angular/platform-browser/animations\",\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"@angular/cdk/collections\",\"@angular/forms\",\"@angular/material/form-field\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/keycodes\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/platform\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/platform-browser/animations\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/collections\"),e(\"@angular/forms\"),e(\"@angular/material/form-field\"))})}(0,function(e,r,l,s,t,n,i,u,o,a,c,p,d,h,f){\"use strict\";function m(e,t,n){void 0===n&&(n=!1),this.source=e,this.selected=t,this.isUserInput=n}function v(e){this._elementRef=e}var y=s.mixinColor(s.mixinDisableRipple(s.mixinDisabled(v)),\"primary\"),g=(_.decorators=[{type:l.Directive,args:[{selector:\"mat-chip-avatar, [matChipAvatar]\",host:{class:\"mat-chip-avatar\"}}]}],_);function _(){}var b=(w.decorators=[{type:l.Directive,args:[{selector:\"mat-chip-trailing-icon, [matChipTrailingIcon]\",host:{class:\"mat-chip-trailing-icon\"}}]}],w);function w(){}var x,C=(x=y,t.__extends(S,x),Object.defineProperty(S.prototype,\"rippleDisabled\",{get:function(){return this.disabled||this.disableRipple||!!this.rippleConfig.disabled},enumerable:!0,configurable:!0}),Object.defineProperty(S.prototype,\"selected\",{get:function(){return this._selected},set:function(e){var t=n.coerceBooleanProperty(e);t!==this._selected&&(this._selected=t,this._dispatchSelectionChange())},enumerable:!0,configurable:!0}),Object.defineProperty(S.prototype,\"value\",{get:function(){return void 0!==this._value?this._value:this._elementRef.nativeElement.textContent},set:function(e){this._value=e},enumerable:!0,configurable:!0}),Object.defineProperty(S.prototype,\"selectable\",{get:function(){return this._selectable&&this.chipListSelectable},set:function(e){this._selectable=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(S.prototype,\"removable\",{get:function(){return this._removable},set:function(e){this._removable=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(S.prototype,\"ariaSelected\",{get:function(){return this.selectable&&(this._chipListMultiple||this.selected)?this.selected.toString():null},enumerable:!0,configurable:!0}),S.prototype._addHostClassName=function(){var e=\"mat-basic-chip\",t=this._elementRef.nativeElement;t.hasAttribute(e)||t.tagName.toLowerCase()===e?t.classList.add(e):t.classList.add(\"mat-standard-chip\")},S.prototype.ngOnDestroy=function(){this.destroyed.emit({chip:this}),this._chipRipple._removeTriggerEvents()},S.prototype.select=function(){this._selected||(this._selected=!0,this._dispatchSelectionChange(),this._markForCheck())},S.prototype.deselect=function(){this._selected&&(this._selected=!1,this._dispatchSelectionChange(),this._markForCheck())},S.prototype.selectViaInteraction=function(){this._selected||(this._selected=!0,this._dispatchSelectionChange(!0),this._markForCheck())},S.prototype.toggleSelected=function(e){return void 0===e&&(e=!1),this._selected=!this.selected,this._dispatchSelectionChange(e),this._markForCheck(),this.selected},S.prototype.focus=function(){this._hasFocus||(this._elementRef.nativeElement.focus(),this._onFocus.next({chip:this})),this._hasFocus=!0},S.prototype.remove=function(){this.removable&&this.removed.emit({chip:this})},S.prototype._handleClick=function(e){this.disabled?e.preventDefault():e.stopPropagation()},S.prototype._handleKeydown=function(e){if(!this.disabled)switch(e.keyCode){case r.DELETE:case r.BACKSPACE:this.remove(),e.preventDefault();break;case r.SPACE:this.selectable&&this.toggleSelected(!0),e.preventDefault()}},S.prototype._blur=function(){var e=this;this._ngZone.onStable.asObservable().pipe(o.take(1)).subscribe(function(){e._ngZone.run(function(){e._hasFocus=!1,e._onBlur.next({chip:e})})})},S.prototype._dispatchSelectionChange=function(e){void 0===e&&(e=!1),this.selectionChange.emit({source:this,isUserInput:e,selected:this._selected})},S.prototype._markForCheck=function(){this._changeDetectorRef&&this._changeDetectorRef.markForCheck()},S.decorators=[{type:l.Directive,args:[{selector:\"mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]\",inputs:[\"color\",\"disabled\",\"disableRipple\"],exportAs:\"matChip\",host:{class:\"mat-chip\",\"[attr.tabindex]\":\"disabled ? null : -1\",role:\"option\",\"[class.mat-chip-selected]\":\"selected\",\"[class.mat-chip-with-avatar]\":\"avatar\",\"[class.mat-chip-with-trailing-icon]\":\"trailingIcon || removeIcon\",\"[class.mat-chip-disabled]\":\"disabled\",\"[class._mat-animation-noopable]\":\"_animationsDisabled\",\"[attr.disabled]\":\"disabled || null\",\"[attr.aria-disabled]\":\"disabled.toString()\",\"[attr.aria-selected]\":\"ariaSelected\",\"(click)\":\"_handleClick($event)\",\"(keydown)\":\"_handleKeydown($event)\",\"(focus)\":\"focus()\",\"(blur)\":\"_blur()\"}}]}],S.ctorParameters=function(){return[{type:l.ElementRef},{type:l.NgZone},{type:i.Platform},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[s.MAT_RIPPLE_GLOBAL_OPTIONS]}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[a.ANIMATION_MODULE_TYPE]}]},{type:l.ChangeDetectorRef}]},S.propDecorators={avatar:[{type:l.ContentChild,args:[g,{static:!1}]}],trailingIcon:[{type:l.ContentChild,args:[b,{static:!1}]}],removeIcon:[{type:l.ContentChild,args:[l.forwardRef(function(){return E}),{static:!1}]}],selected:[{type:l.Input}],value:[{type:l.Input}],selectable:[{type:l.Input}],removable:[{type:l.Input}],selectionChange:[{type:l.Output}],destroyed:[{type:l.Output}],removed:[{type:l.Output}]},S);function S(e,t,n,r,i,o){var a=x.call(this,e)||this;return a._elementRef=e,a._ngZone=t,a._changeDetectorRef=o,a._hasFocus=!1,a.chipListSelectable=!0,a._chipListMultiple=!1,a._selected=!1,a._selectable=!0,a._removable=!0,a._onFocus=new u.Subject,a._onBlur=new u.Subject,a.selectionChange=new l.EventEmitter,a.destroyed=new l.EventEmitter,a.removed=new l.EventEmitter,a._addHostClassName(),a._chipRipple=new s.RippleRenderer(a,t,e,n),a._chipRipple.setupTriggerEvents(e),a.rippleConfig=r||{},a._animationsDisabled=\"NoopAnimations\"===i,a}var E=(O.prototype._handleClick=function(e){var t=this._parentChip;t.removable&&!t.disabled&&t.remove(),e.stopPropagation()},O.decorators=[{type:l.Directive,args:[{selector:\"[matChipRemove]\",host:{class:\"mat-chip-remove mat-chip-trailing-icon\",\"(click)\":\"_handleClick($event)\"}}]}],O.ctorParameters=function(){return[{type:C}]},O);function O(e){this._parentChip=e}function k(e,t,n,r){this._defaultErrorStateMatcher=e,this._parentForm=t,this._parentFormGroup=n,this.ngControl=r}var D,T=new l.InjectionToken(\"mat-chips-default-options\"),I=s.mixinErrorState(k),P=0,A=function(e,t){this.source=e,this.value=t},M=(D=I,t.__extends(R,D),Object.defineProperty(R.prototype,\"selected\",{get:function(){return this.multiple?this._selectionModel.selected:this._selectionModel.selected[0]},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"role\",{get:function(){return this.empty?null:\"listbox\"},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"multiple\",{get:function(){return this._multiple},set:function(e){this._multiple=n.coerceBooleanProperty(e),this._syncChipsState()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"compareWith\",{get:function(){return this._compareWith},set:function(e){this._compareWith=e,this._selectionModel&&this._initializeSelection()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"value\",{get:function(){return this._value},set:function(e){this.writeValue(e),this._value=e},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"id\",{get:function(){return this._chipInput?this._chipInput.id:this._uid},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=n.coerceBooleanProperty(e),this.stateChanges.next()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"placeholder\",{get:function(){return this._chipInput?this._chipInput.placeholder:this._placeholder},set:function(e){this._placeholder=e,this.stateChanges.next()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"focused\",{get:function(){return this._chipInput&&this._chipInput.focused||this._hasFocusedChip()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"empty\",{get:function(){return(!this._chipInput||this._chipInput.empty)&&0===this.chips.length},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"shouldLabelFloat\",{get:function(){return!this.empty||this.focused},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"disabled\",{get:function(){return this.ngControl?!!this.ngControl.disabled:this._disabled},set:function(e){this._disabled=n.coerceBooleanProperty(e),this._syncChipsState()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"selectable\",{get:function(){return this._selectable},set:function(e){var t=this;this._selectable=n.coerceBooleanProperty(e),this.chips&&this.chips.forEach(function(e){return e.chipListSelectable=t._selectable})},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"tabIndex\",{set:function(e){this._userTabIndex=e,this._tabIndex=e},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"chipSelectionChanges\",{get:function(){return u.merge.apply(void 0,t.__spread(this.chips.map(function(e){return e.selectionChange})))},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"chipFocusChanges\",{get:function(){return u.merge.apply(void 0,t.__spread(this.chips.map(function(e){return e._onFocus})))},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"chipBlurChanges\",{get:function(){return u.merge.apply(void 0,t.__spread(this.chips.map(function(e){return e._onBlur})))},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"chipRemoveChanges\",{get:function(){return u.merge.apply(void 0,t.__spread(this.chips.map(function(e){return e.destroyed})))},enumerable:!0,configurable:!0}),R.prototype.ngAfterContentInit=function(){var t=this;this._keyManager=new c.FocusKeyManager(this.chips).withWrap().withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:\"ltr\"),this._dir&&this._dir.change.pipe(o.takeUntil(this._destroyed)).subscribe(function(e){return t._keyManager.withHorizontalOrientation(e)}),this._keyManager.tabOut.pipe(o.takeUntil(this._destroyed)).subscribe(function(){t._allowFocusEscape()}),this.chips.changes.pipe(o.startWith(null),o.takeUntil(this._destroyed)).subscribe(function(){t.disabled&&Promise.resolve().then(function(){t._syncChipsState()}),t._resetChips(),t._initializeSelection(),t._updateTabIndex(),t._updateFocusForDestroyedChips(),t.stateChanges.next()})},R.prototype.ngOnInit=function(){this._selectionModel=new d.SelectionModel(this.multiple,void 0,!1),this.stateChanges.next()},R.prototype.ngDoCheck=function(){this.ngControl&&this.updateErrorState()},R.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete(),this.stateChanges.complete(),this._dropSubscriptions()},R.prototype.registerInput=function(e){this._chipInput=e},R.prototype.setDescribedByIds=function(e){this._ariaDescribedby=e.join(\" \")},R.prototype.writeValue=function(e){this.chips&&this._setSelectionByValue(e,!1)},R.prototype.registerOnChange=function(e){this._onChange=e},R.prototype.registerOnTouched=function(e){this._onTouched=e},R.prototype.setDisabledState=function(e){this.disabled=e,this.stateChanges.next()},R.prototype.onContainerClick=function(e){this._originatesFromChip(e)||this.focus()},R.prototype.focus=function(e){this.disabled||this._chipInput&&this._chipInput.focused||(0<this.chips.length?this._keyManager.setFirstItemActive():this._focusInput(e),this.stateChanges.next())},R.prototype._focusInput=function(e){this._chipInput&&this._chipInput.focus(e)},R.prototype._keydown=function(e){var t=e.target;e.keyCode===r.BACKSPACE&&this._isInputEmpty(t)?(this._keyManager.setLastItemActive(),e.preventDefault()):t&&t.classList.contains(\"mat-chip\")&&(e.keyCode===r.HOME?(this._keyManager.setFirstItemActive(),e.preventDefault()):e.keyCode===r.END?(this._keyManager.setLastItemActive(),e.preventDefault()):this._keyManager.onKeydown(e),this.stateChanges.next())},R.prototype._updateTabIndex=function(){this._tabIndex=this._userTabIndex||(0===this.chips.length?-1:0)},R.prototype._updateFocusForDestroyedChips=function(){if(null!=this._lastDestroyedChipIndex)if(this.chips.length){var e=Math.min(this._lastDestroyedChipIndex,this.chips.length-1);this._keyManager.setActiveItem(e)}else this.focus();this._lastDestroyedChipIndex=null},R.prototype._isValidIndex=function(e){return 0<=e&&e<this.chips.length},R.prototype._isInputEmpty=function(e){return!(!e||\"input\"!==e.nodeName.toLowerCase()||e.value)},R.prototype._setSelectionByValue=function(e,t){var n=this;if(void 0===t&&(t=!0),this._clearSelection(),this.chips.forEach(function(e){return e.deselect()}),Array.isArray(e))e.forEach(function(e){return n._selectValue(e,t)}),this._sortValues();else{var r=this._selectValue(e,t);r&&t&&this._keyManager.setActiveItem(r)}},R.prototype._selectValue=function(t,e){var n=this;void 0===e&&(e=!0);var r=this.chips.find(function(e){return null!=e.value&&n._compareWith(e.value,t)});return r&&(e?r.selectViaInteraction():r.select(),this._selectionModel.select(r)),r},R.prototype._initializeSelection=function(){var e=this;Promise.resolve().then(function(){(e.ngControl||e._value)&&(e._setSelectionByValue(e.ngControl?e.ngControl.value:e._value,!1),e.stateChanges.next())})},R.prototype._clearSelection=function(t){this._selectionModel.clear(),this.chips.forEach(function(e){e!==t&&e.deselect()}),this.stateChanges.next()},R.prototype._sortValues=function(){var t=this;this._multiple&&(this._selectionModel.clear(),this.chips.forEach(function(e){e.selected&&t._selectionModel.select(e)}),this.stateChanges.next())},R.prototype._propagateChanges=function(e){var t=null;t=Array.isArray(this.selected)?this.selected.map(function(e){return e.value}):this.selected?this.selected.value:e,this._value=t,this.change.emit(new A(this,t)),this.valueChange.emit(t),this._onChange(t),this._changeDetectorRef.markForCheck()},R.prototype._blur=function(){var e=this;this._hasFocusedChip()||this._keyManager.setActiveItem(-1),this.disabled||(this._chipInput?setTimeout(function(){e.focused||e._markAsTouched()}):this._markAsTouched())},R.prototype._markAsTouched=function(){this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next()},R.prototype._allowFocusEscape=function(){var e=this;-1!==this._tabIndex&&(this._tabIndex=-1,setTimeout(function(){e._tabIndex=e._userTabIndex||0,e._changeDetectorRef.markForCheck()}))},R.prototype._resetChips=function(){this._dropSubscriptions(),this._listenToChipsFocus(),this._listenToChipsSelection(),this._listenToChipsRemoved()},R.prototype._dropSubscriptions=function(){this._chipFocusSubscription&&(this._chipFocusSubscription.unsubscribe(),this._chipFocusSubscription=null),this._chipBlurSubscription&&(this._chipBlurSubscription.unsubscribe(),this._chipBlurSubscription=null),this._chipSelectionSubscription&&(this._chipSelectionSubscription.unsubscribe(),this._chipSelectionSubscription=null),this._chipRemoveSubscription&&(this._chipRemoveSubscription.unsubscribe(),this._chipRemoveSubscription=null)},R.prototype._listenToChipsSelection=function(){var t=this;this._chipSelectionSubscription=this.chipSelectionChanges.subscribe(function(e){e.source.selected?t._selectionModel.select(e.source):t._selectionModel.deselect(e.source),t.multiple||t.chips.forEach(function(e){!t._selectionModel.isSelected(e)&&e.selected&&e.deselect()}),e.isUserInput&&t._propagateChanges()})},R.prototype._listenToChipsFocus=function(){var n=this;this._chipFocusSubscription=this.chipFocusChanges.subscribe(function(e){var t=n.chips.toArray().indexOf(e.chip);n._isValidIndex(t)&&n._keyManager.updateActiveItemIndex(t),n.stateChanges.next()}),this._chipBlurSubscription=this.chipBlurChanges.subscribe(function(){n._blur(),n.stateChanges.next()})},R.prototype._listenToChipsRemoved=function(){var r=this;this._chipRemoveSubscription=this.chipRemoveChanges.subscribe(function(e){var t=e.chip,n=r.chips.toArray().indexOf(e.chip);r._isValidIndex(n)&&t._hasFocus&&(r._lastDestroyedChipIndex=n)})},R.prototype._originatesFromChip=function(e){for(var t=e.target;t&&t!==this._elementRef.nativeElement;){if(t.classList.contains(\"mat-chip\"))return!0;t=t.parentElement}return!1},R.prototype._hasFocusedChip=function(){return this.chips.some(function(e){return e._hasFocus})},R.prototype._syncChipsState=function(){var t=this;this.chips&&this.chips.forEach(function(e){e.disabled=t._disabled,e._chipListMultiple=t.multiple})},R.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-chip-list\",template:'<div class=\"mat-chip-list-wrapper\"><ng-content></ng-content></div>',exportAs:\"matChipList\",host:{\"[attr.tabindex]\":\"disabled ? null : _tabIndex\",\"[attr.aria-describedby]\":\"_ariaDescribedby || null\",\"[attr.aria-required]\":\"required.toString()\",\"[attr.aria-disabled]\":\"disabled.toString()\",\"[attr.aria-invalid]\":\"errorState\",\"[attr.aria-multiselectable]\":\"multiple\",\"[attr.role]\":\"role\",\"[class.mat-chip-list-disabled]\":\"disabled\",\"[class.mat-chip-list-invalid]\":\"errorState\",\"[class.mat-chip-list-required]\":\"required\",\"[attr.aria-orientation]\":\"ariaOrientation\",class:\"mat-chip-list\",\"(focus)\":\"focus()\",\"(blur)\":\"_blur()\",\"(keydown)\":\"_keydown($event)\",\"[id]\":\"_uid\"},providers:[{provide:f.MatFormFieldControl,useExisting:R}],encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,styles:['.mat-chip{position:relative;overflow:hidden;box-sizing:border-box;-webkit-tap-highlight-color:transparent;transform:translateZ(0)}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}._mat-animation-noopable.mat-standard-chip{transition:none;animation:none}.mat-standard-chip .mat-chip-remove.mat-icon{width:18px;height:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\"\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}@media(-ms-high-contrast: active){.mat-standard-chip{outline:solid 1px}.mat-standard-chip:focus{outline:dotted 2px}}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}/*# sourceMappingURL=chips.css.map */\\n']}]}],R.ctorParameters=function(){return[{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:p.Directionality,decorators:[{type:l.Optional}]},{type:h.NgForm,decorators:[{type:l.Optional}]},{type:h.FormGroupDirective,decorators:[{type:l.Optional}]},{type:s.ErrorStateMatcher},{type:h.NgControl,decorators:[{type:l.Optional},{type:l.Self}]}]},R.propDecorators={errorStateMatcher:[{type:l.Input}],multiple:[{type:l.Input}],compareWith:[{type:l.Input}],value:[{type:l.Input}],required:[{type:l.Input}],placeholder:[{type:l.Input}],disabled:[{type:l.Input}],ariaOrientation:[{type:l.Input,args:[\"aria-orientation\"]}],selectable:[{type:l.Input}],tabIndex:[{type:l.Input}],change:[{type:l.Output}],valueChange:[{type:l.Output}],chips:[{type:l.ContentChildren,args:[C,{descendants:!0}]}]},R);function R(e,t,n,r,i,o,a){var s=D.call(this,o,r,i,a)||this;return s._elementRef=e,s._changeDetectorRef=t,s._dir=n,s.ngControl=a,s.controlType=\"mat-chip-list\",s._lastDestroyedChipIndex=null,s._destroyed=new u.Subject,s._uid=\"mat-chip-list-\"+P++,s._tabIndex=0,s._userTabIndex=null,s._onTouched=function(){},s._onChange=function(){},s._multiple=!1,s._compareWith=function(e,t){return e===t},s._required=!1,s._disabled=!1,s.ariaOrientation=\"horizontal\",s._selectable=!0,s.change=new l.EventEmitter,s.valueChange=new l.EventEmitter,s.ngControl&&(s.ngControl.valueAccessor=s),s}var N=0,j=(Object.defineProperty(F.prototype,\"chipList\",{set:function(e){e&&(this._chipList=e,this._chipList.registerInput(this))},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,\"addOnBlur\",{get:function(){return this._addOnBlur},set:function(e){this._addOnBlur=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,\"disabled\",{get:function(){return this._disabled||this._chipList&&this._chipList.disabled},set:function(e){this._disabled=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,\"empty\",{get:function(){return!this._inputElement.value},enumerable:!0,configurable:!0}),F.prototype.ngOnChanges=function(){this._chipList.stateChanges.next()},F.prototype._keydown=function(e){e&&e.keyCode===r.TAB&&!r.hasModifierKey(e,\"shiftKey\")&&this._chipList._allowFocusEscape(),this._emitChipEnd(e)},F.prototype._blur=function(){this.addOnBlur&&this._emitChipEnd(),this.focused=!1,this._chipList.focused||this._chipList._blur(),this._chipList.stateChanges.next()},F.prototype._focus=function(){this.focused=!0,this._chipList.stateChanges.next()},F.prototype._emitChipEnd=function(e){!this._inputElement.value&&e&&this._chipList._keydown(e),e&&!this._isSeparatorKey(e)||(this.chipEnd.emit({input:this._inputElement,value:this._inputElement.value}),e&&e.preventDefault())},F.prototype._onInput=function(){this._chipList.stateChanges.next()},F.prototype.focus=function(e){this._inputElement.focus(e)},F.prototype._isSeparatorKey=function(e){if(r.hasModifierKey(e))return!1;var t=this.separatorKeyCodes,n=e.keyCode;return Array.isArray(t)?-1<t.indexOf(n):t.has(n)},F.decorators=[{type:l.Directive,args:[{selector:\"input[matChipInputFor]\",exportAs:\"matChipInput, matChipInputFor\",host:{class:\"mat-chip-input mat-input-element\",\"(keydown)\":\"_keydown($event)\",\"(blur)\":\"_blur()\",\"(focus)\":\"_focus()\",\"(input)\":\"_onInput()\",\"[id]\":\"id\",\"[attr.disabled]\":\"disabled || null\",\"[attr.placeholder]\":\"placeholder || null\",\"[attr.aria-invalid]\":\"_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null\"}}]}],F.ctorParameters=function(){return[{type:l.ElementRef},{type:void 0,decorators:[{type:l.Inject,args:[T]}]}]},F.propDecorators={chipList:[{type:l.Input,args:[\"matChipInputFor\"]}],addOnBlur:[{type:l.Input,args:[\"matChipInputAddOnBlur\"]}],separatorKeyCodes:[{type:l.Input,args:[\"matChipInputSeparatorKeyCodes\"]}],chipEnd:[{type:l.Output,args:[\"matChipInputTokenEnd\"]}],placeholder:[{type:l.Input}],id:[{type:l.Input}],disabled:[{type:l.Input}]},F);function F(e,t){this._elementRef=e,this._defaultOptions=t,this.focused=!1,this._addOnBlur=!1,this.separatorKeyCodes=this._defaultOptions.separatorKeyCodes,this.chipEnd=new l.EventEmitter,this.placeholder=\"\",this.id=\"mat-chip-list-input-\"+N++,this._disabled=!1,this._inputElement=this._elementRef.nativeElement}var L=[M,C,j,E,g,b],V={separatorKeyCodes:[r.ENTER]},B=(U.decorators=[{type:l.NgModule,args:[{exports:L,declarations:L,providers:[s.ErrorStateMatcher,{provide:T,useValue:V}]}]}],U);function U(){}e.MatChipsModule=B,e.ɵ0=V,e.MatChipListChange=A,e.MatChipList=M,e.MatChipSelectionChange=m,e.MatChipAvatar=g,e.MatChipTrailingIcon=b,e.MatChip=C,e.MatChipRemove=E,e.MatChipInput=j,e.MAT_CHIPS_DEFAULT_OPTIONS=T,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/button\"),require(\"@angular/material/dialog\"),require(\"@angular/material/core\"),require(\"rxjs\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/cdk/bidi\"),require(\"rxjs/operators\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/animations\"),require(\"@angular/forms\"),require(\"@angular/material/form-field\"),require(\"@angular/material/input\")):System.registerDynamic(\"npm:@angular/material/bundles/material-datepicker.umd.js\",[\"@angular/cdk/a11y\",\"@angular/cdk/overlay\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/core\",\"@angular/material/button\",\"@angular/material/dialog\",\"@angular/material/core\",\"rxjs\",\"@angular/cdk/keycodes\",\"@angular/cdk/bidi\",\"rxjs/operators\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/animations\",\"@angular/forms\",\"@angular/material/form-field\",\"@angular/material/input\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/button\"),e(\"@angular/material/dialog\"),e(\"@angular/material/core\"),e(\"rxjs\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/cdk/bidi\"),e(\"rxjs/operators\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/animations\"),e(\"@angular/forms\"),e(\"@angular/material/form-field\"),e(\"@angular/material/input\"))})}(0,function(e,t,n,r,i,l,o,a,s,u,c,p,d,h,f,m,v,y,g){\"use strict\";function _(e){return Error(\"MatDatepicker: No provider found for \"+e+\". You must import one of the following modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a custom implementation.\")}var b=(w.prototype.formatYearRange=function(e,t){return e+\" – \"+t},w.decorators=[{type:l.Injectable,args:[{providedIn:\"root\"}]}],w.ngInjectableDef=l.ɵɵdefineInjectable({factory:function(){return new w},token:w,providedIn:\"root\"}),w);function w(){this.changes=new u.Subject,this.calendarLabel=\"Calendar\",this.openCalendarLabel=\"Open calendar\",this.prevMonthLabel=\"Previous month\",this.nextMonthLabel=\"Next month\",this.prevYearLabel=\"Previous year\",this.nextYearLabel=\"Next year\",this.prevMultiYearLabel=\"Previous 20 years\",this.nextMultiYearLabel=\"Next 20 years\",this.switchToMonthViewLabel=\"Choose date\",this.switchToMultiYearViewLabel=\"Choose month and year\"}var x=function(e,t,n,r,i){this.value=e,this.displayValue=t,this.ariaLabel=n,this.enabled=r,this.cssClasses=i},C=(S.prototype._cellClicked=function(e){e.enabled&&this.selectedValueChange.emit(e.value)},S.prototype.ngOnChanges=function(e){var t=e.numCols,n=this.rows,r=this.numCols;(e.rows||t)&&(this._firstRowOffset=n&&n.length&&n[0].length?r-n[0].length:0),!e.cellAspectRatio&&!t&&this._cellPadding||(this._cellPadding=50*this.cellAspectRatio/r+\"%\"),!t&&this._cellWidth||(this._cellWidth=100/r+\"%\")},S.prototype._isActiveCell=function(e,t){var n=e*this.numCols+t;return e&&(n-=this._firstRowOffset),n==this.activeCell},S.prototype._focusActiveCell=function(){var t=this;this._ngZone.runOutsideAngular(function(){t._ngZone.onStable.asObservable().pipe(d.take(1)).subscribe(function(){var e=t._elementRef.nativeElement.querySelector(\".mat-calendar-body-active\");e&&e.focus()})})},S.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"[mat-calendar-body]\",template:'\\x3c!--\\n  If there\\'s not enough space in the first row, create a separate label row. We mark this row as\\n  aria-hidden because we don\\'t want it to be read out as one of the weeks in the month.\\n--\\x3e\\n<tr *ngIf=\"_firstRowOffset < labelMinRequiredCells\" aria-hidden=\"true\">\\n  <td class=\"mat-calendar-body-label\"\\n      [attr.colspan]=\"numCols\"\\n      [style.paddingTop]=\"_cellPadding\"\\n      [style.paddingBottom]=\"_cellPadding\">\\n    {{label}}\\n  </td>\\n</tr>\\n\\n\\x3c!-- Create the first row separately so we can include a special spacer cell. --\\x3e\\n<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\\n  \\x3c!--\\n    We mark this cell as aria-hidden so it doesn\\'t get read out as one of the days in the week.\\n    The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\\n    percentage of the width (a variant of the trick described here:\\n    https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\\n  --\\x3e\\n  <td *ngIf=\"rowIndex === 0 && _firstRowOffset\"\\n      aria-hidden=\"true\"\\n      class=\"mat-calendar-body-label\"\\n      [attr.colspan]=\"_firstRowOffset\"\\n      [style.paddingTop]=\"_cellPadding\"\\n      [style.paddingBottom]=\"_cellPadding\">\\n    {{_firstRowOffset >= labelMinRequiredCells ? label : \\'\\'}}\\n  </td>\\n  <td *ngFor=\"let item of row; let colIndex = index\"\\n      role=\"gridcell\"\\n      class=\"mat-calendar-body-cell\"\\n      [ngClass]=\"item.cssClasses\"\\n      [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\\n      [class.mat-calendar-body-disabled]=\"!item.enabled\"\\n      [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\\n      [attr.aria-label]=\"item.ariaLabel\"\\n      [attr.aria-disabled]=\"!item.enabled || null\"\\n      [attr.aria-selected]=\"selectedValue === item.value\"\\n      (click)=\"_cellClicked(item)\"\\n      [style.width]=\"_cellWidth\"\\n      [style.paddingTop]=\"_cellPadding\"\\n      role=\"button\"\\n      [style.paddingBottom]=\"_cellPadding\">\\n      <div class=\"mat-calendar-body-cell-content\"\\n        [class.mat-calendar-body-selected]=\"selectedValue === item.value\"\\n        [class.mat-calendar-body-today]=\"todayValue === item.value\">\\n        {{item.displayValue}}\\n      </div>\\n  </td>\\n</tr>\\n',host:{class:\"mat-calendar-body\",role:\"grid\",\"aria-readonly\":\"true\"},exportAs:\"matCalendarBody\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,styles:[\".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:none;cursor:pointer}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-cell-content{position:absolute;top:5%;left:5%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}@media(-ms-high-contrast: active){.mat-calendar-body-cell-content{border:none}}@media(-ms-high-contrast: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){outline:dotted 2px}}[dir=rtl] .mat-calendar-body-label{text-align:right}/*# sourceMappingURL=calendar-body.css.map */\\n\"]}]}],S.ctorParameters=function(){return[{type:l.ElementRef},{type:l.NgZone}]},S.propDecorators={label:[{type:l.Input}],rows:[{type:l.Input}],todayValue:[{type:l.Input}],selectedValue:[{type:l.Input}],labelMinRequiredCells:[{type:l.Input}],numCols:[{type:l.Input}],activeCell:[{type:l.Input}],cellAspectRatio:[{type:l.Input}],selectedValueChange:[{type:l.Output}]},S);function S(e,t){this._elementRef=e,this._ngZone=t,this.numCols=7,this.activeCell=0,this.cellAspectRatio=1,this.selectedValueChange=new l.EventEmitter}var E=(Object.defineProperty(O.prototype,\"activeDate\",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate,n=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today();this._activeDate=this._dateAdapter.clampDate(n,this.minDate,this.maxDate),this._hasSameMonthAndYear(t,this._activeDate)||this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(O.prototype,\"selected\",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedDate=this._getDateInCurrentMonth(this._selected)},enumerable:!0,configurable:!0}),Object.defineProperty(O.prototype,\"minDate\",{get:function(){return this._minDate},set:function(e){this._minDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(O.prototype,\"maxDate\",{get:function(){return this._maxDate},set:function(e){this._maxDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),O.prototype.ngAfterContentInit=function(){this._init()},O.prototype._dateSelected=function(e){if(this._selectedDate!=e){var t=this._dateAdapter.getYear(this.activeDate),n=this._dateAdapter.getMonth(this.activeDate),r=this._dateAdapter.createDate(t,n,e);this.selectedChange.emit(r)}this._userSelection.emit()},O.prototype._handleCalendarBodyKeydown=function(e){var t=this._activeDate,n=this._isRtl();switch(e.keyCode){case c.LEFT_ARROW:this.activeDate=this._dateAdapter.addCalendarDays(this._activeDate,n?1:-1);break;case c.RIGHT_ARROW:this.activeDate=this._dateAdapter.addCalendarDays(this._activeDate,n?-1:1);break;case c.UP_ARROW:this.activeDate=this._dateAdapter.addCalendarDays(this._activeDate,-7);break;case c.DOWN_ARROW:this.activeDate=this._dateAdapter.addCalendarDays(this._activeDate,7);break;case c.HOME:this.activeDate=this._dateAdapter.addCalendarDays(this._activeDate,1-this._dateAdapter.getDate(this._activeDate));break;case c.END:this.activeDate=this._dateAdapter.addCalendarDays(this._activeDate,this._dateAdapter.getNumDaysInMonth(this._activeDate)-this._dateAdapter.getDate(this._activeDate));break;case c.PAGE_UP:this.activeDate=e.altKey?this._dateAdapter.addCalendarYears(this._activeDate,-1):this._dateAdapter.addCalendarMonths(this._activeDate,-1);break;case c.PAGE_DOWN:this.activeDate=e.altKey?this._dateAdapter.addCalendarYears(this._activeDate,1):this._dateAdapter.addCalendarMonths(this._activeDate,1);break;case c.ENTER:case c.SPACE:return void(this.dateFilter&&!this.dateFilter(this._activeDate)||(this._dateSelected(this._dateAdapter.getDate(this._activeDate)),this._userSelection.emit(),e.preventDefault()));default:return}this._dateAdapter.compareDate(t,this.activeDate)&&this.activeDateChange.emit(this.activeDate),this._focusActiveCell(),e.preventDefault()},O.prototype._init=function(){this._selectedDate=this._getDateInCurrentMonth(this.selected),this._todayDate=this._getDateInCurrentMonth(this._dateAdapter.today()),this._monthLabel=this._dateAdapter.getMonthNames(\"short\")[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();var e=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),this._dateAdapter.getMonth(this.activeDate),1);this._firstWeekOffset=(7+this._dateAdapter.getDayOfWeek(e)-this._dateAdapter.getFirstDayOfWeek())%7,this._initWeekdays(),this._createWeekCells(),this._changeDetectorRef.markForCheck()},O.prototype._focusActiveCell=function(){this._matCalendarBody._focusActiveCell()},O.prototype._initWeekdays=function(){var e=this._dateAdapter.getFirstDayOfWeek(),n=this._dateAdapter.getDayOfWeekNames(\"narrow\"),t=this._dateAdapter.getDayOfWeekNames(\"long\").map(function(e,t){return{long:e,narrow:n[t]}});this._weekdays=t.slice(e).concat(t.slice(0,e))},O.prototype._createWeekCells=function(){var e=this._dateAdapter.getNumDaysInMonth(this.activeDate),t=this._dateAdapter.getDateNames();this._weeks=[[]];for(var n=0,r=this._firstWeekOffset;n<e;n++,r++){7==r&&(this._weeks.push([]),r=0);var i=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),this._dateAdapter.getMonth(this.activeDate),n+1),o=this._shouldEnableDate(i),a=this._dateAdapter.format(i,this._dateFormats.display.dateA11yLabel),s=this.dateClass?this.dateClass(i):void 0;this._weeks[this._weeks.length-1].push(new x(n+1,t[n],a,o,s))}},O.prototype._shouldEnableDate=function(e){return!!e&&(!this.dateFilter||this.dateFilter(e))&&(!this.minDate||0<=this._dateAdapter.compareDate(e,this.minDate))&&(!this.maxDate||this._dateAdapter.compareDate(e,this.maxDate)<=0)},O.prototype._getDateInCurrentMonth=function(e){return e&&this._hasSameMonthAndYear(e,this.activeDate)?this._dateAdapter.getDate(e):null},O.prototype._hasSameMonthAndYear=function(e,t){return!(!e||!t||this._dateAdapter.getMonth(e)!=this._dateAdapter.getMonth(t)||this._dateAdapter.getYear(e)!=this._dateAdapter.getYear(t))},O.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},O.prototype._isRtl=function(){return this._dir&&\"rtl\"===this._dir.value},O.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-month-view\",template:'<table class=\"mat-calendar-table\" role=\"presentation\">\\n  <thead class=\"mat-calendar-table-header\">\\n    <tr>\\n      <th scope=\"col\" *ngFor=\"let day of _weekdays\" [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\\n    </tr>\\n    <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"7\" aria-hidden=\"true\"></th></tr>\\n  </thead>\\n  <tbody mat-calendar-body\\n         [label]=\"_monthLabel\"\\n         [rows]=\"_weeks\"\\n         [todayValue]=\"_todayDate\"\\n         [selectedValue]=\"_selectedDate\"\\n         [labelMinRequiredCells]=\"3\"\\n         [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\\n         (selectedValueChange)=\"_dateSelected($event)\"\\n         (keydown)=\"_handleCalendarBodyKeydown($event)\">\\n  </tbody>\\n</table>\\n',exportAs:\"matMonthView\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush}]}],O.ctorParameters=function(){return[{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[s.MAT_DATE_FORMATS]}]},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:p.Directionality,decorators:[{type:l.Optional}]}]},O.propDecorators={activeDate:[{type:l.Input}],selected:[{type:l.Input}],minDate:[{type:l.Input}],maxDate:[{type:l.Input}],dateFilter:[{type:l.Input}],dateClass:[{type:l.Input}],selectedChange:[{type:l.Output}],_userSelection:[{type:l.Output}],activeDateChange:[{type:l.Output}],_matCalendarBody:[{type:l.ViewChild,args:[C,{static:!1}]}]},O);function O(e,t,n,r){if(this._changeDetectorRef=e,this._dateFormats=t,this._dateAdapter=n,this._dir=r,this.selectedChange=new l.EventEmitter,this._userSelection=new l.EventEmitter,this.activeDateChange=new l.EventEmitter,!this._dateAdapter)throw _(\"DateAdapter\");if(!this._dateFormats)throw _(\"MAT_DATE_FORMATS\");this._activeDate=this._dateAdapter.today()}var k=24,D=(Object.defineProperty(T.prototype,\"activeDate\",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate,n=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today();this._activeDate=this._dateAdapter.clampDate(n,this.minDate,this.maxDate),I(this._dateAdapter,t,this._activeDate,this.minDate,this.maxDate)||this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"selected\",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedYear=this._selected&&this._dateAdapter.getYear(this._selected)},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"minDate\",{get:function(){return this._minDate},set:function(e){this._minDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"maxDate\",{get:function(){return this._maxDate},set:function(e){this._maxDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),T.prototype.ngAfterContentInit=function(){this._init()},T.prototype._init=function(){var t=this;this._todayYear=this._dateAdapter.getYear(this._dateAdapter.today());var e=this._dateAdapter.getYear(this._activeDate)-P(this._dateAdapter,this.activeDate,this.minDate,this.maxDate);this._years=[];for(var n=0,r=[];n<k;n++)r.push(e+n),4==r.length&&(this._years.push(r.map(function(e){return t._createCellForYear(e)})),r=[]);this._changeDetectorRef.markForCheck()},T.prototype._yearSelected=function(e){this.yearSelected.emit(this._dateAdapter.createDate(e,0,1));var t=this._dateAdapter.getMonth(this.activeDate),n=this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(e,t,1));this.selectedChange.emit(this._dateAdapter.createDate(e,t,Math.min(this._dateAdapter.getDate(this.activeDate),n)))},T.prototype._handleCalendarBodyKeydown=function(e){var t=this._activeDate,n=this._isRtl();switch(e.keyCode){case c.LEFT_ARROW:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,n?1:-1);break;case c.RIGHT_ARROW:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,n?-1:1);break;case c.UP_ARROW:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,-4);break;case c.DOWN_ARROW:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,4);break;case c.HOME:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,-P(this._dateAdapter,this.activeDate,this.minDate,this.maxDate));break;case c.END:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,k-P(this._dateAdapter,this.activeDate,this.minDate,this.maxDate)-1);break;case c.PAGE_UP:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?10*-k:-k);break;case c.PAGE_DOWN:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?10*k:k);break;case c.ENTER:case c.SPACE:this._yearSelected(this._dateAdapter.getYear(this._activeDate));break;default:return}this._dateAdapter.compareDate(t,this.activeDate)&&this.activeDateChange.emit(this.activeDate),this._focusActiveCell(),e.preventDefault()},T.prototype._getActiveCell=function(){return P(this._dateAdapter,this.activeDate,this.minDate,this.maxDate)},T.prototype._focusActiveCell=function(){this._matCalendarBody._focusActiveCell()},T.prototype._createCellForYear=function(e){var t=this._dateAdapter.getYearName(this._dateAdapter.createDate(e,0,1));return new x(e,t,t,this._shouldEnableYear(e))},T.prototype._shouldEnableYear=function(e){if(null==e||this.maxDate&&e>this._dateAdapter.getYear(this.maxDate)||this.minDate&&e<this._dateAdapter.getYear(this.minDate))return!1;if(!this.dateFilter)return!0;for(var t=this._dateAdapter.createDate(e,0,1);this._dateAdapter.getYear(t)==e;t=this._dateAdapter.addCalendarDays(t,1))if(this.dateFilter(t))return!0;return!1},T.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},T.prototype._isRtl=function(){return this._dir&&\"rtl\"===this._dir.value},T.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-multi-year-view\",template:'<table class=\"mat-calendar-table\" role=\"presentation\">\\n  <thead class=\"mat-calendar-table-header\">\\n    <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\\n  </thead>\\n  <tbody mat-calendar-body\\n         [rows]=\"_years\"\\n         [todayValue]=\"_todayYear\"\\n         [selectedValue]=\"_selectedYear\"\\n         [numCols]=\"4\"\\n         [cellAspectRatio]=\"4 / 7\"\\n         [activeCell]=\"_getActiveCell()\"\\n         (selectedValueChange)=\"_yearSelected($event)\"\\n         (keydown)=\"_handleCalendarBodyKeydown($event)\">\\n  </tbody>\\n</table>\\n',exportAs:\"matMultiYearView\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush}]}],T.ctorParameters=function(){return[{type:l.ChangeDetectorRef},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:p.Directionality,decorators:[{type:l.Optional}]}]},T.propDecorators={activeDate:[{type:l.Input}],selected:[{type:l.Input}],minDate:[{type:l.Input}],maxDate:[{type:l.Input}],dateFilter:[{type:l.Input}],selectedChange:[{type:l.Output}],yearSelected:[{type:l.Output}],activeDateChange:[{type:l.Output}],_matCalendarBody:[{type:l.ViewChild,args:[C,{static:!1}]}]},T);function T(e,t,n){if(this._changeDetectorRef=e,this._dateAdapter=t,this._dir=n,this.selectedChange=new l.EventEmitter,this.yearSelected=new l.EventEmitter,this.activeDateChange=new l.EventEmitter,!this._dateAdapter)throw _(\"DateAdapter\");this._activeDate=this._dateAdapter.today()}function I(e,t,n,r,i){var o=e.getYear(t),a=e.getYear(n),s=A(e,r,i);return Math.floor((o-s)/k)===Math.floor((a-s)/k)}function P(e,t,n,r){return function(e,t){return(e%t+t)%t}(e.getYear(t)-A(e,n,r),k)}function A(e,t,n){var r=0;n?r=e.getYear(n)-k+1:t&&(r=e.getYear(t));return r}var M=(Object.defineProperty(R.prototype,\"activeDate\",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate,n=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today();this._activeDate=this._dateAdapter.clampDate(n,this.minDate,this.maxDate),this._dateAdapter.getYear(t)!==this._dateAdapter.getYear(this._activeDate)&&this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"selected\",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedMonth=this._getMonthInCurrentYear(this._selected)},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"minDate\",{get:function(){return this._minDate},set:function(e){this._minDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(R.prototype,\"maxDate\",{get:function(){return this._maxDate},set:function(e){this._maxDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),R.prototype.ngAfterContentInit=function(){this._init()},R.prototype._monthSelected=function(e){var t=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1);this.monthSelected.emit(t);var n=this._dateAdapter.getNumDaysInMonth(t);this.selectedChange.emit(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,Math.min(this._dateAdapter.getDate(this.activeDate),n)))},R.prototype._handleCalendarBodyKeydown=function(e){var t=this._activeDate,n=this._isRtl();switch(e.keyCode){case c.LEFT_ARROW:this.activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,n?1:-1);break;case c.RIGHT_ARROW:this.activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,n?-1:1);break;case c.UP_ARROW:this.activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,-4);break;case c.DOWN_ARROW:this.activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,4);break;case c.HOME:this.activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,-this._dateAdapter.getMonth(this._activeDate));break;case c.END:this.activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,11-this._dateAdapter.getMonth(this._activeDate));break;case c.PAGE_UP:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?-10:-1);break;case c.PAGE_DOWN:this.activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?10:1);break;case c.ENTER:case c.SPACE:this._monthSelected(this._dateAdapter.getMonth(this._activeDate));break;default:return}this._dateAdapter.compareDate(t,this.activeDate)&&this.activeDateChange.emit(this.activeDate),this._focusActiveCell(),e.preventDefault()},R.prototype._init=function(){var t=this;this._selectedMonth=this._getMonthInCurrentYear(this.selected),this._todayMonth=this._getMonthInCurrentYear(this._dateAdapter.today()),this._yearLabel=this._dateAdapter.getYearName(this.activeDate);var n=this._dateAdapter.getMonthNames(\"short\");this._months=[[0,1,2,3],[4,5,6,7],[8,9,10,11]].map(function(e){return e.map(function(e){return t._createCellForMonth(e,n[e])})}),this._changeDetectorRef.markForCheck()},R.prototype._focusActiveCell=function(){this._matCalendarBody._focusActiveCell()},R.prototype._getMonthInCurrentYear=function(e){return e&&this._dateAdapter.getYear(e)==this._dateAdapter.getYear(this.activeDate)?this._dateAdapter.getMonth(e):null},R.prototype._createCellForMonth=function(e,t){var n=this._dateAdapter.format(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1),this._dateFormats.display.monthYearA11yLabel);return new x(e,t.toLocaleUpperCase(),n,this._shouldEnableMonth(e))},R.prototype._shouldEnableMonth=function(e){var t=this._dateAdapter.getYear(this.activeDate);if(null==e||this._isYearAndMonthAfterMaxDate(t,e)||this._isYearAndMonthBeforeMinDate(t,e))return!1;if(!this.dateFilter)return!0;for(var n=this._dateAdapter.createDate(t,e,1);this._dateAdapter.getMonth(n)==e;n=this._dateAdapter.addCalendarDays(n,1))if(this.dateFilter(n))return!0;return!1},R.prototype._isYearAndMonthAfterMaxDate=function(e,t){if(this.maxDate){var n=this._dateAdapter.getYear(this.maxDate),r=this._dateAdapter.getMonth(this.maxDate);return n<e||e===n&&r<t}return!1},R.prototype._isYearAndMonthBeforeMinDate=function(e,t){if(this.minDate){var n=this._dateAdapter.getYear(this.minDate),r=this._dateAdapter.getMonth(this.minDate);return e<n||e===n&&t<r}return!1},R.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},R.prototype._isRtl=function(){return this._dir&&\"rtl\"===this._dir.value},R.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-year-view\",template:'<table class=\"mat-calendar-table\" role=\"presentation\">\\n  <thead class=\"mat-calendar-table-header\">\\n    <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\\n  </thead>\\n  <tbody mat-calendar-body\\n         [label]=\"_yearLabel\"\\n         [rows]=\"_months\"\\n         [todayValue]=\"_todayMonth\"\\n         [selectedValue]=\"_selectedMonth\"\\n         [labelMinRequiredCells]=\"2\"\\n         [numCols]=\"4\"\\n         [cellAspectRatio]=\"4 / 7\"\\n         [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\\n         (selectedValueChange)=\"_monthSelected($event)\"\\n         (keydown)=\"_handleCalendarBodyKeydown($event)\">\\n  </tbody>\\n</table>\\n',exportAs:\"matYearView\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush}]}],R.ctorParameters=function(){return[{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[s.MAT_DATE_FORMATS]}]},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:p.Directionality,decorators:[{type:l.Optional}]}]},R.propDecorators={activeDate:[{type:l.Input}],selected:[{type:l.Input}],minDate:[{type:l.Input}],maxDate:[{type:l.Input}],dateFilter:[{type:l.Input}],selectedChange:[{type:l.Output}],monthSelected:[{type:l.Output}],activeDateChange:[{type:l.Output}],_matCalendarBody:[{type:l.ViewChild,args:[C,{static:!1}]}]},R);function R(e,t,n,r){if(this._changeDetectorRef=e,this._dateFormats=t,this._dateAdapter=n,this._dir=r,this.selectedChange=new l.EventEmitter,this.monthSelected=new l.EventEmitter,this.activeDateChange=new l.EventEmitter,!this._dateAdapter)throw _(\"DateAdapter\");if(!this._dateFormats)throw _(\"MAT_DATE_FORMATS\");this._activeDate=this._dateAdapter.today()}var N=(Object.defineProperty(j.prototype,\"periodButtonText\",{get:function(){if(\"month\"==this.calendar.currentView)return this._dateAdapter.format(this.calendar.activeDate,this._dateFormats.display.monthYearLabel).toLocaleUpperCase();if(\"year\"==this.calendar.currentView)return this._dateAdapter.getYearName(this.calendar.activeDate);var e=this._dateAdapter.getYear(this.calendar.activeDate)-P(this._dateAdapter,this.calendar.activeDate,this.calendar.minDate,this.calendar.maxDate),t=e+k-1,n=this._dateAdapter.getYearName(this._dateAdapter.createDate(e,0,1)),r=this._dateAdapter.getYearName(this._dateAdapter.createDate(t,0,1));return this._intl.formatYearRange(n,r)},enumerable:!0,configurable:!0}),Object.defineProperty(j.prototype,\"periodButtonLabel\",{get:function(){return\"month\"==this.calendar.currentView?this._intl.switchToMultiYearViewLabel:this._intl.switchToMonthViewLabel},enumerable:!0,configurable:!0}),Object.defineProperty(j.prototype,\"prevButtonLabel\",{get:function(){return{month:this._intl.prevMonthLabel,year:this._intl.prevYearLabel,\"multi-year\":this._intl.prevMultiYearLabel}[this.calendar.currentView]},enumerable:!0,configurable:!0}),Object.defineProperty(j.prototype,\"nextButtonLabel\",{get:function(){return{month:this._intl.nextMonthLabel,year:this._intl.nextYearLabel,\"multi-year\":this._intl.nextMultiYearLabel}[this.calendar.currentView]},enumerable:!0,configurable:!0}),j.prototype.currentPeriodClicked=function(){this.calendar.currentView=\"month\"==this.calendar.currentView?\"multi-year\":\"month\"},j.prototype.previousClicked=function(){this.calendar.activeDate=\"month\"==this.calendar.currentView?this._dateAdapter.addCalendarMonths(this.calendar.activeDate,-1):this._dateAdapter.addCalendarYears(this.calendar.activeDate,\"year\"==this.calendar.currentView?-1:-k)},j.prototype.nextClicked=function(){this.calendar.activeDate=\"month\"==this.calendar.currentView?this._dateAdapter.addCalendarMonths(this.calendar.activeDate,1):this._dateAdapter.addCalendarYears(this.calendar.activeDate,\"year\"==this.calendar.currentView?1:k)},j.prototype.previousEnabled=function(){return!this.calendar.minDate||!this.calendar.minDate||!this._isSameView(this.calendar.activeDate,this.calendar.minDate)},j.prototype.nextEnabled=function(){return!this.calendar.maxDate||!this._isSameView(this.calendar.activeDate,this.calendar.maxDate)},j.prototype._isSameView=function(e,t){return\"month\"==this.calendar.currentView?this._dateAdapter.getYear(e)==this._dateAdapter.getYear(t)&&this._dateAdapter.getMonth(e)==this._dateAdapter.getMonth(t):\"year\"==this.calendar.currentView?this._dateAdapter.getYear(e)==this._dateAdapter.getYear(t):I(this._dateAdapter,e,t,this.calendar.minDate,this.calendar.maxDate)},j.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-calendar-header\",template:'<div class=\"mat-calendar-header\">\\n  <div class=\"mat-calendar-controls\">\\n    <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\\n            (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\\n            cdkAriaLive=\"polite\">\\n      {{periodButtonText}}\\n      <div class=\"mat-calendar-arrow\"\\n           [class.mat-calendar-invert]=\"calendar.currentView != \\'month\\'\"></div>\\n    </button>\\n\\n    <div class=\"mat-calendar-spacer\"></div>\\n\\n    <ng-content></ng-content>\\n\\n    <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\\n            [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\\n            [attr.aria-label]=\"prevButtonLabel\">\\n    </button>\\n\\n    <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\\n            [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\\n            [attr.aria-label]=\"nextButtonLabel\">\\n    </button>\\n  </div>\\n</div>\\n',exportAs:\"matCalendarHeader\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush}]}],j.ctorParameters=function(){return[{type:b},{type:F,decorators:[{type:l.Inject,args:[l.forwardRef(function(){return F})]}]},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[s.MAT_DATE_FORMATS]}]},{type:l.ChangeDetectorRef}]},j);function j(e,t,n,r,i){this._intl=e,this.calendar=t,this._dateAdapter=n,this._dateFormats=r,this.calendar.stateChanges.subscribe(function(){return i.markForCheck()})}var F=(Object.defineProperty(L.prototype,\"startAt\",{get:function(){return this._startAt},set:function(e){this._startAt=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"selected\",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"minDate\",{get:function(){return this._minDate},set:function(e){this._minDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"maxDate\",{get:function(){return this._maxDate},set:function(e){this._maxDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"activeDate\",{get:function(){return this._clampedActiveDate},set:function(e){this._clampedActiveDate=this._dateAdapter.clampDate(e,this.minDate,this.maxDate),this.stateChanges.next(),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"currentView\",{get:function(){return this._currentView},set:function(e){this._currentView=e,this._moveFocusOnNextTick=!0,this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),L.prototype.ngAfterContentInit=function(){this._calendarHeaderPortal=new r.ComponentPortal(this.headerComponent||N),this.activeDate=this.startAt||this._dateAdapter.today(),this._currentView=this.startView},L.prototype.ngAfterViewChecked=function(){this._moveFocusOnNextTick&&(this._moveFocusOnNextTick=!1,this.focusActiveCell())},L.prototype.ngOnDestroy=function(){this._intlChanges.unsubscribe(),this.stateChanges.complete()},L.prototype.ngOnChanges=function(e){var t=e.minDate||e.maxDate||e.dateFilter;if(t&&!t.firstChange){var n=this._getCurrentViewComponent();n&&(this._changeDetectorRef.detectChanges(),n._init())}this.stateChanges.next()},L.prototype.focusActiveCell=function(){this._getCurrentViewComponent()._focusActiveCell()},L.prototype.updateTodaysDate=function(){(\"month\"==this.currentView?this.monthView:\"year\"==this.currentView?this.yearView:this.multiYearView).ngAfterContentInit()},L.prototype._dateSelected=function(e){this._dateAdapter.sameDate(e,this.selected)||this.selectedChange.emit(e)},L.prototype._yearSelectedInMultiYearView=function(e){this.yearSelected.emit(e)},L.prototype._monthSelectedInYearView=function(e){this.monthSelected.emit(e)},L.prototype._userSelected=function(){this._userSelection.emit()},L.prototype._goToDateInView=function(e,t){this.activeDate=e,this.currentView=t},L.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},L.prototype._getCurrentViewComponent=function(){return this.monthView||this.yearView||this.multiYearView},L.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-calendar\",template:'\\n<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\\n\\n<div class=\"mat-calendar-content\" [ngSwitch]=\"currentView\" cdkMonitorSubtreeFocus tabindex=\"-1\">\\n  <mat-month-view\\n      *ngSwitchCase=\"\\'month\\'\"\\n      [(activeDate)]=\"activeDate\"\\n      [selected]=\"selected\"\\n      [dateFilter]=\"dateFilter\"\\n      [maxDate]=\"maxDate\"\\n      [minDate]=\"minDate\"\\n      [dateClass]=\"dateClass\"\\n      (selectedChange)=\"_dateSelected($event)\"\\n      (_userSelection)=\"_userSelected()\">\\n  </mat-month-view>\\n\\n  <mat-year-view\\n      *ngSwitchCase=\"\\'year\\'\"\\n      [(activeDate)]=\"activeDate\"\\n      [selected]=\"selected\"\\n      [dateFilter]=\"dateFilter\"\\n      [maxDate]=\"maxDate\"\\n      [minDate]=\"minDate\"\\n      (monthSelected)=\"_monthSelectedInYearView($event)\"\\n      (selectedChange)=\"_goToDateInView($event, \\'month\\')\">\\n  </mat-year-view>\\n\\n  <mat-multi-year-view\\n      *ngSwitchCase=\"\\'multi-year\\'\"\\n      [(activeDate)]=\"activeDate\"\\n      [selected]=\"selected\"\\n      [dateFilter]=\"dateFilter\"\\n      [maxDate]=\"maxDate\"\\n      [minDate]=\"minDate\"\\n      (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\\n      (selectedChange)=\"_goToDateInView($event, \\'year\\')\">\\n  </mat-multi-year-view>\\n</div>\\n',host:{class:\"mat-calendar\"},exportAs:\"matCalendar\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,styles:['.mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top-width:5px;border-top-style:solid;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px}/*# sourceMappingURL=calendar.css.map */\\n']}]}],L.ctorParameters=function(){return[{type:b},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[s.MAT_DATE_FORMATS]}]},{type:l.ChangeDetectorRef}]},L.propDecorators={headerComponent:[{type:l.Input}],startAt:[{type:l.Input}],startView:[{type:l.Input}],selected:[{type:l.Input}],minDate:[{type:l.Input}],maxDate:[{type:l.Input}],dateFilter:[{type:l.Input}],dateClass:[{type:l.Input}],selectedChange:[{type:l.Output}],yearSelected:[{type:l.Output}],monthSelected:[{type:l.Output}],_userSelection:[{type:l.Output}],monthView:[{type:l.ViewChild,args:[E,{static:!1}]}],yearView:[{type:l.ViewChild,args:[M,{static:!1}]}],multiYearView:[{type:l.ViewChild,args:[D,{static:!1}]}]},L);function L(e,t,n,r){var i=this;if(this._dateAdapter=t,this._dateFormats=n,this._changeDetectorRef=r,this._moveFocusOnNextTick=!1,this.startView=\"month\",this.selectedChange=new l.EventEmitter,this.yearSelected=new l.EventEmitter,this.monthSelected=new l.EventEmitter,this._userSelection=new l.EventEmitter,this.stateChanges=new u.Subject,!this._dateAdapter)throw _(\"DateAdapter\");if(!this._dateFormats)throw _(\"MAT_DATE_FORMATS\");this._intlChanges=e.changes.subscribe(function(){r.markForCheck(),i.stateChanges.next()})}var V={transformPanel:m.trigger(\"transformPanel\",[m.state(\"void\",m.style({opacity:0,transform:\"scale(1, 0.8)\"})),m.transition(\"void => enter\",m.animate(\"120ms cubic-bezier(0, 0, 0.2, 1)\",m.style({opacity:1,transform:\"scale(1, 1)\"}))),m.transition(\"* => void\",m.animate(\"100ms linear\",m.style({opacity:0})))]),fadeInCalendar:m.trigger(\"fadeInCalendar\",[m.state(\"void\",m.style({opacity:0})),m.state(\"enter\",m.style({opacity:1})),m.transition(\"void => *\",m.animate(\"120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)\"))])},B=0,U=new l.InjectionToken(\"mat-datepicker-scroll-strategy\");function z(e){return function(){return e.scrollStrategies.reposition()}}function q(e){this._elementRef=e}var H,W={provide:U,deps:[n.Overlay],useFactory:z},G=s.mixinColor(q),Y=(H=G,h.__extends(K,H),K.prototype.ngAfterViewInit=function(){this._calendar.focusActiveCell()},K.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-datepicker-content\",template:'<mat-calendar cdkTrapFocus\\n    [id]=\"datepicker.id\"\\n    [ngClass]=\"datepicker.panelClass\"\\n    [startAt]=\"datepicker.startAt\"\\n    [startView]=\"datepicker.startView\"\\n    [minDate]=\"datepicker._minDate\"\\n    [maxDate]=\"datepicker._maxDate\"\\n    [dateFilter]=\"datepicker._dateFilter\"\\n    [headerComponent]=\"datepicker.calendarHeaderComponent\"\\n    [selected]=\"datepicker._selected\"\\n    [dateClass]=\"datepicker.dateClass\"\\n    [@fadeInCalendar]=\"\\'enter\\'\"\\n    (selectedChange)=\"datepicker.select($event)\"\\n    (yearSelected)=\"datepicker._selectYear($event)\"\\n    (monthSelected)=\"datepicker._selectMonth($event)\"\\n    (_userSelection)=\"datepicker.close()\">\\n</mat-calendar>\\n',host:{class:\"mat-datepicker-content\",\"[@transformPanel]\":'\"enter\"',\"[class.mat-datepicker-content-touch]\":\"datepicker.touchUi\"},animations:[V.transformPanel,V.fadeInCalendar],exportAs:\"matDatepickerContent\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,inputs:[\"color\"],styles:[\".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content-touch{display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}/*# sourceMappingURL=datepicker-content.css.map */\\n\"]}]}],K.ctorParameters=function(){return[{type:l.ElementRef}]},K.propDecorators={_calendar:[{type:l.ViewChild,args:[F,{static:!1}]}]},K);function K(e){return H.call(this,e)||this}var Z=(Object.defineProperty(Q.prototype,\"startAt\",{get:function(){return this._startAt||(this._datepickerInput?this._datepickerInput.value:null)},set:function(e){this._startAt=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"color\",{get:function(){return this._color||(this._datepickerInput?this._datepickerInput._getThemePalette():void 0)},set:function(e){this._color=e},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"touchUi\",{get:function(){return this._touchUi},set:function(e){this._touchUi=f.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"disabled\",{get:function(){return void 0===this._disabled&&this._datepickerInput?this._datepickerInput.disabled:!!this._disabled},set:function(e){var t=f.coerceBooleanProperty(e);t!==this._disabled&&(this._disabled=t,this._disabledChange.next(t))},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"opened\",{get:function(){return this._opened},set:function(e){e?this.open():this.close()},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"_selected\",{get:function(){return this._validSelected},set:function(e){this._validSelected=e},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"_minDate\",{get:function(){return this._datepickerInput&&this._datepickerInput.min},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"_maxDate\",{get:function(){return this._datepickerInput&&this._datepickerInput.max},enumerable:!0,configurable:!0}),Object.defineProperty(Q.prototype,\"_dateFilter\",{get:function(){return this._datepickerInput&&this._datepickerInput._dateFilter},enumerable:!0,configurable:!0}),Q.prototype.ngOnDestroy=function(){this.close(),this._inputSubscription.unsubscribe(),this._disabledChange.complete(),this._popupRef&&(this._popupRef.dispose(),this._popupComponentRef=null)},Q.prototype.select=function(e){var t=this._selected;this._selected=e,this._dateAdapter.sameDate(t,this._selected)||this._selectedChanged.next(e)},Q.prototype._selectYear=function(e){this.yearSelected.emit(e)},Q.prototype._selectMonth=function(e){this.monthSelected.emit(e)},Q.prototype._registerInput=function(e){var t=this;if(this._datepickerInput)throw Error(\"A MatDatepicker can only be associated with a single input.\");this._datepickerInput=e,this._inputSubscription=this._datepickerInput._valueChange.subscribe(function(e){return t._selected=e})},Q.prototype.open=function(){if(!this._opened&&!this.disabled){if(!this._datepickerInput)throw Error(\"Attempted to open an MatDatepicker with no associated input.\");this._document&&(this._focusedElementBeforeOpen=this._document.activeElement),this.touchUi?this._openAsDialog():this._openAsPopup(),this._opened=!0,this.openedStream.emit()}},Q.prototype.close=function(){var e=this;if(this._opened){this._popupRef&&this._popupRef.hasAttached()&&this._popupRef.detach(),this._dialogRef&&(this._dialogRef.close(),this._dialogRef=null),this._calendarPortal&&this._calendarPortal.isAttached&&this._calendarPortal.detach();var t=function(){e._opened&&(e._opened=!1,e.closedStream.emit(),e._focusedElementBeforeOpen=null)};this._focusedElementBeforeOpen&&\"function\"==typeof this._focusedElementBeforeOpen.focus?(this._focusedElementBeforeOpen.focus(),setTimeout(t)):t()}},Q.prototype._openAsDialog=function(){var e=this;this._dialogRef&&this._dialogRef.close(),this._dialogRef=this._dialog.open(Y,{direction:this._dir?this._dir.value:\"ltr\",viewContainerRef:this._viewContainerRef,panelClass:\"mat-datepicker-dialog\"}),this._dialogRef.afterClosed().subscribe(function(){return e.close()}),(this._dialogRef.componentInstance.datepicker=this)._setColor()},Q.prototype._openAsPopup=function(){var e=this;this._calendarPortal||(this._calendarPortal=new r.ComponentPortal(Y,this._viewContainerRef)),this._popupRef||this._createPopup(),this._popupRef.hasAttached()||(this._popupComponentRef=this._popupRef.attach(this._calendarPortal),(this._popupComponentRef.instance.datepicker=this)._setColor(),this._ngZone.onStable.asObservable().pipe(d.take(1)).subscribe(function(){e._popupRef.updatePosition()}))},Q.prototype._createPopup=function(){var t=this,e=new n.OverlayConfig({positionStrategy:this._createPopupPositionStrategy(),hasBackdrop:!0,backdropClass:\"mat-overlay-transparent-backdrop\",direction:this._dir,scrollStrategy:this._scrollStrategy(),panelClass:\"mat-datepicker-popup\"});this._popupRef=this._overlay.create(e),this._popupRef.overlayElement.setAttribute(\"role\",\"dialog\"),u.merge(this._popupRef.backdropClick(),this._popupRef.detachments(),this._popupRef.keydownEvents().pipe(d.filter(function(e){return e.keyCode===c.ESCAPE||t._datepickerInput&&e.altKey&&e.keyCode===c.UP_ARROW}))).subscribe(function(e){e&&e.preventDefault(),t.close()})},Q.prototype._createPopupPositionStrategy=function(){return this._overlay.position().flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin()).withTransformOriginOn(\".mat-datepicker-content\").withFlexibleDimensions(!1).withViewportMargin(8).withLockedPosition().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\"}])},Q.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},Q.prototype._setColor=function(){var e=this.color;this._popupComponentRef&&(this._popupComponentRef.instance.color=e),this._dialogRef&&(this._dialogRef.componentInstance.color=e)},Q.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-datepicker\",template:\"\",exportAs:\"matDatepicker\",changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None}]}],Q.ctorParameters=function(){return[{type:a.MatDialog},{type:n.Overlay},{type:l.NgZone},{type:l.ViewContainerRef},{type:void 0,decorators:[{type:l.Inject,args:[U]}]},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:p.Directionality,decorators:[{type:l.Optional}]},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[i.DOCUMENT]}]}]},Q.propDecorators={calendarHeaderComponent:[{type:l.Input}],startAt:[{type:l.Input}],startView:[{type:l.Input}],color:[{type:l.Input}],touchUi:[{type:l.Input}],disabled:[{type:l.Input}],yearSelected:[{type:l.Output}],monthSelected:[{type:l.Output}],panelClass:[{type:l.Input}],dateClass:[{type:l.Input}],openedStream:[{type:l.Output,args:[\"opened\"]}],closedStream:[{type:l.Output,args:[\"closed\"]}],opened:[{type:l.Input}]},Q);function Q(e,t,n,r,i,o,a,s){if(this._dialog=e,this._overlay=t,this._ngZone=n,this._viewContainerRef=r,this._dateAdapter=o,this._dir=a,this._document=s,this.startView=\"month\",this._touchUi=!1,this.yearSelected=new l.EventEmitter,this.monthSelected=new l.EventEmitter,this.openedStream=new l.EventEmitter,this.closedStream=new l.EventEmitter,this._opened=!1,this.id=\"mat-datepicker-\"+B++,this._validSelected=null,this._focusedElementBeforeOpen=null,this._inputSubscription=u.Subscription.EMPTY,this._disabledChange=new u.Subject,this._selectedChanged=new u.Subject,!this._dateAdapter)throw _(\"DateAdapter\");this._scrollStrategy=i}var X={provide:v.NG_VALUE_ACCESSOR,useExisting:l.forwardRef(function(){return ee}),multi:!0},$={provide:v.NG_VALIDATORS,useExisting:l.forwardRef(function(){return ee}),multi:!0},J=function(e,t){this.target=e,this.targetElement=t,this.value=this.target.value},ee=(Object.defineProperty(te.prototype,\"matDatepicker\",{set:function(e){var t=this;e&&(this._datepicker=e,this._datepicker._registerInput(this),this._datepickerSubscription.unsubscribe(),this._datepickerSubscription=this._datepicker._selectedChanged.subscribe(function(e){t.value=e,t._cvaOnChange(e),t._onTouched(),t.dateInput.emit(new J(t,t._elementRef.nativeElement)),t.dateChange.emit(new J(t,t._elementRef.nativeElement))}))},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"matDatepickerFilter\",{set:function(e){this._dateFilter=e,this._validatorOnChange()},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"value\",{get:function(){return this._value},set:function(e){e=this._dateAdapter.deserialize(e),this._lastValueValid=!e||this._dateAdapter.isValid(e),e=this._getValidDateOrNull(e);var t=this.value;this._value=e,this._formatValue(e),this._dateAdapter.sameDate(t,e)||this._valueChange.emit(e)},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"min\",{get:function(){return this._min},set:function(e){this._min=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._validatorOnChange()},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"max\",{get:function(){return this._max},set:function(e){this._max=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._validatorOnChange()},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"disabled\",{get:function(){return!!this._disabled},set:function(e){var t=f.coerceBooleanProperty(e),n=this._elementRef.nativeElement;this._disabled!==t&&(this._disabled=t,this._disabledChange.emit(t)),t&&n.blur&&n.blur()},enumerable:!0,configurable:!0}),te.prototype.ngOnDestroy=function(){this._datepickerSubscription.unsubscribe(),this._localeSubscription.unsubscribe(),this._valueChange.complete(),this._disabledChange.complete()},te.prototype.registerOnValidatorChange=function(e){this._validatorOnChange=e},te.prototype.validate=function(e){return this._validator?this._validator(e):null},te.prototype.getPopupConnectionElementRef=function(){return this.getConnectedOverlayOrigin()},te.prototype.getConnectedOverlayOrigin=function(){return this._formField?this._formField.getConnectedOverlayOrigin():this._elementRef},te.prototype.writeValue=function(e){this.value=e},te.prototype.registerOnChange=function(e){this._cvaOnChange=e},te.prototype.registerOnTouched=function(e){this._onTouched=e},te.prototype.setDisabledState=function(e){this.disabled=e},te.prototype._onKeydown=function(e){var t=e.altKey&&e.keyCode===c.DOWN_ARROW;this._datepicker&&t&&!this._elementRef.nativeElement.readOnly&&(this._datepicker.open(),e.preventDefault())},te.prototype._onInput=function(e){var t=this._dateAdapter.parse(e,this._dateFormats.parse.dateInput);this._lastValueValid=!t||this._dateAdapter.isValid(t),t=this._getValidDateOrNull(t),this._dateAdapter.sameDate(t,this._value)?this._validatorOnChange():(this._value=t,this._cvaOnChange(t),this._valueChange.emit(t),this.dateInput.emit(new J(this,this._elementRef.nativeElement)))},te.prototype._onChange=function(){this.dateChange.emit(new J(this,this._elementRef.nativeElement))},te.prototype._getThemePalette=function(){return this._formField?this._formField.color:void 0},te.prototype._onBlur=function(){this.value&&this._formatValue(this.value),this._onTouched()},te.prototype._formatValue=function(e){this._elementRef.nativeElement.value=e?this._dateAdapter.format(e,this._dateFormats.display.dateInput):\"\"},te.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},te.decorators=[{type:l.Directive,args:[{selector:\"input[matDatepicker]\",providers:[X,$,{provide:g.MAT_INPUT_VALUE_ACCESSOR,useExisting:te}],host:{\"[attr.aria-haspopup]\":'_datepicker ? \"dialog\" : null',\"[attr.aria-owns]\":\"(_datepicker?.opened && _datepicker.id) || null\",\"[attr.min]\":\"min ? _dateAdapter.toIso8601(min) : null\",\"[attr.max]\":\"max ? _dateAdapter.toIso8601(max) : null\",\"[disabled]\":\"disabled\",\"(input)\":\"_onInput($event.target.value)\",\"(change)\":\"_onChange()\",\"(blur)\":\"_onBlur()\",\"(keydown)\":\"_onKeydown($event)\"},exportAs:\"matDatepickerInput\"}]}],te.ctorParameters=function(){return[{type:l.ElementRef},{type:s.DateAdapter,decorators:[{type:l.Optional}]},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[s.MAT_DATE_FORMATS]}]},{type:y.MatFormField,decorators:[{type:l.Optional}]}]},te.propDecorators={matDatepicker:[{type:l.Input}],matDatepickerFilter:[{type:l.Input}],value:[{type:l.Input}],min:[{type:l.Input}],max:[{type:l.Input}],disabled:[{type:l.Input}],dateChange:[{type:l.Output}],dateInput:[{type:l.Output}]},te);function te(e,t,n,r){var i=this;if(this._elementRef=e,this._dateAdapter=t,this._dateFormats=n,this._formField=r,this.dateChange=new l.EventEmitter,this.dateInput=new l.EventEmitter,this._valueChange=new l.EventEmitter,this._disabledChange=new l.EventEmitter,this._onTouched=function(){},this._cvaOnChange=function(){},this._validatorOnChange=function(){},this._datepickerSubscription=u.Subscription.EMPTY,this._localeSubscription=u.Subscription.EMPTY,this._parseValidator=function(){return i._lastValueValid?null:{matDatepickerParse:{text:i._elementRef.nativeElement.value}}},this._minValidator=function(e){var t=i._getValidDateOrNull(i._dateAdapter.deserialize(e.value));return!i.min||!t||i._dateAdapter.compareDate(i.min,t)<=0?null:{matDatepickerMin:{min:i.min,actual:t}}},this._maxValidator=function(e){var t=i._getValidDateOrNull(i._dateAdapter.deserialize(e.value));return!i.max||!t||0<=i._dateAdapter.compareDate(i.max,t)?null:{matDatepickerMax:{max:i.max,actual:t}}},this._filterValidator=function(e){var t=i._getValidDateOrNull(i._dateAdapter.deserialize(e.value));return i._dateFilter&&t&&!i._dateFilter(t)?{matDatepickerFilter:!0}:null},this._validator=v.Validators.compose([this._parseValidator,this._minValidator,this._maxValidator,this._filterValidator]),this._lastValueValid=!1,!this._dateAdapter)throw _(\"DateAdapter\");if(!this._dateFormats)throw _(\"MAT_DATE_FORMATS\");this._localeSubscription=t.localeChanges.subscribe(function(){i.value=i.value})}var ne=(re.decorators=[{type:l.Directive,args:[{selector:\"[matDatepickerToggleIcon]\"}]}],re);function re(){}var ie=(Object.defineProperty(oe.prototype,\"disabled\",{get:function(){return void 0===this._disabled&&this.datepicker?this.datepicker.disabled:!!this._disabled},set:function(e){this._disabled=f.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),oe.prototype.ngOnChanges=function(e){e.datepicker&&this._watchStateChanges()},oe.prototype.ngOnDestroy=function(){this._stateChanges.unsubscribe()},oe.prototype.ngAfterContentInit=function(){this._watchStateChanges()},oe.prototype._open=function(e){this.datepicker&&!this.disabled&&(this.datepicker.open(),e.stopPropagation())},oe.prototype._watchStateChanges=function(){var e=this,t=this.datepicker?this.datepicker._disabledChange:u.of(),n=this.datepicker&&this.datepicker._datepickerInput?this.datepicker._datepickerInput._disabledChange:u.of(),r=this.datepicker?u.merge(this.datepicker.openedStream,this.datepicker.closedStream):u.of();this._stateChanges.unsubscribe(),this._stateChanges=u.merge(this._intl.changes,t,n,r).subscribe(function(){return e._changeDetectorRef.markForCheck()})},oe.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-datepicker-toggle\",template:'<button\\n  #button\\n  mat-icon-button\\n  type=\"button\"\\n  [attr.aria-haspopup]=\"datepicker ? \\'dialog\\' : null\"\\n  [attr.aria-label]=\"_intl.openCalendarLabel\"\\n  [attr.tabindex]=\"disabled ? -1 : tabIndex\"\\n  [disabled]=\"disabled\"\\n  [disableRipple]=\"disableRipple\"\\n  (click)=\"_open($event)\">\\n\\n  <svg\\n    *ngIf=\"!_customIcon\"\\n    class=\"mat-datepicker-toggle-default-icon\"\\n    viewBox=\"0 0 24 24\"\\n    width=\"24px\"\\n    height=\"24px\"\\n    fill=\"currentColor\"\\n    focusable=\"false\">\\n    <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\\n  </svg>\\n\\n  <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\\n</button>\\n',host:{class:\"mat-datepicker-toggle\",\"[attr.tabindex]\":\"-1\",\"[class.mat-datepicker-toggle-active]\":\"datepicker && datepicker.opened\",\"[class.mat-accent]\":'datepicker && datepicker.color === \"accent\"',\"[class.mat-warn]\":'datepicker && datepicker.color === \"warn\"',\"(focus)\":\"_button.focus()\"},exportAs:\"matDatepickerToggle\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,styles:[\".mat-form-field-appearance-legacy .mat-form-field-prefix .mat-datepicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-datepicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-datepicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-datepicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-datepicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-datepicker-toggle-default-icon{margin:auto}/*# sourceMappingURL=datepicker-toggle.css.map */\\n\"]}]}],oe.ctorParameters=function(){return[{type:b},{type:l.ChangeDetectorRef},{type:String,decorators:[{type:l.Attribute,args:[\"tabindex\"]}]}]},oe.propDecorators={datepicker:[{type:l.Input,args:[\"for\"]}],tabIndex:[{type:l.Input}],disabled:[{type:l.Input}],disableRipple:[{type:l.Input}],_customIcon:[{type:l.ContentChild,args:[ne,{static:!1}]}],_button:[{type:l.ViewChild,args:[\"button\",{static:!1}]}]},oe);function oe(e,t,n){this._intl=e,this._changeDetectorRef=t,this._stateChanges=u.Subscription.EMPTY;var r=Number(n);this.tabIndex=r||0===r?r:null}var ae=(se.decorators=[{type:l.NgModule,args:[{imports:[i.CommonModule,o.MatButtonModule,a.MatDialogModule,n.OverlayModule,t.A11yModule,r.PortalModule],exports:[F,C,Z,Y,ee,ie,ne,E,M,D,N],declarations:[F,C,Z,Y,ee,ie,ne,E,M,D,N],providers:[b,W],entryComponents:[Y,N]}]}],se);function se(){}e.MatMultiYearView=D,e.yearsPerPage=k,e.yearsPerRow=4,e.MatDatepickerModule=ae,e.MatCalendarHeader=N,e.MatCalendar=F,e.MatCalendarCell=x,e.MatCalendarBody=C,e.MAT_DATEPICKER_SCROLL_STRATEGY=U,e.MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY=z,e.MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER=W,e.MatDatepickerContent=Y,e.MatDatepicker=Z,e.matDatepickerAnimations=V,e.MAT_DATEPICKER_VALUE_ACCESSOR=X,e.MAT_DATEPICKER_VALIDATORS=$,e.MatDatepickerInputEvent=J,e.MatDatepickerInput=ee,e.MatDatepickerIntl=b,e.MatDatepickerToggleIcon=ne,e.MatDatepickerToggle=ie,e.MatMonthView=E,e.MatYearView=M,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/bidi\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/keycodes\")):System.registerDynamic(\"npm:@angular/material/bundles/material-dialog.umd.js\",[\"@angular/cdk/overlay\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/bidi\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\",\"@angular/cdk/a11y\",\"@angular/cdk/keycodes\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/bidi\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/keycodes\"))})}(0,function(e,n,s,t,l,r,a,o,u,c,i,p,d){\"use strict\";var h=function(){this.role=\"dialog\",this.panelClass=\"\",this.hasBackdrop=!0,this.backdropClass=\"\",this.disableClose=!1,this.width=\"\",this.height=\"\",this.maxWidth=\"80vw\",this.data=null,this.ariaDescribedBy=null,this.ariaLabelledBy=null,this.ariaLabel=null,this.autoFocus=!0,this.restoreFocus=!0,this.closeOnNavigation=!0},f=[i.state(\"void, exit\",i.style({opacity:0,transform:\"scale(0.7)\"})),i.state(\"enter\",i.style({transform:\"none\"})),i.transition(\"* => enter\",i.animate(\"150ms cubic-bezier(0, 0, 0.2, 1)\",i.style({transform:\"none\",opacity:1}))),i.transition(\"* => void, * => exit\",i.animate(\"75ms cubic-bezier(0.4, 0.0, 0.2, 1)\",i.style({opacity:0})))],m={dialogContainer:i.trigger(\"dialogContainer\",f),slideDialog:i.trigger(\"slideDialog\",f)};function v(){throw Error(\"Attempting to attach dialog content after content is already attached\")}var y,g=(y=s.BasePortalOutlet,a.__extends(_,y),_.prototype.attachComponentPortal=function(e){return this._portalOutlet.hasAttached()&&v(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachComponentPortal(e)},_.prototype.attachTemplatePortal=function(e){return this._portalOutlet.hasAttached()&&v(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachTemplatePortal(e)},_.prototype._trapFocus=function(){var e=this._elementRef.nativeElement;if(this._focusTrap||(this._focusTrap=this._focusTrapFactory.create(e)),this._config.autoFocus)this._focusTrap.focusInitialElementWhenReady();else{var t=this._document.activeElement;t===e||e.contains(t)||e.focus()}},_.prototype._restoreFocus=function(){var e=this._elementFocusedBeforeDialogWasOpened;this._config.restoreFocus&&e&&\"function\"==typeof e.focus&&e.focus(),this._focusTrap&&this._focusTrap.destroy()},_.prototype._savePreviouslyFocusedElement=function(){var e=this;this._document&&(this._elementFocusedBeforeDialogWasOpened=this._document.activeElement,this._elementRef.nativeElement.focus&&Promise.resolve().then(function(){return e._elementRef.nativeElement.focus()}))},_.prototype._onAnimationDone=function(e){\"enter\"===e.toState?this._trapFocus():\"exit\"===e.toState&&this._restoreFocus(),this._animationStateChanged.emit(e)},_.prototype._onAnimationStart=function(e){this._animationStateChanged.emit(e)},_.prototype._startExitAnimation=function(){this._state=\"exit\",this._changeDetectorRef.markForCheck()},_.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-dialog-container\",template:\"<ng-template cdkPortalOutlet></ng-template>\\n\",encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.Default,animations:[m.dialogContainer],host:{class:\"mat-dialog-container\",tabindex:\"-1\",\"aria-modal\":\"true\",\"[attr.id]\":\"_id\",\"[attr.role]\":\"_config.role\",\"[attr.aria-labelledby]\":\"_config.ariaLabel ? null : _ariaLabelledBy\",\"[attr.aria-label]\":\"_config.ariaLabel\",\"[attr.aria-describedby]\":\"_config.ariaDescribedBy || null\",\"[@dialogContainer]\":\"_state\",\"(@dialogContainer.start)\":\"_onAnimationStart($event)\",\"(@dialogContainer.done)\":\"_onAnimationDone($event)\"},styles:[\".mat-dialog-container{display:block;padding:24px;border-radius:4px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%;min-height:inherit;max-height:inherit}@media(-ms-high-contrast: active){.mat-dialog-container{outline:solid 1px}}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:8px 0;display:flex;flex-wrap:wrap;min-height:52px;align-items:center;margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button-base+.mat-button-base{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button-base+.mat-button-base{margin-left:0;margin-right:8px}/*# sourceMappingURL=dialog.css.map */\\n\"]}]}],_.ctorParameters=function(){return[{type:l.ElementRef},{type:p.FocusTrapFactory},{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[t.DOCUMENT]}]},{type:h}]},_.propDecorators={_portalOutlet:[{type:l.ViewChild,args:[s.CdkPortalOutlet,{static:!0}]}]},_);function _(e,t,n,r,i){var o=y.call(this)||this;return o._elementRef=e,o._focusTrapFactory=t,o._changeDetectorRef=n,o._document=r,o._config=i,o._elementFocusedBeforeDialogWasOpened=null,o._state=\"enter\",o._animationStateChanged=new l.EventEmitter,o._ariaLabelledBy=i.ariaLabelledBy||null,o}var b=0,w=(x.prototype.close=function(t){var n=this;this._result=t,this._containerInstance._animationStateChanged.pipe(c.filter(function(e){return\"start\"===e.phaseName}),c.take(1)).subscribe(function(e){n._beforeClosed.next(t),n._beforeClosed.complete(),n._state=2,n._overlayRef.detachBackdrop(),n._closeFallbackTimeout=setTimeout(function(){n._overlayRef.dispose()},e.totalTime+100)}),this._containerInstance._startExitAnimation(),this._state=1},x.prototype.afterOpened=function(){return this._afterOpened.asObservable()},x.prototype.afterClosed=function(){return this._afterClosed.asObservable()},x.prototype.beforeClosed=function(){return this._beforeClosed.asObservable()},x.prototype.backdropClick=function(){return this._overlayRef.backdropClick()},x.prototype.keydownEvents=function(){return this._overlayRef.keydownEvents()},x.prototype.updatePosition=function(e){var t=this._getPositionStrategy();return e&&(e.left||e.right)?e.left?t.left(e.left):t.right(e.right):t.centerHorizontally(),e&&(e.top||e.bottom)?e.top?t.top(e.top):t.bottom(e.bottom):t.centerVertically(),this._overlayRef.updatePosition(),this},x.prototype.updateSize=function(e,t){return void 0===e&&(e=\"\"),void 0===t&&(t=\"\"),this._getPositionStrategy().width(e).height(t),this._overlayRef.updatePosition(),this},x.prototype.addPanelClass=function(e){return this._overlayRef.addPanelClass(e),this},x.prototype.removePanelClass=function(e){return this._overlayRef.removePanelClass(e),this},x.prototype.afterOpen=function(){return this.afterOpened()},x.prototype.beforeClose=function(){return this.beforeClosed()},x.prototype.getState=function(){return this._state},x.prototype._getPositionStrategy=function(){return this._overlayRef.getConfig().positionStrategy},x);function x(e,t,n,r){var i=this;void 0===r&&(r=\"mat-dialog-\"+b++),this._overlayRef=e,this._containerInstance=t,this.id=r,this.disableClose=this._containerInstance._config.disableClose,this._afterOpened=new u.Subject,this._afterClosed=new u.Subject,this._beforeClosed=new u.Subject,this._state=0,t._id=r,t._animationStateChanged.pipe(c.filter(function(e){return\"done\"===e.phaseName&&\"enter\"===e.toState}),c.take(1)).subscribe(function(){i._afterOpened.next(),i._afterOpened.complete()}),t._animationStateChanged.pipe(c.filter(function(e){return\"done\"===e.phaseName&&\"exit\"===e.toState}),c.take(1)).subscribe(function(){clearTimeout(i._closeFallbackTimeout),i._overlayRef.dispose()}),e.detachments().subscribe(function(){i._beforeClosed.next(i._result),i._beforeClosed.complete(),i._afterClosed.next(i._result),i._afterClosed.complete(),i.componentInstance=null,i._overlayRef.dispose()}),e.keydownEvents().pipe(c.filter(function(e){return e.keyCode===d.ESCAPE&&!i.disableClose&&!d.hasModifierKey(e)})).subscribe(function(e){e.preventDefault(),i.close()})}var C=new l.InjectionToken(\"MatDialogData\"),S=new l.InjectionToken(\"mat-dialog-default-options\"),E=new l.InjectionToken(\"mat-dialog-scroll-strategy\");function O(e){return function(){return e.scrollStrategies.block()}}var k={provide:E,deps:[n.Overlay],useFactory:O},D=(Object.defineProperty(T.prototype,\"openDialogs\",{get:function(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"afterOpened\",{get:function(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"afterOpen\",{get:function(){return this.afterOpened},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"_afterAllClosed\",{get:function(){var e=this._parentDialog;return e?e._afterAllClosed:this._afterAllClosedAtThisLevel},enumerable:!0,configurable:!0}),T.prototype.open=function(e,t){var n=this;if((t=function(e,t){return a.__assign({},t,e)}(t,this._defaultOptions||new h)).id&&this.getDialogById(t.id))throw Error('Dialog with id \"'+t.id+'\" exists already. The dialog id must be unique.');var r=this._createOverlay(t),i=this._attachDialogContainer(r,t),o=this._attachDialogContent(e,i,r,t);return this.openDialogs.length||this._hideNonDialogContentFromAssistiveTechnology(),this.openDialogs.push(o),o.afterClosed().subscribe(function(){return n._removeOpenDialog(o)}),this.afterOpened.next(o),o},T.prototype.closeAll=function(){this._closeDialogs(this.openDialogs)},T.prototype.getDialogById=function(t){return this.openDialogs.find(function(e){return e.id===t})},T.prototype.ngOnDestroy=function(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()},T.prototype._createOverlay=function(e){var t=this._getOverlayConfig(e);return this._overlay.create(t)},T.prototype._getOverlayConfig=function(e){var t=new n.OverlayConfig({positionStrategy:this._overlay.position().global(),scrollStrategy:e.scrollStrategy||this._scrollStrategy(),panelClass:e.panelClass,hasBackdrop:e.hasBackdrop,direction:e.direction,minWidth:e.minWidth,minHeight:e.minHeight,maxWidth:e.maxWidth,maxHeight:e.maxHeight,disposeOnNavigation:e.closeOnNavigation});return e.backdropClass&&(t.backdropClass=e.backdropClass),t},T.prototype._attachDialogContainer=function(e,t){var n=t&&t.viewContainerRef&&t.viewContainerRef.injector,r=new s.PortalInjector(n||this._injector,new WeakMap([[h,t]])),i=new s.ComponentPortal(g,t.viewContainerRef,r,t.componentFactoryResolver);return e.attach(i).instance},T.prototype._attachDialogContent=function(e,t,n,r){var i=new w(n,t,this._location,r.id);if(r.hasBackdrop&&n.backdropClick().subscribe(function(){i.disableClose||i.close()}),e instanceof l.TemplateRef)t.attachTemplatePortal(new s.TemplatePortal(e,null,{$implicit:r.data,dialogRef:i}));else{var o=this._createInjector(r,i,t),a=t.attachComponentPortal(new s.ComponentPortal(e,void 0,o));i.componentInstance=a.instance}return i.updateSize(r.width,r.height).updatePosition(r.position),i},T.prototype._createInjector=function(e,t,n){var r=e&&e.viewContainerRef&&e.viewContainerRef.injector,i=new WeakMap([[g,n],[C,e.data],[w,t]]);return!e.direction||r&&r.get(o.Directionality,null)||i.set(o.Directionality,{value:e.direction,change:u.of()}),new s.PortalInjector(r||this._injector,i)},T.prototype._removeOpenDialog=function(e){var t=this.openDialogs.indexOf(e);-1<t&&(this.openDialogs.splice(t,1),this.openDialogs.length||(this._ariaHiddenElements.forEach(function(e,t){e?t.setAttribute(\"aria-hidden\",e):t.removeAttribute(\"aria-hidden\")}),this._ariaHiddenElements.clear(),this._afterAllClosed.next()))},T.prototype._hideNonDialogContentFromAssistiveTechnology=function(){var e=this._overlayContainer.getContainerElement();if(e.parentElement)for(var t=e.parentElement.children,n=t.length-1;-1<n;n--){var r=t[n];r===e||\"SCRIPT\"===r.nodeName||\"STYLE\"===r.nodeName||r.hasAttribute(\"aria-live\")||(this._ariaHiddenElements.set(r,r.getAttribute(\"aria-hidden\")),r.setAttribute(\"aria-hidden\",\"true\"))}},T.prototype._closeDialogs=function(e){for(var t=e.length;t--;)e[t].close()},T.decorators=[{type:l.Injectable}],T.ctorParameters=function(){return[{type:n.Overlay},{type:l.Injector},{type:t.Location,decorators:[{type:l.Optional}]},{type:h,decorators:[{type:l.Optional},{type:l.Inject,args:[S]}]},{type:void 0,decorators:[{type:l.Inject,args:[E]}]},{type:T,decorators:[{type:l.Optional},{type:l.SkipSelf}]},{type:n.OverlayContainer}]},T);function T(e,t,n,r,i,o,a){var s=this;this._overlay=e,this._injector=t,this._location=n,this._defaultOptions=r,this._parentDialog=o,this._overlayContainer=a,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new u.Subject,this._afterOpenedAtThisLevel=new u.Subject,this._ariaHiddenElements=new Map,this.afterAllClosed=u.defer(function(){return s.openDialogs.length?s._afterAllClosed:s._afterAllClosed.pipe(c.startWith(void 0))}),this._scrollStrategy=i}var I=0,P=(A.prototype.ngOnInit=function(){this.dialogRef||(this.dialogRef=V(this._elementRef,this._dialog.openDialogs))},A.prototype.ngOnChanges=function(e){var t=e._matDialogClose||e._matDialogCloseResult;t&&(this.dialogResult=t.currentValue)},A.decorators=[{type:l.Directive,args:[{selector:\"[mat-dialog-close], [matDialogClose]\",exportAs:\"matDialogClose\",host:{\"(click)\":\"dialogRef.close(dialogResult)\",\"[attr.aria-label]\":\"ariaLabel || null\",\"[attr.type]\":\"type\"}}]}],A.ctorParameters=function(){return[{type:w,decorators:[{type:l.Optional}]},{type:l.ElementRef},{type:D}]},A.propDecorators={ariaLabel:[{type:l.Input,args:[\"aria-label\"]}],type:[{type:l.Input}],dialogResult:[{type:l.Input,args:[\"mat-dialog-close\"]}],_matDialogClose:[{type:l.Input,args:[\"matDialogClose\"]}]},A);function A(e,t,n){this.dialogRef=e,this._elementRef=t,this._dialog=n,this.type=\"button\"}var M=(R.prototype.ngOnInit=function(){var t=this;this._dialogRef||(this._dialogRef=V(this._elementRef,this._dialog.openDialogs)),this._dialogRef&&Promise.resolve().then(function(){var e=t._dialogRef._containerInstance;e&&!e._ariaLabelledBy&&(e._ariaLabelledBy=t.id)})},R.decorators=[{type:l.Directive,args:[{selector:\"[mat-dialog-title], [matDialogTitle]\",exportAs:\"matDialogTitle\",host:{class:\"mat-dialog-title\",\"[id]\":\"id\"}}]}],R.ctorParameters=function(){return[{type:w,decorators:[{type:l.Optional}]},{type:l.ElementRef},{type:D}]},R.propDecorators={id:[{type:l.Input}]},R);function R(e,t,n){this._dialogRef=e,this._elementRef=t,this._dialog=n,this.id=\"mat-dialog-title-\"+I++}var N=(j.decorators=[{type:l.Directive,args:[{selector:\"[mat-dialog-content], mat-dialog-content, [matDialogContent]\",host:{class:\"mat-dialog-content\"}}]}],j);function j(){}var F=(L.decorators=[{type:l.Directive,args:[{selector:\"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]\",host:{class:\"mat-dialog-actions\"}}]}],L);function L(){}function V(e,t){for(var n=e.nativeElement.parentElement;n&&!n.classList.contains(\"mat-dialog-container\");)n=n.parentElement;return n?t.find(function(e){return e.id===n.id}):null}var B=(U.decorators=[{type:l.NgModule,args:[{imports:[t.CommonModule,n.OverlayModule,s.PortalModule,r.MatCommonModule],exports:[g,P,M,N,F,r.MatCommonModule],declarations:[g,P,M,F,N],providers:[D,k],entryComponents:[g]}]}],U);function U(){}e.MatDialogModule=B,e.MAT_DIALOG_DATA=C,e.MAT_DIALOG_DEFAULT_OPTIONS=S,e.MAT_DIALOG_SCROLL_STRATEGY=E,e.MAT_DIALOG_SCROLL_STRATEGY_FACTORY=function(e){return function(){return e.scrollStrategies.block()}},e.MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY=O,e.MAT_DIALOG_SCROLL_STRATEGY_PROVIDER=k,e.MatDialog=D,e.throwMatDialogContentAlreadyAttachedError=v,e.MatDialogContainer=g,e.MatDialogClose=P,e.MatDialogTitle=M,e.MatDialogContent=N,e.MatDialogActions=F,e.MatDialogConfig=h,e.MatDialogRef=w,e.matDialogAnimations=m,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/cdk/collections\"),require(\"@angular/cdk/coercion\"),require(\"rxjs\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-accordion.umd.js\",[\"@angular/core\",\"@angular/cdk/collections\",\"@angular/cdk/coercion\",\"rxjs\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/cdk/collections\"),e(\"@angular/cdk/coercion\"),e(\"rxjs\"))})}(0,function(e,i,t,n,o){\"use strict\";var r=0,a=(Object.defineProperty(s.prototype,\"multi\",{get:function(){return this._multi},set:function(e){this._multi=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),s.prototype.openAll=function(){this._openCloseAll(!0)},s.prototype.closeAll=function(){this._openCloseAll(!1)},s.prototype.ngOnChanges=function(e){this._stateChanges.next(e)},s.prototype.ngOnDestroy=function(){this._stateChanges.complete()},s.prototype._openCloseAll=function(e){this.multi&&this._openCloseAllActions.next(e)},s.decorators=[{type:i.Directive,args:[{selector:\"cdk-accordion, [cdkAccordion]\",exportAs:\"cdkAccordion\"}]}],s.propDecorators={multi:[{type:i.Input}]},s);function s(){this._stateChanges=new o.Subject,this._openCloseAllActions=new o.Subject,this.id=\"cdk-accordion-\"+r++,this._multi=!1}var l=0,u=(Object.defineProperty(c.prototype,\"expanded\",{get:function(){return this._expanded},set:function(e){if(e=n.coerceBooleanProperty(e),this._expanded!==e){if(this._expanded=e,this.expandedChange.emit(e),e){this.opened.emit();var t=this.accordion?this.accordion.id:this.id;this._expansionDispatcher.notify(this.id,t)}else this.closed.emit();this._changeDetectorRef.markForCheck()}},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),c.prototype.ngOnDestroy=function(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()},c.prototype.toggle=function(){this.disabled||(this.expanded=!this.expanded)},c.prototype.close=function(){this.disabled||(this.expanded=!1)},c.prototype.open=function(){this.disabled||(this.expanded=!0)},c.prototype._subscribeToOpenCloseAllActions=function(){var t=this;return this.accordion._openCloseAllActions.subscribe(function(e){t.disabled||(t.expanded=e)})},c.decorators=[{type:i.Directive,args:[{selector:\"cdk-accordion-item, [cdkAccordionItem]\",exportAs:\"cdkAccordionItem\",providers:[{provide:a,useValue:void 0}]}]}],c.ctorParameters=function(){return[{type:a,decorators:[{type:i.Optional},{type:i.SkipSelf}]},{type:i.ChangeDetectorRef},{type:t.UniqueSelectionDispatcher}]},c.propDecorators={closed:[{type:i.Output}],opened:[{type:i.Output}],destroyed:[{type:i.Output}],expandedChange:[{type:i.Output}],expanded:[{type:i.Input}],disabled:[{type:i.Input}]},c);function c(e,t,n){var r=this;this.accordion=e,this._changeDetectorRef=t,this._expansionDispatcher=n,this._openCloseAllSubscription=o.Subscription.EMPTY,this.closed=new i.EventEmitter,this.opened=new i.EventEmitter,this.destroyed=new i.EventEmitter,this.expandedChange=new i.EventEmitter,this.id=\"cdk-accordion-child-\"+l++,this._expanded=!1,this._disabled=!1,this._removeUniqueSelectionListener=function(){},this._removeUniqueSelectionListener=n.listen(function(e,t){r.accordion&&!r.accordion.multi&&r.accordion.id===t&&r.id!==e&&(r.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}var p=(d.decorators=[{type:i.NgModule,args:[{exports:[a,u],declarations:[a,u]}]}],d);function d(){}e.CdkAccordionItem=u,e.CdkAccordion=a,e.CdkAccordionModule=p,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/accordion\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/keycodes\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\"),require(\"@angular/cdk/collections\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-expansion.umd.js\",[\"@angular/cdk/accordion\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/core\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/cdk/a11y\",\"@angular/cdk/keycodes\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\",\"@angular/cdk/collections\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/accordion\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/keycodes\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"),e(\"@angular/cdk/collections\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,n,r,l,i,o,a,s,u,c,p,d,h){\"use strict\";var f=new l.InjectionToken(\"MAT_ACCORDION\"),m=\"225ms cubic-bezier(0.4,0.0,0.2,1)\",v={indicatorRotate:p.trigger(\"indicatorRotate\",[p.state(\"collapsed, void\",p.style({transform:\"rotate(0deg)\"})),p.state(\"expanded\",p.style({transform:\"rotate(180deg)\"})),p.transition(\"expanded <=> collapsed, void => collapsed\",p.animate(m))]),expansionHeaderHeight:p.trigger(\"expansionHeight\",[p.state(\"collapsed, void\",p.style({height:\"{{collapsedHeight}}\"}),{params:{collapsedHeight:\"48px\"}}),p.state(\"expanded\",p.style({height:\"{{expandedHeight}}\"}),{params:{expandedHeight:\"64px\"}}),p.transition(\"expanded <=> collapsed, void => collapsed\",p.group([p.query(\"@indicatorRotate\",p.animateChild(),{optional:!0}),p.animate(m)]))]),bodyExpansion:p.trigger(\"bodyExpansion\",[p.state(\"collapsed, void\",p.style({height:\"0px\",visibility:\"hidden\"})),p.state(\"expanded\",p.style({height:\"*\",visibility:\"visible\"})),p.transition(\"expanded <=> collapsed, void => collapsed\",p.animate(m))])},y=(g.decorators=[{type:l.Directive,args:[{selector:\"ng-template[matExpansionPanelContent]\"}]}],g.ctorParameters=function(){return[{type:l.TemplateRef}]},g);function g(e){this._template=e}var _,b=0,w=new l.InjectionToken(\"MAT_EXPANSION_PANEL_DEFAULT_OPTIONS\"),x=(_=t.CdkAccordionItem,i.__extends(C,_),Object.defineProperty(C.prototype,\"hideToggle\",{get:function(){return this._hideToggle||this.accordion&&this.accordion.hideToggle},set:function(e){this._hideToggle=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"togglePosition\",{get:function(){return this._togglePosition||this.accordion&&this.accordion.togglePosition},set:function(e){this._togglePosition=e},enumerable:!0,configurable:!0}),C.prototype._hasSpacing=function(){return!!this.accordion&&\"default\"===(this.expanded?this.accordion.displayMode:this._getExpandedState())},C.prototype._getExpandedState=function(){return this.expanded?\"expanded\":\"collapsed\"},C.prototype.ngAfterContentInit=function(){var e=this;this._lazyContent&&this.opened.pipe(c.startWith(null),c.filter(function(){return e.expanded&&!e._portal}),c.take(1)).subscribe(function(){e._portal=new n.TemplatePortal(e._lazyContent._template,e._viewContainerRef)})},C.prototype.ngOnChanges=function(e){this._inputChanges.next(e)},C.prototype.ngOnDestroy=function(){_.prototype.ngOnDestroy.call(this),this._bodyAnimationDone.complete(),this._inputChanges.complete()},C.prototype._containsFocus=function(){if(this._body){var e=this._document.activeElement,t=this._body.nativeElement;return e===t||t.contains(e)}return!1},C.decorators=[{type:l.Component,args:[{moduleId:module.id,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:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,inputs:[\"disabled\",\"expanded\"],outputs:[\"opened\",\"closed\",\"expandedChange\"],animations:[v.bodyExpansion],providers:[{provide:f,useValue:void 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)}.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}@media(-ms-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{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base{margin-left:0;margin-right:8px}/*# sourceMappingURL=expansion-panel.css.map */\\n\"]}]}],C.ctorParameters=function(){return[{type:void 0,decorators:[{type:l.Optional},{type:l.SkipSelf},{type:l.Inject,args:[f]}]},{type:l.ChangeDetectorRef},{type:d.UniqueSelectionDispatcher},{type:l.ViewContainerRef},{type:void 0,decorators:[{type:l.Inject,args:[r.DOCUMENT]}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[h.ANIMATION_MODULE_TYPE]}]},{type:void 0,decorators:[{type:l.Inject,args:[w]},{type:l.Optional}]}]},C.propDecorators={hideToggle:[{type:l.Input}],togglePosition:[{type:l.Input}],afterExpand:[{type:l.Output}],afterCollapse:[{type:l.Output}],_lazyContent:[{type:l.ContentChild,args:[y,{static:!1}]}],_body:[{type:l.ViewChild,args:[\"body\",{static:!1}]}]},C);function C(e,t,n,r,i,o,a){var s=_.call(this,e,t,n)||this;return s._viewContainerRef=r,s._animationMode=o,s._hideToggle=!1,s.afterExpand=new l.EventEmitter,s.afterCollapse=new l.EventEmitter,s._inputChanges=new u.Subject,s._headerId=\"mat-expansion-panel-header-\"+b++,s._bodyAnimationDone=new u.Subject,s.accordion=e,s._document=i,s._bodyAnimationDone.pipe(c.distinctUntilChanged(function(e,t){return e.fromState===t.fromState&&e.toState===t.toState})).subscribe(function(e){\"void\"!==e.fromState&&(\"expanded\"===e.toState?s.afterExpand.emit():\"collapsed\"===e.toState&&s.afterCollapse.emit())}),a&&(s.hideToggle=a.hideToggle),s}var S=(E.decorators=[{type:l.Directive,args:[{selector:\"mat-action-row\",host:{class:\"mat-action-row\"}}]}],E);function E(){}var O=(k.prototype._animationStarted=function(){this._animationsDisabled=!1},Object.defineProperty(k.prototype,\"disabled\",{get:function(){return this.panel.disabled},enumerable:!0,configurable:!0}),k.prototype._toggle=function(){this.panel.toggle()},k.prototype._isExpanded=function(){return this.panel.expanded},k.prototype._getExpandedState=function(){return this.panel._getExpandedState()},k.prototype._getPanelId=function(){return this.panel.id},k.prototype._getTogglePosition=function(){return this.panel.togglePosition},k.prototype._showToggle=function(){return!this.panel.hideToggle&&!this.panel.disabled},k.prototype._keydown=function(e){switch(e.keyCode){case s.SPACE:case s.ENTER:s.hasModifierKey(e)||(e.preventDefault(),this._toggle());break;default:return void(this.panel.accordion&&this.panel.accordion._handleHeaderKeydown(e))}},k.prototype.focus=function(e,t){void 0===e&&(e=\"program\"),this._focusMonitor.focusVia(this._element,e,t)},k.prototype.ngOnDestroy=function(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element)},k.decorators=[{type:l.Component,args:[{moduleId:module.id,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:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,animations:[v.indicatorRotate,v.expansionHeaderHeight],host:{class:\"mat-expansion-panel-header\",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'\",\"(click)\":\"_toggle()\",\"(keydown)\":\"_keydown($event)\",\"[@.disabled]\":\"_animationsDisabled\",\"(@expansionHeight.start)\":\"_animationStarted()\",\"[@expansionHeight]\":\"{\\n        value: _getExpandedState(),\\n        params: {\\n          collapsedHeight: collapsedHeight,\\n          expandedHeight: expandedHeight\\n        }\\n    }\"},styles:['.mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit}.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}/*# sourceMappingURL=expansion-panel-header.css.map */\\n']}]}],k.ctorParameters=function(){return[{type:x,decorators:[{type:l.Host}]},{type:l.ElementRef},{type:a.FocusMonitor},{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Inject,args:[w]},{type:l.Optional}]}]},k.propDecorators={expandedHeight:[{type:l.Input}],collapsedHeight:[{type:l.Input}]},k);function k(t,e,n,r,i){var o=this;this.panel=t,this._element=e,this._focusMonitor=n,this._changeDetectorRef=r,this._parentChangeSubscription=u.Subscription.EMPTY,this._animationsDisabled=!0;var a=t.accordion?t.accordion._stateChanges.pipe(c.filter(function(e){return!(!e.hideToggle&&!e.togglePosition)})):u.EMPTY;this._parentChangeSubscription=u.merge(t.opened,t.closed,a,t._inputChanges.pipe(c.filter(function(e){return!!(e.hideToggle||e.disabled||e.togglePosition)}))).subscribe(function(){return o._changeDetectorRef.markForCheck()}),t.closed.pipe(c.filter(function(){return t._containsFocus()})).subscribe(function(){return n.focusVia(e,\"program\")}),n.monitor(e).subscribe(function(e){e&&t.accordion&&t.accordion._handleHeaderFocus(o)}),i&&(this.expandedHeight=i.expandedHeight,this.collapsedHeight=i.collapsedHeight)}var D=(T.decorators=[{type:l.Directive,args:[{selector:\"mat-panel-description\",host:{class:\"mat-expansion-panel-header-description\"}}]}],T);function T(){}var I=(P.decorators=[{type:l.Directive,args:[{selector:\"mat-panel-title\",host:{class:\"mat-expansion-panel-header-title\"}}]}],P);function P(){}var A,M=(A=t.CdkAccordion,i.__extends(R,A),Object.defineProperty(R.prototype,\"hideToggle\",{get:function(){return this._hideToggle},set:function(e){this._hideToggle=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),R.prototype.ngAfterContentInit=function(){this._keyManager=new a.FocusKeyManager(this._headers).withWrap()},R.prototype._handleHeaderKeydown=function(e){var t=e.keyCode,n=this._keyManager;t===s.HOME?s.hasModifierKey(e)||(n.setFirstItemActive(),e.preventDefault()):t===s.END?s.hasModifierKey(e)||(n.setLastItemActive(),e.preventDefault()):this._keyManager.onKeydown(e)},R.prototype._handleHeaderFocus=function(e){this._keyManager.updateActiveItem(e)},R.decorators=[{type:l.Directive,args:[{selector:\"mat-accordion\",exportAs:\"matAccordion\",inputs:[\"multi\"],providers:[{provide:f,useExisting:R}],host:{class:\"mat-accordion\"}}]}],R.propDecorators={_headers:[{type:l.ContentChildren,args:[O,{descendants:!0}]}],hideToggle:[{type:l.Input}],displayMode:[{type:l.Input}],togglePosition:[{type:l.Input}]},R);function R(){var e=null!==A&&A.apply(this,arguments)||this;return e._hideToggle=!1,e.displayMode=\"default\",e.togglePosition=\"after\",e}var N=(j.decorators=[{type:l.NgModule,args:[{imports:[r.CommonModule,t.CdkAccordionModule,n.PortalModule],exports:[M,x,S,O,I,D,y],declarations:[M,x,S,O,I,D,y]}]}],j);function j(){}e.MatExpansionModule=N,e.MatAccordion=M,e.MAT_ACCORDION=f,e.MAT_EXPANSION_PANEL_DEFAULT_OPTIONS=w,e.MatExpansionPanel=x,e.MatExpansionPanelActionRow=S,e.ɵ0=void 0,e.MatExpansionPanelHeader=O,e.MatExpansionPanelDescription=D,e.MatExpansionPanelTitle=I,e.MatExpansionPanelContent=y,e.EXPANSION_PANEL_ANIMATION_TIMING=m,e.matExpansionAnimations=v,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"@angular/cdk/coercion\"),require(\"tslib\"),require(\"@angular/cdk/bidi\")):System.registerDynamic(\"npm:@angular/material/bundles/material-grid-list.umd.js\",[\"@angular/core\",\"@angular/material/core\",\"@angular/cdk/coercion\",\"tslib\",\"@angular/cdk/bidi\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"@angular/cdk/coercion\"),e(\"tslib\"),e(\"@angular/cdk/bidi\"))})}(0,function(e,t,n,r,i,o){\"use strict\";var a=new t.InjectionToken(\"MAT_GRID_LIST\"),s=(Object.defineProperty(l.prototype,\"rowspan\",{get:function(){return this._rowspan},set:function(e){this._rowspan=Math.round(r.coerceNumberProperty(e))},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"colspan\",{get:function(){return this._colspan},set:function(e){this._colspan=Math.round(r.coerceNumberProperty(e))},enumerable:!0,configurable:!0}),l.prototype._setStyle=function(e,t){this._element.nativeElement.style[e]=t},l.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-grid-tile\",exportAs:\"matGridTile\",host:{class:\"mat-grid-tile\"},template:'\\x3c!-- TODO(kara): Revisit why this is a figure.--\\x3e\\n<figure class=\"mat-figure\">\\n  <ng-content></ng-content>\\n</figure>',encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-figure{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}/*# sourceMappingURL=grid-list.css.map */\\n\"]}]}],l.ctorParameters=function(){return[{type:t.ElementRef},{type:void 0,decorators:[{type:t.Optional},{type:t.Inject,args:[a]}]}]},l.propDecorators={rowspan:[{type:t.Input}],colspan:[{type:t.Input}]},l);function l(e,t){this._element=e,this._gridList=t,this._rowspan=1,this._colspan=1}var u=(c.prototype.ngAfterContentInit=function(){n.setLines(this._lines,this._element)},c.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-grid-tile-header, mat-grid-tile-footer\",template:'<ng-content select=\"[mat-grid-avatar], [matGridAvatar]\"></ng-content>\\n<div class=\"mat-grid-list-text\"><ng-content select=\"[mat-line], [matLine]\"></ng-content></div>\\n<ng-content></ng-content>\\n',changeDetection:t.ChangeDetectionStrategy.OnPush,encapsulation:t.ViewEncapsulation.None}]}],c.ctorParameters=function(){return[{type:t.ElementRef}]},c.propDecorators={_lines:[{type:t.ContentChildren,args:[n.MatLine]}]},c);function c(e){this._element=e}var p=(d.decorators=[{type:t.Directive,args:[{selector:\"[mat-grid-avatar], [matGridAvatar]\",host:{class:\"mat-grid-avatar\"}}]}],d);function d(){}var h=(f.decorators=[{type:t.Directive,args:[{selector:\"mat-grid-tile-header\",host:{class:\"mat-grid-tile-header\"}}]}],f);function f(){}var m=(v.decorators=[{type:t.Directive,args:[{selector:\"mat-grid-tile-footer\",host:{class:\"mat-grid-tile-footer\"}}]}],v);function v(){}var y=(Object.defineProperty(g.prototype,\"rowCount\",{get:function(){return this.rowIndex+1},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"rowspan\",{get:function(){var e=Math.max.apply(Math,i.__spread(this.tracker));return 1<e?this.rowCount+e-1:this.rowCount},enumerable:!0,configurable:!0}),g.prototype.update=function(e,t){var n=this;this.columnIndex=0,this.rowIndex=0,this.tracker=new Array(e),this.tracker.fill(0,0,this.tracker.length),this.positions=t.map(function(e){return n._trackTile(e)})},g.prototype._trackTile=function(e){var t=this._findMatchingGap(e.colspan);return this._markTilePosition(t,e),this.columnIndex=t+e.colspan,new _(this.rowIndex,t)},g.prototype._findMatchingGap=function(e){if(e>this.tracker.length)throw Error(\"mat-grid-list: tile with colspan \"+e+' is wider than grid with cols=\"'+this.tracker.length+'\".');for(var t=-1,n=-1;this.columnIndex+e>this.tracker.length?(this._nextRow(),t=this.tracker.indexOf(0,this.columnIndex),n=this._findGapEndIndex(t)):-1!=(t=this.tracker.indexOf(0,this.columnIndex))?(n=this._findGapEndIndex(t),this.columnIndex=t+1):(this._nextRow(),t=this.tracker.indexOf(0,this.columnIndex),n=this._findGapEndIndex(t)),n-t<e||0==n;);return Math.max(t,0)},g.prototype._nextRow=function(){this.columnIndex=0,this.rowIndex++;for(var e=0;e<this.tracker.length;e++)this.tracker[e]=Math.max(0,this.tracker[e]-1)},g.prototype._findGapEndIndex=function(e){for(var t=e+1;t<this.tracker.length;t++)if(0!=this.tracker[t])return t;return this.tracker.length},g.prototype._markTilePosition=function(e,t){for(var n=0;n<t.colspan;n++)this.tracker[e+n]=t.rowspan},g);function g(){this.columnIndex=0,this.rowIndex=0}var _=function(e,t){this.row=e,this.col=t},b=/^-?\\d+((\\.\\d+)?[A-Za-z%$]?)+$/,w=(x.prototype.init=function(e,t,n,r){this._gutterSize=M(e),this._rows=t.rowCount,this._rowspan=t.rowspan,this._cols=n,this._direction=r},x.prototype.getBaseTileSize=function(e,t){return\"(\"+e+\"% - (\"+this._gutterSize+\" * \"+t+\"))\"},x.prototype.getTilePosition=function(e,t){return 0===t?\"0\":A(\"(\"+e+\" + \"+this._gutterSize+\") * \"+t)},x.prototype.getTileSize=function(e,t){return\"(\"+e+\" * \"+t+\") + (\"+(t-1)+\" * \"+this._gutterSize+\")\"},x.prototype.setStyle=function(e,t,n){var r=100/this._cols,i=(this._cols-1)/this._cols;this.setColStyles(e,n,r,i),this.setRowStyles(e,t,r,i)},x.prototype.setColStyles=function(e,t,n,r){var i=this.getBaseTileSize(n,r),o=\"rtl\"===this._direction?\"right\":\"left\";e._setStyle(o,this.getTilePosition(i,t)),e._setStyle(\"width\",A(this.getTileSize(i,e.colspan)))},x.prototype.getGutterSpan=function(){return this._gutterSize+\" * (\"+this._rowspan+\" - 1)\"},x.prototype.getTileSpan=function(e){return this._rowspan+\" * \"+this.getTileSize(e,1)},x.prototype.getComputedHeight=function(){return null},x);function x(){this._rows=0,this._rowspan=0}var C,S=(C=w,i.__extends(E,C),E.prototype.init=function(e,t,n,r){if(C.prototype.init.call(this,e,t,n,r),this.fixedRowHeight=M(this.fixedRowHeight),!b.test(this.fixedRowHeight))throw Error('Invalid value \"'+this.fixedRowHeight+'\" set as rowHeight.')},E.prototype.setRowStyles=function(e,t){e._setStyle(\"top\",this.getTilePosition(this.fixedRowHeight,t)),e._setStyle(\"height\",A(this.getTileSize(this.fixedRowHeight,e.rowspan)))},E.prototype.getComputedHeight=function(){return[\"height\",A(this.getTileSpan(this.fixedRowHeight)+\" + \"+this.getGutterSpan())]},E.prototype.reset=function(e){e._setListStyle([\"height\",null]),e._tiles&&e._tiles.forEach(function(e){e._setStyle(\"top\",null),e._setStyle(\"height\",null)})},E);function E(e){var t=C.call(this)||this;return t.fixedRowHeight=e,t}var O,k=(O=w,i.__extends(D,O),D.prototype.setRowStyles=function(e,t,n,r){var i=n/this.rowHeightRatio;this.baseTileHeight=this.getBaseTileSize(i,r),e._setStyle(\"marginTop\",this.getTilePosition(this.baseTileHeight,t)),e._setStyle(\"paddingTop\",A(this.getTileSize(this.baseTileHeight,e.rowspan)))},D.prototype.getComputedHeight=function(){return[\"paddingBottom\",A(this.getTileSpan(this.baseTileHeight)+\" + \"+this.getGutterSpan())]},D.prototype.reset=function(e){e._setListStyle([\"paddingBottom\",null]),e._tiles.forEach(function(e){e._setStyle(\"marginTop\",null),e._setStyle(\"paddingTop\",null)})},D.prototype._parseRatio=function(e){var t=e.split(\":\");if(2!==t.length)throw Error('mat-grid-list: invalid ratio given for row-height: \"'+e+'\"');this.rowHeightRatio=parseFloat(t[0])/parseFloat(t[1])},D);function D(e){var t=O.call(this)||this;return t._parseRatio(e),t}var T,I=(T=w,i.__extends(P,T),P.prototype.setRowStyles=function(e,t){var n=100/this._rowspan,r=(this._rows-1)/this._rows,i=this.getBaseTileSize(n,r);e._setStyle(\"top\",this.getTilePosition(i,t)),e._setStyle(\"height\",A(this.getTileSize(i,e.rowspan)))},P.prototype.reset=function(e){e._tiles&&e._tiles.forEach(function(e){e._setStyle(\"top\",null),e._setStyle(\"height\",null)})},P);function P(){return null!==T&&T.apply(this,arguments)||this}function A(e){return\"calc(\"+e+\")\"}function M(e){return e.match(/([A-Za-z%]+)$/)?e:e+\"px\"}var R=(Object.defineProperty(N.prototype,\"cols\",{get:function(){return this._cols},set:function(e){this._cols=Math.max(1,Math.round(r.coerceNumberProperty(e)))},enumerable:!0,configurable:!0}),Object.defineProperty(N.prototype,\"gutterSize\",{get:function(){return this._gutter},set:function(e){this._gutter=\"\"+(null==e?\"\":e)},enumerable:!0,configurable:!0}),Object.defineProperty(N.prototype,\"rowHeight\",{get:function(){return this._rowHeight},set:function(e){var t=\"\"+(null==e?\"\":e);t!==this._rowHeight&&(this._rowHeight=t,this._setTileStyler(this._rowHeight))},enumerable:!0,configurable:!0}),N.prototype.ngOnInit=function(){this._checkCols(),this._checkRowHeight()},N.prototype.ngAfterContentChecked=function(){this._layoutTiles()},N.prototype._checkCols=function(){if(!this.cols)throw Error('mat-grid-list: must pass in number of columns. Example: <mat-grid-list cols=\"3\">')},N.prototype._checkRowHeight=function(){this._rowHeight||this._setTileStyler(\"1:1\")},N.prototype._setTileStyler=function(e){this._tileStyler&&this._tileStyler.reset(this),\"fit\"===e?this._tileStyler=new I:e&&-1<e.indexOf(\":\")?this._tileStyler=new k(e):this._tileStyler=new S(e)},N.prototype._layoutTiles=function(){var r=this;this._tileCoordinator||(this._tileCoordinator=new y);var i=this._tileCoordinator,e=this._tiles.filter(function(e){return!e._gridList||e._gridList===r}),t=this._dir?this._dir.value:\"ltr\";this._tileCoordinator.update(this.cols,e),this._tileStyler.init(this.gutterSize,i,this.cols,t),e.forEach(function(e,t){var n=i.positions[t];r._tileStyler.setStyle(e,n.row,n.col)}),this._setListStyle(this._tileStyler.getComputedHeight())},N.prototype._setListStyle=function(e){e&&(this._element.nativeElement.style[e[0]]=e[1])},N.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-grid-list\",exportAs:\"matGridList\",template:\"<div>\\n  <ng-content></ng-content>\\n</div>\",host:{class:\"mat-grid-list\"},providers:[{provide:a,useExisting:N}],changeDetection:t.ChangeDetectionStrategy.OnPush,encapsulation:t.ViewEncapsulation.None,styles:[\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-figure{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}/*# sourceMappingURL=grid-list.css.map */\\n\"]}]}],N.ctorParameters=function(){return[{type:t.ElementRef},{type:o.Directionality,decorators:[{type:t.Optional}]}]},N.propDecorators={_tiles:[{type:t.ContentChildren,args:[s,{descendants:!0}]}],cols:[{type:t.Input}],gutterSize:[{type:t.Input}],rowHeight:[{type:t.Input}]},N);function N(e,t){this._element=e,this._dir=t,this._gutter=\"1px\"}var j=(F.decorators=[{type:t.NgModule,args:[{imports:[n.MatLineModule,n.MatCommonModule],exports:[R,s,u,n.MatLineModule,n.MatCommonModule,h,m,p],declarations:[R,s,u,h,m,p]}]}],F);function F(){}e.ɵangular_material_src_material_grid_list_grid_list_a=a,e.MatGridListModule=j,e.MatGridList=R,e.MatGridTile=s,e.MatGridTileText=u,e.MatGridAvatarCssMatStyler=p,e.MatGridTileHeaderCssMatStyler=h,e.MatGridTileFooterCssMatStyler=m,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/platform\"),require(\"@angular/core\"),require(\"@angular/cdk/coercion\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-text-field.umd.js\",[\"@angular/cdk/platform\",\"@angular/core\",\"@angular/cdk/coercion\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/platform\"),e(\"@angular/core\"),e(\"@angular/cdk/coercion\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,t,n,s,l,r){\"use strict\";var u=t.normalizePassiveListenerOptions({passive:!0}),i=(o.prototype.monitor=function(e){var t=this;if(!this._platform.isBrowser)return l.EMPTY;var n=s.coerceElement(e),r=this._monitoredElements.get(n);if(r)return r.subject.asObservable();function i(e){\"cdk-text-field-autofill-start\"!==e.animationName||n.classList.contains(a)?\"cdk-text-field-autofill-end\"===e.animationName&&n.classList.contains(a)&&(n.classList.remove(a),t._ngZone.run(function(){return o.next({target:e.target,isAutofilled:!1})})):(n.classList.add(a),t._ngZone.run(function(){return o.next({target:e.target,isAutofilled:!0})}))}var o=new l.Subject,a=\"cdk-text-field-autofilled\";return this._ngZone.runOutsideAngular(function(){n.addEventListener(\"animationstart\",i,u),n.classList.add(\"cdk-text-field-autofill-monitored\")}),this._monitoredElements.set(n,{subject:o,unlisten:function(){n.removeEventListener(\"animationstart\",i,u)}}),o.asObservable()},o.prototype.stopMonitoring=function(e){var t=s.coerceElement(e),n=this._monitoredElements.get(t);n&&(n.unlisten(),n.subject.complete(),t.classList.remove(\"cdk-text-field-autofill-monitored\"),t.classList.remove(\"cdk-text-field-autofilled\"),this._monitoredElements.delete(t))},o.prototype.ngOnDestroy=function(){var n=this;this._monitoredElements.forEach(function(e,t){return n.stopMonitoring(t)})},o.decorators=[{type:n.Injectable,args:[{providedIn:\"root\"}]}],o.ctorParameters=function(){return[{type:t.Platform},{type:n.NgZone}]},o.ngInjectableDef=n.ɵɵdefineInjectable({factory:function(){return new o(n.ɵɵinject(t.Platform),n.ɵɵinject(n.NgZone))},token:o,providedIn:\"root\"}),o);function o(e,t){this._platform=e,this._ngZone=t,this._monitoredElements=new Map}var a=(c.prototype.ngOnInit=function(){var t=this;this._autofillMonitor.monitor(this._elementRef).subscribe(function(e){return t.cdkAutofill.emit(e)})},c.prototype.ngOnDestroy=function(){this._autofillMonitor.stopMonitoring(this._elementRef)},c.decorators=[{type:n.Directive,args:[{selector:\"[cdkAutofill]\"}]}],c.ctorParameters=function(){return[{type:n.ElementRef},{type:i}]},c.propDecorators={cdkAutofill:[{type:n.Output}]},c);function c(e,t){this._elementRef=e,this._autofillMonitor=t,this.cdkAutofill=new n.EventEmitter}var p=(Object.defineProperty(d.prototype,\"minRows\",{get:function(){return this._minRows},set:function(e){this._minRows=e,this._setMinHeight()},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,\"maxRows\",{get:function(){return this._maxRows},set:function(e){this._maxRows=e,this._setMaxHeight()},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,\"enabled\",{get:function(){return this._enabled},set:function(e){e=s.coerceBooleanProperty(e),this._enabled!==e&&((this._enabled=e)?this.resizeToFitContent(!0):this.reset())},enumerable:!0,configurable:!0}),d.prototype._setMinHeight=function(){var e=this.minRows&&this._cachedLineHeight?this.minRows*this._cachedLineHeight+\"px\":null;e&&(this._textareaElement.style.minHeight=e)},d.prototype._setMaxHeight=function(){var e=this.maxRows&&this._cachedLineHeight?this.maxRows*this._cachedLineHeight+\"px\":null;e&&(this._textareaElement.style.maxHeight=e)},d.prototype.ngAfterViewInit=function(){var e=this;this._platform.isBrowser&&(this._initialHeight=this._textareaElement.style.height,this.resizeToFitContent(),this._ngZone.runOutsideAngular(function(){l.fromEvent(window,\"resize\").pipe(r.auditTime(16),r.takeUntil(e._destroyed)).subscribe(function(){return e.resizeToFitContent(!0)})}))},d.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete()},d.prototype._cacheTextareaLineHeight=function(){if(!this._cachedLineHeight){var e=this._textareaElement.cloneNode(!1);e.rows=1,e.style.position=\"absolute\",e.style.visibility=\"hidden\",e.style.border=\"none\",e.style.padding=\"0\",e.style.height=\"\",e.style.minHeight=\"\",e.style.maxHeight=\"\",e.style.overflow=\"hidden\",this._textareaElement.parentNode.appendChild(e),this._cachedLineHeight=e.clientHeight,this._textareaElement.parentNode.removeChild(e),this._setMinHeight(),this._setMaxHeight()}},d.prototype.ngDoCheck=function(){this._platform.isBrowser&&this.resizeToFitContent()},d.prototype.resizeToFitContent=function(e){var t=this;if(void 0===e&&(e=!1),this._enabled&&(this._cacheTextareaLineHeight(),this._cachedLineHeight)){var n=this._elementRef.nativeElement,r=n.value;if(e||this._minRows!==this._previousMinRows||r!==this._previousValue){var i=n.placeholder;n.classList.add(\"cdk-textarea-autosize-measuring\"),n.placeholder=\"\";var o=n.scrollHeight-4;n.style.height=o+\"px\",n.classList.remove(\"cdk-textarea-autosize-measuring\"),n.placeholder=i,this._ngZone.runOutsideAngular(function(){\"undefined\"!=typeof requestAnimationFrame?requestAnimationFrame(function(){return t._scrollToCaretPosition(n)}):setTimeout(function(){return t._scrollToCaretPosition(n)})}),this._previousValue=r,this._previousMinRows=this._minRows}}},d.prototype.reset=function(){void 0!==this._initialHeight&&(this._textareaElement.style.height=this._initialHeight)},d.prototype._noopInputHandler=function(){},d.prototype._scrollToCaretPosition=function(e){var t=e.selectionStart,n=e.selectionEnd;this._destroyed.isStopped||document.activeElement!==e||e.setSelectionRange(t,n)},d.decorators=[{type:n.Directive,args:[{selector:\"textarea[cdkTextareaAutosize]\",exportAs:\"cdkTextareaAutosize\",host:{class:\"cdk-textarea-autosize\",rows:\"1\",\"(input)\":\"_noopInputHandler()\"}}]}],d.ctorParameters=function(){return[{type:n.ElementRef},{type:t.Platform},{type:n.NgZone}]},d.propDecorators={minRows:[{type:n.Input,args:[\"cdkAutosizeMinRows\"]}],maxRows:[{type:n.Input,args:[\"cdkAutosizeMaxRows\"]}],enabled:[{type:n.Input,args:[\"cdkTextareaAutosize\"]}]},d);function d(e,t,n){this._elementRef=e,this._platform=t,this._ngZone=n,this._destroyed=new l.Subject,this._enabled=!0,this._previousMinRows=-1,this._textareaElement=this._elementRef.nativeElement}var h=(f.decorators=[{type:n.NgModule,args:[{declarations:[a,p],imports:[t.PlatformModule],exports:[a,p]}]}],f);function f(){}e.AutofillMonitor=i,e.CdkAutofill=a,e.CdkTextareaAutosize=p,e.TextFieldModule=h,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/text-field\"),require(\"@angular/core\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/platform\"),require(\"@angular/forms\"),require(\"@angular/material/core\"),require(\"@angular/material/form-field\"),require(\"rxjs\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/material/bundles/material-input.umd.js\",[\"tslib\",\"@angular/cdk/text-field\",\"@angular/core\",\"@angular/cdk/coercion\",\"@angular/cdk/platform\",\"@angular/forms\",\"@angular/material/core\",\"@angular/material/form-field\",\"rxjs\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/text-field\"),e(\"@angular/core\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/platform\"),e(\"@angular/forms\"),e(\"@angular/material/core\"),e(\"@angular/material/form-field\"),e(\"rxjs\"),e(\"@angular/common\"))})}(0,function(e,t,n,r,i,p,o,a,s,d,l){\"use strict\";var u,c=(u=n.CdkTextareaAutosize,t.__extends(h,u),Object.defineProperty(h.prototype,\"matAutosizeMinRows\",{get:function(){return this.minRows},set:function(e){this.minRows=e},enumerable:!0,configurable:!0}),Object.defineProperty(h.prototype,\"matAutosizeMaxRows\",{get:function(){return this.maxRows},set:function(e){this.maxRows=e},enumerable:!0,configurable:!0}),Object.defineProperty(h.prototype,\"matAutosize\",{get:function(){return this.enabled},set:function(e){this.enabled=e},enumerable:!0,configurable:!0}),Object.defineProperty(h.prototype,\"matTextareaAutosize\",{get:function(){return this.enabled},set:function(e){this.enabled=e},enumerable:!0,configurable:!0}),h.decorators=[{type:r.Directive,args:[{selector:\"textarea[mat-autosize], textarea[matTextareaAutosize]\",exportAs:\"matTextareaAutosize\",inputs:[\"cdkAutosizeMinRows\",\"cdkAutosizeMaxRows\"],host:{class:\"cdk-textarea-autosize mat-autosize\",rows:\"1\",\"(input)\":\"_noopInputHandler()\"}}]}],h.propDecorators={matAutosizeMinRows:[{type:r.Input}],matAutosizeMaxRows:[{type:r.Input}],matAutosize:[{type:r.Input,args:[\"mat-autosize\"]}],matTextareaAutosize:[{type:r.Input}]},h);function h(){return null!==u&&u.apply(this,arguments)||this}function f(e){return Error('Input type \"'+e+\"\\\" isn't supported by matInput.\")}function m(e,t,n,r){this._defaultErrorStateMatcher=e,this._parentForm=t,this._parentFormGroup=n,this.ngControl=r}var v,y=new r.InjectionToken(\"MAT_INPUT_VALUE_ACCESSOR\"),g=[\"button\",\"checkbox\",\"file\",\"hidden\",\"image\",\"radio\",\"range\",\"reset\",\"submit\"],_=0,b=a.mixinErrorState(m),w=(v=b,t.__extends(x,v),Object.defineProperty(x.prototype,\"disabled\",{get:function(){return this.ngControl&&null!==this.ngControl.disabled?this.ngControl.disabled:this._disabled},set:function(e){this._disabled=i.coerceBooleanProperty(e),this.focused&&(this.focused=!1,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"id\",{get:function(){return this._id},set:function(e){this._id=e||this._uid},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=i.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"type\",{get:function(){return this._type},set:function(e){this._type=e||\"text\",this._validateType(),!this._isTextarea()&&p.getSupportedInputTypes().has(this._type)&&(this._elementRef.nativeElement.type=this._type)},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"value\",{get:function(){return this._inputValueAccessor.value},set:function(e){e!==this.value&&(this._inputValueAccessor.value=e,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"readonly\",{get:function(){return this._readonly},set:function(e){this._readonly=i.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),x.prototype.ngOnInit=function(){var t=this;this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(function(e){t.autofilled=e.isAutofilled,t.stateChanges.next()})},x.prototype.ngOnChanges=function(){this.stateChanges.next()},x.prototype.ngOnDestroy=function(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement)},x.prototype.ngDoCheck=function(){this.ngControl&&this.updateErrorState(),this._dirtyCheckNativeValue()},x.prototype.focus=function(e){this._elementRef.nativeElement.focus(e)},x.prototype._focusChanged=function(e){e===this.focused||this.readonly&&e||(this.focused=e,this.stateChanges.next())},x.prototype._onInput=function(){},x.prototype._dirtyCheckNativeValue=function(){var e=this._elementRef.nativeElement.value;this._previousNativeValue!==e&&(this._previousNativeValue=e,this.stateChanges.next())},x.prototype._validateType=function(){if(-1<g.indexOf(this._type))throw f(this._type)},x.prototype._isNeverEmpty=function(){return-1<this._neverEmptyInputTypes.indexOf(this._type)},x.prototype._isBadInput=function(){var e=this._elementRef.nativeElement.validity;return e&&e.badInput},x.prototype._isTextarea=function(){return\"textarea\"===this._elementRef.nativeElement.nodeName.toLowerCase()},Object.defineProperty(x.prototype,\"empty\",{get:function(){return!(this._isNeverEmpty()||this._elementRef.nativeElement.value||this._isBadInput()||this.autofilled)},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"shouldLabelFloat\",{get:function(){if(this._isNativeSelect){var e=this._elementRef.nativeElement,t=e.options[0];return this.focused||e.multiple||!this.empty||!!(-1<e.selectedIndex&&t&&t.label)}return this.focused||!this.empty},enumerable:!0,configurable:!0}),x.prototype.setDescribedByIds=function(e){this._ariaDescribedby=e.join(\" \")},x.prototype.onContainerClick=function(){this.focused||this.focus()},x.decorators=[{type:r.Directive,args:[{selector:\"input[matInput], textarea[matInput], select[matNativeControl],\\n      input[matNativeControl], textarea[matNativeControl]\",exportAs:\"matInput\",host:{class:\"mat-input-element mat-form-field-autofill-control\",\"[class.mat-input-server]\":\"_isServer\",\"[attr.id]\":\"id\",\"[attr.placeholder]\":\"placeholder\",\"[disabled]\":\"disabled\",\"[required]\":\"required\",\"[attr.readonly]\":\"readonly && !_isNativeSelect || null\",\"[attr.aria-describedby]\":\"_ariaDescribedby || null\",\"[attr.aria-invalid]\":\"errorState\",\"[attr.aria-required]\":\"required.toString()\",\"(blur)\":\"_focusChanged(false)\",\"(focus)\":\"_focusChanged(true)\",\"(input)\":\"_onInput()\"},providers:[{provide:s.MatFormFieldControl,useExisting:x}]}]}],x.ctorParameters=function(){return[{type:r.ElementRef},{type:p.Platform},{type:o.NgControl,decorators:[{type:r.Optional},{type:r.Self}]},{type:o.NgForm,decorators:[{type:r.Optional}]},{type:o.FormGroupDirective,decorators:[{type:r.Optional}]},{type:a.ErrorStateMatcher},{type:void 0,decorators:[{type:r.Optional},{type:r.Self},{type:r.Inject,args:[y]}]},{type:n.AutofillMonitor},{type:r.NgZone}]},x.propDecorators={disabled:[{type:r.Input}],id:[{type:r.Input}],placeholder:[{type:r.Input}],required:[{type:r.Input}],type:[{type:r.Input}],errorStateMatcher:[{type:r.Input}],value:[{type:r.Input}],readonly:[{type:r.Input}]},x);function x(e,t,n,r,i,o,a,s,l){var u=v.call(this,o,r,i,n)||this;u._elementRef=e,u._platform=t,u.ngControl=n,u._autofillMonitor=s,u._uid=\"mat-input-\"+_++,u._isServer=!1,u._isNativeSelect=!1,u.focused=!1,u.stateChanges=new d.Subject,u.controlType=\"mat-input\",u.autofilled=!1,u._disabled=!1,u._required=!1,u._type=\"text\",u._readonly=!1,u._neverEmptyInputTypes=[\"date\",\"datetime\",\"datetime-local\",\"month\",\"time\",\"week\"].filter(function(e){return p.getSupportedInputTypes().has(e)});var c=u._elementRef.nativeElement;return u._inputValueAccessor=a||c,u._previousNativeValue=u.value,u.id=u.id,t.IOS&&l.runOutsideAngular(function(){e.nativeElement.addEventListener(\"keyup\",function(e){var t=e.target;t.value||t.selectionStart||t.selectionEnd||(t.setSelectionRange(1,1),t.setSelectionRange(0,0))})}),u._isServer=!u._platform.isBrowser,u._isNativeSelect=\"select\"===c.nodeName.toLowerCase(),u._isNativeSelect&&(u.controlType=c.multiple?\"mat-native-select-multiple\":\"mat-native-select\"),u}var C=(S.decorators=[{type:r.NgModule,args:[{declarations:[w,c],imports:[l.CommonModule,n.TextFieldModule,s.MatFormFieldModule],exports:[n.TextFieldModule,s.MatFormFieldModule,w,c],providers:[a.ErrorStateMatcher]}]}],S);function S(){}e.MatTextareaAutosize=c,e.MatInput=w,e.getMatInputUnsupportedTypeError=f,e.MatInputModule=C,e.MAT_INPUT_VALUE_ACCESSOR=y,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/cdk/coercion\"),require(\"@angular/common\"),require(\"@angular/material/core\")):System.registerDynamic(\"npm:@angular/material/bundles/material-divider.umd.js\",[\"@angular/core\",\"@angular/cdk/coercion\",\"@angular/common\",\"@angular/material/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/cdk/coercion\"),e(\"@angular/common\"),e(\"@angular/material/core\"))})}(0,function(e,t,n,r,i){\"use strict\";var o=(Object.defineProperty(a.prototype,\"vertical\",{get:function(){return this._vertical},set:function(e){this._vertical=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,\"inset\",{get:function(){return this._inset},set:function(e){this._inset=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),a.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-divider\",host:{role:\"separator\",\"[attr.aria-orientation]\":'vertical ? \"vertical\" : \"horizontal\"',\"[class.mat-divider-vertical]\":\"vertical\",\"[class.mat-divider-horizontal]\":\"!vertical\",\"[class.mat-divider-inset]\":\"inset\",class:\"mat-divider\"},template:\"\",encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[\".mat-divider{display:block;margin:0;border-top-width:1px;border-top-style:solid}.mat-divider.mat-divider-vertical{border-top:0;border-right-width:1px;border-right-style:solid}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}/*# sourceMappingURL=divider.css.map */\\n\"]}]}],a.propDecorators={vertical:[{type:t.Input}],inset:[{type:t.Input}]},a);function a(){this._vertical=!1,this._inset=!1}var s=(l.decorators=[{type:t.NgModule,args:[{imports:[i.MatCommonModule,r.CommonModule],exports:[o,i.MatCommonModule],declarations:[o]}]}],l);function l(){}e.MatDivider=o,e.MatDividerModule=s,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/collections\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/forms\"),require(\"@angular/material/divider\")):System.registerDynamic(\"npm:@angular/material/bundles/material-list.umd.js\",[\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"rxjs\",\"rxjs/operators\",\"@angular/cdk/a11y\",\"@angular/cdk/coercion\",\"@angular/cdk/collections\",\"@angular/cdk/keycodes\",\"@angular/forms\",\"@angular/material/divider\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/collections\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/forms\"),e(\"@angular/material/divider\"))})}(0,function(e,t,r,n,u,a,s,i,o,l,c,p,d){\"use strict\";function h(){}function f(){}var m,v=n.mixinDisableRipple(h),y=n.mixinDisableRipple(f),g=(m=v,u.__extends(_,m),_.prototype.ngOnChanges=function(){this._stateChanges.next()},_.prototype.ngOnDestroy=function(){this._stateChanges.complete()},_.decorators=[{type:r.Component,args:[{moduleId:module.id,selector:\"mat-nav-list\",exportAs:\"matNavList\",host:{role:\"navigation\",class:\"mat-nav-list mat-list-base\"},template:\"<ng-content></ng-content>\\n\\n\",inputs:[\"disableRipple\"],encapsulation:r.ViewEncapsulation.None,changeDetection:r.ChangeDetectionStrategy.OnPush,styles:[\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}@media(-ms-high-contrast: active){.mat-selection-list:focus{outline-style:dotted}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,mat-action-list .mat-list-item:hover,mat-action-list .mat-list-item:focus{outline:dotted 1px}}@media(hover: none){.mat-list-option:not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}/*# sourceMappingURL=list.css.map */\\n\"]}]}],_);function _(){var e=null!==m&&m.apply(this,arguments)||this;return e._stateChanges=new a.Subject,e}var b,w=(b=v,u.__extends(x,b),x.prototype._getListType=function(){var e=this._elementRef.nativeElement.nodeName.toLowerCase();return\"mat-list\"===e?\"list\":\"mat-action-list\"===e?\"action-list\":null},x.prototype.ngOnChanges=function(){this._stateChanges.next()},x.prototype.ngOnDestroy=function(){this._stateChanges.complete()},x.decorators=[{type:r.Component,args:[{moduleId:module.id,selector:\"mat-list, mat-action-list\",exportAs:\"matList\",template:\"<ng-content></ng-content>\\n\\n\",host:{class:\"mat-list mat-list-base\"},inputs:[\"disableRipple\"],encapsulation:r.ViewEncapsulation.None,changeDetection:r.ChangeDetectionStrategy.OnPush,styles:[\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}@media(-ms-high-contrast: active){.mat-selection-list:focus{outline-style:dotted}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,mat-action-list .mat-list-item:hover,mat-action-list .mat-list-item:focus{outline:dotted 1px}}@media(hover: none){.mat-list-option:not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}/*# sourceMappingURL=list.css.map */\\n\"]}]}],x.ctorParameters=function(){return[{type:r.ElementRef}]},x);function x(e){var t=b.call(this)||this;return t._elementRef=e,t._stateChanges=new a.Subject,\"action-list\"===t._getListType()&&e.nativeElement.classList.add(\"mat-action-list\"),t}var C=(S.decorators=[{type:r.Directive,args:[{selector:\"[mat-list-avatar], [matListAvatar]\",host:{class:\"mat-list-avatar\"}}]}],S);function S(){}var E=(O.decorators=[{type:r.Directive,args:[{selector:\"[mat-list-icon], [matListIcon]\",host:{class:\"mat-list-icon\"}}]}],O);function O(){}var k=(D.decorators=[{type:r.Directive,args:[{selector:\"[mat-subheader], [matSubheader]\",host:{class:\"mat-subheader\"}}]}],D);function D(){}var T,I=(T=y,u.__extends(P,T),P.prototype.ngAfterContentInit=function(){n.setLines(this._lines,this._element)},P.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete()},P.prototype._isRippleDisabled=function(){return!this._isInteractiveList||this.disableRipple||!(!this._list||!this._list.disableRipple)},P.prototype._getHostElement=function(){return this._element.nativeElement},P.decorators=[{type:r.Component,args:[{moduleId:module.id,selector:\"mat-list-item, a[mat-list-item], button[mat-list-item]\",exportAs:\"matListItem\",host:{class:\"mat-list-item\",\"[class.mat-list-item-avatar]\":\"_avatar || _icon\",\"[class.mat-list-item-with-avatar]\":\"_avatar || _icon\"},inputs:[\"disableRipple\"],template:'<div class=\"mat-list-item-content\">\\n  <div class=\"mat-list-item-ripple\" mat-ripple\\n       [matRippleTrigger]=\"_getHostElement()\"\\n       [matRippleDisabled]=\"_isRippleDisabled()\">\\n  </div>\\n\\n  <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\\n  </ng-content>\\n\\n  <div class=\"mat-list-text\"><ng-content select=\"[mat-line], [matLine]\"></ng-content></div>\\n\\n  <ng-content></ng-content>\\n</div>\\n',encapsulation:r.ViewEncapsulation.None,changeDetection:r.ChangeDetectionStrategy.OnPush}]}],P.ctorParameters=function(){return[{type:r.ElementRef},{type:r.ChangeDetectorRef},{type:g,decorators:[{type:r.Optional}]},{type:w,decorators:[{type:r.Optional}]}]},P.propDecorators={_lines:[{type:r.ContentChildren,args:[n.MatLine,{descendants:!0}]}],_avatar:[{type:r.ContentChild,args:[C,{static:!1}]}],_icon:[{type:r.ContentChild,args:[E,{static:!1}]}]},P);function P(e,t,n,r){var i=T.call(this)||this;i._element=e,i._isInteractiveList=!1,i._destroyed=new a.Subject,i._isInteractiveList=!!(n||r&&\"action-list\"===r._getListType()),i._list=n||r;var o=i._getHostElement();return\"button\"!==o.nodeName.toLowerCase()||o.hasAttribute(\"type\")||o.setAttribute(\"type\",\"button\"),i._list&&i._list._stateChanges.pipe(s.takeUntil(i._destroyed)).subscribe(function(){t.markForCheck()}),i}function A(){}function M(){}var R,N=n.mixinDisableRipple(A),j=n.mixinDisableRipple(M),F={provide:p.NG_VALUE_ACCESSOR,useExisting:r.forwardRef(function(){return z}),multi:!0},L=function(e,t){this.source=e,this.option=t},V=(R=j,u.__extends(B,R),Object.defineProperty(B.prototype,\"color\",{get:function(){return this._color||this.selectionList.color},set:function(e){this._color=e},enumerable:!0,configurable:!0}),Object.defineProperty(B.prototype,\"value\",{get:function(){return this._value},set:function(e){this.selected&&e!==this.value&&(this.selected=!1),this._value=e},enumerable:!0,configurable:!0}),Object.defineProperty(B.prototype,\"disabled\",{get:function(){return this._disabled||this.selectionList&&this.selectionList.disabled},set:function(e){var t=o.coerceBooleanProperty(e);t!==this._disabled&&(this._disabled=t,this._changeDetector.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(B.prototype,\"selected\",{get:function(){return this.selectionList.selectedOptions.isSelected(this)},set:function(e){var t=o.coerceBooleanProperty(e);t!==this._selected&&(this._setSelected(t),this.selectionList._reportValueChange())},enumerable:!0,configurable:!0}),B.prototype.ngOnInit=function(){var t=this,n=this.selectionList;n._value&&n._value.some(function(e){return n.compareWith(e,t._value)})&&this._setSelected(!0);var e=this._selected;Promise.resolve().then(function(){(t._selected||e)&&(t.selected=!0,t._changeDetector.markForCheck())})},B.prototype.ngAfterContentInit=function(){n.setLines(this._lines,this._element)},B.prototype.ngOnDestroy=function(){var e=this;this.selected&&Promise.resolve().then(function(){e.selected=!1});var t=this._hasFocus,n=this.selectionList._removeOptionFromList(this);t&&n&&n.focus()},B.prototype.toggle=function(){this.selected=!this.selected},B.prototype.focus=function(){this._element.nativeElement.focus()},B.prototype.getLabel=function(){return this._text&&this._text.nativeElement.textContent||\"\"},B.prototype._isRippleDisabled=function(){return this.disabled||this.disableRipple||this.selectionList.disableRipple},B.prototype._handleClick=function(){this.disabled||(this.toggle(),this.selectionList._emitChangeEvent(this))},B.prototype._handleFocus=function(){this.selectionList._setFocusedOption(this),this._hasFocus=!0},B.prototype._handleBlur=function(){this.selectionList._onTouched(),this._hasFocus=!1},B.prototype._getHostElement=function(){return this._element.nativeElement},B.prototype._setSelected=function(e){return e!==this._selected&&((this._selected=e)?this.selectionList.selectedOptions.select(this):this.selectionList.selectedOptions.deselect(this),this._changeDetector.markForCheck(),!0)},B.prototype._markForCheck=function(){this._changeDetector.markForCheck()},B.decorators=[{type:r.Component,args:[{moduleId:module.id,selector:\"mat-list-option\",exportAs:\"matListOption\",inputs:[\"disableRipple\"],host:{role:\"option\",class:\"mat-list-item mat-list-option\",\"(focus)\":\"_handleFocus()\",\"(blur)\":\"_handleBlur()\",\"(click)\":\"_handleClick()\",tabindex:\"-1\",\"[class.mat-list-item-disabled]\":\"disabled\",\"[class.mat-list-item-with-avatar]\":\"_avatar || _icon\",\"[class.mat-primary]\":'color === \"primary\"',\"[class.mat-accent]\":'color !== \"primary\" && color !== \"warn\"',\"[class.mat-warn]\":'color === \"warn\"',\"[attr.aria-selected]\":\"selected\",\"[attr.aria-disabled]\":\"disabled\"},template:'<div class=\"mat-list-item-content\"\\n  [class.mat-list-item-content-reverse]=\"checkboxPosition == \\'after\\'\">\\n\\n  <div mat-ripple\\n    class=\"mat-list-item-ripple\"\\n    [matRippleTrigger]=\"_getHostElement()\"\\n    [matRippleDisabled]=\"_isRippleDisabled()\"></div>\\n\\n  <mat-pseudo-checkbox\\n    [state]=\"selected ? \\'checked\\' : \\'unchecked\\'\"\\n    [disabled]=\"disabled\"></mat-pseudo-checkbox>\\n\\n  <div class=\"mat-list-text\" #text><ng-content></ng-content></div>\\n\\n  <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\\n  </ng-content>\\n\\n</div>\\n',encapsulation:r.ViewEncapsulation.None,changeDetection:r.ChangeDetectionStrategy.OnPush}]}],B.ctorParameters=function(){return[{type:r.ElementRef},{type:r.ChangeDetectorRef},{type:z,decorators:[{type:r.Inject,args:[r.forwardRef(function(){return z})]}]}]},B.propDecorators={_avatar:[{type:r.ContentChild,args:[C,{static:!1}]}],_icon:[{type:r.ContentChild,args:[E,{static:!1}]}],_lines:[{type:r.ContentChildren,args:[n.MatLine]}],_text:[{type:r.ViewChild,args:[\"text\",{static:!1}]}],checkboxPosition:[{type:r.Input}],color:[{type:r.Input}],value:[{type:r.Input}],disabled:[{type:r.Input}],selected:[{type:r.Input}]},B);function B(e,t,n){var r=R.call(this)||this;return r._element=e,r._changeDetector=t,r.selectionList=n,r._selected=!1,r._disabled=!1,r._hasFocus=!1,r.checkboxPosition=\"after\",r}var U,z=(U=N,u.__extends(q,U),Object.defineProperty(q.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=o.coerceBooleanProperty(e),this._markOptionsForCheck()},enumerable:!0,configurable:!0}),q.prototype.ngAfterContentInit=function(){this._keyManager=new i.FocusKeyManager(this.options).withWrap().withTypeAhead().skipPredicate(function(){return!1}).withAllowedModifierKeys([\"shiftKey\"]),this._value&&this._setOptionsFromValues(this._value),this.selectedOptions.onChange.pipe(s.takeUntil(this._destroyed)).subscribe(function(e){var t,n,r,i;if(e.added)try{for(var o=u.__values(e.added),a=o.next();!a.done;a=o.next())a.value.selected=!0}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}if(e.removed)try{for(var s=u.__values(e.removed),l=s.next();!l.done;l=s.next())l.value.selected=!1}catch(e){r={error:e}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(r)throw r.error}}})},q.prototype.ngOnChanges=function(e){var t=e.disableRipple,n=e.color;(t&&!t.firstChange||n&&!n.firstChange)&&this._markOptionsForCheck()},q.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0},q.prototype.focus=function(e){this._element.nativeElement.focus(e)},q.prototype.selectAll=function(){this._setAllOptionsSelected(!0)},q.prototype.deselectAll=function(){this._setAllOptionsSelected(!1)},q.prototype._setFocusedOption=function(e){this._keyManager.updateActiveItem(e)},q.prototype._removeOptionFromList=function(e){var t=this._getOptionIndex(e);return-1<t&&this._keyManager.activeItemIndex===t&&(0<t?this._keyManager.updateActiveItem(t-1):0===t&&1<this.options.length&&this._keyManager.updateActiveItem(Math.min(t+1,this.options.length-1))),this._keyManager.activeItem},q.prototype._keydown=function(e){var t=e.keyCode,n=this._keyManager,r=n.activeItemIndex,i=c.hasModifierKey(e);switch(t){case c.SPACE:case c.ENTER:i||(this._toggleFocusedOption(),e.preventDefault());break;case c.HOME:case c.END:i||(t===c.HOME?n.setFirstItemActive():n.setLastItemActive(),e.preventDefault());break;case c.A:c.hasModifierKey(e,\"ctrlKey\")&&(this.options.find(function(e){return!e.selected})?this.selectAll():this.deselectAll(),e.preventDefault());break;default:n.onKeydown(e)}t!==c.UP_ARROW&&t!==c.DOWN_ARROW||!e.shiftKey||n.activeItemIndex===r||this._toggleFocusedOption()},q.prototype._reportValueChange=function(){if(this.options&&!this._isDestroyed){var e=this._getSelectedOptionValues();this._onChange(e),this._value=e}},q.prototype._emitChangeEvent=function(e){this.selectionChange.emit(new L(this,e))},q.prototype.writeValue=function(e){this._value=e,this.options&&this._setOptionsFromValues(e||[])},q.prototype.setDisabledState=function(e){this.disabled=e},q.prototype.registerOnChange=function(e){this._onChange=e},q.prototype.registerOnTouched=function(e){this._onTouched=e},q.prototype._setOptionsFromValues=function(e){var n=this;this.options.forEach(function(e){return e._setSelected(!1)}),e.forEach(function(t){var e=n.options.find(function(e){return!e.selected&&n.compareWith(e.value,t)});e&&e._setSelected(!0)})},q.prototype._getSelectedOptionValues=function(){return this.options.filter(function(e){return e.selected}).map(function(e){return e.value})},q.prototype._toggleFocusedOption=function(){var e=this._keyManager.activeItemIndex;if(null!=e&&this._isValidIndex(e)){var t=this.options.toArray()[e];t&&!t.disabled&&(t.toggle(),this._emitChangeEvent(t))}},q.prototype._setAllOptionsSelected=function(t){var n=!1;this.options.forEach(function(e){e._setSelected(t)&&(n=!0)}),n&&this._reportValueChange()},q.prototype._isValidIndex=function(e){return 0<=e&&e<this.options.length},q.prototype._getOptionIndex=function(e){return this.options.toArray().indexOf(e)},q.prototype._markOptionsForCheck=function(){this.options&&this.options.forEach(function(e){return e._markForCheck()})},q.decorators=[{type:r.Component,args:[{moduleId:module.id,selector:\"mat-selection-list\",exportAs:\"matSelectionList\",inputs:[\"disableRipple\"],host:{role:\"listbox\",\"[tabIndex]\":\"tabIndex\",class:\"mat-selection-list mat-list-base\",\"(blur)\":\"_onTouched()\",\"(keydown)\":\"_keydown($event)\",\"aria-multiselectable\":\"true\",\"[attr.aria-disabled]\":\"disabled.toString()\"},template:\"<ng-content></ng-content>\",encapsulation:r.ViewEncapsulation.None,providers:[F],changeDetection:r.ChangeDetectionStrategy.OnPush,styles:[\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}@media(-ms-high-contrast: active){.mat-selection-list:focus{outline-style:dotted}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,mat-action-list .mat-list-item:hover,mat-action-list .mat-list-item:focus{outline:dotted 1px}}@media(hover: none){.mat-list-option:not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}/*# sourceMappingURL=list.css.map */\\n\"]}]}],q.ctorParameters=function(){return[{type:r.ElementRef},{type:String,decorators:[{type:r.Attribute,args:[\"tabindex\"]}]}]},q.propDecorators={options:[{type:r.ContentChildren,args:[V,{descendants:!0}]}],selectionChange:[{type:r.Output}],tabIndex:[{type:r.Input}],color:[{type:r.Input}],compareWith:[{type:r.Input}],disabled:[{type:r.Input}]},q);function q(e,t){var n=U.call(this)||this;return n._element=e,n.selectionChange=new r.EventEmitter,n.tabIndex=0,n.color=\"accent\",n.compareWith=function(e,t){return e===t},n._disabled=!1,n.selectedOptions=new l.SelectionModel(!0),n._onChange=function(e){},n._destroyed=new a.Subject,n._onTouched=function(){},n.tabIndex=parseInt(t)||0,n}var H=(W.decorators=[{type:r.NgModule,args:[{imports:[n.MatLineModule,n.MatRippleModule,n.MatCommonModule,n.MatPseudoCheckboxModule,t.CommonModule],exports:[w,g,I,C,n.MatLineModule,n.MatCommonModule,E,k,n.MatPseudoCheckboxModule,z,V,d.MatDividerModule],declarations:[w,g,I,C,E,k,z,V]}]}],W);function W(){}e.MatListModule=H,e.MatNavList=g,e.MatList=w,e.MatListAvatarCssMatStyler=C,e.MatListIconCssMatStyler=E,e.MatListSubheaderCssMatStyler=k,e.MatListItem=I,e.MAT_SELECTION_LIST_VALUE_ACCESSOR=F,e.MatSelectionListChange=L,e.MatListOption=V,e.MatSelectionList=z,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/material/core\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/platform\")):System.registerDynamic(\"npm:@angular/material/bundles/material-menu.umd.js\",[\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/coercion\",\"@angular/cdk/keycodes\",\"@angular/core\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/material/core\",\"@angular/cdk/bidi\",\"@angular/cdk/overlay\",\"@angular/cdk/platform\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/material/core\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/platform\"))})}(0,function(e,f,t,n,r,u,c,o,i,a,s,l,p,d,h){\"use strict\";var m={transformMenu:i.trigger(\"transformMenu\",[i.state(\"void\",i.style({opacity:0,transform:\"scale(0.8)\"})),i.transition(\"void => enter\",i.group([i.query(\".mat-menu-content, .mat-mdc-menu-content\",i.animate(\"100ms linear\",i.style({opacity:1}))),i.animate(\"120ms cubic-bezier(0, 0, 0.2, 1)\",i.style({transform:\"scale(1)\"}))])),i.transition(\"* => void\",i.animate(\"100ms 25ms linear\",i.style({opacity:0})))]),fadeInItems:i.trigger(\"fadeInItems\",[i.state(\"showing\",i.style({opacity:1})),i.transition(\"void => *\",[i.style({opacity:0}),i.animate(\"400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)\")])])},v=m.fadeInItems,y=m.transformMenu,g=(_.prototype.attach=function(e){void 0===e&&(e={}),this._portal||(this._portal=new a.TemplatePortal(this._template,this._viewContainerRef)),this.detach(),this._outlet||(this._outlet=new a.DomPortalOutlet(this._document.createElement(\"div\"),this._componentFactoryResolver,this._appRef,this._injector));var t=this._template.elementRef.nativeElement;t.parentNode.insertBefore(this._outlet.outletElement,t),this._changeDetectorRef&&this._changeDetectorRef.markForCheck(),this._portal.attach(this._outlet,e),this._attached.next()},_.prototype.detach=function(){this._portal.isAttached&&this._portal.detach()},_.prototype.ngOnDestroy=function(){this._outlet&&this._outlet.dispose()},_.decorators=[{type:u.Directive,args:[{selector:\"ng-template[matMenuContent]\"}]}],_.ctorParameters=function(){return[{type:u.TemplateRef},{type:u.ComponentFactoryResolver},{type:u.ApplicationRef},{type:u.Injector},{type:u.ViewContainerRef},{type:void 0,decorators:[{type:u.Inject,args:[s.DOCUMENT]}]},{type:u.ChangeDetectorRef}]},_);function _(e,t,n,r,i,o,a){this._template=e,this._componentFactoryResolver=t,this._appRef=n,this._injector=r,this._viewContainerRef=i,this._document=o,this._changeDetectorRef=a,this._attached=new c.Subject}function b(){}var w,x=new u.InjectionToken(\"MAT_MENU_PANEL\"),C=l.mixinDisableRipple(l.mixinDisabled(b)),S=(w=C,f.__extends(E,w),E.prototype.focus=function(e,t){void 0===e&&(e=\"program\"),this._focusMonitor?this._focusMonitor.focusVia(this._getHostElement(),e,t):this._getHostElement().focus(t)},E.prototype.ngOnDestroy=function(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete()},E.prototype._getTabIndex=function(){return this.disabled?\"-1\":\"0\"},E.prototype._getHostElement=function(){return this._elementRef.nativeElement},E.prototype._checkDisabled=function(e){this.disabled&&(e.preventDefault(),e.stopPropagation())},E.prototype._handleMouseEnter=function(){this._hovered.next(this)},E.prototype.getLabel=function(){var e=this._elementRef.nativeElement,t=this._document?this._document.TEXT_NODE:3,n=\"\";if(e.childNodes)for(var r=e.childNodes.length,i=0;i<r;i++)e.childNodes[i].nodeType===t&&(n+=e.childNodes[i].textContent);return n.trim()},E.decorators=[{type:u.Component,args:[{moduleId:module.id,selector:\"[mat-menu-item]\",exportAs:\"matMenuItem\",inputs:[\"disabled\",\"disableRipple\"],host:{\"[attr.role]\":\"role\",class:\"mat-menu-item\",\"[class.mat-menu-item-highlighted]\":\"_highlighted\",\"[class.mat-menu-item-submenu-trigger]\":\"_triggersSubmenu\",\"[attr.tabindex]\":\"_getTabIndex()\",\"[attr.aria-disabled]\":\"disabled.toString()\",\"[attr.disabled]\":\"disabled || null\"},changeDetection:u.ChangeDetectionStrategy.OnPush,encapsulation:u.ViewEncapsulation.None,template:'<ng-content></ng-content>\\n<div class=\"mat-menu-ripple\" matRipple\\n     [matRippleDisabled]=\"disableRipple || disabled\"\\n     [matRippleTrigger]=\"_getHostElement()\">\\n</div>\\n'}]}],E.ctorParameters=function(){return[{type:u.ElementRef},{type:void 0,decorators:[{type:u.Inject,args:[s.DOCUMENT]}]},{type:t.FocusMonitor},{type:void 0,decorators:[{type:u.Inject,args:[x]},{type:u.Optional}]}]},E.propDecorators={role:[{type:u.Input}],_checkDisabled:[{type:u.HostListener,args:[\"click\",[\"$event\"]]}],_handleMouseEnter:[{type:u.HostListener,args:[\"mouseenter\"]}]},E);function E(e,t,n,r){var i=w.call(this)||this;return i._elementRef=e,i._focusMonitor=n,i._parentMenu=r,i.role=\"menuitem\",i._hovered=new c.Subject,i._highlighted=!1,i._triggersSubmenu=!1,n&&n.monitor(i._elementRef,!1),r&&r.addItem&&r.addItem(i),i._document=t,i}var O=new u.InjectionToken(\"mat-menu-default-options\",{providedIn:\"root\",factory:k});function k(){return{overlapTrigger:!1,xPosition:\"after\",yPosition:\"below\",backdropClass:\"cdk-overlay-transparent-backdrop\"}}var D=(Object.defineProperty(T.prototype,\"xPosition\",{get:function(){return this._xPosition},set:function(e){\"before\"!==e&&\"after\"!==e&&function(){throw Error('xPosition value must be either \\'before\\' or after\\'.\\n      Example: <mat-menu xPosition=\"before\" #menu=\"matMenu\"></mat-menu>')}(),this._xPosition=e,this.setPositionClasses()},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"yPosition\",{get:function(){return this._yPosition},set:function(e){\"above\"!==e&&\"below\"!==e&&function(){throw Error('yPosition value must be either \\'above\\' or below\\'.\\n      Example: <mat-menu yPosition=\"above\" #menu=\"matMenu\"></mat-menu>')}(),this._yPosition=e,this.setPositionClasses()},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"overlapTrigger\",{get:function(){return this._overlapTrigger},set:function(e){this._overlapTrigger=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"hasBackdrop\",{get:function(){return this._hasBackdrop},set:function(e){this._hasBackdrop=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"panelClass\",{set:function(e){var t=this,n=this._previousPanelClass;n&&n.length&&n.split(\" \").forEach(function(e){t._classList[e]=!1}),(this._previousPanelClass=e)&&e.length&&(e.split(\" \").forEach(function(e){t._classList[e]=!0}),this._elementRef.nativeElement.className=\"\")},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"classList\",{get:function(){return this.panelClass},set:function(e){this.panelClass=e},enumerable:!0,configurable:!0}),T.prototype.ngOnInit=function(){this.setPositionClasses()},T.prototype.ngAfterContentInit=function(){var e=this;this._updateDirectDescendants(),this._keyManager=new t.FocusKeyManager(this._directDescendantItems).withWrap().withTypeAhead(),this._tabSubscription=this._keyManager.tabOut.subscribe(function(){return e.closed.emit(\"tab\")})},T.prototype.ngOnDestroy=function(){this._directDescendantItems.destroy(),this._tabSubscription.unsubscribe(),this.closed.complete()},T.prototype._hovered=function(){return this._directDescendantItems.changes.pipe(o.startWith(this._directDescendantItems),o.switchMap(function(e){return c.merge.apply(void 0,f.__spread(e.map(function(e){return e._hovered})))}))},T.prototype.addItem=function(e){},T.prototype.removeItem=function(e){},T.prototype._handleKeydown=function(e){var t=e.keyCode,n=this._keyManager;switch(t){case r.ESCAPE:r.hasModifierKey(e)||(e.preventDefault(),this.closed.emit(\"keydown\"));break;case r.LEFT_ARROW:this.parentMenu&&\"ltr\"===this.direction&&this.closed.emit(\"keydown\");break;case r.RIGHT_ARROW:this.parentMenu&&\"rtl\"===this.direction&&this.closed.emit(\"keydown\");break;case r.HOME:case r.END:r.hasModifierKey(e)||(t===r.HOME?n.setFirstItemActive():n.setLastItemActive(),e.preventDefault());break;default:t!==r.UP_ARROW&&t!==r.DOWN_ARROW||n.setFocusOrigin(\"keyboard\"),n.onKeydown(e)}},T.prototype.focusFirstItem=function(e){void 0===e&&(e=\"program\");var t=this._keyManager;if(this.lazyContent?this._ngZone.onStable.asObservable().pipe(o.take(1)).subscribe(function(){return t.setFocusOrigin(e).setFirstItemActive()}):t.setFocusOrigin(e).setFirstItemActive(),!t.activeItem&&this._directDescendantItems.length)for(var n=this._directDescendantItems.first._getHostElement().parentElement;n;){if(\"menu\"===n.getAttribute(\"role\")){n.focus();break}n=n.parentElement}},T.prototype.resetActiveItem=function(){this._keyManager.setActiveItem(-1)},T.prototype.setElevation=function(e){var t=\"mat-elevation-z\"+(4+e),n=Object.keys(this._classList).find(function(e){return e.startsWith(\"mat-elevation-z\")});n&&n!==this._previousElevation||(this._previousElevation&&(this._classList[this._previousElevation]=!1),this._classList[t]=!0,this._previousElevation=t)},T.prototype.setPositionClasses=function(e,t){void 0===e&&(e=this.xPosition),void 0===t&&(t=this.yPosition);var n=this._classList;n[\"mat-menu-before\"]=\"before\"===e,n[\"mat-menu-after\"]=\"after\"===e,n[\"mat-menu-above\"]=\"above\"===t,n[\"mat-menu-below\"]=\"below\"===t},T.prototype._startAnimation=function(){this._panelAnimationState=\"enter\"},T.prototype._resetAnimation=function(){this._panelAnimationState=\"void\"},T.prototype._onAnimationDone=function(e){this._animationDone.next(e),this._isAnimating=!1},T.prototype._onAnimationStart=function(e){this._isAnimating=!0,\"enter\"===e.toState&&0===this._keyManager.activeItemIndex&&(e.element.scrollTop=0)},T.prototype._updateDirectDescendants=function(){var t=this;this._allItems.changes.pipe(o.startWith(this._allItems)).subscribe(function(e){t._directDescendantItems.reset(e.filter(function(e){return e._parentMenu===t})),t._directDescendantItems.notifyOnChanges()})},T.ctorParameters=function(){return[{type:u.ElementRef},{type:u.NgZone},{type:void 0,decorators:[{type:u.Inject,args:[O]}]}]},T.propDecorators={_allItems:[{type:u.ContentChildren,args:[S,{descendants:!0}]}],backdropClass:[{type:u.Input}],xPosition:[{type:u.Input}],yPosition:[{type:u.Input}],templateRef:[{type:u.ViewChild,args:[u.TemplateRef,{static:!1}]}],items:[{type:u.ContentChildren,args:[S]}],lazyContent:[{type:u.ContentChild,args:[g,{static:!1}]}],overlapTrigger:[{type:u.Input}],hasBackdrop:[{type:u.Input}],panelClass:[{type:u.Input,args:[\"class\"]}],classList:[{type:u.Input}],closed:[{type:u.Output}],close:[{type:u.Output}]},T);function T(e,t,n){this._elementRef=e,this._ngZone=t,this._defaultOptions=n,this._xPosition=this._defaultOptions.xPosition,this._yPosition=this._defaultOptions.yPosition,this._directDescendantItems=new u.QueryList,this._tabSubscription=c.Subscription.EMPTY,this._classList={},this._panelAnimationState=\"void\",this._animationDone=new c.Subject,this.backdropClass=this._defaultOptions.backdropClass,this._overlapTrigger=this._defaultOptions.overlapTrigger,this._hasBackdrop=this._defaultOptions.hasBackdrop,this.closed=new u.EventEmitter,this.close=this.closed}var I,P=(I=D,f.__extends(A,I),A);function A(){return null!==I&&I.apply(this,arguments)||this}var M,R=(M=P,f.__extends(N,M),N.decorators=[{type:u.Component,args:[{moduleId:module.id,selector:\"mat-menu\",template:'<ng-template>\\n  <div\\n    class=\"mat-menu-panel\"\\n    [ngClass]=\"_classList\"\\n    (keydown)=\"_handleKeydown($event)\"\\n    (click)=\"closed.emit(\\'click\\')\"\\n    [@transformMenu]=\"_panelAnimationState\"\\n    (@transformMenu.start)=\"_onAnimationStart($event)\"\\n    (@transformMenu.done)=\"_onAnimationDone($event)\"\\n    tabindex=\"-1\"\\n    role=\"menu\">\\n    <div class=\"mat-menu-content\">\\n      <ng-content></ng-content>\\n    </div>\\n  </div>\\n</ng-template>\\n',changeDetection:u.ChangeDetectionStrategy.OnPush,encapsulation:u.ViewEncapsulation.None,exportAs:\"matMenu\",animations:[m.transformMenu,m.fadeInItems],providers:[{provide:x,useExisting:P},{provide:P,useExisting:N}],styles:['.mat-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 48px);border-radius:4px;outline:0;min-height:64px}.mat-menu-panel.ng-animating{pointer-events:none}@media(-ms-high-contrast: active){.mat-menu-panel{outline:solid 1px}}.mat-menu-content:not(:empty){padding-top:8px;padding-bottom:8px}.mat-menu-item{-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;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}.mat-menu-item::-moz-focus-inner{border:0}.mat-menu-item[disabled]{cursor:default}[dir=rtl] .mat-menu-item{text-align:right}.mat-menu-item .mat-icon{margin-right:16px;vertical-align:middle}.mat-menu-item .mat-icon svg{vertical-align:top}[dir=rtl] .mat-menu-item .mat-icon{margin-left:16px;margin-right:0}.mat-menu-item[disabled]{pointer-events:none}@media(-ms-high-contrast: active){.mat-menu-item.cdk-program-focused,.mat-menu-item.cdk-keyboard-focused,.mat-menu-item-highlighted{outline:dotted 1px}}.mat-menu-item-submenu-trigger{padding-right:32px}.mat-menu-item-submenu-trigger::after{width:0;height:0;border-style:solid;border-width:5px 0 5px 5px;border-color:transparent transparent transparent currentColor;content:\"\";display:inline-block;position:absolute;top:50%;right:16px;transform:translateY(-50%)}[dir=rtl] .mat-menu-item-submenu-trigger{padding-right:16px;padding-left:32px}[dir=rtl] .mat-menu-item-submenu-trigger::after{right:auto;left:16px;transform:rotateY(180deg) translateY(-50%)}button.mat-menu-item{width:100%}.mat-menu-item .mat-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}/*# sourceMappingURL=menu.css.map */\\n']}]}],N.ctorParameters=function(){return[{type:u.ElementRef},{type:u.NgZone},{type:void 0,decorators:[{type:u.Inject,args:[O]}]}]},N);function N(e,t,n){return M.call(this,e,t,n)||this}var j=new u.InjectionToken(\"mat-menu-scroll-strategy\");function F(e){return function(){return e.scrollStrategies.reposition()}}var L={provide:j,deps:[d.Overlay],useFactory:F},V=h.normalizePassiveListenerOptions({passive:!0}),B=(Object.defineProperty(U.prototype,\"_deprecatedMatMenuTriggerFor\",{get:function(){return this.menu},set:function(e){this.menu=e},enumerable:!0,configurable:!0}),Object.defineProperty(U.prototype,\"menu\",{get:function(){return this._menu},set:function(e){var t=this;e!==this._menu&&(this._menu=e,this._menuCloseSubscription.unsubscribe(),e&&(this._menuCloseSubscription=e.close.asObservable().subscribe(function(e){t._destroyMenu(),\"click\"!==e&&\"tab\"!==e||!t._parentMenu||t._parentMenu.closed.emit(e)})))},enumerable:!0,configurable:!0}),U.prototype.ngAfterContentInit=function(){this._checkMenu(),this._handleHover()},U.prototype.ngOnDestroy=function(){this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null),this._element.nativeElement.removeEventListener(\"touchstart\",this._handleTouchStart,V),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._hoverSubscription.unsubscribe()},Object.defineProperty(U.prototype,\"menuOpen\",{get:function(){return this._menuOpen},enumerable:!0,configurable:!0}),Object.defineProperty(U.prototype,\"dir\",{get:function(){return this._dir&&\"rtl\"===this._dir.value?\"rtl\":\"ltr\"},enumerable:!0,configurable:!0}),U.prototype.triggersSubmenu=function(){return!(!this._menuItemInstance||!this._parentMenu)},U.prototype.toggleMenu=function(){return this._menuOpen?this.closeMenu():this.openMenu()},U.prototype.openMenu=function(){var e=this;if(!this._menuOpen){this._checkMenu();var t=this._createOverlay(),n=t.getConfig();this._setPosition(n.positionStrategy),n.hasBackdrop=null==this.menu.hasBackdrop?!this.triggersSubmenu():this.menu.hasBackdrop,t.attach(this._getPortal()),this.menu.lazyContent&&this.menu.lazyContent.attach(this.menuData),this._closingActionsSubscription=this._menuClosingActions().subscribe(function(){return e.closeMenu()}),this._initMenu(),this.menu instanceof P&&this.menu._startAnimation()}},U.prototype.closeMenu=function(){this.menu.close.emit()},U.prototype.focus=function(e,t){void 0===e&&(e=\"program\"),this._focusMonitor?this._focusMonitor.focusVia(this._element,e,t):this._element.nativeElement.focus(t)},U.prototype._destroyMenu=function(){var e=this;if(this._overlayRef&&this.menuOpen){var t=this.menu;this._closingActionsSubscription.unsubscribe(),this._overlayRef.detach(),t instanceof P?(t._resetAnimation(),t.lazyContent?t._animationDone.pipe(o.filter(function(e){return\"void\"===e.toState}),o.take(1),o.takeUntil(t.lazyContent._attached)).subscribe({next:function(){return t.lazyContent.detach()},complete:function(){return e._setIsMenuOpen(!1)}}):this._setIsMenuOpen(!1)):(this._setIsMenuOpen(!1),t.lazyContent&&t.lazyContent.detach()),this._restoreFocus()}},U.prototype._initMenu=function(){this.menu.parentMenu=this.triggersSubmenu()?this._parentMenu:void 0,this.menu.direction=this.dir,this._setMenuElevation(),this._setIsMenuOpen(!0),this.menu.focusFirstItem(this._openedBy||\"program\")},U.prototype._setMenuElevation=function(){if(this.menu.setElevation){for(var e=0,t=this.menu.parentMenu;t;)e++,t=t.parentMenu;this.menu.setElevation(e)}},U.prototype._restoreFocus=function(){this.restoreFocus&&(this._openedBy?this.triggersSubmenu()||this.focus(this._openedBy):this.focus()),this._openedBy=null},U.prototype._setIsMenuOpen=function(e){this._menuOpen=e,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this.triggersSubmenu()&&(this._menuItemInstance._highlighted=e)},U.prototype._checkMenu=function(){this.menu||function(){throw Error('matMenuTriggerFor: must pass in an mat-menu instance.\\n\\n    Example:\\n      <mat-menu #menu=\"matMenu\"></mat-menu>\\n      <button [matMenuTriggerFor]=\"menu\"></button>')}()},U.prototype._createOverlay=function(){if(!this._overlayRef){var e=this._getOverlayConfig();this._subscribeToPositions(e.positionStrategy),this._overlayRef=this._overlay.create(e),this._overlayRef.keydownEvents().subscribe()}return this._overlayRef},U.prototype._getOverlayConfig=function(){return new d.OverlayConfig({positionStrategy:this._overlay.position().flexibleConnectedTo(this._element).withLockedPosition().withTransformOriginOn(\".mat-menu-panel, .mat-mdc-menu-panel\"),backdropClass:this.menu.backdropClass||\"cdk-overlay-transparent-backdrop\",scrollStrategy:this._scrollStrategy(),direction:this._dir})},U.prototype._subscribeToPositions=function(e){var r=this;this.menu.setPositionClasses&&e.positionChanges.subscribe(function(e){var t=\"start\"===e.connectionPair.overlayX?\"after\":\"before\",n=\"top\"===e.connectionPair.overlayY?\"below\":\"above\";r.menu.setPositionClasses(t,n)})},U.prototype._setPosition=function(e){var t=f.__read(\"before\"===this.menu.xPosition?[\"end\",\"start\"]:[\"start\",\"end\"],2),n=t[0],r=t[1],i=f.__read(\"above\"===this.menu.yPosition?[\"bottom\",\"top\"]:[\"top\",\"bottom\"],2),o=i[0],a=i[1],s=f.__read([o,a],2),l=s[0],u=s[1],c=f.__read([n,r],2),p=c[0],d=c[1],h=0;this.triggersSubmenu()?(d=n=\"before\"===this.menu.xPosition?\"start\":\"end\",r=p=\"end\"===n?\"start\":\"end\",h=\"bottom\"===o?8:-8):this.menu.overlapTrigger||(l=\"top\"===o?\"bottom\":\"top\",u=\"top\"===a?\"bottom\":\"top\"),e.withPositions([{originX:n,originY:l,overlayX:p,overlayY:o,offsetY:h},{originX:r,originY:l,overlayX:d,overlayY:o,offsetY:h},{originX:n,originY:u,overlayX:p,overlayY:a,offsetY:-h},{originX:r,originY:u,overlayX:d,overlayY:a,offsetY:-h}])},U.prototype._menuClosingActions=function(){var t=this,e=this._overlayRef.backdropClick(),n=this._overlayRef.detachments(),r=this._parentMenu?this._parentMenu.closed:c.of(),i=this._parentMenu?this._parentMenu._hovered().pipe(o.filter(function(e){return e!==t._menuItemInstance}),o.filter(function(){return t._menuOpen})):c.of();return c.merge(e,r,i,n)},U.prototype._handleMousedown=function(e){t.isFakeMousedownFromScreenReader(e)||(this._openedBy=0===e.button?\"mouse\":null,this.triggersSubmenu()&&e.preventDefault())},U.prototype._handleKeydown=function(e){var t=e.keyCode;this.triggersSubmenu()&&(t===r.RIGHT_ARROW&&\"ltr\"===this.dir||t===r.LEFT_ARROW&&\"rtl\"===this.dir)&&this.openMenu()},U.prototype._handleClick=function(e){this.triggersSubmenu()?(e.stopPropagation(),this.openMenu()):this.toggleMenu()},U.prototype._handleHover=function(){var t=this;this.triggersSubmenu()&&(this._hoverSubscription=this._parentMenu._hovered().pipe(o.filter(function(e){return e===t._menuItemInstance&&!e.disabled}),o.delay(0,c.asapScheduler)).subscribe(function(){t._openedBy=\"mouse\",t.menu instanceof P&&t.menu._isAnimating?t.menu._animationDone.pipe(o.take(1),o.delay(0,c.asapScheduler),o.takeUntil(t._parentMenu._hovered())).subscribe(function(){return t.openMenu()}):t.openMenu()}))},U.prototype._getPortal=function(){return this._portal&&this._portal.templateRef===this.menu.templateRef||(this._portal=new a.TemplatePortal(this.menu.templateRef,this._viewContainerRef)),this._portal},U.decorators=[{type:u.Directive,args:[{selector:\"[mat-menu-trigger-for], [matMenuTriggerFor]\",host:{class:\"mat-menu-trigger\",\"aria-haspopup\":\"true\",\"[attr.aria-expanded]\":\"menuOpen || null\",\"(mousedown)\":\"_handleMousedown($event)\",\"(keydown)\":\"_handleKeydown($event)\",\"(click)\":\"_handleClick($event)\"},exportAs:\"matMenuTrigger\"}]}],U.ctorParameters=function(){return[{type:d.Overlay},{type:u.ElementRef},{type:u.ViewContainerRef},{type:void 0,decorators:[{type:u.Inject,args:[j]}]},{type:P,decorators:[{type:u.Optional}]},{type:S,decorators:[{type:u.Optional},{type:u.Self}]},{type:p.Directionality,decorators:[{type:u.Optional}]},{type:t.FocusMonitor}]},U.propDecorators={_deprecatedMatMenuTriggerFor:[{type:u.Input,args:[\"mat-menu-trigger-for\"]}],menu:[{type:u.Input,args:[\"matMenuTriggerFor\"]}],menuData:[{type:u.Input,args:[\"matMenuTriggerData\"]}],restoreFocus:[{type:u.Input,args:[\"matMenuTriggerRestoreFocus\"]}],menuOpened:[{type:u.Output}],onMenuOpen:[{type:u.Output}],menuClosed:[{type:u.Output}],onMenuClose:[{type:u.Output}]},U);function U(e,t,n,r,i,o,a,s){var l=this;this._overlay=e,this._element=t,this._viewContainerRef=n,this._parentMenu=i,this._menuItemInstance=o,this._dir=a,this._focusMonitor=s,this._overlayRef=null,this._menuOpen=!1,this._closingActionsSubscription=c.Subscription.EMPTY,this._hoverSubscription=c.Subscription.EMPTY,this._menuCloseSubscription=c.Subscription.EMPTY,this._handleTouchStart=function(){return l._openedBy=\"touch\"},this._openedBy=null,this.restoreFocus=!0,this.menuOpened=new u.EventEmitter,this.onMenuOpen=this.menuOpened,this.menuClosed=new u.EventEmitter,this.onMenuClose=this.menuClosed,t.nativeElement.addEventListener(\"touchstart\",this._handleTouchStart,V),o&&(o._triggersSubmenu=this.triggersSubmenu()),this._scrollStrategy=r}var z=(q.decorators=[{type:u.NgModule,args:[{exports:[B,g,l.MatCommonModule],declarations:[B,g],providers:[L]}]}],q);function q(){}var H=(W.decorators=[{type:u.NgModule,args:[{imports:[s.CommonModule,l.MatCommonModule,l.MatRippleModule,d.OverlayModule,z],exports:[R,S,z],declarations:[R,S],providers:[L]}]}],W);function W(){}e.ɵangular_material_src_material_menu_menu_a=k,e.ɵangular_material_src_material_menu_menu_b=F,e.ɵangular_material_src_material_menu_menu_c=L,e.MatMenu=P,e.MAT_MENU_DEFAULT_OPTIONS=O,e._MatMenu=R,e._MatMenuBase=D,e.MatMenuItem=S,e.MatMenuTrigger=B,e.MAT_MENU_SCROLL_STRATEGY=j,e.MAT_MENU_PANEL=x,e._MatMenuDirectivesModule=z,e.MatMenuModule=H,e.matMenuAnimations=m,e.fadeInItems=v,e.transformMenu=y,e.MatMenuContent=g,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/button\"),require(\"@angular/material/select\"),require(\"@angular/material/tooltip\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"rxjs\"),require(\"@angular/material/core\")):System.registerDynamic(\"npm:@angular/material/bundles/material-paginator.umd.js\",[\"@angular/common\",\"@angular/core\",\"@angular/material/button\",\"@angular/material/select\",\"@angular/material/tooltip\",\"tslib\",\"@angular/cdk/coercion\",\"rxjs\",\"@angular/material/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/button\"),e(\"@angular/material/select\"),e(\"@angular/material/tooltip\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"rxjs\"),e(\"@angular/material/core\"))})}(0,function(e,t,r,n,i,o,a,s,l,u){\"use strict\";var c=(p.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],p.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new p},token:p,providedIn:\"root\"}),p);function p(){this.changes=new l.Subject,this.itemsPerPageLabel=\"Items per page:\",this.nextPageLabel=\"Next page\",this.previousPageLabel=\"Previous page\",this.firstPageLabel=\"First page\",this.lastPageLabel=\"Last page\",this.getRangeLabel=function(e,t,n){if(0==n||0==t)return\"0 of \"+n;var r=e*t;return 1+r+\" – \"+(r<(n=Math.max(n,0))?Math.min(r+t,n):r+t)+\" of \"+n}}function d(e){return e||new c}function h(){}function f(){}var m,v={provide:c,deps:[[new r.Optional,new r.SkipSelf,c]],useFactory:d},y=u.mixinDisabled(u.mixinInitialized(f)),g=(m=y,a.__extends(_,m),Object.defineProperty(_.prototype,\"pageIndex\",{get:function(){return this._pageIndex},set:function(e){this._pageIndex=Math.max(s.coerceNumberProperty(e),0),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"length\",{get:function(){return this._length},set:function(e){this._length=s.coerceNumberProperty(e),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"pageSize\",{get:function(){return this._pageSize},set:function(e){this._pageSize=Math.max(s.coerceNumberProperty(e),0),this._updateDisplayedPageSizeOptions()},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"pageSizeOptions\",{get:function(){return this._pageSizeOptions},set:function(e){this._pageSizeOptions=(e||[]).map(function(e){return s.coerceNumberProperty(e)}),this._updateDisplayedPageSizeOptions()},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"hidePageSize\",{get:function(){return this._hidePageSize},set:function(e){this._hidePageSize=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"showFirstLastButtons\",{get:function(){return this._showFirstLastButtons},set:function(e){this._showFirstLastButtons=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),_.prototype.ngOnInit=function(){this._initialized=!0,this._updateDisplayedPageSizeOptions(),this._markInitialized()},_.prototype.ngOnDestroy=function(){this._intlChanges.unsubscribe()},_.prototype.nextPage=function(){if(this.hasNextPage()){var e=this.pageIndex;this.pageIndex++,this._emitPageEvent(e)}},_.prototype.previousPage=function(){if(this.hasPreviousPage()){var e=this.pageIndex;this.pageIndex--,this._emitPageEvent(e)}},_.prototype.firstPage=function(){if(this.hasPreviousPage()){var e=this.pageIndex;this.pageIndex=0,this._emitPageEvent(e)}},_.prototype.lastPage=function(){if(this.hasNextPage()){var e=this.pageIndex;this.pageIndex=this.getNumberOfPages()-1,this._emitPageEvent(e)}},_.prototype.hasPreviousPage=function(){return 1<=this.pageIndex&&0!=this.pageSize},_.prototype.hasNextPage=function(){var e=this.getNumberOfPages()-1;return this.pageIndex<e&&0!=this.pageSize},_.prototype.getNumberOfPages=function(){return this.pageSize?Math.ceil(this.length/this.pageSize):0},_.prototype._changePageSize=function(e){var t=this.pageIndex*this.pageSize,n=this.pageIndex;this.pageIndex=Math.floor(t/e)||0,this.pageSize=e,this._emitPageEvent(n)},_.prototype._nextButtonsDisabled=function(){return this.disabled||!this.hasNextPage()},_.prototype._previousButtonsDisabled=function(){return this.disabled||!this.hasPreviousPage()},_.prototype._updateDisplayedPageSizeOptions=function(){this._initialized&&(this.pageSize||(this._pageSize=0!=this.pageSizeOptions.length?this.pageSizeOptions[0]:50),this._displayedPageSizeOptions=this.pageSizeOptions.slice(),-1===this._displayedPageSizeOptions.indexOf(this.pageSize)&&this._displayedPageSizeOptions.push(this.pageSize),this._displayedPageSizeOptions.sort(function(e,t){return e-t}),this._changeDetectorRef.markForCheck())},_.prototype._emitPageEvent=function(e){this.page.emit({previousPageIndex:e,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})},_.decorators=[{type:r.Component,args:[{moduleId:module.id,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        [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 *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:r.ChangeDetectionStrategy.OnPush,encapsulation:r.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;min-height:56px;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)}/*# sourceMappingURL=paginator.css.map */\\n\"]}]}],_.ctorParameters=function(){return[{type:c},{type:r.ChangeDetectorRef}]},_.propDecorators={color:[{type:r.Input}],pageIndex:[{type:r.Input}],length:[{type:r.Input}],pageSize:[{type:r.Input}],pageSizeOptions:[{type:r.Input}],hidePageSize:[{type:r.Input}],showFirstLastButtons:[{type:r.Input}],page:[{type:r.Output}]},_);function _(e,t){var n=m.call(this)||this;return n._intl=e,n._changeDetectorRef=t,n._pageIndex=0,n._length=0,n._pageSizeOptions=[],n._hidePageSize=!1,n._showFirstLastButtons=!1,n.page=new r.EventEmitter,n._intlChanges=e.changes.subscribe(function(){return n._changeDetectorRef.markForCheck()}),n}var b=(w.decorators=[{type:r.NgModule,args:[{imports:[t.CommonModule,n.MatButtonModule,i.MatSelectModule,o.MatTooltipModule],exports:[g],declarations:[g],providers:[v]}]}],w);function w(){}e.MatPaginatorModule=b,e.PageEvent=h,e.MatPaginator=g,e.MatPaginatorIntl=c,e.MAT_PAGINATOR_INTL_PROVIDER_FACTORY=d,e.MAT_PAGINATOR_INTL_PROVIDER=v,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/common\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-progress-bar.umd.js\",[\"@angular/core\",\"@angular/common\",\"@angular/material/core\",\"tslib\",\"rxjs\",\"rxjs/operators\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/common\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,a,n,t,r,s,i,o){\"use strict\";function l(e){this._elementRef=e}var u=t.mixinColor(l,\"primary\"),c=new a.InjectionToken(\"mat-progress-bar-location\",{providedIn:\"root\",factory:p});function p(){var e=a.inject(n.DOCUMENT),t=e?e.location:null;return{getPathname:function(){return t?t.pathname+t.search:\"\"}}}var d,h=0,f=(d=u,r.__extends(m,d),Object.defineProperty(m.prototype,\"value\",{get:function(){return this._value},set:function(e){this._value=v(e||0),this._isNoopAnimation&&this._emitAnimationEnd()},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"bufferValue\",{get:function(){return this._bufferValue},set:function(e){this._bufferValue=v(e||0)},enumerable:!0,configurable:!0}),m.prototype._primaryTransform=function(){return{transform:\"scaleX(\"+this.value/100+\")\"}},m.prototype._bufferTransform=function(){if(\"buffer\"===this.mode)return{transform:\"scaleX(\"+this.bufferValue/100+\")\"}},m.prototype.ngAfterViewInit=function(){var e=this;this._isNoopAnimation||this._ngZone.runOutsideAngular(function(){var t=e._primaryValueBar.nativeElement;e._animationEndSubscription=s.fromEvent(t,\"transitionend\").pipe(i.filter(function(e){return e.target===t})).subscribe(function(){return e._ngZone.run(function(){return e._emitAnimationEnd()})})})},m.prototype.ngOnDestroy=function(){this._animationEndSubscription.unsubscribe()},m.prototype._emitAnimationEnd=function(){\"determinate\"!==this.mode&&\"buffer\"!==this.mode||this.animationEnd.next({value:this.value})},m.decorators=[{type:a.Component,args:[{moduleId:module.id,selector:\"mat-progress-bar\",exportAs:\"matProgressBar\",host:{role:\"progressbar\",\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\",\"[attr.aria-valuenow]\":'(mode === \"indeterminate\" || mode === \"query\") ? null : value',\"[attr.mode]\":\"mode\",class:\"mat-progress-bar\",\"[class._mat-animation-noopable]\":\"_isNoopAnimation\"},inputs:[\"color\"],template:'\\x3c!--\\n  The background div is named as such because it appears below the other divs and is not sized based\\n  on values.\\n--\\x3e\\n<svg width=\"100%\" height=\"4\" focusable=\"false\" class=\"mat-progress-bar-background mat-progress-bar-element\">\\n  <defs>\\n    <pattern [id]=\"progressbarId\" x=\"4\" y=\"0\" width=\"8\" height=\"4\" patternUnits=\"userSpaceOnUse\">\\n      <circle cx=\"2\" cy=\"2\" r=\"2\"/>\\n    </pattern>\\n  </defs>\\n  <rect [attr.fill]=\"_rectangleFillValue\" width=\"100%\" height=\"100%\"/>\\n</svg>\\n<div class=\"mat-progress-bar-buffer mat-progress-bar-element\" [ngStyle]=\"_bufferTransform()\"></div>\\n<div class=\"mat-progress-bar-primary mat-progress-bar-fill mat-progress-bar-element\" [ngStyle]=\"_primaryTransform()\" #primaryValueBar></div>\\n<div class=\"mat-progress-bar-secondary mat-progress-bar-fill mat-progress-bar-element\"></div>\\n',changeDetection:a.ChangeDetectionStrategy.OnPush,encapsulation:a.ViewEncapsulation.None,styles:['.mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}@media(-ms-high-contrast: active){.mat-progress-bar .mat-progress-bar-background{display:none}}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}@media(-ms-high-contrast: active){.mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}@media(-ms-high-contrast: active){.mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\"\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition:none}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}/*# sourceMappingURL=progress-bar.css.map */\\n']}]}],m.ctorParameters=function(){return[{type:a.ElementRef},{type:a.NgZone},{type:String,decorators:[{type:a.Optional},{type:a.Inject,args:[o.ANIMATION_MODULE_TYPE]}]},{type:void 0,decorators:[{type:a.Optional},{type:a.Inject,args:[c]}]}]},m.propDecorators={value:[{type:a.Input}],bufferValue:[{type:a.Input}],_primaryValueBar:[{type:a.ViewChild,args:[\"primaryValueBar\",{static:!1}]}],animationEnd:[{type:a.Output}],mode:[{type:a.Input}]},m);function m(e,t,n,r){var i=d.call(this,e)||this;i._elementRef=e,i._ngZone=t,i._animationMode=n,i._isNoopAnimation=!1,i._value=0,i._bufferValue=0,i.animationEnd=new a.EventEmitter,i._animationEndSubscription=s.Subscription.EMPTY,i.mode=\"determinate\",i.progressbarId=\"mat-progress-bar-\"+h++;var o=r?r.getPathname().split(\"#\")[0]:\"\";return i._rectangleFillValue=\"url('\"+o+\"#\"+i.progressbarId+\"')\",i._isNoopAnimation=\"NoopAnimations\"===n,i}function v(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=100),Math.max(t,Math.min(n,e))}var y=(g.decorators=[{type:a.NgModule,args:[{imports:[n.CommonModule,t.MatCommonModule],exports:[f,t.MatCommonModule],declarations:[f]}]}],g);function g(){}e.MatProgressBarModule=y,e.MAT_PROGRESS_BAR_LOCATION=c,e.MAT_PROGRESS_BAR_LOCATION_FACTORY=p,e.MatProgressBar=f,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/common\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/platform\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-progress-spinner.umd.js\",[\"@angular/core\",\"@angular/common\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/cdk/platform\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/common\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/platform\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,n,r,i,o,a,s){\"use strict\";function l(e){this._elementRef=e}var u=r.mixinColor(l,\"primary\"),c=new t.InjectionToken(\"mat-progress-spinner-default-options\",{providedIn:\"root\",factory:p});function p(){return{diameter:100}}var d,h=(d=u,i.__extends(f,d),Object.defineProperty(f.prototype,\"diameter\",{get:function(){return this._diameter},set:function(e){this._diameter=o.coerceNumberProperty(e),!this._fallbackAnimation&&this._styleRoot&&this._attachStyleNode()},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"strokeWidth\",{get:function(){return this._strokeWidth||this.diameter/10},set:function(e){this._strokeWidth=o.coerceNumberProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"value\",{get:function(){return\"determinate\"===this.mode?this._value:0},set:function(e){this._value=Math.max(0,Math.min(100,o.coerceNumberProperty(e)))},enumerable:!0,configurable:!0}),f.prototype.ngOnInit=function(){var e=this._elementRef.nativeElement;this._styleRoot=function(e,t){if(\"undefined\"!=typeof window){var n=t.head;if(n&&(n.createShadowRoot||n.attachShadow)){var r=e.getRootNode?e.getRootNode():null;if(r instanceof window.ShadowRoot)return r}}return null}(e,this._document)||this._document.head,this._attachStyleNode();var t=\"mat-progress-spinner-indeterminate\"+(this._fallbackAnimation?\"-fallback\":\"\")+\"-animation\";e.classList.add(t)},Object.defineProperty(f.prototype,\"_circleRadius\",{get:function(){return(this.diameter-10)/2},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"_viewBox\",{get:function(){var e=2*this._circleRadius+this.strokeWidth;return\"0 0 \"+e+\" \"+e},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"_strokeCircumference\",{get:function(){return 2*Math.PI*this._circleRadius},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"_strokeDashOffset\",{get:function(){return\"determinate\"===this.mode?this._strokeCircumference*(100-this._value)/100:this._fallbackAnimation&&\"indeterminate\"===this.mode?.2*this._strokeCircumference:null},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"_circleStrokeWidth\",{get:function(){return this.strokeWidth/this.diameter*100},enumerable:!0,configurable:!0}),f.prototype._attachStyleNode=function(){var e=this._styleRoot,t=this._diameter,n=f._diameters,r=n.get(e);if(!r||!r.has(t)){var i=this._document.createElement(\"style\");i.setAttribute(\"mat-spinner-animation\",t+\"\"),i.textContent=this._getAnimationText(),e.appendChild(i),r||(r=new Set,n.set(e,r)),r.add(t)}},f.prototype._getAnimationText=function(){return\"\\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\\n    0%      { stroke-dashoffset: START_VALUE;  transform: rotate(0); }\\n    12.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(0); }\\n    12.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(72.5deg); }\\n    25%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(72.5deg); }\\n\\n    25.0001%   { stroke-dashoffset: START_VALUE;  transform: rotate(270deg); }\\n    37.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(270deg); }\\n    37.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(161.5deg); }\\n    50%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(161.5deg); }\\n\\n    50.0001%  { stroke-dashoffset: START_VALUE;  transform: rotate(180deg); }\\n    62.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(180deg); }\\n    62.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(251.5deg); }\\n    75%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(251.5deg); }\\n\\n    75.0001%  { stroke-dashoffset: START_VALUE;  transform: rotate(90deg); }\\n    87.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(90deg); }\\n    87.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(341.5deg); }\\n    100%    { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(341.5deg); }\\n  }\\n\".replace(/START_VALUE/g,\"\"+.95*this._strokeCircumference).replace(/END_VALUE/g,\"\"+.2*this._strokeCircumference).replace(/DIAMETER/g,\"\"+this.diameter)},f._diameters=new WeakMap,f.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-progress-spinner\",exportAs:\"matProgressSpinner\",host:{role:\"progressbar\",class:\"mat-progress-spinner\",\"[class._mat-animation-noopable]\":\"_noopAnimations\",\"[style.width.px]\":\"diameter\",\"[style.height.px]\":\"diameter\",\"[attr.aria-valuemin]\":'mode === \"determinate\" ? 0 : null',\"[attr.aria-valuemax]\":'mode === \"determinate\" ? 100 : null',\"[attr.aria-valuenow]\":'mode === \"determinate\" ? value : null',\"[attr.mode]\":\"mode\"},inputs:[\"color\"],template:'\\x3c!--\\n  preserveAspectRatio of xMidYMid meet as the center of the viewport is the circle\\'s\\n  center. The center of the circle will remain at the center of the mat-progress-spinner\\n  element containing the SVG. `focusable=\"false\"` prevents IE from allowing the user to\\n  tab into the SVG element.\\n--\\x3e\\n\\n<svg\\n  [style.width.px]=\"diameter\"\\n  [style.height.px]=\"diameter\"\\n  [attr.viewBox]=\"_viewBox\"\\n  preserveAspectRatio=\"xMidYMid meet\"\\n  focusable=\"false\"\\n  [ngSwitch]=\"mode === \\'indeterminate\\'\">\\n\\n  \\x3c!--\\n    Technically we can reuse the same `circle` element, however Safari has an issue that breaks\\n    the SVG rendering in determinate mode, after switching between indeterminate and determinate.\\n    Using a different element avoids the issue. An alternative to this is adding `display: none`\\n    for a split second and then removing it when switching between modes, but it\\'s hard to know\\n    for how long to hide the element and it can cause the UI to blink.\\n  --\\x3e\\n  <circle\\n    *ngSwitchCase=\"true\"\\n    cx=\"50%\"\\n    cy=\"50%\"\\n    [attr.r]=\"_circleRadius\"\\n    [style.animation-name]=\"\\'mat-progress-spinner-stroke-rotate-\\' + diameter\"\\n    [style.stroke-dashoffset.px]=\"_strokeDashOffset\"\\n    [style.stroke-dasharray.px]=\"_strokeCircumference\"\\n    [style.stroke-width.%]=\"_circleStrokeWidth\"></circle>\\n\\n  <circle\\n    *ngSwitchCase=\"false\"\\n    cx=\"50%\"\\n    cy=\"50%\"\\n    [attr.r]=\"_circleRadius\"\\n    [style.stroke-dashoffset.px]=\"_strokeDashOffset\"\\n    [style.stroke-dasharray.px]=\"_strokeCircumference\"\\n    [style.stroke-width.%]=\"_circleStrokeWidth\"></circle>\\n</svg>\\n',changeDetection:t.ChangeDetectionStrategy.OnPush,encapsulation:t.ViewEncapsulation.None,styles:[\".mat-progress-spinner{display:block;position:relative}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate]{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate]{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate]{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate]{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}/*# sourceMappingURL=progress-spinner.css.map */\\n\"]}]}],f.ctorParameters=function(){return[{type:t.ElementRef},{type:a.Platform},{type:void 0,decorators:[{type:t.Optional},{type:t.Inject,args:[n.DOCUMENT]}]},{type:String,decorators:[{type:t.Optional},{type:t.Inject,args:[s.ANIMATION_MODULE_TYPE]}]},{type:void 0,decorators:[{type:t.Inject,args:[c]}]}]},f.propDecorators={diameter:[{type:t.Input}],strokeWidth:[{type:t.Input}],mode:[{type:t.Input}],value:[{type:t.Input}]},f);function f(e,t,n,r,i){var o=d.call(this,e)||this;o._elementRef=e,o._document=n,o._diameter=100,o._value=0,o._fallbackAnimation=!1,o.mode=\"determinate\";var a=f._diameters;return a.has(n.head)||a.set(n.head,new Set([100])),o._fallbackAnimation=t.EDGE||t.TRIDENT,o._noopAnimations=\"NoopAnimations\"===r&&!!i&&!i._forceAnimations,i&&(i.diameter&&(o.diameter=i.diameter),i.strokeWidth&&(o.strokeWidth=i.strokeWidth)),o}var m,v=(m=h,i.__extends(y,m),y.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-spinner\",host:{role:\"progressbar\",mode:\"indeterminate\",class:\"mat-spinner mat-progress-spinner\",\"[class._mat-animation-noopable]\":\"_noopAnimations\",\"[style.width.px]\":\"diameter\",\"[style.height.px]\":\"diameter\"},inputs:[\"color\"],template:'\\x3c!--\\n  preserveAspectRatio of xMidYMid meet as the center of the viewport is the circle\\'s\\n  center. The center of the circle will remain at the center of the mat-progress-spinner\\n  element containing the SVG. `focusable=\"false\"` prevents IE from allowing the user to\\n  tab into the SVG element.\\n--\\x3e\\n\\n<svg\\n  [style.width.px]=\"diameter\"\\n  [style.height.px]=\"diameter\"\\n  [attr.viewBox]=\"_viewBox\"\\n  preserveAspectRatio=\"xMidYMid meet\"\\n  focusable=\"false\"\\n  [ngSwitch]=\"mode === \\'indeterminate\\'\">\\n\\n  \\x3c!--\\n    Technically we can reuse the same `circle` element, however Safari has an issue that breaks\\n    the SVG rendering in determinate mode, after switching between indeterminate and determinate.\\n    Using a different element avoids the issue. An alternative to this is adding `display: none`\\n    for a split second and then removing it when switching between modes, but it\\'s hard to know\\n    for how long to hide the element and it can cause the UI to blink.\\n  --\\x3e\\n  <circle\\n    *ngSwitchCase=\"true\"\\n    cx=\"50%\"\\n    cy=\"50%\"\\n    [attr.r]=\"_circleRadius\"\\n    [style.animation-name]=\"\\'mat-progress-spinner-stroke-rotate-\\' + diameter\"\\n    [style.stroke-dashoffset.px]=\"_strokeDashOffset\"\\n    [style.stroke-dasharray.px]=\"_strokeCircumference\"\\n    [style.stroke-width.%]=\"_circleStrokeWidth\"></circle>\\n\\n  <circle\\n    *ngSwitchCase=\"false\"\\n    cx=\"50%\"\\n    cy=\"50%\"\\n    [attr.r]=\"_circleRadius\"\\n    [style.stroke-dashoffset.px]=\"_strokeDashOffset\"\\n    [style.stroke-dasharray.px]=\"_strokeCircumference\"\\n    [style.stroke-width.%]=\"_circleStrokeWidth\"></circle>\\n</svg>\\n',changeDetection:t.ChangeDetectionStrategy.OnPush,encapsulation:t.ViewEncapsulation.None,styles:[\".mat-progress-spinner{display:block;position:relative}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate]{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate]{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate]{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate]{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}/*# sourceMappingURL=progress-spinner.css.map */\\n\"]}]}],y.ctorParameters=function(){return[{type:t.ElementRef},{type:a.Platform},{type:void 0,decorators:[{type:t.Optional},{type:t.Inject,args:[n.DOCUMENT]}]},{type:String,decorators:[{type:t.Optional},{type:t.Inject,args:[s.ANIMATION_MODULE_TYPE]}]},{type:void 0,decorators:[{type:t.Inject,args:[c]}]}]},y);function y(e,t,n,r,i){var o=m.call(this,e,t,n,r,i)||this;return o.mode=\"indeterminate\",o}var g=(_.decorators=[{type:t.NgModule,args:[{imports:[r.MatCommonModule,n.CommonModule],exports:[h,v,r.MatCommonModule],declarations:[h,v]}]}],_);function _(){}e.MatProgressSpinner=h,e.MatSpinner=v,e.MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS=c,e.MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY=p,e.MatProgressSpinnerModule=g,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/collections\"),require(\"@angular/forms\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-radio.umd.js\",[\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/coercion\",\"@angular/cdk/collections\",\"@angular/forms\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/collections\"),e(\"@angular/forms\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,l,n,r,i,o,a,s,u){\"use strict\";var c=new l.InjectionToken(\"mat-radio-default-options\",{providedIn:\"root\",factory:p});function p(){return{color:\"accent\"}}var d=0,h={provide:s.NG_VALUE_ACCESSOR,useExisting:l.forwardRef(function(){return m}),multi:!0},f=function(e,t){this.source=e,this.value=t},m=(Object.defineProperty(v.prototype,\"name\",{get:function(){return this._name},set:function(e){this._name=e,this._updateRadioButtonNames()},enumerable:!0,configurable:!0}),Object.defineProperty(v.prototype,\"labelPosition\",{get:function(){return this._labelPosition},set:function(e){this._labelPosition=\"before\"===e?\"before\":\"after\",this._markRadiosForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(v.prototype,\"value\",{get:function(){return this._value},set:function(e){this._value!==e&&(this._value=e,this._updateSelectedRadioFromValue(),this._checkSelectedRadioButton())},enumerable:!0,configurable:!0}),v.prototype._checkSelectedRadioButton=function(){this._selected&&!this._selected.checked&&(this._selected.checked=!0)},Object.defineProperty(v.prototype,\"selected\",{get:function(){return this._selected},set:function(e){this._selected=e,this.value=e?e.value:null,this._checkSelectedRadioButton()},enumerable:!0,configurable:!0}),Object.defineProperty(v.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=o.coerceBooleanProperty(e),this._markRadiosForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(v.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=o.coerceBooleanProperty(e),this._markRadiosForCheck()},enumerable:!0,configurable:!0}),v.prototype.ngAfterContentInit=function(){this._isInitialized=!0},v.prototype._touch=function(){this.onTouched&&this.onTouched()},v.prototype._updateRadioButtonNames=function(){var t=this;this._radios&&this._radios.forEach(function(e){e.name=t.name,e._markForCheck()})},v.prototype._updateSelectedRadioFromValue=function(){var t=this,e=null!==this._selected&&this._selected.value===this._value;this._radios&&!e&&(this._selected=null,this._radios.forEach(function(e){e.checked=t.value===e.value,e.checked&&(t._selected=e)}))},v.prototype._emitChangeEvent=function(){this._isInitialized&&this.change.emit(new f(this._selected,this._value))},v.prototype._markRadiosForCheck=function(){this._radios&&this._radios.forEach(function(e){return e._markForCheck()})},v.prototype.writeValue=function(e){this.value=e,this._changeDetector.markForCheck()},v.prototype.registerOnChange=function(e){this._controlValueAccessorChangeFn=e},v.prototype.registerOnTouched=function(e){this.onTouched=e},v.prototype.setDisabledState=function(e){this.disabled=e,this._changeDetector.markForCheck()},v.decorators=[{type:l.Directive,args:[{selector:\"mat-radio-group\",exportAs:\"matRadioGroup\",providers:[h],host:{role:\"radiogroup\",class:\"mat-radio-group\"}}]}],v.ctorParameters=function(){return[{type:l.ChangeDetectorRef}]},v.propDecorators={change:[{type:l.Output}],_radios:[{type:l.ContentChildren,args:[l.forwardRef(function(){return b}),{descendants:!0}]}],color:[{type:l.Input}],name:[{type:l.Input}],labelPosition:[{type:l.Input}],value:[{type:l.Input}],selected:[{type:l.Input}],disabled:[{type:l.Input}],required:[{type:l.Input}]},v);function v(e){this._changeDetector=e,this._value=null,this._name=\"mat-radio-group-\"+d++,this._selected=null,this._isInitialized=!1,this._labelPosition=\"after\",this._disabled=!1,this._required=!1,this._controlValueAccessorChangeFn=function(){},this.onTouched=function(){},this.change=new l.EventEmitter}function y(e){this._elementRef=e}var g,_=n.mixinDisableRipple(n.mixinTabIndex(y)),b=(g=_,r.__extends(w,g),Object.defineProperty(w.prototype,\"checked\",{get:function(){return this._checked},set:function(e){var t=o.coerceBooleanProperty(e);this._checked!==t&&((this._checked=t)&&this.radioGroup&&this.radioGroup.value!==this.value?this.radioGroup.selected=this:!t&&this.radioGroup&&this.radioGroup.value===this.value&&(this.radioGroup.selected=null),t&&this._radioDispatcher.notify(this.id,this.name),this._changeDetector.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"value\",{get:function(){return this._value},set:function(e){this._value!==e&&(this._value=e,null!==this.radioGroup&&(this.checked||(this.checked=this.radioGroup.value===e),this.checked&&(this.radioGroup.selected=this)))},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"labelPosition\",{get:function(){return this._labelPosition||this.radioGroup&&this.radioGroup.labelPosition||\"after\"},set:function(e){this._labelPosition=e},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"disabled\",{get:function(){return this._disabled||null!==this.radioGroup&&this.radioGroup.disabled},set:function(e){var t=o.coerceBooleanProperty(e);this._disabled!==t&&(this._disabled=t,this._changeDetector.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"required\",{get:function(){return this._required||this.radioGroup&&this.radioGroup.required},set:function(e){this._required=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"color\",{get:function(){return this._color||this.radioGroup&&this.radioGroup.color||this._providerOverride&&this._providerOverride.color||\"accent\"},set:function(e){this._color=e},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"inputId\",{get:function(){return(this.id||this._uniqueId)+\"-input\"},enumerable:!0,configurable:!0}),w.prototype.focus=function(e){this._focusMonitor.focusVia(this._inputElement,\"keyboard\",e)},w.prototype._markForCheck=function(){this._changeDetector.markForCheck()},w.prototype.ngOnInit=function(){this.radioGroup&&(this.checked=this.radioGroup.value===this._value,this.name=this.radioGroup.name)},w.prototype.ngAfterViewInit=function(){var t=this;this._focusMonitor.monitor(this._elementRef,!0).subscribe(function(e){!e&&t.radioGroup&&t.radioGroup._touch()})},w.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef),this._removeUniqueSelectionListener()},w.prototype._emitChangeEvent=function(){this.change.emit(new f(this,this._value))},w.prototype._isRippleDisabled=function(){return this.disableRipple||this.disabled},w.prototype._onInputClick=function(e){e.stopPropagation()},w.prototype._onInputChange=function(e){e.stopPropagation();var t=this.radioGroup&&this.value!==this.radioGroup.value;this.checked=!0,this._emitChangeEvent(),this.radioGroup&&(this.radioGroup._controlValueAccessorChangeFn(this.value),t&&this.radioGroup._emitChangeEvent())},w.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-radio-button\",template:'\\x3c!-- TODO(jelbourn): render the radio on either side of the content --\\x3e\\n\\x3c!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. --\\x3e\\n<label [attr.for]=\"inputId\" class=\"mat-radio-label\" #label>\\n  \\x3c!-- The actual \\'radio\\' part of the control. --\\x3e\\n  <div class=\"mat-radio-container\">\\n    <div class=\"mat-radio-outer-circle\"></div>\\n    <div class=\"mat-radio-inner-circle\"></div>\\n    <div mat-ripple class=\"mat-radio-ripple\"\\n         [matRippleTrigger]=\"label\"\\n         [matRippleDisabled]=\"_isRippleDisabled()\"\\n         [matRippleCentered]=\"true\"\\n         [matRippleRadius]=\"20\"\\n         [matRippleAnimation]=\"{enterDuration: 150}\">\\n\\n      <div class=\"mat-ripple-element mat-radio-persistent-ripple\"></div>\\n    </div>\\n\\n    <input #input class=\"mat-radio-input cdk-visually-hidden\" type=\"radio\"\\n        [id]=\"inputId\"\\n        [checked]=\"checked\"\\n        [disabled]=\"disabled\"\\n        [tabIndex]=\"tabIndex\"\\n        [attr.name]=\"name\"\\n        [attr.value]=\"value\"\\n        [required]=\"required\"\\n        [attr.aria-label]=\"ariaLabel\"\\n        [attr.aria-labelledby]=\"ariaLabelledby\"\\n        [attr.aria-describedby]=\"ariaDescribedby\"\\n        (change)=\"_onInputChange($event)\"\\n        (click)=\"_onInputClick($event)\">\\n  </div>\\n\\n  \\x3c!-- The label content for radio control. --\\x3e\\n  <div class=\"mat-radio-label-content\" [class.mat-radio-label-before]=\"labelPosition == \\'before\\'\">\\n    \\x3c!-- Add an invisible span so JAWS can read the label --\\x3e\\n    <span style=\"display:none\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </div>\\n</label>\\n',inputs:[\"disableRipple\",\"tabIndex\"],encapsulation:l.ViewEncapsulation.None,exportAs:\"matRadioButton\",host:{class:\"mat-radio-button\",\"[class.mat-radio-checked]\":\"checked\",\"[class.mat-radio-disabled]\":\"disabled\",\"[class._mat-animation-noopable]\":'_animationMode === \"NoopAnimations\"',\"[class.mat-primary]\":'color === \"primary\"',\"[class.mat-accent]\":'color === \"accent\"',\"[class.mat-warn]\":'color === \"warn\"',\"[attr.tabindex]\":\"-1\",\"[attr.id]\":\"id\",\"[attr.aria-label]\":\"null\",\"[attr.aria-labelledby]\":\"null\",\"[attr.aria-describedby]\":\"null\",\"(focus)\":\"_inputElement.nativeElement.focus()\"},changeDetection:l.ChangeDetectionStrategy.OnPush,styles:[\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001)}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}@media(-ms-high-contrast: active){.mat-radio-checked .mat-radio-inner-circle{border:solid 10px}}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}@media(-ms-high-contrast: active){.mat-radio-disabled{opacity:.5}}/*# sourceMappingURL=radio.css.map */\\n\"]}]}],w.ctorParameters=function(){return[{type:m,decorators:[{type:l.Optional}]},{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:i.FocusMonitor},{type:a.UniqueSelectionDispatcher},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[u.ANIMATION_MODULE_TYPE]}]},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[c]}]}]},w.propDecorators={id:[{type:l.Input}],name:[{type:l.Input}],ariaLabel:[{type:l.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:l.Input,args:[\"aria-labelledby\"]}],ariaDescribedby:[{type:l.Input,args:[\"aria-describedby\"]}],checked:[{type:l.Input}],value:[{type:l.Input}],labelPosition:[{type:l.Input}],disabled:[{type:l.Input}],required:[{type:l.Input}],color:[{type:l.Input}],change:[{type:l.Output}],_inputElement:[{type:l.ViewChild,args:[\"input\",{static:!1}]}]},w);function w(e,t,n,r,i,o,a){var s=g.call(this,t)||this;return s._changeDetector=n,s._focusMonitor=r,s._radioDispatcher=i,s._animationMode=o,s._providerOverride=a,s._uniqueId=\"mat-radio-\"+ ++d,s.id=s._uniqueId,s.change=new l.EventEmitter,s._checked=!1,s._value=null,s._removeUniqueSelectionListener=function(){},s.radioGroup=e,s._removeUniqueSelectionListener=i.listen(function(e,t){e!==s.id&&t===s.name&&(s.checked=!1)}),s}var x=(C.decorators=[{type:l.NgModule,args:[{imports:[t.CommonModule,n.MatRippleModule,n.MatCommonModule],exports:[m,b,n.MatCommonModule],declarations:[m,b]}]}],C);function C(){}e.MatRadioModule=x,e.MAT_RADIO_DEFAULT_OPTIONS=c,e.MAT_RADIO_DEFAULT_OPTIONS_FACTORY=p,e.MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR=h,e.MatRadioChange=f,e.MatRadioGroup=m,e.MatRadioButton=b,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/cdk/observers\"),require(\"tslib\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/material/core\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\"),require(\"@angular/cdk/platform\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-form-field.umd.js\",[\"@angular/common\",\"@angular/core\",\"@angular/cdk/observers\",\"tslib\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/material/core\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\",\"@angular/cdk/platform\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/cdk/observers\"),e(\"tslib\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/material/core\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"),e(\"@angular/cdk/platform\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,n,r,m,i,o,a,u,s,l,c,p){\"use strict\";var d=0,h=(f.decorators=[{type:n.Directive,args:[{selector:\"mat-error\",host:{class:\"mat-error\",role:\"alert\",\"[attr.id]\":\"id\"}}]}],f.propDecorators={id:[{type:n.Input}]},f);function f(){this.id=\"mat-error-\"+d++}function v(){}var y={transitionMessages:l.trigger(\"transitionMessages\",[l.state(\"enter\",l.style({opacity:1,transform:\"translateY(0%)\"})),l.transition(\"void => enter\",[l.style({opacity:0,transform:\"translateY(-100%)\"}),l.animate(\"300ms cubic-bezier(0.55, 0, 0.55, 0.2)\")])])};function g(){return Error(\"Placeholder attribute and child element were both specified.\")}function _(e){return Error(\"A hint was already declared for 'align=\\\"\"+e+\"\\\"'.\")}function b(){return Error(\"mat-form-field must contain a MatFormFieldControl.\")}var w=0,x=(C.decorators=[{type:n.Directive,args:[{selector:\"mat-hint\",host:{class:\"mat-hint\",\"[class.mat-right]\":'align == \"end\"',\"[attr.id]\":\"id\",\"[attr.align]\":\"null\"}}]}],C.propDecorators={align:[{type:n.Input}],id:[{type:n.Input}]},C);function C(){this.align=\"start\",this.id=\"mat-hint-\"+w++}var S=(E.decorators=[{type:n.Directive,args:[{selector:\"mat-label\"}]}],E);function E(){}var O=(k.decorators=[{type:n.Directive,args:[{selector:\"mat-placeholder\"}]}],k);function k(){}var D=(T.decorators=[{type:n.Directive,args:[{selector:\"[matPrefix]\"}]}],T);function T(){}var I=(P.decorators=[{type:n.Directive,args:[{selector:\"[matSuffix]\"}]}],P);function P(){}function A(e){this._elementRef=e}var M,R=0,N=a.mixinColor(A,\"primary\"),j=new n.InjectionToken(\"MAT_FORM_FIELD_DEFAULT_OPTIONS\"),F=(M=N,m.__extends(L,M),Object.defineProperty(L.prototype,\"appearance\",{get:function(){return this._appearance},set:function(e){var t=this._appearance;this._appearance=e||this._defaults&&this._defaults.appearance||\"legacy\",\"outline\"===this._appearance&&t!==e&&(this._outlineGapCalculationNeededOnStable=!0)},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"hideRequiredMarker\",{get:function(){return this._hideRequiredMarker},set:function(e){this._hideRequiredMarker=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"_shouldAlwaysFloat\",{get:function(){return\"always\"===this.floatLabel&&!this._showAlwaysAnimate},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"_canLabelFloat\",{get:function(){return\"never\"!==this.floatLabel},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"hintLabel\",{get:function(){return this._hintLabel},set:function(e){this._hintLabel=e,this._processHints()},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"floatLabel\",{get:function(){return\"legacy\"!==this.appearance&&\"never\"===this._floatLabel?\"auto\":this._floatLabel},set:function(e){e!==this._floatLabel&&(this._floatLabel=e||this._labelOptions.float||\"auto\",this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"_control\",{get:function(){return this._explicitFormFieldControl||this._controlNonStatic||this._controlStatic},set:function(e){this._explicitFormFieldControl=e},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"_labelChild\",{get:function(){return this._labelChildNonStatic||this._labelChildStatic},enumerable:!0,configurable:!0}),L.prototype.getConnectedOverlayOrigin=function(){return this._connectionContainerRef||this._elementRef},L.prototype.ngAfterContentInit=function(){var e=this;this._validateControlChild();var t=this._control;t.controlType&&this._elementRef.nativeElement.classList.add(\"mat-form-field-type-\"+t.controlType),t.stateChanges.pipe(s.startWith(null)).subscribe(function(){e._validatePlaceholders(),e._syncDescribedByIds(),e._changeDetectorRef.markForCheck()}),t.ngControl&&t.ngControl.valueChanges&&t.ngControl.valueChanges.pipe(s.takeUntil(this._destroyed)).subscribe(function(){return e._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.asObservable().pipe(s.takeUntil(e._destroyed)).subscribe(function(){e._outlineGapCalculationNeededOnStable&&e.updateOutlineGap()})}),u.merge(this._prefixChildren.changes,this._suffixChildren.changes).subscribe(function(){e._outlineGapCalculationNeededOnStable=!0,e._changeDetectorRef.markForCheck()}),this._hintChildren.changes.pipe(s.startWith(null)).subscribe(function(){e._processHints(),e._changeDetectorRef.markForCheck()}),this._errorChildren.changes.pipe(s.startWith(null)).subscribe(function(){e._syncDescribedByIds(),e._changeDetectorRef.markForCheck()}),this._dir&&this._dir.change.pipe(s.takeUntil(this._destroyed)).subscribe(function(){e.updateOutlineGap(),e._previousDirection=e._dir.value})},L.prototype.ngAfterContentChecked=function(){this._validateControlChild(),this._outlineGapCalculationNeededImmediately&&this.updateOutlineGap()},L.prototype.ngAfterViewInit=function(){this._subscriptAnimationState=\"enter\",this._changeDetectorRef.detectChanges()},L.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete()},L.prototype._shouldForward=function(e){var t=this._control?this._control.ngControl:null;return t&&t[e]},L.prototype._hasPlaceholder=function(){return!!(this._control&&this._control.placeholder||this._placeholderChild)},L.prototype._hasLabel=function(){return!!this._labelChild},L.prototype._shouldLabelFloat=function(){return this._canLabelFloat&&(this._control.shouldLabelFloat||this._shouldAlwaysFloat)},L.prototype._hideControlPlaceholder=function(){return\"legacy\"===this.appearance&&!this._hasLabel()||this._hasLabel()&&!this._shouldLabelFloat()},L.prototype._hasFloatingLabel=function(){return this._hasLabel()||\"legacy\"===this.appearance&&this._hasPlaceholder()},L.prototype._getDisplayedMessages=function(){return this._errorChildren&&0<this._errorChildren.length&&this._control.errorState?\"error\":\"hint\"},L.prototype._animateAndLockLabel=function(){var e=this;this._hasFloatingLabel()&&this._canLabelFloat&&(this._animationsEnabled&&(this._showAlwaysAnimate=!0,u.fromEvent(this._label.nativeElement,\"transitionend\").pipe(s.take(1)).subscribe(function(){e._showAlwaysAnimate=!1})),this.floatLabel=\"always\",this._changeDetectorRef.markForCheck())},L.prototype._validatePlaceholders=function(){if(this._control.placeholder&&this._placeholderChild)throw g()},L.prototype._processHints=function(){this._validateHints(),this._syncDescribedByIds()},L.prototype._validateHints=function(){var t,n,r=this;this._hintChildren&&this._hintChildren.forEach(function(e){if(\"start\"===e.align){if(t||r.hintLabel)throw _(\"start\");t=e}else if(\"end\"===e.align){if(n)throw _(\"end\");n=e}})},L.prototype._syncDescribedByIds=function(){if(this._control){var e=[];if(\"hint\"===this._getDisplayedMessages()){var t=this._hintChildren?this._hintChildren.find(function(e){return\"start\"===e.align}):null,n=this._hintChildren?this._hintChildren.find(function(e){return\"end\"===e.align}):null;t?e.push(t.id):this._hintLabel&&e.push(this._hintLabelId),n&&e.push(n.id)}else this._errorChildren&&(e=this._errorChildren.map(function(e){return e.id}));this._control.setDescribedByIds(e)}},L.prototype._validateControlChild=function(){if(!this._control)throw b()},L.prototype.updateOutlineGap=function(){var t,e,n=this._label?this._label.nativeElement:null;if(\"outline\"===this.appearance&&n&&n.children.length&&n.textContent.trim()&&this._platform.isBrowser)if(document.documentElement.contains(this._elementRef.nativeElement)){var r=0,i=0,o=this._connectionContainerRef.nativeElement,a=o.querySelectorAll(\".mat-form-field-outline-start\"),s=o.querySelectorAll(\".mat-form-field-outline-gap\");if(this._label&&this._label.nativeElement.children.length){var l=o.getBoundingClientRect();if(0===l.width&&0===l.height)return this._outlineGapCalculationNeededOnStable=!0,void(this._outlineGapCalculationNeededImmediately=!1);var u=this._getStartEnd(l),c=this._getStartEnd(n.children[0].getBoundingClientRect()),p=0;try{for(var d=m.__values(n.children),h=d.next();!h.done;h=d.next())p+=h.value.offsetWidth}catch(e){t={error:e}}finally{try{h&&!h.done&&(e=d.return)&&e.call(d)}finally{if(t)throw t.error}}r=c-u-5,i=0<p?.75*p+10:0}for(var f=0;f<a.length;f++)a.item(f).style.width=r+\"px\";for(f=0;f<s.length;f++)s.item(f).style.width=i+\"px\";this._outlineGapCalculationNeededOnStable=this._outlineGapCalculationNeededImmediately=!1}else this._outlineGapCalculationNeededImmediately=!0},L.prototype._getStartEnd=function(e){return\"rtl\"===this._previousDirection?e.right:e.left},L.decorators=[{type:n.Component,args:[{moduleId:module.id,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    \\x3c!-- Outline used for outline appearance. --\\x3e\\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        \\x3c!-- 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. --\\x3e\\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          \\x3c!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. --\\x3e\\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          \\x3c!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class --\\x3e\\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  \\x3c!-- Underline used for legacy, standard, and box appearances. --\\x3e\\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      \\x3c!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* --\\x3e\\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:[y.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:n.ViewEncapsulation.None,changeDetection:n.ChangeDetectionStrategy.OnPush,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}@media(-ms-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:scaleY(1.0001)}.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:scaleX(1);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._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}/*# sourceMappingURL=form-field.css.map */\\n\",'.mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}@media(-ms-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}@media(-ms-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}/*# sourceMappingURL=form-field-fill.css.map */\\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}.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]::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}@media(-ms-high-contrast: active){.mat-focused 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}/*# sourceMappingURL=form-field-input.css.map */\\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}@media(-ms-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}@media(-ms-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}@media(-ms-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}/*# sourceMappingURL=form-field-legacy.css.map */\\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;transition:border-color 300ms cubic-bezier(0.25, 0.8, 0.25, 1)}.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}/*# sourceMappingURL=form-field-outline.css.map */\\n\",\".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}@media(-ms-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}@media(-ms-high-contrast: active){.mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:2px}}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}@media(-ms-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}/*# sourceMappingURL=form-field-standard.css.map */\\n\"]}]}],L.ctorParameters=function(){return[{type:n.ElementRef},{type:n.ChangeDetectorRef},{type:void 0,decorators:[{type:n.Optional},{type:n.Inject,args:[a.MAT_LABEL_GLOBAL_OPTIONS]}]},{type:i.Directionality,decorators:[{type:n.Optional}]},{type:void 0,decorators:[{type:n.Optional},{type:n.Inject,args:[j]}]},{type:c.Platform},{type:n.NgZone},{type:String,decorators:[{type:n.Optional},{type:n.Inject,args:[p.ANIMATION_MODULE_TYPE]}]}]},L.propDecorators={appearance:[{type:n.Input}],hideRequiredMarker:[{type:n.Input}],hintLabel:[{type:n.Input}],floatLabel:[{type:n.Input}],underlineRef:[{type:n.ViewChild,args:[\"underline\",{static:!1}]}],_connectionContainerRef:[{type:n.ViewChild,args:[\"connectionContainer\",{static:!0}]}],_inputContainerRef:[{type:n.ViewChild,args:[\"inputContainer\",{static:!1}]}],_label:[{type:n.ViewChild,args:[\"label\",{static:!1}]}],_controlNonStatic:[{type:n.ContentChild,args:[v,{static:!1}]}],_controlStatic:[{type:n.ContentChild,args:[v,{static:!0}]}],_labelChildNonStatic:[{type:n.ContentChild,args:[S,{static:!1}]}],_labelChildStatic:[{type:n.ContentChild,args:[S,{static:!0}]}],_placeholderChild:[{type:n.ContentChild,args:[O,{static:!1}]}],_errorChildren:[{type:n.ContentChildren,args:[h]}],_hintChildren:[{type:n.ContentChildren,args:[x]}],_prefixChildren:[{type:n.ContentChildren,args:[D]}],_suffixChildren:[{type:n.ContentChildren,args:[I]}]},L);function L(e,t,n,r,i,o,a,s){var l=M.call(this,e)||this;return l._elementRef=e,l._changeDetectorRef=t,l._dir=r,l._defaults=i,l._platform=o,l._ngZone=a,l._outlineGapCalculationNeededImmediately=!1,l._outlineGapCalculationNeededOnStable=!1,l._destroyed=new u.Subject,l._showAlwaysAnimate=!1,l._subscriptAnimationState=\"\",l._hintLabel=\"\",l._hintLabelId=\"mat-hint-\"+R++,l._labelId=\"mat-form-field-label-\"+R++,l._previousDirection=\"ltr\",l._labelOptions=n||{},l.floatLabel=l._labelOptions.float||\"auto\",l._animationsEnabled=\"NoopAnimations\"!==s,l.appearance=i&&i.appearance?i.appearance:\"legacy\",l._hideRequiredMarker=!(!i||null==i.hideRequiredMarker)&&i.hideRequiredMarker,l}var V=(B.decorators=[{type:n.NgModule,args:[{declarations:[h,F,x,S,O,D,I],imports:[t.CommonModule,r.ObserversModule],exports:[h,F,x,S,O,D,I]}]}],B);function B(){}e.MatFormFieldModule=V,e.MatError=h,e.MAT_FORM_FIELD_DEFAULT_OPTIONS=j,e.MatFormField=F,e.MatFormFieldControl=v,e.getMatFormFieldPlaceholderConflictError=g,e.getMatFormFieldDuplicatedHintError=_,e.getMatFormFieldMissingControlError=b,e.MatHint=x,e.MatPlaceholder=O,e.MatPrefix=D,e.MatSuffix=I,e.MatLabel=S,e.matFormFieldAnimations=y,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/overlay\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"@angular/material/form-field\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/collections\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/cdk/scrolling\"),require(\"@angular/forms\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-select.umd.js\",[\"@angular/cdk/overlay\",\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"@angular/material/form-field\",\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/collections\",\"@angular/cdk/keycodes\",\"@angular/cdk/scrolling\",\"@angular/forms\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/overlay\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"@angular/material/form-field\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/collections\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/cdk/scrolling\"),e(\"@angular/forms\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"))})}(0,function(e,t,n,f,a,r,m,i,o,s,l,u,c,p,v,y,d){\"use strict\";var h={transformPanelWrap:d.trigger(\"transformPanelWrap\",[d.transition(\"* => void\",d.query(\"@transformPanel\",[d.animateChild()],{optional:!0}))]),transformPanel:d.trigger(\"transformPanel\",[d.state(\"void\",d.style({transform:\"scaleY(0.8)\",minWidth:\"100%\",opacity:0})),d.state(\"showing\",d.style({opacity:1,minWidth:\"calc(100% + 32px)\",transform:\"scaleY(1)\"})),d.state(\"showing-multiple\",d.style({opacity:1,minWidth:\"calc(100% + 64px)\",transform:\"scaleY(1)\"})),d.transition(\"void => *\",d.animate(\"120ms cubic-bezier(0, 0, 0.2, 1)\")),d.transition(\"* => void\",d.animate(\"100ms 25ms linear\",d.style({opacity:0})))]),fadeInContent:d.trigger(\"fadeInContent\",[d.state(\"showing\",d.style({opacity:1})),d.transition(\"void => showing\",[d.style({opacity:0}),d.animate(\"150ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)\")])])},g=h.transformPanel,_=h.fadeInContent;var b=0,w=new f.InjectionToken(\"mat-select-scroll-strategy\");function x(e){return function(){return e.scrollStrategies.reposition()}}function C(e,t,n,r,i){this._elementRef=e,this._defaultErrorStateMatcher=t,this._parentForm=n,this._parentFormGroup=r,this.ngControl=i}var S={provide:w,deps:[t.Overlay],useFactory:x},E=function(e,t){this.source=e,this.value=t},O=a.mixinDisableRipple(a.mixinTabIndex(a.mixinDisabled(a.mixinErrorState(C)))),k=(D.decorators=[{type:f.Directive,args:[{selector:\"mat-select-trigger\"}]}],D);function D(){}var T,I=(T=O,m.__extends(P,T),Object.defineProperty(P.prototype,\"focused\",{get:function(){return this._focused||this._panelOpen},set:function(e){this._focused=e},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"placeholder\",{get:function(){return this._placeholder},set:function(e){this._placeholder=e,this.stateChanges.next()},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=s.coerceBooleanProperty(e),this.stateChanges.next()},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"multiple\",{get:function(){return this._multiple},set:function(e){if(this._selectionModel)throw Error(\"Cannot change `multiple` mode of select after initialization.\");this._multiple=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"disableOptionCentering\",{get:function(){return this._disableOptionCentering},set:function(e){this._disableOptionCentering=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"compareWith\",{get:function(){return this._compareWith},set:function(e){if(\"function\"!=typeof e)throw Error(\"`compareWith` must be a function.\");this._compareWith=e,this._selectionModel&&this._initializeSelection()},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"value\",{get:function(){return this._value},set:function(e){e!==this._value&&(this.writeValue(e),this._value=e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"id\",{get:function(){return this._id},set:function(e){this._id=e||this._uid,this.stateChanges.next()},enumerable:!0,configurable:!0}),P.prototype.ngOnInit=function(){var e=this;this._selectionModel=new l.SelectionModel(this.multiple),this.stateChanges.next(),this._panelDoneAnimatingStream.pipe(y.distinctUntilChanged(),y.takeUntil(this._destroy)).subscribe(function(){e.panelOpen?(e._scrollTop=0,e.openedChange.emit(!0)):(e.openedChange.emit(!1),e.overlayDir.offsetX=0,e._changeDetectorRef.markForCheck())}),this._viewportRuler.change().pipe(y.takeUntil(this._destroy)).subscribe(function(){e._panelOpen&&(e._triggerRect=e.trigger.nativeElement.getBoundingClientRect(),e._changeDetectorRef.markForCheck())})},P.prototype.ngAfterContentInit=function(){var e=this;this._initKeyManager(),this._selectionModel.onChange.pipe(y.takeUntil(this._destroy)).subscribe(function(e){e.added.forEach(function(e){return e.select()}),e.removed.forEach(function(e){return e.deselect()})}),this.options.changes.pipe(y.startWith(null),y.takeUntil(this._destroy)).subscribe(function(){e._resetOptions(),e._initializeSelection()})},P.prototype.ngDoCheck=function(){this.ngControl&&this.updateErrorState()},P.prototype.ngOnChanges=function(e){e.disabled&&this.stateChanges.next(),e.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this.typeaheadDebounceInterval)},P.prototype.ngOnDestroy=function(){this._destroy.next(),this._destroy.complete(),this.stateChanges.complete()},P.prototype.toggle=function(){this.panelOpen?this.close():this.open()},P.prototype.open=function(){var e=this;!this.disabled&&this.options&&this.options.length&&!this._panelOpen&&(this._triggerRect=this.trigger.nativeElement.getBoundingClientRect(),this._triggerFontSize=parseInt(getComputedStyle(this.trigger.nativeElement).fontSize||\"0\"),this._panelOpen=!0,this._keyManager.withHorizontalOrientation(null),this._calculateOverlayPosition(),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck(),this._ngZone.onStable.asObservable().pipe(y.take(1)).subscribe(function(){e._triggerFontSize&&e.overlayDir.overlayRef&&e.overlayDir.overlayRef.overlayElement&&(e.overlayDir.overlayRef.overlayElement.style.fontSize=e._triggerFontSize+\"px\")}))},P.prototype.close=function(){this._panelOpen&&(this._panelOpen=!1,this._keyManager.withHorizontalOrientation(this._isRtl()?\"rtl\":\"ltr\"),this._changeDetectorRef.markForCheck(),this._onTouched())},P.prototype.writeValue=function(e){this.options&&this._setSelectionByValue(e)},P.prototype.registerOnChange=function(e){this._onChange=e},P.prototype.registerOnTouched=function(e){this._onTouched=e},P.prototype.setDisabledState=function(e){this.disabled=e,this._changeDetectorRef.markForCheck(),this.stateChanges.next()},Object.defineProperty(P.prototype,\"panelOpen\",{get:function(){return this._panelOpen},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"selected\",{get:function(){return this.multiple?this._selectionModel.selected:this._selectionModel.selected[0]},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"triggerValue\",{get:function(){if(this.empty)return\"\";if(this._multiple){var e=this._selectionModel.selected.map(function(e){return e.viewValue});return this._isRtl()&&e.reverse(),e.join(\", \")}return this._selectionModel.selected[0].viewValue},enumerable:!0,configurable:!0}),P.prototype._isRtl=function(){return!!this._dir&&\"rtl\"===this._dir.value},P.prototype._handleKeydown=function(e){this.disabled||(this.panelOpen?this._handleOpenKeydown(e):this._handleClosedKeydown(e))},P.prototype._handleClosedKeydown=function(e){var t=e.keyCode,n=t===u.DOWN_ARROW||t===u.UP_ARROW||t===u.LEFT_ARROW||t===u.RIGHT_ARROW,r=t===u.ENTER||t===u.SPACE,i=this._keyManager;if(r&&!u.hasModifierKey(e)||(this.multiple||e.altKey)&&n)e.preventDefault(),this.open();else if(!this.multiple){var o=this.selected;t===u.HOME||t===u.END?(t===u.HOME?i.setFirstItemActive():i.setLastItemActive(),e.preventDefault()):i.onKeydown(e);var a=this.selected;this._liveAnnouncer&&a&&o!==a&&this._liveAnnouncer.announce(a.viewValue,1e4)}},P.prototype._handleOpenKeydown=function(e){var t=e.keyCode,n=t===u.DOWN_ARROW||t===u.UP_ARROW,r=this._keyManager;if(t===u.HOME||t===u.END)e.preventDefault(),t===u.HOME?r.setFirstItemActive():r.setLastItemActive();else if(n&&e.altKey)e.preventDefault(),this.close();else if(t!==u.ENTER&&t!==u.SPACE||!r.activeItem||u.hasModifierKey(e))if(this._multiple&&t===u.A&&e.ctrlKey){e.preventDefault();var i=this.options.some(function(e){return!e.disabled&&!e.selected});this.options.forEach(function(e){e.disabled||(i?e.select():e.deselect())})}else{var o=r.activeItemIndex;r.onKeydown(e),this._multiple&&n&&e.shiftKey&&r.activeItem&&r.activeItemIndex!==o&&r.activeItem._selectViaInteraction()}else e.preventDefault(),r.activeItem._selectViaInteraction()},P.prototype._onFocus=function(){this.disabled||(this._focused=!0,this.stateChanges.next())},P.prototype._onBlur=function(){this._focused=!1,this.disabled||this.panelOpen||(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())},P.prototype._onAttached=function(){var e=this;this.overlayDir.positionChange.pipe(y.take(1)).subscribe(function(){e._changeDetectorRef.detectChanges(),e._calculateOverlayOffsetX(),e.panel.nativeElement.scrollTop=e._scrollTop})},P.prototype._getPanelTheme=function(){return this._parentFormField?\"mat-\"+this._parentFormField.color:\"\"},Object.defineProperty(P.prototype,\"empty\",{get:function(){return!this._selectionModel||this._selectionModel.isEmpty()},enumerable:!0,configurable:!0}),P.prototype._initializeSelection=function(){var e=this;Promise.resolve().then(function(){e._setSelectionByValue(e.ngControl?e.ngControl.value:e._value),e.stateChanges.next()})},P.prototype._setSelectionByValue=function(e){var t=this;if(this.multiple&&e){if(!Array.isArray(e))throw Error(\"Value must be an array in multiple-selection mode.\");this._selectionModel.clear(),e.forEach(function(e){return t._selectValue(e)}),this._sortValues()}else{this._selectionModel.clear();var n=this._selectValue(e);n?this._keyManager.setActiveItem(n):this.panelOpen||this._keyManager.setActiveItem(-1)}this._changeDetectorRef.markForCheck()},P.prototype._selectValue=function(t){var n=this,e=this.options.find(function(e){try{return null!=e.value&&n._compareWith(e.value,t)}catch(e){return f.isDevMode()&&console.warn(e),!1}});return e&&this._selectionModel.select(e),e},P.prototype._initKeyManager=function(){var e=this;this._keyManager=new i.ActiveDescendantKeyManager(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?\"rtl\":\"ltr\").withAllowedModifierKeys([\"shiftKey\"]),this._keyManager.tabOut.pipe(y.takeUntil(this._destroy)).subscribe(function(){e.focus(),e.close()}),this._keyManager.change.pipe(y.takeUntil(this._destroy)).subscribe(function(){e._panelOpen&&e.panel?e._scrollActiveOptionIntoView():e._panelOpen||e.multiple||!e._keyManager.activeItem||e._keyManager.activeItem._selectViaInteraction()})},P.prototype._resetOptions=function(){var t=this,e=v.merge(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(y.takeUntil(e)).subscribe(function(e){t._onSelect(e.source,e.isUserInput),e.isUserInput&&!t.multiple&&t._panelOpen&&(t.close(),t.focus())}),v.merge.apply(void 0,m.__spread(this.options.map(function(e){return e._stateChanges}))).pipe(y.takeUntil(e)).subscribe(function(){t._changeDetectorRef.markForCheck(),t.stateChanges.next()}),this._setOptionIds()},P.prototype._onSelect=function(e,t){var n=this._selectionModel.isSelected(e);null!=e.value||this._multiple?(n!==e.selected&&(e.selected?this._selectionModel.select(e):this._selectionModel.deselect(e)),t&&this._keyManager.setActiveItem(e),this.multiple&&(this._sortValues(),t&&this.focus())):(e.deselect(),this._selectionModel.clear(),this._propagateChanges(e.value)),n!==this._selectionModel.isSelected(e)&&this._propagateChanges(),this.stateChanges.next()},P.prototype._sortValues=function(){var n=this;if(this.multiple){var r=this.options.toArray();this._selectionModel.sort(function(e,t){return n.sortComparator?n.sortComparator(e,t,r):r.indexOf(e)-r.indexOf(t)}),this.stateChanges.next()}},P.prototype._propagateChanges=function(e){var t=null;t=this.multiple?this.selected.map(function(e){return e.value}):this.selected?this.selected.value:e,this._value=t,this.valueChange.emit(t),this._onChange(t),this.selectionChange.emit(new E(this,t)),this._changeDetectorRef.markForCheck()},P.prototype._setOptionIds=function(){this._optionIds=this.options.map(function(e){return e.id}).join(\" \")},P.prototype._highlightCorrectOption=function(){this._keyManager&&(this.empty?this._keyManager.setFirstItemActive():this._keyManager.setActiveItem(this._selectionModel.selected[0]))},P.prototype._scrollActiveOptionIntoView=function(){var e=this._keyManager.activeItemIndex||0,t=a._countGroupLabelsBeforeOption(e,this.options,this.optionGroups);this.panel.nativeElement.scrollTop=a._getOptionScrollPosition(e+t,this._getItemHeight(),this.panel.nativeElement.scrollTop,256)},P.prototype.focus=function(e){this._elementRef.nativeElement.focus(e)},P.prototype._getOptionIndex=function(r){return this.options.reduce(function(e,t,n){return void 0===e?r===t?n:void 0:e},void 0)},P.prototype._calculateOverlayPosition=function(){var e=this._getItemHeight(),t=this._getItemCount(),n=Math.min(t*e,256),r=t*e-n,i=this.empty?0:this._getOptionIndex(this._selectionModel.selected[0]);i+=a._countGroupLabelsBeforeOption(i,this.options,this.optionGroups);var o=n/2;this._scrollTop=this._calculateOverlayScroll(i,o,r),this._offsetY=this._calculateOverlayOffsetY(i,o,r),this._checkOverlayWithinViewport(r)},P.prototype._calculateOverlayScroll=function(e,t,n){var r=this._getItemHeight(),i=r*e-t+r/2;return Math.min(Math.max(0,i),n)},P.prototype._getAriaLabel=function(){return this.ariaLabelledby?null:this.ariaLabel||this.placeholder},P.prototype._getAriaLabelledby=function(){return this.ariaLabelledby?this.ariaLabelledby:this._parentFormField&&this._parentFormField._hasFloatingLabel()&&!this._getAriaLabel()&&this._parentFormField._labelId||null},P.prototype._getAriaActiveDescendant=function(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null},P.prototype._calculateOverlayOffsetX=function(){var e,t=this.overlayDir.overlayRef.overlayElement.getBoundingClientRect(),n=this._viewportRuler.getViewportSize(),r=this._isRtl(),i=this.multiple?56:32;if(this.multiple)e=40;else{var o=this._selectionModel.selected[0]||this.options.first;e=o&&o.group?32:16}r||(e*=-1);var a=0-(t.left+e-(r?i:0)),s=t.right+e-n.width+(r?0:i);0<a?e+=8+a:0<s&&(e-=8+s),this.overlayDir.offsetX=Math.round(e),this.overlayDir.overlayRef.updatePosition()},P.prototype._calculateOverlayOffsetY=function(e,t,n){var r,i=this._getItemHeight(),o=(i-this._triggerRect.height)/2,a=Math.floor(256/i);return this._disableOptionCentering?0:(r=0===this._scrollTop?e*i:this._scrollTop===n?(e-(this._getItemCount()-a))*i+(i-(this._getItemCount()*i-256)%i):t-i/2,Math.round(-1*r-o))},P.prototype._checkOverlayWithinViewport=function(e){var t=this._getItemHeight(),n=this._viewportRuler.getViewportSize(),r=this._triggerRect.top-8,i=n.height-this._triggerRect.bottom-8,o=Math.abs(this._offsetY),a=Math.min(this._getItemCount()*t,256)-o-this._triggerRect.height;i<a?this._adjustPanelUp(a,i):r<o?this._adjustPanelDown(o,r,e):this._transformOrigin=this._getOriginBasedOnOption()},P.prototype._adjustPanelUp=function(e,t){var n=Math.round(e-t);this._scrollTop-=n,this._offsetY-=n,this._transformOrigin=this._getOriginBasedOnOption(),this._scrollTop<=0&&(this._scrollTop=0,this._offsetY=0,this._transformOrigin=\"50% bottom 0px\")},P.prototype._adjustPanelDown=function(e,t,n){var r=Math.round(e-t);if(this._scrollTop+=r,this._offsetY+=r,this._transformOrigin=this._getOriginBasedOnOption(),this._scrollTop>=n)return this._scrollTop=n,this._offsetY=0,void(this._transformOrigin=\"50% top 0px\")},P.prototype._getOriginBasedOnOption=function(){var e=this._getItemHeight(),t=(e-this._triggerRect.height)/2;return\"50% \"+(Math.abs(this._offsetY)-t+e/2)+\"px 0px\"},P.prototype._getItemCount=function(){return this.options.length+this.optionGroups.length},P.prototype._getItemHeight=function(){return 3*this._triggerFontSize},P.prototype.setDescribedByIds=function(e){this._ariaDescribedby=e.join(\" \")},P.prototype.onContainerClick=function(){this.focus(),this.open()},Object.defineProperty(P.prototype,\"shouldLabelFloat\",{get:function(){return this._panelOpen||!this.empty},enumerable:!0,configurable:!0}),P.decorators=[{type:f.Component,args:[{moduleId:module.id,selector:\"mat-select\",exportAs:\"matSelect\",template:'<div cdk-overlay-origin\\n     class=\"mat-select-trigger\"\\n     aria-hidden=\"true\"\\n     (click)=\"toggle()\"\\n     #origin=\"cdkOverlayOrigin\"\\n     #trigger>\\n  <div class=\"mat-select-value\" [ngSwitch]=\"empty\">\\n    <span class=\"mat-select-placeholder\" *ngSwitchCase=\"true\">{{placeholder || \\'\\\\u00A0\\'}}</span>\\n    <span class=\"mat-select-value-text\" *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\\n      <span *ngSwitchDefault>{{triggerValue || \\'\\\\u00A0\\'}}</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  [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      class=\"mat-select-panel {{ _getPanelTheme() }}\"\\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:f.ViewEncapsulation.None,changeDetection:f.ChangeDetectionStrategy.OnPush,host:{role:\"listbox\",\"[attr.id]\":\"id\",\"[attr.tabindex]\":\"tabIndex\",\"[attr.aria-label]\":\"_getAriaLabel()\",\"[attr.aria-labelledby]\":\"_getAriaLabelledby()\",\"[attr.aria-required]\":\"required.toString()\",\"[attr.aria-disabled]\":\"disabled.toString()\",\"[attr.aria-invalid]\":\"errorState\",\"[attr.aria-owns]\":\"panelOpen ? _optionIds : null\",\"[attr.aria-multiselectable]\":\"multiple\",\"[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\",\"(keydown)\":\"_handleKeydown($event)\",\"(focus)\":\"_onFocus()\",\"(blur)\":\"_onBlur()\"},animations:[h.transformPanelWrap,h.transformPanel],providers:[{provide:r.MatFormFieldControl,useExisting:P},{provide:a.MAT_OPTION_PARENT_COMPONENT,useExisting:P}],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}@media(-ms-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}/*# sourceMappingURL=select.css.map */\\n\"]}]}],P.ctorParameters=function(){return[{type:c.ViewportRuler},{type:f.ChangeDetectorRef},{type:f.NgZone},{type:a.ErrorStateMatcher},{type:f.ElementRef},{type:o.Directionality,decorators:[{type:f.Optional}]},{type:p.NgForm,decorators:[{type:f.Optional}]},{type:p.FormGroupDirective,decorators:[{type:f.Optional}]},{type:r.MatFormField,decorators:[{type:f.Optional}]},{type:p.NgControl,decorators:[{type:f.Self},{type:f.Optional}]},{type:String,decorators:[{type:f.Attribute,args:[\"tabindex\"]}]},{type:void 0,decorators:[{type:f.Inject,args:[w]}]},{type:i.LiveAnnouncer}]},P.propDecorators={trigger:[{type:f.ViewChild,args:[\"trigger\",{static:!1}]}],panel:[{type:f.ViewChild,args:[\"panel\",{static:!1}]}],overlayDir:[{type:f.ViewChild,args:[t.CdkConnectedOverlay,{static:!1}]}],options:[{type:f.ContentChildren,args:[a.MatOption,{descendants:!0}]}],optionGroups:[{type:f.ContentChildren,args:[a.MatOptgroup]}],panelClass:[{type:f.Input}],customTrigger:[{type:f.ContentChild,args:[k,{static:!1}]}],placeholder:[{type:f.Input}],required:[{type:f.Input}],multiple:[{type:f.Input}],disableOptionCentering:[{type:f.Input}],compareWith:[{type:f.Input}],value:[{type:f.Input}],ariaLabel:[{type:f.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:f.Input,args:[\"aria-labelledby\"]}],errorStateMatcher:[{type:f.Input}],typeaheadDebounceInterval:[{type:f.Input}],sortComparator:[{type:f.Input}],id:[{type:f.Input}],openedChange:[{type:f.Output}],_openedStream:[{type:f.Output,args:[\"opened\"]}],_closedStream:[{type:f.Output,args:[\"closed\"]}],selectionChange:[{type:f.Output}],valueChange:[{type:f.Output}]},P);function P(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=T.call(this,i,r,a,s,u)||this;return h._viewportRuler=e,h._changeDetectorRef=t,h._ngZone=n,h._dir=o,h._parentFormField=l,h.ngControl=u,h._liveAnnouncer=d,h._panelOpen=!1,h._required=!1,h._scrollTop=0,h._multiple=!1,h._compareWith=function(e,t){return e===t},h._uid=\"mat-select-\"+b++,h._destroy=new v.Subject,h._triggerFontSize=0,h._onChange=function(){},h._onTouched=function(){},h._optionIds=\"\",h._transformOrigin=\"top\",h._panelDoneAnimatingStream=new v.Subject,h._offsetY=0,h._positions=[{originX:\"start\",originY:\"top\",overlayX:\"start\",overlayY:\"top\"},{originX:\"start\",originY:\"bottom\",overlayX:\"start\",overlayY:\"bottom\"}],h._disableOptionCentering=!1,h._focused=!1,h.controlType=\"mat-select\",h.ariaLabel=\"\",h.optionSelectionChanges=v.defer(function(){var e=h.options;return e?e.changes.pipe(y.startWith(e),y.switchMap(function(){return v.merge.apply(void 0,m.__spread(e.map(function(e){return e.onSelectionChange})))})):h._ngZone.onStable.asObservable().pipe(y.take(1),y.switchMap(function(){return h.optionSelectionChanges}))}),h.openedChange=new f.EventEmitter,h._openedStream=h.openedChange.pipe(y.filter(function(e){return e}),y.map(function(){})),h._closedStream=h.openedChange.pipe(y.filter(function(e){return!e}),y.map(function(){})),h.selectionChange=new f.EventEmitter,h.valueChange=new f.EventEmitter,h.ngControl&&(h.ngControl.valueAccessor=h),h._scrollStrategyFactory=p,h._scrollStrategy=h._scrollStrategyFactory(),h.tabIndex=parseInt(c)||0,h.id=h.id,h}var A=(M.decorators=[{type:f.NgModule,args:[{imports:[n.CommonModule,t.OverlayModule,a.MatOptionModule,a.MatCommonModule],exports:[r.MatFormFieldModule,I,k,a.MatOptionModule,a.MatCommonModule],declarations:[I,k],providers:[S]}]}],M);function M(){}e.MatSelectModule=A,e.SELECT_PANEL_MAX_HEIGHT=256,e.SELECT_PANEL_PADDING_X=16,e.SELECT_PANEL_INDENT_PADDING_X=32,e.SELECT_ITEM_HEIGHT_EM=3,e.SELECT_MULTIPLE_PANEL_PADDING_X=40,e.SELECT_PANEL_VIEWPORT_PADDING=8,e.MAT_SELECT_SCROLL_STRATEGY=w,e.MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY=x,e.MAT_SELECT_SCROLL_STRATEGY_PROVIDER=S,e.MatSelectChange=E,e.MatSelectTrigger=k,e.MatSelect=I,e.matSelectAnimations=h,e.transformPanel=g,e.fadeInContent=_,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/platform\"),require(\"@angular/cdk/scrolling\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/keycodes\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-sidenav.umd.js\",[\"@angular/cdk/platform\",\"@angular/cdk/scrolling\",\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/keycodes\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/platform\"),e(\"@angular/cdk/scrolling\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/keycodes\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,n,r,l,i,o,a,s,u,c,p,d,h,f){\"use strict\";var m={transformDrawer:h.trigger(\"transform\",[h.state(\"open, open-instant\",h.style({transform:\"none\",visibility:\"visible\"})),h.state(\"void\",h.style({\"box-shadow\":\"none\",visibility:\"hidden\"})),h.transition(\"void => open-instant\",h.animate(\"0ms\")),h.transition(\"void <=> open, open-instant => void\",h.animate(\"400ms cubic-bezier(0.25, 0.8, 0.25, 1)\"))])};function v(e){throw Error(\"A drawer was already declared for 'position=\\\"\"+e+\"\\\"'\")}var y=new l.InjectionToken(\"MAT_DRAWER_DEFAULT_AUTOSIZE\",{providedIn:\"root\",factory:g});function g(){return!1}var _,b=(_=n.CdkScrollable,o.__extends(w,_),w.prototype.ngAfterContentInit=function(){var e=this;this._container._contentMarginChanges.subscribe(function(){e._changeDetectorRef.markForCheck()})},w.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-drawer-content\",template:\"<ng-content></ng-content>\",host:{class:\"mat-drawer-content\",\"[style.margin-left.px]\":\"_container._contentMargins.left\",\"[style.margin-right.px]\":\"_container._contentMargins.right\"},changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None}]}],w.ctorParameters=function(){return[{type:l.ChangeDetectorRef},{type:S,decorators:[{type:l.Inject,args:[l.forwardRef(function(){return S})]}]},{type:l.ElementRef},{type:n.ScrollDispatcher},{type:l.NgZone}]},w);function w(e,t,n,r,i){var o=_.call(this,n,r,i)||this;return o._changeDetectorRef=e,o._container=t,o}var x=(Object.defineProperty(C.prototype,\"position\",{get:function(){return this._position},set:function(e){(e=\"end\"===e?\"end\":\"start\")!=this._position&&(this._position=e,this.onPositionChanged.emit())},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"mode\",{get:function(){return this._mode},set:function(e){this._mode=e,this._updateFocusTrapState(),this._modeChanged.next()},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"disableClose\",{get:function(){return this._disableClose},set:function(e){this._disableClose=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"autoFocus\",{get:function(){return this._autoFocus},set:function(e){this._autoFocus=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"_openedStream\",{get:function(){return this.openedChange.pipe(d.filter(function(e){return e}),d.map(function(){}))},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"openedStart\",{get:function(){return this._animationStarted.pipe(d.filter(function(e){return e.fromState!==e.toState&&0===e.toState.indexOf(\"open\")}),d.map(function(){}))},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"_closedStream\",{get:function(){return this.openedChange.pipe(d.filter(function(e){return!e}),d.map(function(){}))},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"closedStart\",{get:function(){return this._animationStarted.pipe(d.filter(function(e){return e.fromState!==e.toState&&\"void\"===e.toState}),d.map(function(){}))},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"_isFocusTrapEnabled\",{get:function(){return this.opened&&\"side\"!==this.mode},enumerable:!0,configurable:!0}),C.prototype._trapFocus=function(){var t=this;this.autoFocus&&this._focusTrap.focusInitialElementWhenReady().then(function(e){e||\"function\"!=typeof t._elementRef.nativeElement.focus||t._elementRef.nativeElement.focus()})},C.prototype._restoreFocus=function(){if(this.autoFocus){var e=this._doc&&this._doc.activeElement;e&&this._elementRef.nativeElement.contains(e)&&(this._elementFocusedBeforeDrawerWasOpened instanceof HTMLElement?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,this._openedVia):this._elementRef.nativeElement.blur()),this._elementFocusedBeforeDrawerWasOpened=null,this._openedVia=null}},C.prototype.ngAfterContentInit=function(){this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState()},C.prototype.ngAfterContentChecked=function(){this._platform.isBrowser&&(this._enableAnimations=!0)},C.prototype.ngOnDestroy=function(){this._focusTrap&&this._focusTrap.destroy(),this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()},Object.defineProperty(C.prototype,\"opened\",{get:function(){return this._opened},set:function(e){this.toggle(u.coerceBooleanProperty(e))},enumerable:!0,configurable:!0}),C.prototype.open=function(e){return this.toggle(!0,e)},C.prototype.close=function(){return this.toggle(!1)},C.prototype.toggle=function(e,t){var n=this;return void 0===e&&(e=!this.opened),void 0===t&&(t=\"program\"),(this._opened=e)?(this._animationState=this._enableAnimations?\"open\":\"open-instant\",this._openedVia=t):(this._animationState=\"void\",this._restoreFocus()),this._updateFocusTrapState(),new Promise(function(t){n.openedChange.pipe(d.take(1)).subscribe(function(e){return t(e?\"open\":\"close\")})})},Object.defineProperty(C.prototype,\"_width\",{get:function(){return this._elementRef.nativeElement&&this._elementRef.nativeElement.offsetWidth||0},enumerable:!0,configurable:!0}),C.prototype._updateFocusTrapState=function(){this._focusTrap&&(this._focusTrap.enabled=this._isFocusTrapEnabled)},C.prototype._animationStartListener=function(e){this._animationStarted.next(e)},C.prototype._animationDoneListener=function(e){this._animationEnd.next(e)},C.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-drawer\",exportAs:\"matDrawer\",template:'<div class=\"mat-drawer-inner-container\">\\r\\n  <ng-content></ng-content>\\r\\n</div>\\r\\n',animations:[m.transformDrawer],host:{class:\"mat-drawer\",\"[attr.align]\":\"null\",\"[class.mat-drawer-end]\":'position === \"end\"',\"[class.mat-drawer-over]\":'mode === \"over\"',\"[class.mat-drawer-push]\":'mode === \"push\"',\"[class.mat-drawer-side]\":'mode === \"side\"',\"[class.mat-drawer-opened]\":\"opened\",tabIndex:\"-1\"},changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None}]}],C.ctorParameters=function(){return[{type:l.ElementRef},{type:a.FocusTrapFactory},{type:a.FocusMonitor},{type:t.Platform},{type:l.NgZone},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[r.DOCUMENT]}]}]},C.propDecorators={position:[{type:l.Input}],mode:[{type:l.Input}],disableClose:[{type:l.Input}],autoFocus:[{type:l.Input}],_animationState:[{type:l.HostBinding,args:[\"@transform\"]}],openedChange:[{type:l.Output}],_openedStream:[{type:l.Output,args:[\"opened\"]}],openedStart:[{type:l.Output}],_closedStream:[{type:l.Output,args:[\"closed\"]}],closedStart:[{type:l.Output}],onPositionChanged:[{type:l.Output,args:[\"positionChanged\"]}],opened:[{type:l.Input}],_animationStartListener:[{type:l.HostListener,args:[\"@transform.start\",[\"$event\"]]}],_animationDoneListener:[{type:l.HostListener,args:[\"@transform.done\",[\"$event\"]]}]},C);function C(e,t,n,r,i,o){var a=this;this._elementRef=e,this._focusTrapFactory=t,this._focusMonitor=n,this._platform=r,this._ngZone=i,this._doc=o,this._elementFocusedBeforeDrawerWasOpened=null,this._enableAnimations=!1,this._position=\"start\",this._mode=\"over\",this._disableClose=!1,this._autoFocus=!0,this._animationStarted=new p.Subject,this._animationEnd=new p.Subject,this._animationState=\"void\",this.openedChange=new l.EventEmitter(!0),this._destroyed=new p.Subject,this.onPositionChanged=new l.EventEmitter,this._modeChanged=new p.Subject,this._opened=!1,this.openedChange.subscribe(function(e){e?(a._doc&&(a._elementFocusedBeforeDrawerWasOpened=a._doc.activeElement),a._isFocusTrapEnabled&&a._focusTrap&&a._trapFocus()):a._restoreFocus()}),this._ngZone.runOutsideAngular(function(){p.fromEvent(a._elementRef.nativeElement,\"keydown\").pipe(d.filter(function(e){return e.keyCode===c.ESCAPE&&!a.disableClose&&!c.hasModifierKey(e)}),d.takeUntil(a._destroyed)).subscribe(function(e){return a._ngZone.run(function(){a.close(),e.stopPropagation(),e.preventDefault()})})}),this._animationEnd.pipe(d.distinctUntilChanged(function(e,t){return e.fromState===t.fromState&&e.toState===t.toState})).subscribe(function(e){var t=e.fromState,n=e.toState;(0===n.indexOf(\"open\")&&\"void\"===t||\"void\"===n&&0===t.indexOf(\"open\"))&&a.openedChange.emit(a._opened)})}var S=(Object.defineProperty(E.prototype,\"start\",{get:function(){return this._start},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"end\",{get:function(){return this._end},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"autosize\",{get:function(){return this._autosize},set:function(e){this._autosize=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"hasBackdrop\",{get:function(){return null==this._backdropOverride?!this._start||\"side\"!==this._start.mode||!this._end||\"side\"!==this._end.mode:this._backdropOverride},set:function(e){this._backdropOverride=null==e?null:u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"scrollable\",{get:function(){return this._userContent||this._content},enumerable:!0,configurable:!0}),E.prototype.ngAfterContentInit=function(){var t=this;this._drawers.changes.pipe(d.startWith(null)).subscribe(function(){t._validateDrawers(),t._drawers.forEach(function(e){t._watchDrawerToggle(e),t._watchDrawerPosition(e),t._watchDrawerMode(e)}),t._drawers.length&&!t._isDrawerOpen(t._start)&&!t._isDrawerOpen(t._end)||t.updateContentMargins(),t._changeDetectorRef.markForCheck()}),this._doCheckSubject.pipe(d.debounceTime(10),d.takeUntil(this._destroyed)).subscribe(function(){return t.updateContentMargins()})},E.prototype.ngOnDestroy=function(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._destroyed.next(),this._destroyed.complete()},E.prototype.open=function(){this._drawers.forEach(function(e){return e.open()})},E.prototype.close=function(){this._drawers.forEach(function(e){return e.close()})},E.prototype.updateContentMargins=function(){var e=this,t=0,n=0;if(this._left&&this._left.opened&&(\"side\"==this._left.mode?t+=this._left._width:\"push\"==this._left.mode&&(t+=r=this._left._width,n-=r)),this._right&&this._right.opened)if(\"side\"==this._right.mode)n+=this._right._width;else if(\"push\"==this._right.mode){var r;n+=r=this._right._width,t-=r}n=n||null,(t=t||null)===this._contentMargins.left&&n===this._contentMargins.right||(this._contentMargins={left:t,right:n},this._ngZone.run(function(){return e._contentMarginChanges.next(e._contentMargins)}))},E.prototype.ngDoCheck=function(){var e=this;this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(function(){return e._doCheckSubject.next()})},E.prototype._watchDrawerToggle=function(e){var t=this;e._animationStarted.pipe(d.filter(function(e){return e.fromState!==e.toState}),d.takeUntil(this._drawers.changes)).subscribe(function(e){\"open-instant\"!==e.toState&&\"NoopAnimations\"!==t._animationMode&&t._element.nativeElement.classList.add(\"mat-drawer-transition\"),t.updateContentMargins(),t._changeDetectorRef.markForCheck()}),\"side\"!==e.mode&&e.openedChange.pipe(d.takeUntil(this._drawers.changes)).subscribe(function(){return t._setContainerClass(e.opened)})},E.prototype._watchDrawerPosition=function(e){var t=this;e&&e.onPositionChanged.pipe(d.takeUntil(this._drawers.changes)).subscribe(function(){t._ngZone.onMicrotaskEmpty.asObservable().pipe(d.take(1)).subscribe(function(){t._validateDrawers()})})},E.prototype._watchDrawerMode=function(e){var t=this;e&&e._modeChanged.pipe(d.takeUntil(p.merge(this._drawers.changes,this._destroyed))).subscribe(function(){t.updateContentMargins(),t._changeDetectorRef.markForCheck()})},E.prototype._setContainerClass=function(e){var t=this._element.nativeElement.classList,n=\"mat-drawer-container-has-open\";e?t.add(n):t.remove(n)},E.prototype._validateDrawers=function(){var t=this;this._start=this._end=null,this._drawers.forEach(function(e){\"end\"==e.position?(null!=t._end&&v(\"end\"),t._end=e):(null!=t._start&&v(\"start\"),t._start=e)}),this._right=this._left=null,this._dir&&\"rtl\"===this._dir.value?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)},E.prototype._isPushed=function(){return this._isDrawerOpen(this._start)&&\"over\"!=this._start.mode||this._isDrawerOpen(this._end)&&\"over\"!=this._end.mode},E.prototype._onBackdropClicked=function(){this.backdropClick.emit(),this._closeModalDrawer()},E.prototype._closeModalDrawer=function(){var t=this;[this._start,this._end].filter(function(e){return e&&!e.disableClose&&t._canHaveBackdrop(e)}).forEach(function(e){return e.close()})},E.prototype._isShowingBackdrop=function(){return this._isDrawerOpen(this._start)&&this._canHaveBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._canHaveBackdrop(this._end)},E.prototype._canHaveBackdrop=function(e){return\"side\"!==e.mode||!!this._backdropOverride},E.prototype._isDrawerOpen=function(e){return null!=e&&e.opened},E.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-drawer-container\",exportAs:\"matDrawerContainer\",template:'<div class=\"mat-drawer-backdrop\" (click)=\"_onBackdropClicked()\" *ngIf=\"hasBackdrop\"\\n     [class.mat-drawer-shown]=\"_isShowingBackdrop()\"></div>\\n\\n<ng-content select=\"mat-drawer\"></ng-content>\\n\\n<ng-content select=\"mat-drawer-content\">\\n</ng-content>\\n<mat-drawer-content *ngIf=\"!_content\">\\n  <ng-content></ng-content>\\n</mat-drawer-content>\\n',host:{class:\"mat-drawer-container\",\"[class.mat-drawer-container-explicit-backdrop]\":\"_backdropOverride\"},changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None,styles:[\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(-ms-high-contrast: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(-ms-high-contrast: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(-ms-high-contrast: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}/*# sourceMappingURL=drawer.css.map */\\n\"]}]}],E.ctorParameters=function(){return[{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.ElementRef},{type:l.NgZone},{type:l.ChangeDetectorRef},{type:n.ViewportRuler},{type:void 0,decorators:[{type:l.Inject,args:[y]}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[f.ANIMATION_MODULE_TYPE]}]}]},E.propDecorators={_drawers:[{type:l.ContentChildren,args:[x]}],_content:[{type:l.ContentChild,args:[b,{static:!1}]}],_userContent:[{type:l.ViewChild,args:[b,{static:!1}]}],autosize:[{type:l.Input}],hasBackdrop:[{type:l.Input}],backdropClick:[{type:l.Output}]},E);function E(e,t,n,r,i,o,a){var s=this;void 0===o&&(o=!1),this._dir=e,this._element=t,this._ngZone=n,this._changeDetectorRef=r,this._animationMode=a,this.backdropClick=new l.EventEmitter,this._destroyed=new p.Subject,this._doCheckSubject=new p.Subject,this._contentMargins={left:null,right:null},this._contentMarginChanges=new p.Subject,e&&e.change.pipe(d.takeUntil(this._destroyed)).subscribe(function(){s._validateDrawers(),s.updateContentMargins()}),i.change().pipe(d.takeUntil(this._destroyed)).subscribe(function(){return s.updateContentMargins()}),this._autosize=o}var O,k=(O=b,o.__extends(D,O),D.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-sidenav-content\",template:\"<ng-content></ng-content>\",host:{class:\"mat-drawer-content mat-sidenav-content\",\"[style.margin-left.px]\":\"_container._contentMargins.left\",\"[style.margin-right.px]\":\"_container._contentMargins.right\"},changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None}]}],D.ctorParameters=function(){return[{type:l.ChangeDetectorRef},{type:M,decorators:[{type:l.Inject,args:[l.forwardRef(function(){return M})]}]},{type:l.ElementRef},{type:n.ScrollDispatcher},{type:l.NgZone}]},D);function D(e,t,n,r,i){return O.call(this,e,t,n,r,i)||this}var T,I=(T=x,o.__extends(P,T),Object.defineProperty(P.prototype,\"fixedInViewport\",{get:function(){return this._fixedInViewport},set:function(e){this._fixedInViewport=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"fixedTopGap\",{get:function(){return this._fixedTopGap},set:function(e){this._fixedTopGap=u.coerceNumberProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"fixedBottomGap\",{get:function(){return this._fixedBottomGap},set:function(e){this._fixedBottomGap=u.coerceNumberProperty(e)},enumerable:!0,configurable:!0}),P.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-sidenav\",exportAs:\"matSidenav\",template:'<div class=\"mat-drawer-inner-container\">\\r\\n  <ng-content></ng-content>\\r\\n</div>\\r\\n',animations:[m.transformDrawer],host:{class:\"mat-drawer mat-sidenav\",tabIndex:\"-1\",\"[attr.align]\":\"null\",\"[class.mat-drawer-end]\":'position === \"end\"',\"[class.mat-drawer-over]\":'mode === \"over\"',\"[class.mat-drawer-push]\":'mode === \"push\"',\"[class.mat-drawer-side]\":'mode === \"side\"',\"[class.mat-drawer-opened]\":\"opened\",\"[class.mat-sidenav-fixed]\":\"fixedInViewport\",\"[style.top.px]\":\"fixedInViewport ? fixedTopGap : null\",\"[style.bottom.px]\":\"fixedInViewport ? fixedBottomGap : null\"},changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None}]}],P.propDecorators={fixedInViewport:[{type:l.Input}],fixedTopGap:[{type:l.Input}],fixedBottomGap:[{type:l.Input}]},P);function P(){var e=null!==T&&T.apply(this,arguments)||this;return e._fixedInViewport=!1,e._fixedTopGap=0,e._fixedBottomGap=0,e}var A,M=(A=S,o.__extends(R,A),R.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-sidenav-container\",exportAs:\"matSidenavContainer\",template:'<div class=\"mat-drawer-backdrop\" (click)=\"_onBackdropClicked()\" *ngIf=\"hasBackdrop\"\\n     [class.mat-drawer-shown]=\"_isShowingBackdrop()\"></div>\\n\\n<ng-content select=\"mat-sidenav\"></ng-content>\\n\\n<ng-content select=\"mat-sidenav-content\">\\n</ng-content>\\n<mat-sidenav-content *ngIf=\"!_content\" cdkScrollable>\\n  <ng-content></ng-content>\\n</mat-sidenav-content>\\n',host:{class:\"mat-drawer-container mat-sidenav-container\",\"[class.mat-drawer-container-explicit-backdrop]\":\"_backdropOverride\"},changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None,styles:[\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(-ms-high-contrast: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(-ms-high-contrast: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(-ms-high-contrast: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}/*# sourceMappingURL=drawer.css.map */\\n\"]}]}],R.propDecorators={_drawers:[{type:l.ContentChildren,args:[I]}],_content:[{type:l.ContentChild,args:[k,{static:!1}]}]},R);function R(){return null!==A&&A.apply(this,arguments)||this}var N=(j.decorators=[{type:l.NgModule,args:[{imports:[r.CommonModule,i.MatCommonModule,n.ScrollingModule,t.PlatformModule],exports:[i.MatCommonModule,x,S,b,I,M,k],declarations:[x,S,b,I,M,k]}]}],j);function j(){}e.MatSidenavModule=N,e.throwMatDuplicatedDrawerError=v,e.MAT_DRAWER_DEFAULT_AUTOSIZE=y,e.MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY=g,e.MatDrawerContent=b,e.MatDrawer=x,e.MatDrawerContainer=S,e.MatSidenavContent=k,e.MatSidenav=I,e.MatSidenavContainer=M,e.matDrawerAnimations=m,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/observers\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/forms\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-slide-toggle.umd.js\",[\"@angular/cdk/observers\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/forms\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/observers\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/forms\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,u,n,r,i,o,a,s,l){\"use strict\";function c(e){this._elementRef=e}var p,d=new u.InjectionToken(\"mat-slide-toggle-default-options\",{providedIn:\"root\",factory:function(){return{disableToggleValue:!1}}}),h=0,f={provide:s.NG_VALUE_ACCESSOR,useExisting:u.forwardRef(function(){return y}),multi:!0},m=function(e,t){this.source=e,this.checked=t},v=n.mixinTabIndex(n.mixinColor(n.mixinDisableRipple(n.mixinDisabled(c)),\"accent\")),y=(p=v,r.__extends(g,p),Object.defineProperty(g.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=a.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"checked\",{get:function(){return this._checked},set:function(e){this._checked=a.coerceBooleanProperty(e),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"inputId\",{get:function(){return(this.id||this._uniqueId)+\"-input\"},enumerable:!0,configurable:!0}),g.prototype.ngAfterContentInit=function(){var t=this;this._focusMonitor.monitor(this._elementRef,!0).subscribe(function(e){e||Promise.resolve().then(function(){return t._onTouched()})})},g.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef)},g.prototype._onChangeEvent=function(e){e.stopPropagation(),this.toggleChange.emit(),this.defaults.disableToggleValue?this._inputElement.nativeElement.checked=this.checked:(this.checked=this._inputElement.nativeElement.checked,this._emitChangeEvent())},g.prototype._onInputClick=function(e){e.stopPropagation()},g.prototype.writeValue=function(e){this.checked=!!e},g.prototype.registerOnChange=function(e){this._onChange=e},g.prototype.registerOnTouched=function(e){this._onTouched=e},g.prototype.setDisabledState=function(e){this.disabled=e,this._changeDetectorRef.markForCheck()},g.prototype.focus=function(e){this._focusMonitor.focusVia(this._inputElement,\"keyboard\",e)},g.prototype.toggle=function(){this.checked=!this.checked,this._onChange(this.checked)},g.prototype._emitChangeEvent=function(){this._onChange(this.checked),this.change.emit(new m(this,this.checked))},g.prototype._onLabelTextChange=function(){this._changeDetectorRef.detectChanges()},g.decorators=[{type:u.Component,args:[{moduleId:module.id,selector:\"mat-slide-toggle\",exportAs:\"matSlideToggle\",host:{class:\"mat-slide-toggle\",\"[id]\":\"id\",\"[attr.tabindex]\":\"disabled ? null : -1\",\"[attr.aria-label]\":\"null\",\"[attr.aria-labelledby]\":\"null\",\"[class.mat-checked]\":\"checked\",\"[class.mat-disabled]\":\"disabled\",\"[class.mat-slide-toggle-label-before]\":'labelPosition == \"before\"',\"[class._mat-animation-noopable]\":'_animationMode === \"NoopAnimations\"',\"(focus)\":\"_inputElement.nativeElement.focus()\"},template:'<label [attr.for]=\"inputId\" class=\"mat-slide-toggle-label\" #label>\\n  <div #toggleBar class=\"mat-slide-toggle-bar\"\\n       [class.mat-slide-toggle-bar-no-side-margin]=\"!labelContent.textContent || !labelContent.textContent.trim()\">\\n\\n    <input #input class=\"mat-slide-toggle-input cdk-visually-hidden\" type=\"checkbox\"\\n           role=\"switch\"\\n           [id]=\"inputId\"\\n           [required]=\"required\"\\n           [tabIndex]=\"tabIndex\"\\n           [checked]=\"checked\"\\n           [disabled]=\"disabled\"\\n           [attr.name]=\"name\"\\n           [attr.aria-checked]=\"checked.toString()\"\\n           [attr.aria-label]=\"ariaLabel\"\\n           [attr.aria-labelledby]=\"ariaLabelledby\"\\n           (change)=\"_onChangeEvent($event)\"\\n           (click)=\"_onInputClick($event)\">\\n\\n    <div class=\"mat-slide-toggle-thumb-container\" #thumbContainer>\\n      <div class=\"mat-slide-toggle-thumb\"></div>\\n      <div class=\"mat-slide-toggle-ripple\" mat-ripple\\n           [matRippleTrigger]=\"label\"\\n           [matRippleDisabled]=\"disableRipple || disabled\"\\n           [matRippleCentered]=\"true\"\\n           [matRippleRadius]=\"20\"\\n           [matRippleAnimation]=\"{enterDuration: 150}\">\\n\\n        <div class=\"mat-ripple-element mat-slide-toggle-persistent-ripple\"></div>\\n      </div>\\n    </div>\\n\\n  </div>\\n\\n  <span class=\"mat-slide-toggle-content\" #labelContent (cdkObserveContent)=\"_onLabelTextChange()\">\\n    \\x3c!-- Add an invisible span so JAWS can read the label --\\x3e\\n    <span style=\"display:none\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </span>\\n</label>\\n',providers:[f],inputs:[\"disabled\",\"disableRipple\",\"color\",\"tabIndex\"],encapsulation:u.ViewEncapsulation.None,changeDetection:u.ChangeDetectionStrategy.OnPush,styles:[\".mat-slide-toggle{display:inline-block;height:24px;max-width:100%;line-height:24px;white-space:nowrap;outline:none;-webkit-tap-highlight-color:transparent}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px, 0, 0)}[dir=rtl] .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(-16px, 0, 0)}.mat-slide-toggle.mat-disabled{opacity:.38}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{display:flex;flex:1;flex-direction:row;align-items:center;height:inherit;cursor:pointer}.mat-slide-toggle-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar,.mat-slide-toggle-bar{margin-right:8px;margin-left:0}[dir=rtl] .mat-slide-toggle-bar,.mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0, 0, 0);transition:all 80ms linear;transition-property:transform}._mat-animation-noopable .mat-slide-toggle-thumb-container{transition:none}[dir=rtl] .mat-slide-toggle-thumb-container{left:auto;right:0}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;flex-shrink:0;border-radius:8px}.mat-slide-toggle-input{bottom:0;left:10px}[dir=rtl] .mat-slide-toggle-input{left:auto;right:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}._mat-animation-noopable .mat-slide-toggle-bar,._mat-animation-noopable .mat-slide-toggle-thumb{transition:none}.mat-slide-toggle .mat-slide-toggle-ripple{position:absolute;top:calc(50% - 20px);left:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-slide-toggle .mat-slide-toggle-ripple .mat-ripple-element:not(.mat-slide-toggle-persistent-ripple){opacity:.12}.mat-slide-toggle-persistent-ripple{width:100%;height:100%;transform:none}.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:.04}.mat-slide-toggle:not(.mat-disabled).cdk-keyboard-focused .mat-slide-toggle-persistent-ripple{opacity:.12}.mat-slide-toggle-persistent-ripple,.mat-slide-toggle.mat-disabled .mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:0}@media(hover: none){.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{display:none}}@media(-ms-high-contrast: active){.mat-slide-toggle-thumb{background:#fff;border:1px solid #000}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background:#000;border:1px solid #fff}.mat-slide-toggle-bar{background:#fff}.mat-slide-toggle.cdk-keyboard-focused .mat-slide-toggle-bar{outline:1px dotted;outline-offset:5px}}@media(-ms-high-contrast: black-on-white){.mat-slide-toggle-bar{border:1px solid #000}}/*# sourceMappingURL=slide-toggle.css.map */\\n\"]}]}],g.ctorParameters=function(){return[{type:u.ElementRef},{type:i.FocusMonitor},{type:u.ChangeDetectorRef},{type:String,decorators:[{type:u.Attribute,args:[\"tabindex\"]}]},{type:u.NgZone},{type:void 0,decorators:[{type:u.Inject,args:[d]}]},{type:String,decorators:[{type:u.Optional},{type:u.Inject,args:[l.ANIMATION_MODULE_TYPE]}]},{type:o.Directionality,decorators:[{type:u.Optional}]}]},g.propDecorators={_thumbEl:[{type:u.ViewChild,args:[\"thumbContainer\",{static:!1}]}],_thumbBarEl:[{type:u.ViewChild,args:[\"toggleBar\",{static:!1}]}],name:[{type:u.Input}],id:[{type:u.Input}],labelPosition:[{type:u.Input}],ariaLabel:[{type:u.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:u.Input,args:[\"aria-labelledby\"]}],required:[{type:u.Input}],checked:[{type:u.Input}],change:[{type:u.Output}],toggleChange:[{type:u.Output}],dragChange:[{type:u.Output}],_inputElement:[{type:u.ViewChild,args:[\"input\",{static:!1}]}]},g);function g(e,t,n,r,i,o,a,s){var l=p.call(this,e)||this;return l._focusMonitor=t,l._changeDetectorRef=n,l.defaults=o,l._animationMode=a,l._onChange=function(e){},l._onTouched=function(){},l._uniqueId=\"mat-slide-toggle-\"+ ++h,l._required=!1,l._checked=!1,l.name=null,l.id=l._uniqueId,l.labelPosition=\"after\",l.ariaLabel=null,l.ariaLabelledby=null,l.change=new u.EventEmitter,l.toggleChange=new u.EventEmitter,l.dragChange=new u.EventEmitter,l.tabIndex=parseInt(r)||0,l}var _,b={provide:s.NG_VALIDATORS,useExisting:u.forwardRef(function(){return w}),multi:!0},w=(_=s.CheckboxRequiredValidator,r.__extends(x,_),x.decorators=[{type:u.Directive,args:[{selector:\"mat-slide-toggle[required][formControlName],\\n             mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]\",providers:[b]}]}],x);function x(){return null!==_&&_.apply(this,arguments)||this}var C=(S.decorators=[{type:u.NgModule,args:[{exports:[w],declarations:[w]}]}],S);function S(){}var E=(O.decorators=[{type:u.NgModule,args:[{imports:[C,n.MatRippleModule,n.MatCommonModule,t.ObserversModule],exports:[C,y,n.MatCommonModule],declarations:[y]}]}],O);function O(){}e._MatSlideToggleRequiredValidatorModule=C,e.MatSlideToggleModule=E,e.MAT_SLIDE_TOGGLE_VALUE_ACCESSOR=f,e.MatSlideToggleChange=m,e.MatSlideToggle=y,e.MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS=d,e.MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR=b,e.MatSlideToggleRequiredValidator=w,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/common\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/forms/bundles/forms.umd.js\",[\"@angular/core\",\"@angular/common\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/common\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,a,r,i,o){\"use strict\";var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function t(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var n=function(){return(n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function l(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function u(n,r){return function(e,t){r(e,t,n)}}function c(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function p(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function d(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}var h=new a.InjectionToken(\"NgValueAccessor\"),f={provide:h,useExisting:a.forwardRef(function(){return m}),multi:!0},m=(v.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"checked\",e)},v.prototype.registerOnChange=function(e){this.onChange=e},v.prototype.registerOnTouched=function(e){this.onTouched=e},v.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},v=l([a.Directive({selector:\"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\",host:{\"(change)\":\"onChange($event.target.checked)\",\"(blur)\":\"onTouched()\"},providers:[f]}),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef])],v));function v(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}var y={provide:h,useExisting:a.forwardRef(function(){return _}),multi:!0};var g=new a.InjectionToken(\"CompositionEventMode\"),_=(b.prototype.writeValue=function(e){var t=null==e?\"\":e;this._renderer.setProperty(this._elementRef.nativeElement,\"value\",t)},b.prototype.registerOnChange=function(e){this.onChange=e},b.prototype.registerOnTouched=function(e){this.onTouched=e},b.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},b.prototype._handleInput=function(e){this._compositionMode&&(!this._compositionMode||this._composing)||this.onChange(e)},b.prototype._compositionStart=function(){this._composing=!0},b.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},b=l([a.Directive({selector:\"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\",host:{\"(input)\":\"$any(this)._handleInput($event.target.value)\",\"(blur)\":\"onTouched()\",\"(compositionstart)\":\"$any(this)._compositionStart()\",\"(compositionend)\":\"$any(this)._compositionEnd($event.target.value)\"},providers:[y]}),u(2,a.Optional()),u(2,a.Inject(g)),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef,Boolean])],b));function b(e,t,n){this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){var e=r.ɵgetDOM()?r.ɵgetDOM().getUserAgent():\"\";return/android (\\d+)/.test(e.toLowerCase())}())}var w=(Object.defineProperty(x.prototype,\"value\",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"valid\",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"invalid\",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"pending\",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"disabled\",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"enabled\",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"errors\",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"pristine\",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"dirty\",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"touched\",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"status\",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"untouched\",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"statusChanges\",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"valueChanges\",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"path\",{get:function(){return null},enumerable:!0,configurable:!0}),x.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},x.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},x.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},x);function x(){}var C,S=(t(E,C=w),Object.defineProperty(E.prototype,\"formDirective\",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(E.prototype,\"path\",{get:function(){return null},enumerable:!0,configurable:!0}),E);function E(){return null!==C&&C.apply(this,arguments)||this}function O(){throw new Error(\"unimplemented\")}var k,D=(t(T,k=w),Object.defineProperty(T.prototype,\"validator\",{get:function(){return O()},enumerable:!0,configurable:!0}),Object.defineProperty(T.prototype,\"asyncValidator\",{get:function(){return O()},enumerable:!0,configurable:!0}),T);function T(){var e=null!==k&&k.apply(this,arguments)||this;return e._parent=null,e.name=null,e.valueAccessor=null,e._rawValidators=[],e._rawAsyncValidators=[],e}var I=(Object.defineProperty(P.prototype,\"ngClassUntouched\",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"ngClassTouched\",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"ngClassPristine\",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"ngClassDirty\",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"ngClassValid\",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"ngClassInvalid\",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"ngClassPending\",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),P);function P(e){this._cd=e}var A,M={\"[class.ng-untouched]\":\"ngClassUntouched\",\"[class.ng-touched]\":\"ngClassTouched\",\"[class.ng-pristine]\":\"ngClassPristine\",\"[class.ng-dirty]\":\"ngClassDirty\",\"[class.ng-valid]\":\"ngClassValid\",\"[class.ng-invalid]\":\"ngClassInvalid\",\"[class.ng-pending]\":\"ngClassPending\"},R=(t(N,A=I),N=l([a.Directive({selector:\"[formControlName],[ngModel],[formControl]\",host:M}),u(0,a.Self()),c(\"design:paramtypes\",[D])],N));function N(e){return A.call(this,e)||this}var j,F=(t(L,j=I),L=l([a.Directive({selector:\"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\",host:M}),u(0,a.Self()),c(\"design:paramtypes\",[S])],L));function L(e){return j.call(this,e)||this}function V(e){return null==e||0===e.length}var B=new a.InjectionToken(\"NgValidators\"),U=new a.InjectionToken(\"NgAsyncValidators\"),z=/^(?=.{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])?)*$/,q=(H.min=function(n){return function(e){if(V(e.value)||V(n))return null;var t=parseFloat(e.value);return!isNaN(t)&&t<n?{min:{min:n,actual:e.value}}:null}},H.max=function(n){return function(e){if(V(e.value)||V(n))return null;var t=parseFloat(e.value);return!isNaN(t)&&n<t?{max:{max:n,actual:e.value}}:null}},H.required=function(e){return V(e.value)?{required:!0}:null},H.requiredTrue=function(e){return!0===e.value?null:{required:!0}},H.email=function(e){return V(e.value)?null:z.test(e.value)?null:{email:!0}},H.minLength=function(n){return function(e){if(V(e.value))return null;var t=e.value?e.value.length:0;return t<n?{minlength:{requiredLength:n,actualLength:t}}:null}},H.maxLength=function(n){return function(e){var t=e.value?e.value.length:0;return n<t?{maxlength:{requiredLength:n,actualLength:t}}:null}},H.pattern=function(e){return e?(n=\"string\"==typeof e?(r=\"\",\"^\"!==e.charAt(0)&&(r+=\"^\"),r+=e,\"$\"!==e.charAt(e.length-1)&&(r+=\"$\"),new RegExp(r)):(r=e.toString(),e),function(e){if(V(e.value))return null;var t=e.value;return n.test(t)?null:{pattern:{requiredPattern:r,actualValue:t}}}):H.nullValidator;var n,r},H.nullValidator=function(e){return null},H.compose=function(e){if(!e)return null;var t=e.filter(W);return 0==t.length?null:function(e){return Y(function(t,e){return e.map(function(e){return e(t)})}(e,t))}},H.composeAsync=function(e){if(!e)return null;var n=e.filter(W);return 0==n.length?null:function(e){var t=function(t,e){return e.map(function(e){return e(t)})}(e,n).map(G);return i.forkJoin(t).pipe(o.map(Y))}},H);function H(){}function W(e){return null!=e}function G(e){var t=a.ɵisPromise(e)?i.from(e):e;if(!a.ɵisObservable(t))throw new Error(\"Expected validator to return Promise or Observable.\");return t}function Y(e){var t=e.reduce(function(e,t){return null!=t?n(n({},e),t):e},{});return 0===Object.keys(t).length?null:t}function K(t){return t.validate?function(e){return t.validate(e)}:t}function Z(t){return t.validate?function(e){return t.validate(e)}:t}var Q={provide:h,useExisting:a.forwardRef(function(){return X}),multi:!0},X=($.prototype.writeValue=function(e){var t=null==e?\"\":e;this._renderer.setProperty(this._elementRef.nativeElement,\"value\",t)},$.prototype.registerOnChange=function(t){this.onChange=function(e){t(\"\"==e?null:parseFloat(e))}},$.prototype.registerOnTouched=function(e){this.onTouched=e},$.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},$=l([a.Directive({selector:\"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]\",host:{\"(change)\":\"onChange($event.target.value)\",\"(input)\":\"onChange($event.target.value)\",\"(blur)\":\"onTouched()\"},providers:[Q]}),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef])],$));function $(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}var J={provide:h,useExisting:a.forwardRef(function(){return ne}),multi:!0},ee=(te.prototype.add=function(e,t){this._accessors.push([e,t])},te.prototype.remove=function(e){for(var t=this._accessors.length-1;0<=t;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},te.prototype.select=function(t){var n=this;this._accessors.forEach(function(e){n._isSameGroup(e,t)&&e[1]!==t&&e[1].fireUncheck(t.value)})},te.prototype._isSameGroup=function(e,t){return!!e[0].control&&e[0]._parent===t._control._parent&&e[1].name===t.name},te=l([a.Injectable()],te));function te(){this._accessors=[]}var ne=(re.prototype.ngOnInit=function(){this._control=this._injector.get(D),this._checkName(),this._registry.add(this._control,this)},re.prototype.ngOnDestroy=function(){this._registry.remove(this)},re.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,\"checked\",this._state)},re.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},re.prototype.fireUncheck=function(e){this.writeValue(e)},re.prototype.registerOnTouched=function(e){this.onTouched=e},re.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},re.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},re.prototype._throwNameError=function(){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    ')},l([a.Input(),c(\"design:type\",String)],re.prototype,\"name\",void 0),l([a.Input(),c(\"design:type\",String)],re.prototype,\"formControlName\",void 0),l([a.Input(),c(\"design:type\",Object)],re.prototype,\"value\",void 0),re=l([a.Directive({selector:\"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]\",host:{\"(change)\":\"onChange()\",\"(blur)\":\"onTouched()\"},providers:[J]}),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef,ee,a.Injector])],re));function re(e,t,n,r){this._renderer=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}var ie={provide:h,useExisting:a.forwardRef(function(){return oe}),multi:!0},oe=(ae.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",parseFloat(e))},ae.prototype.registerOnChange=function(t){this.onChange=function(e){t(\"\"==e?null:parseFloat(e))}},ae.prototype.registerOnTouched=function(e){this.onTouched=e},ae.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},ae=l([a.Directive({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:[ie]}),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef])],ae));function ae(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}var se='\\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    });',le='\\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    });',ue='\\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    });',ce='\\n    <form>\\n       <div ngModelGroup=\"person\">\\n          <input [(ngModel)]=\"person.name\" name=\"firstName\">\\n       </div>\\n    </form>',pe='\\n    <div [formGroup]=\"myGroup\">\\n       <input formControlName=\"firstName\">\\n       <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\\n    </div>\\n  ',de=(he.controlParentException=function(){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      \"+se)},he.ngModelGroupException=function(){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        '+le+\"\\n\\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\\n\\n        \"+ce)},he.missingFormException=function(){throw new Error(\"formGroup expects a FormGroup instance. Please pass one in.\\n\\n       Example:\\n\\n       \"+se)},he.groupParentException=function(){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      \"+le)},he.arrayParentException=function(){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        \"+ue)},he.disabledAttrWarning=function(){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    \")},he.ngModelWarning=function(e){console.warn(\"\\n    It looks like you're using ngModel on the same form field as \"+e+\". \\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 Angular v7.\\n    \\n    For more information on this, see our API docs here:\\n    https://angular.io/api/forms/\"+(\"formControl\"===e?\"FormControlDirective\":\"FormControlName\")+\"#use-with-ngmodel\\n    \")},he);function he(){}var fe={provide:h,useExisting:a.forwardRef(function(){return ve}),multi:!0};function me(e,t){return null==e?\"\"+t:(t&&\"object\"==typeof t&&(t=\"Object\"),(e+\": \"+t).slice(0,50))}var ve=(Object.defineProperty(ye.prototype,\"compareWith\",{set:function(e){if(\"function\"!=typeof e)throw new Error(\"compareWith must be a function, but received \"+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),ye.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,\"selectedIndex\",-1);var n=me(t,e);this._renderer.setProperty(this._elementRef.nativeElement,\"value\",n)},ye.prototype.registerOnChange=function(t){var n=this;this.onChange=function(e){n.value=n._getOptionValue(e),t(n.value)}},ye.prototype.registerOnTouched=function(e){this.onTouched=e},ye.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},ye.prototype._registerOption=function(){return(this._idCounter++).toString()},ye.prototype._getOptionId=function(e){var t,n;try{for(var r=p(Array.from(this._optionMap.keys())),i=r.next();!i.done;i=r.next()){var o=i.value;if(this._compareWith(this._optionMap.get(o),e))return o}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return null},ye.prototype._getOptionValue=function(e){var t=function(e){return e.split(\":\")[0]}(e);return this._optionMap.has(t)?this._optionMap.get(t):e},l([a.Input(),c(\"design:type\",Function),c(\"design:paramtypes\",[Function])],ye.prototype,\"compareWith\",null),ye=l([a.Directive({selector:\"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]\",host:{\"(change)\":\"onChange($event.target.value)\",\"(blur)\":\"onTouched()\"},providers:[fe]}),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef])],ye));function ye(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=a.ɵlooseIdentical}var ge=(Object.defineProperty(_e.prototype,\"ngValue\",{set:function(e){null!=this._select&&(this._select._optionMap.set(this.id,e),this._setElementValue(me(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(_e.prototype,\"value\",{set:function(e){this._setElementValue(e),this._select&&this._select.writeValue(this._select.value)},enumerable:!0,configurable:!0}),_e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,\"value\",e)},_e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},l([a.Input(\"ngValue\"),c(\"design:type\",Object),c(\"design:paramtypes\",[Object])],_e.prototype,\"ngValue\",null),l([a.Input(\"value\"),c(\"design:type\",Object),c(\"design:paramtypes\",[Object])],_e.prototype,\"value\",null),_e=l([a.Directive({selector:\"option\"}),u(2,a.Optional()),u(2,a.Host()),c(\"design:paramtypes\",[a.ElementRef,a.Renderer2,ve])],_e));function _e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption())}var be={provide:h,useExisting:a.forwardRef(function(){return xe}),multi:!0};function we(e,t){return null==e?\"\"+t:(\"string\"==typeof t&&(t=\"'\"+t+\"'\"),t&&\"object\"==typeof t&&(t=\"Object\"),(e+\": \"+t).slice(0,50))}var xe=(Object.defineProperty(Ce.prototype,\"compareWith\",{set:function(e){if(\"function\"!=typeof e)throw new Error(\"compareWith must be a function, but received \"+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),Ce.prototype.writeValue=function(e){var t,n=this;if(this.value=e,Array.isArray(e)){var r=e.map(function(e){return n._getOptionId(e)});t=function(e,t){e._setSelected(-1<r.indexOf(t.toString()))}}else t=function(e,t){e._setSelected(!1)};this._optionMap.forEach(t)},Ce.prototype.registerOnChange=function(a){var s=this;this.onChange=function(e){var t=[];if(e.hasOwnProperty(\"selectedOptions\"))for(var n=e.selectedOptions,r=0;r<n.length;r++){var i=n.item(r),o=s._getOptionValue(i.value);t.push(o)}else for(n=e.options,r=0;r<n.length;r++)(i=n.item(r)).selected&&(o=s._getOptionValue(i.value),t.push(o));s.value=t,a(t)}},Ce.prototype.registerOnTouched=function(e){this.onTouched=e},Ce.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",e)},Ce.prototype._registerOption=function(e){var t=(this._idCounter++).toString();return this._optionMap.set(t,e),t},Ce.prototype._getOptionId=function(e){var t,n;try{for(var r=p(Array.from(this._optionMap.keys())),i=r.next();!i.done;i=r.next()){var o=i.value;if(this._compareWith(this._optionMap.get(o)._value,e))return o}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return null},Ce.prototype._getOptionValue=function(e){var t=function(e){return e.split(\":\")[0]}(e);return this._optionMap.has(t)?this._optionMap.get(t)._value:e},l([a.Input(),c(\"design:type\",Function),c(\"design:paramtypes\",[Function])],Ce.prototype,\"compareWith\",null),Ce=l([a.Directive({selector:\"select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]\",host:{\"(change)\":\"onChange($event.target)\",\"(blur)\":\"onTouched()\"},providers:[be]}),c(\"design:paramtypes\",[a.Renderer2,a.ElementRef])],Ce));function Ce(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=a.ɵlooseIdentical}var Se=(Object.defineProperty(Ee.prototype,\"ngValue\",{set:function(e){null!=this._select&&(this._value=e,this._setElementValue(we(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(Ee.prototype,\"value\",{set:function(e){this._select?(this._value=e,this._setElementValue(we(this.id,e)),this._select.writeValue(this._select.value)):this._setElementValue(e)},enumerable:!0,configurable:!0}),Ee.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,\"value\",e)},Ee.prototype._setSelected=function(e){this._renderer.setProperty(this._element.nativeElement,\"selected\",e)},Ee.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},l([a.Input(\"ngValue\"),c(\"design:type\",Object),c(\"design:paramtypes\",[Object])],Ee.prototype,\"ngValue\",null),l([a.Input(\"value\"),c(\"design:type\",Object),c(\"design:paramtypes\",[Object])],Ee.prototype,\"value\",null),Ee=l([a.Directive({selector:\"option\"}),u(2,a.Optional()),u(2,a.Host()),c(\"design:paramtypes\",[a.ElementRef,a.Renderer2,xe])],Ee));function Ee(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption(this))}function Oe(e,t){return function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(d(arguments[t]));return e}(t.path,[e])}function ke(t,n){t||Pe(n,\"Cannot find control with\"),n.valueAccessor||Pe(n,\"No value accessor for form control with\"),t.validator=q.compose([t.validator,n.validator]),t.asyncValidator=q.composeAsync([t.asyncValidator,n.asyncValidator]),n.valueAccessor.writeValue(t.value),function(t,n){n.valueAccessor.registerOnChange(function(e){t._pendingValue=e,t._pendingChange=!0,t._pendingDirty=!0,\"change\"===t.updateOn&&De(t,n)})}(t,n),function(e,n){e.registerOnChange(function(e,t){n.valueAccessor.writeValue(e),t&&n.viewToModelUpdate(e)})}(t,n),function(e,t){t.valueAccessor.registerOnTouched(function(){e._pendingTouched=!0,\"blur\"===e.updateOn&&e._pendingChange&&De(e,t),\"submit\"!==e.updateOn&&e.markAsTouched()})}(t,n),n.valueAccessor.setDisabledState&&t.registerOnDisabledChange(function(e){n.valueAccessor.setDisabledState(e)}),n._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})}),n._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})})}function De(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function Te(e,t){null==e&&Pe(t,\"Cannot find control with\"),e.validator=q.compose([e.validator,t.validator]),e.asyncValidator=q.composeAsync([e.asyncValidator,t.asyncValidator])}function Ie(e){return Pe(e,\"There is no FormControl instance attached to form control element with\")}function Pe(e,t){var n;throw n=1<e.path.length?\"path: '\"+e.path.join(\" -> \")+\"'\":e.path[0]?\"name: '\"+e.path+\"'\":\"unspecified name attribute\",new Error(t+\" \"+n)}function Ae(e){return null!=e?q.compose(e.map(K)):null}function Me(e){return null!=e?q.composeAsync(e.map(Z)):null}function Re(e,t){if(!e.hasOwnProperty(\"model\"))return!1;var n=e.model;return!!n.isFirstChange()||!a.ɵlooseIdentical(t,n.currentValue)}var Ne=[m,oe,X,ve,xe,ne];function je(e,t){e._syncPendingControls(),t.forEach(function(e){var t=e.control;\"submit\"===t.updateOn&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)})}function Fe(t,e){if(!e)return null;Array.isArray(e)||Pe(t,\"Value accessor was not provided as an array for form control with\");var n=void 0,r=void 0,i=void 0;return e.forEach(function(e){e.constructor===_?n=e:!function(t){return Ne.some(function(e){return t.constructor===e})}(e)?(i&&Pe(t,\"More than one custom value accessor matches form control with\"),i=e):(r&&Pe(t,\"More than one built-in value accessor matches form control with\"),r=e)}),i||(r||(n||(Pe(t,\"No valid value accessor for form control with\"),null)))}function Le(e,t){var n=e.indexOf(t);-1<n&&e.splice(n,1)}function Ve(e,t,n,r){a.isDevMode()&&\"never\"!==r&&((null!==r&&\"once\"!==r||t._ngModelWarningSentOnce)&&(\"always\"!==r||n._ngModelWarningSent)||(de.ngModelWarning(e),t._ngModelWarningSentOnce=!0,n._ngModelWarningSent=!0))}var Be=\"VALID\",Ue=\"INVALID\",ze=\"PENDING\",qe=\"DISABLED\";function He(e){var t=Ge(e)?e.validators:e;return Array.isArray(t)?Ae(t):t||null}function We(e,t){var n=Ge(t)?t.asyncValidators:e;return Array.isArray(n)?Me(n):n||null}function Ge(e){return null!=e&&!Array.isArray(e)&&\"object\"==typeof e}var Ye=(Object.defineProperty(Ke.prototype,\"parent\",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"valid\",{get:function(){return this.status===Be},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"invalid\",{get:function(){return this.status===Ue},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"pending\",{get:function(){return this.status==ze},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"disabled\",{get:function(){return this.status===qe},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"enabled\",{get:function(){return this.status!==qe},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"dirty\",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"untouched\",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(Ke.prototype,\"updateOn\",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:\"change\"},enumerable:!0,configurable:!0}),Ke.prototype.setValidators=function(e){this.validator=He(e)},Ke.prototype.setAsyncValidators=function(e){this.asyncValidator=We(e)},Ke.prototype.clearValidators=function(){this.validator=null},Ke.prototype.clearAsyncValidators=function(){this.asyncValidator=null},Ke.prototype.markAsTouched=function(e){void 0===e&&(e={}),this.touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},Ke.prototype.markAllAsTouched=function(){this.markAsTouched({onlySelf:!0}),this._forEachChild(function(e){return e.markAllAsTouched()})},Ke.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},Ke.prototype.markAsDirty=function(e){void 0===e&&(e={}),this.pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},Ke.prototype.markAsPristine=function(e){void 0===e&&(e={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},Ke.prototype.markAsPending=function(e){void 0===e&&(e={}),!(this.status=ze)!==e.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},Ke.prototype.disable=function(t){void 0===t&&(t={});var e=this._parentMarkedDirty(t.onlySelf);this.status=qe,this.errors=null,this._forEachChild(function(e){e.disable(n(n({},t),{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(n(n({},t),{skipPristineCheck:e})),this._onDisabledChange.forEach(function(e){return e(!0)})},Ke.prototype.enable=function(t){void 0===t&&(t={});var e=this._parentMarkedDirty(t.onlySelf);this.status=Be,this._forEachChild(function(e){e.enable(n(n({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(n(n({},t),{skipPristineCheck:e})),this._onDisabledChange.forEach(function(e){return e(!1)})},Ke.prototype._updateAncestors=function(e){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())},Ke.prototype.setParent=function(e){this._parent=e},Ke.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),this.status!==Be&&this.status!==ze||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},Ke.prototype._updateTreeValidity=function(t){void 0===t&&(t={emitEvent:!0}),this._forEachChild(function(e){return e._updateTreeValidity(t)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})},Ke.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?qe:Be},Ke.prototype._runValidator=function(){return this.validator?this.validator(this):null},Ke.prototype._runAsyncValidator=function(t){var n=this;if(this.asyncValidator){this.status=ze;var e=G(this.asyncValidator(this));this._asyncValidationSubscription=e.subscribe(function(e){return n.setErrors(e,{emitEvent:t})})}},Ke.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},Ke.prototype.setErrors=function(e,t){void 0===t&&(t={}),this.errors=e,this._updateControlsErrors(!1!==t.emitEvent)},Ke.prototype.get=function(e){return function(e,t,n){return null==t?null:(Array.isArray(t)||(t=t.split(n)),Array.isArray(t)&&0===t.length?null:t.reduce(function(e,t){return e instanceof Je?e.controls.hasOwnProperty(t)?e.controls[t]:null:e instanceof nt&&e.at(t)||null},e))}(this,e,\".\")},Ke.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null},Ke.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(Ke.prototype,\"root\",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),Ke.prototype._updateControlsErrors=function(e){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(e)},Ke.prototype._initObservables=function(){this.valueChanges=new a.EventEmitter,this.statusChanges=new a.EventEmitter},Ke.prototype._calculateStatus=function(){return this._allControlsDisabled()?qe:this.errors?Ue:this._anyControlsHaveStatus(ze)?ze:this._anyControlsHaveStatus(Ue)?Ue:Be},Ke.prototype._anyControlsHaveStatus=function(t){return this._anyControls(function(e){return e.status===t})},Ke.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},Ke.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},Ke.prototype._updatePristine=function(e){void 0===e&&(e={}),this.pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},Ke.prototype._updateTouched=function(e){void 0===e&&(e={}),this.touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},Ke.prototype._isBoxedValue=function(e){return\"object\"==typeof e&&null!==e&&2===Object.keys(e).length&&\"value\"in e&&\"disabled\"in e},Ke.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},Ke.prototype._setUpdateStrategy=function(e){Ge(e)&&null!=e.updateOn&&(this._updateOn=e.updateOn)},Ke.prototype._parentMarkedDirty=function(e){var t=this._parent&&this._parent.dirty;return!e&&t&&!this._parent._anyControlsDirty()},Ke);function Ke(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}var Ze,Qe=(t(Xe,Ze=Ye),Xe.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this.value=this._pendingValue=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n.value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},Xe.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},Xe.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1},Xe.prototype._updateValue=function(){},Xe.prototype._anyControls=function(e){return!1},Xe.prototype._allControlsDisabled=function(){return this.disabled},Xe.prototype.registerOnChange=function(e){this._onChange.push(e)},Xe.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},Xe.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},Xe.prototype._forEachChild=function(e){},Xe.prototype._syncPendingControls=function(){return!(\"submit\"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))},Xe.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e},Xe);function Xe(e,t,n){void 0===e&&(e=null);var r=Ze.call(this,He(t),We(n,t))||this;return r._onChange=[],r._applyFormState(e),r._setUpdateStrategy(t),r.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),r._initObservables(),r}var $e,Je=(t(et,$e=Ye),et.prototype.registerControl=function(e,t){return this.controls[e]?this.controls[e]:((this.controls[e]=t).setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},et.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},et.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},et.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},et.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},et.prototype.setValue=function(t,n){var r=this;void 0===n&&(n={}),this._checkAllValuesPresent(t),Object.keys(t).forEach(function(e){r._throwIfControlMissing(e),r.controls[e].setValue(t[e],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)},et.prototype.patchValue=function(t,n){var r=this;void 0===n&&(n={}),Object.keys(t).forEach(function(e){r.controls[e]&&r.controls[e].patchValue(t[e],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)},et.prototype.reset=function(n,r){void 0===n&&(n={}),void 0===r&&(r={}),this._forEachChild(function(e,t){e.reset(n[t],{onlySelf:!0,emitEvent:r.emitEvent})}),this._updatePristine(r),this._updateTouched(r),this.updateValueAndValidity(r)},et.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof Qe?t.value:t.getRawValue(),e})},et.prototype._syncPendingControls=function(){var e=this._reduceChildren(!1,function(e,t){return!!t._syncPendingControls()||e});return e&&this.updateValueAndValidity({onlySelf:!0}),e},et.prototype._throwIfControlMissing=function(e){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[e])throw new Error(\"Cannot find form control with name: \"+e+\".\")},et.prototype._forEachChild=function(t){var n=this;Object.keys(this.controls).forEach(function(e){return t(n.controls[e],e)})},et.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){e.setParent(t),e._registerOnCollectionChange(t._onCollectionChange)})},et.prototype._updateValue=function(){this.value=this._reduceValue()},et.prototype._anyControls=function(n){var r=this,i=!1;return this._forEachChild(function(e,t){i=i||r.contains(t)&&n(e)}),i},et.prototype._reduceValue=function(){var r=this;return this._reduceChildren({},function(e,t,n){return(t.enabled||r.disabled)&&(e[n]=t.value),e})},et.prototype._reduceChildren=function(e,n){var r=e;return this._forEachChild(function(e,t){r=n(r,e,t)}),r},et.prototype._allControlsDisabled=function(){var t,e;try{for(var n=p(Object.keys(this.controls)),r=n.next();!r.done;r=n.next()){var i=r.value;if(this.controls[i].enabled)return!1}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return 0<Object.keys(this.controls).length||this.disabled},et.prototype._checkAllValuesPresent=function(n){this._forEachChild(function(e,t){if(void 0===n[t])throw new Error(\"Must supply a value for form control with name: '\"+t+\"'.\")})},et);function et(e,t,n){var r=$e.call(this,He(t),We(n,t))||this;return r.controls=e,r._initObservables(),r._setUpdateStrategy(t),r._setUpControls(),r.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),r}var tt,nt=(t(rt,tt=Ye),rt.prototype.at=function(e){return this.controls[e]},rt.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},rt.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity()},rt.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity()},rt.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(rt.prototype,\"length\",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),rt.prototype.setValue=function(e,n){var r=this;void 0===n&&(n={}),this._checkAllValuesPresent(e),e.forEach(function(e,t){r._throwIfControlMissing(t),r.at(t).setValue(e,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)},rt.prototype.patchValue=function(e,n){var r=this;void 0===n&&(n={}),e.forEach(function(e,t){r.at(t)&&r.at(t).patchValue(e,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)},rt.prototype.reset=function(n,r){void 0===n&&(n=[]),void 0===r&&(r={}),this._forEachChild(function(e,t){e.reset(n[t],{onlySelf:!0,emitEvent:r.emitEvent})}),this._updatePristine(r),this._updateTouched(r),this.updateValueAndValidity(r)},rt.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof Qe?e.value:e.getRawValue()})},rt.prototype.clear=function(){this.controls.length<1||(this._forEachChild(function(e){return e._registerOnCollectionChange(function(){})}),this.controls.splice(0),this.updateValueAndValidity())},rt.prototype._syncPendingControls=function(){var e=this.controls.reduce(function(e,t){return!!t._syncPendingControls()||e},!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e},rt.prototype._throwIfControlMissing=function(e){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(e))throw new Error(\"Cannot find form control at index \"+e)},rt.prototype._forEachChild=function(n){this.controls.forEach(function(e,t){n(e,t)})},rt.prototype._updateValue=function(){var t=this;this.value=this.controls.filter(function(e){return e.enabled||t.disabled}).map(function(e){return e.value})},rt.prototype._anyControls=function(t){return this.controls.some(function(e){return e.enabled&&t(e)})},rt.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){return t._registerControl(e)})},rt.prototype._checkAllValuesPresent=function(n){this._forEachChild(function(e,t){if(void 0===n[t])throw new Error(\"Must supply a value for form control at index: \"+t+\".\")})},rt.prototype._allControlsDisabled=function(){var t,e;try{for(var n=p(this.controls),r=n.next();!r.done;r=n.next())if(r.value.enabled)return!1}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return 0<this.controls.length||this.disabled},rt.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},rt);function rt(e,t,n){var r=tt.call(this,He(t),We(n,t))||this;return r.controls=e,r._initObservables(),r._setUpdateStrategy(t),r._setUpControls(),r.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),r}var it,ot={provide:S,useExisting:a.forwardRef(function(){return st})},at=Promise.resolve(null),st=(t(lt,it=S),lt.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(lt.prototype,\"formDirective\",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(lt.prototype,\"control\",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(lt.prototype,\"path\",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(lt.prototype,\"controls\",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),lt.prototype.addControl=function(t){var n=this;at.then(function(){var e=n._findContainer(t.path);t.control=e.registerControl(t.name,t.control),ke(t.control,t),t.control.updateValueAndValidity({emitEvent:!1}),n._directives.push(t)})},lt.prototype.getControl=function(e){return this.form.get(e.path)},lt.prototype.removeControl=function(t){var n=this;at.then(function(){var e=n._findContainer(t.path);e&&e.removeControl(t.name),Le(n._directives,t)})},lt.prototype.addFormGroup=function(n){var r=this;at.then(function(){var e=r._findContainer(n.path),t=new Je({});Te(t,n),e.registerControl(n.name,t),t.updateValueAndValidity({emitEvent:!1})})},lt.prototype.removeFormGroup=function(t){var n=this;at.then(function(){var e=n._findContainer(t.path);e&&e.removeControl(t.name)})},lt.prototype.getFormGroup=function(e){return this.form.get(e.path)},lt.prototype.updateModel=function(e,t){var n=this;at.then(function(){n.form.get(e.path).setValue(t)})},lt.prototype.setValue=function(e){this.control.setValue(e)},lt.prototype.onSubmit=function(e){return this.submitted=!0,je(this.form,this._directives),this.ngSubmit.emit(e),!1},lt.prototype.onReset=function(){this.resetForm()},lt.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},lt.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},lt.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},l([a.Input(\"ngFormOptions\"),c(\"design:type\",Object)],lt.prototype,\"options\",void 0),lt=l([a.Directive({selector:\"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]\",providers:[ot],host:{\"(submit)\":\"onSubmit($event)\",\"(reset)\":\"onReset()\"},outputs:[\"ngSubmit\"],exportAs:\"ngForm\"}),u(0,a.Optional()),u(0,a.Self()),u(0,a.Inject(B)),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(U)),c(\"design:paramtypes\",[Array,Array])],lt));function lt(e,t){var n=it.call(this)||this;return n.submitted=!1,n._directives=[],n.ngSubmit=new a.EventEmitter,n.form=new Je({},Ae(e),Me(t)),n}var ut,ct=(t(pt,ut=S),pt.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},pt.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(pt.prototype,\"control\",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(pt.prototype,\"path\",{get:function(){return Oe(null==this.name?this.name:this.name.toString(),this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(pt.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(pt.prototype,\"validator\",{get:function(){return Ae(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(pt.prototype,\"asyncValidator\",{get:function(){return Me(this._asyncValidators)},enumerable:!0,configurable:!0}),pt.prototype._checkParentType=function(){},pt);function pt(){return null!==ut&&ut.apply(this,arguments)||this}var dt=(ht.modelParentException=function(){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      '+se+\"\\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      \"+pe)},ht.formGroupNameException=function(){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      \"+le+\"\\n\\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\\n\\n      \"+ce)},ht.missingNameException=function(){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}\">')},ht.modelGroupParentException=function(){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      \"+le+\"\\n\\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\\n\\n      \"+ce)},ht);function ht(){}var ft,mt,vt={provide:S,useExisting:a.forwardRef(function(){return yt})},yt=(t(gt,ft=ct),(mt=gt).prototype._checkParentType=function(){this._parent instanceof mt||this._parent instanceof st||dt.modelGroupParentException()},l([a.Input(\"ngModelGroup\"),c(\"design:type\",String)],gt.prototype,\"name\",void 0),gt=mt=l([a.Directive({selector:\"[ngModelGroup]\",providers:[vt],exportAs:\"ngModelGroup\"}),u(0,a.Host()),u(0,a.SkipSelf()),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(B)),u(2,a.Optional()),u(2,a.Self()),u(2,a.Inject(U)),c(\"design:paramtypes\",[S,Array,Array])],gt));function gt(e,t,n){var r=ft.call(this)||this;return r._parent=e,r._validators=t,r._asyncValidators=n,r}var _t,bt={provide:D,useExisting:a.forwardRef(function(){return xt})},wt=Promise.resolve(null),xt=(t(Ct,_t=D),Ct.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registered||this._setUpControl(),\"isDisabled\"in e&&this._updateDisabled(e),Re(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},Ct.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(Ct.prototype,\"path\",{get:function(){return this._parent?Oe(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(Ct.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(Ct.prototype,\"validator\",{get:function(){return Ae(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(Ct.prototype,\"asyncValidator\",{get:function(){return Me(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Ct.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Ct.prototype._setUpControl=function(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},Ct.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)},Ct.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},Ct.prototype._setUpStandalone=function(){ke(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})},Ct.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},Ct.prototype._checkParentType=function(){!(this._parent instanceof yt)&&this._parent instanceof ct?dt.formGroupNameException():this._parent instanceof yt||this._parent instanceof st||dt.modelParentException()},Ct.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||dt.missingNameException()},Ct.prototype._updateValue=function(e){var t=this;wt.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},Ct.prototype._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=\"\"===n||n&&\"false\"!==n;wt.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},l([a.Input(),c(\"design:type\",String)],Ct.prototype,\"name\",void 0),l([a.Input(\"disabled\"),c(\"design:type\",Boolean)],Ct.prototype,\"isDisabled\",void 0),l([a.Input(\"ngModel\"),c(\"design:type\",Object)],Ct.prototype,\"model\",void 0),l([a.Input(\"ngModelOptions\"),c(\"design:type\",Object)],Ct.prototype,\"options\",void 0),l([a.Output(\"ngModelChange\"),c(\"design:type\",Object)],Ct.prototype,\"update\",void 0),Ct=l([a.Directive({selector:\"[ngModel]:not([formControlName]):not([formControl])\",providers:[bt],exportAs:\"ngModel\"}),u(0,a.Optional()),u(0,a.Host()),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(B)),u(2,a.Optional()),u(2,a.Self()),u(2,a.Inject(U)),u(3,a.Optional()),u(3,a.Self()),u(3,a.Inject(h)),c(\"design:paramtypes\",[S,Array,Array,Array])],Ct));function Ct(e,t,n,r){var i=_t.call(this)||this;return i.control=new Qe,i._registered=!1,i.update=new a.EventEmitter,i._parent=e,i._rawValidators=t||[],i._rawAsyncValidators=n||[],i.valueAccessor=Fe(i,r),i}var St=Et=l([a.Directive({selector:\"form:not([ngNoForm]):not([ngNativeValidate])\",host:{novalidate:\"\"}})],Et);function Et(){}var Ot,kt,Dt=new a.InjectionToken(\"NgModelWithFormControlWarning\"),Tt={provide:D,useExisting:a.forwardRef(function(){return It})},It=(t(Pt,Ot=D),kt=Pt,Object.defineProperty(Pt.prototype,\"isDisabled\",{set:function(e){de.disabledAttrWarning()},enumerable:!0,configurable:!0}),Pt.prototype.ngOnChanges=function(e){this._isControlChanged(e)&&(ke(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),Re(e,this.viewModel)&&(Ve(\"formControl\",kt,this,this._ngModelWarningConfig),this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(Pt.prototype,\"path\",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(Pt.prototype,\"validator\",{get:function(){return Ae(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(Pt.prototype,\"asyncValidator\",{get:function(){return Me(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(Pt.prototype,\"control\",{get:function(){return this.form},enumerable:!0,configurable:!0}),Pt.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Pt.prototype._isControlChanged=function(e){return e.hasOwnProperty(\"form\")},Pt._ngModelWarningSentOnce=!1,l([a.Input(\"formControl\"),c(\"design:type\",Qe)],Pt.prototype,\"form\",void 0),l([a.Input(\"disabled\"),c(\"design:type\",Boolean),c(\"design:paramtypes\",[Boolean])],Pt.prototype,\"isDisabled\",null),l([a.Input(\"ngModel\"),c(\"design:type\",Object)],Pt.prototype,\"model\",void 0),l([a.Output(\"ngModelChange\"),c(\"design:type\",Object)],Pt.prototype,\"update\",void 0),Pt=kt=l([a.Directive({selector:\"[formControl]\",providers:[Tt],exportAs:\"ngForm\"}),u(0,a.Optional()),u(0,a.Self()),u(0,a.Inject(B)),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(U)),u(2,a.Optional()),u(2,a.Self()),u(2,a.Inject(h)),u(3,a.Optional()),u(3,a.Inject(Dt)),c(\"design:paramtypes\",[Array,Array,Array,Object])],Pt));function Pt(e,t,n,r){var i=Ot.call(this)||this;return i._ngModelWarningConfig=r,i.update=new a.EventEmitter,i._ngModelWarningSent=!1,i._rawValidators=e||[],i._rawAsyncValidators=t||[],i.valueAccessor=Fe(i,n),i}var At,Mt={provide:S,useExisting:a.forwardRef(function(){return Rt})},Rt=(t(Nt,At=S),Nt.prototype.ngOnChanges=function(e){this._checkFormPresent(),e.hasOwnProperty(\"form\")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(Nt.prototype,\"formDirective\",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(Nt.prototype,\"control\",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(Nt.prototype,\"path\",{get:function(){return[]},enumerable:!0,configurable:!0}),Nt.prototype.addControl=function(e){var t=this.form.get(e.path);return ke(t,e),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t},Nt.prototype.getControl=function(e){return this.form.get(e.path)},Nt.prototype.removeControl=function(e){Le(this.directives,e)},Nt.prototype.addFormGroup=function(e){var t=this.form.get(e.path);Te(t,e),t.updateValueAndValidity({emitEvent:!1})},Nt.prototype.removeFormGroup=function(e){},Nt.prototype.getFormGroup=function(e){return this.form.get(e.path)},Nt.prototype.addFormArray=function(e){var t=this.form.get(e.path);Te(t,e),t.updateValueAndValidity({emitEvent:!1})},Nt.prototype.removeFormArray=function(e){},Nt.prototype.getFormArray=function(e){return this.form.get(e.path)},Nt.prototype.updateModel=function(e,t){this.form.get(e.path).setValue(t)},Nt.prototype.onSubmit=function(e){return this.submitted=!0,je(this.form,this.directives),this.ngSubmit.emit(e),!1},Nt.prototype.onReset=function(){this.resetForm()},Nt.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},Nt.prototype._updateDomValue=function(){var n=this;this.directives.forEach(function(e){var t=n.form.get(e.path);e.control!==t&&(function(e,t){t.valueAccessor.registerOnChange(function(){return Ie(t)}),t.valueAccessor.registerOnTouched(function(){return Ie(t)}),t._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),t._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),e&&e._clearChangeFns()}(e.control,e),t&&ke(t,e),e.control=t)}),this.form._updateTreeValidity({emitEvent:!1})},Nt.prototype._updateRegistrations=function(){var e=this;this.form._registerOnCollectionChange(function(){return e._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},Nt.prototype._updateValidators=function(){var e=Ae(this._validators);this.form.validator=q.compose([this.form.validator,e]);var t=Me(this._asyncValidators);this.form.asyncValidator=q.composeAsync([this.form.asyncValidator,t])},Nt.prototype._checkFormPresent=function(){this.form||de.missingFormException()},l([a.Input(\"formGroup\"),c(\"design:type\",Je)],Nt.prototype,\"form\",void 0),l([a.Output(),c(\"design:type\",Object)],Nt.prototype,\"ngSubmit\",void 0),Nt=l([a.Directive({selector:\"[formGroup]\",providers:[Mt],host:{\"(submit)\":\"onSubmit($event)\",\"(reset)\":\"onReset()\"},exportAs:\"ngForm\"}),u(0,a.Optional()),u(0,a.Self()),u(0,a.Inject(B)),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(U)),c(\"design:paramtypes\",[Array,Array])],Nt));function Nt(e,t){var n=At.call(this)||this;return n._validators=e,n._asyncValidators=t,n.submitted=!1,n.directives=[],n.form=null,n.ngSubmit=new a.EventEmitter,n}var jt,Ft={provide:S,useExisting:a.forwardRef(function(){return Lt})},Lt=(t(Vt,jt=ct),Vt.prototype._checkParentType=function(){Ht(this._parent)&&de.groupParentException()},l([a.Input(\"formGroupName\"),c(\"design:type\",Object)],Vt.prototype,\"name\",void 0),Vt=l([a.Directive({selector:\"[formGroupName]\",providers:[Ft]}),u(0,a.Optional()),u(0,a.Host()),u(0,a.SkipSelf()),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(B)),u(2,a.Optional()),u(2,a.Self()),u(2,a.Inject(U)),c(\"design:paramtypes\",[S,Array,Array])],Vt));function Vt(e,t,n){var r=jt.call(this)||this;return r._parent=e,r._validators=t,r._asyncValidators=n,r}var Bt,Ut={provide:S,useExisting:a.forwardRef(function(){return zt})},zt=(t(qt,Bt=S),qt.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},qt.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(qt.prototype,\"control\",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(qt.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(qt.prototype,\"path\",{get:function(){return Oe(null==this.name?this.name:this.name.toString(),this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(qt.prototype,\"validator\",{get:function(){return Ae(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(qt.prototype,\"asyncValidator\",{get:function(){return Me(this._asyncValidators)},enumerable:!0,configurable:!0}),qt.prototype._checkParentType=function(){Ht(this._parent)&&de.arrayParentException()},l([a.Input(\"formArrayName\"),c(\"design:type\",Object)],qt.prototype,\"name\",void 0),qt=l([a.Directive({selector:\"[formArrayName]\",providers:[Ut]}),u(0,a.Optional()),u(0,a.Host()),u(0,a.SkipSelf()),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(B)),u(2,a.Optional()),u(2,a.Self()),u(2,a.Inject(U)),c(\"design:paramtypes\",[S,Array,Array])],qt));function qt(e,t,n){var r=Bt.call(this)||this;return r._parent=e,r._validators=t,r._asyncValidators=n,r}function Ht(e){return!(e instanceof Lt||e instanceof Rt||e instanceof zt)}var Wt,Gt,Yt={provide:D,useExisting:a.forwardRef(function(){return Kt})},Kt=(t(Zt,Wt=D),Gt=Zt,Object.defineProperty(Zt.prototype,\"isDisabled\",{set:function(e){de.disabledAttrWarning()},enumerable:!0,configurable:!0}),Zt.prototype.ngOnChanges=function(e){this._added||this._setUpControl(),Re(e,this.viewModel)&&(Ve(\"formControlName\",Gt,this,this._ngModelWarningConfig),this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},Zt.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Zt.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Object.defineProperty(Zt.prototype,\"path\",{get:function(){return Oe(null==this.name?this.name:this.name.toString(),this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(Zt.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(Zt.prototype,\"validator\",{get:function(){return Ae(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(Zt.prototype,\"asyncValidator\",{get:function(){return Me(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Zt.prototype._checkParentType=function(){!(this._parent instanceof Lt)&&this._parent instanceof ct?de.ngModelGroupException():this._parent instanceof Lt||this._parent instanceof Rt||this._parent instanceof zt||de.controlParentException()},Zt.prototype._setUpControl=function(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},Zt._ngModelWarningSentOnce=!1,l([a.Input(\"formControlName\"),c(\"design:type\",Object)],Zt.prototype,\"name\",void 0),l([a.Input(\"disabled\"),c(\"design:type\",Boolean),c(\"design:paramtypes\",[Boolean])],Zt.prototype,\"isDisabled\",null),l([a.Input(\"ngModel\"),c(\"design:type\",Object)],Zt.prototype,\"model\",void 0),l([a.Output(\"ngModelChange\"),c(\"design:type\",Object)],Zt.prototype,\"update\",void 0),Zt=Gt=l([a.Directive({selector:\"[formControlName]\",providers:[Yt]}),u(0,a.Optional()),u(0,a.Host()),u(0,a.SkipSelf()),u(1,a.Optional()),u(1,a.Self()),u(1,a.Inject(B)),u(2,a.Optional()),u(2,a.Self()),u(2,a.Inject(U)),u(3,a.Optional()),u(3,a.Self()),u(3,a.Inject(h)),u(4,a.Optional()),u(4,a.Inject(Dt)),c(\"design:paramtypes\",[S,Array,Array,Array,Object])],Zt));function Zt(e,t,n,r,i){var o=Wt.call(this)||this;return o._ngModelWarningConfig=i,o._added=!1,o.update=new a.EventEmitter,o._ngModelWarningSent=!1,o._parent=e,o._rawValidators=t||[],o._rawAsyncValidators=n||[],o.valueAccessor=Fe(o,r),o}var Qt={provide:B,useExisting:a.forwardRef(function(){return $t}),multi:!0},Xt={provide:B,useExisting:a.forwardRef(function(){return tn}),multi:!0},$t=(Object.defineProperty(Jt.prototype,\"required\",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&\"\"+e!=\"false\",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),Jt.prototype.validate=function(e){return this.required?q.required(e):null},Jt.prototype.registerOnValidatorChange=function(e){this._onChange=e},l([a.Input(),c(\"design:type\",Object),c(\"design:paramtypes\",[Object])],Jt.prototype,\"required\",null),Jt=l([a.Directive({selector:\":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\",providers:[Qt],host:{\"[attr.required]\":'required ? \"\" : null'}})],Jt));function Jt(){}var en,tn=(t(nn,en=$t),nn.prototype.validate=function(e){return this.required?q.requiredTrue(e):null},nn=l([a.Directive({selector:\"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]\",providers:[Xt],host:{\"[attr.required]\":'required ? \"\" : null'}})],nn));function nn(){return null!==en&&en.apply(this,arguments)||this}var rn={provide:B,useExisting:a.forwardRef(function(){return on}),multi:!0},on=(Object.defineProperty(an.prototype,\"email\",{set:function(e){this._enabled=\"\"===e||!0===e||\"true\"===e,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),an.prototype.validate=function(e){return this._enabled?q.email(e):null},an.prototype.registerOnValidatorChange=function(e){this._onChange=e},l([a.Input(),c(\"design:type\",Object),c(\"design:paramtypes\",[Object])],an.prototype,\"email\",null),an=l([a.Directive({selector:\"[email][formControlName],[email][formControl],[email][ngModel]\",providers:[rn]})],an));function an(){}var sn={provide:B,useExisting:a.forwardRef(function(){return ln}),multi:!0},ln=(un.prototype.ngOnChanges=function(e){\"minlength\"in e&&(this._createValidator(),this._onChange&&this._onChange())},un.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},un.prototype.registerOnValidatorChange=function(e){this._onChange=e},un.prototype._createValidator=function(){this._validator=q.minLength(parseInt(this.minlength,10))},l([a.Input(),c(\"design:type\",String)],un.prototype,\"minlength\",void 0),un=l([a.Directive({selector:\"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]\",providers:[sn],host:{\"[attr.minlength]\":\"minlength ? minlength : null\"}})],un));function un(){}var cn={provide:B,useExisting:a.forwardRef(function(){return pn}),multi:!0},pn=(dn.prototype.ngOnChanges=function(e){\"maxlength\"in e&&(this._createValidator(),this._onChange&&this._onChange())},dn.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},dn.prototype.registerOnValidatorChange=function(e){this._onChange=e},dn.prototype._createValidator=function(){this._validator=q.maxLength(parseInt(this.maxlength,10))},l([a.Input(),c(\"design:type\",String)],dn.prototype,\"maxlength\",void 0),dn=l([a.Directive({selector:\"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]\",providers:[cn],host:{\"[attr.maxlength]\":\"maxlength ? maxlength : null\"}})],dn));function dn(){}var hn={provide:B,useExisting:a.forwardRef(function(){return fn}),multi:!0},fn=(mn.prototype.ngOnChanges=function(e){\"pattern\"in e&&(this._createValidator(),this._onChange&&this._onChange())},mn.prototype.validate=function(e){return this._validator(e)},mn.prototype.registerOnValidatorChange=function(e){this._onChange=e},mn.prototype._createValidator=function(){this._validator=q.pattern(this.pattern)},l([a.Input(),c(\"design:type\",Object)],mn.prototype,\"pattern\",void 0),mn=l([a.Directive({selector:\"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]\",providers:[hn],host:{\"[attr.pattern]\":\"pattern ? pattern : null\"}})],mn));function mn(){}var vn=[St,ge,Se,_,X,oe,m,ve,xe,ne,R,F,$t,ln,pn,fn,tn,on],yn=[xt,yt,st],gn=[It,Rt,Kt,Lt,zt],_n=bn=l([a.NgModule({declarations:vn,exports:vn})],bn);function bn(){}var wn=(xn.prototype.group=function(e,t){void 0===t&&(t=null);var n=this._reduceControls(e),r=null,i=null,o=void 0;return null!=t&&(function(e){return void 0!==e.asyncValidators||void 0!==e.validators||void 0!==e.updateOn}(t)?(r=null!=t.validators?t.validators:null,i=null!=t.asyncValidators?t.asyncValidators:null,o=null!=t.updateOn?t.updateOn:void 0):(r=null!=t.validator?t.validator:null,i=null!=t.asyncValidator?t.asyncValidator:null)),new Je(n,{asyncValidators:i,updateOn:o,validators:r})},xn.prototype.control=function(e,t,n){return new Qe(e,t,n)},xn.prototype.array=function(e,t,n){var r=this,i=e.map(function(e){return r._createControl(e)});return new nt(i,t,n)},xn.prototype._reduceControls=function(t){var n=this,r={};return Object.keys(t).forEach(function(e){r[e]=n._createControl(t[e])}),r},xn.prototype._createControl=function(e){if(e instanceof Qe||e instanceof Je||e instanceof nt)return e;if(Array.isArray(e)){var t=e[0],n=1<e.length?e[1]:null,r=2<e.length?e[2]:null;return this.control(t,n,r)}return this.control(e)},xn=l([a.Injectable()],xn));function xn(){}var Cn=new a.Version(\"9.0.0-next.12\"),Sn=En=l([a.NgModule({declarations:yn,providers:[ee],exports:[_n,yn]})],En);function En(){}var On,kn=((On=Dn).withConfig=function(e){return{ngModule:On,providers:[{provide:Dt,useValue:e.warnOnNgModelWithFormControl}]}},Dn=On=l([a.NgModule({declarations:[gn],providers:[wn,ee],exports:[_n,gn]})],Dn));function Dn(){}e.ɵangular_packages_forms_forms_d=_n,e.ɵInternalFormsSharedModule=_n,e.ɵangular_packages_forms_forms_c=gn,e.ɵangular_packages_forms_forms_a=vn,e.ɵangular_packages_forms_forms_b=yn,e.ɵangular_packages_forms_forms_e=f,e.ɵangular_packages_forms_forms_f=y,e.ɵangular_packages_forms_forms_g=I,e.ɵangular_packages_forms_forms_h=M,e.ɵangular_packages_forms_forms_i=ot,e.ɵangular_packages_forms_forms_j=bt,e.ɵangular_packages_forms_forms_k=vt,e.ɵangular_packages_forms_forms_y=St,e.ɵNgNoValidate=St,e.ɵangular_packages_forms_forms_l=Q,e.ɵangular_packages_forms_forms_m=J,e.ɵangular_packages_forms_forms_n=ee,e.ɵangular_packages_forms_forms_o=ie,e.ɵangular_packages_forms_forms_p=Dt,e.ɵangular_packages_forms_forms_q=Tt,e.ɵangular_packages_forms_forms_r=Yt,e.ɵangular_packages_forms_forms_s=Mt,e.ɵangular_packages_forms_forms_u=Ut,e.ɵangular_packages_forms_forms_t=Ft,e.ɵangular_packages_forms_forms_v=fe,e.ɵangular_packages_forms_forms_x=Se,e.ɵNgSelectMultipleOption=Se,e.ɵangular_packages_forms_forms_w=be,e.ɵangular_packages_forms_forms_ba=Xt,e.ɵangular_packages_forms_forms_bb=rn,e.ɵangular_packages_forms_forms_bd=cn,e.ɵangular_packages_forms_forms_bc=sn,e.ɵangular_packages_forms_forms_be=hn,e.ɵangular_packages_forms_forms_z=Qt,e.AbstractControlDirective=w,e.AbstractFormGroupDirective=ct,e.CheckboxControlValueAccessor=m,e.ControlContainer=S,e.NG_VALUE_ACCESSOR=h,e.COMPOSITION_BUFFER_MODE=g,e.DefaultValueAccessor=_,e.NgControl=D,e.NgControlStatus=R,e.NgControlStatusGroup=F,e.NgForm=st,e.NgModel=xt,e.NgModelGroup=yt,e.NumberValueAccessor=X,e.RadioControlValueAccessor=ne,e.RangeValueAccessor=oe,e.FormControlDirective=It,e.FormControlName=Kt,e.FormGroupDirective=Rt,e.FormArrayName=zt,e.FormGroupName=Lt,e.NgSelectOption=ge,e.SelectControlValueAccessor=ve,e.SelectMultipleControlValueAccessor=xe,e.CheckboxRequiredValidator=tn,e.EmailValidator=on,e.MaxLengthValidator=pn,e.MinLengthValidator=ln,e.PatternValidator=fn,e.RequiredValidator=$t,e.FormBuilder=wn,e.AbstractControl=Ye,e.FormArray=nt,e.FormControl=Qe,e.FormGroup=Je,e.NG_ASYNC_VALIDATORS=U,e.NG_VALIDATORS=B,e.Validators=q,e.VERSION=Cn,e.FormsModule=Sn,e.ReactiveFormsModule=kn,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/forms\"),require(\"@angular/platform-browser/animations\"),require(\"@angular/cdk/platform\"),require(\"rxjs\")):System.registerDynamic(\"npm:@angular/material/bundles/material-slider.umd.js\",[\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/keycodes\",\"@angular/forms\",\"@angular/platform-browser/animations\",\"@angular/cdk/platform\",\"rxjs\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/forms\"),e(\"@angular/platform-browser/animations\"),e(\"@angular/cdk/platform\"),e(\"rxjs\"))})}(0,function(e,t,l,n,r,i,o,a,s,u,c,p,d){\"use strict\";function h(e){this._elementRef=e}var f,m=p.normalizePassiveListenerOptions({passive:!1}),v={provide:u.NG_VALUE_ACCESSOR,useExisting:l.forwardRef(function(){return _}),multi:!0},y=function(){},g=n.mixinTabIndex(n.mixinColor(n.mixinDisabled(h),\"accent\")),_=(f=g,r.__extends(b,f),Object.defineProperty(b.prototype,\"invert\",{get:function(){return this._invert},set:function(e){this._invert=a.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"max\",{get:function(){return this._max},set:function(e){this._max=a.coerceNumberProperty(e,this._max),this._percent=this._calculatePercentage(this._value),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"min\",{get:function(){return this._min},set:function(e){this._min=a.coerceNumberProperty(e,this._min),null===this._value&&(this.value=this._min),this._percent=this._calculatePercentage(this._value),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"step\",{get:function(){return this._step},set:function(e){this._step=a.coerceNumberProperty(e,this._step),this._step%1!=0&&(this._roundToDecimal=this._step.toString().split(\".\").pop().length),this._changeDetectorRef.markForCheck()},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"thumbLabel\",{get:function(){return this._thumbLabel},set:function(e){this._thumbLabel=a.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"tickInterval\",{get:function(){return this._tickInterval},set:function(e){this._tickInterval=\"auto\"===e?\"auto\":\"number\"==typeof e||\"string\"==typeof e?a.coerceNumberProperty(e,this._tickInterval):0},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"value\",{get:function(){return null===this._value&&(this.value=this._min),this._value},set:function(e){if(e!==this._value){var t=a.coerceNumberProperty(e);this._roundToDecimal&&(t=parseFloat(t.toFixed(this._roundToDecimal))),this._value=t,this._percent=this._calculatePercentage(this._value),this._changeDetectorRef.markForCheck()}},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"vertical\",{get:function(){return this._vertical},set:function(e){this._vertical=a.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"displayValue\",{get:function(){return this.displayWith?this.displayWith(this.value):this._roundToDecimal&&this.value&&this.value%1!=0?this.value.toFixed(this._roundToDecimal):this.value||0},enumerable:!0,configurable:!0}),b.prototype.focus=function(e){this._focusHostElement(e)},b.prototype.blur=function(){this._blurHostElement()},Object.defineProperty(b.prototype,\"percent\",{get:function(){return this._clamp(this._percent)},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_invertAxis\",{get:function(){return this.vertical?!this.invert:this.invert},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_isMinValue\",{get:function(){return 0===this.percent},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_thumbGap\",{get:function(){return this.disabled?7:this._isMinValue&&!this.thumbLabel?this._isActive?10:7:0},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_trackBackgroundStyles\",{get:function(){var e=this.vertical?\"Y\":\"X\",t=this.vertical?\"1, \"+(1-this.percent)+\", 1\":1-this.percent+\", 1, 1\";return{transform:\"translate\"+e+\"(\"+(this._shouldInvertMouseCoords()?\"-\":\"\")+this._thumbGap+\"px) scale3d(\"+t+\")\"}},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_trackFillStyles\",{get:function(){var e=this.vertical?\"Y\":\"X\",t=this.vertical?\"1, \"+this.percent+\", 1\":this.percent+\", 1, 1\";return{transform:\"translate\"+e+\"(\"+(this._shouldInvertMouseCoords()?\"\":\"-\")+this._thumbGap+\"px) scale3d(\"+t+\")\"}},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_ticksContainerStyles\",{get:function(){return{transform:\"translate\"+(this.vertical?\"Y\":\"X\")+\"(\"+(this.vertical||\"rtl\"!=this._getDirection()?\"-\":\"\")+this._tickIntervalPercent/2*100+\"%)\"}},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_ticksStyles\",{get:function(){var e=100*this._tickIntervalPercent,t={backgroundSize:this.vertical?\"2px \"+e+\"%\":e+\"% 2px\",transform:\"translateZ(0) translate\"+(this.vertical?\"Y\":\"X\")+\"(\"+(this.vertical||\"rtl\"!=this._getDirection()?\"\":\"-\")+e/2+\"%)\"+(this.vertical||\"rtl\"!=this._getDirection()?\"\":\" rotate(180deg)\")};return this._isMinValue&&this._thumbGap&&(t[\"padding\"+(this.vertical?this._invertAxis?\"Bottom\":\"Top\":this._invertAxis?\"Right\":\"Left\")]=this._thumbGap+\"px\"),t},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"_thumbContainerStyles\",{get:function(){return{transform:\"translate\"+(this.vertical?\"Y\":\"X\")+\"(-\"+100*((\"rtl\"!=this._getDirection()||this.vertical?this._invertAxis:!this._invertAxis)?this.percent:1-this.percent)+\"%)\"}},enumerable:!0,configurable:!0}),b.prototype._shouldInvertMouseCoords=function(){return\"rtl\"!=this._getDirection()||this.vertical?this._invertAxis:!this._invertAxis},b.prototype._getDirection=function(){return this._dir&&\"rtl\"==this._dir.value?\"rtl\":\"ltr\"},b.prototype.ngOnInit=function(){var t=this;this._focusMonitor.monitor(this._elementRef,!0).subscribe(function(e){t._isActive=!!e&&\"keyboard\"!==e,t._changeDetectorRef.detectChanges()}),this._dir&&(this._dirChangeSubscription=this._dir.change.subscribe(function(){t._changeDetectorRef.markForCheck()}))},b.prototype.ngOnDestroy=function(){var e=this._elementRef.nativeElement;e.removeEventListener(\"mousedown\",this._pointerDown,m),e.removeEventListener(\"touchstart\",this._pointerDown,m),this._removeGlobalEvents(),this._focusMonitor.stopMonitoring(this._elementRef),this._dirChangeSubscription.unsubscribe()},b.prototype._onMouseenter=function(){this.disabled||(this._sliderDimensions=this._getSliderDimensions(),this._updateTickIntervalPercent())},b.prototype._onFocus=function(){this._sliderDimensions=this._getSliderDimensions(),this._updateTickIntervalPercent()},b.prototype._onBlur=function(){this.onTouched()},b.prototype._onKeydown=function(e){if(!this.disabled&&!s.hasModifierKey(e)){var t=this.value;switch(e.keyCode){case s.PAGE_UP:this._increment(10);break;case s.PAGE_DOWN:this._increment(-10);break;case s.END:this.value=this.max;break;case s.HOME:this.value=this.min;break;case s.LEFT_ARROW:this._increment(\"rtl\"==this._getDirection()?1:-1);break;case s.UP_ARROW:this._increment(1);break;case s.RIGHT_ARROW:this._increment(\"rtl\"==this._getDirection()?-1:1);break;case s.DOWN_ARROW:this._increment(-1);break;default:return}t!=this.value&&(this._emitInputEvent(),this._emitChangeEvent()),this._isSliding=!0,e.preventDefault()}},b.prototype._onKeyup=function(){this._isSliding=!1},b.prototype._bindGlobalEvents=function(e){if(\"undefined\"!=typeof document&&document){var t=w(e),n=t?\"touchmove\":\"mousemove\",r=t?\"touchend\":\"mouseup\";document.body.addEventListener(n,this._pointerMove,m),document.body.addEventListener(r,this._pointerUp,m)}},b.prototype._removeGlobalEvents=function(){\"undefined\"!=typeof document&&document&&(document.body.removeEventListener(\"mousemove\",this._pointerMove,m),document.body.removeEventListener(\"mouseup\",this._pointerUp,m),document.body.removeEventListener(\"touchmove\",this._pointerMove,m),document.body.removeEventListener(\"touchend\",this._pointerUp,m))},b.prototype._increment=function(e){this.value=this._clamp((this.value||0)+this.step*e,this.min,this.max)},b.prototype._updateValueFromPosition=function(e){if(this._sliderDimensions){var t=this.vertical?this._sliderDimensions.top:this._sliderDimensions.left,n=this.vertical?this._sliderDimensions.height:this._sliderDimensions.width,r=this.vertical?e.y:e.x,i=this._clamp((r-t)/n);if(this._shouldInvertMouseCoords()&&(i=1-i),0===i)this.value=this.min;else if(1===i)this.value=this.max;else{var o=this._calculateValue(i),a=Math.round((o-this.min)/this.step)*this.step+this.min;this.value=this._clamp(a,this.min,this.max)}}},b.prototype._emitChangeEvent=function(){this._controlValueAccessorChangeFn(this.value),this.valueChange.emit(this.value),this.change.emit(this._createChangeEvent())},b.prototype._emitInputEvent=function(){this.input.emit(this._createChangeEvent())},b.prototype._updateTickIntervalPercent=function(){if(this.tickInterval&&this._sliderDimensions)if(\"auto\"==this.tickInterval){var e=this.vertical?this._sliderDimensions.height:this._sliderDimensions.width,t=e*this.step/(this.max-this.min),n=Math.ceil(30/t)*this.step;this._tickIntervalPercent=n/e}else this._tickIntervalPercent=this.tickInterval*this.step/(this.max-this.min)},b.prototype._createChangeEvent=function(e){void 0===e&&(e=this.value);var t=new y;return t.source=this,t.value=e,t},b.prototype._calculatePercentage=function(e){return((e||0)-this.min)/(this.max-this.min)},b.prototype._calculateValue=function(e){return this.min+e*(this.max-this.min)},b.prototype._clamp=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),Math.max(t,Math.min(e,n))},b.prototype._getSliderDimensions=function(){return this._sliderWrapper?this._sliderWrapper.nativeElement.getBoundingClientRect():null},b.prototype._focusHostElement=function(e){this._elementRef.nativeElement.focus(e)},b.prototype._blurHostElement=function(){this._elementRef.nativeElement.blur()},b.prototype._runInsideZone=function(e){this._ngZone?this._ngZone.run(e):e()},b.prototype._runOutsizeZone=function(e){this._ngZone?this._ngZone.runOutsideAngular(e):e()},b.prototype.writeValue=function(e){this.value=e},b.prototype.registerOnChange=function(e){this._controlValueAccessorChangeFn=e},b.prototype.registerOnTouched=function(e){this.onTouched=e},b.prototype.setDisabledState=function(e){this.disabled=e},b.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-slider\",exportAs:\"matSlider\",providers:[v],host:{\"(focus)\":\"_onFocus()\",\"(blur)\":\"_onBlur()\",\"(keydown)\":\"_onKeydown($event)\",\"(keyup)\":\"_onKeyup()\",\"(mouseenter)\":\"_onMouseenter()\",\"(selectstart)\":\"$event.preventDefault()\",class:\"mat-slider\",role:\"slider\",\"[tabIndex]\":\"tabIndex\",\"[attr.aria-disabled]\":\"disabled\",\"[attr.aria-valuemax]\":\"max\",\"[attr.aria-valuemin]\":\"min\",\"[attr.aria-valuenow]\":\"value\",\"[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]\":\"_invertAxis\",\"[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 && _thumbGap && _invertAxis\",\"[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]=\"_trackBackgroundStyles\"></div>\\n    <div class=\"mat-slider-track-fill\" [ngStyle]=\"_trackFillStyles\"></div>\\n  </div>\\n  <div class=\"mat-slider-ticks-container\" [ngStyle]=\"_ticksContainerStyles\">\\n    <div class=\"mat-slider-ticks\" [ngStyle]=\"_ticksStyles\"></div>\\n  </div>\\n  <div class=\"mat-slider-thumb-container\" [ngStyle]=\"_thumbContainerStyles\">\\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:l.ViewEncapsulation.None,changeDetection:l.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)}@media(-ms-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%}@media(-ms-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)}@media(-ms-high-contrast: active){.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.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%}@media(-ms-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}/*# sourceMappingURL=slider.css.map */\\n']}]}],b.ctorParameters=function(){return[{type:l.ElementRef},{type:i.FocusMonitor},{type:l.ChangeDetectorRef},{type:o.Directionality,decorators:[{type:l.Optional}]},{type:String,decorators:[{type:l.Attribute,args:[\"tabindex\"]}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[c.ANIMATION_MODULE_TYPE]}]},{type:l.NgZone}]},b.propDecorators={invert:[{type:l.Input}],max:[{type:l.Input}],min:[{type:l.Input}],step:[{type:l.Input}],thumbLabel:[{type:l.Input}],tickInterval:[{type:l.Input}],value:[{type:l.Input}],displayWith:[{type:l.Input}],vertical:[{type:l.Input}],change:[{type:l.Output}],input:[{type:l.Output}],valueChange:[{type:l.Output}],_sliderWrapper:[{type:l.ViewChild,args:[\"sliderWrapper\",{static:!1}]}]},b);function b(t,e,n,r,i,o,a){var s=f.call(this,t)||this;return s._focusMonitor=e,s._changeDetectorRef=n,s._dir=r,s._animationMode=o,s._ngZone=a,s._invert=!1,s._max=100,s._min=0,s._step=1,s._thumbLabel=!1,s._tickInterval=0,s._value=null,s._vertical=!1,s.change=new l.EventEmitter,s.input=new l.EventEmitter,s.valueChange=new l.EventEmitter,s.onTouched=function(){},s._percent=0,s._isSliding=!1,s._isActive=!1,s._tickIntervalPercent=0,s._sliderDimensions=null,s._controlValueAccessorChangeFn=function(){},s._dirChangeSubscription=d.Subscription.EMPTY,s._pointerDown=function(n){s.disabled||s._isSliding||!w(n)&&0!==n.button||s._runInsideZone(function(){var e=s.value,t=x(n);s._isSliding=!0,n.preventDefault(),s._focusHostElement(),s._onMouseenter(),s._bindGlobalEvents(n),s._focusHostElement(),s._updateValueFromPosition(t),s._valueOnSlideStart=s.value,s._pointerPositionOnStart=t,e!=s.value&&(s._emitInputEvent(),s._emitChangeEvent())})},s._pointerMove=function(e){if(s._isSliding){e.preventDefault();var t=s.value;s._updateValueFromPosition(x(e)),t!=s.value&&s._emitInputEvent()}},s._pointerUp=function(e){if(s._isSliding){var t=s._pointerPositionOnStart,n=x(e);e.preventDefault(),s._removeGlobalEvents(),s._valueOnSlideStart=s._pointerPositionOnStart=null,s._isSliding=!1,s._valueOnSlideStart==s.value||s.disabled||!t||t.x===n.x&&t.y===n.y||s._emitChangeEvent()}},s.tabIndex=parseInt(i)||0,s._runOutsizeZone(function(){var e=t.nativeElement;e.addEventListener(\"mousedown\",s._pointerDown,m),e.addEventListener(\"touchstart\",s._pointerDown,m)}),s}function w(e){return\"t\"===e.type[0]}function x(e){var t=w(e)?e.touches[0]||e.changedTouches[0]:e;return{x:t.clientX,y:t.clientY}}var C=(S.decorators=[{type:l.NgModule,args:[{imports:[t.CommonModule,n.MatCommonModule],exports:[_,n.MatCommonModule],declarations:[_]}]}],S);function S(){}e.MatSliderModule=C,e.MAT_SLIDER_VALUE_ACCESSOR=v,e.MatSliderChange=y,e.MatSlider=_,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"@angular/material/button\"),require(\"rxjs\"),require(\"tslib\"),require(\"rxjs/operators\"),require(\"@angular/animations\"),require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/layout\")):System.registerDynamic(\"npm:@angular/material/bundles/material-snack-bar.umd.js\",[\"@angular/cdk/overlay\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"@angular/material/button\",\"rxjs\",\"tslib\",\"rxjs/operators\",\"@angular/animations\",\"@angular/cdk/a11y\",\"@angular/cdk/layout\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"@angular/material/button\"),e(\"rxjs\"),e(\"tslib\"),e(\"rxjs/operators\"),e(\"@angular/animations\"),e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/layout\"))})}(0,function(e,a,u,t,c,n,r,o,p,d,i,s,h){\"use strict\";var f=(l.prototype.dismiss=function(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)},l.prototype.dismissWithAction=function(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete())},l.prototype.closeWithAction=function(){this.dismissWithAction()},l.prototype._dismissAfter=function(e){var t=this;this._durationTimeoutId=setTimeout(function(){return t.dismiss()},e)},l.prototype._open=function(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())},l.prototype._finishDismiss=function(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1},l.prototype.afterDismissed=function(){return this._afterDismissed.asObservable()},l.prototype.afterOpened=function(){return this.containerInstance._onEnter},l.prototype.onAction=function(){return this._onAction.asObservable()},l);function l(e,t){var n=this;this._overlayRef=t,this._afterDismissed=new o.Subject,this._afterOpened=new o.Subject,this._onAction=new o.Subject,this._dismissedByAction=!1,this.containerInstance=e,this.onAction().subscribe(function(){return n.dismiss()}),e._onExit.subscribe(function(){return n._finishDismiss()})}var m=new c.InjectionToken(\"MatSnackBarData\"),v=function(){this.politeness=\"assertive\",this.announcementMessage=\"\",this.duration=0,this.data=null,this.horizontalPosition=\"center\",this.verticalPosition=\"bottom\"},y=(g.prototype.action=function(){this.snackBarRef.dismissWithAction()},Object.defineProperty(g.prototype,\"hasAction\",{get:function(){return!!this.data.action},enumerable:!0,configurable:!0}),g.decorators=[{type:c.Component,args:[{moduleId:module.id,selector:\"simple-snack-bar\",template:'<span>{{data.message}}</span>\\n<div class=\"mat-simple-snackbar-action\"  *ngIf=\"hasAction\">\\n  <button mat-button (click)=\"action()\">{{data.action}}</button>\\n</div>\\n',encapsulation:c.ViewEncapsulation.None,changeDetection:c.ChangeDetectionStrategy.OnPush,host:{class:\"mat-simple-snackbar\"},styles:[\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}/*# sourceMappingURL=simple-snack-bar.css.map */\\n\"]}]}],g.ctorParameters=function(){return[{type:f},{type:void 0,decorators:[{type:c.Inject,args:[m]}]}]},g);function g(e,t){this.snackBarRef=e,this.data=t}var _,b={snackBarState:i.trigger(\"state\",[i.state(\"void, hidden\",i.style({transform:\"scale(0.8)\",opacity:0})),i.state(\"visible\",i.style({transform:\"scale(1)\",opacity:1})),i.transition(\"* => visible\",i.animate(\"150ms cubic-bezier(0, 0, 0.2, 1)\")),i.transition(\"* => void, * => hidden\",i.animate(\"75ms cubic-bezier(0.4, 0.0, 1, 1)\",i.style({opacity:0})))])},w=(_=u.BasePortalOutlet,p.__extends(x,_),x.prototype.attachComponentPortal=function(e){return this._assertNotAttached(),this._applySnackBarClasses(),this._portalOutlet.attachComponentPortal(e)},x.prototype.attachTemplatePortal=function(e){return this._assertNotAttached(),this._applySnackBarClasses(),this._portalOutlet.attachTemplatePortal(e)},x.prototype.onAnimationEnd=function(e){var t=e.fromState,n=e.toState;if((\"void\"===n&&\"void\"!==t||\"hidden\"===n)&&this._completeExit(),\"visible\"===n){var r=this._onEnter;this._ngZone.run(function(){r.next(),r.complete()})}},x.prototype.enter=function(){this._destroyed||(this._animationState=\"visible\",this._changeDetectorRef.detectChanges())},x.prototype.exit=function(){return this._animationState=\"hidden\",this._onExit},x.prototype.ngOnDestroy=function(){this._destroyed=!0,this._completeExit()},x.prototype._completeExit=function(){var e=this;this._ngZone.onMicrotaskEmpty.asObservable().pipe(d.take(1)).subscribe(function(){e._onExit.next(),e._onExit.complete()})},x.prototype._applySnackBarClasses=function(){var t=this._elementRef.nativeElement,e=this.snackBarConfig.panelClass;e&&(Array.isArray(e)?e.forEach(function(e){return t.classList.add(e)}):t.classList.add(e)),\"center\"===this.snackBarConfig.horizontalPosition&&t.classList.add(\"mat-snack-bar-center\"),\"top\"===this.snackBarConfig.verticalPosition&&t.classList.add(\"mat-snack-bar-top\")},x.prototype._assertNotAttached=function(){if(this._portalOutlet.hasAttached())throw Error(\"Attempting to attach snack bar content after content is already attached\")},x.decorators=[{type:c.Component,args:[{moduleId:module.id,selector:\"snack-bar-container\",template:\"<ng-template cdkPortalOutlet></ng-template>\\n\",changeDetection:c.ChangeDetectionStrategy.Default,encapsulation:c.ViewEncapsulation.None,animations:[b.snackBarState],host:{\"[attr.role]\":\"_role\",class:\"mat-snack-bar-container\",\"[@state]\":\"_animationState\",\"(@state.done)\":\"onAnimationEnd($event)\"},styles:[\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}@media(-ms-high-contrast: active){.mat-snack-bar-container{border:solid 1px}}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}/*# sourceMappingURL=snack-bar-container.css.map */\\n\"]}]}],x.ctorParameters=function(){return[{type:c.NgZone},{type:c.ElementRef},{type:c.ChangeDetectorRef},{type:v}]},x.propDecorators={_portalOutlet:[{type:c.ViewChild,args:[u.CdkPortalOutlet,{static:!0}]}]},x);function x(e,t,n,r){var i=_.call(this)||this;return i._ngZone=e,i._elementRef=t,i._changeDetectorRef=n,i.snackBarConfig=r,i._destroyed=!1,i._onExit=new o.Subject,i._onEnter=new o.Subject,i._animationState=\"void\",\"assertive\"!==r.politeness||r.announcementMessage?\"off\"===r.politeness?i._role=null:i._role=\"status\":i._role=\"alert\",i}var C=(S.decorators=[{type:c.NgModule,args:[{imports:[a.OverlayModule,u.PortalModule,t.CommonModule,r.MatButtonModule,n.MatCommonModule],exports:[w,n.MatCommonModule],declarations:[w,y],entryComponents:[w,y]}]}],S);function S(){}var E=new c.InjectionToken(\"mat-snack-bar-default-options\",{providedIn:\"root\",factory:O});function O(){return new v}var k=(Object.defineProperty(D.prototype,\"_openedSnackBarRef\",{get:function(){var e=this._parentSnackBar;return e?e._openedSnackBarRef:this._snackBarRefAtThisLevel},set:function(e){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=e:this._snackBarRefAtThisLevel=e},enumerable:!0,configurable:!0}),D.prototype.openFromComponent=function(e,t){return this._attach(e,t)},D.prototype.openFromTemplate=function(e,t){return this._attach(e,t)},D.prototype.open=function(e,t,n){void 0===t&&(t=\"\");var r=p.__assign({},this._defaultConfig,n);return r.data={message:e,action:t},r.announcementMessage||(r.announcementMessage=e),this.openFromComponent(y,r)},D.prototype.dismiss=function(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()},D.prototype.ngOnDestroy=function(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()},D.prototype._attachSnackBarContainer=function(e,t){var n=t&&t.viewContainerRef&&t.viewContainerRef.injector,r=new u.PortalInjector(n||this._injector,new WeakMap([[v,t]])),i=new u.ComponentPortal(w,t.viewContainerRef,r),o=e.attach(i);return o.instance.snackBarConfig=t,o.instance},D.prototype._attach=function(e,t){var n=p.__assign({},new v,this._defaultConfig,t),r=this._createOverlay(n),i=this._attachSnackBarContainer(r,n),o=new f(i,r);if(e instanceof c.TemplateRef){var a=new u.TemplatePortal(e,null,{$implicit:n.data,snackBarRef:o});o.instance=i.attachTemplatePortal(a)}else{var s=this._createInjector(n,o),l=(a=new u.ComponentPortal(e,void 0,s),i.attachComponentPortal(a));o.instance=l.instance}return this._breakpointObserver.observe(h.Breakpoints.HandsetPortrait).pipe(d.takeUntil(r.detachments())).subscribe(function(e){var t=r.overlayElement.classList,n=\"mat-snack-bar-handset\";e.matches?t.add(n):t.remove(n)}),this._animateSnackBar(o,n),this._openedSnackBarRef=o,this._openedSnackBarRef},D.prototype._animateSnackBar=function(e,t){var n=this;e.afterDismissed().subscribe(function(){n._openedSnackBarRef==e&&(n._openedSnackBarRef=null),t.announcementMessage&&n._live.clear()}),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(function(){e.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):e.containerInstance.enter(),t.duration&&0<t.duration&&e.afterOpened().subscribe(function(){return e._dismissAfter(t.duration)}),t.announcementMessage&&this._live.announce(t.announcementMessage,t.politeness)},D.prototype._createOverlay=function(e){var t=new a.OverlayConfig;t.direction=e.direction;var n=this._overlay.position().global(),r=\"rtl\"===e.direction,i=\"left\"===e.horizontalPosition||\"start\"===e.horizontalPosition&&!r||\"end\"===e.horizontalPosition&&r,o=!i&&\"center\"!==e.horizontalPosition;return i?n.left(\"0\"):o?n.right(\"0\"):n.centerHorizontally(),\"top\"===e.verticalPosition?n.top(\"0\"):n.bottom(\"0\"),t.positionStrategy=n,this._overlay.create(t)},D.prototype._createInjector=function(e,t){var n=e&&e.viewContainerRef&&e.viewContainerRef.injector;return new u.PortalInjector(n||this._injector,new WeakMap([[f,t],[m,e.data]]))},D.decorators=[{type:c.Injectable,args:[{providedIn:C}]}],D.ctorParameters=function(){return[{type:a.Overlay},{type:s.LiveAnnouncer},{type:c.Injector},{type:h.BreakpointObserver},{type:D,decorators:[{type:c.Optional},{type:c.SkipSelf}]},{type:v,decorators:[{type:c.Inject,args:[E]}]}]},D.ngInjectableDef=c.ɵɵdefineInjectable({factory:function(){return new D(c.ɵɵinject(a.Overlay),c.ɵɵinject(s.LiveAnnouncer),c.ɵɵinject(c.INJECTOR),c.ɵɵinject(h.BreakpointObserver),c.ɵɵinject(D,12),c.ɵɵinject(E))},token:D,providedIn:C}),D);function D(e,t,n,r,i,o){this._overlay=e,this._live=t,this._injector=n,this._breakpointObserver=r,this._parentSnackBar=i,this._defaultConfig=o,this._snackBarRefAtThisLevel=null}e.MatSnackBarModule=C,e.MAT_SNACK_BAR_DEFAULT_OPTIONS=E,e.MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY=O,e.MatSnackBar=k,e.MatSnackBarContainer=w,e.MAT_SNACK_BAR_DATA=m,e.MatSnackBarConfig=v,e.MatSnackBarRef=f,e.SimpleSnackBar=y,e.matSnackBarAnimations=b,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/material/core\"),require(\"rxjs\"),require(\"@angular/animations\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/material/bundles/material-sort.umd.js\",[\"@angular/core\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/material/core\",\"rxjs\",\"@angular/animations\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/material/core\"),e(\"rxjs\"),e(\"@angular/animations\"),e(\"@angular/common\"))})}(0,function(e,t,n,r,i,o,a,s){\"use strict\";function l(){}var u,c=i.mixinInitialized(i.mixinDisabled(l)),p=(u=c,n.__extends(d,u),Object.defineProperty(d.prototype,\"direction\",{get:function(){return this._direction},set:function(e){if(t.isDevMode()&&e&&\"asc\"!==e&&\"desc\"!==e)throw function(e){return Error(e+\" is not a valid sort direction ('asc' or 'desc').\")}(e);this._direction=e},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,\"disableClear\",{get:function(){return this._disableClear},set:function(e){this._disableClear=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),d.prototype.register=function(e){if(!e.id)throw Error(\"MatSortHeader must be provided with a unique id.\");if(this.sortables.has(e.id))throw function(e){return Error(\"Cannot have two MatSortables with the same id (\"+e+\").\")}(e.id);this.sortables.set(e.id,e)},d.prototype.deregister=function(e){this.sortables.delete(e.id)},d.prototype.sort=function(e){this.active!=e.id?(this.active=e.id,this.direction=e.start?e.start:this.start):this.direction=this.getNextSortDirection(e),this.sortChange.emit({active:this.active,direction:this.direction})},d.prototype.getNextSortDirection=function(e){if(!e)return\"\";var t=null!=e.disableClear?e.disableClear:this.disableClear,n=function(e,t){var n=[\"asc\",\"desc\"];return\"desc\"==e&&n.reverse(),t||n.push(\"\"),n}(e.start||this.start,t),r=n.indexOf(this.direction)+1;return r>=n.length&&(r=0),n[r]},d.prototype.ngOnInit=function(){this._markInitialized()},d.prototype.ngOnChanges=function(){this._stateChanges.next()},d.prototype.ngOnDestroy=function(){this._stateChanges.complete()},d.decorators=[{type:t.Directive,args:[{selector:\"[matSort]\",exportAs:\"matSort\",inputs:[\"disabled: matSortDisabled\"]}]}],d.propDecorators={active:[{type:t.Input,args:[\"matSortActive\"]}],start:[{type:t.Input,args:[\"matSortStart\"]}],direction:[{type:t.Input,args:[\"matSortDirection\"]}],disableClear:[{type:t.Input,args:[\"matSortDisableClear\"]}],sortChange:[{type:t.Output,args:[\"matSortChange\"]}]},d);function d(){var e=null!==u&&u.apply(this,arguments)||this;return e.sortables=new Map,e._stateChanges=new o.Subject,e.start=\"asc\",e._direction=\"\",e.sortChange=new t.EventEmitter,e}var h=i.AnimationDurations.ENTERING+\" \"+i.AnimationCurves.STANDARD_CURVE,f={indicator:a.trigger(\"indicator\",[a.state(\"active-asc, asc\",a.style({transform:\"translateY(0px)\"})),a.state(\"active-desc, desc\",a.style({transform:\"translateY(10px)\"})),a.transition(\"active-asc <=> active-desc\",a.animate(h))]),leftPointer:a.trigger(\"leftPointer\",[a.state(\"active-asc, asc\",a.style({transform:\"rotate(-45deg)\"})),a.state(\"active-desc, desc\",a.style({transform:\"rotate(45deg)\"})),a.transition(\"active-asc <=> active-desc\",a.animate(h))]),rightPointer:a.trigger(\"rightPointer\",[a.state(\"active-asc, asc\",a.style({transform:\"rotate(45deg)\"})),a.state(\"active-desc, desc\",a.style({transform:\"rotate(-45deg)\"})),a.transition(\"active-asc <=> active-desc\",a.animate(h))]),arrowOpacity:a.trigger(\"arrowOpacity\",[a.state(\"desc-to-active, asc-to-active, active\",a.style({opacity:1})),a.state(\"desc-to-hint, asc-to-hint, hint\",a.style({opacity:.54})),a.state(\"hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void\",a.style({opacity:0})),a.transition(\"* => asc, * => desc, * => active, * => hint, * => void\",a.animate(\"0ms\")),a.transition(\"* <=> *\",a.animate(h))]),arrowPosition:a.trigger(\"arrowPosition\",[a.transition(\"* => desc-to-hint, * => desc-to-active\",a.animate(h,a.keyframes([a.style({transform:\"translateY(-25%)\"}),a.style({transform:\"translateY(0)\"})]))),a.transition(\"* => hint-to-desc, * => active-to-desc\",a.animate(h,a.keyframes([a.style({transform:\"translateY(0)\"}),a.style({transform:\"translateY(25%)\"})]))),a.transition(\"* => asc-to-hint, * => asc-to-active\",a.animate(h,a.keyframes([a.style({transform:\"translateY(25%)\"}),a.style({transform:\"translateY(0)\"})]))),a.transition(\"* => hint-to-asc, * => active-to-asc\",a.animate(h,a.keyframes([a.style({transform:\"translateY(0)\"}),a.style({transform:\"translateY(-25%)\"})]))),a.state(\"desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active\",a.style({transform:\"translateY(0)\"})),a.state(\"hint-to-desc, active-to-desc, desc\",a.style({transform:\"translateY(-25%)\"})),a.state(\"hint-to-asc, active-to-asc, asc\",a.style({transform:\"translateY(25%)\"}))]),allowChildren:a.trigger(\"allowChildren\",[a.transition(\"* <=> *\",[a.query(\"@*\",a.animateChild(),{optional:!0})])])},m=(v.decorators=[{type:t.Injectable,args:[{providedIn:\"root\"}]}],v.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new v},token:v,providedIn:\"root\"}),v);function v(){this.changes=new o.Subject,this.sortButtonLabel=function(e){return\"Change sorting for \"+e}}function y(e){return e||new m}function g(){}var _,b={provide:m,deps:[[new t.Optional,new t.SkipSelf,m]],useFactory:y},w=i.mixinDisabled(g),x=(_=w,n.__extends(C,_),Object.defineProperty(C.prototype,\"disableClear\",{get:function(){return this._disableClear},set:function(e){this._disableClear=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),C.prototype.ngOnInit=function(){!this.id&&this._columnDef&&(this.id=this._columnDef.name),this._updateArrowDirection(),this._setAnimationTransitionState({toState:this._isSorted()?\"active\":this._arrowDirection}),this._sort.register(this)},C.prototype.ngOnDestroy=function(){this._sort.deregister(this),this._rerenderSubscription.unsubscribe()},C.prototype._setIndicatorHintVisible=function(e){this._isDisabled()&&e||(this._showIndicatorHint=e,this._isSorted()||(this._updateArrowDirection(),this._showIndicatorHint?this._setAnimationTransitionState({fromState:this._arrowDirection,toState:\"hint\"}):this._setAnimationTransitionState({fromState:\"hint\",toState:this._arrowDirection})))},C.prototype._setAnimationTransitionState=function(e){this._viewState=e,this._disableViewStateAnimation&&(this._viewState={toState:e.toState})},C.prototype._handleClick=function(){if(!this._isDisabled()){this._sort.sort(this),\"hint\"!==this._viewState.toState&&\"active\"!==this._viewState.toState||(this._disableViewStateAnimation=!0);var e=this._isSorted()?{fromState:this._arrowDirection,toState:\"active\"}:{fromState:\"active\",toState:this._arrowDirection};this._setAnimationTransitionState(e),this._showIndicatorHint=!1}},C.prototype._isSorted=function(){return this._sort.active==this.id&&(\"asc\"===this._sort.direction||\"desc\"===this._sort.direction)},C.prototype._getArrowDirectionState=function(){return(this._isSorted()?\"active-\":\"\")+this._arrowDirection},C.prototype._getArrowViewState=function(){var e=this._viewState.fromState;return(e?e+\"-to-\":\"\")+this._viewState.toState},C.prototype._updateArrowDirection=function(){this._arrowDirection=this._isSorted()?this._sort.direction:this.start||this._sort.start},C.prototype._isDisabled=function(){return this._sort.disabled||this.disabled},C.prototype._getAriaSortAttribute=function(){return this._isSorted()?\"asc\"==this._sort.direction?\"ascending\":\"descending\":null},C.prototype._renderArrow=function(){return!this._isDisabled()||this._isSorted()},C.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"[mat-sort-header]\",exportAs:\"matSortHeader\",template:'<div class=\"mat-sort-header-container\"\\n     [class.mat-sort-header-sorted]=\"_isSorted()\"\\n     [class.mat-sort-header-position-before]=\"arrowPosition == \\'before\\'\">\\n  <button class=\"mat-sort-header-button\" type=\"button\"\\n          [attr.disabled]=\"_isDisabled() || null\"\\n          [attr.aria-label]=\"_intl.sortButtonLabel(id)\"\\n          (focus)=\"_setIndicatorHintVisible(true)\"\\n          (blur)=\"_setIndicatorHintVisible(false)\">\\n    <ng-content></ng-content>\\n  </button>\\n\\n  \\x3c!-- Disable animations while a current animation is running --\\x3e\\n  <div class=\"mat-sort-header-arrow\"\\n       *ngIf=\"_renderArrow()\"\\n       [@arrowOpacity]=\"_getArrowViewState()\"\\n       [@arrowPosition]=\"_getArrowViewState()\"\\n       [@allowChildren]=\"_getArrowDirectionState()\"\\n       (@arrowPosition.start)=\"_disableViewStateAnimation = true\"\\n       (@arrowPosition.done)=\"_disableViewStateAnimation = false\">\\n    <div class=\"mat-sort-header-stem\"></div>\\n    <div class=\"mat-sort-header-indicator\" [@indicator]=\"_getArrowDirectionState()\">\\n      <div class=\"mat-sort-header-pointer-left\" [@leftPointer]=\"_getArrowDirectionState()\"></div>\\n      <div class=\"mat-sort-header-pointer-right\" [@rightPointer]=\"_getArrowDirectionState()\"></div>\\n      <div class=\"mat-sort-header-pointer-middle\"></div>\\n    </div>\\n  </div>\\n</div>\\n',host:{\"(click)\":\"_handleClick()\",\"(mouseenter)\":\"_setIndicatorHintVisible(true)\",\"(mouseleave)\":\"_setIndicatorHintVisible(false)\",\"[attr.aria-sort]\":\"_getAriaSortAttribute()\",\"[class.mat-sort-header-disabled]\":\"_isDisabled()\"},encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,inputs:[\"disabled\"],animations:[f.indicator,f.leftPointer,f.rightPointer,f.arrowOpacity,f.arrowPosition,f.allowChildren],styles:[\".mat-sort-header-container{display:flex;cursor:pointer;align-items:center}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-button{border:none;background:0 0;display:flex;align-items:center;padding:0;cursor:inherit;outline:0;font:inherit;color:currentColor}.mat-sort-header-button::-moz-focus-inner{border:0}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}@media(-ms-high-contrast: active){.mat-sort-header-stem{width:0;border-left:solid 2px}}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}@media(-ms-high-contrast: active){.mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}@media(-ms-high-contrast: active){.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}/*# sourceMappingURL=sort-header.css.map */\\n\"]}]}],C.ctorParameters=function(){return[{type:m},{type:t.ChangeDetectorRef},{type:p,decorators:[{type:t.Optional}]},{type:void 0,decorators:[{type:t.Inject,args:[\"MAT_SORT_HEADER_COLUMN_DEF\"]},{type:t.Optional}]}]},C.propDecorators={id:[{type:t.Input,args:[\"mat-sort-header\"]}],arrowPosition:[{type:t.Input}],start:[{type:t.Input}],disableClear:[{type:t.Input}]},C);function C(e,t,n,r){var i=_.call(this)||this;if(i._intl=e,i._sort=n,i._columnDef=r,i._showIndicatorHint=!1,i._arrowDirection=\"\",i._disableViewStateAnimation=!1,i.arrowPosition=\"after\",!n)throw Error(\"MatSortHeader must be placed within a parent element with the MatSort directive.\");return i._rerenderSubscription=o.merge(n.sortChange,n._stateChanges,e.changes).subscribe(function(){i._isSorted()&&i._updateArrowDirection(),!i._isSorted()&&i._viewState&&\"active\"===i._viewState.toState&&(i._disableViewStateAnimation=!1,i._setAnimationTransitionState({fromState:\"active\",toState:i._arrowDirection})),t.markForCheck()}),i}var S=(E.decorators=[{type:t.NgModule,args:[{imports:[s.CommonModule],exports:[p,x],declarations:[p,x],providers:[b]}]}],E);function E(){}e.MatSortModule=S,e.MatSortHeader=x,e.MatSortHeaderIntl=m,e.MAT_SORT_HEADER_INTL_PROVIDER_FACTORY=y,e.MAT_SORT_HEADER_INTL_PROVIDER=b,e.MatSort=p,e.matSortAnimations=f,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/a11y\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-stepper.umd.js\",[\"@angular/cdk/a11y\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/keycodes\",\"@angular/common\",\"@angular/core\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/a11y\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,n,t,r,i,o,a,s,l){\"use strict\";var u=(c.prototype.focus=function(){this._elementRef.nativeElement.focus()},c.decorators=[{type:a.Directive,args:[{selector:\"[cdkStepHeader]\",host:{role:\"tab\"}}]}],c.ctorParameters=function(){return[{type:a.ElementRef}]},c);function c(e){this._elementRef=e}var p=(d.decorators=[{type:a.Directive,args:[{selector:\"[cdkStepLabel]\"}]}],d.ctorParameters=function(){return[{type:a.TemplateRef}]},d);function d(e){this.template=e}function h(){}var f=0,m={NUMBER:\"number\",EDIT:\"edit\",DONE:\"done\",ERROR:\"error\"},v=new a.InjectionToken(\"STEPPER_GLOBAL_OPTIONS\"),y=v,g=(Object.defineProperty(_.prototype,\"editable\",{get:function(){return this._editable},set:function(e){this._editable=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"optional\",{get:function(){return this._optional},set:function(e){this._optional=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"completed\",{get:function(){return null==this._completedOverride?this._getDefaultCompleted():this._completedOverride},set:function(e){this._completedOverride=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),_.prototype._getDefaultCompleted=function(){return this.stepControl?this.stepControl.valid&&this.interacted:this.interacted},Object.defineProperty(_.prototype,\"hasError\",{get:function(){return null==this._customError?this._getDefaultError():this._customError},set:function(e){this._customError=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),_.prototype._getDefaultError=function(){return this.stepControl&&this.stepControl.invalid&&this.interacted},_.prototype.select=function(){this._stepper.selected=this},_.prototype.reset=function(){this.interacted=!1,null!=this._completedOverride&&(this._completedOverride=!1),null!=this._customError&&(this._customError=!1),this.stepControl&&this.stepControl.reset()},_.prototype.ngOnChanges=function(){this._stepper._stateChanged()},_.decorators=[{type:a.Component,args:[{moduleId:module.id,selector:\"cdk-step\",exportAs:\"cdkStep\",template:\"<ng-template><ng-content></ng-content></ng-template>\",encapsulation:a.ViewEncapsulation.None,changeDetection:a.ChangeDetectionStrategy.OnPush}]}],_.ctorParameters=function(){return[{type:b,decorators:[{type:a.Inject,args:[a.forwardRef(function(){return b})]}]},{type:void 0,decorators:[{type:a.Optional},{type:a.Inject,args:[v]}]}]},_.propDecorators={stepLabel:[{type:a.ContentChild,args:[p,{static:!1}]}],content:[{type:a.ViewChild,args:[a.TemplateRef,{static:!0}]}],stepControl:[{type:a.Input}],label:[{type:a.Input}],errorMessage:[{type:a.Input}],ariaLabel:[{type:a.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:a.Input,args:[\"aria-labelledby\"]}],state:[{type:a.Input}],editable:[{type:a.Input}],optional:[{type:a.Input}],completed:[{type:a.Input}],hasError:[{type:a.Input}]},_);function _(e,t){this._stepper=e,this.interacted=!1,this._editable=!0,this._optional=!1,this._completedOverride=null,this._customError=null,this._stepperOptions=t||{},this._displayDefaultIndicatorType=!1!==this._stepperOptions.displayDefaultIndicatorType,this._showError=!!this._stepperOptions.showError}var b=(Object.defineProperty(w.prototype,\"steps\",{get:function(){return this._steps},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"linear\",{get:function(){return this._linear},set:function(e){this._linear=r.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"selectedIndex\",{get:function(){return this._selectedIndex},set:function(e){var t=r.coerceNumberProperty(e);if(this.steps){if(t<0||t>this.steps.length-1)throw Error(\"cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.\");this._selectedIndex!=t&&!this._anyControlsInvalidOrPending(t)&&(t>=this._selectedIndex||this.steps.toArray()[t].editable)&&this._updateSelectedItemIndex(e)}else this._selectedIndex=t},enumerable:!0,configurable:!0}),Object.defineProperty(w.prototype,\"selected\",{get:function(){return this.steps?this.steps.toArray()[this.selectedIndex]:void 0},set:function(e){this.selectedIndex=this.steps?this.steps.toArray().indexOf(e):-1},enumerable:!0,configurable:!0}),w.prototype.ngAfterViewInit=function(){var t=this;this._keyManager=new n.FocusKeyManager(this._stepHeader).withWrap().withVerticalOrientation(\"vertical\"===this._orientation),(this._dir?this._dir.change:s.of()).pipe(l.startWith(this._layoutDirection()),l.takeUntil(this._destroyed)).subscribe(function(e){return t._keyManager.withHorizontalOrientation(e)}),this._keyManager.updateActiveItemIndex(this._selectedIndex),this.steps.changes.pipe(l.takeUntil(this._destroyed)).subscribe(function(){t.selected||(t._selectedIndex=Math.max(t._selectedIndex-1,0))})},w.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete()},w.prototype.next=function(){this.selectedIndex=Math.min(this._selectedIndex+1,this.steps.length-1)},w.prototype.previous=function(){this.selectedIndex=Math.max(this._selectedIndex-1,0)},w.prototype.reset=function(){this._updateSelectedItemIndex(0),this.steps.forEach(function(e){return e.reset()}),this._stateChanged()},w.prototype._getStepLabelId=function(e){return\"cdk-step-label-\"+this._groupId+\"-\"+e},w.prototype._getStepContentId=function(e){return\"cdk-step-content-\"+this._groupId+\"-\"+e},w.prototype._stateChanged=function(){this._changeDetectorRef.markForCheck()},w.prototype._getAnimationDirection=function(e){var t=e-this._selectedIndex;return t<0?\"rtl\"===this._layoutDirection()?\"next\":\"previous\":0<t?\"rtl\"===this._layoutDirection()?\"previous\":\"next\":\"current\"},w.prototype._getIndicatorType=function(e,t){void 0===t&&(t=m.NUMBER);var n=this.steps.toArray()[e],r=this._isCurrentStep(e);return n._displayDefaultIndicatorType?this._getDefaultIndicatorLogic(n,r):this._getGuidelineLogic(n,r,t)},w.prototype._getDefaultIndicatorLogic=function(e,t){return e._showError&&e.hasError&&!t?m.ERROR:!e.completed||t?m.NUMBER:e.editable?m.EDIT:m.DONE},w.prototype._getGuidelineLogic=function(e,t,n){return void 0===n&&(n=m.NUMBER),e._showError&&e.hasError&&!t?m.ERROR:e.completed&&!t?m.DONE:e.completed&&t?n:e.editable&&t?m.EDIT:n},w.prototype._isCurrentStep=function(e){return this._selectedIndex===e},w.prototype._getFocusIndex=function(){return this._keyManager?this._keyManager.activeItemIndex:this._selectedIndex},w.prototype._updateSelectedItemIndex=function(e){var t=this.steps.toArray();this.selectionChange.emit({selectedIndex:e,previouslySelectedIndex:this._selectedIndex,selectedStep:t[e],previouslySelectedStep:t[this._selectedIndex]}),this._containsFocus()?this._keyManager.setActiveItem(e):this._keyManager.updateActiveItemIndex(e),this._selectedIndex=e,this._stateChanged()},w.prototype._onKeydown=function(e){var t=i.hasModifierKey(e),n=e.keyCode,r=this._keyManager;null==r.activeItemIndex||t||n!==i.SPACE&&n!==i.ENTER?n===i.HOME?(r.setFirstItemActive(),e.preventDefault()):n===i.END?(r.setLastItemActive(),e.preventDefault()):r.onKeydown(e):(this.selectedIndex=r.activeItemIndex,e.preventDefault())},w.prototype._anyControlsInvalidOrPending=function(e){var t=this.steps.toArray();return t[this._selectedIndex].interacted=!0,!!(this._linear&&0<=e)&&t.slice(0,e).some(function(e){var t=e.stepControl;return(t?t.invalid||t.pending||!e.interacted:!e.completed)&&!e.optional&&!e._completedOverride})},w.prototype._layoutDirection=function(){return this._dir&&\"rtl\"===this._dir.value?\"rtl\":\"ltr\"},w.prototype._containsFocus=function(){if(!this._document||!this._elementRef)return!1;var e=this._elementRef.nativeElement,t=this._document.activeElement;return e===t||e.contains(t)},w.decorators=[{type:a.Directive,args:[{selector:\"[cdkStepper]\",exportAs:\"cdkStepper\"}]}],w.ctorParameters=function(){return[{type:t.Directionality,decorators:[{type:a.Optional}]},{type:a.ChangeDetectorRef},{type:a.ElementRef},{type:void 0,decorators:[{type:a.Inject,args:[o.DOCUMENT]}]}]},w.propDecorators={_steps:[{type:a.ContentChildren,args:[g]}],_stepHeader:[{type:a.ContentChildren,args:[u]}],linear:[{type:a.Input}],selectedIndex:[{type:a.Input}],selected:[{type:a.Input}],selectionChange:[{type:a.Output}]},w);function w(e,t,n,r){this._dir=e,this._changeDetectorRef=t,this._elementRef=n,this._destroyed=new s.Subject,this._linear=!1,this._selectedIndex=0,this.selectionChange=new a.EventEmitter,this._orientation=\"horizontal\",this._groupId=f++,this._document=r}var x=(C.prototype._handleClick=function(){this._stepper.next()},C.decorators=[{type:a.Directive,args:[{selector:\"button[cdkStepperNext]\",host:{\"[type]\":\"type\"}}]}],C.ctorParameters=function(){return[{type:b}]},C.propDecorators={type:[{type:a.Input}],_handleClick:[{type:a.HostListener,args:[\"click\"]}]},C);function C(e){this._stepper=e,this.type=\"submit\"}var S=(E.prototype._handleClick=function(){this._stepper.previous()},E.decorators=[{type:a.Directive,args:[{selector:\"button[cdkStepperPrevious]\",host:{\"[type]\":\"type\"}}]}],E.ctorParameters=function(){return[{type:b}]},E.propDecorators={type:[{type:a.Input}],_handleClick:[{type:a.HostListener,args:[\"click\"]}]},E);function E(e){this._stepper=e,this.type=\"button\"}var O=(k.decorators=[{type:a.NgModule,args:[{imports:[t.BidiModule,o.CommonModule],exports:[g,b,u,p,x,S],declarations:[g,b,u,p,x,S]}]}],k);function k(){}e.StepperSelectionEvent=h,e.STEP_STATE=m,e.STEPPER_GLOBAL_OPTIONS=v,e.MAT_STEPPER_GLOBAL_OPTIONS=y,e.CdkStep=g,e.CdkStepper=b,e.CdkStepLabel=p,e.CdkStepperNext=x,e.CdkStepperPrevious=S,e.CdkStepperModule=O,e.CdkStepHeader=u,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"@angular/platform-browser/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-button.umd.js\",[\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/a11y\",\"@angular/platform-browser/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"@angular/platform-browser/animations\"))})}(0,function(e,t,n,r,u,i,o){\"use strict\";function a(e){this._elementRef=e}var c,p=[\"mat-button\",\"mat-flat-button\",\"mat-icon-button\",\"mat-raised-button\",\"mat-stroked-button\",\"mat-mini-fab\",\"mat-fab\"],s=r.mixinColor(r.mixinDisabled(r.mixinDisableRipple(a))),l=(c=s,u.__extends(d,c),d.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef)},d.prototype.focus=function(e,t){void 0===e&&(e=\"program\"),this._focusMonitor.focusVia(this._getHostElement(),e,t)},d.prototype._getHostElement=function(){return this._elementRef.nativeElement},d.prototype._isRippleDisabled=function(){return this.disableRipple||this.disabled},d.prototype._hasHostAttributes=function(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return e.some(function(e){return t._getHostElement().hasAttribute(e)})},d.decorators=[{type:n.Component,args:[{moduleId:module.id,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\"'},template:'<span class=\"mat-button-wrapper\"><ng-content></ng-content></span>\\n<div matRipple class=\"mat-button-ripple\"\\n     [class.mat-button-ripple-round]=\"isRoundButton || isIconButton\"\\n     [matRippleDisabled]=\"_isRippleDisabled()\"\\n     [matRippleCentered]=\"isIconButton\"\\n     [matRippleTrigger]=\"_getHostElement()\"></div>\\n<div class=\"mat-button-focus-overlay\"></div>\\n',inputs:[\"disabled\",\"disableRipple\",\"color\"],encapsulation:n.ViewEncapsulation.None,changeDetection:n.ChangeDetectionStrategy.OnPush,styles:[\".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .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[disabled],.mat-icon-button[disabled],.mat-stroked-button[disabled],.mat-flat-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[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[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[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}@media(-ms-high-contrast: active){.mat-button-focus-overlay{background-color:#fff}}@media(-ms-high-contrast: black-on-white){.mat-button-focus-overlay{background-color:#000}}.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:block;font-size:inherit;width:2.5em;height:2.5em}@media(-ms-high-contrast: active){.mat-button,.mat-flat-button,.mat-raised-button,.mat-icon-button,.mat-fab,.mat-mini-fab{outline:solid 1px}}/*# sourceMappingURL=button.css.map */\\n\"]}]}],d.ctorParameters=function(){return[{type:n.ElementRef},{type:i.FocusMonitor},{type:String,decorators:[{type:n.Optional},{type:n.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},d.propDecorators={ripple:[{type:n.ViewChild,args:[r.MatRipple,{static:!1}]}]},d);function d(e,t,n){var r,i,o=c.call(this,e)||this;o._focusMonitor=t,o._animationMode=n,o.isRoundButton=o._hasHostAttributes(\"mat-fab\",\"mat-mini-fab\"),o.isIconButton=o._hasHostAttributes(\"mat-icon-button\");try{for(var a=u.__values(p),s=a.next();!s.done;s=a.next()){var l=s.value;o._hasHostAttributes(l)&&o._getHostElement().classList.add(l)}}catch(e){r={error:e}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(r)throw r.error}}return e.nativeElement.classList.add(\"mat-button-base\"),o._focusMonitor.monitor(o._elementRef,!0),o.isRoundButton&&(o.color=\"accent\"),o}var h,f=(h=l,u.__extends(m,h),m.prototype._haltDisabledEvents=function(e){this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},m.decorators=[{type:n.Component,args:[{moduleId:module.id,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:{\"[attr.tabindex]\":\"disabled ? -1 : (tabIndex || 0)\",\"[attr.disabled]\":\"disabled || null\",\"[attr.aria-disabled]\":\"disabled.toString()\",\"(click)\":\"_haltDisabledEvents($event)\",\"[class._mat-animation-noopable]\":'_animationMode === \"NoopAnimations\"'},inputs:[\"disabled\",\"disableRipple\",\"color\"],template:'<span class=\"mat-button-wrapper\"><ng-content></ng-content></span>\\n<div matRipple class=\"mat-button-ripple\"\\n     [class.mat-button-ripple-round]=\"isRoundButton || isIconButton\"\\n     [matRippleDisabled]=\"_isRippleDisabled()\"\\n     [matRippleCentered]=\"isIconButton\"\\n     [matRippleTrigger]=\"_getHostElement()\"></div>\\n<div class=\"mat-button-focus-overlay\"></div>\\n',encapsulation:n.ViewEncapsulation.None,changeDetection:n.ChangeDetectionStrategy.OnPush,styles:[\".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .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[disabled],.mat-icon-button[disabled],.mat-stroked-button[disabled],.mat-flat-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[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[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[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}@media(-ms-high-contrast: active){.mat-button-focus-overlay{background-color:#fff}}@media(-ms-high-contrast: black-on-white){.mat-button-focus-overlay{background-color:#000}}.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:block;font-size:inherit;width:2.5em;height:2.5em}@media(-ms-high-contrast: active){.mat-button,.mat-flat-button,.mat-raised-button,.mat-icon-button,.mat-fab,.mat-mini-fab{outline:solid 1px}}/*# sourceMappingURL=button.css.map */\\n\"]}]}],m.ctorParameters=function(){return[{type:i.FocusMonitor},{type:n.ElementRef},{type:String,decorators:[{type:n.Optional},{type:n.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},m.propDecorators={tabIndex:[{type:n.Input}]},m);function m(e,t,n){return h.call(this,t,e,n)||this}var v=(y.decorators=[{type:n.NgModule,args:[{imports:[t.CommonModule,r.MatRippleModule,r.MatCommonModule],exports:[l,f,r.MatCommonModule],declarations:[l,f]}]}],y);function y(){}e.MatButtonModule=v,e.MatButton=l,e.MatAnchor=f,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/common/bundles/common-http.umd.js\",[\"@angular/core\",\"rxjs\",\"rxjs/operators\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/common\"))})}(0,function(f,e,u,c,t){\"use strict\";function n(){}function r(){}var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function o(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function a(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function s(n,r){return function(e,t){r(e,t,n)}}function l(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function p(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}var m=(d.prototype.has=function(e){return this.init(),this.headers.has(e.toLowerCase())},d.prototype.get=function(e){this.init();var t=this.headers.get(e.toLowerCase());return t&&0<t.length?t[0]:null},d.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},d.prototype.getAll=function(e){return this.init(),this.headers.get(e.toLowerCase())||null},d.prototype.append=function(e,t){return this.clone({name:e,value:t,op:\"a\"})},d.prototype.set=function(e,t){return this.clone({name:e,value:t,op:\"s\"})},d.prototype.delete=function(e,t){return this.clone({name:e,value:t,op:\"d\"})},d.prototype.maybeSetNormalizedName=function(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)},d.prototype.init=function(){var t=this;this.lazyInit&&(this.lazyInit instanceof d?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(e){return t.applyUpdate(e)}),this.lazyUpdate=null))},d.prototype.copyFrom=function(t){var n=this;t.init(),Array.from(t.headers.keys()).forEach(function(e){n.headers.set(e,t.headers.get(e)),n.normalizedNames.set(e,t.normalizedNames.get(e))})},d.prototype.clone=function(e){var t=new d;return t.lazyInit=this.lazyInit&&this.lazyInit instanceof d?this.lazyInit:this,t.lazyUpdate=(this.lazyUpdate||[]).concat([e]),t},d.prototype.applyUpdate=function(e){var t=e.name.toLowerCase();switch(e.op){case\"a\":case\"s\":var n=e.value;if(\"string\"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);var r=(\"a\"===e.op?this.headers.get(t):void 0)||[];r.push.apply(r,function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(p(arguments[t]));return e}(n)),this.headers.set(t,r);break;case\"d\":var i=e.value;if(i){var o=this.headers.get(t);if(!o)return;0===(o=o.filter(function(e){return-1===i.indexOf(e)})).length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,o)}else this.headers.delete(t),this.normalizedNames.delete(t)}},d.prototype.forEach=function(t){var n=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(e){return t(n.normalizedNames.get(e),n.headers.get(e))})},d);function d(r){var o=this;this.normalizedNames=new Map,this.lazyUpdate=null,r?this.lazyInit=\"string\"==typeof r?function(){o.headers=new Map,r.split(\"\\n\").forEach(function(e){var t=e.indexOf(\":\");if(0<t){var n=e.slice(0,t),r=n.toLowerCase(),i=e.slice(t+1).trim();o.maybeSetNormalizedName(n,r),o.headers.has(r)?o.headers.get(r).push(i):o.headers.set(r,[i])}})}:function(){o.headers=new Map,Object.keys(r).forEach(function(e){var t=r[e],n=e.toLowerCase();\"string\"==typeof t&&(t=[t]),0<t.length&&(o.headers.set(n,t),o.maybeSetNormalizedName(e,n))})}:this.headers=new Map}var h=(v.prototype.encodeKey=function(e){return y(e)},v.prototype.encodeValue=function(e){return y(e)},v.prototype.decodeKey=function(e){return decodeURIComponent(e)},v.prototype.decodeValue=function(e){return decodeURIComponent(e)},v);function v(){}function y(e){return encodeURIComponent(e).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,\"/\")}var g=(_.prototype.has=function(e){return this.init(),this.map.has(e)},_.prototype.get=function(e){this.init();var t=this.map.get(e);return t?t[0]:null},_.prototype.getAll=function(e){return this.init(),this.map.get(e)||null},_.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},_.prototype.append=function(e,t){return this.clone({param:e,value:t,op:\"a\"})},_.prototype.set=function(e,t){return this.clone({param:e,value:t,op:\"s\"})},_.prototype.delete=function(e,t){return this.clone({param:e,value:t,op:\"d\"})},_.prototype.toString=function(){var n=this;return this.init(),this.keys().map(function(e){var t=n.encoder.encodeKey(e);return n.map.get(e).map(function(e){return t+\"=\"+n.encoder.encodeValue(e)}).join(\"&\")}).join(\"&\")},_.prototype.clone=function(e){var t=new _({encoder:this.encoder});return t.cloneFrom=this.cloneFrom||this,t.updates=(this.updates||[]).concat([e]),t},_.prototype.init=function(){var i=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(e){return i.map.set(e,i.cloneFrom.map.get(e))}),this.updates.forEach(function(e){switch(e.op){case\"a\":case\"s\":var t=(\"a\"===e.op?i.map.get(e.param):void 0)||[];t.push(e.value),i.map.set(e.param,t);break;case\"d\":if(void 0===e.value){i.map.delete(e.param);break}var n=i.map.get(e.param)||[],r=n.indexOf(e.value);-1!==r&&n.splice(r,1),0<n.length?i.map.set(e.param,n):i.map.delete(e.param)}}),this.cloneFrom=this.updates=null)},_);function _(n){var r=this;if(void 0===n&&(n={}),this.updates=null,this.cloneFrom=null,this.encoder=n.encoder||new h,n.fromString){if(n.fromObject)throw new Error(\"Cannot specify both fromString and fromObject.\");this.map=function(e,a){var s=new Map;return 0<e.length&&e.split(\"&\").forEach(function(e){var t=e.indexOf(\"=\"),n=p(-1==t?[a.decodeKey(e),\"\"]:[a.decodeKey(e.slice(0,t)),a.decodeValue(e.slice(t+1))],2),r=n[0],i=n[1],o=s.get(r)||[];o.push(i),s.set(r,o)}),s}(n.fromString,this.encoder)}else n.fromObject?(this.map=new Map,Object.keys(n.fromObject).forEach(function(e){var t=n.fromObject[e];r.map.set(e,Array.isArray(t)?t:[t])})):this.map=null}function b(e){return\"undefined\"!=typeof ArrayBuffer&&e instanceof ArrayBuffer}function w(e){return\"undefined\"!=typeof Blob&&e instanceof Blob}function x(e){return\"undefined\"!=typeof FormData&&e instanceof FormData}var C,S=(E.prototype.serializeBody=function(){return null===this.body?null:b(this.body)||w(this.body)||x(this.body)||\"string\"==typeof this.body?this.body:this.body instanceof g?this.body.toString():\"object\"==typeof this.body||\"boolean\"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()},E.prototype.detectContentTypeHeader=function(){return null===this.body?null:x(this.body)?null:w(this.body)?this.body.type||null:b(this.body)?null:\"string\"==typeof this.body?\"text/plain\":this.body instanceof g?\"application/x-www-form-urlencoded;charset=UTF-8\":\"object\"==typeof this.body||\"number\"==typeof this.body||Array.isArray(this.body)?\"application/json\":null},E.prototype.clone=function(n){void 0===n&&(n={});var e=n.method||this.method,t=n.url||this.url,r=n.responseType||this.responseType,i=void 0!==n.body?n.body:this.body,o=void 0!==n.withCredentials?n.withCredentials:this.withCredentials,a=void 0!==n.reportProgress?n.reportProgress:this.reportProgress,s=n.headers||this.headers,l=n.params||this.params;return void 0!==n.setHeaders&&(s=Object.keys(n.setHeaders).reduce(function(e,t){return e.set(t,n.setHeaders[t])},s)),n.setParams&&(l=Object.keys(n.setParams).reduce(function(e,t){return e.set(t,n.setParams[t])},l)),new E(e,t,i,{params:l,headers:s,reportProgress:a,responseType:r,withCredentials:o})},E);function E(e,t,n,r){var i;if(this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType=\"json\",this.method=e.toUpperCase(),(i=function(e){switch(e){case\"DELETE\":case\"GET\":case\"HEAD\":case\"OPTIONS\":case\"JSONP\":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,r):n)&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new m),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=t;else{var a=t.indexOf(\"?\"),s=-1===a?\"?\":a<t.length-1?\"&\":\"\";this.urlWithParams=t+s+o}}else this.params=new g,this.urlWithParams=t}(C=f.HttpEventType||(f.HttpEventType={}))[C.Sent=0]=\"Sent\",C[C.UploadProgress=1]=\"UploadProgress\",C[C.ResponseHeader=2]=\"ResponseHeader\",C[C.DownloadProgress=3]=\"DownloadProgress\",C[C.Response=4]=\"Response\",C[C.User=5]=\"User\";function O(e,t,n){void 0===t&&(t=200),void 0===n&&(n=\"OK\"),this.headers=e.headers||new m,this.status=void 0!==e.status?e.status:t,this.statusText=e.statusText||n,this.url=e.url||null,this.ok=200<=this.status&&this.status<300}var k,D=(o(T,k=O),T.prototype.clone=function(e){return void 0===e&&(e={}),new T({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},T);function T(e){void 0===e&&(e={});var t=k.call(this,e)||this;return t.type=f.HttpEventType.ResponseHeader,t}var I,P=(o(A,I=O),A.prototype.clone=function(e){return void 0===e&&(e={}),new A({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},A);function A(e){void 0===e&&(e={});var t=I.call(this,e)||this;return t.type=f.HttpEventType.Response,t.body=void 0!==e.body?e.body:null,t}var M,R=(o(N,M=O),N);function N(e){var t=M.call(this,e,0,\"Unknown Error\")||this;return t.name=\"HttpErrorResponse\",t.ok=!1,200<=t.status&&t.status<300?t.message=\"Http failure during parsing for \"+(e.url||\"(unknown url)\"):t.message=\"Http failure response for \"+(e.url||\"(unknown url)\")+\": \"+e.status+\" \"+e.statusText,t.error=e.error||null,t}function j(e,t){return{body:t,headers:e.headers,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials}}var F=(L.prototype.request=function(e,t,n){var r,i=this;if(void 0===n&&(n={}),e instanceof S)r=e;else{var o=void 0;o=n.headers instanceof m?n.headers:new m(n.headers);var a=void 0;n.params&&(a=n.params instanceof g?n.params:new g({fromObject:n.params})),r=new S(e,t,void 0!==n.body?n.body:null,{headers:o,params:a,reportProgress:n.reportProgress,responseType:n.responseType||\"json\",withCredentials:n.withCredentials})}var s=u.of(r).pipe(c.concatMap(function(e){return i.handler.handle(e)}));if(e instanceof S||\"events\"===n.observe)return s;var l=s.pipe(c.filter(function(e){return e instanceof P}));switch(n.observe||\"body\"){case\"body\":switch(r.responseType){case\"arraybuffer\":return l.pipe(c.map(function(e){if(null!==e.body&&!(e.body instanceof ArrayBuffer))throw new Error(\"Response is not an ArrayBuffer.\");return e.body}));case\"blob\":return l.pipe(c.map(function(e){if(null!==e.body&&!(e.body instanceof Blob))throw new Error(\"Response is not a Blob.\");return e.body}));case\"text\":return l.pipe(c.map(function(e){if(null!==e.body&&\"string\"!=typeof e.body)throw new Error(\"Response is not a string.\");return e.body}));case\"json\":default:return l.pipe(c.map(function(e){return e.body}))}case\"response\":return l;default:throw new Error(\"Unreachable: unhandled observe type \"+n.observe+\"}\")}},L.prototype.delete=function(e,t){return void 0===t&&(t={}),this.request(\"DELETE\",e,t)},L.prototype.get=function(e,t){return void 0===t&&(t={}),this.request(\"GET\",e,t)},L.prototype.head=function(e,t){return void 0===t&&(t={}),this.request(\"HEAD\",e,t)},L.prototype.jsonp=function(e,t){return this.request(\"JSONP\",e,{params:(new g).append(t,\"JSONP_CALLBACK\"),observe:\"body\",responseType:\"json\"})},L.prototype.options=function(e,t){return void 0===t&&(t={}),this.request(\"OPTIONS\",e,t)},L.prototype.patch=function(e,t,n){return void 0===n&&(n={}),this.request(\"PATCH\",e,j(n,t))},L.prototype.post=function(e,t,n){return void 0===n&&(n={}),this.request(\"POST\",e,j(n,t))},L.prototype.put=function(e,t,n){return void 0===n&&(n={}),this.request(\"PUT\",e,j(n,t))},L=a([e.Injectable(),l(\"design:paramtypes\",[n])],L));function L(e){this.handler=e}var V=(B.prototype.handle=function(e){return this.interceptor.intercept(e,this.next)},B);function B(e,t){this.next=e,this.interceptor=t}var U=new e.InjectionToken(\"HTTP_INTERCEPTORS\"),z=(q.prototype.intercept=function(e,t){return t.handle(e)},q=a([e.Injectable()],q));function q(){}function H(){}var W=0,G=(Y.prototype.nextCallback=function(){return\"ng_jsonp_callback_\"+W++},Y.prototype.handle=function(c){var p=this;if(\"JSONP\"!==c.method)throw new Error(\"JSONP requests must use JSONP request method.\");if(\"json\"!==c.responseType)throw new Error(\"JSONP requests must use Json response type.\");return new u.Observable(function(t){var n=p.nextCallback(),r=c.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/,\"=\"+n+\"$1\"),e=p.document.createElement(\"script\");e.src=r;var i=null,o=!1,a=!1;function s(){e.parentNode&&e.parentNode.removeChild(e),delete p.callbackMap[n]}function l(e){a||(s(),o?(t.next(new P({body:i,status:200,statusText:\"OK\",url:r})),t.complete()):t.error(new R({url:r,status:0,statusText:\"JSONP Error\",error:new Error(\"JSONP injected script did not invoke callback.\")})))}function u(e){a||(s(),t.error(new R({error:e,status:0,statusText:\"JSONP Error\",url:r})))}return p.callbackMap[n]=function(e){delete p.callbackMap[n],a||(i=e,o=!0)},e.addEventListener(\"load\",l),e.addEventListener(\"error\",u),p.document.body.appendChild(e),t.next({type:f.HttpEventType.Sent}),function(){a=!0,e.removeEventListener(\"load\",l),e.removeEventListener(\"error\",u),s()}})},Y=a([e.Injectable(),s(1,e.Inject(t.DOCUMENT)),l(\"design:paramtypes\",[H,Object])],Y));function Y(e,t){this.callbackMap=e,this.document=t}var K=(Z.prototype.intercept=function(e,t){return\"JSONP\"===e.method?this.jsonp.handle(e):t.handle(e)},Z=a([e.Injectable(),l(\"design:paramtypes\",[G])],Z));function Z(e){this.jsonp=e}var Q=/^\\)\\]\\}',?\\n/;function X(){}var $=(J.prototype.build=function(){return new XMLHttpRequest},J=a([e.Injectable(),l(\"design:paramtypes\",[])],J));function J(){}var ee=(te.prototype.handle=function(d){var h=this;if(\"JSONP\"===d.method)throw new Error(\"Attempted to construct Jsonp request without JsonpClientModule installed.\");return new u.Observable(function(l){var u=h.xhrFactory.build();if(u.open(d.method,d.urlWithParams),d.withCredentials&&(u.withCredentials=!0),d.headers.forEach(function(e,t){return u.setRequestHeader(e,t.join(\",\"))}),d.headers.has(\"Accept\")||u.setRequestHeader(\"Accept\",\"application/json, text/plain, */*\"),!d.headers.has(\"Content-Type\")){var e=d.detectContentTypeHeader();null!==e&&u.setRequestHeader(\"Content-Type\",e)}if(d.responseType){var t=d.responseType.toLowerCase();u.responseType=\"json\"!==t?t:\"text\"}function c(){if(null!==s)return s;var e=1223===u.status?204:u.status,t=u.statusText||\"OK\",n=new m(u.getAllResponseHeaders()),r=function(e){return\"responseURL\"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader(\"X-Request-URL\"):null}(u)||d.url;return s=new D({headers:n,status:e,statusText:t,url:r})}function n(){var e=c(),t=e.headers,n=e.status,r=e.statusText,i=e.url,o=null;204!==n&&(o=void 0===u.response?u.responseText:u.response),0===n&&(n=o?200:0);var a=200<=n&&n<300;if(\"json\"===d.responseType&&\"string\"==typeof o){var s=o;o=o.replace(Q,\"\");try{o=\"\"!==o?JSON.parse(o):null}catch(e){o=s,a&&(a=!1,o={error:e,text:o})}}a?(l.next(new P({body:o,headers:t,status:n,statusText:r,url:i||void 0})),l.complete()):l.error(new R({error:o,headers:t,status:n,statusText:r,url:i||void 0}))}function r(e){var t=c().url,n=new R({error:e,status:u.status||0,statusText:u.statusText||\"Unknown Error\",url:t||void 0});l.error(n)}function i(e){p||(l.next(c()),p=!0);var t={type:f.HttpEventType.DownloadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),\"text\"===d.responseType&&u.responseText&&(t.partialText=u.responseText),l.next(t)}function o(e){var t={type:f.HttpEventType.UploadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),l.next(t)}var a=d.serializeBody(),s=null,p=!1;return u.addEventListener(\"load\",n),u.addEventListener(\"error\",r),d.reportProgress&&(u.addEventListener(\"progress\",i),null!==a&&u.upload&&u.upload.addEventListener(\"progress\",o)),u.send(a),l.next({type:f.HttpEventType.Sent}),function(){u.removeEventListener(\"error\",r),u.removeEventListener(\"load\",n),d.reportProgress&&(u.removeEventListener(\"progress\",i),null!==a&&u.upload&&u.upload.removeEventListener(\"progress\",o)),u.abort()}})},te=a([e.Injectable(),l(\"design:paramtypes\",[X])],te));function te(e){this.xhrFactory=e}function ne(){}var re=new e.InjectionToken(\"XSRF_COOKIE_NAME\"),ie=new e.InjectionToken(\"XSRF_HEADER_NAME\"),oe=(ae.prototype.getToken=function(){if(\"server\"===this.platform)return null;var e=this.doc.cookie||\"\";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=t.ɵparseCookieValue(e,this.cookieName),this.lastCookieString=e),this.lastToken},ae=a([e.Injectable(),s(0,e.Inject(t.DOCUMENT)),s(1,e.Inject(e.PLATFORM_ID)),s(2,e.Inject(re)),l(\"design:paramtypes\",[Object,String,String])],ae));function ae(e,t,n){this.doc=e,this.platform=t,this.cookieName=n,this.lastCookieString=\"\",this.lastToken=null,this.parseCount=0}var se=(le.prototype.intercept=function(e,t){var n=e.url.toLowerCase();if(\"GET\"===e.method||\"HEAD\"===e.method||n.startsWith(\"http://\")||n.startsWith(\"https://\"))return t.handle(e);var r=this.tokenService.getToken();return null===r||e.headers.has(this.headerName)||(e=e.clone({headers:e.headers.set(this.headerName,r)})),t.handle(e)},le=a([e.Injectable(),s(1,e.Inject(ie)),l(\"design:paramtypes\",[ne,String])],le));function le(e,t){this.tokenService=e,this.headerName=t}var ue=(ce.prototype.handle=function(e){if(null===this.chain){var t=this.injector.get(U,[]);this.chain=t.reduceRight(function(e,t){return new V(e,t)},this.backend)}return this.chain.handle(e)},ce=a([e.Injectable(),l(\"design:paramtypes\",[r,e.Injector])],ce));function ce(e,t){this.backend=e,this.injector=t,this.chain=null}function pe(){return\"object\"==typeof window?window:{}}var de,he=((de=fe).disable=function(){return{ngModule:de,providers:[{provide:se,useClass:z}]}},fe.withOptions=function(e){return void 0===e&&(e={}),{ngModule:de,providers:[e.cookieName?{provide:re,useValue:e.cookieName}:[],e.headerName?{provide:ie,useValue:e.headerName}:[]]}},fe=de=a([e.NgModule({providers:[se,{provide:U,useExisting:se,multi:!0},{provide:ne,useClass:oe},{provide:re,useValue:\"XSRF-TOKEN\"},{provide:ie,useValue:\"X-XSRF-TOKEN\"}]})],fe));function fe(){}var me=ve=a([e.NgModule({imports:[he.withOptions({cookieName:\"XSRF-TOKEN\",headerName:\"X-XSRF-TOKEN\"})],providers:[F,{provide:n,useClass:ue},ee,{provide:r,useExisting:ee},$,{provide:X,useExisting:$}]})],ve);function ve(){}var ye=ge=a([e.NgModule({providers:[G,{provide:H,useFactory:pe},{provide:U,useClass:K,multi:!0}]})],ge);function ge(){}f.ɵangular_packages_common_http_http_a=z,f.ɵangular_packages_common_http_http_b=H,f.ɵangular_packages_common_http_http_c=pe,f.ɵangular_packages_common_http_http_d=$,f.ɵangular_packages_common_http_http_g=oe,f.ɵangular_packages_common_http_http_h=se,f.ɵangular_packages_common_http_http_e=re,f.ɵangular_packages_common_http_http_f=ie,f.HttpBackend=r,f.HttpHandler=n,f.HttpClient=F,f.HttpHeaders=m,f.HTTP_INTERCEPTORS=U,f.JsonpClientBackend=G,f.JsonpInterceptor=K,f.HttpClientJsonpModule=ye,f.HttpClientModule=me,f.HttpClientXsrfModule=he,f.ɵHttpInterceptingHandler=ue,f.HttpParams=g,f.HttpUrlEncodingCodec=h,f.HttpRequest=S,f.HttpErrorResponse=R,f.HttpHeaderResponse=D,f.HttpResponse=P,f.HttpResponseBase=O,f.HttpXhrBackend=ee,f.XhrFactory=X,f.HttpXsrfTokenExtractor=ne,Object.defineProperty(f,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"@angular/common\"),require(\"rxjs/operators\"),require(\"@angular/common/http\"),require(\"@angular/platform-browser\"),require(\"rxjs\")):System.registerDynamic(\"npm:@angular/material/bundles/material-icon.umd.js\",[\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/coercion\",\"@angular/common\",\"rxjs/operators\",\"@angular/common/http\",\"@angular/platform-browser\",\"rxjs\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"@angular/common\"),e(\"rxjs/operators\"),e(\"@angular/common/http\"),e(\"@angular/platform-browser\"),e(\"rxjs\"))})}(0,function(e,a,t,s,n,r,l,i,o,u){\"use strict\";function c(e){return Error('Unable to find icon with the name \"'+e+'\"')}function p(){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.\")}function d(e){return Error(\"The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was \\\"\"+e+'\".')}function h(e){return Error(\"The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was \\\"\"+e+'\".')}var f=function(e,t){this.options=t,e.nodeName?this.svgElement=e:this.url=e},m=(v.prototype.addSvgIcon=function(e,t,n){return this.addSvgIconInNamespace(\"\",e,t,n)},v.prototype.addSvgIconLiteral=function(e,t,n){return this.addSvgIconLiteralInNamespace(\"\",e,t,n)},v.prototype.addSvgIconInNamespace=function(e,t,n,r){return this._addSvgIconConfig(e,t,new f(n,r))},v.prototype.addSvgIconLiteralInNamespace=function(e,t,n,r){var i=this._sanitizer.sanitize(a.SecurityContext.HTML,n);if(!i)throw h(n);var o=this._createSvgElementForSingleIcon(i,r);return this._addSvgIconConfig(e,t,new f(o,r))},v.prototype.addSvgIconSet=function(e,t){return this.addSvgIconSetInNamespace(\"\",e,t)},v.prototype.addSvgIconSetLiteral=function(e,t){return this.addSvgIconSetLiteralInNamespace(\"\",e,t)},v.prototype.addSvgIconSetInNamespace=function(e,t,n){return this._addSvgIconSetConfig(e,new f(t,n))},v.prototype.addSvgIconSetLiteralInNamespace=function(e,t,n){var r=this._sanitizer.sanitize(a.SecurityContext.HTML,t);if(!r)throw h(t);var i=this._svgElementFromString(r);return this._addSvgIconSetConfig(e,new f(i,n))},v.prototype.registerFontClassAlias=function(e,t){return void 0===t&&(t=e),this._fontCssClassesByAlias.set(e,t),this},v.prototype.classNameForFontAlias=function(e){return this._fontCssClassesByAlias.get(e)||e},v.prototype.setDefaultFontSetClass=function(e){return this._defaultFontSetClass=e,this},v.prototype.getDefaultFontSetClass=function(){return this._defaultFontSetClass},v.prototype.getSvgIconFromUrl=function(e){var t=this,n=this._sanitizer.sanitize(a.SecurityContext.RESOURCE_URL,e);if(!n)throw d(e);var r=this._cachedIconsByUrl.get(n);return r?u.of(_(r)):this._loadSvgIconFromConfig(new f(e)).pipe(l.tap(function(e){return t._cachedIconsByUrl.set(n,e)}),l.map(function(e){return _(e)}))},v.prototype.getNamedSvgIcon=function(e,t){void 0===t&&(t=\"\");var n=b(t,e),r=this._svgIconConfigs.get(n);if(r)return this._getSvgFromConfig(r);var i=this._iconSetConfigs.get(t);return i?this._getSvgFromIconSetConfigs(e,i):u.throwError(c(n))},v.prototype.ngOnDestroy=function(){this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()},v.prototype._getSvgFromConfig=function(t){return t.svgElement?u.of(_(t.svgElement)):this._loadSvgIconFromConfig(t).pipe(l.tap(function(e){return t.svgElement=e}),l.map(function(e){return _(e)}))},v.prototype._getSvgFromIconSetConfigs=function(t,n){var r=this,e=this._extractIconWithNameFromAnySet(t,n);if(e)return u.of(e);var i=n.filter(function(e){return!e.svgElement}).map(function(n){return r._loadSvgIconSetFromConfig(n).pipe(l.catchError(function(e){var t=\"Loading icon set URL: \"+r._sanitizer.sanitize(a.SecurityContext.RESOURCE_URL,n.url)+\" failed: \"+e.message;return r._errorHandler?r._errorHandler.handleError(new Error(t)):console.error(t),u.of(null)}))});return u.forkJoin(i).pipe(l.map(function(){var e=r._extractIconWithNameFromAnySet(t,n);if(!e)throw c(t);return e}))},v.prototype._extractIconWithNameFromAnySet=function(e,t){for(var n=t.length-1;0<=n;n--){var r=t[n];if(r.svgElement){var i=this._extractSvgIconFromSet(r.svgElement,e,r.options);if(i)return i}}return null},v.prototype._loadSvgIconFromConfig=function(t){var n=this;return this._fetchUrl(t.url).pipe(l.map(function(e){return n._createSvgElementForSingleIcon(e,t.options)}))},v.prototype._loadSvgIconSetFromConfig=function(t){var n=this;return t.svgElement?u.of(t.svgElement):this._fetchUrl(t.url).pipe(l.map(function(e){return t.svgElement||(t.svgElement=n._svgElementFromString(e)),t.svgElement}))},v.prototype._createSvgElementForSingleIcon=function(e,t){var n=this._svgElementFromString(e);return this._setSvgAttributes(n,t),n},v.prototype._extractSvgIconFromSet=function(e,t,n){var r=e.querySelector('[id=\"'+t+'\"]');if(!r)return null;var i=r.cloneNode(!0);if(i.removeAttribute(\"id\"),\"svg\"===i.nodeName.toLowerCase())return this._setSvgAttributes(i,n);if(\"symbol\"===i.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(i),n);var o=this._svgElementFromString(\"<svg></svg>\");return o.appendChild(i),this._setSvgAttributes(o,n)},v.prototype._svgElementFromString=function(e){var t=this._document.createElement(\"DIV\");t.innerHTML=e;var n=t.querySelector(\"svg\");if(!n)throw Error(\"<svg> tag not found\");return n},v.prototype._toSvgElement=function(e){for(var t=this._svgElementFromString(\"<svg></svg>\"),n=e.attributes,r=0;r<n.length;r++){var i=n[r],o=i.name,a=i.value;\"id\"!==o&&t.setAttribute(o,a)}for(r=0;r<e.childNodes.length;r++)e.childNodes[r].nodeType===this._document.ELEMENT_NODE&&t.appendChild(e.childNodes[r].cloneNode(!0));return t},v.prototype._setSvgAttributes=function(e,t){return e.setAttribute(\"fit\",\"\"),e.setAttribute(\"height\",\"100%\"),e.setAttribute(\"width\",\"100%\"),e.setAttribute(\"preserveAspectRatio\",\"xMidYMid meet\"),e.setAttribute(\"focusable\",\"false\"),t&&t.viewBox&&e.setAttribute(\"viewBox\",t.viewBox),e},v.prototype._fetchUrl=function(e){var t=this;if(!this._httpClient)throw p();if(null==e)throw Error('Cannot fetch icon from URL \"'+e+'\".');var n=this._sanitizer.sanitize(a.SecurityContext.RESOURCE_URL,e);if(!n)throw d(e);var r=this._inProgressUrlFetches.get(n);if(r)return r;var i=this._httpClient.get(n,{responseType:\"text\"}).pipe(l.finalize(function(){return t._inProgressUrlFetches.delete(n)}),l.share());return this._inProgressUrlFetches.set(n,i),i},v.prototype._addSvgIconConfig=function(e,t,n){return this._svgIconConfigs.set(b(e,t),n),this},v.prototype._addSvgIconSetConfig=function(e,t){var n=this._iconSetConfigs.get(e);return n?n.push(t):this._iconSetConfigs.set(e,[t]),this},v.decorators=[{type:a.Injectable,args:[{providedIn:\"root\"}]}],v.ctorParameters=function(){return[{type:i.HttpClient,decorators:[{type:a.Optional}]},{type:o.DomSanitizer},{type:void 0,decorators:[{type:a.Optional},{type:a.Inject,args:[r.DOCUMENT]}]},{type:a.ErrorHandler,decorators:[{type:a.Optional}]}]},v.ngInjectableDef=a.ɵɵdefineInjectable({factory:function(){return new v(a.ɵɵinject(i.HttpClient,8),a.ɵɵinject(o.DomSanitizer),a.ɵɵinject(r.DOCUMENT,8),a.ɵɵinject(a.ErrorHandler,8))},token:v,providedIn:\"root\"}),v);function v(e,t,n,r){this._httpClient=e,this._sanitizer=t,this._errorHandler=r,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._defaultFontSetClass=\"material-icons\",this._document=n}function y(e,t,n,r,i){return e||new m(t,n,r,i)}var g={provide:m,deps:[[new a.Optional,new a.SkipSelf,m],[new a.Optional,i.HttpClient],o.DomSanitizer,[new a.Optional,a.ErrorHandler],[new a.Optional,r.DOCUMENT]],useFactory:y};function _(e){return e.cloneNode(!0)}function b(e,t){return e+\":\"+t}function w(e){this._elementRef=e}var x=t.mixinColor(w),C=new a.InjectionToken(\"mat-icon-location\",{providedIn:\"root\",factory:S});function S(){var e=a.inject(r.DOCUMENT),t=e?e.location:null;return{getPathname:function(){return t?t.pathname+t.search:\"\"}}}function E(e){return\"[\"+e+\"]\"}var O,k=[\"clip-path\",\"color-profile\",\"src\",\"cursor\",\"fill\",\"filter\",\"marker\",\"marker-start\",\"marker-mid\",\"marker-end\",\"mask\",\"stroke\"],D=k.map(E).join(\", \"),T=/^url\\(['\"]?#(.*?)['\"]?\\)$/,I=(O=x,s.__extends(P,O),Object.defineProperty(P.prototype,\"inline\",{get:function(){return this._inline},set:function(e){this._inline=n.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"fontSet\",{get:function(){return this._fontSet},set:function(e){this._fontSet=this._cleanupFontValue(e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"fontIcon\",{get:function(){return this._fontIcon},set:function(e){this._fontIcon=this._cleanupFontValue(e)},enumerable:!0,configurable:!0}),P.prototype._splitIconName=function(e){if(!e)return[\"\",\"\"];var t=e.split(\":\");switch(t.length){case 1:return[\"\",t[0]];case 2:return t;default:throw Error('Invalid icon name: \"'+e+'\"')}},P.prototype.ngOnChanges=function(e){var n=this,t=e.svgIcon;if(t)if(this.svgIcon){var r=s.__read(this._splitIconName(this.svgIcon),2),i=r[0],o=r[1];this._iconRegistry.getNamedSvgIcon(o,i).pipe(l.take(1)).subscribe(function(e){return n._setSvgElement(e)},function(e){var t=\"Error retrieving icon \"+i+\":\"+o+\"! \"+e.message;n._errorHandler?n._errorHandler.handleError(new Error(t)):console.error(t)})}else t.previousValue&&this._clearSvgElement();this._usingFontIcon()&&this._updateFontIconClasses()},P.prototype.ngOnInit=function(){this._usingFontIcon()&&this._updateFontIconClasses()},P.prototype.ngAfterViewChecked=function(){var e=this._elementsWithExternalReferences;if(e&&this._location&&e.size){var t=this._location.getPathname();t!==this._previousPath&&(this._previousPath=t,this._prependPathToReferences(t))}},P.prototype.ngOnDestroy=function(){this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()},P.prototype._usingFontIcon=function(){return!this.svgIcon},P.prototype._setSvgElement=function(e){this._clearSvgElement();for(var t=e.querySelectorAll(\"style\"),n=0;n<t.length;n++)t[n].textContent+=\" \";if(this._location){var r=this._location.getPathname();this._previousPath=r,this._cacheChildrenWithExternalReferences(e),this._prependPathToReferences(r)}this._elementRef.nativeElement.appendChild(e)},P.prototype._clearSvgElement=function(){var e=this._elementRef.nativeElement,t=e.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();t--;){var n=e.childNodes[t];1===n.nodeType&&\"svg\"!==n.nodeName.toLowerCase()||e.removeChild(n)}},P.prototype._updateFontIconClasses=function(){if(this._usingFontIcon()){var e=this._elementRef.nativeElement,t=this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet):this._iconRegistry.getDefaultFontSetClass();t!=this._previousFontSetClass&&(this._previousFontSetClass&&e.classList.remove(this._previousFontSetClass),t&&e.classList.add(t),this._previousFontSetClass=t),this.fontIcon!=this._previousFontIconClass&&(this._previousFontIconClass&&e.classList.remove(this._previousFontIconClass),this.fontIcon&&e.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}},P.prototype._cleanupFontValue=function(e){return\"string\"==typeof e?e.trim().split(\" \")[0]:e},P.prototype._prependPathToReferences=function(n){var e=this._elementsWithExternalReferences;e&&e.forEach(function(e,t){e.forEach(function(e){t.setAttribute(e.name,\"url('\"+n+\"#\"+e.value+\"')\")})})},P.prototype._cacheChildrenWithExternalReferences=function(e){for(var a=e.querySelectorAll(D),s=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map,t=function(o){k.forEach(function(e){var t=a[o],n=t.getAttribute(e),r=n?n.match(T):null;if(r){var i=s.get(t);i||(i=[],s.set(t,i)),i.push({name:e,value:r[1]})}})},n=0;n<a.length;n++)t(n)},P.decorators=[{type:a.Component,args:[{moduleId:module.id,template:\"<ng-content></ng-content>\",selector:\"mat-icon\",exportAs:\"matIcon\",inputs:[\"color\"],host:{role:\"img\",class:\"mat-icon notranslate\",\"[class.mat-icon-inline]\":\"inline\",\"[class.mat-icon-no-color]\":'color !== \"primary\" && color !== \"accent\" && color !== \"warn\"'},encapsulation:a.ViewEncapsulation.None,changeDetection:a.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}/*# sourceMappingURL=icon.css.map */\\n\"]}]}],P.ctorParameters=function(){return[{type:a.ElementRef},{type:m},{type:String,decorators:[{type:a.Attribute,args:[\"aria-hidden\"]}]},{type:void 0,decorators:[{type:a.Optional},{type:a.Inject,args:[C]}]},{type:a.ErrorHandler,decorators:[{type:a.Optional}]}]},P.propDecorators={inline:[{type:a.Input}],svgIcon:[{type:a.Input}],fontSet:[{type:a.Input}],fontIcon:[{type:a.Input}]},P);function P(e,t,n,r,i){var o=O.call(this,e)||this;return o._iconRegistry=t,o._location=r,o._errorHandler=i,o._inline=!1,n||e.nativeElement.setAttribute(\"aria-hidden\",\"true\"),o}var A=(M.decorators=[{type:a.NgModule,args:[{imports:[t.MatCommonModule],exports:[I,t.MatCommonModule],declarations:[I]}]}],M);function M(){}e.MatIconModule=A,e.MAT_ICON_LOCATION=C,e.MAT_ICON_LOCATION_FACTORY=S,e.MatIcon=I,e.ɵ0=E,e.getMatIconNameNotFoundError=c,e.getMatIconNoHttpProviderError=p,e.getMatIconFailedToSanitizeUrlError=d,e.getMatIconFailedToSanitizeLiteralError=h,e.MatIconRegistry=m,e.ICON_REGISTRY_PROVIDER_FACTORY=y,e.ICON_REGISTRY_PROVIDER=g,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/portal\"),require(\"@angular/cdk/stepper\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/button\"),require(\"@angular/material/core\"),require(\"@angular/material/icon\"),require(\"tslib\"),require(\"@angular/cdk/a11y\"),require(\"rxjs\"),require(\"@angular/cdk/bidi\"),require(\"rxjs/operators\"),require(\"@angular/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-stepper.umd.js\",[\"@angular/cdk/portal\",\"@angular/cdk/stepper\",\"@angular/common\",\"@angular/core\",\"@angular/material/button\",\"@angular/material/core\",\"@angular/material/icon\",\"tslib\",\"@angular/cdk/a11y\",\"rxjs\",\"@angular/cdk/bidi\",\"rxjs/operators\",\"@angular/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/portal\"),e(\"@angular/cdk/stepper\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/button\"),e(\"@angular/material/core\"),e(\"@angular/material/icon\"),e(\"tslib\"),e(\"@angular/cdk/a11y\"),e(\"rxjs\"),e(\"@angular/cdk/bidi\"),e(\"rxjs/operators\"),e(\"@angular/animations\"))})}(0,function(e,t,n,r,i,o,a,s,l,u,c,p,d,h){\"use strict\";var f,m=(f=n.CdkStepLabel,l.__extends(v,f),v.decorators=[{type:i.Directive,args:[{selector:\"[matStepLabel]\"}]}],v);function v(){return null!==f&&f.apply(this,arguments)||this}var y=(g.decorators=[{type:i.Injectable,args:[{providedIn:\"root\"}]}],g.ngInjectableDef=i.ɵɵdefineInjectable({factory:function(){return new g},token:g,providedIn:\"root\"}),g);function g(){this.changes=new c.Subject,this.optionalLabel=\"Optional\"}function _(e){return e||new y}var b,w={provide:y,deps:[[new i.Optional,new i.SkipSelf,y]],useFactory:_},x=(b=n.CdkStepHeader,l.__extends(C,b),C.prototype.ngOnDestroy=function(){this._intlSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._elementRef)},C.prototype.focus=function(){this._focusMonitor.focusVia(this._elementRef,\"program\")},C.prototype._stringLabel=function(){return this.label instanceof m?null:this.label},C.prototype._templateLabel=function(){return this.label instanceof m?this.label:null},C.prototype._getHostElement=function(){return this._elementRef.nativeElement},C.prototype._getIconContext=function(){return{index:this.index,active:this.active,optional:this.optional}},C.prototype._getDefaultTextForState=function(e){return\"number\"==e?\"\"+(this.index+1):\"edit\"==e?\"create\":\"error\"==e?\"warning\":e},C.decorators=[{type:i.Component,args:[{moduleId:module.id,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  \\x3c!-- If there is a label template, use it. --\\x3e\\n  <ng-container *ngIf=\"_templateLabel()\" [ngTemplateOutlet]=\"_templateLabel()!.template\">\\n  </ng-container>\\n  \\x3c!-- If there is no label template, fall back to the text label. --\\x3e\\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',host:{class:\"mat-step-header\",role:\"tab\"},encapsulation:i.ViewEncapsulation.None,changeDetection:i.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}/*# sourceMappingURL=step-header.css.map */\\n\"]}]}],C.ctorParameters=function(){return[{type:y},{type:u.FocusMonitor},{type:i.ElementRef},{type:i.ChangeDetectorRef}]},C.propDecorators={state:[{type:i.Input}],label:[{type:i.Input}],errorMessage:[{type:i.Input}],iconOverrides:[{type:i.Input}],index:[{type:i.Input}],selected:[{type:i.Input}],active:[{type:i.Input}],optional:[{type:i.Input}],disableRipple:[{type:i.Input}]},C);function C(e,t,n,r){var i=b.call(this,n)||this;return i._intl=e,(i._focusMonitor=t).monitor(n,!0),i._intlSubscription=e.changes.subscribe(function(){return r.markForCheck()}),i}var S={horizontalStepTransition:h.trigger(\"stepTransition\",[h.state(\"previous\",h.style({transform:\"translate3d(-100%, 0, 0)\",visibility:\"hidden\"})),h.state(\"current\",h.style({transform:\"none\",visibility:\"visible\"})),h.state(\"next\",h.style({transform:\"translate3d(100%, 0, 0)\",visibility:\"hidden\"})),h.transition(\"* => *\",h.animate(\"500ms cubic-bezier(0.35, 0, 0.25, 1)\"))]),verticalStepTransition:h.trigger(\"stepTransition\",[h.state(\"previous\",h.style({height:\"0px\",visibility:\"hidden\"})),h.state(\"next\",h.style({height:\"0px\",visibility:\"hidden\"})),h.state(\"current\",h.style({height:\"*\",visibility:\"visible\"})),h.transition(\"* <=> current\",h.animate(\"225ms cubic-bezier(0.4, 0.0, 0.2, 1)\"))])},E=(O.decorators=[{type:i.Directive,args:[{selector:\"ng-template[matStepperIcon]\"}]}],O.ctorParameters=function(){return[{type:i.TemplateRef}]},O.propDecorators={name:[{type:i.Input,args:[\"matStepperIcon\"]}]},O);function O(e){this.templateRef=e}var k,D=(k=n.CdkStep,l.__extends(T,k),T.prototype.isErrorState=function(e,t){var n=this._errorStateMatcher.isErrorState(e,t),r=!!(e&&e.invalid&&this.interacted);return n||r},T.decorators=[{type:i.Component,args:[{moduleId:module.id,selector:\"mat-step\",template:\"<ng-template><ng-content></ng-content></ng-template>\\n\",providers:[{provide:a.ErrorStateMatcher,useExisting:T}],encapsulation:i.ViewEncapsulation.None,exportAs:\"matStep\",changeDetection:i.ChangeDetectionStrategy.OnPush}]}],T.ctorParameters=function(){return[{type:P,decorators:[{type:i.Inject,args:[i.forwardRef(function(){return P})]}]},{type:a.ErrorStateMatcher,decorators:[{type:i.SkipSelf}]},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[n.STEPPER_GLOBAL_OPTIONS]}]}]},T.propDecorators={stepLabel:[{type:i.ContentChild,args:[m,{static:!1}]}]},T);function T(e,t,n){var r=k.call(this,e,n)||this;return r._errorStateMatcher=t,r}var I,P=(I=n.CdkStepper,l.__extends(A,I),A.prototype.ngAfterContentInit=function(){var r=this;this._icons.forEach(function(e){var t=e.name,n=e.templateRef;return r._iconOverrides[t]=n}),this._steps.changes.pipe(d.takeUntil(this._destroyed)).subscribe(function(){return r._stateChanged()}),this._animationDone.pipe(d.distinctUntilChanged(function(e,t){return e.fromState===t.fromState&&e.toState===t.toState}),d.takeUntil(this._destroyed)).subscribe(function(e){\"current\"===e.toState&&r.animationDone.emit()})},A.decorators=[{type:i.Directive,args:[{selector:\"[matStepper]\",providers:[{provide:n.CdkStepper,useExisting:A}]}]}],A.propDecorators={_stepHeader:[{type:i.ViewChildren,args:[x]}],_steps:[{type:i.ContentChildren,args:[D]}],_icons:[{type:i.ContentChildren,args:[E]}],animationDone:[{type:i.Output}],disableRipple:[{type:i.Input}]},A);function A(){var e=null!==I&&I.apply(this,arguments)||this;return e.animationDone=new i.EventEmitter,e._iconOverrides={},e._animationDone=new c.Subject,e}var M,R=(M=P,l.__extends(N,M),N.decorators=[{type:i.Component,args:[{moduleId:module.id,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    </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       [attr.tabindex]=\"selectedIndex === i ? 0 : null\"\\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:[S.horizontalStepTransition],providers:[{provide:P,useExisting:N},{provide:n.CdkStepper,useExisting:N}],encapsulation:i.ViewEncapsulation.None,changeDetection:i.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;top:36px}.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;top:36px;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;padding:24px}.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;padding:24px;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;top:-16px;bottom:-16px;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}/*# sourceMappingURL=stepper.css.map */\\n']}]}],N.propDecorators={labelPosition:[{type:i.Input}]},N);function N(){var e=null!==M&&M.apply(this,arguments)||this;return e.labelPosition=\"end\",e}var j,F=(j=P,l.__extends(L,j),L.decorators=[{type:i.Component,args:[{moduleId:module.id,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  </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         [attr.tabindex]=\"selectedIndex === i ? 0 : null\"\\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:[S.verticalStepTransition],providers:[{provide:P,useExisting:L},{provide:n.CdkStepper,useExisting:L}],encapsulation:i.ViewEncapsulation.None,changeDetection:i.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;top:36px}.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;top:36px;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;padding:24px}.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;padding:24px;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;top:-16px;bottom:-16px;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}/*# sourceMappingURL=stepper.css.map */\\n']}]}],L.ctorParameters=function(){return[{type:p.Directionality,decorators:[{type:i.Optional}]},{type:i.ChangeDetectorRef},{type:i.ElementRef},{type:void 0,decorators:[{type:i.Inject,args:[r.DOCUMENT]}]}]},L);function L(e,t,n,r){var i=j.call(this,e,t,n,r)||this;return i._orientation=\"vertical\",i}var V,B=(V=n.CdkStepperNext,l.__extends(U,V),U.decorators=[{type:i.Directive,args:[{selector:\"button[matStepperNext]\",host:{\"[type]\":\"type\"},inputs:[\"type\"]}]}],U);function U(){return null!==V&&V.apply(this,arguments)||this}var z,q=(z=n.CdkStepperPrevious,l.__extends(H,z),H.decorators=[{type:i.Directive,args:[{selector:\"button[matStepperPrevious]\",host:{\"[type]\":\"type\"},inputs:[\"type\"]}]}],H);function H(){return null!==z&&z.apply(this,arguments)||this}var W=(G.decorators=[{type:i.NgModule,args:[{imports:[a.MatCommonModule,r.CommonModule,t.PortalModule,o.MatButtonModule,n.CdkStepperModule,s.MatIconModule,a.MatRippleModule],exports:[a.MatCommonModule,R,F,D,m,P,B,q,x,E],declarations:[R,F,D,m,P,B,q,x,E],providers:[w,a.ErrorStateMatcher]}]}],G);function G(){}e.MatStepperModule=W,e.MatStepLabel=m,e.MatStep=D,e.MatStepper=P,e.MatHorizontalStepper=R,e.MatVerticalStepper=F,e.MatStepperNext=B,e.MatStepperPrevious=q,e.MatStepHeader=x,e.MatStepperIntl=y,e.MAT_STEPPER_INTL_PROVIDER_FACTORY=_,e.MAT_STEPPER_INTL_PROVIDER=w,e.matStepperAnimations=S,e.MatStepperIcon=E,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/collections\"),require(\"@angular/cdk/platform\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-table.umd.js\",[\"tslib\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/collections\",\"@angular/cdk/platform\",\"@angular/common\",\"@angular/core\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/collections\"),e(\"@angular/cdk/platform\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,y,t,n,r,i,o,a,s,l){\"use strict\";function u(e){return r=e,y.__extends(t,r),Object.defineProperty(t.prototype,\"sticky\",{get:function(){return this._sticky},set:function(e){var t=this._sticky;this._sticky=n.coerceBooleanProperty(e),this._hasStickyChanged=t!==this._sticky},enumerable:!0,configurable:!0}),t.prototype.hasStickyChanged=function(){var e=this._hasStickyChanged;return this._hasStickyChanged=!1,e},t.prototype.resetStickyChanged=function(){this._hasStickyChanged=!1},t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=r.apply(this,y.__spread(e))||this;return n._sticky=!1,n._hasStickyChanged=!1,n}var r}var c=(p.decorators=[{type:a.Directive,args:[{selector:\"[cdkCellDef]\"}]}],p.ctorParameters=function(){return[{type:a.TemplateRef}]},p);function p(e){this.template=e}var d=(h.decorators=[{type:a.Directive,args:[{selector:\"[cdkHeaderCellDef]\"}]}],h.ctorParameters=function(){return[{type:a.TemplateRef}]},h);function h(e){this.template=e}var f=(m.decorators=[{type:a.Directive,args:[{selector:\"[cdkFooterCellDef]\"}]}],m.ctorParameters=function(){return[{type:a.TemplateRef}]},m);function m(e){this.template=e}var v,g=u(function(){}),_=(v=g,y.__extends(b,v),Object.defineProperty(b.prototype,\"name\",{get:function(){return this._name},set:function(e){e&&(this._name=e,this.cssClassFriendlyName=e.replace(/[^a-z0-9_-]/gi,\"-\"))},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,\"stickyEnd\",{get:function(){return this._stickyEnd},set:function(e){var t=this._stickyEnd;this._stickyEnd=n.coerceBooleanProperty(e),this._hasStickyChanged=t!==this._stickyEnd},enumerable:!0,configurable:!0}),b.decorators=[{type:a.Directive,args:[{selector:\"[cdkColumnDef]\",inputs:[\"sticky\"],providers:[{provide:\"MAT_SORT_HEADER_COLUMN_DEF\",useExisting:b}]}]}],b.propDecorators={name:[{type:a.Input,args:[\"cdkColumnDef\"]}],stickyEnd:[{type:a.Input,args:[\"stickyEnd\"]}],cell:[{type:a.ContentChild,args:[c,{static:!1}]}],headerCell:[{type:a.ContentChild,args:[d,{static:!1}]}],footerCell:[{type:a.ContentChild,args:[f,{static:!1}]}]},b);function b(){var e=null!==v&&v.apply(this,arguments)||this;return e._stickyEnd=!1,e}function w(e,t){var n=\"cdk-column-\"+e.cssClassFriendlyName;t.nativeElement.classList.add(n)}var x,C=(x=w,y.__extends(S,x),S.decorators=[{type:a.Directive,args:[{selector:\"cdk-header-cell, th[cdk-header-cell]\",host:{class:\"cdk-header-cell\",role:\"columnheader\"}}]}],S.ctorParameters=function(){return[{type:_},{type:a.ElementRef}]},S);function S(e,t){return x.call(this,e,t)||this}var E,O=(E=w,y.__extends(k,E),k.decorators=[{type:a.Directive,args:[{selector:\"cdk-footer-cell, td[cdk-footer-cell]\",host:{class:\"cdk-footer-cell\",role:\"gridcell\"}}]}],k.ctorParameters=function(){return[{type:_},{type:a.ElementRef}]},k);function k(e,t){return E.call(this,e,t)||this}var D,T=(D=w,y.__extends(I,D),I.decorators=[{type:a.Directive,args:[{selector:\"cdk-cell, td[cdk-cell]\",host:{class:\"cdk-cell\",role:\"gridcell\"}}]}],I.ctorParameters=function(){return[{type:_},{type:a.ElementRef}]},I);function I(e,t){return D.call(this,e,t)||this}var P,A=\"<ng-container cdkCellOutlet></ng-container>\",M=(R.prototype.ngOnChanges=function(e){if(!this._columnsDiffer){var t=e.columns&&e.columns.currentValue||[];this._columnsDiffer=this._differs.find(t).create(),this._columnsDiffer.diff(t)}},R.prototype.getColumnsDiff=function(){return this._columnsDiffer.diff(this.columns)},R.prototype.extractCellTemplate=function(e){return this instanceof V?e.headerCell.template:this instanceof H?e.footerCell.template:e.cell.template},R);function R(e,t){this.template=e,this._differs=t}function N(){return null!==P&&P.apply(this,arguments)||this}var j,F,L=u((P=M,y.__extends(N,P),N)),V=(j=L,y.__extends(B,j),B.prototype.ngOnChanges=function(e){j.prototype.ngOnChanges.call(this,e)},B.decorators=[{type:a.Directive,args:[{selector:\"[cdkHeaderRowDef]\",inputs:[\"columns: cdkHeaderRowDef\",\"sticky: cdkHeaderRowDefSticky\"]}]}],B.ctorParameters=function(){return[{type:a.TemplateRef},{type:a.IterableDiffers}]},B);function B(e,t){return j.call(this,e,t)||this}function U(){return null!==F&&F.apply(this,arguments)||this}var z,q=u((F=M,y.__extends(U,F),U)),H=(z=q,y.__extends(W,z),W.prototype.ngOnChanges=function(e){z.prototype.ngOnChanges.call(this,e)},W.decorators=[{type:a.Directive,args:[{selector:\"[cdkFooterRowDef]\",inputs:[\"columns: cdkFooterRowDef\",\"sticky: cdkFooterRowDefSticky\"]}]}],W.ctorParameters=function(){return[{type:a.TemplateRef},{type:a.IterableDiffers}]},W);function W(e,t){return z.call(this,e,t)||this}var G,Y=(G=M,y.__extends(K,G),K.decorators=[{type:a.Directive,args:[{selector:\"[cdkRowDef]\",inputs:[\"columns: cdkRowDefColumns\",\"when: cdkRowDefWhen\"]}]}],K.ctorParameters=function(){return[{type:a.TemplateRef},{type:a.IterableDiffers}]},K);function K(e,t){return G.call(this,e,t)||this}var Z=(Q.prototype.ngOnDestroy=function(){Q.mostRecentCellOutlet===this&&(Q.mostRecentCellOutlet=null)},Q.mostRecentCellOutlet=null,Q.decorators=[{type:a.Directive,args:[{selector:\"[cdkCellOutlet]\"}]}],Q.ctorParameters=function(){return[{type:a.ViewContainerRef}]},Q);function Q(e){this._viewContainer=e,Q.mostRecentCellOutlet=this}var X=($.decorators=[{type:a.Component,args:[{moduleId:module.id,selector:\"cdk-header-row, tr[cdk-header-row]\",template:A,host:{class:\"cdk-header-row\",role:\"row\"},changeDetection:a.ChangeDetectionStrategy.Default,encapsulation:a.ViewEncapsulation.None}]}],$);function $(){}var J=(ee.decorators=[{type:a.Component,args:[{moduleId:module.id,selector:\"cdk-footer-row, tr[cdk-footer-row]\",template:A,host:{class:\"cdk-footer-row\",role:\"row\"},changeDetection:a.ChangeDetectionStrategy.Default,encapsulation:a.ViewEncapsulation.None}]}],ee);function ee(){}var te=(ne.decorators=[{type:a.Component,args:[{moduleId:module.id,selector:\"cdk-row, tr[cdk-row]\",template:A,host:{class:\"cdk-row\",role:\"row\"},changeDetection:a.ChangeDetectionStrategy.Default,encapsulation:a.ViewEncapsulation.None}]}],ne);function ne(){}var re=[\"top\",\"bottom\",\"left\",\"right\"],ie=(oe.prototype.clearStickyPositioning=function(e,t){var n,r;try{for(var i=y.__values(e),o=i.next();!o.done;o=i.next()){var a=o.value;if(a.nodeType===a.ELEMENT_NODE){this._removeStickyStyle(a,t);for(var s=0;s<a.children.length;s++){var l=a.children[s];this._removeStickyStyle(l,t)}}}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}},oe.prototype.updateStickyColumns=function(e,t,n){var r,i,o=t.some(function(e){return e})||n.some(function(e){return e});if(e.length&&o&&this._isBrowser){var a=e[0],s=a.children.length,l=this._getCellWidths(a),u=this._getStickyStartColumnPositions(l,t),c=this._getStickyEndColumnPositions(l,n),p=\"rtl\"===this.direction;try{for(var d=y.__values(e),h=d.next();!h.done;h=d.next())for(var f=h.value,m=0;m<s;m++){var v=f.children[m];t[m]&&this._addStickyStyle(v,p?\"right\":\"left\",u[m]),n[m]&&this._addStickyStyle(v,p?\"left\":\"right\",c[m])}}catch(e){r={error:e}}finally{try{h&&!h.done&&(i=d.return)&&i.call(d)}finally{if(r)throw r.error}}}},oe.prototype.stickRows=function(e,t,n){if(this._isBrowser)for(var r=\"bottom\"===n?e.reverse():e,i=0,o=0;o<r.length;o++)if(t[o]){var a=r[o];if(this._isNativeHtmlTable)for(var s=0;s<a.children.length;s++){var l=a.children[s];this._addStickyStyle(l,n,i)}else this._addStickyStyle(a,n,i);if(o===r.length-1)return;i+=a.getBoundingClientRect().height}},oe.prototype.updateStickyFooterContainer=function(e,t){if(this._isNativeHtmlTable){var n=e.querySelector(\"tfoot\");t.some(function(e){return!e})?this._removeStickyStyle(n,[\"bottom\"]):this._addStickyStyle(n,\"bottom\",0)}},oe.prototype._removeStickyStyle=function(t,e){var n,r;try{for(var i=y.__values(e),o=i.next();!o.done;o=i.next()){var a=o.value;t.style[a]=\"\"}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}t.style.zIndex=this._getCalculatedZIndex(t),re.some(function(e){return!!t.style[e]})||(t.style.position=\"\",t.classList.remove(this._stickCellCss))},oe.prototype._addStickyStyle=function(e,t,n){e.classList.add(this._stickCellCss),e.style[t]=n+\"px\",e.style.cssText+=\"position: -webkit-sticky; position: sticky; \",e.style.zIndex=this._getCalculatedZIndex(e)},oe.prototype._getCalculatedZIndex=function(e){var t,n,r={top:100,bottom:10,left:1,right:1},i=0;try{for(var o=y.__values(re),a=o.next();!a.done;a=o.next()){var s=a.value;e.style[s]&&(i+=r[s])}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return i?\"\"+i:\"\"},oe.prototype._getCellWidths=function(e){for(var t=[],n=e.children,r=0;r<n.length;r++){var i=n[r];t.push(i.getBoundingClientRect().width)}return t},oe.prototype._getStickyStartColumnPositions=function(e,t){for(var n=[],r=0,i=0;i<e.length;i++)t[i]&&(n[i]=r,r+=e[i]);return n},oe.prototype._getStickyEndColumnPositions=function(e,t){for(var n=[],r=0,i=e.length;0<i;i--)t[i]&&(n[i]=r,r+=e[i]);return n},oe);function oe(e,t,n,r){void 0===r&&(r=!0),this._isNativeHtmlTable=e,this._stickCellCss=t,this.direction=n,this._isBrowser=r}function ae(e){return Error('Could not find column with id \"'+e+'\".')}var se=(le.decorators=[{type:a.Directive,args:[{selector:\"[rowOutlet]\"}]}],le.ctorParameters=function(){return[{type:a.ViewContainerRef},{type:a.ElementRef}]},le);function le(e,t){this.viewContainer=e,this.elementRef=t}var ue=(ce.decorators=[{type:a.Directive,args:[{selector:\"[headerRowOutlet]\"}]}],ce.ctorParameters=function(){return[{type:a.ViewContainerRef},{type:a.ElementRef}]},ce);function ce(e,t){this.viewContainer=e,this.elementRef=t}var pe=(de.decorators=[{type:a.Directive,args:[{selector:\"[footerRowOutlet]\"}]}],de.ctorParameters=function(){return[{type:a.ViewContainerRef},{type:a.ElementRef}]},de);function de(e,t){this.viewContainer=e,this.elementRef=t}var he,fe='\\n  <ng-content select=\"caption\"></ng-content>\\n  <ng-container headerRowOutlet></ng-container>\\n  <ng-container rowOutlet></ng-container>\\n  <ng-container footerRowOutlet></ng-container>\\n';he=a.EmbeddedViewRef,y.__extends(me,he);function me(){return null!==he&&he.apply(this,arguments)||this}var ve=(Object.defineProperty(ye.prototype,\"trackBy\",{get:function(){return this._trackByFn},set:function(e){a.isDevMode()&&null!=e&&\"function\"!=typeof e&&console&&console.warn&&console.warn(\"trackBy must be a function, but received \"+JSON.stringify(e)+\".\"),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(ye.prototype,\"dataSource\",{get:function(){return this._dataSource},set:function(e){this._dataSource!==e&&this._switchDataSource(e)},enumerable:!0,configurable:!0}),Object.defineProperty(ye.prototype,\"multiTemplateDataRows\",{get:function(){return this._multiTemplateDataRows},set:function(e){this._multiTemplateDataRows=n.coerceBooleanProperty(e),this._rowOutlet&&this._rowOutlet.viewContainer.length&&this._forceRenderDataRows()},enumerable:!0,configurable:!0}),ye.prototype.ngOnInit=function(){var n=this;this._setupStickyStyler(),this._isNativeHtmlTable&&this._applyNativeTableSections(),this._dataDiffer=this._differs.find([]).create(function(e,t){return n.trackBy?n.trackBy(t.dataIndex,t.data):t})},ye.prototype.ngAfterContentChecked=function(){if(this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&!this._rowDefs.length)throw Error(\"Missing definitions for header, footer, and row; cannot determine which columns should be rendered.\");this._renderUpdatedColumns(),this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&0<this._rowDefs.length&&!this._renderChangeSubscription&&this._observeRenderChanges(),this._checkStickyStates()},ye.prototype.ngOnDestroy=function(){this._rowOutlet.viewContainer.clear(),this._headerRowOutlet.viewContainer.clear(),this._footerRowOutlet.viewContainer.clear(),this._cachedRenderRowsMap.clear(),this._onDestroy.next(),this._onDestroy.complete(),r.isDataSource(this.dataSource)&&this.dataSource.disconnect(this)},ye.prototype.renderRows=function(){var i=this;this._renderRows=this._getAllRenderRows();var e=this._dataDiffer.diff(this._renderRows);if(e){var o=this._rowOutlet.viewContainer;e.forEachOperation(function(e,t,n){if(null==e.previousIndex)i._insertRow(e.item,n);else if(null==n)o.remove(t);else{var r=o.get(t);o.move(r,n)}}),this._updateRowIndexContext(),e.forEachIdentityChange(function(e){o.get(e.currentIndex).context.$implicit=e.item.data}),this.updateStickyColumnStyles()}},ye.prototype.setHeaderRowDef=function(e){this._customHeaderRowDefs=new Set([e]),this._headerRowDefChanged=!0},ye.prototype.setFooterRowDef=function(e){this._customFooterRowDefs=new Set([e]),this._footerRowDefChanged=!0},ye.prototype.addColumnDef=function(e){this._customColumnDefs.add(e)},ye.prototype.removeColumnDef=function(e){this._customColumnDefs.delete(e)},ye.prototype.addRowDef=function(e){this._customRowDefs.add(e)},ye.prototype.removeRowDef=function(e){this._customRowDefs.delete(e)},ye.prototype.addHeaderRowDef=function(e){this._customHeaderRowDefs.add(e),this._headerRowDefChanged=!0},ye.prototype.removeHeaderRowDef=function(e){this._customHeaderRowDefs.delete(e),this._headerRowDefChanged=!0},ye.prototype.addFooterRowDef=function(e){this._customFooterRowDefs.add(e),this._footerRowDefChanged=!0},ye.prototype.removeFooterRowDef=function(e){this._customFooterRowDefs.delete(e),this._footerRowDefChanged=!0},ye.prototype.updateStickyHeaderRowStyles=function(){var e=this._getRenderedRows(this._headerRowOutlet),t=this._elementRef.nativeElement.querySelector(\"thead\");t&&(t.style.display=e.length?\"\":\"none\");var n=this._headerRowDefs.map(function(e){return e.sticky});this._stickyStyler.clearStickyPositioning(e,[\"top\"]),this._stickyStyler.stickRows(e,n,\"top\"),this._headerRowDefs.forEach(function(e){return e.resetStickyChanged()})},ye.prototype.updateStickyFooterRowStyles=function(){var e=this._getRenderedRows(this._footerRowOutlet),t=this._elementRef.nativeElement.querySelector(\"tfoot\");t&&(t.style.display=e.length?\"\":\"none\");var n=this._footerRowDefs.map(function(e){return e.sticky});this._stickyStyler.clearStickyPositioning(e,[\"bottom\"]),this._stickyStyler.stickRows(e,n,\"bottom\"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,n),this._footerRowDefs.forEach(function(e){return e.resetStickyChanged()})},ye.prototype.updateStickyColumnStyles=function(){var r=this,e=this._getRenderedRows(this._headerRowOutlet),i=this._getRenderedRows(this._rowOutlet),t=this._getRenderedRows(this._footerRowOutlet);this._stickyStyler.clearStickyPositioning(y.__spread(e,i,t),[\"left\",\"right\"]),e.forEach(function(e,t){r._addStickyColumnStyles([e],r._headerRowDefs[t])}),this._rowDefs.forEach(function(e){for(var t=[],n=0;n<i.length;n++)r._renderRows[n].rowDef===e&&t.push(i[n]);r._addStickyColumnStyles(t,e)}),t.forEach(function(e,t){r._addStickyColumnStyles([e],r._footerRowDefs[t])}),Array.from(this._columnDefsByName.values()).forEach(function(e){return e.resetStickyChanged()})},ye.prototype._getAllRenderRows=function(){var e=[],t=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(var n=0;n<this._data.length;n++){var r=this._data[n],i=this._getRenderRowsForData(r,n,t.get(r));this._cachedRenderRowsMap.has(r)||this._cachedRenderRowsMap.set(r,new WeakMap);for(var o=0;o<i.length;o++){var a=i[o],s=this._cachedRenderRowsMap.get(a.data);s.has(a.rowDef)?s.get(a.rowDef).push(a):s.set(a.rowDef,[a]),e.push(a)}}return e},ye.prototype._getRenderRowsForData=function(r,i,o){return this._getRowDefs(r,i).map(function(e){var t=o&&o.has(e)?o.get(e):[];if(t.length){var n=t.shift();return n.dataIndex=i,n}return{data:r,rowDef:e,dataIndex:i}})},ye.prototype._cacheColumnDefs=function(){var t=this;this._columnDefsByName.clear(),ge(this._contentColumnDefs,this._customColumnDefs).forEach(function(e){if(t._columnDefsByName.has(e.name))throw function(e){return Error('Duplicate column definition name provided: \"'+e+'\".')}(e.name);t._columnDefsByName.set(e.name,e)})},ye.prototype._cacheRowDefs=function(){this._headerRowDefs=ge(this._contentHeaderRowDefs,this._customHeaderRowDefs),this._footerRowDefs=ge(this._contentFooterRowDefs,this._customFooterRowDefs),this._rowDefs=ge(this._contentRowDefs,this._customRowDefs);var e=this._rowDefs.filter(function(e){return!e.when});if(!this.multiTemplateDataRows&&1<e.length)throw Error(\"There can only be one default row without a when predicate function.\");this._defaultRowDef=e[0]},ye.prototype._renderUpdatedColumns=function(){function e(e,t){return e||!!t.getColumnsDiff()}this._rowDefs.reduce(e,!1)&&this._forceRenderDataRows(),this._headerRowDefs.reduce(e,!1)&&this._forceRenderHeaderRows(),this._footerRowDefs.reduce(e,!1)&&this._forceRenderFooterRows()},ye.prototype._switchDataSource=function(e){this._data=[],r.isDataSource(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),e||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear()),this._dataSource=e},ye.prototype._observeRenderChanges=function(){var t=this;if(this.dataSource){var e;if(r.isDataSource(this.dataSource)?e=this.dataSource.connect(this):this.dataSource instanceof s.Observable?e=this.dataSource:Array.isArray(this.dataSource)&&(e=s.of(this.dataSource)),void 0===e)throw Error(\"Provided data source did not match an array, Observable, or DataSource\");this._renderChangeSubscription=e.pipe(l.takeUntil(this._onDestroy)).subscribe(function(e){t._data=e||[],t.renderRows()})}},ye.prototype._forceRenderHeaderRows=function(){var n=this;0<this._headerRowOutlet.viewContainer.length&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach(function(e,t){return n._renderRow(n._headerRowOutlet,e,t)}),this.updateStickyHeaderRowStyles(),this.updateStickyColumnStyles()},ye.prototype._forceRenderFooterRows=function(){var n=this;0<this._footerRowOutlet.viewContainer.length&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach(function(e,t){return n._renderRow(n._footerRowOutlet,e,t)}),this.updateStickyFooterRowStyles(),this.updateStickyColumnStyles()},ye.prototype._addStickyColumnStyles=function(e,t){var n=this,r=Array.from(t.columns||[]).map(function(e){var t=n._columnDefsByName.get(e);if(!t)throw ae(e);return t}),i=r.map(function(e){return e.sticky}),o=r.map(function(e){return e.stickyEnd});this._stickyStyler.updateStickyColumns(e,i,o)},ye.prototype._getRenderedRows=function(e){for(var t=[],n=0;n<e.viewContainer.length;n++){var r=e.viewContainer.get(n);t.push(r.rootNodes[0])}return t},ye.prototype._getRowDefs=function(t,n){if(1==this._rowDefs.length)return[this._rowDefs[0]];var e=[];if(this.multiTemplateDataRows)e=this._rowDefs.filter(function(e){return!e.when||e.when(n,t)});else{var r=this._rowDefs.find(function(e){return e.when&&e.when(n,t)})||this._defaultRowDef;r&&e.push(r)}if(!e.length)throw function(e){return Error(\"Could not find a matching row definition for theprovided row data: \"+JSON.stringify(e))}(t);return e},ye.prototype._insertRow=function(e,t){var n=e.rowDef,r={$implicit:e.data};this._renderRow(this._rowOutlet,n,t,r)},ye.prototype._renderRow=function(e,t,n,r){var i,o;void 0===r&&(r={}),e.viewContainer.createEmbeddedView(t.template,r,n);try{for(var a=y.__values(this._getCellTemplates(t)),s=a.next();!s.done;s=a.next()){var l=s.value;Z.mostRecentCellOutlet&&Z.mostRecentCellOutlet._viewContainer.createEmbeddedView(l,r)}}catch(e){i={error:e}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}this._changeDetectorRef.markForCheck()},ye.prototype._updateRowIndexContext=function(){for(var e=this._rowOutlet.viewContainer,t=0,n=e.length;t<n;t++){var r=e.get(t).context;r.count=n,r.first=0===t,r.last=t===n-1,r.even=t%2==0,r.odd=!r.even,this.multiTemplateDataRows?(r.dataIndex=this._renderRows[t].dataIndex,r.renderIndex=t):r.index=this._renderRows[t].dataIndex}},ye.prototype._getCellTemplates=function(n){var r=this;return n&&n.columns?Array.from(n.columns,function(e){var t=r._columnDefsByName.get(e);if(!t)throw ae(e);return n.extractCellTemplate(t)}):[]},ye.prototype._applyNativeTableSections=function(){var t,e,n=this._document.createDocumentFragment(),r=[{tag:\"thead\",outlet:this._headerRowOutlet},{tag:\"tbody\",outlet:this._rowOutlet},{tag:\"tfoot\",outlet:this._footerRowOutlet}];try{for(var i=y.__values(r),o=i.next();!o.done;o=i.next()){var a=o.value,s=this._document.createElement(a.tag);s.setAttribute(\"role\",\"rowgroup\"),s.appendChild(a.outlet.elementRef.nativeElement),n.appendChild(s)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this._elementRef.nativeElement.appendChild(n)},ye.prototype._forceRenderDataRows=function(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows(),this.updateStickyColumnStyles()},ye.prototype._checkStickyStates=function(){function e(e,t){return e||t.hasStickyChanged()}this._headerRowDefs.reduce(e,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(e,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(e,!1)&&this.updateStickyColumnStyles()},ye.prototype._setupStickyStyler=function(){var t=this,e=this._dir?this._dir.value:\"ltr\";this._stickyStyler=new ie(this._isNativeHtmlTable,this.stickyCssClass,e,this._platform.isBrowser),(this._dir?this._dir.change:s.of()).pipe(l.takeUntil(this._onDestroy)).subscribe(function(e){t._stickyStyler.direction=e,t.updateStickyColumnStyles()})},ye.decorators=[{type:a.Component,args:[{moduleId:module.id,selector:\"cdk-table, table[cdk-table]\",exportAs:\"cdkTable\",template:fe,host:{class:\"cdk-table\"},encapsulation:a.ViewEncapsulation.None,changeDetection:a.ChangeDetectionStrategy.Default}]}],ye.ctorParameters=function(){return[{type:a.IterableDiffers},{type:a.ChangeDetectorRef},{type:a.ElementRef},{type:String,decorators:[{type:a.Attribute,args:[\"role\"]}]},{type:t.Directionality,decorators:[{type:a.Optional}]},{type:void 0,decorators:[{type:a.Inject,args:[o.DOCUMENT]}]},{type:i.Platform}]},ye.propDecorators={trackBy:[{type:a.Input}],dataSource:[{type:a.Input}],multiTemplateDataRows:[{type:a.Input}],_rowOutlet:[{type:a.ViewChild,args:[se,{static:!0}]}],_headerRowOutlet:[{type:a.ViewChild,args:[ue,{static:!0}]}],_footerRowOutlet:[{type:a.ViewChild,args:[pe,{static:!0}]}],_contentColumnDefs:[{type:a.ContentChildren,args:[_]}],_contentRowDefs:[{type:a.ContentChildren,args:[Y]}],_contentHeaderRowDefs:[{type:a.ContentChildren,args:[V]}],_contentFooterRowDefs:[{type:a.ContentChildren,args:[H]}]},ye);function ye(e,t,n,r,i,o,a){this._differs=e,this._changeDetectorRef=t,this._elementRef=n,this._dir=i,this._platform=a,this._onDestroy=new s.Subject,this._columnDefsByName=new Map,this._customColumnDefs=new Set,this._customRowDefs=new Set,this._customHeaderRowDefs=new Set,this._customFooterRowDefs=new Set,this._headerRowDefChanged=!0,this._footerRowDefChanged=!0,this._cachedRenderRowsMap=new Map,this.stickyCssClass=\"cdk-table-sticky\",this._multiTemplateDataRows=!1,this.viewChange=new s.BehaviorSubject({start:0,end:Number.MAX_VALUE}),r||this._elementRef.nativeElement.setAttribute(\"role\",\"grid\"),this._document=o,this._isNativeHtmlTable=\"TABLE\"===this._elementRef.nativeElement.nodeName}function ge(e,t){return e.toArray().concat(Array.from(t))}var _e=new a.InjectionToken(\"text-column-options\"),be=(Object.defineProperty(we.prototype,\"name\",{get:function(){return this._name},set:function(e){this._name=e,this._syncColumnDefName()},enumerable:!0,configurable:!0}),we.prototype.ngOnInit=function(){if(this._syncColumnDefName(),void 0===this.headerText&&(this.headerText=this._createDefaultHeaderText()),this.dataAccessor||(this.dataAccessor=this._options.defaultDataAccessor||function(e,t){return e[t]}),!this._table)throw Error(\"Text column could not find a parent table for registration.\");this.columnDef.cell=this.cell,this.columnDef.headerCell=this.headerCell,this._table.addColumnDef(this.columnDef)},we.prototype.ngOnDestroy=function(){this._table&&this._table.removeColumnDef(this.columnDef)},we.prototype._createDefaultHeaderText=function(){var e=this.name;if(a.isDevMode()&&!e)throw Error(\"Table text column must have a name.\");return this._options&&this._options.defaultHeaderTextTransform?this._options.defaultHeaderTextTransform(e):e[0].toUpperCase()+e.slice(1)},we.prototype._syncColumnDefName=function(){this.columnDef&&(this.columnDef.name=this.name)},we.decorators=[{type:a.Component,args:[{moduleId:module.id,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:a.ViewEncapsulation.None,changeDetection:a.ChangeDetectionStrategy.Default}]}],we.ctorParameters=function(){return[{type:ve,decorators:[{type:a.Optional}]},{type:void 0,decorators:[{type:a.Optional},{type:a.Inject,args:[_e]}]}]},we.propDecorators={name:[{type:a.Input}],headerText:[{type:a.Input}],dataAccessor:[{type:a.Input}],justify:[{type:a.Input}],columnDef:[{type:a.ViewChild,args:[_,{static:!0}]}],cell:[{type:a.ViewChild,args:[c,{static:!0}]}],headerCell:[{type:a.ViewChild,args:[d,{static:!0}]}]},we);function we(e,t){this._table=e,this._options=t,this.justify=\"start\",this._options=t||{}}var xe=[ve,Y,c,Z,d,f,_,T,te,C,O,X,V,J,H,se,ue,pe,be],Ce=(Se.decorators=[{type:a.NgModule,args:[{imports:[o.CommonModule],exports:xe,declarations:xe}]}],Se);function Se(){}e.DataSource=r.DataSource,e.DataRowOutlet=se,e.HeaderRowOutlet=ue,e.FooterRowOutlet=pe,e.CDK_TABLE_TEMPLATE=fe,e.CdkTable=ve,e.CdkCellDef=c,e.CdkHeaderCellDef=d,e.CdkFooterCellDef=f,e.CdkColumnDef=_,e.BaseCdkCell=w,e.CdkHeaderCell=C,e.CdkFooterCell=O,e.CdkCell=T,e.CDK_ROW_TEMPLATE=A,e.BaseRowDef=M,e.CdkHeaderRowDef=V,e.CdkFooterRowDef=H,e.CdkRowDef=Y,e.CdkCellOutlet=Z,e.CdkHeaderRow=X,e.CdkFooterRow=J,e.CdkRow=te,e.CdkTableModule=Ce,e.STICKY_DIRECTIONS=re,e.StickyStyler=ie,e.mixinHasStickyInput=u,e.TEXT_COLUMN_OPTIONS=_e,e.CdkTextColumn=be,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"tslib\"),require(\"@angular/cdk/table\"),require(\"@angular/common\"),require(\"@angular/material/core\"),require(\"@angular/cdk/coercion\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/material/bundles/material-table.umd.js\",[\"@angular/core\",\"tslib\",\"@angular/cdk/table\",\"@angular/common\",\"@angular/material/core\",\"@angular/cdk/coercion\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"tslib\"),e(\"@angular/cdk/table\"),e(\"@angular/common\"),e(\"@angular/material/core\"),e(\"@angular/cdk/coercion\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,t,s,n,r,i,o,l,u){\"use strict\";var a,c=(a=n.CdkTable,s.__extends(p,a),p.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-table, table[mat-table]\",exportAs:\"matTable\",template:n.CDK_TABLE_TEMPLATE,host:{class:\"mat-table\"},providers:[{provide:n.CdkTable,useExisting:p}],encapsulation:t.ViewEncapsulation.None,changeDetection:t.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,[dir=rtl] mat-header-cell:first-of-type,[dir=rtl] mat-footer-cell:first-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,[dir=rtl] mat-header-cell:last-of-type,[dir=rtl] mat-footer-cell:last-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,[dir=rtl] td.mat-cell:first-of-type,[dir=rtl] td.mat-footer-cell:first-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,[dir=rtl] td.mat-cell:last-of-type,[dir=rtl] td.mat-footer-cell:last-of-type{padding-right:0;padding-left:24px}/*# sourceMappingURL=table.css.map */\\n']}]}],p);function p(){var e=null!==a&&a.apply(this,arguments)||this;return e.stickyCssClass=\"mat-table-sticky\",e}var d,h=(d=n.CdkCellDef,s.__extends(f,d),f.decorators=[{type:t.Directive,args:[{selector:\"[matCellDef]\",providers:[{provide:n.CdkCellDef,useExisting:f}]}]}],f);function f(){return null!==d&&d.apply(this,arguments)||this}var m,v=(m=n.CdkHeaderCellDef,s.__extends(y,m),y.decorators=[{type:t.Directive,args:[{selector:\"[matHeaderCellDef]\",providers:[{provide:n.CdkHeaderCellDef,useExisting:y}]}]}],y);function y(){return null!==m&&m.apply(this,arguments)||this}var g,_=(g=n.CdkFooterCellDef,s.__extends(b,g),b.decorators=[{type:t.Directive,args:[{selector:\"[matFooterCellDef]\",providers:[{provide:n.CdkFooterCellDef,useExisting:b}]}]}],b);function b(){return null!==g&&g.apply(this,arguments)||this}var w,x=(w=n.CdkColumnDef,s.__extends(C,w),C.decorators=[{type:t.Directive,args:[{selector:\"[matColumnDef]\",providers:[{provide:n.CdkColumnDef,useExisting:C},{provide:\"MAT_SORT_HEADER_COLUMN_DEF\",useExisting:C}]}]}],C.propDecorators={name:[{type:t.Input,args:[\"matColumnDef\"]}],sticky:[{type:t.Input}],stickyEnd:[{type:t.Input}]},C);function C(){return null!==w&&w.apply(this,arguments)||this}var S,E=(S=n.CdkHeaderCell,s.__extends(O,S),O.decorators=[{type:t.Directive,args:[{selector:\"mat-header-cell, th[mat-header-cell]\",host:{class:\"mat-header-cell\",role:\"columnheader\"}}]}],O.ctorParameters=function(){return[{type:n.CdkColumnDef},{type:t.ElementRef}]},O);function O(e,t){var n=S.call(this,e,t)||this;return t.nativeElement.classList.add(\"mat-column-\"+e.cssClassFriendlyName),n}var k,D=(k=n.CdkFooterCell,s.__extends(T,k),T.decorators=[{type:t.Directive,args:[{selector:\"mat-footer-cell, td[mat-footer-cell]\",host:{class:\"mat-footer-cell\",role:\"gridcell\"}}]}],T.ctorParameters=function(){return[{type:n.CdkColumnDef},{type:t.ElementRef}]},T);function T(e,t){var n=k.call(this,e,t)||this;return t.nativeElement.classList.add(\"mat-column-\"+e.cssClassFriendlyName),n}var I,P=(I=n.CdkCell,s.__extends(A,I),A.decorators=[{type:t.Directive,args:[{selector:\"mat-cell, td[mat-cell]\",host:{class:\"mat-cell\",role:\"gridcell\"}}]}],A.ctorParameters=function(){return[{type:n.CdkColumnDef},{type:t.ElementRef}]},A);function A(e,t){var n=I.call(this,e,t)||this;return t.nativeElement.classList.add(\"mat-column-\"+e.cssClassFriendlyName),n}var M,R=(M=n.CdkHeaderRowDef,s.__extends(N,M),N.decorators=[{type:t.Directive,args:[{selector:\"[matHeaderRowDef]\",providers:[{provide:n.CdkHeaderRowDef,useExisting:N}],inputs:[\"columns: matHeaderRowDef\",\"sticky: matHeaderRowDefSticky\"]}]}],N);function N(){return null!==M&&M.apply(this,arguments)||this}var j,F=(j=n.CdkFooterRowDef,s.__extends(L,j),L.decorators=[{type:t.Directive,args:[{selector:\"[matFooterRowDef]\",providers:[{provide:n.CdkFooterRowDef,useExisting:L}],inputs:[\"columns: matFooterRowDef\",\"sticky: matFooterRowDefSticky\"]}]}],L);function L(){return null!==j&&j.apply(this,arguments)||this}var V,B=(V=n.CdkRowDef,s.__extends(U,V),U.decorators=[{type:t.Directive,args:[{selector:\"[matRowDef]\",providers:[{provide:n.CdkRowDef,useExisting:U}],inputs:[\"columns: matRowDefColumns\",\"when: matRowDefWhen\"]}]}],U);function U(){return null!==V&&V.apply(this,arguments)||this}var z,q=(z=n.CdkHeaderRow,s.__extends(H,z),H.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-header-row, tr[mat-header-row]\",template:n.CDK_ROW_TEMPLATE,host:{class:\"mat-header-row\",role:\"row\"},changeDetection:t.ChangeDetectionStrategy.Default,encapsulation:t.ViewEncapsulation.None,exportAs:\"matHeaderRow\",providers:[{provide:n.CdkHeaderRow,useExisting:H}]}]}],H);function H(){return null!==z&&z.apply(this,arguments)||this}var W,G=(W=n.CdkFooterRow,s.__extends(Y,W),Y.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-footer-row, tr[mat-footer-row]\",template:n.CDK_ROW_TEMPLATE,host:{class:\"mat-footer-row\",role:\"row\"},changeDetection:t.ChangeDetectionStrategy.Default,encapsulation:t.ViewEncapsulation.None,exportAs:\"matFooterRow\",providers:[{provide:n.CdkFooterRow,useExisting:Y}]}]}],Y);function Y(){return null!==W&&W.apply(this,arguments)||this}var K,Z=(K=n.CdkRow,s.__extends(Q,K),Q.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-row, tr[mat-row]\",template:n.CDK_ROW_TEMPLATE,host:{class:\"mat-row\",role:\"row\"},changeDetection:t.ChangeDetectionStrategy.Default,encapsulation:t.ViewEncapsulation.None,exportAs:\"matRow\",providers:[{provide:n.CdkRow,useExisting:Q}]}]}],Q);function Q(){return null!==K&&K.apply(this,arguments)||this}var X,$=(X=n.CdkTextColumn,s.__extends(J,X),J.decorators=[{type:t.Component,args:[{moduleId:module.id,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:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.Default}]}],J);function J(){return null!==X&&X.apply(this,arguments)||this}var ee=[c,v,R,x,h,B,_,F,E,P,D,q,Z,G,$],te=(ne.decorators=[{type:t.NgModule,args:[{imports:[n.CdkTableModule,r.CommonModule,i.MatCommonModule],exports:ee,declarations:ee}]}],ne);function ne(){}var re,ie=(re=n.DataSource,s.__extends(oe,re),Object.defineProperty(oe.prototype,\"data\",{get:function(){return this._data.value},set:function(e){this._data.next(e)},enumerable:!0,configurable:!0}),Object.defineProperty(oe.prototype,\"filter\",{get:function(){return this._filter.value},set:function(e){this._filter.next(e)},enumerable:!0,configurable:!0}),Object.defineProperty(oe.prototype,\"sort\",{get:function(){return this._sort},set:function(e){this._sort=e,this._updateChangeSubscription()},enumerable:!0,configurable:!0}),Object.defineProperty(oe.prototype,\"paginator\",{get:function(){return this._paginator},set:function(e){this._paginator=e,this._updateChangeSubscription()},enumerable:!0,configurable:!0}),oe.prototype._updateChangeSubscription=function(){var n=this,e=this._sort?l.merge(this._sort.sortChange,this._sort.initialized):l.of(null),t=this._paginator?l.merge(this._paginator.page,this._internalPageChanges,this._paginator.initialized):l.of(null),r=this._data,i=l.combineLatest([r,this._filter]).pipe(u.map(function(e){var t=s.__read(e,1)[0];return n._filterData(t)})),o=l.combineLatest([i,e]).pipe(u.map(function(e){var t=s.__read(e,1)[0];return n._orderData(t)})),a=l.combineLatest([o,t]).pipe(u.map(function(e){var t=s.__read(e,1)[0];return n._pageData(t)}));this._renderChangesSubscription.unsubscribe(),this._renderChangesSubscription=a.subscribe(function(e){return n._renderData.next(e)})},oe.prototype._filterData=function(e){var t=this;return this.filteredData=this.filter?e.filter(function(e){return t.filterPredicate(e,t.filter)}):e,this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData},oe.prototype._orderData=function(e){return this.sort?this.sortData(e.slice(),this.sort):e},oe.prototype._pageData=function(e){if(!this.paginator)return e;var t=this.paginator.pageIndex*this.paginator.pageSize;return e.slice(t,t+this.paginator.pageSize)},oe.prototype._updatePaginator=function(r){var i=this;Promise.resolve().then(function(){var e=i.paginator;if(e&&(e.length=r,0<e.pageIndex)){var t=Math.ceil(e.length/e.pageSize)-1||0,n=Math.min(e.pageIndex,t);n!==e.pageIndex&&(e.pageIndex=n,i._internalPageChanges.next())}})},oe.prototype.connect=function(){return this._renderData},oe.prototype.disconnect=function(){},oe);function oe(e){void 0===e&&(e=[]);var s=re.call(this)||this;return s._renderData=new l.BehaviorSubject([]),s._filter=new l.BehaviorSubject(\"\"),s._internalPageChanges=new l.Subject,s._renderChangesSubscription=l.Subscription.EMPTY,s.sortingDataAccessor=function(e,t){var n=e[t];if(o._isNumberValue(n)){var r=Number(n);return r<9007199254740991?r:n}return n},s.sortData=function(e,t){var o=t.active,a=t.direction;return o&&\"\"!=a?e.sort(function(e,t){var n=s.sortingDataAccessor(e,o),r=s.sortingDataAccessor(t,o),i=0;return null!=n&&null!=r?r<n?i=1:n<r&&(i=-1):null!=n?i=1:null!=r&&(i=-1),i*(\"asc\"==a?1:-1)}):e},s.filterPredicate=function(n,e){var t=Object.keys(n).reduce(function(e,t){return e+n[t]+\"◬\"},\"\").toLowerCase(),r=e.trim().toLowerCase();return-1!=t.indexOf(r)},s._data=new l.BehaviorSubject(e),s._updateChangeSubscription(),s}e.MatTableModule=te,e.MatCellDef=h,e.MatHeaderCellDef=v,e.MatFooterCellDef=_,e.MatColumnDef=x,e.MatHeaderCell=E,e.MatFooterCell=D,e.MatCell=P,e.MatTable=c,e.MatHeaderRowDef=R,e.MatFooterRowDef=F,e.MatRowDef=B,e.MatHeaderRow=q,e.MatFooterRow=G,e.MatRow=Z,e.MatTableDataSource=ie,e.MatTextColumn=$,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/observers\"),require(\"@angular/cdk/portal\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/cdk/a11y\"),require(\"@angular/material/core\"),require(\"@angular/platform-browser/animations\"),require(\"tslib\"),require(\"rxjs\"),require(\"@angular/cdk/bidi\"),require(\"@angular/animations\"),require(\"rxjs/operators\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/scrolling\"),require(\"@angular/cdk/platform\"),require(\"@angular/cdk/keycodes\")):System.registerDynamic(\"npm:@angular/material/bundles/material-tabs.umd.js\",[\"@angular/cdk/observers\",\"@angular/cdk/portal\",\"@angular/common\",\"@angular/core\",\"@angular/cdk/a11y\",\"@angular/material/core\",\"@angular/platform-browser/animations\",\"tslib\",\"rxjs\",\"@angular/cdk/bidi\",\"@angular/animations\",\"rxjs/operators\",\"@angular/cdk/coercion\",\"@angular/cdk/scrolling\",\"@angular/cdk/platform\",\"@angular/cdk/keycodes\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/observers\"),e(\"@angular/cdk/portal\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/cdk/a11y\"),e(\"@angular/material/core\"),e(\"@angular/platform-browser/animations\"),e(\"tslib\"),e(\"rxjs\"),e(\"@angular/cdk/bidi\"),e(\"@angular/animations\"),e(\"rxjs/operators\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/scrolling\"),e(\"@angular/cdk/platform\"),e(\"@angular/cdk/keycodes\"))})}(0,function(e,t,n,r,l,i,u,o,a,c,s,p,d,h,f,m,v){\"use strict\";var y=new l.InjectionToken(\"MatInkBarPositioner\",{providedIn:\"root\",factory:g});function g(){return function(e){return{left:e?(e.offsetLeft||0)+\"px\":\"0\",width:e?(e.offsetWidth||0)+\"px\":\"0\"}}}var _=(b.prototype.alignToElement=function(e){var t=this;this.show(),\"undefined\"!=typeof requestAnimationFrame?this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){return t._setStyles(e)})}):this._setStyles(e)},b.prototype.show=function(){this._elementRef.nativeElement.style.visibility=\"visible\"},b.prototype.hide=function(){this._elementRef.nativeElement.style.visibility=\"hidden\"},b.prototype._setStyles=function(e){var t=this._inkBarPositioner(e),n=this._elementRef.nativeElement;n.style.left=t.left,n.style.width=t.width},b.decorators=[{type:l.Directive,args:[{selector:\"mat-ink-bar\",host:{class:\"mat-ink-bar\",\"[class._mat-animation-noopable]\":\"_animationMode === 'NoopAnimations'\"}}]}],b.ctorParameters=function(){return[{type:l.ElementRef},{type:l.NgZone},{type:void 0,decorators:[{type:l.Inject,args:[y]}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},b);function b(e,t,n,r){this._elementRef=e,this._ngZone=t,this._inkBarPositioner=n,this._animationMode=r}var w=(x.decorators=[{type:l.Directive,args:[{selector:\"[matTabContent]\"}]}],x.ctorParameters=function(){return[{type:l.TemplateRef}]},x);function x(e){this.template=e}var C,S=(C=n.CdkPortal,a.__extends(E,C),E.decorators=[{type:l.Directive,args:[{selector:\"[mat-tab-label], [matTabLabel]\"}]}],E);function E(){return null!==C&&C.apply(this,arguments)||this}function O(){}var k,D=u.mixinDisabled(O),T=(k=D,a.__extends(I,k),Object.defineProperty(I.prototype,\"content\",{get:function(){return this._contentPortal},enumerable:!0,configurable:!0}),I.prototype.ngOnChanges=function(e){(e.hasOwnProperty(\"textLabel\")||e.hasOwnProperty(\"disabled\"))&&this._stateChanges.next()},I.prototype.ngOnDestroy=function(){this._stateChanges.complete()},I.prototype.ngOnInit=function(){this._contentPortal=new n.TemplatePortal(this._explicitContent||this._implicitContent,this._viewContainerRef)},I.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-tab\",template:\"\\x3c!-- Create a template for the content of the <mat-tab> so that we can grab a reference to this\\n    TemplateRef and use it in a Portal to render the tab content in the appropriate place in the\\n    tab-group. --\\x3e\\n<ng-template><ng-content></ng-content></ng-template>\\n\",inputs:[\"disabled\"],changeDetection:l.ChangeDetectionStrategy.OnPush,encapsulation:l.ViewEncapsulation.None,exportAs:\"matTab\"}]}],I.ctorParameters=function(){return[{type:l.ViewContainerRef}]},I.propDecorators={templateLabel:[{type:l.ContentChild,args:[S,{static:!1}]}],_explicitContent:[{type:l.ContentChild,args:[w,{read:l.TemplateRef,static:!0}]}],_implicitContent:[{type:l.ViewChild,args:[l.TemplateRef,{static:!0}]}],textLabel:[{type:l.Input,args:[\"label\"]}],ariaLabel:[{type:l.Input,args:[\"aria-label\"]}],ariaLabelledby:[{type:l.Input,args:[\"aria-labelledby\"]}]},I);function I(e){var t=k.call(this)||this;return t._viewContainerRef=e,t.textLabel=\"\",t._contentPortal=null,t._stateChanges=new c.Subject,t.position=null,t.origin=null,t.isActive=!1,t}var P,A={translateTab:p.trigger(\"translateTab\",[p.state(\"center, void, left-origin-center, right-origin-center\",p.style({transform:\"none\"})),p.state(\"left\",p.style({transform:\"translate3d(-100%, 0, 0)\",minHeight:\"1px\"})),p.state(\"right\",p.style({transform:\"translate3d(100%, 0, 0)\",minHeight:\"1px\"})),p.transition(\"* => left, * => right, left => center, right => center\",p.animate(\"{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)\")),p.transition(\"void => left-origin-center\",[p.style({transform:\"translate3d(-100%, 0, 0)\"}),p.animate(\"{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)\")]),p.transition(\"void => right-origin-center\",[p.style({transform:\"translate3d(100%, 0, 0)\"}),p.animate(\"{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)\")])])},M=(P=n.CdkPortalOutlet,a.__extends(R,P),R.prototype.ngOnInit=function(){var t=this;P.prototype.ngOnInit.call(this),this._centeringSub=this._host._beforeCentering.pipe(d.startWith(this._host._isCenterPosition(this._host._position))).subscribe(function(e){e&&!t.hasAttached()&&t.attach(t._host._content)}),this._leavingSub=this._host._afterLeavingCenter.subscribe(function(){t.detach()})},R.prototype.ngOnDestroy=function(){P.prototype.ngOnDestroy.call(this),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()},R.decorators=[{type:l.Directive,args:[{selector:\"[matTabBodyHost]\"}]}],R.ctorParameters=function(){return[{type:l.ComponentFactoryResolver},{type:l.ViewContainerRef},{type:L,decorators:[{type:l.Inject,args:[l.forwardRef(function(){return L})]}]}]},R);function R(e,t,n){var r=P.call(this,e,t)||this;return r._host=n,r._centeringSub=c.Subscription.EMPTY,r._leavingSub=c.Subscription.EMPTY,r}var N=(Object.defineProperty(j.prototype,\"position\",{set:function(e){this._positionIndex=e,this._computePositionAnimationState()},enumerable:!0,configurable:!0}),j.prototype.ngOnInit=function(){\"center\"==this._position&&null!=this.origin&&(this._position=this._computePositionFromOrigin())},j.prototype.ngOnDestroy=function(){this._dirChangeSubscription.unsubscribe(),this._translateTabComplete.complete()},j.prototype._onTranslateTabStarted=function(e){var t=this._isCenterPosition(e.toState);this._beforeCentering.emit(t),t&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)},j.prototype._getLayoutDirection=function(){return this._dir&&\"rtl\"===this._dir.value?\"rtl\":\"ltr\"},j.prototype._isCenterPosition=function(e){return\"center\"==e||\"left-origin-center\"==e||\"right-origin-center\"==e},j.prototype._computePositionAnimationState=function(e){void 0===e&&(e=this._getLayoutDirection()),this._positionIndex<0?this._position=\"ltr\"==e?\"left\":\"right\":0<this._positionIndex?this._position=\"ltr\"==e?\"right\":\"left\":this._position=\"center\"},j.prototype._computePositionFromOrigin=function(){var e=this._getLayoutDirection();return\"ltr\"==e&&this.origin<=0||\"rtl\"==e&&0<this.origin?\"left-origin-center\":\"right-origin-center\"},j.decorators=[{type:l.Directive,args:[{selector:\"do-not-use-abstract-mat-tab-body-base\"}]}],j.ctorParameters=function(){return[{type:l.ElementRef},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.ChangeDetectorRef}]},j.propDecorators={_onCentering:[{type:l.Output}],_beforeCentering:[{type:l.Output}],_afterLeavingCenter:[{type:l.Output}],_onCentered:[{type:l.Output}],_content:[{type:l.Input,args:[\"content\"]}],origin:[{type:l.Input}],animationDuration:[{type:l.Input}],position:[{type:l.Input}]},j);function j(e,t,n){var r=this;this._elementRef=e,this._dir=t,this._dirChangeSubscription=c.Subscription.EMPTY,this._translateTabComplete=new c.Subject,this._onCentering=new l.EventEmitter,this._beforeCentering=new l.EventEmitter,this._afterLeavingCenter=new l.EventEmitter,this._onCentered=new l.EventEmitter(!0),this.animationDuration=\"500ms\",t&&(this._dirChangeSubscription=t.change.subscribe(function(e){r._computePositionAnimationState(e),n.markForCheck()})),this._translateTabComplete.pipe(d.distinctUntilChanged(function(e,t){return e.fromState===t.fromState&&e.toState===t.toState})).subscribe(function(e){r._isCenterPosition(e.toState)&&r._isCenterPosition(r._position)&&r._onCentered.emit(),r._isCenterPosition(e.fromState)&&!r._isCenterPosition(r._position)&&r._afterLeavingCenter.emit()})}var F,L=(F=N,a.__extends(V,F),V.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-tab-body\",template:'<div class=\"mat-tab-body-content\" #content\\n     [@translateTab]=\"{\\n        value: _position,\\n        params: {animationDuration: animationDuration}\\n     }\"\\n     (@translateTab.start)=\"_onTranslateTabStarted($event)\"\\n     (@translateTab.done)=\"_translateTabComplete.next($event)\">\\n  <ng-template matTabBodyHost></ng-template>\\n</div>\\n',encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,animations:[A.translateTab],host:{class:\"mat-tab-body\"},styles:[\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}/*# sourceMappingURL=tab-body.css.map */\\n\"]}]}],V.ctorParameters=function(){return[{type:l.ElementRef},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.ChangeDetectorRef}]},V.propDecorators={_portalHost:[{type:l.ViewChild,args:[n.PortalHostDirective,{static:!1}]}]},V);function V(e,t,n){return F.call(this,e,t,n)||this}function B(e){this._elementRef=e}var U,z=0,q=function(){},H=new l.InjectionToken(\"MAT_TABS_CONFIG\"),W=u.mixinColor(u.mixinDisableRipple(B),\"primary\"),G=(U=W,a.__extends(Y,U),Object.defineProperty(Y.prototype,\"dynamicHeight\",{get:function(){return this._dynamicHeight},set:function(e){this._dynamicHeight=h.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(Y.prototype,\"selectedIndex\",{get:function(){return this._selectedIndex},set:function(e){this._indexToSelect=h.coerceNumberProperty(e,null)},enumerable:!0,configurable:!0}),Object.defineProperty(Y.prototype,\"animationDuration\",{get:function(){return this._animationDuration},set:function(e){this._animationDuration=/^\\d+$/.test(e)?e+\"ms\":e},enumerable:!0,configurable:!0}),Object.defineProperty(Y.prototype,\"backgroundColor\",{get:function(){return this._backgroundColor},set:function(e){var t=this._elementRef.nativeElement;t.classList.remove(\"mat-background-\"+this.backgroundColor),e&&t.classList.add(\"mat-background-\"+e),this._backgroundColor=e},enumerable:!0,configurable:!0}),Y.prototype.ngAfterContentChecked=function(){var n=this,r=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=r){var e=null==this._selectedIndex;e||this.selectedTabChange.emit(this._createChangeEvent(r)),Promise.resolve().then(function(){n._tabs.forEach(function(e,t){return e.isActive=t===r}),e||n.selectedIndexChange.emit(r)})}this._tabs.forEach(function(e,t){e.position=t-r,null==n._selectedIndex||0!=e.position||e.origin||(e.origin=r-n._selectedIndex)}),this._selectedIndex!==r&&(this._selectedIndex=r,this._changeDetectorRef.markForCheck())},Y.prototype.ngAfterContentInit=function(){var n=this;this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(function(){if(n._clampTabIndex(n._indexToSelect)===n._selectedIndex)for(var e=n._tabs.toArray(),t=0;t<e.length;t++)if(e[t].isActive){n._indexToSelect=n._selectedIndex=t;break}n._subscribeToTabLabels(),n._changeDetectorRef.markForCheck()})},Y.prototype.ngOnDestroy=function(){this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe()},Y.prototype.realignInkBar=function(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()},Y.prototype._focusChanged=function(e){this.focusChange.emit(this._createChangeEvent(e))},Y.prototype._createChangeEvent=function(e){var t=new q;return t.index=e,this._tabs&&this._tabs.length&&(t.tab=this._tabs.toArray()[e]),t},Y.prototype._subscribeToTabLabels=function(){var e=this;this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=c.merge.apply(void 0,a.__spread(this._tabs.map(function(e){return e._stateChanges}))).subscribe(function(){return e._changeDetectorRef.markForCheck()})},Y.prototype._clampTabIndex=function(e){return Math.min(this._tabs.length-1,Math.max(e||0,0))},Y.prototype._getTabLabelId=function(e){return\"mat-tab-label-\"+this._groupId+\"-\"+e},Y.prototype._getTabContentId=function(e){return\"mat-tab-content-\"+this._groupId+\"-\"+e},Y.prototype._setTabBodyWrapperHeight=function(e){if(this._dynamicHeight&&this._tabBodyWrapperHeight){var t=this._tabBodyWrapper.nativeElement;t.style.height=this._tabBodyWrapperHeight+\"px\",this._tabBodyWrapper.nativeElement.offsetHeight&&(t.style.height=e+\"px\")}},Y.prototype._removeTabBodyWrapperHeight=function(){var e=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=e.clientHeight,e.style.height=\"\",this.animationDone.emit()},Y.prototype._handleClick=function(e,t,n){e.disabled||(this.selectedIndex=t.focusIndex=n)},Y.prototype._getTabIndex=function(e,t){return e.disabled?null:this.selectedIndex===t?0:-1},Y.decorators=[{type:l.Directive,args:[{selector:\"do-not-use-abstract-mat-tab-group-base\"}]}],Y.ctorParameters=function(){return[{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Inject,args:[H]},{type:l.Optional}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},Y.propDecorators={dynamicHeight:[{type:l.Input}],selectedIndex:[{type:l.Input}],headerPosition:[{type:l.Input}],animationDuration:[{type:l.Input}],backgroundColor:[{type:l.Input}],selectedIndexChange:[{type:l.Output}],focusChange:[{type:l.Output}],animationDone:[{type:l.Output}],selectedTabChange:[{type:l.Output}]},Y);function Y(e,t,n,r){var i=U.call(this,e)||this;return i._changeDetectorRef=t,i._animationMode=r,i._indexToSelect=0,i._tabBodyWrapperHeight=0,i._tabsSubscription=c.Subscription.EMPTY,i._tabLabelSubscription=c.Subscription.EMPTY,i._dynamicHeight=!1,i._selectedIndex=null,i.headerPosition=\"above\",i.selectedIndexChange=new l.EventEmitter,i.focusChange=new l.EventEmitter,i.animationDone=new l.EventEmitter,i.selectedTabChange=new l.EventEmitter(!0),i._groupId=z++,i.animationDuration=n&&n.animationDuration?n.animationDuration:\"500ms\",i}var K,Z=(K=G,a.__extends(Q,K),Q.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-tab-group\",exportAs:\"matTabGroup\",template:'<mat-tab-header #tabHeader\\n               [selectedIndex]=\"selectedIndex\"\\n               [disableRipple]=\"disableRipple\"\\n               (indexFocused)=\"_focusChanged($event)\"\\n               (selectFocusedIndex)=\"selectedIndex = $event\">\\n  <div class=\"mat-tab-label\" role=\"tab\" matTabLabelWrapper mat-ripple cdkMonitorElementFocus\\n       *ngFor=\"let tab of _tabs; let i = index\"\\n       [id]=\"_getTabLabelId(i)\"\\n       [attr.tabIndex]=\"_getTabIndex(tab, i)\"\\n       [attr.aria-posinset]=\"i + 1\"\\n       [attr.aria-setsize]=\"_tabs.length\"\\n       [attr.aria-controls]=\"_getTabContentId(i)\"\\n       [attr.aria-selected]=\"selectedIndex == i\"\\n       [attr.aria-label]=\"tab.ariaLabel || null\"\\n       [attr.aria-labelledby]=\"(!tab.ariaLabel && tab.ariaLabelledby) ? tab.ariaLabelledby : null\"\\n       [class.mat-tab-label-active]=\"selectedIndex == i\"\\n       [disabled]=\"tab.disabled\"\\n       [matRippleDisabled]=\"tab.disabled || disableRipple\"\\n       (click)=\"_handleClick(tab, tabHeader, i)\">\\n\\n\\n    <div class=\"mat-tab-label-content\">\\n      \\x3c!-- If there is a label template, use it. --\\x3e\\n      <ng-template [ngIf]=\"tab.templateLabel\">\\n        <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\\n      </ng-template>\\n\\n      \\x3c!-- If there is not a label template, fall back to the text label. --\\x3e\\n      <ng-template [ngIf]=\"!tab.templateLabel\">{{tab.textLabel}}</ng-template>\\n    </div>\\n  </div>\\n</mat-tab-header>\\n\\n<div\\n  class=\"mat-tab-body-wrapper\"\\n  [class._mat-animation-noopable]=\"_animationMode === \\'NoopAnimations\\'\"\\n  #tabBodyWrapper>\\n  <mat-tab-body role=\"tabpanel\"\\n               *ngFor=\"let tab of _tabs; let i = index\"\\n               [id]=\"_getTabContentId(i)\"\\n               [attr.aria-labelledby]=\"_getTabLabelId(i)\"\\n               [class.mat-tab-body-active]=\"selectedIndex == i\"\\n               [content]=\"tab.content\"\\n               [position]=\"tab.position\"\\n               [origin]=\"tab.origin\"\\n               [animationDuration]=\"animationDuration\"\\n               (_onCentered)=\"_removeTabBodyWrapperHeight()\"\\n               (_onCentering)=\"_setTabBodyWrapperHeight($event)\">\\n  </mat-tab-body>\\n</div>\\n',encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,inputs:[\"color\",\"disableRipple\"],host:{class:\"mat-tab-group\",\"[class.mat-tab-group-dynamic-height]\":\"dynamicHeight\",\"[class.mat-tab-group-inverted-header]\":'headerPosition === \"below\"'},styles:[\".mat-tab-group{display:flex;flex-direction:column}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}@media(-ms-high-contrast: active){.mat-tab-label:focus{outline:dotted 2px}}.mat-tab-label.mat-tab-disabled{cursor:default}@media(-ms-high-contrast: active){.mat-tab-label.mat-tab-disabled{opacity:.5}}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}@media(-ms-high-contrast: active){.mat-tab-label{opacity:1}}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-tab-body-wrapper{transition:none;animation:none}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}/*# sourceMappingURL=tab-group.css.map */\\n\"]}]}],Q.ctorParameters=function(){return[{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:void 0,decorators:[{type:l.Inject,args:[H]},{type:l.Optional}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},Q.propDecorators={_tabs:[{type:l.ContentChildren,args:[T]}],_tabBodyWrapper:[{type:l.ViewChild,args:[\"tabBodyWrapper\",{static:!1}]}],_tabHeader:[{type:l.ViewChild,args:[\"tabHeader\",{static:!1}]}]},Q);function Q(e,t,n,r){return K.call(this,e,t,n,r)||this}function X(){}var $,J=u.mixinDisabled(X),ee=($=J,a.__extends(te,$),te.prototype.focus=function(){this.elementRef.nativeElement.focus()},te.prototype.getOffsetLeft=function(){return this.elementRef.nativeElement.offsetLeft},te.prototype.getOffsetWidth=function(){return this.elementRef.nativeElement.offsetWidth},te.decorators=[{type:l.Directive,args:[{selector:\"[matTabLabelWrapper]\",inputs:[\"disabled\"],host:{\"[class.mat-tab-disabled]\":\"disabled\",\"[attr.aria-disabled]\":\"!!disabled\"}}]}],te.ctorParameters=function(){return[{type:l.ElementRef}]},te);function te(e){var t=$.call(this)||this;return t.elementRef=e,t}var ne=m.normalizePassiveListenerOptions({passive:!0}),re=(Object.defineProperty(ie.prototype,\"selectedIndex\",{get:function(){return this._selectedIndex},set:function(e){e=h.coerceNumberProperty(e),this._selectedIndex!=e&&(this._selectedIndexChanged=!0,this._selectedIndex=e,this._keyManager&&this._keyManager.updateActiveItemIndex(e))},enumerable:!0,configurable:!0}),ie.prototype.ngAfterViewInit=function(){var e=this;c.fromEvent(this._previousPaginator.nativeElement,\"touchstart\",ne).pipe(d.takeUntil(this._destroyed)).subscribe(function(){e._handlePaginatorPress(\"before\")}),c.fromEvent(this._nextPaginator.nativeElement,\"touchstart\",ne).pipe(d.takeUntil(this._destroyed)).subscribe(function(){e._handlePaginatorPress(\"after\")})},ie.prototype.ngAfterContentInit=function(){function e(){t.updatePagination(),t._alignInkBarToSelectedTab()}var t=this,n=this._dir?this._dir.change:c.of(null),r=this._viewportRuler.change(150);this._keyManager=new i.FocusKeyManager(this._items).withHorizontalOrientation(this._getLayoutDirection()).withWrap(),this._keyManager.updateActiveItem(0),\"undefined\"!=typeof requestAnimationFrame?requestAnimationFrame(e):e(),c.merge(n,r,this._items.changes).pipe(d.takeUntil(this._destroyed)).subscribe(function(){e(),t._keyManager.withHorizontalOrientation(t._getLayoutDirection())}),this._keyManager.change.pipe(d.takeUntil(this._destroyed)).subscribe(function(e){t.indexFocused.emit(e),t._setTabFocus(e)})},ie.prototype.ngAfterContentChecked=function(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())},ie.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()},ie.prototype._handleKeydown=function(e){if(!v.hasModifierKey(e))switch(e.keyCode){case v.HOME:this._keyManager.setFirstItemActive(),e.preventDefault();break;case v.END:this._keyManager.setLastItemActive(),e.preventDefault();break;case v.ENTER:case v.SPACE:this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(e);break;default:this._keyManager.onKeydown(e)}},ie.prototype._onContentChanges=function(){var e=this,t=this._elementRef.nativeElement.textContent;t!==this._currentTextContent&&(this._currentTextContent=t||\"\",this._ngZone.run(function(){e.updatePagination(),e._alignInkBarToSelectedTab(),e._changeDetectorRef.markForCheck()}))},ie.prototype.updatePagination=function(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()},Object.defineProperty(ie.prototype,\"focusIndex\",{get:function(){return this._keyManager?this._keyManager.activeItemIndex:0},set:function(e){this._isValidIndex(e)&&this.focusIndex!==e&&this._keyManager&&this._keyManager.setActiveItem(e)},enumerable:!0,configurable:!0}),ie.prototype._isValidIndex=function(e){if(!this._items)return!0;var t=this._items?this._items.toArray()[e]:null;return!!t&&!t.disabled},ie.prototype._setTabFocus=function(e){if(this._showPaginationControls&&this._scrollToLabel(e),this._items&&this._items.length){this._items.toArray()[e].focus();var t=this._tabListContainer.nativeElement,n=this._getLayoutDirection();t.scrollLeft=\"ltr\"==n?0:t.scrollWidth-t.offsetWidth}},ie.prototype._getLayoutDirection=function(){return this._dir&&\"rtl\"===this._dir.value?\"rtl\":\"ltr\"},ie.prototype._updateTabScrollPosition=function(){var e=this.scrollDistance,t=this._platform,n=\"ltr\"===this._getLayoutDirection()?-e:e;this._tabList.nativeElement.style.transform=\"translateX(\"+Math.round(n)+\"px)\",t&&(t.TRIDENT||t.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)},Object.defineProperty(ie.prototype,\"scrollDistance\",{get:function(){return this._scrollDistance},set:function(e){this._scrollTo(e)},enumerable:!0,configurable:!0}),ie.prototype._scrollHeader=function(e){var t=(\"before\"==e?-1:1)*this._tabListContainer.nativeElement.offsetWidth/3;return this._scrollTo(this._scrollDistance+t)},ie.prototype._handlePaginatorClick=function(e){this._stopInterval(),this._scrollHeader(e)},ie.prototype._scrollToLabel=function(e){var t=this._items?this._items.toArray()[e]:null;if(t){var n,r,i=this._tabListContainer.nativeElement.offsetWidth,o=t.elementRef.nativeElement,a=o.offsetLeft,s=o.offsetWidth;\"ltr\"==this._getLayoutDirection()?r=(n=a)+s:n=(r=this._tabList.nativeElement.offsetWidth-a)-s;var l=this.scrollDistance,u=this.scrollDistance+i;n<l?this.scrollDistance-=l-n+60:u<r&&(this.scrollDistance+=r-u+60)}},ie.prototype._checkPaginationEnabled=function(){var e=this._tabList.nativeElement.scrollWidth>this._elementRef.nativeElement.offsetWidth;e||(this.scrollDistance=0),e!==this._showPaginationControls&&this._changeDetectorRef.markForCheck(),this._showPaginationControls=e},ie.prototype._checkScrollingControls=function(){this._disableScrollBefore=0==this.scrollDistance,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck()},ie.prototype._getMaxScrollDistance=function(){return this._tabList.nativeElement.scrollWidth-this._tabListContainer.nativeElement.offsetWidth||0},ie.prototype._alignInkBarToSelectedTab=function(){var e=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,t=e?e.elementRef.nativeElement:null;t?this._inkBar.alignToElement(t):this._inkBar.hide()},ie.prototype._stopInterval=function(){this._stopScrolling.next()},ie.prototype._handlePaginatorPress=function(r){var i=this;this._stopInterval(),c.timer(650,100).pipe(d.takeUntil(c.merge(this._stopScrolling,this._destroyed))).subscribe(function(){var e=i._scrollHeader(r),t=e.maxScrollDistance,n=e.distance;(0===n||t<=n)&&i._stopInterval()})},ie.prototype._scrollTo=function(e){var t=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(t,e)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:t,distance:this._scrollDistance}},ie.decorators=[{type:l.Directive,args:[{selector:\"do-not-use-abstract-mat-paginated-tab-header\"}]}],ie.ctorParameters=function(){return[{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:f.ViewportRuler},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.NgZone},{type:m.Platform},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},ie);function ie(e,t,n,r,i,o,a){var s=this;this._elementRef=e,this._changeDetectorRef=t,this._viewportRuler=n,this._dir=r,this._ngZone=i,this._platform=o,this._animationMode=a,this._scrollDistance=0,this._selectedIndexChanged=!1,this._destroyed=new c.Subject,this._showPaginationControls=!1,this._disableScrollAfter=!0,this._disableScrollBefore=!0,this._stopScrolling=new c.Subject,this._selectedIndex=0,this.selectFocusedIndex=new l.EventEmitter,this.indexFocused=new l.EventEmitter,i.runOutsideAngular(function(){c.fromEvent(e.nativeElement,\"mouseleave\").pipe(d.takeUntil(s._destroyed)).subscribe(function(){s._stopInterval()})})}var oe,ae=(oe=re,a.__extends(se,oe),Object.defineProperty(se.prototype,\"disableRipple\",{get:function(){return this._disableRipple},set:function(e){this._disableRipple=h.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),se.prototype._itemSelected=function(e){e.preventDefault()},se.decorators=[{type:l.Directive,args:[{selector:\"do-not-use-abstract-mat-tab-header-base\"}]}],se.ctorParameters=function(){return[{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:f.ViewportRuler},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.NgZone},{type:m.Platform},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},se.propDecorators={disableRipple:[{type:l.Input}]},se);function se(e,t,n,r,i,o,a){var s=oe.call(this,e,t,n,r,i,o,a)||this;return s._disableRipple=!1,s}var le,ue=(le=ae,a.__extends(ce,le),ce.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"mat-tab-header\",template:'<div class=\"mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4\"\\n     #previousPaginator\\n     aria-hidden=\"true\"\\n     mat-ripple [matRippleDisabled]=\"_disableScrollBefore || disableRipple\"\\n     [class.mat-tab-header-pagination-disabled]=\"_disableScrollBefore\"\\n     (click)=\"_handlePaginatorClick(\\'before\\')\"\\n     (mousedown)=\"_handlePaginatorPress(\\'before\\')\"\\n     (touchend)=\"_stopInterval()\">\\n  <div class=\"mat-tab-header-pagination-chevron\"></div>\\n</div>\\n\\n<div class=\"mat-tab-label-container\" #tabListContainer (keydown)=\"_handleKeydown($event)\">\\n  <div\\n    #tabList\\n    class=\"mat-tab-list\"\\n    [class._mat-animation-noopable]=\"_animationMode === \\'NoopAnimations\\'\"\\n    role=\"tablist\"\\n    (cdkObserveContent)=\"_onContentChanges()\">\\n    <div class=\"mat-tab-labels\">\\n      <ng-content></ng-content>\\n    </div>\\n    <mat-ink-bar></mat-ink-bar>\\n  </div>\\n</div>\\n\\n<div class=\"mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4\"\\n     #nextPaginator\\n     aria-hidden=\"true\"\\n     mat-ripple [matRippleDisabled]=\"_disableScrollAfter || disableRipple\"\\n     [class.mat-tab-header-pagination-disabled]=\"_disableScrollAfter\"\\n     (mousedown)=\"_handlePaginatorPress(\\'after\\')\"\\n     (click)=\"_handlePaginatorClick(\\'after\\')\"\\n     (touchend)=\"_stopInterval()\">\\n  <div class=\"mat-tab-header-pagination-chevron\"></div>\\n</div>\\n',inputs:[\"selectedIndex\"],outputs:[\"selectFocusedIndex\",\"indexFocused\"],encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,host:{class:\"mat-tab-header\",\"[class.mat-tab-header-pagination-controls-enabled]\":\"_showPaginationControls\",\"[class.mat-tab-header-rtl]\":\"_getLayoutDirection() == 'rtl'\"},styles:['.mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;content:\"\";height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-ink-bar{transition:none;animation:none}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}@media(-ms-high-contrast: active){.mat-ink-bar{outline:solid 2px;height:0}}.mat-tab-labels{display:flex}[mat-align-tabs=center] .mat-tab-labels{justify-content:center}[mat-align-tabs=end] .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}._mat-animation-noopable.mat-tab-list{transition:none;animation:none}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}@media(-ms-high-contrast: active){.mat-tab-label:focus{outline:dotted 2px}}.mat-tab-label.mat-tab-disabled{cursor:default}@media(-ms-high-contrast: active){.mat-tab-label.mat-tab-disabled{opacity:.5}}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}@media(-ms-high-contrast: active){.mat-tab-label{opacity:1}}@media(max-width: 599px){.mat-tab-label{min-width:72px}}/*# sourceMappingURL=tab-header.css.map */\\n']}]}],ce.ctorParameters=function(){return[{type:l.ElementRef},{type:l.ChangeDetectorRef},{type:f.ViewportRuler},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.NgZone},{type:m.Platform},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},ce.propDecorators={_items:[{type:l.ContentChildren,args:[ee]}],_inkBar:[{type:l.ViewChild,args:[_,{static:!0}]}],_tabListContainer:[{type:l.ViewChild,args:[\"tabListContainer\",{static:!0}]}],_tabList:[{type:l.ViewChild,args:[\"tabList\",{static:!0}]}],_nextPaginator:[{type:l.ViewChild,args:[\"nextPaginator\",{static:!1}]}],_previousPaginator:[{type:l.ViewChild,args:[\"previousPaginator\",{static:!1}]}]},ce);function ce(e,t,n,r,i,o,a){return le.call(this,e,t,n,r,i,o,a)||this}var pe,de=(pe=re,a.__extends(he,pe),Object.defineProperty(he.prototype,\"backgroundColor\",{get:function(){return this._backgroundColor},set:function(e){var t=this._elementRef.nativeElement.classList;t.remove(\"mat-background-\"+this.backgroundColor),e&&t.add(\"mat-background-\"+e),this._backgroundColor=e},enumerable:!0,configurable:!0}),Object.defineProperty(he.prototype,\"disableRipple\",{get:function(){return this._disableRipple},set:function(e){this._disableRipple=h.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),he.prototype._itemSelected=function(){},he.prototype.ngAfterContentInit=function(){var e=this;this._items.changes.pipe(d.startWith(null),d.takeUntil(this._destroyed)).subscribe(function(){e.updateActiveLink()}),pe.prototype.ngAfterContentInit.call(this)},he.prototype.updateActiveLink=function(e){if(this._items){for(var t=this._items.toArray(),n=0;n<t.length;n++)if(t[n].active)return this.selectedIndex=n,void this._changeDetectorRef.markForCheck();this.selectedIndex=-1,this._inkBar.hide()}},he.decorators=[{type:l.Directive,args:[{selector:\"do-not-use-abstract-mat-tab-nav-base\"}]}],he.ctorParameters=function(){return[{type:l.ElementRef},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.NgZone},{type:l.ChangeDetectorRef},{type:f.ViewportRuler},{type:m.Platform,decorators:[{type:l.Optional}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},he.propDecorators={backgroundColor:[{type:l.Input}],disableRipple:[{type:l.Input}],color:[{type:l.Input}]},he);function he(e,t,n,r,i,o,a){var s=pe.call(this,e,r,i,t,n,o,a)||this;return s._disableRipple=!1,s.color=\"primary\",s}var fe,me=(fe=de,a.__extends(ve,fe),ve.decorators=[{type:l.Component,args:[{moduleId:module.id,selector:\"[mat-tab-nav-bar]\",exportAs:\"matTabNavBar, matTabNav\",inputs:[\"color\"],template:'<div class=\"mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4\"\\n     #previousPaginator\\n     aria-hidden=\"true\"\\n     mat-ripple [matRippleDisabled]=\"_disableScrollBefore || disableRipple\"\\n     [class.mat-tab-header-pagination-disabled]=\"_disableScrollBefore\"\\n     (click)=\"_handlePaginatorClick(\\'before\\')\"\\n     (mousedown)=\"_handlePaginatorPress(\\'before\\')\"\\n     (touchend)=\"_stopInterval()\">\\n  <div class=\"mat-tab-header-pagination-chevron\"></div>\\n</div>\\n\\n<div class=\"mat-tab-link-container\" #tabListContainer (keydown)=\"_handleKeydown($event)\">\\n  <div class=\"mat-tab-list\" #tabList (cdkObserveContent)=\"_onContentChanges()\">\\n    <div class=\"mat-tab-links\">\\n      <ng-content></ng-content>\\n    </div>\\n    <mat-ink-bar></mat-ink-bar>\\n  </div>\\n</div>\\n\\n<div class=\"mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4\"\\n     #nextPaginator\\n     aria-hidden=\"true\"\\n     mat-ripple [matRippleDisabled]=\"_disableScrollAfter || disableRipple\"\\n     [class.mat-tab-header-pagination-disabled]=\"_disableScrollAfter\"\\n     (mousedown)=\"_handlePaginatorPress(\\'after\\')\"\\n     (click)=\"_handlePaginatorClick(\\'after\\')\"\\n     (touchend)=\"_stopInterval()\">\\n  <div class=\"mat-tab-header-pagination-chevron\"></div>\\n</div>\\n',host:{class:\"mat-tab-nav-bar mat-tab-header\",\"[class.mat-tab-header-pagination-controls-enabled]\":\"_showPaginationControls\",\"[class.mat-tab-header-rtl]\":\"_getLayoutDirection() == 'rtl'\",\"[class.mat-primary]\":'color !== \"warn\" && color !== \"accent\"',\"[class.mat-accent]\":'color === \"accent\"',\"[class.mat-warn]\":'color === \"warn\"'},encapsulation:l.ViewEncapsulation.None,changeDetection:l.ChangeDetectionStrategy.OnPush,styles:['.mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;content:\"\";height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center] .mat-tab-links{justify-content:center}[mat-align-tabs=end] .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable.mat-ink-bar{transition:none;animation:none}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}@media(-ms-high-contrast: active){.mat-ink-bar{outline:solid 2px;height:0}}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:transparent}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}@media(-ms-high-contrast: active){.mat-tab-link:focus{outline:dotted 2px}}.mat-tab-link.mat-tab-disabled{cursor:default}@media(-ms-high-contrast: active){.mat-tab-link.mat-tab-disabled{opacity:.5}}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}@media(-ms-high-contrast: active){.mat-tab-link{opacity:1}}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}@media(max-width: 599px){.mat-tab-link{min-width:72px}}/*# sourceMappingURL=tab-nav-bar.css.map */\\n']}]}],ve.ctorParameters=function(){return[{type:l.ElementRef},{type:s.Directionality,decorators:[{type:l.Optional}]},{type:l.NgZone},{type:l.ChangeDetectorRef},{type:f.ViewportRuler},{type:m.Platform,decorators:[{type:l.Optional}]},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},ve.propDecorators={_items:[{type:l.ContentChildren,args:[l.forwardRef(function(){return Ce}),{descendants:!0}]}],_inkBar:[{type:l.ViewChild,args:[_,{static:!0}]}],_tabListContainer:[{type:l.ViewChild,args:[\"tabListContainer\",{static:!0}]}],_tabList:[{type:l.ViewChild,args:[\"tabList\",{static:!0}]}],_nextPaginator:[{type:l.ViewChild,args:[\"nextPaginator\",{static:!1}]}],_previousPaginator:[{type:l.ViewChild,args:[\"previousPaginator\",{static:!1}]}]},ve);function ve(e,t,n,r,i,o,a){return fe.call(this,e,t,n,r,i,o,a)||this}function ye(){}var ge,_e=u.mixinTabIndex(u.mixinDisableRipple(u.mixinDisabled(ye))),be=(ge=_e,a.__extends(we,ge),Object.defineProperty(we.prototype,\"active\",{get:function(){return this._isActive},set:function(e){e!==this._isActive&&(this._isActive=e,this._tabNavBar.updateActiveLink(this.elementRef))},enumerable:!0,configurable:!0}),Object.defineProperty(we.prototype,\"rippleDisabled\",{get:function(){return this.disabled||this.disableRipple||this._tabNavBar.disableRipple||!!this.rippleConfig.disabled},enumerable:!0,configurable:!0}),we.prototype.focus=function(){this.elementRef.nativeElement.focus()},we.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this.elementRef)},we.decorators=[{type:l.Directive,args:[{selector:\"do-not-use-abstract-mat-tab-link-base\"}]}],we.ctorParameters=function(){return[{type:de},{type:l.ElementRef},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[u.MAT_RIPPLE_GLOBAL_OPTIONS]}]},{type:String,decorators:[{type:l.Attribute,args:[\"tabindex\"]}]},{type:i.FocusMonitor},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},we.propDecorators={active:[{type:l.Input}]},we);function we(e,t,n,r,i,o){var a=ge.call(this)||this;return a._tabNavBar=e,a.elementRef=t,a._focusMonitor=i,a._isActive=!1,a.rippleConfig=n||{},a.tabIndex=parseInt(r)||0,\"NoopAnimations\"===o&&(a.rippleConfig.animation={enterDuration:0,exitDuration:0}),i.monitor(t),a}var xe,Ce=(xe=be,a.__extends(Se,xe),Se.prototype.ngOnDestroy=function(){xe.prototype.ngOnDestroy.call(this),this._tabLinkRipple._removeTriggerEvents()},Se.decorators=[{type:l.Directive,args:[{selector:\"[mat-tab-link], [matTabLink]\",exportAs:\"matTabLink\",inputs:[\"disabled\",\"disableRipple\",\"tabIndex\"],host:{class:\"mat-tab-link\",\"[attr.aria-current]\":'active ? \"page\" : null',\"[attr.aria-disabled]\":\"disabled\",\"[attr.tabIndex]\":\"tabIndex\",\"[class.mat-tab-disabled]\":\"disabled\",\"[class.mat-tab-label-active]\":\"active\"}}]}],Se.ctorParameters=function(){return[{type:me},{type:l.ElementRef},{type:l.NgZone},{type:m.Platform},{type:void 0,decorators:[{type:l.Optional},{type:l.Inject,args:[u.MAT_RIPPLE_GLOBAL_OPTIONS]}]},{type:String,decorators:[{type:l.Attribute,args:[\"tabindex\"]}]},{type:i.FocusMonitor},{type:String,decorators:[{type:l.Optional},{type:l.Inject,args:[o.ANIMATION_MODULE_TYPE]}]}]},Se);function Se(e,t,n,r,i,o,a,s){var l=xe.call(this,e,t,i,o,a,s)||this;return l._tabLinkRipple=new u.RippleRenderer(l,n,t,r),l._tabLinkRipple.setupTriggerEvents(t.nativeElement),l}var Ee=(Oe.decorators=[{type:l.NgModule,args:[{imports:[r.CommonModule,u.MatCommonModule,n.PortalModule,u.MatRippleModule,t.ObserversModule,i.A11yModule],exports:[u.MatCommonModule,Z,S,T,me,Ce,w],declarations:[Z,S,T,_,ee,me,Ce,L,M,ue,w,re,G,de,N,ae,be]}]}],Oe);function Oe(){}e.ɵangular_material_src_material_tabs_tabs_a=g,e.ɵangular_material_src_material_tabs_tabs_b=re,e.MatTabsModule=Ee,e.MatInkBar=_,e._MAT_INK_BAR_POSITIONER=y,e.MatTabBody=L,e._MatTabBodyBase=N,e.MatTabBodyPortal=M,e.MatTabHeader=ue,e._MatTabHeaderBase=ae,e.MatTabLabelWrapper=ee,e.MatTab=T,e.MatTabLabel=S,e.MatTabNav=me,e.MatTabLink=Ce,e._MatTabNavBase=de,e._MatTabLinkBase=be,e.MatTabContent=w,e.MatTabChangeEvent=q,e.MAT_TABS_CONFIG=H,e._MatTabGroupBase=G,e.MatTabGroup=Z,e.matTabsAnimations=A,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/platform\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/material/bundles/material-toolbar.umd.js\",[\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/platform\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/platform\"),e(\"@angular/common\"))})}(0,function(e,t,n,r,i,o){\"use strict\";function a(e){this._elementRef=e}var s=n.mixinColor(a),l=(u.decorators=[{type:t.Directive,args:[{selector:\"mat-toolbar-row\",exportAs:\"matToolbarRow\",host:{class:\"mat-toolbar-row\"}}]}],u);function u(){}var c,p=(c=s,r.__extends(d,c),d.prototype.ngAfterViewInit=function(){var e=this;t.isDevMode()&&this._platform.isBrowser&&(this._checkToolbarMixedModes(),this._toolbarRows.changes.subscribe(function(){return e._checkToolbarMixedModes()}))},d.prototype._checkToolbarMixedModes=function(){var t=this;this._toolbarRows.length&&Array.from(this._elementRef.nativeElement.childNodes).filter(function(e){return!(e.classList&&e.classList.contains(\"mat-toolbar-row\"))}).filter(function(e){return e.nodeType!==(t._document?t._document.COMMENT_NODE:8)}).some(function(e){return!(!e.textContent||!e.textContent.trim())})&&h()},d.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"mat-toolbar\",exportAs:\"matToolbar\",template:'<ng-content></ng-content>\\n<ng-content select=\"mat-toolbar-row\"></ng-content>\\n',inputs:[\"color\"],host:{class:\"mat-toolbar\",\"[class.mat-toolbar-multiple-rows]\":\"_toolbarRows.length > 0\",\"[class.mat-toolbar-single-row]\":\"_toolbarRows.length === 0\"},changeDetection:t.ChangeDetectionStrategy.OnPush,encapsulation:t.ViewEncapsulation.None,styles:[\"@media(-ms-high-contrast: active){.mat-toolbar{outline:solid 1px}}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media(max-width: 599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}/*# sourceMappingURL=toolbar.css.map */\\n\"]}]}],d.ctorParameters=function(){return[{type:t.ElementRef},{type:i.Platform},{type:void 0,decorators:[{type:t.Inject,args:[o.DOCUMENT]}]}]},d.propDecorators={_toolbarRows:[{type:t.ContentChildren,args:[l]}]},d);function d(e,t,n){var r=c.call(this,e)||this;return r._platform=t,r._document=n,r}function h(){throw Error(\"MatToolbar: Attempting to combine different toolbar modes. Either specify multiple `<mat-toolbar-row>` elements explicitly or just place content inside of a `<mat-toolbar>` for a single row.\")}var f=(m.decorators=[{type:t.NgModule,args:[{imports:[n.MatCommonModule],exports:[p,l,n.MatCommonModule],declarations:[p,l]}]}],m);function m(){}e.MatToolbarModule=f,e.MatToolbarRow=l,e.MatToolbar=p,e.throwToolbarMixedModesError=h,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/scrolling\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/portal\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/cdk/platform\"),require(\"@angular/cdk/keycodes\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-overlay.umd.js\",[\"tslib\",\"@angular/cdk/scrolling\",\"@angular/common\",\"@angular/core\",\"@angular/cdk/coercion\",\"@angular/cdk/bidi\",\"@angular/cdk/portal\",\"rxjs\",\"rxjs/operators\",\"@angular/cdk/platform\",\"@angular/cdk/keycodes\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/scrolling\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/portal\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/cdk/platform\"),e(\"@angular/cdk/keycodes\"))})}(0,function(e,w,t,n,o,s,r,a,u,i,l,c){\"use strict\";var p=(d.prototype.attach=function(){},d.prototype.enable=function(){if(this._canBeEnabled()){var e=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||\"\",this._previousHTMLStyles.top=e.style.top||\"\",e.style.left=s.coerceCssPixelValue(-this._previousScrollPosition.left),e.style.top=s.coerceCssPixelValue(-this._previousScrollPosition.top),e.classList.add(\"cdk-global-scrollblock\"),this._isEnabled=!0}},d.prototype.disable=function(){if(this._isEnabled){var e=this._document.documentElement,t=this._document.body,n=e.style,r=t.style,i=n.scrollBehavior||\"\",o=r.scrollBehavior||\"\";this._isEnabled=!1,n.left=this._previousHTMLStyles.left,n.top=this._previousHTMLStyles.top,e.classList.remove(\"cdk-global-scrollblock\"),n.scrollBehavior=r.scrollBehavior=\"auto\",window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),n.scrollBehavior=i,r.scrollBehavior=o}},d.prototype._canBeEnabled=function(){if(this._document.documentElement.classList.contains(\"cdk-global-scrollblock\")||this._isEnabled)return!1;var e=this._document.body,t=this._viewportRuler.getViewportSize();return e.scrollHeight>t.height||e.scrollWidth>t.width},d);function d(e,t){this._viewportRuler=e,this._previousHTMLStyles={top:\"\",left:\"\"},this._isEnabled=!1,this._document=t}function h(){return Error(\"Scroll strategy has already been attached.\")}var f=(m.prototype.attach=function(e){if(this._overlayRef)throw h();this._overlayRef=e},m.prototype.enable=function(){var t=this;if(!this._scrollSubscription){var e=this._scrollDispatcher.scrolled(0);this._config&&this._config.threshold&&1<this._config.threshold?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(function(){var e=t._viewportRuler.getViewportScrollPosition().top;Math.abs(e-t._initialScrollPosition)>t._config.threshold?t._detach():t._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}},m.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},m.prototype.detach=function(){this.disable(),this._overlayRef=null},m);function m(e,t,n,r){var i=this;this._scrollDispatcher=e,this._ngZone=t,this._viewportRuler=n,this._config=r,this._scrollSubscription=null,this._detach=function(){i.disable(),i._overlayRef.hasAttached()&&i._ngZone.run(function(){return i._overlayRef.detach()})}}var v=(y.prototype.enable=function(){},y.prototype.disable=function(){},y.prototype.attach=function(){},y);function y(){}function g(o,e){return e.some(function(e){var t=o.bottom<e.top,n=o.top>e.bottom,r=o.right<e.left,i=o.left>e.right;return t||n||r||i})}function _(o,e){return e.some(function(e){var t=o.top<e.top,n=o.bottom>e.bottom,r=o.left<e.left,i=o.right>e.right;return t||n||r||i})}var b=(x.prototype.attach=function(e){if(this._overlayRef)throw h();this._overlayRef=e},x.prototype.enable=function(){var i=this;if(!this._scrollSubscription){var e=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(e).subscribe(function(){if(i._overlayRef.updatePosition(),i._config&&i._config.autoClose){var e=i._overlayRef.overlayElement.getBoundingClientRect(),t=i._viewportRuler.getViewportSize(),n=t.width,r=t.height;g(e,[{width:n,height:r,bottom:r,right:n,top:0,left:0}])&&(i.disable(),i._ngZone.run(function(){return i._overlayRef.detach()}))}})}},x.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},x.prototype.detach=function(){this.disable(),this._overlayRef=null},x);function x(e,t,n,r){this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this._config=r,this._scrollSubscription=null}var C=(S.decorators=[{type:o.Injectable,args:[{providedIn:\"root\"}]}],S.ctorParameters=function(){return[{type:t.ScrollDispatcher},{type:t.ViewportRuler},{type:o.NgZone},{type:void 0,decorators:[{type:o.Inject,args:[n.DOCUMENT]}]}]},S.ngInjectableDef=o.ɵɵdefineInjectable({factory:function(){return new S(o.ɵɵinject(t.ScrollDispatcher),o.ɵɵinject(t.ViewportRuler),o.ɵɵinject(o.NgZone),o.ɵɵinject(n.DOCUMENT))},token:S,providedIn:\"root\"}),S);function S(e,t,n,r){var i=this;this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this.noop=function(){return new v},this.close=function(e){return new f(i._scrollDispatcher,i._ngZone,i._viewportRuler,e)},this.block=function(){return new p(i._viewportRuler,i._document)},this.reposition=function(e){return new b(i._scrollDispatcher,i._viewportRuler,i._ngZone,e)},this._document=r}function E(){}var O=function(e){var t,n;if(this.scrollStrategy=new v,this.panelClass=\"\",this.hasBackdrop=!1,this.backdropClass=\"cdk-overlay-dark-backdrop\",this.disposeOnNavigation=!1,e){var r=Object.keys(e);try{for(var i=w.__values(r),o=i.next();!o.done;o=i.next()){var a=o.value;void 0!==e[a]&&(this[a]=e[a])}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}}},k=function(e,t,n,r,i){this.offsetX=n,this.offsetY=r,this.panelClass=i,this.originX=e.originX,this.originY=e.originY,this.overlayX=t.overlayX,this.overlayY=t.overlayY},D=(T.ctorParameters=function(){return[{type:k},{type:E,decorators:[{type:o.Optional}]}]},T);function T(e,t){this.connectionPair=e,this.scrollableViewProperties=t}function I(e,t){if(\"top\"!==t&&\"bottom\"!==t&&\"center\"!==t)throw Error(\"ConnectedPosition: Invalid \"+e+' \"'+t+'\". Expected \"top\", \"bottom\" or \"center\".')}function P(e,t){if(\"start\"!==t&&\"end\"!==t&&\"center\"!==t)throw Error(\"ConnectedPosition: Invalid \"+e+' \"'+t+'\". Expected \"start\", \"end\" or \"center\".')}var A=(M.prototype.ngOnDestroy=function(){this._detach()},M.prototype.add=function(e){this.remove(e),this._isAttached||(this._document.body.addEventListener(\"keydown\",this._keydownListener),this._isAttached=!0),this._attachedOverlays.push(e)},M.prototype.remove=function(e){var t=this._attachedOverlays.indexOf(e);-1<t&&this._attachedOverlays.splice(t,1),0===this._attachedOverlays.length&&this._detach()},M.prototype._detach=function(){this._isAttached&&(this._document.body.removeEventListener(\"keydown\",this._keydownListener),this._isAttached=!1)},M.decorators=[{type:o.Injectable,args:[{providedIn:\"root\"}]}],M.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.DOCUMENT]}]}]},M.ngInjectableDef=o.ɵɵdefineInjectable({factory:function(){return new M(o.ɵɵinject(n.DOCUMENT))},token:M,providedIn:\"root\"}),M);function M(e){var r=this;this._attachedOverlays=[],this._keydownListener=function(e){for(var t=r._attachedOverlays,n=t.length-1;-1<n;n--)if(0<t[n]._keydownEventSubscriptions){t[n]._keydownEvents.next(e);break}},this._document=e}function R(e,t){return e||new A(t)}var N={provide:A,deps:[[new o.Optional,new o.SkipSelf,A],n.DOCUMENT],useFactory:R},j=(F.prototype.ngOnDestroy=function(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)},F.prototype.getContainerElement=function(){return this._containerElement||this._createContainer(),this._containerElement},F.prototype._createContainer=function(){for(var e=\"cdk-overlay-container\",t=this._document.getElementsByClassName(e),n=0;n<t.length;n++)t[n].parentNode.removeChild(t[n]);var r=this._document.createElement(\"div\");r.classList.add(e),this._document.body.appendChild(r),this._containerElement=r},F.decorators=[{type:o.Injectable,args:[{providedIn:\"root\"}]}],F.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.DOCUMENT]}]}]},F.ngInjectableDef=o.ɵɵdefineInjectable({factory:function(){return new F(o.ɵɵinject(n.DOCUMENT))},token:F,providedIn:\"root\"}),F);function F(e){this._document=e}function L(e,t){return e||new j(t)}var V={provide:j,deps:[[new o.Optional,new o.SkipSelf,j],n.DOCUMENT],useFactory:L},B=(Object.defineProperty(U.prototype,\"overlayElement\",{get:function(){return this._pane},enumerable:!0,configurable:!0}),Object.defineProperty(U.prototype,\"backdropElement\",{get:function(){return this._backdropElement},enumerable:!0,configurable:!0}),Object.defineProperty(U.prototype,\"hostElement\",{get:function(){return this._host},enumerable:!0,configurable:!0}),U.prototype.attach=function(e){var t=this,n=this._portalOutlet.attach(e);return this._positionStrategy&&this._positionStrategy.attach(this),!this._host.parentElement&&this._previousHostParent&&this._previousHostParent.appendChild(this._host),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._ngZone.onStable.asObservable().pipe(i.take(1)).subscribe(function(){t.hasAttached()&&t.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&this._location&&(this._locationChanges=this._location.subscribe(function(){return t.dispose()})),n},U.prototype.detach=function(){if(this.hasAttached()){this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();var e=this._portalOutlet.detach();return this._detachments.next(),this._keyboardDispatcher.remove(this),this._detachContentWhenStable(),this._locationChanges.unsubscribe(),e}},U.prototype.dispose=function(){var e=this.hasAttached();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._host&&this._host.parentNode&&(this._host.parentNode.removeChild(this._host),this._host=null),this._previousHostParent=this._pane=null,e&&this._detachments.next(),this._detachments.complete()},U.prototype.hasAttached=function(){return this._portalOutlet.hasAttached()},U.prototype.backdropClick=function(){return this._backdropClick.asObservable()},U.prototype.attachments=function(){return this._attachments.asObservable()},U.prototype.detachments=function(){return this._detachments.asObservable()},U.prototype.keydownEvents=function(){return this._keydownEventsObservable},U.prototype.getConfig=function(){return this._config},U.prototype.updatePosition=function(){this._positionStrategy&&this._positionStrategy.apply()},U.prototype.updatePositionStrategy=function(e){e!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=e,this.hasAttached()&&(e.attach(this),this.updatePosition()))},U.prototype.updateSize=function(e){this._config=w.__assign({},this._config,e),this._updateElementSize()},U.prototype.setDirection=function(e){this._config=w.__assign({},this._config,{direction:e}),this._updateElementDirection()},U.prototype.addPanelClass=function(e){this._pane&&this._toggleClasses(this._pane,e,!0)},U.prototype.removePanelClass=function(e){this._pane&&this._toggleClasses(this._pane,e,!1)},U.prototype.getDirection=function(){var e=this._config.direction;return e?\"string\"==typeof e?e:e.value:\"ltr\"},U.prototype.updateScrollStrategy=function(e){e!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=e,this.hasAttached()&&(e.attach(this),e.enable()))},U.prototype._updateElementDirection=function(){this._host.setAttribute(\"dir\",this.getDirection())},U.prototype._updateElementSize=function(){if(this._pane){var e=this._pane.style;e.width=s.coerceCssPixelValue(this._config.width),e.height=s.coerceCssPixelValue(this._config.height),e.minWidth=s.coerceCssPixelValue(this._config.minWidth),e.minHeight=s.coerceCssPixelValue(this._config.minHeight),e.maxWidth=s.coerceCssPixelValue(this._config.maxWidth),e.maxHeight=s.coerceCssPixelValue(this._config.maxHeight)}},U.prototype._togglePointerEvents=function(e){this._pane.style.pointerEvents=e?\"auto\":\"none\"},U.prototype._attachBackdrop=function(){var e=this,t=\"cdk-overlay-backdrop-showing\";this._backdropElement=this._document.createElement(\"div\"),this._backdropElement.classList.add(\"cdk-overlay-backdrop\"),this._config.backdropClass&&this._toggleClasses(this._backdropElement,this._config.backdropClass,!0),this._host.parentElement.insertBefore(this._backdropElement,this._host),this._backdropElement.addEventListener(\"click\",this._backdropClickHandler),\"undefined\"!=typeof requestAnimationFrame?this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){e._backdropElement&&e._backdropElement.classList.add(t)})}):this._backdropElement.classList.add(t)},U.prototype._updateStackingOrder=function(){this._host.nextSibling&&this._host.parentNode.appendChild(this._host)},U.prototype.detachBackdrop=function(){var e=this,t=this._backdropElement;if(t){var n,r=function(){t&&(t.removeEventListener(\"click\",e._backdropClickHandler),t.removeEventListener(\"transitionend\",r),t.parentNode&&t.parentNode.removeChild(t)),e._backdropElement==t&&(e._backdropElement=null),e._config.backdropClass&&e._toggleClasses(t,e._config.backdropClass,!1),clearTimeout(n)};t.classList.remove(\"cdk-overlay-backdrop-showing\"),this._ngZone.runOutsideAngular(function(){t.addEventListener(\"transitionend\",r)}),t.style.pointerEvents=\"none\",n=this._ngZone.runOutsideAngular(function(){return setTimeout(r,500)})}},U.prototype._toggleClasses=function(e,t,n){var r=e.classList;s.coerceArray(t).forEach(function(e){e&&(n?r.add(e):r.remove(e))})},U.prototype._detachContentWhenStable=function(){var t=this;this._ngZone.runOutsideAngular(function(){var e=t._ngZone.onStable.asObservable().pipe(i.takeUntil(u.merge(t._attachments,t._detachments))).subscribe(function(){t._pane&&t._host&&0!==t._pane.children.length||(t._pane&&t._config.panelClass&&t._toggleClasses(t._pane,t._config.panelClass,!1),t._host&&t._host.parentElement&&(t._previousHostParent=t._host.parentElement,t._previousHostParent.removeChild(t._host)),e.unsubscribe())})})},U.prototype._disposeScrollStrategy=function(){var e=this._scrollStrategy;e&&(e.disable(),e.detach&&e.detach())},U);function U(e,t,n,r,i,o,a,s){var l=this;this._portalOutlet=e,this._host=t,this._pane=n,this._config=r,this._ngZone=i,this._keyboardDispatcher=o,this._document=a,this._location=s,this._backdropElement=null,this._backdropClick=new u.Subject,this._attachments=new u.Subject,this._detachments=new u.Subject,this._locationChanges=u.Subscription.EMPTY,this._backdropClickHandler=function(e){return l._backdropClick.next(e)},this._keydownEventsObservable=new u.Observable(function(e){var t=l._keydownEvents.subscribe(e);return l._keydownEventSubscriptions++,function(){t.unsubscribe(),l._keydownEventSubscriptions--}}),this._keydownEvents=new u.Subject,this._keydownEventSubscriptions=0,r.scrollStrategy&&(this._scrollStrategy=r.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=r.positionStrategy}var z=\"cdk-overlay-connected-position-bounding-box\",q=(Object.defineProperty(H.prototype,\"positions\",{get:function(){return this._preferredPositions},enumerable:!0,configurable:!0}),H.prototype.attach=function(e){var t=this;if(this._overlayRef&&e!==this._overlayRef)throw Error(\"This position strategy is already attached to an overlay\");this._validatePositions(),e.hostElement.classList.add(z),this._overlayRef=e,this._boundingBox=e.hostElement,this._pane=e.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(function(){t._isInitialRender=!0,t.apply()})},H.prototype.apply=function(){var t,e,n,r;if(!this._isDisposed&&this._platform.isBrowser)if(!this._isInitialRender&&this._positionLocked&&this._lastPosition)this.reapplyLastPosition();else{this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect();var i,o=this._originRect,a=this._overlayRect,s=this._viewportRect,l=[];try{for(var u=w.__values(this._preferredPositions),c=u.next();!c.done;c=u.next()){var p=c.value,d=this._getOriginPoint(o,p),h=this._getOverlayPoint(d,a,p),f=this._getOverlayFit(h,a,s,p);if(f.isCompletelyWithinViewport)return this._isPushed=!1,void this._applyPosition(p,d);this._canFitWithFlexibleDimensions(f,h,s)?l.push({position:p,origin:d,overlayRect:a,boundingBoxRect:this._calculateBoundingBoxRect(d,p)}):(!i||i.overlayFit.visibleArea<f.visibleArea)&&(i={overlayFit:f,overlayPoint:h,originPoint:d,position:p,overlayRect:a})}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=u.return)&&e.call(u)}finally{if(t)throw t.error}}if(l.length){var m=null,v=-1;try{for(var y=w.__values(l),g=y.next();!g.done;g=y.next()){var _=g.value,b=_.boundingBoxRect.width*_.boundingBoxRect.height*(_.position.weight||1);v<b&&(v=b,m=_)}}catch(e){n={error:e}}finally{try{g&&!g.done&&(r=y.return)&&r.call(y)}finally{if(n)throw n.error}}return this._isPushed=!1,void this._applyPosition(m.position,m.origin)}if(this._canPush)return this._isPushed=!0,void this._applyPosition(i.position,i.originPoint);this._applyPosition(i.position,i.originPoint)}},H.prototype.detach=function(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()},H.prototype.dispose=function(){this._isDisposed||(this._boundingBox&&W(this._boundingBox.style,{top:\"\",left:\"\",right:\"\",bottom:\"\",height:\"\",width:\"\",alignItems:\"\",justifyContent:\"\"}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove(z),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)},H.prototype.reapplyLastPosition=function(){if(!this._isDisposed&&(!this._platform||this._platform.isBrowser)){this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect();var e=this._lastPosition||this._preferredPositions[0],t=this._getOriginPoint(this._originRect,e);this._applyPosition(e,t)}},H.prototype.withScrollableContainers=function(e){return this._scrollables=e,this},H.prototype.withPositions=function(e){return-1===(this._preferredPositions=e).indexOf(this._lastPosition)&&(this._lastPosition=null),this._validatePositions(),this},H.prototype.withViewportMargin=function(e){return this._viewportMargin=e,this},H.prototype.withFlexibleDimensions=function(e){return void 0===e&&(e=!0),this._hasFlexibleDimensions=e,this},H.prototype.withGrowAfterOpen=function(e){return void 0===e&&(e=!0),this._growAfterOpen=e,this},H.prototype.withPush=function(e){return void 0===e&&(e=!0),this._canPush=e,this},H.prototype.withLockedPosition=function(e){return void 0===e&&(e=!0),this._positionLocked=e,this},H.prototype.setOrigin=function(e){return this._origin=e,this},H.prototype.withDefaultOffsetX=function(e){return this._offsetX=e,this},H.prototype.withDefaultOffsetY=function(e){return this._offsetY=e,this},H.prototype.withTransformOriginOn=function(e){return this._transformOriginSelector=e,this},H.prototype._getOriginPoint=function(e,t){var n;if(\"center\"==t.originX)n=e.left+e.width/2;else{var r=this._isRtl()?e.right:e.left,i=this._isRtl()?e.left:e.right;n=\"start\"==t.originX?r:i}return{x:n,y:\"center\"==t.originY?e.top+e.height/2:\"top\"==t.originY?e.top:e.bottom}},H.prototype._getOverlayPoint=function(e,t,n){var r,i;return r=\"center\"==n.overlayX?-t.width/2:\"start\"===n.overlayX?this._isRtl()?-t.width:0:this._isRtl()?0:-t.width,i=\"center\"==n.overlayY?-t.height/2:\"top\"==n.overlayY?0:-t.height,{x:e.x+r,y:e.y+i}},H.prototype._getOverlayFit=function(e,t,n,r){var i=e.x,o=e.y,a=this._getOffset(r,\"x\"),s=this._getOffset(r,\"y\");a&&(i+=a),s&&(o+=s);var l=0-i,u=i+t.width-n.width,c=0-o,p=o+t.height-n.height,d=this._subtractOverflows(t.width,l,u),h=this._subtractOverflows(t.height,c,p),f=d*h;return{visibleArea:f,isCompletelyWithinViewport:t.width*t.height==f,fitsInViewportVertically:h===t.height,fitsInViewportHorizontally:d==t.width}},H.prototype._canFitWithFlexibleDimensions=function(e,t,n){if(this._hasFlexibleDimensions){var r=n.bottom-t.y,i=n.right-t.x,o=this._overlayRef.getConfig().minHeight,a=this._overlayRef.getConfig().minWidth,s=e.fitsInViewportVertically||null!=o&&o<=r,l=e.fitsInViewportHorizontally||null!=a&&a<=i;return s&&l}return!1},H.prototype._pushOverlayOnScreen=function(e,t,n){if(this._previousPushAmount&&this._positionLocked)return{x:e.x+this._previousPushAmount.x,y:e.y+this._previousPushAmount.y};var r=this._viewportRect,i=Math.max(e.x+t.width-r.right,0),o=Math.max(e.y+t.height-r.bottom,0),a=Math.max(r.top-n.top-e.y,0),s=Math.max(r.left-n.left-e.x,0),l=0,u=0;return l=t.width<=r.width?s||-i:e.x<this._viewportMargin?r.left-n.left-e.x:0,u=t.height<=r.height?a||-o:e.y<this._viewportMargin?r.top-n.top-e.y:0,this._previousPushAmount={x:l,y:u},{x:e.x+l,y:e.y+u}},H.prototype._applyPosition=function(e,t){if(this._setTransformOrigin(e),this._setOverlayElementStyles(t,e),this._setBoundingBoxStyles(t,e),e.panelClass&&this._addPanelClasses(e.panelClass),this._lastPosition=e,this._positionChanges.observers.length){var n=this._getScrollVisibility(),r=new D(e,n);this._positionChanges.next(r)}this._isInitialRender=!1},H.prototype._setTransformOrigin=function(e){if(this._transformOriginSelector){var t,n=this._boundingBox.querySelectorAll(this._transformOriginSelector),r=e.overlayY;t=\"center\"===e.overlayX?\"center\":this._isRtl()?\"start\"===e.overlayX?\"right\":\"left\":\"start\"===e.overlayX?\"left\":\"right\";for(var i=0;i<n.length;i++)n[i].style.transformOrigin=t+\" \"+r}},H.prototype._calculateBoundingBoxRect=function(e,t){var n,r,i,o=this._viewportRect,a=this._isRtl();if(\"top\"===t.overlayY)r=e.y,n=o.height-r+this._viewportMargin;else if(\"bottom\"===t.overlayY)i=o.height-e.y+2*this._viewportMargin,n=o.height-i+this._viewportMargin;else{var s=Math.min(o.bottom-e.y+o.top,e.y),l=this._lastBoundingBoxSize.height;n=2*s,r=e.y-s,l<n&&!this._isInitialRender&&!this._growAfterOpen&&(r=e.y-l/2)}var u,c,p,d=\"start\"===t.overlayX&&!a||\"end\"===t.overlayX&&a;if(\"end\"===t.overlayX&&!a||\"start\"===t.overlayX&&a)p=o.width-e.x+this._viewportMargin,u=e.x-this._viewportMargin;else if(d)c=e.x,u=o.right-e.x;else{s=Math.min(o.right-e.x+o.left,e.x);var h=this._lastBoundingBoxSize.width;u=2*s,c=e.x-s,h<u&&!this._isInitialRender&&!this._growAfterOpen&&(c=e.x-h/2)}return{top:r,left:c,bottom:i,right:p,width:u,height:n}},H.prototype._setBoundingBoxStyles=function(e,t){var n=this._calculateBoundingBoxRect(e,t);this._isInitialRender||this._growAfterOpen||(n.height=Math.min(n.height,this._lastBoundingBoxSize.height),n.width=Math.min(n.width,this._lastBoundingBoxSize.width));var r={};if(this._hasExactPosition())r.top=r.left=\"0\",r.bottom=r.right=\"\",r.width=r.height=\"100%\";else{var i=this._overlayRef.getConfig().maxHeight,o=this._overlayRef.getConfig().maxWidth;r.height=s.coerceCssPixelValue(n.height),r.top=s.coerceCssPixelValue(n.top),r.bottom=s.coerceCssPixelValue(n.bottom),r.width=s.coerceCssPixelValue(n.width),r.left=s.coerceCssPixelValue(n.left),r.right=s.coerceCssPixelValue(n.right),\"center\"===t.overlayX?r.alignItems=\"center\":r.alignItems=\"end\"===t.overlayX?\"flex-end\":\"flex-start\",\"center\"===t.overlayY?r.justifyContent=\"center\":r.justifyContent=\"bottom\"===t.overlayY?\"flex-end\":\"flex-start\",i&&(r.maxHeight=s.coerceCssPixelValue(i)),o&&(r.maxWidth=s.coerceCssPixelValue(o))}this._lastBoundingBoxSize=n,W(this._boundingBox.style,r)},H.prototype._resetBoundingBoxStyles=function(){W(this._boundingBox.style,{top:\"0\",left:\"0\",right:\"0\",bottom:\"0\",height:\"\",width:\"\",alignItems:\"\",justifyContent:\"\"})},H.prototype._resetOverlayElementStyles=function(){W(this._pane.style,{top:\"\",left:\"\",bottom:\"\",right:\"\",position:\"\",transform:\"\"})},H.prototype._setOverlayElementStyles=function(e,t){var n={};if(this._hasExactPosition()){var r=this._viewportRuler.getViewportScrollPosition();W(n,this._getExactOverlayY(t,e,r)),W(n,this._getExactOverlayX(t,e,r))}else n.position=\"static\";var i=\"\",o=this._getOffset(t,\"x\"),a=this._getOffset(t,\"y\");o&&(i+=\"translateX(\"+o+\"px) \"),a&&(i+=\"translateY(\"+a+\"px)\"),n.transform=i.trim(),this._hasFlexibleDimensions&&this._overlayRef.getConfig().maxHeight&&(n.maxHeight=\"\"),this._hasFlexibleDimensions&&this._overlayRef.getConfig().maxWidth&&(n.maxWidth=\"\"),W(this._pane.style,n)},H.prototype._getExactOverlayY=function(e,t,n){var r={top:null,bottom:null},i=this._getOverlayPoint(t,this._overlayRect,e);this._isPushed&&(i=this._pushOverlayOnScreen(i,this._overlayRect,n));var o=this._overlayContainer.getContainerElement().getBoundingClientRect().top;if(i.y-=o,\"bottom\"===e.overlayY){var a=this._document.documentElement.clientHeight;r.bottom=a-(i.y+this._overlayRect.height)+\"px\"}else r.top=s.coerceCssPixelValue(i.y);return r},H.prototype._getExactOverlayX=function(e,t,n){var r={left:null,right:null},i=this._getOverlayPoint(t,this._overlayRect,e);if(this._isPushed&&(i=this._pushOverlayOnScreen(i,this._overlayRect,n)),\"right\"==(this._isRtl()?\"end\"===e.overlayX?\"left\":\"right\":\"end\"===e.overlayX?\"right\":\"left\")){var o=this._document.documentElement.clientWidth;r.right=o-(i.x+this._overlayRect.width)+\"px\"}else r.left=s.coerceCssPixelValue(i.x);return r},H.prototype._getScrollVisibility=function(){var e=this._getOriginRect(),t=this._pane.getBoundingClientRect(),n=this._scrollables.map(function(e){return e.getElementRef().nativeElement.getBoundingClientRect()});return{isOriginClipped:_(e,n),isOriginOutsideView:g(e,n),isOverlayClipped:_(t,n),isOverlayOutsideView:g(t,n)}},H.prototype._subtractOverflows=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce(function(e,t){return e-Math.max(t,0)},e)},H.prototype._getNarrowedViewportRect=function(){var e=this._document.documentElement.clientWidth,t=this._document.documentElement.clientHeight,n=this._viewportRuler.getViewportScrollPosition();return{top:n.top+this._viewportMargin,left:n.left+this._viewportMargin,right:n.left+e-this._viewportMargin,bottom:n.top+t-this._viewportMargin,width:e-2*this._viewportMargin,height:t-2*this._viewportMargin}},H.prototype._isRtl=function(){return\"rtl\"===this._overlayRef.getDirection()},H.prototype._hasExactPosition=function(){return!this._hasFlexibleDimensions||this._isPushed},H.prototype._getOffset=function(e,t){return\"x\"===t?null==e.offsetX?this._offsetX:e.offsetX:null==e.offsetY?this._offsetY:e.offsetY},H.prototype._validatePositions=function(){if(!this._preferredPositions.length)throw Error(\"FlexibleConnectedPositionStrategy: At least one position is required.\");this._preferredPositions.forEach(function(e){P(\"originX\",e.originX),I(\"originY\",e.originY),P(\"overlayX\",e.overlayX),I(\"overlayY\",e.overlayY)})},H.prototype._addPanelClasses=function(e){var t=this;this._pane&&s.coerceArray(e).forEach(function(e){\"\"!==e&&-1===t._appliedPanelClasses.indexOf(e)&&(t._appliedPanelClasses.push(e),t._pane.classList.add(e))})},H.prototype._clearPanelClasses=function(){var t=this;this._pane&&(this._appliedPanelClasses.forEach(function(e){t._pane.classList.remove(e)}),this._appliedPanelClasses=[])},H.prototype._getOriginRect=function(){var e=this._origin;if(e instanceof o.ElementRef)return e.nativeElement.getBoundingClientRect();if(e instanceof HTMLElement)return e.getBoundingClientRect();var t=e.width||0,n=e.height||0;return{top:e.y,bottom:e.y+n,left:e.x,right:e.x+t,height:n,width:t}},H);function H(e,t,n,r,i){this._viewportRuler=t,this._document=n,this._platform=r,this._overlayContainer=i,this._lastBoundingBoxSize={width:0,height:0},this._isPushed=!1,this._canPush=!0,this._growAfterOpen=!1,this._hasFlexibleDimensions=!0,this._positionLocked=!1,this._viewportMargin=0,this._scrollables=[],this._preferredPositions=[],this._positionChanges=new u.Subject,this._resizeSubscription=u.Subscription.EMPTY,this._offsetX=0,this._offsetY=0,this._appliedPanelClasses=[],this.positionChanges=this._positionChanges.asObservable(),this.setOrigin(e)}function W(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var G=(Object.defineProperty(Y.prototype,\"_isRtl\",{get:function(){return\"rtl\"===this._overlayRef.getDirection()},enumerable:!0,configurable:!0}),Object.defineProperty(Y.prototype,\"onPositionChange\",{get:function(){return this._positionStrategy.positionChanges},enumerable:!0,configurable:!0}),Object.defineProperty(Y.prototype,\"positions\",{get:function(){return this._preferredPositions},enumerable:!0,configurable:!0}),Y.prototype.attach=function(e){this._overlayRef=e,this._positionStrategy.attach(e),this._direction&&(e.setDirection(this._direction),this._direction=null)},Y.prototype.dispose=function(){this._positionStrategy.dispose()},Y.prototype.detach=function(){this._positionStrategy.detach()},Y.prototype.apply=function(){this._positionStrategy.apply()},Y.prototype.recalculateLastPosition=function(){this._positionStrategy.reapplyLastPosition()},Y.prototype.withScrollableContainers=function(e){this._positionStrategy.withScrollableContainers(e)},Y.prototype.withFallbackPosition=function(e,t,n,r){var i=new k(e,t,n,r);return this._preferredPositions.push(i),this._positionStrategy.withPositions(this._preferredPositions),this},Y.prototype.withDirection=function(e){return this._overlayRef?this._overlayRef.setDirection(e):this._direction=e,this},Y.prototype.withOffsetX=function(e){return this._positionStrategy.withDefaultOffsetX(e),this},Y.prototype.withOffsetY=function(e){return this._positionStrategy.withDefaultOffsetY(e),this},Y.prototype.withLockedPosition=function(e){return this._positionStrategy.withLockedPosition(e),this},Y.prototype.withPositions=function(e){return this._preferredPositions=e.slice(),this._positionStrategy.withPositions(this._preferredPositions),this},Y.prototype.setOrigin=function(e){return this._positionStrategy.setOrigin(e),this},Y);function Y(e,t,n,r,i,o,a){this._preferredPositions=[],this._positionStrategy=new q(n,r,i,o,a).withFlexibleDimensions(!1).withPush(!1).withViewportMargin(0),this.withFallbackPosition(e,t)}var K=\"cdk-global-overlay-wrapper\",Z=(Q.prototype.attach=function(e){var t=e.getConfig();this._overlayRef=e,this._width&&!t.width&&e.updateSize({width:this._width}),this._height&&!t.height&&e.updateSize({height:this._height}),e.hostElement.classList.add(K),this._isDisposed=!1},Q.prototype.top=function(e){return void 0===e&&(e=\"\"),this._bottomOffset=\"\",this._topOffset=e,this._alignItems=\"flex-start\",this},Q.prototype.left=function(e){return void 0===e&&(e=\"\"),this._rightOffset=\"\",this._leftOffset=e,this._justifyContent=\"flex-start\",this},Q.prototype.bottom=function(e){return void 0===e&&(e=\"\"),this._topOffset=\"\",this._bottomOffset=e,this._alignItems=\"flex-end\",this},Q.prototype.right=function(e){return void 0===e&&(e=\"\"),this._leftOffset=\"\",this._rightOffset=e,this._justifyContent=\"flex-end\",this},Q.prototype.width=function(e){return void 0===e&&(e=\"\"),this._overlayRef?this._overlayRef.updateSize({width:e}):this._width=e,this},Q.prototype.height=function(e){return void 0===e&&(e=\"\"),this._overlayRef?this._overlayRef.updateSize({height:e}):this._height=e,this},Q.prototype.centerHorizontally=function(e){return void 0===e&&(e=\"\"),this.left(e),this._justifyContent=\"center\",this},Q.prototype.centerVertically=function(e){return void 0===e&&(e=\"\"),this.top(e),this._alignItems=\"center\",this},Q.prototype.apply=function(){if(this._overlayRef&&this._overlayRef.hasAttached()){var e=this._overlayRef.overlayElement.style,t=this._overlayRef.hostElement.style,n=this._overlayRef.getConfig();e.position=this._cssPosition,e.marginLeft=\"100%\"===n.width?\"0\":this._leftOffset,e.marginTop=\"100%\"===n.height?\"0\":this._topOffset,e.marginBottom=this._bottomOffset,e.marginRight=this._rightOffset,\"100%\"===n.width?t.justifyContent=\"flex-start\":\"center\"===this._justifyContent?t.justifyContent=\"center\":\"rtl\"===this._overlayRef.getConfig().direction?\"flex-start\"===this._justifyContent?t.justifyContent=\"flex-end\":\"flex-end\"===this._justifyContent&&(t.justifyContent=\"flex-start\"):t.justifyContent=this._justifyContent,t.alignItems=\"100%\"===n.height?\"flex-start\":this._alignItems}},Q.prototype.dispose=function(){if(!this._isDisposed&&this._overlayRef){var e=this._overlayRef.overlayElement.style,t=this._overlayRef.hostElement,n=t.style;t.classList.remove(K),n.justifyContent=n.alignItems=e.marginTop=e.marginBottom=e.marginLeft=e.marginRight=e.position=\"\",this._overlayRef=null,this._isDisposed=!0}},Q);function Q(){this._cssPosition=\"static\",this._topOffset=\"\",this._bottomOffset=\"\",this._leftOffset=\"\",this._rightOffset=\"\",this._alignItems=\"\",this._justifyContent=\"\",this._width=\"\",this._height=\"\"}var X=($.prototype.global=function(){return new Z},$.prototype.connectedTo=function(e,t,n){return new G(t,n,e,this._viewportRuler,this._document,this._platform,this._overlayContainer)},$.prototype.flexibleConnectedTo=function(e){return new q(e,this._viewportRuler,this._document,this._platform,this._overlayContainer)},$.decorators=[{type:o.Injectable,args:[{providedIn:\"root\"}]}],$.ctorParameters=function(){return[{type:t.ViewportRuler},{type:void 0,decorators:[{type:o.Inject,args:[n.DOCUMENT]}]},{type:l.Platform},{type:j}]},$.ngInjectableDef=o.ɵɵdefineInjectable({factory:function(){return new $(o.ɵɵinject(t.ViewportRuler),o.ɵɵinject(n.DOCUMENT),o.ɵɵinject(l.Platform),o.ɵɵinject(j))},token:$,providedIn:\"root\"}),$);function $(e,t,n,r){this._viewportRuler=e,this._document=t,this._platform=n,this._overlayContainer=r}var J=0,ee=(te.prototype.create=function(e){var t=this._createHostElement(),n=this._createPaneElement(t),r=this._createPortalOutlet(n),i=new O(e);return i.direction=i.direction||this._directionality.value,new B(r,t,n,i,this._ngZone,this._keyboardDispatcher,this._document,this._location)},te.prototype.position=function(){return this._positionBuilder},te.prototype._createPaneElement=function(e){var t=this._document.createElement(\"div\");return t.id=\"cdk-overlay-\"+J++,t.classList.add(\"cdk-overlay-pane\"),e.appendChild(t),t},te.prototype._createHostElement=function(){var e=this._document.createElement(\"div\");return this._overlayContainer.getContainerElement().appendChild(e),e},te.prototype._createPortalOutlet=function(e){return this._appRef||(this._appRef=this._injector.get(o.ApplicationRef)),new a.DomPortalOutlet(e,this._componentFactoryResolver,this._appRef,this._injector)},te.decorators=[{type:o.Injectable}],te.ctorParameters=function(){return[{type:C},{type:j},{type:o.ComponentFactoryResolver},{type:X},{type:A},{type:o.Injector},{type:o.NgZone},{type:void 0,decorators:[{type:o.Inject,args:[n.DOCUMENT]}]},{type:r.Directionality},{type:n.Location,decorators:[{type:o.Optional}]}]},te);function te(e,t,n,r,i,o,a,s,l,u){this.scrollStrategies=e,this._overlayContainer=t,this._componentFactoryResolver=n,this._positionBuilder=r,this._keyboardDispatcher=i,this._injector=o,this._ngZone=a,this._document=s,this._directionality=l,this._location=u}var ne=[{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\"}],re=new o.InjectionToken(\"cdk-connected-overlay-scroll-strategy\");var ie=(oe.decorators=[{type:o.Directive,args:[{selector:\"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\",exportAs:\"cdkOverlayOrigin\"}]}],oe.ctorParameters=function(){return[{type:o.ElementRef}]},oe);function oe(e){this.elementRef=e}var ae=(Object.defineProperty(se.prototype,\"offsetX\",{get:function(){return this._offsetX},set:function(e){this._offsetX=e,this._position&&this._updatePositionStrategy(this._position)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"offsetY\",{get:function(){return this._offsetY},set:function(e){this._offsetY=e,this._position&&this._updatePositionStrategy(this._position)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"hasBackdrop\",{get:function(){return this._hasBackdrop},set:function(e){this._hasBackdrop=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"lockPosition\",{get:function(){return this._lockPosition},set:function(e){this._lockPosition=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"flexibleDimensions\",{get:function(){return this._flexibleDimensions},set:function(e){this._flexibleDimensions=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"growAfterOpen\",{get:function(){return this._growAfterOpen},set:function(e){this._growAfterOpen=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"push\",{get:function(){return this._push},set:function(e){this._push=s.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"overlayRef\",{get:function(){return this._overlayRef},enumerable:!0,configurable:!0}),Object.defineProperty(se.prototype,\"dir\",{get:function(){return this._dir?this._dir.value:\"ltr\"},enumerable:!0,configurable:!0}),se.prototype.ngOnDestroy=function(){this._overlayRef&&this._overlayRef.dispose(),this._backdropSubscription.unsubscribe()},se.prototype.ngOnChanges=function(e){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef.updateSize({width:this.width,minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),e.origin&&this.open&&this._position.apply()),e.open&&(this.open?this._attachOverlay():this._detachOverlay())},se.prototype._createOverlay=function(){var t=this;this.positions&&this.positions.length||(this.positions=ne),this._overlayRef=this._overlay.create(this._buildConfig()),this._overlayRef.keydownEvents().subscribe(function(e){t.overlayKeydown.next(e),e.keyCode!==c.ESCAPE||c.hasModifierKey(e)||(e.preventDefault(),t._detachOverlay())})},se.prototype._buildConfig=function(){var e=this._position=this._createPositionStrategy(),t=new O({direction:this._dir,positionStrategy:e,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop});return!this.width&&0!==this.width||(t.width=this.width),!this.height&&0!==this.height||(t.height=this.height),!this.minWidth&&0!==this.minWidth||(t.minWidth=this.minWidth),!this.minHeight&&0!==this.minHeight||(t.minHeight=this.minHeight),this.backdropClass&&(t.backdropClass=this.backdropClass),this.panelClass&&(t.panelClass=this.panelClass),t},se.prototype._updatePositionStrategy=function(e){var t=this,n=this.positions.map(function(e){return{originX:e.originX,originY:e.originY,overlayX:e.overlayX,overlayY:e.overlayY,offsetX:e.offsetX||t.offsetX,offsetY:e.offsetY||t.offsetY,panelClass:e.panelClass||void 0}});return e.setOrigin(this.origin.elementRef).withPositions(n).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition)},se.prototype._createPositionStrategy=function(){var t=this,e=this._overlay.position().flexibleConnectedTo(this.origin.elementRef);return this._updatePositionStrategy(e),e.positionChanges.subscribe(function(e){return t.positionChange.emit(e)}),e},se.prototype._attachOverlay=function(){var t=this;this._overlayRef?this._overlayRef.getConfig().hasBackdrop=this.hasBackdrop:this._createOverlay(),this._overlayRef.hasAttached()||(this._overlayRef.attach(this._templatePortal),this.attach.emit()),this.hasBackdrop?this._backdropSubscription=this._overlayRef.backdropClick().subscribe(function(e){t.backdropClick.emit(e)}):this._backdropSubscription.unsubscribe()},se.prototype._detachOverlay=function(){this._overlayRef&&(this._overlayRef.detach(),this.detach.emit()),this._backdropSubscription.unsubscribe()},se.decorators=[{type:o.Directive,args:[{selector:\"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\",exportAs:\"cdkConnectedOverlay\"}]}],se.ctorParameters=function(){return[{type:ee},{type:o.TemplateRef},{type:o.ViewContainerRef},{type:void 0,decorators:[{type:o.Inject,args:[re]}]},{type:r.Directionality,decorators:[{type:o.Optional}]}]},se.propDecorators={origin:[{type:o.Input,args:[\"cdkConnectedOverlayOrigin\"]}],positions:[{type:o.Input,args:[\"cdkConnectedOverlayPositions\"]}],offsetX:[{type:o.Input,args:[\"cdkConnectedOverlayOffsetX\"]}],offsetY:[{type:o.Input,args:[\"cdkConnectedOverlayOffsetY\"]}],width:[{type:o.Input,args:[\"cdkConnectedOverlayWidth\"]}],height:[{type:o.Input,args:[\"cdkConnectedOverlayHeight\"]}],minWidth:[{type:o.Input,args:[\"cdkConnectedOverlayMinWidth\"]}],minHeight:[{type:o.Input,args:[\"cdkConnectedOverlayMinHeight\"]}],backdropClass:[{type:o.Input,args:[\"cdkConnectedOverlayBackdropClass\"]}],panelClass:[{type:o.Input,args:[\"cdkConnectedOverlayPanelClass\"]}],viewportMargin:[{type:o.Input,args:[\"cdkConnectedOverlayViewportMargin\"]}],scrollStrategy:[{type:o.Input,args:[\"cdkConnectedOverlayScrollStrategy\"]}],open:[{type:o.Input,args:[\"cdkConnectedOverlayOpen\"]}],hasBackdrop:[{type:o.Input,args:[\"cdkConnectedOverlayHasBackdrop\"]}],lockPosition:[{type:o.Input,args:[\"cdkConnectedOverlayLockPosition\"]}],flexibleDimensions:[{type:o.Input,args:[\"cdkConnectedOverlayFlexibleDimensions\"]}],growAfterOpen:[{type:o.Input,args:[\"cdkConnectedOverlayGrowAfterOpen\"]}],push:[{type:o.Input,args:[\"cdkConnectedOverlayPush\"]}],backdropClick:[{type:o.Output}],positionChange:[{type:o.Output}],attach:[{type:o.Output}],detach:[{type:o.Output}],overlayKeydown:[{type:o.Output}]},se);function se(e,t,n,r,i){this._overlay=e,this._dir=i,this._hasBackdrop=!1,this._lockPosition=!1,this._growAfterOpen=!1,this._flexibleDimensions=!1,this._push=!1,this._backdropSubscription=u.Subscription.EMPTY,this.viewportMargin=0,this.open=!1,this.backdropClick=new o.EventEmitter,this.positionChange=new o.EventEmitter,this.attach=new o.EventEmitter,this.detach=new o.EventEmitter,this.overlayKeydown=new o.EventEmitter,this._templatePortal=new a.TemplatePortal(t,n),this._scrollStrategyFactory=r,this.scrollStrategy=this._scrollStrategyFactory()}function le(e){return function(){return e.scrollStrategies.reposition()}}var ue={provide:re,deps:[ee],useFactory:le},ce=(pe.decorators=[{type:o.NgModule,args:[{imports:[r.BidiModule,a.PortalModule,t.ScrollingModule],exports:[ae,ie,t.ScrollingModule],declarations:[ae,ie],providers:[ee,ue]}]}],pe);function pe(){}var de,he=[ee,X,N,t.VIEWPORT_RULER_PROVIDER,V,ue],fe=(de=j,w.__extends(me,de),me.prototype.ngOnDestroy=function(){de.prototype.ngOnDestroy.call(this),this._fullScreenEventName&&this._fullScreenListener&&this._document.removeEventListener(this._fullScreenEventName,this._fullScreenListener)},me.prototype._createContainer=function(){var e=this;de.prototype._createContainer.call(this),this._adjustParentForFullscreenChange(),this._addFullscreenChangeListener(function(){return e._adjustParentForFullscreenChange()})},me.prototype._adjustParentForFullscreenChange=function(){this._containerElement&&(this.getFullscreenElement()||this._document.body).appendChild(this._containerElement)},me.prototype._addFullscreenChangeListener=function(e){var t=this._getEventName();t&&(this._fullScreenListener&&this._document.removeEventListener(t,this._fullScreenListener),this._document.addEventListener(t,e),this._fullScreenListener=e)},me.prototype._getEventName=function(){if(!this._fullScreenEventName){var e=this._document;e.fullscreenEnabled?this._fullScreenEventName=\"fullscreenchange\":e.webkitFullscreenEnabled?this._fullScreenEventName=\"webkitfullscreenchange\":e.mozFullScreenEnabled?this._fullScreenEventName=\"mozfullscreenchange\":e.msFullscreenEnabled&&(this._fullScreenEventName=\"MSFullscreenChange\")}return this._fullScreenEventName},me.prototype.getFullscreenElement=function(){var e=this._document;return e.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null},me.decorators=[{type:o.Injectable,args:[{providedIn:\"root\"}]}],me.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.DOCUMENT]}]}]},me.ngInjectableDef=o.ɵɵdefineInjectable({factory:function(){return new me(o.ɵɵinject(n.DOCUMENT))},token:me,providedIn:\"root\"}),me);function me(e){return de.call(this,e)||this}e.ViewportRuler=t.ViewportRuler,e.VIEWPORT_RULER_PROVIDER=t.VIEWPORT_RULER_PROVIDER,e.CdkScrollable=t.CdkScrollable,e.ScrollDispatcher=t.ScrollDispatcher,e.ɵangular_material_src_cdk_overlay_overlay_g=N,e.ɵangular_material_src_cdk_overlay_overlay_f=R,e.ɵangular_material_src_cdk_overlay_overlay_b=V,e.ɵangular_material_src_cdk_overlay_overlay_a=L,e.ɵangular_material_src_cdk_overlay_overlay_c=re,e.ɵangular_material_src_cdk_overlay_overlay_e=ue,e.ɵangular_material_src_cdk_overlay_overlay_d=le,e.Overlay=ee,e.OverlayContainer=j,e.CdkOverlayOrigin=ie,e.CdkConnectedOverlay=ae,e.FullscreenOverlayContainer=fe,e.OverlayRef=B,e.OverlayKeyboardDispatcher=A,e.OverlayPositionBuilder=X,e.GlobalPositionStrategy=Z,e.ConnectedPositionStrategy=G,e.FlexibleConnectedPositionStrategy=q,e.OverlayConfig=O,e.ConnectionPositionPair=k,e.ScrollingVisibility=E,e.ConnectedOverlayPositionChange=D,e.validateVerticalPosition=I,e.validateHorizontalPosition=P,e.ScrollStrategyOptions=C,e.RepositionScrollStrategy=b,e.CloseScrollStrategy=f,e.NoopScrollStrategy=v,e.BlockScrollStrategy=p,e.OverlayModule=ce,e.OVERLAY_PROVIDERS=he,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/cdk/platform\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/cdk/coercion\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-layout.umd.js\",[\"@angular/core\",\"@angular/cdk/platform\",\"rxjs\",\"rxjs/operators\",\"@angular/cdk/coercion\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/cdk/platform\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/cdk/coercion\"))})}(0,function(e,t,n,i,o,a){\"use strict\";var r=(s.decorators=[{type:t.NgModule,args:[{}]}],s);function s(){}var l,u=new Set,c=(p.prototype.matchMedia=function(e){return this._platform.WEBKIT&&function(e){if(!u.has(e))try{l||((l=document.createElement(\"style\")).setAttribute(\"type\",\"text/css\"),document.head.appendChild(l)),l.sheet&&(l.sheet.insertRule(\"@media \"+e+\" {.fx-query-test{ }}\",0),u.add(e))}catch(e){console.error(e)}}(e),this._matchMedia(e)},p.decorators=[{type:t.Injectable,args:[{providedIn:\"root\"}]}],p.ctorParameters=function(){return[{type:n.Platform}]},p.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new p(t.ɵɵinject(n.Platform))},token:p,providedIn:\"root\"}),p);function p(e){this._platform=e,this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):d}function d(e){return{matches:\"all\"===e||\"\"===e,media:e,addListener:function(){},removeListener:function(){}}}var h=(f.prototype.ngOnDestroy=function(){this._destroySubject.next(),this._destroySubject.complete()},f.prototype.isMatched=function(e){var t=this;return m(a.coerceArray(e)).some(function(e){return t._registerQuery(e).mql.matches})},f.prototype.observe=function(e){var t=this,n=m(a.coerceArray(e)).map(function(e){return t._registerQuery(e).observable}),r=i.combineLatest(n);return(r=i.concat(r.pipe(o.take(1)),r.pipe(o.skip(1),o.debounceTime(0)))).pipe(o.map(function(e){var t={matches:!1,breakpoints:{}};return e.forEach(function(e){t.matches=t.matches||e.matches,t.breakpoints[e.query]=e.matches}),t}))},f.prototype._registerQuery=function(t){var n=this;if(this._queries.has(t))return this._queries.get(t);var r=this._mediaMatcher.matchMedia(t),e={observable:new i.Observable(function(t){function e(e){return n._zone.run(function(){return t.next(e)})}return r.addListener(e),function(){r.removeListener(e)}}).pipe(o.startWith(r),o.map(function(e){return{query:t,matches:e.matches}}),o.takeUntil(this._destroySubject)),mql:r};return this._queries.set(t,e),e},f.decorators=[{type:t.Injectable,args:[{providedIn:\"root\"}]}],f.ctorParameters=function(){return[{type:c},{type:t.NgZone}]},f.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new f(t.ɵɵinject(c),t.ɵɵinject(t.NgZone))},token:f,providedIn:\"root\"}),f);function f(e,t){this._mediaMatcher=e,this._zone=t,this._queries=new Map,this._destroySubject=new i.Subject}function m(e){return e.map(function(e){return e.split(\",\")}).reduce(function(e,t){return e.concat(t)}).map(function(e){return e.trim()})}e.LayoutModule=r,e.BreakpointObserver=h,e.Breakpoints={XSmall:\"(max-width: 599.99px)\",Small:\"(min-width: 600px) and (max-width: 959.99px)\",Medium:\"(min-width: 960px) and (max-width: 1279.99px)\",Large:\"(min-width: 1280px) and (max-width: 1919.99px)\",XLarge:\"(min-width: 1920px)\",Handset:\"(max-width: 599.99px) and (orientation: portrait), (max-width: 959.99px) and (orientation: landscape)\",Tablet:\"(min-width: 600px) and (max-width: 839.99px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279.99px) and (orientation: landscape)\",Web:\"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)\",HandsetPortrait:\"(max-width: 599.99px) and (orientation: portrait)\",TabletPortrait:\"(min-width: 600px) and (max-width: 839.99px) and (orientation: portrait)\",WebPortrait:\"(min-width: 840px) and (orientation: portrait)\",HandsetLandscape:\"(max-width: 959.99px) and (orientation: landscape)\",TabletLandscape:\"(min-width: 960px) and (max-width: 1279.99px) and (orientation: landscape)\",WebLandscape:\"(min-width: 1280px) and (orientation: landscape)\"},e.MediaMatcher=c,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-portal.umd.js\",[\"tslib\",\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/core\"))})}(0,function(e,t,r){\"use strict\";function n(){throw Error(\"Host already has a portal attached\")}var i=(o.prototype.attach=function(e){return null==e&&function(){throw Error(\"Attempting to attach a portal to a null PortalOutlet\")}(),e.hasAttached()&&n(),(this._attachedHost=e).attach(this)},o.prototype.detach=function(){var e=this._attachedHost;null==e?function(){throw Error(\"Attempting to detach a portal that is not attached to a host\")}():(this._attachedHost=null,e.detach())},Object.defineProperty(o.prototype,\"isAttached\",{get:function(){return null!=this._attachedHost},enumerable:!0,configurable:!0}),o.prototype.setAttachedHost=function(e){this._attachedHost=e},o);function o(){}var a,s=(a=i,t.__extends(l,a),l);function l(e,t,n,r){var i=a.call(this)||this;return i.component=e,i.viewContainerRef=t,i.injector=n,i.componentFactoryResolver=r,i}var u,c=(u=i,t.__extends(p,u),Object.defineProperty(p.prototype,\"origin\",{get:function(){return this.templateRef.elementRef},enumerable:!0,configurable:!0}),p.prototype.attach=function(e,t){return void 0===t&&(t=this.context),this.context=t,u.prototype.attach.call(this,e)},p.prototype.detach=function(){return this.context=void 0,u.prototype.detach.call(this)},p);function p(e,t,n){var r=u.call(this)||this;return r.templateRef=e,r.viewContainerRef=t,r.context=n,r}var d=(h.prototype.hasAttached=function(){return!!this._attachedPortal},h.prototype.attach=function(e){return e||function(){throw Error(\"Must provide a portal to attach\")}(),this.hasAttached()&&n(),this._isDisposed&&function(){throw Error(\"This PortalOutlet has already been disposed\")}(),e instanceof s?(this._attachedPortal=e,this.attachComponentPortal(e)):e instanceof c?(this._attachedPortal=e,this.attachTemplatePortal(e)):void function(){throw Error(\"Attempting to attach an unknown Portal type. BasePortalOutlet accepts either a ComponentPortal or a TemplatePortal.\")}()},h.prototype.detach=function(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()},h.prototype.dispose=function(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0},h.prototype.setDisposeFn=function(e){this._disposeFn=e},h.prototype._invokeDisposeFn=function(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)},h);function h(){this._isDisposed=!1}var f,m=(f=d,t.__extends(v,f),v);function v(){return null!==f&&f.apply(this,arguments)||this}var y,g=(y=d,t.__extends(_,y),_.prototype.attachComponentPortal=function(e){var t,n=this,r=(e.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(e.component);return e.viewContainerRef?(t=e.viewContainerRef.createComponent(r,e.viewContainerRef.length,e.injector||e.viewContainerRef.injector),this.setDisposeFn(function(){return t.destroy()})):(t=r.create(e.injector||this._defaultInjector),this._appRef.attachView(t.hostView),this.setDisposeFn(function(){n._appRef.detachView(t.hostView),t.destroy()})),this.outletElement.appendChild(this._getComponentRootNode(t)),t},_.prototype.attachTemplatePortal=function(e){var t=this,n=e.viewContainerRef,r=n.createEmbeddedView(e.templateRef,e.context);return r.detectChanges(),r.rootNodes.forEach(function(e){return t.outletElement.appendChild(e)}),this.setDisposeFn(function(){var e=n.indexOf(r);-1!==e&&n.remove(e)}),r},_.prototype.dispose=function(){y.prototype.dispose.call(this),null!=this.outletElement.parentNode&&this.outletElement.parentNode.removeChild(this.outletElement)},_.prototype._getComponentRootNode=function(e){return e.hostView.rootNodes[0]},_);function _(e,t,n,r){var i=y.call(this)||this;return i.outletElement=e,i._componentFactoryResolver=t,i._appRef=n,i._defaultInjector=r,i}var b,w=(b=g,t.__extends(x,b),x);function x(){return null!==b&&b.apply(this,arguments)||this}var C,S=(C=c,t.__extends(E,C),E.decorators=[{type:r.Directive,args:[{selector:\"[cdkPortal]\",exportAs:\"cdkPortal\"}]}],E.ctorParameters=function(){return[{type:r.TemplateRef},{type:r.ViewContainerRef}]},E);function E(e,t){return C.call(this,e,t)||this}var O,k=(O=S,t.__extends(D,O),D.decorators=[{type:r.Directive,args:[{selector:\"[cdk-portal], [portal]\",exportAs:\"cdkPortal\",providers:[{provide:S,useExisting:D}]}]}],D);function D(){return null!==O&&O.apply(this,arguments)||this}var T,I=(T=d,t.__extends(P,T),Object.defineProperty(P.prototype,\"portal\",{get:function(){return this._attachedPortal},set:function(e){this.hasAttached()&&!e&&!this._isInitialized||(this.hasAttached()&&T.prototype.detach.call(this),e&&T.prototype.attach.call(this,e),this._attachedPortal=e)},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"attachedRef\",{get:function(){return this._attachedRef},enumerable:!0,configurable:!0}),P.prototype.ngOnInit=function(){this._isInitialized=!0},P.prototype.ngOnDestroy=function(){T.prototype.dispose.call(this),this._attachedPortal=null,this._attachedRef=null},P.prototype.attachComponentPortal=function(e){e.setAttachedHost(this);var t=null!=e.viewContainerRef?e.viewContainerRef:this._viewContainerRef,n=(e.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(e.component),r=t.createComponent(n,t.length,e.injector||t.injector);return T.prototype.setDisposeFn.call(this,function(){return r.destroy()}),this._attachedPortal=e,this._attachedRef=r,this.attached.emit(r),r},P.prototype.attachTemplatePortal=function(e){var t=this;e.setAttachedHost(this);var n=this._viewContainerRef.createEmbeddedView(e.templateRef,e.context);return T.prototype.setDisposeFn.call(this,function(){return t._viewContainerRef.clear()}),this._attachedPortal=e,this._attachedRef=n,this.attached.emit(n),n},P.decorators=[{type:r.Directive,args:[{selector:\"[cdkPortalOutlet]\",exportAs:\"cdkPortalOutlet\",inputs:[\"portal: cdkPortalOutlet\"]}]}],P.ctorParameters=function(){return[{type:r.ComponentFactoryResolver},{type:r.ViewContainerRef}]},P.propDecorators={attached:[{type:r.Output}]},P);function P(e,t){var n=T.call(this)||this;return n._componentFactoryResolver=e,n._viewContainerRef=t,n._isInitialized=!1,n.attached=new r.EventEmitter,n}var A,M=(A=I,t.__extends(R,A),R.decorators=[{type:r.Directive,args:[{selector:\"[cdkPortalHost], [portalHost]\",exportAs:\"cdkPortalHost\",inputs:[\"portal: cdkPortalHost\"],providers:[{provide:I,useExisting:R}]}]}],R);function R(){return null!==A&&A.apply(this,arguments)||this}var N=(j.decorators=[{type:r.NgModule,args:[{exports:[S,I,k,M],declarations:[S,I,k,M]}]}],j);function j(){}var F=(L.prototype.get=function(e,t){var n=this._customTokens.get(e);return void 0!==n?n:this._parentInjector.get(e,t)},L);function L(e,t){this._parentInjector=e,this._customTokens=t}e.Portal=i,e.ComponentPortal=s,e.TemplatePortal=c,e.BasePortalOutlet=d,e.BasePortalHost=m,e.DomPortalOutlet=g,e.DomPortalHost=w,e.CdkPortal=S,e.TemplatePortalDirective=k,e.CdkPortalOutlet=I,e.PortalHostDirective=M,e.PortalModule=N,e.PortalInjector=F,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/coercion\"),require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/cdk/platform\"),require(\"@angular/cdk/bidi\"),require(\"tslib\"),require(\"@angular/cdk/collections\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-scrolling.umd.js\",[\"@angular/cdk/coercion\",\"@angular/core\",\"rxjs\",\"rxjs/operators\",\"@angular/cdk/platform\",\"@angular/cdk/bidi\",\"tslib\",\"@angular/cdk/collections\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/coercion\"),e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/cdk/platform\"),e(\"@angular/cdk/bidi\"),e(\"tslib\"),e(\"@angular/cdk/collections\"))})}(0,function(e,t,n,s,a,i,r,l,o){\"use strict\";var u=new n.InjectionToken(\"VIRTUAL_SCROLL_STRATEGY\"),c=(p.prototype.attach=function(e){this._viewport=e,this._updateTotalContentSize(),this._updateRenderedRange()},p.prototype.detach=function(){this._scrolledIndexChange.complete(),this._viewport=null},p.prototype.updateItemAndBufferSize=function(e,t,n){if(n<t)throw Error(\"CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx\");this._itemSize=e,this._minBufferPx=t,this._maxBufferPx=n,this._updateTotalContentSize(),this._updateRenderedRange()},p.prototype.onContentScrolled=function(){this._updateRenderedRange()},p.prototype.onDataLengthChanged=function(){this._updateTotalContentSize(),this._updateRenderedRange()},p.prototype.onContentRendered=function(){},p.prototype.onRenderedOffsetChanged=function(){},p.prototype.scrollToIndex=function(e,t){this._viewport&&this._viewport.scrollToOffset(e*this._itemSize,t)},p.prototype._updateTotalContentSize=function(){this._viewport&&this._viewport.setTotalContentSize(this._viewport.getDataLength()*this._itemSize)},p.prototype._updateRenderedRange=function(){if(this._viewport){var e=this._viewport.measureScrollOffset(),t=e/this._itemSize,n=this._viewport.getRenderedRange(),r={start:n.start,end:n.end},i=this._viewport.getViewportSize(),o=this._viewport.getDataLength(),a=e-r.start*this._itemSize;if(a<this._minBufferPx&&0!=r.start){var s=Math.ceil((this._maxBufferPx-a)/this._itemSize);r.start=Math.max(0,r.start-s),r.end=Math.min(o,Math.ceil(t+(i+this._minBufferPx)/this._itemSize))}else{var l=r.end*this._itemSize-(e+i);if(l<this._minBufferPx&&r.end!=o){var u=Math.ceil((this._maxBufferPx-l)/this._itemSize);0<u&&(r.end=Math.min(o,r.end+u),r.start=Math.max(0,Math.floor(t-this._minBufferPx/this._itemSize)))}}this._viewport.setRenderedRange(r),this._viewport.setRenderedContentOffset(this._itemSize*r.start),this._scrolledIndexChange.next(Math.floor(t))}},p);function p(e,t,n){this._scrolledIndexChange=new s.Subject,this.scrolledIndexChange=this._scrolledIndexChange.pipe(a.distinctUntilChanged()),this._viewport=null,this._itemSize=e,this._minBufferPx=t,this._maxBufferPx=n}function d(e){return e._scrollStrategy}var h=(Object.defineProperty(f.prototype,\"itemSize\",{get:function(){return this._itemSize},set:function(e){this._itemSize=t.coerceNumberProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"minBufferPx\",{get:function(){return this._minBufferPx},set:function(e){this._minBufferPx=t.coerceNumberProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"maxBufferPx\",{get:function(){return this._maxBufferPx},set:function(e){this._maxBufferPx=t.coerceNumberProperty(e)},enumerable:!0,configurable:!0}),f.prototype.ngOnChanges=function(){this._scrollStrategy.updateItemAndBufferSize(this.itemSize,this.minBufferPx,this.maxBufferPx)},f.decorators=[{type:n.Directive,args:[{selector:\"cdk-virtual-scroll-viewport[itemSize]\",providers:[{provide:u,useFactory:d,deps:[n.forwardRef(function(){return f})]}]}]}],f.propDecorators={itemSize:[{type:n.Input}],minBufferPx:[{type:n.Input}],maxBufferPx:[{type:n.Input}]},f);function f(){this._itemSize=20,this._minBufferPx=100,this._maxBufferPx=200,this._scrollStrategy=new c(this.itemSize,this.minBufferPx,this.maxBufferPx)}var m=(v.prototype.register=function(e){var t=this;this.scrollContainers.has(e)||this.scrollContainers.set(e,e.elementScrolled().subscribe(function(){return t._scrolled.next(e)}))},v.prototype.deregister=function(e){var t=this.scrollContainers.get(e);t&&(t.unsubscribe(),this.scrollContainers.delete(e))},v.prototype.scrolled=function(n){var r=this;return void 0===n&&(n=20),this._platform.isBrowser?new s.Observable(function(e){r._globalSubscription||r._addGlobalListener();var t=0<n?r._scrolled.pipe(a.auditTime(n)).subscribe(e):r._scrolled.subscribe(e);return r._scrolledCount++,function(){t.unsubscribe(),r._scrolledCount--,r._scrolledCount||r._removeGlobalListener()}}):s.of()},v.prototype.ngOnDestroy=function(){var n=this;this._removeGlobalListener(),this.scrollContainers.forEach(function(e,t){return n.deregister(t)}),this._scrolled.complete()},v.prototype.ancestorScrolled=function(e,t){var n=this.getAncestorScrollContainers(e);return this.scrolled(t).pipe(a.filter(function(e){return!e||-1<n.indexOf(e)}))},v.prototype.getAncestorScrollContainers=function(n){var r=this,i=[];return this.scrollContainers.forEach(function(e,t){r._scrollableContainsElement(t,n)&&i.push(t)}),i},v.prototype._scrollableContainsElement=function(e,t){var n=t.nativeElement,r=e.getElementRef().nativeElement;do{if(n==r)return!0}while(n=n.parentElement);return!1},v.prototype._addGlobalListener=function(){var e=this;this._globalSubscription=this._ngZone.runOutsideAngular(function(){return s.fromEvent(window.document,\"scroll\").subscribe(function(){return e._scrolled.next()})})},v.prototype._removeGlobalListener=function(){this._globalSubscription&&(this._globalSubscription.unsubscribe(),this._globalSubscription=null)},v.decorators=[{type:n.Injectable,args:[{providedIn:\"root\"}]}],v.ctorParameters=function(){return[{type:n.NgZone},{type:i.Platform}]},v.ngInjectableDef=n.ɵɵdefineInjectable({factory:function(){return new v(n.ɵɵinject(n.NgZone),n.ɵɵinject(i.Platform))},token:v,providedIn:\"root\"}),v);function v(e,t){this._ngZone=e,this._platform=t,this._scrolled=new s.Subject,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map}function y(e,t,n){return e||new m(t,n)}var g={provide:m,deps:[[new n.Optional,new n.SkipSelf,m],n.NgZone,i.Platform],useFactory:y},_=(b.prototype.ngOnInit=function(){this.scrollDispatcher.register(this)},b.prototype.ngOnDestroy=function(){this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()},b.prototype.elementScrolled=function(){return this._elementScrolled},b.prototype.getElementRef=function(){return this.elementRef},b.prototype.scrollTo=function(e){var t=this.elementRef.nativeElement,n=this.dir&&\"rtl\"==this.dir.value;e.left=null==e.left?n?e.end:e.start:e.left,e.right=null==e.right?n?e.start:e.end:e.right,null!=e.bottom&&(e.top=t.scrollHeight-t.clientHeight-e.bottom),n&&i.getRtlScrollAxisType()!=i.RtlScrollAxisType.NORMAL?(null!=e.left&&(e.right=t.scrollWidth-t.clientWidth-e.left),i.getRtlScrollAxisType()==i.RtlScrollAxisType.INVERTED?e.left=e.right:i.getRtlScrollAxisType()==i.RtlScrollAxisType.NEGATED&&(e.left=e.right?-e.right:e.right)):null!=e.right&&(e.left=t.scrollWidth-t.clientWidth-e.right),this._applyScrollToOptions(e)},b.prototype._applyScrollToOptions=function(e){var t=this.elementRef.nativeElement;i.supportsScrollBehavior()?t.scrollTo(e):(null!=e.top&&(t.scrollTop=e.top),null!=e.left&&(t.scrollLeft=e.left))},b.prototype.measureScrollOffset=function(e){var t=\"left\",n=this.elementRef.nativeElement;if(\"top\"==e)return n.scrollTop;if(\"bottom\"==e)return n.scrollHeight-n.clientHeight-n.scrollTop;var r=this.dir&&\"rtl\"==this.dir.value;return\"start\"==e?e=r?\"right\":t:\"end\"==e&&(e=r?t:\"right\"),r&&i.getRtlScrollAxisType()==i.RtlScrollAxisType.INVERTED?e==t?n.scrollWidth-n.clientWidth-n.scrollLeft:n.scrollLeft:r&&i.getRtlScrollAxisType()==i.RtlScrollAxisType.NEGATED?e==t?n.scrollLeft+n.scrollWidth-n.clientWidth:-n.scrollLeft:e==t?n.scrollLeft:n.scrollWidth-n.clientWidth-n.scrollLeft},b.decorators=[{type:n.Directive,args:[{selector:\"[cdk-scrollable], [cdkScrollable]\"}]}],b.ctorParameters=function(){return[{type:n.ElementRef},{type:m},{type:n.NgZone},{type:r.Directionality,decorators:[{type:n.Optional}]}]},b);function b(e,t,n,r){var i=this;this.elementRef=e,this.scrollDispatcher=t,this.ngZone=n,this.dir=r,this._destroyed=new s.Subject,this._elementScrolled=new s.Observable(function(e){return i.ngZone.runOutsideAngular(function(){return s.fromEvent(i.elementRef.nativeElement,\"scroll\").pipe(a.takeUntil(i._destroyed)).subscribe(e)})})}var w,x=\"undefined\"!=typeof requestAnimationFrame?s.animationFrameScheduler:s.asapScheduler,C=(w=_,l.__extends(S,w),Object.defineProperty(S.prototype,\"orientation\",{get:function(){return this._orientation},set:function(e){this._orientation!==e&&(this._orientation=e,this._calculateSpacerSize())},enumerable:!0,configurable:!0}),S.prototype.ngOnInit=function(){var e=this;w.prototype.ngOnInit.call(this),this.ngZone.runOutsideAngular(function(){return Promise.resolve().then(function(){e._measureViewportSize(),e._scrollStrategy.attach(e),e.elementScrolled().pipe(a.startWith(null),a.auditTime(0,x)).subscribe(function(){return e._scrollStrategy.onContentScrolled()}),e._markChangeDetectionNeeded()})})},S.prototype.ngOnDestroy=function(){this.detach(),this._scrollStrategy.detach(),this._renderedRangeSubject.complete(),this._detachedSubject.complete(),w.prototype.ngOnDestroy.call(this)},S.prototype.attach=function(e){var n=this;if(this._forOf)throw Error(\"CdkVirtualScrollViewport is already attached.\");this.ngZone.runOutsideAngular(function(){n._forOf=e,n._forOf.dataStream.pipe(a.takeUntil(n._detachedSubject)).subscribe(function(e){var t=e.length;t!==n._dataLength&&(n._dataLength=t,n._scrollStrategy.onDataLengthChanged()),n._doChangeDetection()})})},S.prototype.detach=function(){this._forOf=null,this._detachedSubject.next()},S.prototype.getDataLength=function(){return this._dataLength},S.prototype.getViewportSize=function(){return this._viewportSize},S.prototype.getRenderedRange=function(){return this._renderedRange},S.prototype.setTotalContentSize=function(e){this._totalContentSize!==e&&(this._totalContentSize=e,this._calculateSpacerSize(),this._markChangeDetectionNeeded())},S.prototype.setRenderedRange=function(e){var t=this;!function(e,t){return e.start==t.start&&e.end==t.end}(this._renderedRange,e)&&(this._renderedRangeSubject.next(this._renderedRange=e),this._markChangeDetectionNeeded(function(){return t._scrollStrategy.onContentRendered()}))},S.prototype.getOffsetToRenderedContentStart=function(){return this._renderedContentOffsetNeedsRewrite?null:this._renderedContentOffset},S.prototype.setRenderedContentOffset=function(e,t){var n=this;void 0===t&&(t=\"to-start\");var r=this.dir&&\"rtl\"==this.dir.value,i=\"horizontal\"==this.orientation,o=i?\"X\":\"Y\",a=\"translate\"+o+\"(\"+Number((i&&r?-1:1)*e)+\"px)\";this._renderedContentOffset=e,\"to-end\"===t&&(a+=\" translate\"+o+\"(-100%)\",this._renderedContentOffsetNeedsRewrite=!0),this._renderedContentTransform!=a&&(this._renderedContentTransform=a,this._markChangeDetectionNeeded(function(){n._renderedContentOffsetNeedsRewrite?(n._renderedContentOffset-=n.measureRenderedContentSize(),n._renderedContentOffsetNeedsRewrite=!1,n.setRenderedContentOffset(n._renderedContentOffset)):n._scrollStrategy.onRenderedOffsetChanged()}))},S.prototype.scrollToOffset=function(e,t){void 0===t&&(t=\"auto\");var n={behavior:t};\"horizontal\"===this.orientation?n.start=e:n.top=e,this.scrollTo(n)},S.prototype.scrollToIndex=function(e,t){void 0===t&&(t=\"auto\"),this._scrollStrategy.scrollToIndex(e,t)},S.prototype.measureScrollOffset=function(e){return w.prototype.measureScrollOffset.call(this,e||(\"horizontal\"===this.orientation?\"start\":\"top\"))},S.prototype.measureRenderedContentSize=function(){var e=this._contentWrapper.nativeElement;return\"horizontal\"===this.orientation?e.offsetWidth:e.offsetHeight},S.prototype.measureRangeSize=function(e){return this._forOf?this._forOf.measureRangeSize(e,this.orientation):0},S.prototype.checkViewportSize=function(){this._measureViewportSize(),this._scrollStrategy.onDataLengthChanged()},S.prototype._measureViewportSize=function(){var e=this.elementRef.nativeElement;this._viewportSize=\"horizontal\"===this.orientation?e.clientWidth:e.clientHeight},S.prototype._markChangeDetectionNeeded=function(e){var t=this;e&&this._runAfterChangeDetection.push(e),this._isChangeDetectionPending||(this._isChangeDetectionPending=!0,this.ngZone.runOutsideAngular(function(){return Promise.resolve().then(function(){t._doChangeDetection()})}))},S.prototype._doChangeDetection=function(){var t,e,n=this;this._isChangeDetectionPending=!1,this.ngZone.run(function(){return n._changeDetectorRef.markForCheck()}),this._contentWrapper.nativeElement.style.transform=this._renderedContentTransform;var r=this._runAfterChangeDetection;this._runAfterChangeDetection=[];try{for(var i=l.__values(r),o=i.next();!o.done;o=i.next())(0,o.value)()}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}},S.prototype._calculateSpacerSize=function(){this._totalContentHeight=\"horizontal\"===this.orientation?\"\":this._totalContentSize+\"px\",this._totalContentWidth=\"horizontal\"===this.orientation?this._totalContentSize+\"px\":\"\"},S.decorators=[{type:n.Component,args:[{moduleId:module.id,selector:\"cdk-virtual-scroll-viewport\",template:'\\x3c!--\\n  Wrap the rendered content in an element that will be used to offset it based on the scroll\\n  position.\\n--\\x3e\\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\\n  <ng-content></ng-content>\\n</div>\\n\\x3c!--\\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--\\x3e\\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:n.ViewEncapsulation.None,changeDetection:n.ChangeDetectionStrategy.OnPush,providers:[{provide:_,useExisting:S}],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}/*# sourceMappingURL=virtual-scroll-viewport.css.map */\\n\"]}]}],S.ctorParameters=function(){return[{type:n.ElementRef},{type:n.ChangeDetectorRef},{type:n.NgZone},{type:void 0,decorators:[{type:n.Optional},{type:n.Inject,args:[u]}]},{type:r.Directionality,decorators:[{type:n.Optional}]},{type:m}]},S.propDecorators={orientation:[{type:n.Input}],scrolledIndexChange:[{type:n.Output}],_contentWrapper:[{type:n.ViewChild,args:[\"contentWrapper\",{static:!0}]}]},S);function S(e,t,n,r,i,o){var a=w.call(this,e,o,n,i)||this;if(a.elementRef=e,a._changeDetectorRef=t,a._scrollStrategy=r,a._detachedSubject=new s.Subject,a._renderedRangeSubject=new s.Subject,a._orientation=\"vertical\",a.scrolledIndexChange=new s.Observable(function(t){return a._scrollStrategy.scrolledIndexChange.subscribe(function(e){return Promise.resolve().then(function(){return a.ngZone.run(function(){return t.next(e)})})})}),a.renderedRangeStream=a._renderedRangeSubject.asObservable(),a._totalContentSize=0,a._totalContentWidth=\"\",a._totalContentHeight=\"\",a._renderedRange={start:0,end:0},a._dataLength=0,a._viewportSize=0,a._renderedContentOffset=0,a._renderedContentOffsetNeedsRewrite=!1,a._isChangeDetectionPending=!1,a._runAfterChangeDetection=[],!r)throw Error('Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.');return a}function E(e,t){var n=t;if(!n.getBoundingClientRect)return 0;var r=n.getBoundingClientRect();return\"horizontal\"==e?r.width:r.height}var O=(Object.defineProperty(k.prototype,\"cdkVirtualForOf\",{get:function(){return this._cdkVirtualForOf},set:function(e){this._cdkVirtualForOf=e;var t=o.isDataSource(e)?e:new o.ArrayDataSource(e instanceof s.Observable?e:Array.prototype.slice.call(e||[]));this._dataSourceChanges.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(k.prototype,\"cdkVirtualForTrackBy\",{get:function(){return this._cdkVirtualForTrackBy},set:function(n){var r=this;this._needsUpdate=!0,this._cdkVirtualForTrackBy=n?function(e,t){return n(e+(r._renderedRange?r._renderedRange.start:0),t)}:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(k.prototype,\"cdkVirtualForTemplate\",{set:function(e){e&&(this._needsUpdate=!0,this._template=e)},enumerable:!0,configurable:!0}),k.prototype.measureRangeSize=function(e,t){if(e.start>=e.end)return 0;if(e.start<this._renderedRange.start||e.end>this._renderedRange.end)throw Error(\"Error: attempted to measure an item that isn't rendered.\");for(var n=e.start-this._renderedRange.start,r=0,i=e.end-e.start;i--;)for(var o=this._viewContainerRef.get(i+n),a=o?o.rootNodes.length:0;a--;)r+=E(t,o.rootNodes[a]);return r},k.prototype.ngDoCheck=function(){if(this._differ&&this._needsUpdate){var e=this._differ.diff(this._renderedItems);e?this._applyChanges(e):this._updateContext(),this._needsUpdate=!1}},k.prototype.ngOnDestroy=function(){var t,e;this._viewport.detach(),this._dataSourceChanges.next(),this._dataSourceChanges.complete(),this.viewChange.complete(),this._destroyed.next(),this._destroyed.complete();try{for(var n=l.__values(this._templateCache),r=n.next();!r.done;r=n.next())r.value.destroy()}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},k.prototype._onRenderedDataChange=function(){this._renderedRange&&(this._renderedItems=this._data.slice(this._renderedRange.start,this._renderedRange.end),this._differ||(this._differ=this._differs.find(this._renderedItems).create(this.cdkVirtualForTrackBy)),this._needsUpdate=!0)},k.prototype._changeDataSource=function(e,t){return e&&e.disconnect(this),this._needsUpdate=!0,t?t.connect(this):s.of()},k.prototype._updateContext=function(){for(var e=this._data.length,t=this._viewContainerRef.length;t--;){var n=this._viewContainerRef.get(t);n.context.index=this._renderedRange.start+t,n.context.count=e,this._updateComputedContextProperties(n.context),n.detectChanges()}},k.prototype._applyChanges=function(e){var i=this;e.forEachOperation(function(e,t,n){if(null==e.previousIndex)(r=i._insertViewForNewItem(n)).context.$implicit=e.item;else if(null==n)i._cacheView(i._detachView(t));else{var r=i._viewContainerRef.get(t);i._viewContainerRef.move(r,n),r.context.$implicit=e.item}}),e.forEachIdentityChange(function(e){i._viewContainerRef.get(e.currentIndex).context.$implicit=e.item});for(var t=this._data.length,n=this._viewContainerRef.length;n--;){var r=this._viewContainerRef.get(n);r.context.index=this._renderedRange.start+n,r.context.count=t,this._updateComputedContextProperties(r.context)}},k.prototype._cacheView=function(e){if(this._templateCache.length<this.cdkVirtualForTemplateCacheSize)this._templateCache.push(e);else{var t=this._viewContainerRef.indexOf(e);-1===t?e.destroy():this._viewContainerRef.remove(t)}},k.prototype._insertViewForNewItem=function(e){return this._insertViewFromCache(e)||this._createEmbeddedViewAt(e)},k.prototype._updateComputedContextProperties=function(e){e.first=0===e.index,e.last=e.index===e.count-1,e.even=e.index%2==0,e.odd=!e.even},k.prototype._createEmbeddedViewAt=function(e){return this._viewContainerRef.createEmbeddedView(this._template,{$implicit:null,cdkVirtualForOf:this._cdkVirtualForOf,index:-1,count:-1,first:!1,last:!1,odd:!1,even:!1},e)},k.prototype._insertViewFromCache=function(e){var t=this._templateCache.pop();return t&&this._viewContainerRef.insert(t,e),t||null},k.prototype._detachView=function(e){return this._viewContainerRef.detach(e)},k.decorators=[{type:n.Directive,args:[{selector:\"[cdkVirtualFor][cdkVirtualForOf]\"}]}],k.ctorParameters=function(){return[{type:n.ViewContainerRef},{type:n.TemplateRef},{type:n.IterableDiffers},{type:C,decorators:[{type:n.SkipSelf}]},{type:n.NgZone}]},k.propDecorators={cdkVirtualForOf:[{type:n.Input}],cdkVirtualForTrackBy:[{type:n.Input}],cdkVirtualForTemplate:[{type:n.Input}],cdkVirtualForTemplateCacheSize:[{type:n.Input}]},k);function k(e,t,n,r,i){var o=this;this._viewContainerRef=e,this._template=t,this._differs=n,this._viewport=r,this.viewChange=new s.Subject,this._dataSourceChanges=new s.Subject,this.cdkVirtualForTemplateCacheSize=20,this.dataStream=this._dataSourceChanges.pipe(a.startWith(null),a.pairwise(),a.switchMap(function(e){var t=l.__read(e,2),n=t[0],r=t[1];return o._changeDataSource(n,r)}),a.shareReplay(1)),this._differ=null,this._templateCache=[],this._needsUpdate=!1,this._destroyed=new s.Subject,this.dataStream.subscribe(function(e){o._data=e,o._onRenderedDataChange()}),this._viewport.renderedRangeStream.pipe(a.takeUntil(this._destroyed)).subscribe(function(e){o._renderedRange=e,i.run(function(){return o.viewChange.next(o._renderedRange)}),o._onRenderedDataChange()}),this._viewport.attach(this)}var D=(T.decorators=[{type:n.NgModule,args:[{imports:[r.BidiModule,i.PlatformModule],exports:[r.BidiModule,h,_,O,C],declarations:[h,_,O,C]}]}],T);function T(){}var I=(P.decorators=[{type:n.NgModule,args:[{imports:[D],exports:[D]}]}],P);function P(){}var A=(M.prototype.ngOnDestroy=function(){this._invalidateCache.unsubscribe()},M.prototype.getViewportSize=function(){this._viewportSize||this._updateViewportSize();var e={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),e},M.prototype.getViewportRect=function(){var e=this.getViewportScrollPosition(),t=this.getViewportSize(),n=t.width,r=t.height;return{top:e.top,left:e.left,bottom:e.top+r,right:e.left+n,height:r,width:n}},M.prototype.getViewportScrollPosition=function(){if(!this._platform.isBrowser)return{top:0,left:0};var e=document.documentElement,t=e.getBoundingClientRect();return{top:-t.top||document.body.scrollTop||window.scrollY||e.scrollTop||0,left:-t.left||document.body.scrollLeft||window.scrollX||e.scrollLeft||0}},M.prototype.change=function(e){return void 0===e&&(e=20),0<e?this._change.pipe(a.auditTime(e)):this._change},M.prototype._updateViewportSize=function(){this._viewportSize=this._platform.isBrowser?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0}},M.decorators=[{type:n.Injectable,args:[{providedIn:\"root\"}]}],M.ctorParameters=function(){return[{type:i.Platform},{type:n.NgZone}]},M.ngInjectableDef=n.ɵɵdefineInjectable({factory:function(){return new M(n.ɵɵinject(i.Platform),n.ɵɵinject(n.NgZone))},token:M,providedIn:\"root\"}),M);function M(e,t){var n=this;this._platform=e,t.runOutsideAngular(function(){n._change=e.isBrowser?s.merge(s.fromEvent(window,\"resize\"),s.fromEvent(window,\"orientationchange\")):s.of(),n._invalidateCache=n.change().subscribe(function(){return n._updateViewportSize()})})}function R(e,t,n){return e||new A(t,n)}var N={provide:A,deps:[[new n.Optional,new n.SkipSelf,A],i.Platform,n.NgZone],useFactory:R};e.FixedSizeVirtualScrollStrategy=c,e._fixedSizeVirtualScrollStrategyFactory=d,e.CdkFixedSizeVirtualScroll=h,e.DEFAULT_SCROLL_TIME=20,e.ScrollDispatcher=m,e.SCROLL_DISPATCHER_PROVIDER_FACTORY=y,e.SCROLL_DISPATCHER_PROVIDER=g,e.CdkScrollable=_,e.ScrollingModule=D,e.ScrollDispatchModule=I,e.DEFAULT_RESIZE_TIME=20,e.ViewportRuler=A,e.VIEWPORT_RULER_PROVIDER_FACTORY=R,e.VIEWPORT_RULER_PROVIDER=N,e.CdkVirtualForOf=O,e.VIRTUAL_SCROLL_STRATEGY=u,e.CdkVirtualScrollViewport=C,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/overlay\"),require(\"@angular/cdk/a11y\"),require(\"@angular/common\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"tslib\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/keycodes\"),require(\"@angular/cdk/layout\"),require(\"@angular/cdk/platform\"),require(\"@angular/cdk/portal\"),require(\"@angular/cdk/scrolling\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/animations\")):System.registerDynamic(\"npm:@angular/material/bundles/material-tooltip.umd.js\",[\"@angular/cdk/overlay\",\"@angular/cdk/a11y\",\"@angular/common\",\"@angular/core\",\"@angular/material/core\",\"tslib\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/keycodes\",\"@angular/cdk/layout\",\"@angular/cdk/platform\",\"@angular/cdk/portal\",\"@angular/cdk/scrolling\",\"rxjs\",\"rxjs/operators\",\"@angular/animations\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/overlay\"),e(\"@angular/cdk/a11y\"),e(\"@angular/common\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"tslib\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/keycodes\"),e(\"@angular/cdk/layout\"),e(\"@angular/cdk/platform\"),e(\"@angular/cdk/portal\"),e(\"@angular/cdk/scrolling\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/animations\"))})}(0,function(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v){\"use strict\";var y={tooltipState:v.trigger(\"state\",[v.state(\"initial, void, hidden\",v.style({opacity:0,transform:\"scale(0)\"})),v.state(\"visible\",v.style({transform:\"scale(1)\"})),v.transition(\"* => visible\",v.animate(\"200ms cubic-bezier(0, 0, 0.2, 1)\",v.keyframes([v.style({opacity:0,transform:\"scale(0)\",offset:0}),v.style({opacity:.5,transform:\"scale(0.99)\",offset:.5}),v.style({opacity:1,transform:\"scale(1)\",offset:1})]))),v.transition(\"* => hidden\",v.animate(\"100ms cubic-bezier(0, 0, 0.2, 1)\",v.style({opacity:0})))])},g=\"mat-tooltip-panel\",_=p.normalizePassiveListenerOptions({passive:!0});function b(e){return Error('Tooltip position \"'+e+'\" is invalid.')}var w=new i.InjectionToken(\"mat-tooltip-scroll-strategy\");function x(e){return function(){return e.scrollStrategies.reposition({scrollThrottle:20})}}var C={provide:w,deps:[t.Overlay],useFactory:x},S=new i.InjectionToken(\"mat-tooltip-default-options\",{providedIn:\"root\",factory:E});function E(){return{showDelay:0,hideDelay:0,touchendHideDelay:1500}}var O=(Object.defineProperty(k.prototype,\"position\",{get:function(){return this._position},set:function(e){e!==this._position&&(this._position=e,this._overlayRef&&(this._updatePosition(),this._tooltipInstance&&this._tooltipInstance.show(0),this._overlayRef.updatePosition()))},enumerable:!0,configurable:!0}),Object.defineProperty(k.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=l.coerceBooleanProperty(e),this._disabled&&this.hide(0)},enumerable:!0,configurable:!0}),Object.defineProperty(k.prototype,\"message\",{get:function(){return this._message},set:function(e){var t=this;this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this._message),this._message=null!=e?(\"\"+e).trim():\"\",!this._message&&this._isTooltipVisible()?this.hide(0):(this._updateTooltipMessage(),this._ngZone.runOutsideAngular(function(){Promise.resolve().then(function(){t._ariaDescriber.describe(t._elementRef.nativeElement,t.message)})}))},enumerable:!0,configurable:!0}),Object.defineProperty(k.prototype,\"tooltipClass\",{get:function(){return this._tooltipClass},set:function(e){this._tooltipClass=e,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)},enumerable:!0,configurable:!0}),k.prototype.ngOnInit=function(){this._setupPointerEvents()},k.prototype.ngOnDestroy=function(){var n=this;clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(function(e,t){n._elementRef.nativeElement.removeEventListener(t,e,_)}),this._passiveListeners.clear(),this._destroyed.next(),this._destroyed.complete(),this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this.message),this._focusMonitor.stopMonitoring(this._elementRef)},k.prototype.show=function(e){var t=this;if(void 0===e&&(e=this.showDelay),!this.disabled&&this.message&&(!this._isTooltipVisible()||this._tooltipInstance._showTimeoutId||this._tooltipInstance._hideTimeoutId)){var n=this._createOverlay();this._detach(),this._portal=this._portal||new d.ComponentPortal(D,this._viewContainerRef),this._tooltipInstance=n.attach(this._portal).instance,this._tooltipInstance.afterHidden().pipe(m.takeUntil(this._destroyed)).subscribe(function(){return t._detach()}),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),this._tooltipInstance.show(e)}},k.prototype.hide=function(e){void 0===e&&(e=this.hideDelay),this._tooltipInstance&&this._tooltipInstance.hide(e)},k.prototype.toggle=function(){this._isTooltipVisible()?this.hide():this.show()},k.prototype._isTooltipVisible=function(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()},k.prototype._handleKeydown=function(e){this._isTooltipVisible()&&e.keyCode===u.ESCAPE&&!u.hasModifierKey(e)&&(e.preventDefault(),e.stopPropagation(),this.hide(0))},k.prototype._createOverlay=function(){var t=this;if(this._overlayRef)return this._overlayRef;var e=this._scrollDispatcher.getAncestorScrollContainers(this._elementRef),n=this._overlay.position().flexibleConnectedTo(this._elementRef).withTransformOriginOn(\".mat-tooltip\").withFlexibleDimensions(!1).withViewportMargin(8).withScrollableContainers(e);return n.positionChanges.pipe(m.takeUntil(this._destroyed)).subscribe(function(e){t._tooltipInstance&&e.scrollableViewProperties.isOverlayClipped&&t._tooltipInstance.isVisible()&&t._ngZone.run(function(){return t.hide(0)})}),this._overlayRef=this._overlay.create({direction:this._dir,positionStrategy:n,panelClass:g,scrollStrategy:this._scrollStrategy()}),this._updatePosition(),this._overlayRef.detachments().pipe(m.takeUntil(this._destroyed)).subscribe(function(){return t._detach()}),this._overlayRef},k.prototype._detach=function(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null},k.prototype._updatePosition=function(){var e=this._overlayRef.getConfig().positionStrategy,t=this._getOrigin(),n=this._getOverlayPosition();e.withPositions([a.__assign({},t.main,n.main),a.__assign({},t.fallback,n.fallback)])},k.prototype._getOrigin=function(){var e,t=!this._dir||\"ltr\"==this._dir.value,n=this.position;if(\"above\"==n||\"below\"==n)e={originX:\"center\",originY:\"above\"==n?\"top\":\"bottom\"};else if(\"before\"==n||\"left\"==n&&t||\"right\"==n&&!t)e={originX:\"start\",originY:\"center\"};else{if(!(\"after\"==n||\"right\"==n&&t||\"left\"==n&&!t))throw b(n);e={originX:\"end\",originY:\"center\"}}var r=this._invertPosition(e.originX,e.originY);return{main:e,fallback:{originX:r.x,originY:r.y}}},k.prototype._getOverlayPosition=function(){var e,t=!this._dir||\"ltr\"==this._dir.value,n=this.position;if(\"above\"==n)e={overlayX:\"center\",overlayY:\"bottom\"};else if(\"below\"==n)e={overlayX:\"center\",overlayY:\"top\"};else if(\"before\"==n||\"left\"==n&&t||\"right\"==n&&!t)e={overlayX:\"end\",overlayY:\"center\"};else{if(!(\"after\"==n||\"right\"==n&&t||\"left\"==n&&!t))throw b(n);e={overlayX:\"start\",overlayY:\"center\"}}var r=this._invertPosition(e.overlayX,e.overlayY);return{main:e,fallback:{overlayX:r.x,overlayY:r.y}}},k.prototype._updateTooltipMessage=function(){var e=this;this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),this._ngZone.onMicrotaskEmpty.asObservable().pipe(m.take(1),m.takeUntil(this._destroyed)).subscribe(function(){e._tooltipInstance&&e._overlayRef.updatePosition()}))},k.prototype._setTooltipClass=function(e){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=e,this._tooltipInstance._markForCheck())},k.prototype._invertPosition=function(e,t){return\"above\"===this.position||\"below\"===this.position?\"top\"===t?t=\"bottom\":\"bottom\"===t&&(t=\"top\"):\"end\"===e?e=\"start\":\"start\"===e&&(e=\"end\"),{x:e,y:t}},k.prototype._setupPointerEvents=function(){var n=this;if(this._platform.IOS||this._platform.ANDROID){if(\"off\"!==this.touchGestures){this._disableNativeGesturesIfNecessary();var e=function(){clearTimeout(n._touchstartTimeout),n.hide(n._defaultOptions.touchendHideDelay)};this._passiveListeners.set(\"touchend\",e).set(\"touchcancel\",e).set(\"touchstart\",function(){clearTimeout(n._touchstartTimeout),n._touchstartTimeout=setTimeout(function(){return n.show()},500)})}}else this._passiveListeners.set(\"mouseenter\",function(){return n.show()}).set(\"mouseleave\",function(){return n.hide()});this._passiveListeners.forEach(function(e,t){n._elementRef.nativeElement.addEventListener(t,e,_)})},k.prototype._disableNativeGesturesIfNecessary=function(){var e=this._elementRef.nativeElement,t=e.style,n=this.touchGestures;\"off\"!==n&&((\"on\"===n||\"INPUT\"!==e.nodeName&&\"TEXTAREA\"!==e.nodeName)&&(t.userSelect=t.msUserSelect=t.webkitUserSelect=t.MozUserSelect=\"none\"),\"on\"!==n&&e.draggable||(t.webkitUserDrag=\"none\"),t.touchAction=\"none\",t.webkitTapHighlightColor=\"transparent\")},k.decorators=[{type:i.Directive,args:[{selector:\"[matTooltip]\",exportAs:\"matTooltip\",host:{\"(keydown)\":\"_handleKeydown($event)\"}}]}],k.ctorParameters=function(){return[{type:t.Overlay},{type:i.ElementRef},{type:h.ScrollDispatcher},{type:i.ViewContainerRef},{type:i.NgZone},{type:p.Platform},{type:n.AriaDescriber},{type:n.FocusMonitor},{type:void 0,decorators:[{type:i.Inject,args:[w]}]},{type:s.Directionality,decorators:[{type:i.Optional}]},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[S]}]},{type:void 0,decorators:[{type:i.Inject,args:[i.ElementRef]}]}]},k.propDecorators={position:[{type:i.Input,args:[\"matTooltipPosition\"]}],disabled:[{type:i.Input,args:[\"matTooltipDisabled\"]}],showDelay:[{type:i.Input,args:[\"matTooltipShowDelay\"]}],hideDelay:[{type:i.Input,args:[\"matTooltipHideDelay\"]}],touchGestures:[{type:i.Input,args:[\"matTooltipTouchGestures\"]}],message:[{type:i.Input,args:[\"matTooltip\"]}],tooltipClass:[{type:i.Input,args:[\"matTooltipClass\"]}]},k);function k(e,t,n,r,i,o,a,s,l,u,c,p){var d=this;this._overlay=e,this._elementRef=t,this._scrollDispatcher=n,this._viewContainerRef=r,this._ngZone=i,this._platform=o,this._ariaDescriber=a,this._focusMonitor=s,this._dir=u,this._defaultOptions=c,this._position=\"below\",this._disabled=!1,this.showDelay=this._defaultOptions.showDelay,this.hideDelay=this._defaultOptions.hideDelay,this.touchGestures=\"auto\",this._message=\"\",this._passiveListeners=new Map,this._destroyed=new f.Subject,this._scrollStrategy=l,c&&(c.position&&(this.position=c.position),c.touchGestures&&(this.touchGestures=c.touchGestures)),s.monitor(t).pipe(m.takeUntil(this._destroyed)).subscribe(function(e){e?\"keyboard\"===e&&i.run(function(){return d.show()}):i.run(function(){return d.hide(0)})})}var D=(T.prototype.show=function(e){var t=this;this._hideTimeoutId&&(clearTimeout(this._hideTimeoutId),this._hideTimeoutId=null),this._closeOnInteraction=!0,this._showTimeoutId=setTimeout(function(){t._visibility=\"visible\",t._showTimeoutId=null,t._markForCheck()},e)},T.prototype.hide=function(e){var t=this;this._showTimeoutId&&(clearTimeout(this._showTimeoutId),this._showTimeoutId=null),this._hideTimeoutId=setTimeout(function(){t._visibility=\"hidden\",t._hideTimeoutId=null,t._markForCheck()},e)},T.prototype.afterHidden=function(){return this._onHide.asObservable()},T.prototype.isVisible=function(){return\"visible\"===this._visibility},T.prototype.ngOnDestroy=function(){this._onHide.complete()},T.prototype._animationStart=function(){this._closeOnInteraction=!1},T.prototype._animationDone=function(e){var t=e.toState;\"hidden\"!==t||this.isVisible()||this._onHide.next(),\"visible\"!==t&&\"hidden\"!==t||(this._closeOnInteraction=!0)},T.prototype._handleBodyInteraction=function(){this._closeOnInteraction&&this.hide(0)},T.prototype._markForCheck=function(){this._changeDetectorRef.markForCheck()},T.decorators=[{type:i.Component,args:[{moduleId:module.id,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:i.ViewEncapsulation.None,changeDetection:i.ChangeDetectionStrategy.OnPush,animations:[y.tooltipState],host:{\"[style.zoom]\":'_visibility === \"visible\" ? 1 : null',\"(body:click)\":\"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}@media(-ms-high-contrast: active){.mat-tooltip{outline:solid 1px}}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}/*# sourceMappingURL=tooltip.css.map */\\n\"]}]}],T.ctorParameters=function(){return[{type:i.ChangeDetectorRef},{type:c.BreakpointObserver}]},T);function T(e,t){this._changeDetectorRef=e,this._breakpointObserver=t,this._visibility=\"initial\",this._closeOnInteraction=!1,this._onHide=new f.Subject,this._isHandset=this._breakpointObserver.observe(c.Breakpoints.Handset)}var I=(P.decorators=[{type:i.NgModule,args:[{imports:[n.A11yModule,r.CommonModule,t.OverlayModule,o.MatCommonModule],exports:[O,D,o.MatCommonModule],declarations:[O,D],entryComponents:[D],providers:[C]}]}],P);function P(){}e.MatTooltipModule=I,e.SCROLL_THROTTLE_MS=20,e.TOOLTIP_PANEL_CLASS=g,e.getMatTooltipInvalidPositionError=b,e.MAT_TOOLTIP_SCROLL_STRATEGY=w,e.MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY=x,e.MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER=C,e.MAT_TOOLTIP_DEFAULT_OPTIONS=S,e.MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY=E,e.MatTooltip=O,e.TooltipComponent=D,e.matTooltipAnimations=y,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/collections\"),require(\"rxjs\"),require(\"rxjs/operators\"),require(\"@angular/core\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/a11y\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-tree.umd.js\",[\"tslib\",\"@angular/cdk/collections\",\"rxjs\",\"rxjs/operators\",\"@angular/core\",\"@angular/cdk/bidi\",\"@angular/cdk/coercion\",\"@angular/cdk/a11y\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/collections\"),e(\"rxjs\"),e(\"rxjs/operators\"),e(\"@angular/core\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/a11y\"),e(\"@angular/common\"))})}(0,function(e,l,n,u,c,t,r,i,o,a){\"use strict\";var s=(p.prototype.toggle=function(e){this.expansionModel.toggle(e)},p.prototype.expand=function(e){this.expansionModel.select(e)},p.prototype.collapse=function(e){this.expansionModel.deselect(e)},p.prototype.isExpanded=function(e){return this.expansionModel.isSelected(e)},p.prototype.toggleDescendants=function(e){this.expansionModel.isSelected(e)?this.collapseDescendants(e):this.expandDescendants(e)},p.prototype.collapseAll=function(){this.expansionModel.clear()},p.prototype.expandDescendants=function(e){var t,n=[e];n.push.apply(n,l.__spread(this.getDescendants(e))),(t=this.expansionModel).select.apply(t,l.__spread(n))},p.prototype.collapseDescendants=function(e){var t,n=[e];n.push.apply(n,l.__spread(this.getDescendants(e))),(t=this.expansionModel).deselect.apply(t,l.__spread(n))},p);function p(){this.expansionModel=new n.SelectionModel(!0)}var d,h=(d=s,l.__extends(f,d),f.prototype.getDescendants=function(e){for(var t=[],n=this.dataNodes.indexOf(e)+1;n<this.dataNodes.length&&this.getLevel(e)<this.getLevel(this.dataNodes[n]);n++)t.push(this.dataNodes[n]);return t},f.prototype.expandAll=function(){var e;(e=this.expansionModel).select.apply(e,l.__spread(this.dataNodes))},f);function f(e,t){var n=d.call(this)||this;return n.getLevel=e,n.isExpandable=t,n}var m,v=(m=s,l.__extends(y,m),y.prototype.expandAll=function(){var e,n=this;this.expansionModel.clear();var t=this.dataNodes.reduce(function(e,t){return l.__spread(e,n.getDescendants(t),[t])},[]);(e=this.expansionModel).select.apply(e,l.__spread(t))},y.prototype.getDescendants=function(e){var t=[];return this._getDescendants(t,e),t.splice(1)},y.prototype._getDescendants=function(a,e){var s=this;a.push(e);var t=this.getChildren(e);Array.isArray(t)?t.forEach(function(e){return s._getDescendants(a,e)}):t instanceof u.Observable&&t.pipe(c.take(1),c.filter(Boolean)).subscribe(function(e){var t,n;try{for(var r=l.__values(e),i=r.next();!i.done;i=r.next()){var o=i.value;s._getDescendants(a,o)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}})},y);function y(e){var t=m.call(this)||this;return t.getChildren=e,t}var g=new t.InjectionToken(\"CDK_TREE_NODE_OUTLET_NODE\"),_=(b.decorators=[{type:t.Directive,args:[{selector:\"[cdkTreeNodeOutlet]\"}]}],b.ctorParameters=function(){return[{type:t.ViewContainerRef},{type:void 0,decorators:[{type:t.Inject,args:[g]},{type:t.Optional}]}]},b);function b(e,t){this.viewContainer=e,this._node=t}var w=function(e){this.$implicit=e},x=(C.decorators=[{type:t.Directive,args:[{selector:\"[cdkTreeNodeDef]\",inputs:[\"when: cdkTreeNodeDefWhen\"]}]}],C.ctorParameters=function(){return[{type:t.TemplateRef}]},C);function C(e){this.template=e}function S(){return Error(\"A valid data source must be provided.\")}function E(){return Error(\"There can only be one default row without a when predicate function.\")}function O(){return Error(\"Could not find a matching node definition for the provided node data.\")}function k(){return Error(\"Could not find a tree control for the tree.\")}function D(){return Error(\"Could not find functions for nested/flat tree in tree control.\")}var T=(Object.defineProperty(I.prototype,\"dataSource\",{get:function(){return this._dataSource},set:function(e){this._dataSource!==e&&this._switchDataSource(e)},enumerable:!0,configurable:!0}),I.prototype.ngOnInit=function(){if(this._dataDiffer=this._differs.find([]).create(this.trackBy),!this.treeControl)throw k()},I.prototype.ngOnDestroy=function(){this._nodeOutlet.viewContainer.clear(),this._onDestroy.next(),this._onDestroy.complete(),this._dataSource&&\"function\"==typeof this._dataSource.disconnect&&this.dataSource.disconnect(this),this._dataSubscription&&(this._dataSubscription.unsubscribe(),this._dataSubscription=null)},I.prototype.ngAfterContentChecked=function(){var e=this._nodeDefs.filter(function(e){return!e.when});if(1<e.length)throw E();this._defaultNodeDef=e[0],this.dataSource&&this._nodeDefs&&!this._dataSubscription&&this._observeRenderChanges()},I.prototype._switchDataSource=function(e){this._dataSource&&\"function\"==typeof this._dataSource.disconnect&&this.dataSource.disconnect(this),this._dataSubscription&&(this._dataSubscription.unsubscribe(),this._dataSubscription=null),e||this._nodeOutlet.viewContainer.clear(),this._dataSource=e,this._nodeDefs&&this._observeRenderChanges()},I.prototype._observeRenderChanges=function(){var e,t=this;if(n.isDataSource(this._dataSource)?e=this._dataSource.connect(this):this._dataSource instanceof u.Observable?e=this._dataSource:Array.isArray(this._dataSource)&&(e=u.of(this._dataSource)),!e)throw S();this._dataSubscription=e.pipe(c.takeUntil(this._onDestroy)).subscribe(function(e){return t.renderNodeChanges(e)})},I.prototype.renderNodeChanges=function(i,e,o,a){var s=this;void 0===e&&(e=this._dataDiffer),void 0===o&&(o=this._nodeOutlet.viewContainer);var t=e.diff(i);t&&(t.forEachOperation(function(e,t,n){if(null==e.previousIndex)s.insertNode(i[n],n,o,a);else if(null==n)o.remove(t),s._levels.delete(e.item);else{var r=o.get(t);o.move(r,n)}}),this._changeDetectorRef.detectChanges())},I.prototype._getNodeDef=function(t,n){if(1===this._nodeDefs.length)return this._nodeDefs.first;var e=this._nodeDefs.find(function(e){return e.when&&e.when(n,t)})||this._defaultNodeDef;if(!e)throw O();return e},I.prototype.insertNode=function(e,t,n,r){var i=this._getNodeDef(e,t),o=new w(e);this.treeControl.getLevel?o.level=this.treeControl.getLevel(e):void 0!==r&&this._levels.has(r)?o.level=this._levels.get(r)+1:o.level=0,this._levels.set(e,o.level),(n||this._nodeOutlet.viewContainer).createEmbeddedView(i.template,o,t),P.mostRecentTreeNode&&(P.mostRecentTreeNode.data=e)},I.decorators=[{type:t.Component,args:[{moduleId:module.id,selector:\"cdk-tree\",exportAs:\"cdkTree\",template:\"<ng-container cdkTreeNodeOutlet></ng-container>\",host:{class:\"cdk-tree\",role:\"tree\"},encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.Default}]}],I.ctorParameters=function(){return[{type:t.IterableDiffers},{type:t.ChangeDetectorRef}]},I.propDecorators={dataSource:[{type:t.Input}],treeControl:[{type:t.Input}],trackBy:[{type:t.Input}],_nodeOutlet:[{type:t.ViewChild,args:[_,{static:!0}]}],_nodeDefs:[{type:t.ContentChildren,args:[x]}]},I);function I(e,t){this._differs=e,this._changeDetectorRef=t,this._onDestroy=new u.Subject,this._levels=new Map,this.viewChange=new u.BehaviorSubject({start:0,end:Number.MAX_VALUE})}var P=(Object.defineProperty(A.prototype,\"data\",{get:function(){return this._data},set:function(e){e!==this._data&&(this._data=e,this._setRoleFromData(),this._dataChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,\"isExpanded\",{get:function(){return this._tree.treeControl.isExpanded(this._data)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,\"level\",{get:function(){return this._tree.treeControl.getLevel?this._tree.treeControl.getLevel(this._data):0},enumerable:!0,configurable:!0}),A.prototype.ngOnDestroy=function(){A.mostRecentTreeNode===this&&(A.mostRecentTreeNode=null),this._dataChanges.complete(),this._destroyed.next(),this._destroyed.complete()},A.prototype.focus=function(){this._elementRef.nativeElement.focus()},A.prototype._setRoleFromData=function(){var t=this;if(this._tree.treeControl.isExpandable)this.role=this._tree.treeControl.isExpandable(this._data)?\"group\":\"treeitem\";else{if(!this._tree.treeControl.getChildren)throw D();var e=this._tree.treeControl.getChildren(this._data);Array.isArray(e)?this._setRoleFromChildren(e):e instanceof u.Observable&&e.pipe(c.takeUntil(this._destroyed)).subscribe(function(e){return t._setRoleFromChildren(e)})}},A.prototype._setRoleFromChildren=function(e){this.role=e&&e.length?\"group\":\"treeitem\"},A.mostRecentTreeNode=null,A.decorators=[{type:t.Directive,args:[{selector:\"cdk-tree-node\",exportAs:\"cdkTreeNode\",host:{\"[attr.aria-expanded]\":\"isExpanded\",\"[attr.aria-level]\":'role === \"treeitem\" ? level : null',\"[attr.role]\":\"role\",class:\"cdk-tree-node\"}}]}],A.ctorParameters=function(){return[{type:t.ElementRef},{type:T}]},A.propDecorators={role:[{type:t.Input}]},A);function A(e,t){this._elementRef=e,this._tree=t,this._destroyed=new u.Subject,this._dataChanges=new u.Subject,this.role=\"treeitem\",A.mostRecentTreeNode=this}var M,R=(M=P,l.__extends(N,M),N.prototype.ngAfterContentInit=function(){var t=this;if(this._dataDiffer=this._differs.find([]).create(this._tree.trackBy),!this._tree.treeControl.getChildren)throw D();var e=this._tree.treeControl.getChildren(this.data);Array.isArray(e)?this.updateChildrenNodes(e):e instanceof u.Observable&&e.pipe(c.takeUntil(this._destroyed)).subscribe(function(e){return t.updateChildrenNodes(e)}),this.nodeOutlet.changes.pipe(c.takeUntil(this._destroyed)).subscribe(function(){return t.updateChildrenNodes()})},N.prototype.ngOnDestroy=function(){this._clear(),M.prototype.ngOnDestroy.call(this)},N.prototype.updateChildrenNodes=function(e){var t=this._getNodeOutlet();if(e&&(this._children=e),t&&this._children){var n=t.viewContainer;this._tree.renderNodeChanges(this._children,this._dataDiffer,n,this._data)}else this._dataDiffer.diff([])},N.prototype._clear=function(){var e=this._getNodeOutlet();e&&(e.viewContainer.clear(),this._dataDiffer.diff([]))},N.prototype._getNodeOutlet=function(){var t=this,e=this.nodeOutlet;return e&&e.find(function(e){return!e._node||e._node===t})},N.decorators=[{type:t.Directive,args:[{selector:\"cdk-nested-tree-node\",exportAs:\"cdkNestedTreeNode\",host:{\"[attr.aria-expanded]\":\"isExpanded\",\"[attr.role]\":\"role\",class:\"cdk-tree-node cdk-nested-tree-node\"},providers:[{provide:P,useExisting:N},{provide:g,useExisting:N}]}]}],N.ctorParameters=function(){return[{type:t.ElementRef},{type:T},{type:t.IterableDiffers}]},N.propDecorators={nodeOutlet:[{type:t.ContentChildren,args:[_,{descendants:!0}]}]},N);function N(e,t,n){var r=M.call(this,e,t)||this;return r._elementRef=e,r._tree=t,r._differs=n,r}var j=/([A-Za-z%]+)$/,F=(Object.defineProperty(L.prototype,\"level\",{get:function(){return this._level},set:function(e){this._level=i.coerceNumberProperty(e,null),this._setPadding()},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"indent\",{get:function(){return this._indent},set:function(e){var t=e,n=\"px\";if(\"string\"==typeof e){var r=e.split(j);t=r[0],n=r[1]||n}this.indentUnits=n,this._indent=i.coerceNumberProperty(t),this._setPadding()},enumerable:!0,configurable:!0}),L.prototype.ngOnDestroy=function(){this._destroyed.next(),this._destroyed.complete()},L.prototype._paddingIndent=function(){var e=this._treeNode.data&&this._tree.treeControl.getLevel?this._tree.treeControl.getLevel(this._treeNode.data):null,t=null==this._level?e:this._level;return\"number\"==typeof t?\"\"+t*this._indent+this.indentUnits:null},L.prototype._setPadding=function(e){void 0===e&&(e=!1);var t=this._paddingIndent();if(t!==this._currentPadding||e){var n=this._element.nativeElement,r=this._dir&&\"rtl\"===this._dir.value?\"paddingRight\":\"paddingLeft\",i=\"paddingLeft\"==r?\"paddingRight\":\"paddingLeft\";this._renderer.setStyle(n,r,t),this._renderer.setStyle(n,i,null),this._currentPadding=t}},L.decorators=[{type:t.Directive,args:[{selector:\"[cdkTreeNodePadding]\"}]}],L.ctorParameters=function(){return[{type:P},{type:T},{type:t.Renderer2},{type:t.ElementRef},{type:r.Directionality,decorators:[{type:t.Optional}]}]},L.propDecorators={level:[{type:t.Input,args:[\"cdkTreeNodePadding\"]}],indent:[{type:t.Input,args:[\"cdkTreeNodePaddingIndent\"]}]},L);function L(e,t,n,r,i){var o=this;this._treeNode=e,this._tree=t,this._renderer=n,this._element=r,this._dir=i,this._destroyed=new u.Subject,this.indentUnits=\"px\",this._indent=40,this._setPadding(),i&&i.change.pipe(c.takeUntil(this._destroyed)).subscribe(function(){return o._setPadding(!0)}),e._dataChanges.subscribe(function(){return o._setPadding()})}var V=(Object.defineProperty(B.prototype,\"recursive\",{get:function(){return this._recursive},set:function(e){this._recursive=i.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),B.prototype._toggle=function(e){this.recursive?this._tree.treeControl.toggleDescendants(this._treeNode.data):this._tree.treeControl.toggle(this._treeNode.data),e.stopPropagation()},B.decorators=[{type:t.Directive,args:[{selector:\"[cdkTreeNodeToggle]\"}]}],B.ctorParameters=function(){return[{type:T},{type:P}]},B.propDecorators={recursive:[{type:t.Input,args:[\"cdkTreeNodeToggleRecursive\"]}],_toggle:[{type:t.HostListener,args:[\"click\",[\"$event\"]]}]},B);function B(e,t){this._tree=e,this._treeNode=t,this._recursive=!1}var U=[R,x,F,V,T,P,_],z=(q.decorators=[{type:t.NgModule,args:[{imports:[a.CommonModule],exports:U,declarations:U,providers:[o.FocusMonitor,x]}]}],q);function q(){}e.BaseTreeControl=s,e.FlatTreeControl=h,e.NestedTreeControl=v,e.CdkNestedTreeNode=R,e.CdkTreeNodeOutletContext=w,e.CdkTreeNodeDef=x,e.CdkTreeNodePadding=F,e.CDK_TREE_NODE_OUTLET_NODE=g,e.CdkTreeNodeOutlet=_,e.CdkTree=T,e.CdkTreeNode=P,e.getTreeNoValidDataSourceError=S,e.getTreeMultipleDefaultNodeDefsError=E,e.getTreeMissingMatchingNodeDefError=O,e.getTreeControlMissingError=k,e.getTreeControlFunctionsMissingError=D,e.CdkTreeModule=z,e.CdkTreeNodeToggle=V,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-bidi.umd.js\",[\"@angular/core\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/common\"))})}(0,function(e,i,t){\"use strict\";var n=new i.InjectionToken(\"cdk-dir-doc\",{providedIn:\"root\",factory:r});function r(){return i.inject(t.DOCUMENT)}var o=(a.prototype.ngOnDestroy=function(){this.change.complete()},a.decorators=[{type:i.Injectable,args:[{providedIn:\"root\"}]}],a.ctorParameters=function(){return[{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[n]}]}]},a.ngInjectableDef=i.ɵɵdefineInjectable({factory:function(){return new a(i.ɵɵinject(n,8))},token:a,providedIn:\"root\"}),a);function a(e){if(this.value=\"ltr\",this.change=new i.EventEmitter,e){var t=e.body?e.body.dir:null,n=e.documentElement?e.documentElement.dir:null,r=t||n;this.value=\"ltr\"===r||\"rtl\"===r?r:\"ltr\"}}var s=(Object.defineProperty(l.prototype,\"dir\",{get:function(){return this._dir},set:function(e){var t=this._dir,n=e?e.toLowerCase():e;this._rawDir=e,this._dir=\"ltr\"===n||\"rtl\"===n?n:\"ltr\",t!==this._dir&&this._isInitialized&&this.change.emit(this._dir)},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"value\",{get:function(){return this.dir},enumerable:!0,configurable:!0}),l.prototype.ngAfterContentInit=function(){this._isInitialized=!0},l.prototype.ngOnDestroy=function(){this.change.complete()},l.decorators=[{type:i.Directive,args:[{selector:\"[dir]\",providers:[{provide:o,useExisting:l}],host:{\"[attr.dir]\":\"_rawDir\"},exportAs:\"dir\"}]}],l.propDecorators={change:[{type:i.Output,args:[\"dirChange\"]}],dir:[{type:i.Input}]},l);function l(){this._dir=\"ltr\",this._isInitialized=!1,this.change=new i.EventEmitter}var u=(c.decorators=[{type:i.NgModule,args:[{exports:[s],declarations:[s]}]}],c);function c(){}e.ɵangular_material_src_cdk_bidi_bidi_a=r,e.Directionality=o,e.DIR_DOCUMENT=n,e.Dir=s,e.BidiModule=u,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk.umd.js\",[\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"))})}(0,function(e,t){\"use strict\";var n=new t.Version(\"9.0.0-next.0\");e.VERSION=n,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-platform.umd.js\",[\"@angular/core\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/common\"))})}(0,function(i,e,t){\"use strict\";var n;try{n=\"undefined\"!=typeof Intl&&Intl.v8BreakIterator}catch(e){n=!1}var r=(o.decorators=[{type:e.Injectable,args:[{providedIn:\"root\"}]}],o.ctorParameters=function(){return[{type:Object,decorators:[{type:e.Optional},{type:e.Inject,args:[e.PLATFORM_ID]}]}]},o.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new o(e.ɵɵinject(e.PLATFORM_ID,8))},token:o,providedIn:\"root\"}),o);function o(e){this._platformId=e,this.isBrowser=this._platformId?t.isPlatformBrowser(this._platformId):\"object\"==typeof document&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!(!window.chrome&&!n)&&\"undefined\"!=typeof CSS&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!(\"MSStream\"in window),this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}var a,s=(l.decorators=[{type:e.NgModule,args:[{}]}],l);function l(){}var u,c,p,d,h=[\"color\",\"button\",\"checkbox\",\"date\",\"datetime-local\",\"email\",\"file\",\"hidden\",\"image\",\"month\",\"number\",\"password\",\"radio\",\"range\",\"reset\",\"search\",\"submit\",\"tel\",\"text\",\"time\",\"url\",\"week\"];function f(){if(null==u&&\"undefined\"!=typeof window)try{window.addEventListener(\"test\",null,Object.defineProperty({},\"passive\",{get:function(){return u=!0}}))}finally{u=u||!1}return u}(c=i.RtlScrollAxisType||(i.RtlScrollAxisType={}))[c.NORMAL=0]=\"NORMAL\",c[c.NEGATED=1]=\"NEGATED\",c[c.INVERTED=2]=\"INVERTED\",i.Platform=r,i.PlatformModule=s,i.getSupportedInputTypes=function(){if(a)return a;if(\"object\"!=typeof document||!document)return a=new Set(h);var t=document.createElement(\"input\");return a=new Set(h.filter(function(e){return t.setAttribute(\"type\",e),t.type===e}))},i.supportsPassiveEventListeners=f,i.normalizePassiveListenerOptions=function(e){return f()?e:!!e.capture},i.supportsScrollBehavior=function(){return!!(\"object\"==typeof document&&\"scrollBehavior\"in document.documentElement.style)},i.getRtlScrollAxisType=function(){if(\"object\"!=typeof document||!document)return i.RtlScrollAxisType.NORMAL;if(!p){var e=document.createElement(\"div\"),t=e.style;e.dir=\"rtl\",t.height=\"1px\",t.width=\"1px\",t.overflow=\"auto\",t.visibility=\"hidden\",t.pointerEvents=\"none\",t.position=\"absolute\";var n=document.createElement(\"div\"),r=n.style;r.width=\"2px\",r.height=\"1px\",e.appendChild(n),document.body.appendChild(e),p=i.RtlScrollAxisType.NORMAL,0===e.scrollLeft&&(e.scrollLeft=1,p=0===e.scrollLeft?i.RtlScrollAxisType.NEGATED:i.RtlScrollAxisType.INVERTED),e.parentNode.removeChild(e)}return p},i._supportsShadowDom=function(){if(null==d){var e=\"undefined\"!=typeof document?document.head:null;d=!(!e||!e.createShadowRoot&&!e.attachShadow)}return d},Object.defineProperty(i,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/cdk/coercion\"),require(\"@angular/core\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-observers.umd.js\",[\"@angular/cdk/coercion\",\"@angular/core\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/cdk/coercion\"),e(\"@angular/core\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,t,r,i,n){\"use strict\";var o=(a.prototype.create=function(e){return\"undefined\"==typeof MutationObserver?null:new MutationObserver(e)},a.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],a.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new a},token:a,providedIn:\"root\"}),a);function a(){}var s=(l.prototype.ngOnDestroy=function(){var n=this;this._observedElements.forEach(function(e,t){return n._cleanupObserver(t)})},l.prototype.observe=function(e){var n=this,r=t.coerceElement(e);return new i.Observable(function(e){var t=n._observeElement(r).subscribe(e);return function(){t.unsubscribe(),n._unobserveElement(r)}})},l.prototype._observeElement=function(e){if(this._observedElements.has(e))this._observedElements.get(e).count++;else{var t=new i.Subject,n=this._mutationObserverFactory.create(function(e){return t.next(e)});n&&n.observe(e,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(e,{observer:n,stream:t,count:1})}return this._observedElements.get(e).stream},l.prototype._unobserveElement=function(e){this._observedElements.has(e)&&(this._observedElements.get(e).count--,this._observedElements.get(e).count||this._cleanupObserver(e))},l.prototype._cleanupObserver=function(e){if(this._observedElements.has(e)){var t=this._observedElements.get(e),n=t.observer,r=t.stream;n&&n.disconnect(),r.complete(),this._observedElements.delete(e)}},l.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],l.ctorParameters=function(){return[{type:o}]},l.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new l(r.ɵɵinject(o))},token:l,providedIn:\"root\"}),l);function l(e){this._mutationObserverFactory=e,this._observedElements=new Map}var u=(Object.defineProperty(c.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=t.coerceBooleanProperty(e),this._disabled?this._unsubscribe():this._subscribe()},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,\"debounce\",{get:function(){return this._debounce},set:function(e){this._debounce=t.coerceNumberProperty(e),this._subscribe()},enumerable:!0,configurable:!0}),c.prototype.ngAfterContentInit=function(){this._currentSubscription||this.disabled||this._subscribe()},c.prototype.ngOnDestroy=function(){this._unsubscribe()},c.prototype._subscribe=function(){var e=this;this._unsubscribe();var t=this._contentObserver.observe(this._elementRef);this._ngZone.runOutsideAngular(function(){e._currentSubscription=(e.debounce?t.pipe(n.debounceTime(e.debounce)):t).subscribe(e.event)})},c.prototype._unsubscribe=function(){this._currentSubscription&&this._currentSubscription.unsubscribe()},c.decorators=[{type:r.Directive,args:[{selector:\"[cdkObserveContent]\",exportAs:\"cdkObserveContent\"}]}],c.ctorParameters=function(){return[{type:s},{type:r.ElementRef},{type:r.NgZone}]},c.propDecorators={event:[{type:r.Output,args:[\"cdkObserveContent\"]}],disabled:[{type:r.Input,args:[\"cdkObserveContentDisabled\"]}],debounce:[{type:r.Input}]},c);function c(e,t,n){this._contentObserver=e,this._elementRef=t,this._ngZone=n,this.event=new r.EventEmitter,this._disabled=!1,this._currentSubscription=null}var p=(d.decorators=[{type:r.NgModule,args:[{exports:[u],declarations:[u],providers:[o]}]}],d);function d(){}e.MutationObserverFactory=o,e.ContentObserver=s,e.CdkObserveContent=u,e.ObserversModule=p,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\"),require(\"tslib\"),require(\"rxjs\"),require(\"@angular/cdk/keycodes\"),require(\"rxjs/operators\"),require(\"@angular/cdk/coercion\"),require(\"@angular/cdk/platform\"),require(\"@angular/cdk/observers\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-a11y.umd.js\",[\"@angular/common\",\"@angular/core\",\"tslib\",\"rxjs\",\"@angular/cdk/keycodes\",\"rxjs/operators\",\"@angular/cdk/coercion\",\"@angular/cdk/platform\",\"@angular/cdk/observers\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"),e(\"tslib\"),e(\"rxjs\"),e(\"@angular/cdk/keycodes\"),e(\"rxjs/operators\"),e(\"@angular/cdk/coercion\"),e(\"@angular/cdk/platform\"),e(\"@angular/cdk/observers\"))})}(0,function(e,t,r,l,u,i,n,c,o,a){\"use strict\";function s(e,t){return(e.getAttribute(t)||\"\").match(/\\S+/g)||[]}var p=\"cdk-describedby-message-container\",d=\"cdk-describedby-message\",h=\"cdk-describedby-host\",f=0,m=new Map,v=null,y=(g.prototype.describe=function(e,t){this._canBeDescribed(e,t)&&(\"string\"!=typeof t?(this._setMessageId(t),m.set(t,{messageElement:t,referenceCount:0})):m.has(t)||this._createMessageElement(t),this._isElementDescribedByMessage(e,t)||this._addMessageReference(e,t))},g.prototype.removeDescription=function(e,t){if(this._isElementNode(e)){if(this._isElementDescribedByMessage(e,t)&&this._removeMessageReference(e,t),\"string\"==typeof t){var n=m.get(t);n&&0===n.referenceCount&&this._deleteMessageElement(t)}v&&0===v.childNodes.length&&this._deleteMessagesContainer()}},g.prototype.ngOnDestroy=function(){for(var e=this._document.querySelectorAll(\"[\"+h+\"]\"),t=0;t<e.length;t++)this._removeCdkDescribedByReferenceIds(e[t]),e[t].removeAttribute(h);v&&this._deleteMessagesContainer(),m.clear()},g.prototype._createMessageElement=function(e){var t=this._document.createElement(\"div\");this._setMessageId(t),t.textContent=e,this._createMessagesContainer(),v.appendChild(t),m.set(e,{messageElement:t,referenceCount:0})},g.prototype._setMessageId=function(e){e.id||(e.id=d+\"-\"+f++)},g.prototype._deleteMessageElement=function(e){var t=m.get(e),n=t&&t.messageElement;v&&n&&v.removeChild(n),m.delete(e)},g.prototype._createMessagesContainer=function(){if(!v){var e=this._document.getElementById(p);e&&e.parentNode.removeChild(e),(v=this._document.createElement(\"div\")).id=p,v.setAttribute(\"aria-hidden\",\"true\"),v.style.display=\"none\",this._document.body.appendChild(v)}},g.prototype._deleteMessagesContainer=function(){v&&v.parentNode&&(v.parentNode.removeChild(v),v=null)},g.prototype._removeCdkDescribedByReferenceIds=function(e){var t=s(e,\"aria-describedby\").filter(function(e){return 0!=e.indexOf(d)});e.setAttribute(\"aria-describedby\",t.join(\" \"))},g.prototype._addMessageReference=function(e,t){var n=m.get(t);!function(e,t,n){var r=s(e,t);r.some(function(e){return e.trim()==n.trim()})||(r.push(n.trim()),e.setAttribute(t,r.join(\" \")))}(e,\"aria-describedby\",n.messageElement.id),e.setAttribute(h,\"\"),n.referenceCount++},g.prototype._removeMessageReference=function(e,t){var n=m.get(t);n.referenceCount--,function(e,t,n){var r=s(e,t).filter(function(e){return e!=n.trim()});r.length?e.setAttribute(t,r.join(\" \")):e.removeAttribute(t)}(e,\"aria-describedby\",n.messageElement.id),e.removeAttribute(h)},g.prototype._isElementDescribedByMessage=function(e,t){var n=s(e,\"aria-describedby\"),r=m.get(t),i=r&&r.messageElement.id;return!!i&&-1!=n.indexOf(i)},g.prototype._canBeDescribed=function(e,t){if(!this._isElementNode(e))return!1;if(t&&\"object\"==typeof t)return!0;var n=null==t?\"\":(\"\"+t).trim(),r=e.getAttribute(\"aria-label\");return!(!n||r&&r.trim()===n)},g.prototype._isElementNode=function(e){return e.nodeType===this._document.ELEMENT_NODE},g.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],g.ctorParameters=function(){return[{type:void 0,decorators:[{type:r.Inject,args:[t.DOCUMENT]}]}]},g.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new g(r.ɵɵinject(t.DOCUMENT))},token:g,providedIn:\"root\"}),g);function g(e){this._document=e}function _(e,t){return e||new y(t)}var b={provide:y,deps:[[new r.Optional,new r.SkipSelf,y],t.DOCUMENT],useFactory:_},w=(x.prototype.skipPredicate=function(e){return this._skipPredicateFn=e,this},x.prototype.withWrap=function(e){return void 0===e&&(e=!0),this._wrap=e,this},x.prototype.withVerticalOrientation=function(e){return void 0===e&&(e=!0),this._vertical=e,this},x.prototype.withHorizontalOrientation=function(e){return this._horizontal=e,this},x.prototype.withAllowedModifierKeys=function(e){return this._allowedModifierKeys=e,this},x.prototype.withTypeAhead=function(e){var o=this;if(void 0===e&&(e=200),this._items.length&&this._items.some(function(e){return\"function\"!=typeof e.getLabel}))throw Error(\"ListKeyManager items in typeahead mode must implement the `getLabel` method.\");return this._typeaheadSubscription.unsubscribe(),this._typeaheadSubscription=this._letterKeyStream.pipe(n.tap(function(e){return o._pressedLetters.push(e)}),n.debounceTime(e),n.filter(function(){return 0<o._pressedLetters.length}),n.map(function(){return o._pressedLetters.join(\"\")})).subscribe(function(e){for(var t=o._getItemsArray(),n=1;n<t.length+1;n++){var r=(o._activeItemIndex+n)%t.length,i=t[r];if(!o._skipPredicateFn(i)&&0===i.getLabel().toUpperCase().trim().indexOf(e)){o.setActiveItem(r);break}}o._pressedLetters=[]}),this},x.prototype.setActiveItem=function(e){var t=this._activeItemIndex;this.updateActiveItem(e),this._activeItemIndex!==t&&this.change.next(this._activeItemIndex)},x.prototype.onKeydown=function(t){var n=this,e=t.keyCode,r=[\"altKey\",\"ctrlKey\",\"metaKey\",\"shiftKey\"].every(function(e){return!t[e]||-1<n._allowedModifierKeys.indexOf(e)});switch(e){case i.TAB:return void this.tabOut.next();case i.DOWN_ARROW:if(this._vertical&&r){this.setNextItemActive();break}return;case i.UP_ARROW:if(this._vertical&&r){this.setPreviousItemActive();break}return;case i.RIGHT_ARROW:if(this._horizontal&&r){\"rtl\"===this._horizontal?this.setPreviousItemActive():this.setNextItemActive();break}return;case i.LEFT_ARROW:if(this._horizontal&&r){\"rtl\"===this._horizontal?this.setNextItemActive():this.setPreviousItemActive();break}return;default:return void((r||i.hasModifierKey(t,\"shiftKey\"))&&(t.key&&1===t.key.length?this._letterKeyStream.next(t.key.toLocaleUpperCase()):(e>=i.A&&e<=i.Z||e>=i.ZERO&&e<=i.NINE)&&this._letterKeyStream.next(String.fromCharCode(e))))}this._pressedLetters=[],t.preventDefault()},Object.defineProperty(x.prototype,\"activeItemIndex\",{get:function(){return this._activeItemIndex},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"activeItem\",{get:function(){return this._activeItem},enumerable:!0,configurable:!0}),x.prototype.setFirstItemActive=function(){this._setActiveItemByIndex(0,1)},x.prototype.setLastItemActive=function(){this._setActiveItemByIndex(this._items.length-1,-1)},x.prototype.setNextItemActive=function(){this._activeItemIndex<0?this.setFirstItemActive():this._setActiveItemByDelta(1)},x.prototype.setPreviousItemActive=function(){this._activeItemIndex<0&&this._wrap?this.setLastItemActive():this._setActiveItemByDelta(-1)},x.prototype.updateActiveItem=function(e){var t=this._getItemsArray(),n=\"number\"==typeof e?e:t.indexOf(e),r=t[n];this._activeItem=null==r?null:r,this._activeItemIndex=n},x.prototype.updateActiveItemIndex=function(e){this.updateActiveItem(e)},x.prototype._setActiveItemByDelta=function(e){this._wrap?this._setActiveInWrapMode(e):this._setActiveInDefaultMode(e)},x.prototype._setActiveInWrapMode=function(e){for(var t=this._getItemsArray(),n=1;n<=t.length;n++){var r=(this._activeItemIndex+e*n+t.length)%t.length,i=t[r];if(!this._skipPredicateFn(i))return void this.setActiveItem(r)}},x.prototype._setActiveInDefaultMode=function(e){this._setActiveItemByIndex(this._activeItemIndex+e,e)},x.prototype._setActiveItemByIndex=function(e,t){var n=this._getItemsArray();if(n[e]){for(;this._skipPredicateFn(n[e]);)if(!n[e+=t])return;this.setActiveItem(e)}},x.prototype._getItemsArray=function(){return this._items instanceof r.QueryList?this._items.toArray():this._items},x);function x(e){var n=this;this._items=e,this._activeItemIndex=-1,this._activeItem=null,this._wrap=!1,this._letterKeyStream=new u.Subject,this._typeaheadSubscription=u.Subscription.EMPTY,this._vertical=!0,this._allowedModifierKeys=[],this._skipPredicateFn=function(e){return e.disabled},this._pressedLetters=[],this.tabOut=new u.Subject,this.change=new u.Subject,e instanceof r.QueryList&&e.changes.subscribe(function(e){if(n._activeItem){var t=e.toArray().indexOf(n._activeItem);-1<t&&t!==n._activeItemIndex&&(n._activeItemIndex=t)}})}var C,S=(C=w,l.__extends(E,C),E.prototype.setActiveItem=function(e){this.activeItem&&this.activeItem.setInactiveStyles(),C.prototype.setActiveItem.call(this,e),this.activeItem&&this.activeItem.setActiveStyles()},E);function E(){return null!==C&&C.apply(this,arguments)||this}var O,k=(O=w,l.__extends(D,O),D.prototype.setFocusOrigin=function(e){return this._origin=e,this},D.prototype.setActiveItem=function(e){O.prototype.setActiveItem.call(this,e),this.activeItem&&this.activeItem.focus(this._origin)},D);function D(){var e=null!==O&&O.apply(this,arguments)||this;return e._origin=\"program\",e}var T=(I.prototype.isDisabled=function(e){return e.hasAttribute(\"disabled\")},I.prototype.isVisible=function(e){return function(e){return!!(e.offsetWidth||e.offsetHeight||\"function\"==typeof e.getClientRects&&e.getClientRects().length)}(e)&&\"visible\"===getComputedStyle(e).visibility},I.prototype.isTabbable=function(e){if(!this._platform.isBrowser)return!1;var t=function(e){try{return e.frameElement}catch(e){return null}}(function(e){return e.ownerDocument&&e.ownerDocument.defaultView||window}(e));if(t){var n=t&&t.nodeName.toLowerCase();if(-1===A(t))return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&\"object\"===n)return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&!this.isVisible(t))return!1}var r=e.nodeName.toLowerCase(),i=A(e);if(e.hasAttribute(\"contenteditable\"))return-1!==i;if(\"iframe\"===r)return!1;if(\"audio\"===r){if(!e.hasAttribute(\"controls\"))return!1;if(this._platform.BLINK)return!0}if(\"video\"===r){if(!e.hasAttribute(\"controls\")&&this._platform.TRIDENT)return!1;if(this._platform.BLINK||this._platform.FIREFOX)return!0}return(\"object\"!==r||!this._platform.BLINK&&!this._platform.WEBKIT)&&!(this._platform.WEBKIT&&this._platform.IOS&&!function(e){var t=e.nodeName.toLowerCase(),n=\"input\"===t&&e.type;return\"text\"===n||\"password\"===n||\"select\"===t||\"textarea\"===t}(e))&&0<=e.tabIndex},I.prototype.isFocusable=function(e){return function(e){return!function(e){return function(e){return\"input\"==e.nodeName.toLowerCase()}(e)&&\"hidden\"==e.type}(e)&&(function(e){var t=e.nodeName.toLowerCase();return\"input\"===t||\"select\"===t||\"button\"===t||\"textarea\"===t}(e)||function(e){return function(e){return\"a\"==e.nodeName.toLowerCase()}(e)&&e.hasAttribute(\"href\")}(e)||e.hasAttribute(\"contenteditable\")||P(e))}(e)&&!this.isDisabled(e)&&this.isVisible(e)},I.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],I.ctorParameters=function(){return[{type:o.Platform}]},I.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new I(r.ɵɵinject(o.Platform))},token:I,providedIn:\"root\"}),I);function I(e){this._platform=e}function P(e){if(!e.hasAttribute(\"tabindex\")||void 0===e.tabIndex)return!1;var t=e.getAttribute(\"tabindex\");return\"-32768\"!=t&&!(!t||isNaN(parseInt(t,10)))}function A(e){if(!P(e))return null;var t=parseInt(e.getAttribute(\"tabindex\")||\"\",10);return isNaN(t)?-1:t}var M=(Object.defineProperty(R.prototype,\"enabled\",{get:function(){return this._enabled},set:function(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))},enumerable:!0,configurable:!0}),R.prototype.destroy=function(){var e=this._startAnchor,t=this._endAnchor;e&&(e.removeEventListener(\"focus\",this.startAnchorListener),e.parentNode&&e.parentNode.removeChild(e)),t&&(t.removeEventListener(\"focus\",this.endAnchorListener),t.parentNode&&t.parentNode.removeChild(t)),this._startAnchor=this._endAnchor=null},R.prototype.attachAnchors=function(){var e=this;return!!this._hasAttached||(this._ngZone.runOutsideAngular(function(){e._startAnchor||(e._startAnchor=e._createAnchor(),e._startAnchor.addEventListener(\"focus\",e.startAnchorListener)),e._endAnchor||(e._endAnchor=e._createAnchor(),e._endAnchor.addEventListener(\"focus\",e.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)},R.prototype.focusInitialElementWhenReady=function(){var t=this;return new Promise(function(e){t._executeOnStable(function(){return e(t.focusInitialElement())})})},R.prototype.focusFirstTabbableElementWhenReady=function(){var t=this;return new Promise(function(e){t._executeOnStable(function(){return e(t.focusFirstTabbableElement())})})},R.prototype.focusLastTabbableElementWhenReady=function(){var t=this;return new Promise(function(e){t._executeOnStable(function(){return e(t.focusLastTabbableElement())})})},R.prototype._getRegionBoundary=function(e){for(var t=this._element.querySelectorAll(\"[cdk-focus-region-\"+e+\"], [cdkFocusRegion\"+e+\"], [cdk-focus-\"+e+\"]\"),n=0;n<t.length;n++)t[n].hasAttribute(\"cdk-focus-\"+e)?console.warn(\"Found use of deprecated attribute 'cdk-focus-\"+e+\"', use 'cdkFocusRegion\"+e+\"' instead. The deprecated attribute will be removed in 8.0.0.\",t[n]):t[n].hasAttribute(\"cdk-focus-region-\"+e)&&console.warn(\"Found use of deprecated attribute 'cdk-focus-region-\"+e+\"', use 'cdkFocusRegion\"+e+\"' instead. The deprecated attribute will be removed in 8.0.0.\",t[n]);return\"start\"==e?t.length?t[0]:this._getFirstTabbableElement(this._element):t.length?t[t.length-1]:this._getLastTabbableElement(this._element)},R.prototype.focusInitialElement=function(){var e=this._element.querySelector(\"[cdk-focus-initial], [cdkFocusInitial]\");return e?(e.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\",e),r.isDevMode()&&!this._checker.isFocusable(e)&&console.warn(\"Element matching '[cdkFocusInitial]' is not focusable.\",e),e.focus(),!0):this.focusFirstTabbableElement()},R.prototype.focusFirstTabbableElement=function(){var e=this._getRegionBoundary(\"start\");return e&&e.focus(),!!e},R.prototype.focusLastTabbableElement=function(){var e=this._getRegionBoundary(\"end\");return e&&e.focus(),!!e},R.prototype.hasAttached=function(){return this._hasAttached},R.prototype._getFirstTabbableElement=function(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;for(var t=e.children||e.childNodes,n=0;n<t.length;n++){var r=t[n].nodeType===this._document.ELEMENT_NODE?this._getFirstTabbableElement(t[n]):null;if(r)return r}return null},R.prototype._getLastTabbableElement=function(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;for(var t=e.children||e.childNodes,n=t.length-1;0<=n;n--){var r=t[n].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(t[n]):null;if(r)return r}return null},R.prototype._createAnchor=function(){var e=this._document.createElement(\"div\");return this._toggleAnchorTabIndex(this._enabled,e),e.classList.add(\"cdk-visually-hidden\"),e.classList.add(\"cdk-focus-trap-anchor\"),e.setAttribute(\"aria-hidden\",\"true\"),e},R.prototype._toggleAnchorTabIndex=function(e,t){e?t.setAttribute(\"tabindex\",\"0\"):t.removeAttribute(\"tabindex\")},R.prototype._executeOnStable=function(e){this._ngZone.isStable?e():this._ngZone.onStable.asObservable().pipe(n.take(1)).subscribe(e)},R);function R(e,t,n,r,i){var o=this;void 0===i&&(i=!1),this._element=e,this._checker=t,this._ngZone=n,this._document=r,this._hasAttached=!1,this.startAnchorListener=function(){return o.focusLastTabbableElement()},this.endAnchorListener=function(){return o.focusFirstTabbableElement()},this._enabled=!0,i||this.attachAnchors()}var N=(j.prototype.create=function(e,t){return void 0===t&&(t=!1),new M(e,this._checker,this._ngZone,this._document,t)},j.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],j.ctorParameters=function(){return[{type:T},{type:r.NgZone},{type:void 0,decorators:[{type:r.Inject,args:[t.DOCUMENT]}]}]},j.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new j(r.ɵɵinject(T),r.ɵɵinject(r.NgZone),r.ɵɵinject(t.DOCUMENT))},token:j,providedIn:\"root\"}),j);function j(e,t,n){this._checker=e,this._ngZone=t,this._document=n}var F=(Object.defineProperty(L.prototype,\"enabled\",{get:function(){return this.focusTrap.enabled},set:function(e){this.focusTrap.enabled=c.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(L.prototype,\"autoCapture\",{get:function(){return this._autoCapture},set:function(e){this._autoCapture=c.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),L.prototype.ngOnDestroy=function(){this.focusTrap.destroy(),this._previouslyFocusedElement&&(this._previouslyFocusedElement.focus(),this._previouslyFocusedElement=null)},L.prototype.ngAfterContentInit=function(){this.focusTrap.attachAnchors(),this.autoCapture&&(this._previouslyFocusedElement=this._document.activeElement,this.focusTrap.focusInitialElementWhenReady())},L.prototype.ngDoCheck=function(){this.focusTrap.hasAttached()||this.focusTrap.attachAnchors()},L.decorators=[{type:r.Directive,args:[{selector:\"[cdkTrapFocus]\",exportAs:\"cdkTrapFocus\"}]}],L.ctorParameters=function(){return[{type:r.ElementRef},{type:N},{type:void 0,decorators:[{type:r.Inject,args:[t.DOCUMENT]}]}]},L.propDecorators={enabled:[{type:r.Input,args:[\"cdkTrapFocus\"]}],autoCapture:[{type:r.Input,args:[\"cdkTrapFocusAutoCapture\"]}]},L);function L(e,t,n){this._elementRef=e,this._focusTrapFactory=t,this._previouslyFocusedElement=null,this._document=n,this.focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement,!0)}var V=new r.InjectionToken(\"liveAnnouncerElement\",{providedIn:\"root\",factory:B});function B(){return null}var U=new r.InjectionToken(\"LIVE_ANNOUNCER_DEFAULT_OPTIONS\"),z=(q.prototype.announce=function(t){for(var e,n=this,r=[],i=1;i<arguments.length;i++)r[i-1]=arguments[i];var o,a,s=this._defaultOptions;return a=1===r.length&&\"number\"==typeof r[0]?r[0]:(o=(e=l.__read(r,2))[0],e[1]),this.clear(),clearTimeout(this._previousTimeout),o=o||(s&&s.politeness?s.politeness:\"polite\"),null==a&&s&&(a=s.duration),this._liveElement.setAttribute(\"aria-live\",o),this._ngZone.runOutsideAngular(function(){return new Promise(function(e){clearTimeout(n._previousTimeout),n._previousTimeout=setTimeout(function(){n._liveElement.textContent=t,e(),\"number\"==typeof a&&(n._previousTimeout=setTimeout(function(){return n.clear()},a))},100)})})},q.prototype.clear=function(){this._liveElement&&(this._liveElement.textContent=\"\")},q.prototype.ngOnDestroy=function(){clearTimeout(this._previousTimeout),this._liveElement&&this._liveElement.parentNode&&(this._liveElement.parentNode.removeChild(this._liveElement),this._liveElement=null)},q.prototype._createLiveElement=function(){for(var e=\"cdk-live-announcer-element\",t=this._document.getElementsByClassName(e),n=this._document.createElement(\"div\"),r=0;r<t.length;r++)t[r].parentNode.removeChild(t[r]);return n.classList.add(e),n.classList.add(\"cdk-visually-hidden\"),n.setAttribute(\"aria-atomic\",\"true\"),n.setAttribute(\"aria-live\",\"polite\"),this._document.body.appendChild(n),n},q.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],q.ctorParameters=function(){return[{type:void 0,decorators:[{type:r.Optional},{type:r.Inject,args:[V]}]},{type:r.NgZone},{type:void 0,decorators:[{type:r.Inject,args:[t.DOCUMENT]}]},{type:void 0,decorators:[{type:r.Optional},{type:r.Inject,args:[U]}]}]},q.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new q(r.ɵɵinject(V,8),r.ɵɵinject(r.NgZone),r.ɵɵinject(t.DOCUMENT),r.ɵɵinject(U,8))},token:q,providedIn:\"root\"}),q);function q(e,t,n,r){this._ngZone=t,this._defaultOptions=r,this._document=n,this._liveElement=e||this._createLiveElement()}var H=(Object.defineProperty(W.prototype,\"politeness\",{get:function(){return this._politeness},set:function(e){var t=this;this._politeness=\"polite\"===e||\"assertive\"===e?e:\"off\",\"off\"===this._politeness?this._subscription&&(this._subscription.unsubscribe(),this._subscription=null):this._subscription||(this._subscription=this._ngZone.runOutsideAngular(function(){return t._contentObserver.observe(t._elementRef).subscribe(function(){var e=t._elementRef.nativeElement.textContent;e!==t._previousAnnouncedText&&(t._liveAnnouncer.announce(e,t._politeness),t._previousAnnouncedText=e)})}))},enumerable:!0,configurable:!0}),W.prototype.ngOnDestroy=function(){this._subscription&&this._subscription.unsubscribe()},W.decorators=[{type:r.Directive,args:[{selector:\"[cdkAriaLive]\",exportAs:\"cdkAriaLive\"}]}],W.ctorParameters=function(){return[{type:r.ElementRef},{type:z},{type:a.ContentObserver},{type:r.NgZone}]},W.propDecorators={politeness:[{type:r.Input,args:[\"cdkAriaLive\"]}]},W);function W(e,t,n,r){this._elementRef=e,this._liveAnnouncer=t,this._contentObserver=n,this._ngZone=r,this._politeness=\"off\"}function G(e,t,n,r){return e||new z(t,r,n)}var Y={provide:z,deps:[[new r.Optional,new r.SkipSelf,z],[new r.Optional,new r.Inject(V)],t.DOCUMENT,r.NgZone],useFactory:G},K=o.normalizePassiveListenerOptions({passive:!0,capture:!0}),Z=(Q.prototype.monitor=function(e,t){var n=this;if(void 0===t&&(t=!1),!this._platform.isBrowser)return u.of(null);var r=c.coerceElement(e);if(this._elementInfo.has(r)){var i=this._elementInfo.get(r);return i.checkChildren=t,i.subject.asObservable()}var o={unlisten:function(){},checkChildren:t,subject:new u.Subject};function a(e){return n._onFocus(e,r)}function s(e){return n._onBlur(e,r)}return this._elementInfo.set(r,o),this._incrementMonitoredElementCount(),this._ngZone.runOutsideAngular(function(){r.addEventListener(\"focus\",a,!0),r.addEventListener(\"blur\",s,!0)}),o.unlisten=function(){r.removeEventListener(\"focus\",a,!0),r.removeEventListener(\"blur\",s,!0)},o.subject.asObservable()},Q.prototype.stopMonitoring=function(e){var t=c.coerceElement(e),n=this._elementInfo.get(t);n&&(n.unlisten(),n.subject.complete(),this._setClasses(t),this._elementInfo.delete(t),this._decrementMonitoredElementCount())},Q.prototype.focusVia=function(e,t,n){var r=c.coerceElement(e);this._setOriginForCurrentEventQueue(t),\"function\"==typeof r.focus&&r.focus(n)},Q.prototype.ngOnDestroy=function(){var n=this;this._elementInfo.forEach(function(e,t){return n.stopMonitoring(t)})},Q.prototype._toggleClass=function(e,t,n){n?e.classList.add(t):e.classList.remove(t)},Q.prototype._setClasses=function(e,t){this._elementInfo.get(e)&&(this._toggleClass(e,\"cdk-focused\",!!t),this._toggleClass(e,\"cdk-touch-focused\",\"touch\"===t),this._toggleClass(e,\"cdk-keyboard-focused\",\"keyboard\"===t),this._toggleClass(e,\"cdk-mouse-focused\",\"mouse\"===t),this._toggleClass(e,\"cdk-program-focused\",\"program\"===t))},Q.prototype._setOriginForCurrentEventQueue=function(e){var t=this;this._ngZone.runOutsideAngular(function(){t._origin=e,t._originTimeoutId=setTimeout(function(){return t._origin=null},1)})},Q.prototype._wasCausedByTouch=function(e){var t=e.target;return this._lastTouchTarget instanceof Node&&t instanceof Node&&(t===this._lastTouchTarget||t.contains(this._lastTouchTarget))},Q.prototype._onFocus=function(e,t){var n=this._elementInfo.get(t);if(n&&(n.checkChildren||t===e.target)){var r=this._origin;r=r||(this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:this._wasCausedByTouch(e)?\"touch\":\"program\"),this._setClasses(t,r),this._emitOrigin(n.subject,r),this._lastFocusOrigin=r}},Q.prototype._onBlur=function(e,t){var n=this._elementInfo.get(t);!n||n.checkChildren&&e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)||(this._setClasses(t),this._emitOrigin(n.subject,null))},Q.prototype._emitOrigin=function(e,t){this._ngZone.run(function(){return e.next(t)})},Q.prototype._incrementMonitoredElementCount=function(){var e=this;1==++this._monitoredElementCount&&this._platform.isBrowser&&this._ngZone.runOutsideAngular(function(){document.addEventListener(\"keydown\",e._documentKeydownListener,K),document.addEventListener(\"mousedown\",e._documentMousedownListener,K),document.addEventListener(\"touchstart\",e._documentTouchstartListener,K),window.addEventListener(\"focus\",e._windowFocusListener)})},Q.prototype._decrementMonitoredElementCount=function(){--this._monitoredElementCount||(document.removeEventListener(\"keydown\",this._documentKeydownListener,K),document.removeEventListener(\"mousedown\",this._documentMousedownListener,K),document.removeEventListener(\"touchstart\",this._documentTouchstartListener,K),window.removeEventListener(\"focus\",this._windowFocusListener),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._touchTimeoutId),clearTimeout(this._originTimeoutId))},Q.decorators=[{type:r.Injectable,args:[{providedIn:\"root\"}]}],Q.ctorParameters=function(){return[{type:r.NgZone},{type:o.Platform}]},Q.ngInjectableDef=r.ɵɵdefineInjectable({factory:function(){return new Q(r.ɵɵinject(r.NgZone),r.ɵɵinject(o.Platform))},token:Q,providedIn:\"root\"}),Q);function Q(e,t){var n=this;this._ngZone=e,this._platform=t,this._origin=null,this._windowFocused=!1,this._elementInfo=new Map,this._monitoredElementCount=0,this._documentKeydownListener=function(){n._lastTouchTarget=null,n._setOriginForCurrentEventQueue(\"keyboard\")},this._documentMousedownListener=function(){n._lastTouchTarget||n._setOriginForCurrentEventQueue(\"mouse\")},this._documentTouchstartListener=function(e){null!=n._touchTimeoutId&&clearTimeout(n._touchTimeoutId),n._lastTouchTarget=e.composedPath?e.composedPath()[0]:e.target,n._touchTimeoutId=setTimeout(function(){return n._lastTouchTarget=null},650)},this._windowFocusListener=function(){n._windowFocused=!0,n._windowFocusTimeoutId=setTimeout(function(){return n._windowFocused=!1})}}var X=($.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription.unsubscribe()},$.decorators=[{type:r.Directive,args:[{selector:\"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\"}]}],$.ctorParameters=function(){return[{type:r.ElementRef},{type:Z}]},$.propDecorators={cdkFocusChange:[{type:r.Output}]},$);function $(e,t){var n=this;this._elementRef=e,this._focusMonitor=t,this.cdkFocusChange=new r.EventEmitter,this._monitorSubscription=this._focusMonitor.monitor(this._elementRef,this._elementRef.nativeElement.hasAttribute(\"cdkMonitorSubtreeFocus\")).subscribe(function(e){return n.cdkFocusChange.emit(e)})}function J(e,t,n){return e||new Z(t,n)}var ee={provide:Z,deps:[[new r.Optional,new r.SkipSelf,Z],r.NgZone,o.Platform],useFactory:J};var te=(ne.decorators=[{type:r.NgModule,args:[{imports:[t.CommonModule,o.PlatformModule,a.ObserversModule],declarations:[H,F,X],exports:[H,F,X]}]}],ne);function ne(){}e.MESSAGES_CONTAINER_ID=p,e.CDK_DESCRIBEDBY_ID_PREFIX=d,e.CDK_DESCRIBEDBY_HOST_ATTRIBUTE=h,e.AriaDescriber=y,e.ARIA_DESCRIBER_PROVIDER_FACTORY=_,e.ARIA_DESCRIBER_PROVIDER=b,e.ActiveDescendantKeyManager=S,e.FocusKeyManager=k,e.ListKeyManager=w,e.FocusTrap=M,e.FocusTrapFactory=N,e.CdkTrapFocus=F,e.InteractivityChecker=T,e.LiveAnnouncer=z,e.CdkAriaLive=H,e.LIVE_ANNOUNCER_PROVIDER_FACTORY=G,e.LIVE_ANNOUNCER_PROVIDER=Y,e.LIVE_ANNOUNCER_ELEMENT_TOKEN=V,e.LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY=B,e.LIVE_ANNOUNCER_DEFAULT_OPTIONS=U,e.TOUCH_BUFFER_MS=650,e.FocusMonitor=Z,e.CdkMonitorFocus=X,e.FOCUS_MONITOR_PROVIDER_FACTORY=J,e.FOCUS_MONITOR_PROVIDER=ee,e.isFakeMousedownFromScreenReader=function(e){return 0===e.buttons},e.A11yModule=te,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/common\"),require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/platform-browser/bundles/platform-browser.umd.js\",[\"@angular/common\",\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/common\"),e(\"@angular/core\"))})}(0,function(e,l,d){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function t(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var n=function(){return(n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function i(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function o(n,r){return function(e,t){r(e,t,n)}}function a(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}var s,u=(t(c,s=l.ɵDomAdapter),c.prototype.supportsDOMEvents=function(){return!0},c);function c(){return s.call(this)||this}!function(){if(d.ɵglobal.Node)d.ɵglobal.Node.prototype.contains}();var p,h=(t(f,p=u),f.makeCurrent=function(){l.ɵsetRootDomAdapter(new f)},f.prototype.getProperty=function(e,t){return e[t]},f.prototype.log=function(e){window.console&&window.console.log&&window.console.log(e)},f.prototype.logGroup=function(e){window.console&&window.console.group&&window.console.group(e)},f.prototype.logGroupEnd=function(){window.console&&window.console.groupEnd&&window.console.groupEnd()},f.prototype.onAndCancel=function(e,t,n){return e.addEventListener(t,n,!1),function(){e.removeEventListener(t,n,!1)}},f.prototype.dispatchEvent=function(e,t){e.dispatchEvent(t)},f.prototype.remove=function(e){return e.parentNode&&e.parentNode.removeChild(e),e},f.prototype.getValue=function(e){return e.value},f.prototype.createElement=function(e,t){return(t=t||this.getDefaultDocument()).createElement(e)},f.prototype.createHtmlDocument=function(){return document.implementation.createHTMLDocument(\"fakeTitle\")},f.prototype.getDefaultDocument=function(){return document},f.prototype.isElementNode=function(e){return e.nodeType===Node.ELEMENT_NODE},f.prototype.isShadowRoot=function(e){return e instanceof DocumentFragment},f.prototype.getGlobalEventTarget=function(e,t){return\"window\"===t?window:\"document\"===t?e:\"body\"===t?e.body:null},f.prototype.getHistory=function(){return window.history},f.prototype.getLocation=function(){return window.location},f.prototype.getBaseHref=function(e){var t=(v=v||document.querySelector(\"base\"))?v.getAttribute(\"href\"):null;return null==t?null:function(e){return(m=m||document.createElement(\"a\")).setAttribute(\"href\",e),\"/\"===m.pathname.charAt(0)?m.pathname:\"/\"+m.pathname}(t)},f.prototype.resetBaseElement=function(){v=null},f.prototype.getUserAgent=function(){return window.navigator.userAgent},f.prototype.performanceNow=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()},f.prototype.supportsCookies=function(){return!0},f.prototype.getCookie=function(e){return l.ɵparseCookieValue(document.cookie,e)},f);function f(){return null!==p&&p.apply(this,arguments)||this}var m,v=null;var y=new d.InjectionToken(\"TRANSITION_ID\");function g(n,e,t){return function(){t.get(d.ApplicationInitStatus).donePromise.then(function(){var t=l.ɵgetDOM();Array.prototype.slice.apply(e.querySelectorAll(\"style[ng-transition]\")).filter(function(e){return e.getAttribute(\"ng-transition\")===n}).forEach(function(e){return t.remove(e)})})}}var _=[{provide:d.APP_INITIALIZER,useFactory:g,deps:[y,l.DOCUMENT,d.Injector],multi:!0}],b=(w.init=function(){d.setTestabilityGetter(new w)},w.prototype.addToWindow=function(r){d.ɵglobal.getAngularTestability=function(e,t){void 0===t&&(t=!0);var n=r.findTestabilityInTree(e,t);if(null==n)throw new Error(\"Could not find testability for element.\");return n},d.ɵglobal.getAllAngularTestabilities=function(){return r.getAllTestabilities()},d.ɵglobal.getAllAngularRootElements=function(){return r.getAllRootElements()},d.ɵglobal.frameworkStabilizers||(d.ɵglobal.frameworkStabilizers=[]),d.ɵglobal.frameworkStabilizers.push(function(t){function n(e){i=i||e,0==--r&&t(i)}var e=d.ɵglobal.getAllAngularTestabilities(),r=e.length,i=!1;e.forEach(function(e){e.whenStable(n)})})},w.prototype.findTestabilityInTree=function(e,t,n){if(null==t)return null;var r=e.getTestability(t);return null!=r?r:n?l.ɵgetDOM().isShadowRoot(t)?this.findTestabilityInTree(e,t.host,!0):this.findTestabilityInTree(e,t.parentElement,!0):null},w);function w(){}function x(e,t){\"undefined\"!=typeof COMPILED&&COMPILED||((d.ɵglobal.ng=d.ɵglobal.ng||{})[e]=t)}var C={ApplicationRef:d.ApplicationRef,NgZone:d.NgZone};function S(e){return d.getDebugNode(e)}function E(e){return x(\"probe\",S),x(\"coreTokens\",n(n({},C),function(e){return e.reduce(function(e,t){return e[t.name]=t.token,e},{})}(e||[]))),function(){return S}}var O=[{provide:d.APP_INITIALIZER,useFactory:E,deps:[[d.NgProbeToken,new d.Optional]],multi:!0}],k=O,D=new d.InjectionToken(\"EventManagerPlugins\"),T=(I.prototype.addEventListener=function(e,t,n){return this._findPluginFor(t).addEventListener(e,t,n)},I.prototype.addGlobalEventListener=function(e,t,n){return this._findPluginFor(t).addGlobalEventListener(e,t,n)},I.prototype.getZone=function(){return this._zone},I.prototype._findPluginFor=function(e){var t=this._eventNameToPlugin.get(e);if(t)return t;for(var n=this._plugins,r=0;r<n.length;r++){var i=n[r];if(i.supports(e))return this._eventNameToPlugin.set(e,i),i}throw new Error(\"No event manager plugin found for event \"+e)},I=i([d.Injectable(),o(0,d.Inject(D)),a(\"design:paramtypes\",[Array,d.NgZone])],I));function I(e,t){var n=this;this._zone=t,this._eventNameToPlugin=new Map,e.forEach(function(e){return e.manager=n}),this._plugins=e.slice().reverse()}var P=(A.prototype.addGlobalEventListener=function(e,t,n){var r=l.ɵgetDOM().getGlobalEventTarget(this._doc,e);if(!r)throw new Error(\"Unsupported event target \"+r+\" for event \"+t);return this.addEventListener(r,t,n)},A);function A(e){this._doc=e}var M=(R.prototype.addStyles=function(e){var t=this,n=new Set;e.forEach(function(e){t._stylesSet.has(e)||(t._stylesSet.add(e),n.add(e))}),this.onStylesAdded(n)},R.prototype.onStylesAdded=function(e){},R.prototype.getAllStyles=function(){return Array.from(this._stylesSet)},R=i([d.Injectable()],R));function R(){this._stylesSet=new Set}var N,j=(t(F,N=M),F.prototype._addStylesToHost=function(e,n){var r=this;e.forEach(function(e){var t=r._doc.createElement(\"style\");t.textContent=e,r._styleNodes.add(n.appendChild(t))})},F.prototype.addHost=function(e){this._addStylesToHost(this._stylesSet,e),this._hostNodes.add(e)},F.prototype.removeHost=function(e){this._hostNodes.delete(e)},F.prototype.onStylesAdded=function(t){var n=this;this._hostNodes.forEach(function(e){return n._addStylesToHost(t,e)})},F.prototype.ngOnDestroy=function(){this._styleNodes.forEach(function(e){return l.ɵgetDOM().remove(e)})},F=i([d.Injectable(),o(0,d.Inject(l.DOCUMENT)),a(\"design:paramtypes\",[Object])],F));function F(e){var t=N.call(this)||this;return t._doc=e,t._hostNodes=new Set,t._styleNodes=new Set,t._hostNodes.add(e.head),t}var L={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/\"},V=/%COMP%/g,B=\"undefined\"==typeof ngDevMode||!!ngDevMode,U=\"_nghost-%COMP%\",z=\"_ngcontent-%COMP%\";function q(e){return z.replace(V,e)}function H(e){return U.replace(V,e)}function W(e,t,n){for(var r=0;r<t.length;r++){var i=t[r];Array.isArray(i)?W(e,i,n):(i=i.replace(V,e),n.push(i))}return n}function G(t){return function(e){if(e===Function)return t;!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}var Y=(K.prototype.createRenderer=function(e,t){if(!e||!t)return this.defaultRenderer;switch(t.encapsulation){case d.ViewEncapsulation.Emulated:var n=this.rendererByCompId.get(t.id);return n||(n=new ee(this.eventManager,this.sharedStylesHost,t,this.appId),this.rendererByCompId.set(t.id,n)),n.applyToHost(e),n;case d.ViewEncapsulation.Native:case d.ViewEncapsulation.ShadowDom:return new re(this.eventManager,this.sharedStylesHost,e,t);default:if(!this.rendererByCompId.has(t.id)){var r=W(t.id,t.styles,[]);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(t.id,this.defaultRenderer)}return this.defaultRenderer}},K.prototype.begin=function(){},K.prototype.end=function(){},K=i([d.Injectable(),o(2,d.Inject(d.APP_ID)),a(\"design:paramtypes\",[T,j,String])],K));function K(e,t,n){this.eventManager=e,this.sharedStylesHost=t,this.appId=n,this.rendererByCompId=new Map,this.defaultRenderer=new Z(e)}var Z=(Q.prototype.destroy=function(){},Q.prototype.createElement=function(e,t){return t?document.createElementNS(L[t]||t,e):document.createElement(e)},Q.prototype.createComment=function(e){return document.createComment(e)},Q.prototype.createText=function(e){return document.createTextNode(e)},Q.prototype.appendChild=function(e,t){e.appendChild(t)},Q.prototype.insertBefore=function(e,t,n){e&&e.insertBefore(t,n)},Q.prototype.removeChild=function(e,t){e&&e.removeChild(t)},Q.prototype.selectRootElement=function(e,t){var n=\"string\"==typeof e?document.querySelector(e):e;if(!n)throw new Error('The selector \"'+e+'\" did not match any elements');return t||(n.textContent=\"\"),n},Q.prototype.parentNode=function(e){return e.parentNode},Q.prototype.nextSibling=function(e){return e.nextSibling},Q.prototype.setAttribute=function(e,t,n,r){if(r){t=r+\":\"+t;var i=L[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)},Q.prototype.removeAttribute=function(e,t,n){if(n){var r=L[n];r?e.removeAttributeNS(r,t):e.removeAttribute(n+\":\"+t)}else e.removeAttribute(t)},Q.prototype.addClass=function(e,t){e.classList.add(t)},Q.prototype.removeClass=function(e,t){e.classList.remove(t)},Q.prototype.setStyle=function(e,t,n,r){r&d.RendererStyleFlags2.DashCase?e.style.setProperty(t,n,r&d.RendererStyleFlags2.Important?\"important\":\"\"):e.style[t]=n},Q.prototype.removeStyle=function(e,t,n){n&d.RendererStyleFlags2.DashCase?e.style.removeProperty(t):e.style[t]=\"\"},Q.prototype.setProperty=function(e,t,n){B&&$(t,\"property\"),e[t]=n},Q.prototype.setValue=function(e,t){e.nodeValue=t},Q.prototype.listen=function(e,t,n){return B&&$(t,\"listener\"),\"string\"==typeof e?this.eventManager.addGlobalEventListener(e,t,G(n)):this.eventManager.addEventListener(e,t,G(n))},Q);function Q(e){this.eventManager=e,this.data=Object.create(null)}var X=\"@\".charCodeAt(0);function $(e,t){if(e.charCodeAt(0)===X)throw new Error(\"Found the synthetic \"+t+\" \"+e+'. Please include either \"BrowserAnimationsModule\" or \"NoopAnimationsModule\" in your application.')}var J,ee=(t(te,J=Z),te.prototype.applyToHost=function(e){J.prototype.setAttribute.call(this,e,this.hostAttr,\"\")},te.prototype.createElement=function(e,t){var n=J.prototype.createElement.call(this,e,t);return J.prototype.setAttribute.call(this,n,this.contentAttr,\"\"),n},te);function te(e,t,n,r){var i=J.call(this,e)||this,o=W(r+\"-\"+(i.component=n).id,n.styles,[]);return t.addStyles(o),i.contentAttr=q(r+\"-\"+n.id),i.hostAttr=H(r+\"-\"+n.id),i}var ne,re=(t(ie,ne=Z),ie.prototype.nodeOrShadowRoot=function(e){return e===this.hostEl?this.shadowRoot:e},ie.prototype.destroy=function(){this.sharedStylesHost.removeHost(this.shadowRoot)},ie.prototype.appendChild=function(e,t){return ne.prototype.appendChild.call(this,this.nodeOrShadowRoot(e),t)},ie.prototype.insertBefore=function(e,t,n){return ne.prototype.insertBefore.call(this,this.nodeOrShadowRoot(e),t,n)},ie.prototype.removeChild=function(e,t){return ne.prototype.removeChild.call(this,this.nodeOrShadowRoot(e),t)},ie.prototype.parentNode=function(e){return this.nodeOrShadowRoot(ne.prototype.parentNode.call(this,this.nodeOrShadowRoot(e)))},ie);function ie(e,t,n,r){var i=ne.call(this,e)||this;i.sharedStylesHost=t,i.hostEl=n,(i.component=r).encapsulation===d.ViewEncapsulation.ShadowDom?i.shadowRoot=n.attachShadow({mode:\"open\"}):i.shadowRoot=n.createShadowRoot(),i.sharedStylesHost.addHost(i.shadowRoot);for(var o=W(r.id,r.styles,[]),a=0;a<o.length;a++){var s=document.createElement(\"style\");s.textContent=o[a],i.shadowRoot.appendChild(s)}return i}function oe(e){return!!me&&me.hasOwnProperty(e)}function ae(e){var t=pe[e.type];if(t){var n=this[t];if(n){var r=[e];if(1===n.length)return(a=n[0]).zone!==Zone.current?a.zone.run(a.handler,this,r):a.handler.apply(this,r);for(var i=n.slice(),o=0;o<i.length&&!0!==e[he];o++){var a;(a=i[o]).zone!==Zone.current?a.zone.run(a.handler,this,r):a.handler.apply(this,r)}}}}var se,le=\"undefined\"!=typeof Zone&&Zone.__symbol__||function(e){return\"__zone_symbol__\"+e},ue=le(\"addEventListener\"),ce=le(\"removeEventListener\"),pe={},de=\"removeEventListener\",he=\"__zone_symbol__propagationStopped\",fe=\"__zone_symbol__stopImmediatePropagation\",me=function(){var e=\"undefined\"!=typeof Zone&&Zone[le(\"UNPATCHED_EVENTS\")];if(e){var t={};return e.forEach(function(e){t[e]=e}),t}}(),ve=(t(ye,se=P),ye.prototype.patchEvent=function(){if(\"undefined\"!=typeof Event&&Event&&Event.prototype&&!Event.prototype[fe]){var e=Event.prototype[fe]=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[he]=!0),e&&e.apply(this,arguments)}}},ye.prototype.supports=function(e){return!0},ye.prototype.addEventListener=function(e,t,n){var r=this,i=e[ue],o=n;if(!i||d.NgZone.isInAngularZone()&&!oe(t))e.addEventListener(t,o,!1);else{var a=pe[t];a=a||(pe[t]=le(\"ANGULAR\"+t+\"FALSE\"));var s=e[a],l=s&&0<s.length;s=s||(e[a]=[]);var u=oe(t)?Zone.root:Zone.current;if(0===s.length)s.push({zone:u,handler:o});else{for(var c=!1,p=0;p<s.length;p++)if(s[p].handler===o){c=!0;break}c||s.push({zone:u,handler:o})}l||e[ue](t,ae,!1)}return function(){return r.removeEventListener(e,t,o)}},ye.prototype.removeEventListener=function(e,t,n){var r=e[ce];if(!r)return e[de].apply(e,[t,n,!1]);var i=pe[t],o=i&&e[i];if(!o)return e[de].apply(e,[t,n,!1]);for(var a=!1,s=0;s<o.length;s++)if(o[s].handler===n){a=!0,o.splice(s,1);break}a?0===o.length&&r.apply(e,[t,ae,!1]):e[de].apply(e,[t,n,!1])},ye=i([d.Injectable(),o(0,d.Inject(l.DOCUMENT)),o(2,d.Optional()),o(2,d.Inject(d.PLATFORM_ID)),a(\"design:paramtypes\",[Object,d.NgZone,Object])],ye));function ye(e,t,n){var r=se.call(this,e)||this;return r.ngZone=t,n&&l.isPlatformServer(n)||r.patchEvent(),r}var ge={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},_e=new d.InjectionToken(\"HammerGestureConfig\"),be=new d.InjectionToken(\"HammerLoader\"),we=(xe.prototype.buildHammer=function(e){var t=new Hammer(e,this.options);for(var n in t.get(\"pinch\").set({enable:!0}),t.get(\"rotate\").set({enable:!0}),this.overrides)t.get(n).set(this.overrides[n]);return t},xe=i([d.Injectable()],xe));function xe(){this.events=[],this.overrides={}}var Ce,Se=(t(Ee,Ce=P),Ee.prototype.supports=function(e){return!(!ge.hasOwnProperty(e.toLowerCase())&&!this.isCustomEvent(e)||!window.Hammer&&!this.loader&&(this.console.warn('The \"'+e+'\" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.'),1))},Ee.prototype.addEventListener=function(n,r,i){var o=this,a=this.manager.getZone();if(r=r.toLowerCase(),window.Hammer||!this.loader)return a.runOutsideAngular(function(){function e(e){a.runGuarded(function(){i(e)})}var t=o._config.buildHammer(n);return t.on(r,e),function(){t.off(r,e),\"function\"==typeof t.destroy&&t.destroy()}});var e=!1,t=function(){e=!0};return this.loader().then(function(){if(!window.Hammer)return o.console.warn(\"The custom HAMMER_LOADER completed, but Hammer.JS is not present.\"),void(t=function(){});e||(t=o.addEventListener(n,r,i))}).catch(function(){o.console.warn('The \"'+r+'\" event cannot be bound because the custom Hammer.JS loader failed.'),t=function(){}}),function(){t()}},Ee.prototype.isCustomEvent=function(e){return-1<this._config.events.indexOf(e)},Ee=i([d.Injectable(),o(0,d.Inject(l.DOCUMENT)),o(1,d.Inject(_e)),o(3,d.Optional()),o(3,d.Inject(be)),a(\"design:paramtypes\",[Object,we,d.ɵConsole,Object])],Ee));function Ee(e,t,n,r){var i=Ce.call(this,e)||this;return i._config=t,i.console=n,i.loader=r,i}var Oe=[{provide:D,useClass:Se,multi:!0,deps:[l.DOCUMENT,_e,d.ɵConsole,[new d.Optional,be]]},{provide:_e,useClass:we,deps:[]}],ke=Oe,De=Te=i([d.NgModule({providers:Oe})],Te);function Te(){}var Ie,Pe,Ae=[\"alt\",\"control\",\"meta\",\"shift\"],Me={\"\\b\":\"Backspace\",\"\\t\":\"Tab\",\"\":\"Delete\",\"\u001b\":\"Escape\",Del:\"Delete\",Esc:\"Escape\",Left:\"ArrowLeft\",Right:\"ArrowRight\",Up:\"ArrowUp\",Down:\"ArrowDown\",Menu:\"ContextMenu\",Scroll:\"ScrollLock\",Win:\"OS\"},Re={A:\"1\",B:\"2\",C:\"3\",D:\"4\",E:\"5\",F:\"6\",G:\"7\",H:\"8\",I:\"9\",J:\"*\",K:\"+\",M:\"-\",N:\".\",O:\"/\",\"`\":\"0\",\"\":\"NumLock\"},Ne={alt:function(e){return e.altKey},control:function(e){return e.ctrlKey},meta:function(e){return e.metaKey},shift:function(e){return e.shiftKey}},je=(t(Fe,Ie=P),(Pe=Fe).prototype.supports=function(e){return null!=Pe.parseEventName(e)},Fe.prototype.addEventListener=function(e,t,n){var r=Pe.parseEventName(t),i=Pe.eventCallback(r.fullKey,n,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return l.ɵgetDOM().onAndCancel(e,r.domEventName,i)})},Fe.parseEventName=function(e){var n=e.toLowerCase().split(\".\"),t=n.shift();if(0===n.length||\"keydown\"!==t&&\"keyup\"!==t)return null;var r=Pe._normalizeKey(n.pop()),i=\"\";if(Ae.forEach(function(e){var t=n.indexOf(e);-1<t&&(n.splice(t,1),i+=e+\".\")}),i+=r,0!=n.length||0===r.length)return null;var o={};return o.domEventName=t,o.fullKey=i,o},Fe.getEventFullKey=function(t){var n=\"\",r=function(e){var t=e.key;if(null==t){if(null==(t=e.keyIdentifier))return\"Unidentified\";t.startsWith(\"U+\")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&Re.hasOwnProperty(t)&&(t=Re[t]))}return Me[t]||t}(t);return\" \"===(r=r.toLowerCase())?r=\"space\":\".\"===r&&(r=\"dot\"),Ae.forEach(function(e){e!=r&&(0,Ne[e])(t)&&(n+=e+\".\")}),n+=r},Fe.eventCallback=function(t,n,r){return function(e){Pe.getEventFullKey(e)===t&&r.runGuarded(function(){return n(e)})}},Fe._normalizeKey=function(e){switch(e){case\"esc\":return\"escape\";default:return e}},Fe=Pe=i([d.Injectable(),o(0,d.Inject(l.DOCUMENT)),a(\"design:paramtypes\",[Object])],Fe));function Fe(e){return Ie.call(this,e)||this}var Le=(Ve.ɵprov=d.ɵɵdefineInjectable({factory:function(){return d.ɵɵinject(ze)},token:Ve,providedIn:\"root\"}),Ve=i([d.Injectable({providedIn:\"root\",useExisting:d.forwardRef(function(){return ze})})],Ve));function Ve(){}function Be(e){return new ze(e.get(l.DOCUMENT))}var Ue,ze=(t(qe,Ue=Le),qe.prototype.sanitize=function(e,t){if(null==t)return null;switch(e){case d.SecurityContext.NONE:return t;case d.SecurityContext.HTML:return d.ɵallowSanitizationBypassAndThrow(t,\"HTML\")?d.ɵunwrapSafeValue(t):d.ɵ_sanitizeHtml(this._doc,String(t));case d.SecurityContext.STYLE:return d.ɵallowSanitizationBypassAndThrow(t,\"Style\")?d.ɵunwrapSafeValue(t):d.ɵ_sanitizeStyle(t);case d.SecurityContext.SCRIPT:if(d.ɵallowSanitizationBypassAndThrow(t,\"Script\"))return d.ɵunwrapSafeValue(t);throw new Error(\"unsafe value used in a script context\");case d.SecurityContext.URL:return d.ɵgetSanitizationBypassType(t),d.ɵallowSanitizationBypassAndThrow(t,\"URL\")?d.ɵunwrapSafeValue(t):d.ɵ_sanitizeUrl(String(t));case d.SecurityContext.RESOURCE_URL:if(d.ɵallowSanitizationBypassAndThrow(t,\"ResourceURL\"))return d.ɵunwrapSafeValue(t);throw new Error(\"unsafe value used in a resource URL context (see http://g.co/ng/security#xss)\");default:throw new Error(\"Unexpected SecurityContext \"+e+\" (see http://g.co/ng/security#xss)\")}},qe.prototype.bypassSecurityTrustHtml=function(e){return d.ɵbypassSanitizationTrustHtml(e)},qe.prototype.bypassSecurityTrustStyle=function(e){return d.ɵbypassSanitizationTrustStyle(e)},qe.prototype.bypassSecurityTrustScript=function(e){return d.ɵbypassSanitizationTrustScript(e)},qe.prototype.bypassSecurityTrustUrl=function(e){return d.ɵbypassSanitizationTrustUrl(e)},qe.prototype.bypassSecurityTrustResourceUrl=function(e){return d.ɵbypassSanitizationTrustResourceUrl(e)},qe.ɵprov=d.ɵɵdefineInjectable({factory:function(){return Be(d.ɵɵinject(d.INJECTOR))},token:qe,providedIn:\"root\"}),qe=i([d.Injectable({providedIn:\"root\",useFactory:Be,deps:[d.Injector]}),o(0,d.Inject(l.DOCUMENT)),a(\"design:paramtypes\",[Object])],qe));function qe(e){var t=Ue.call(this)||this;return t._doc=e,t}var He=l.ɵPLATFORM_BROWSER_ID,We=[{provide:d.PLATFORM_ID,useValue:He},{provide:d.PLATFORM_INITIALIZER,useValue:Ke,multi:!0},{provide:l.DOCUMENT,useFactory:Qe,deps:[]}],Ge=[{provide:d.Sanitizer,useExisting:Le},{provide:Le,useClass:ze,deps:[l.DOCUMENT]}],Ye=d.createPlatformFactory(d.platformCore,\"browser\",We);function Ke(){h.makeCurrent(),b.init()}function Ze(){return new d.ErrorHandler}function Qe(){return document}var Xe,$e=[Ge,{provide:d.ɵINJECTOR_SCOPE,useValue:\"root\"},{provide:d.ErrorHandler,useFactory:Ze,deps:[]},{provide:D,useClass:ve,multi:!0,deps:[l.DOCUMENT,d.NgZone,d.PLATFORM_ID]},{provide:D,useClass:je,multi:!0,deps:[l.DOCUMENT]},ke,{provide:Y,useClass:Y,deps:[T,j,d.APP_ID]},{provide:d.RendererFactory2,useExisting:Y},{provide:M,useExisting:j},{provide:j,useClass:j,deps:[l.DOCUMENT]},{provide:d.Testability,useClass:d.Testability,deps:[d.NgZone]},{provide:T,useClass:T,deps:[D,d.NgZone]},k],Je=((Xe=et).withServerTransition=function(e){return{ngModule:Xe,providers:[{provide:d.APP_ID,useValue:e.appId},{provide:y,useExisting:d.APP_ID},_]}},et=Xe=i([d.NgModule({providers:$e,exports:[l.CommonModule,d.ApplicationModule]}),o(0,d.Optional()),o(0,d.SkipSelf()),o(0,d.Inject(Xe)),a(\"design:paramtypes\",[Object])],et));function et(e){if(e)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.\")}function tt(){return new nt(d.ɵɵinject(l.DOCUMENT))}var nt=(rt.prototype.addTag=function(e,t){return void 0===t&&(t=!1),e?this._getOrCreateElement(e,t):null},rt.prototype.addTags=function(e,n){var r=this;return void 0===n&&(n=!1),e?e.reduce(function(e,t){return t&&e.push(r._getOrCreateElement(t,n)),e},[]):[]},rt.prototype.getTag=function(e){return e&&this._doc.querySelector(\"meta[\"+e+\"]\")||null},rt.prototype.getTags=function(e){if(!e)return[];var t=this._doc.querySelectorAll(\"meta[\"+e+\"]\");return t?[].slice.call(t):[]},rt.prototype.updateTag=function(e,t){if(!e)return null;t=t||this._parseSelector(e);var n=this.getTag(t);return n?this._setMetaElementAttributes(e,n):this._getOrCreateElement(e,!0)},rt.prototype.removeTag=function(e){this.removeTagElement(this.getTag(e))},rt.prototype.removeTagElement=function(e){e&&this._dom.remove(e)},rt.prototype._getOrCreateElement=function(e,t){if(void 0===t&&(t=!1),!t){var n=this._parseSelector(e),r=this.getTag(n);if(r&&this._containsAttributes(e,r))return r}var i=this._dom.createElement(\"meta\");return this._setMetaElementAttributes(e,i),this._doc.getElementsByTagName(\"head\")[0].appendChild(i),i},rt.prototype._setMetaElementAttributes=function(t,n){return Object.keys(t).forEach(function(e){return n.setAttribute(e,t[e])}),n},rt.prototype._parseSelector=function(e){var t=e.name?\"name\":\"property\";return t+'=\"'+e[t]+'\"'},rt.prototype._containsAttributes=function(t,n){return Object.keys(t).every(function(e){return n.getAttribute(e)===t[e]})},rt.ɵprov=d.ɵɵdefineInjectable({factory:tt,token:rt,providedIn:\"root\"}),rt=i([d.Injectable({providedIn:\"root\",useFactory:tt,deps:[]}),o(0,d.Inject(l.DOCUMENT)),a(\"design:paramtypes\",[Object])],rt));function rt(e){this._doc=e,this._dom=l.ɵgetDOM()}function it(){return new ot(d.ɵɵinject(l.DOCUMENT))}var ot=(at.prototype.getTitle=function(){return this._doc.title},at.prototype.setTitle=function(e){this._doc.title=e||\"\"},at.ɵprov=d.ɵɵdefineInjectable({factory:it,token:at,providedIn:\"root\"}),at=i([d.Injectable({providedIn:\"root\",useFactory:it,deps:[]}),o(0,d.Inject(l.DOCUMENT)),a(\"design:paramtypes\",[Object])],at));function at(e){this._doc=e}var st=\"undefined\"!=typeof window&&window||{},lt=function(e,t){this.msPerTick=e,this.numTicks=t},ut=(ct.prototype.timeChangeDetection=function(e){var t=e&&e.record,n=\"Change Detection\",r=null!=st.console.profile;t&&r&&st.console.profile(n);for(var i=l.ɵgetDOM().performanceNow(),o=0;o<5||l.ɵgetDOM().performanceNow()-i<500;)this.appRef.tick(),o++;var a=l.ɵgetDOM().performanceNow();t&&r&&st.console.profileEnd(n);var s=(a-i)/o;return st.console.log(\"ran \"+o+\" change detection cycles\"),st.console.log(s.toFixed(2)+\" ms per check\"),new lt(s,o)},ct);function ct(e){this.appRef=e.injector.get(d.ApplicationRef)}var pt,dt=((pt=ht).init=function(e){var t=new pt;return t.store=e,t},ht.prototype.get=function(e,t){return void 0!==this.store[e]?this.store[e]:t},ht.prototype.set=function(e,t){this.store[e]=t},ht.prototype.remove=function(e){delete this.store[e]},ht.prototype.hasKey=function(e){return this.store.hasOwnProperty(e)},ht.prototype.onSerialize=function(e,t){this.onSerializeCallbacks[e]=t},ht.prototype.toJson=function(){for(var e in this.onSerializeCallbacks)if(this.onSerializeCallbacks.hasOwnProperty(e))try{this.store[e]=this.onSerializeCallbacks[e]()}catch(e){console.warn(\"Exception in onSerialize callback: \",e)}return JSON.stringify(this.store)},ht=pt=i([d.Injectable()],ht));function ht(){this.store={},this.onSerializeCallbacks={}}function ft(e,t){var n=e.getElementById(t+\"-state\"),r={};if(n&&n.textContent)try{r=JSON.parse(function(e){var t={\"&a;\":\"&\",\"&q;\":'\"',\"&s;\":\"'\",\"&l;\":\"<\",\"&g;\":\">\"};return e.replace(/&[^;]+;/g,function(e){return t[e]})}(n.textContent))}catch(e){console.warn(\"Exception while restoring TransferState for app \"+t,e)}return dt.init(r)}var mt=vt=i([d.NgModule({providers:[{provide:dt,useFactory:ft,deps:[l.DOCUMENT,d.APP_ID]}]})],vt);function vt(){}var yt=(gt.all=function(){return function(){return!0}},gt.css=function(t){return function(e){return null!=e.nativeElement&&function(e,t){return!!l.ɵgetDOM().isElementNode(e)&&(e.matches&&e.matches(t)||e.msMatchesSelector&&e.msMatchesSelector(t)||e.webkitMatchesSelector&&e.webkitMatchesSelector(t))}(e.nativeElement,t)}},gt.directive=function(t){return function(e){return-1!==e.providerTokens.indexOf(t)}},gt);function gt(){}var _t=new d.Version(\"9.0.0-next.12\");e.ɵgetDOM=l.ɵgetDOM,e.ɵangular_packages_platform_browser_platform_browser_c=$e,e.ɵangular_packages_platform_browser_platform_browser_b=Qe,e.ɵangular_packages_platform_browser_platform_browser_a=Ze,e.ɵangular_packages_platform_browser_platform_browser_o=u,e.ɵangular_packages_platform_browser_platform_browser_d=tt,e.ɵangular_packages_platform_browser_platform_browser_l=_,e.ɵangular_packages_platform_browser_platform_browser_k=g,e.ɵangular_packages_platform_browser_platform_browser_e=it,e.ɵangular_packages_platform_browser_platform_browser_f=ft,e.ɵangular_packages_platform_browser_platform_browser_n=O,e.ɵangular_packages_platform_browser_platform_browser_m=E,e.ɵangular_packages_platform_browser_platform_browser_g=P,e.ɵangular_packages_platform_browser_platform_browser_i=ke,e.ɵangular_packages_platform_browser_platform_browser_h=Oe,e.ɵangular_packages_platform_browser_platform_browser_j=Be,e.BrowserModule=Je,e.platformBrowser=Ye,e.Meta=nt,e.Title=ot,e.disableDebugTools=function(){x(\"profiler\",null)},e.enableDebugTools=function(e){return x(\"profiler\",new ut(e)),e},e.BrowserTransferStateModule=mt,e.TransferState=dt,e.makeStateKey=function(e){return e},e.By=yt,e.EVENT_MANAGER_PLUGINS=D,e.EventManager=T,e.HAMMER_GESTURE_CONFIG=_e,e.HAMMER_LOADER=be,e.ɵHAMMER_PROVIDERS__POST_R3__=[],e.HammerGestureConfig=we,e.HammerModule=De,e.DomSanitizer=Le,e.VERSION=_t,e.ɵELEMENT_PROBE_PROVIDERS__POST_R3__=[],e.ɵBROWSER_SANITIZATION_PROVIDERS=Ge,e.ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__=[],e.ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS=We,e.ɵinitDomAdapter=Ke,e.ɵBrowserDomAdapter=h,e.ɵTRANSITION_ID=y,e.ɵBrowserGetTestability=b,e.ɵescapeHtml=function(e){var t={\"&\":\"&a;\",'\"':\"&q;\",\"'\":\"&s;\",\"<\":\"&l;\",\">\":\"&g;\"};return e.replace(/[&\"'<>]/g,function(e){return t[e]})},e.ɵELEMENT_PROBE_PROVIDERS=k,e.ɵDomRendererFactory2=Y,e.ɵNAMESPACE_URIS=L,e.ɵflattenStyles=W,e.ɵshimContentAttribute=q,e.ɵshimHostAttribute=H,e.ɵDomEventsPlugin=ve,e.ɵHammerGesturesPlugin=Se,e.ɵKeyEventsPlugin=je,e.ɵDomSharedStylesHost=j,e.ɵSharedStylesHost=M,e.ɵDomSanitizerImpl=ze,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports):System.registerDynamic(\"npm:@angular/animations/bundles/animations.umd.js\",[],!1,function(e,t,n){return r.call(t,t)})}(0,function(e){\"use strict\";function t(){}function n(){}function a(e){Promise.resolve(null).then(e)}var r=(i.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},i.prototype.onStart=function(e){this._onStartFns.push(e)},i.prototype.onDone=function(e){this._onDoneFns.push(e)},i.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},i.prototype.hasStarted=function(){return this._started},i.prototype.init=function(){},i.prototype.play=function(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0},i.prototype.triggerMicrotask=function(){var e=this;a(function(){return e._onFinish()})},i.prototype._onStart=function(){this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[]},i.prototype.pause=function(){},i.prototype.restart=function(){},i.prototype.finish=function(){this._onFinish()},i.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},i.prototype.reset=function(){},i.prototype.setPosition=function(e){},i.prototype.getPosition=function(){return 0},i.prototype.triggerCallback=function(e){var t=\"start\"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},i);function i(e,t){void 0===e&&(e=0),void 0===t&&(t=0),this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=e+t}var o=(s.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},s.prototype.init=function(){this.players.forEach(function(e){return e.init()})},s.prototype.onStart=function(e){this._onStartFns.push(e)},s.prototype._onStart=function(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[])},s.prototype.onDone=function(e){this._onDoneFns.push(e)},s.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},s.prototype.hasStarted=function(){return this._started},s.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(function(e){return e.play()})},s.prototype.pause=function(){this.players.forEach(function(e){return e.pause()})},s.prototype.restart=function(){this.players.forEach(function(e){return e.restart()})},s.prototype.finish=function(){this._onFinish(),this.players.forEach(function(e){return e.finish()})},s.prototype.destroy=function(){this._onDestroy()},s.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(function(e){return e.destroy()}),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},s.prototype.reset=function(){this.players.forEach(function(e){return e.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},s.prototype.setPosition=function(e){var n=e*this.totalTime;this.players.forEach(function(e){var t=e.totalTime?Math.min(1,n/e.totalTime):1;e.setPosition(t)})},s.prototype.getPosition=function(){var n=0;return this.players.forEach(function(e){var t=e.getPosition();n=Math.min(t,n)}),n},s.prototype.beforeDestroy=function(){this.players.forEach(function(e){e.beforeDestroy&&e.beforeDestroy()})},s.prototype.triggerCallback=function(e){var t=\"start\"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},s);function s(e){var t=this;this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=e;var n=0,r=0,i=0,o=this.players.length;0==o?a(function(){return t._onFinish()}):this.players.forEach(function(e){e.onDone(function(){++n==o&&t._onFinish()}),e.onDestroy(function(){++r==o&&t._onDestroy()}),e.onStart(function(){++i==o&&t._onStart()})}),this.totalTime=this.players.reduce(function(e,t){return Math.max(e,t.totalTime)},0)}e.AnimationBuilder=t,e.AnimationFactory=n,e.AUTO_STYLE=\"*\",e.animate=function(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}},e.animateChild=function(e){return void 0===e&&(e=null),{type:9,options:e}},e.animation=function(e,t){return void 0===t&&(t=null),{type:8,animation:e,options:t}},e.group=function(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}},e.keyframes=function(e){return{type:5,steps:e}},e.query=function(e,t,n){return void 0===n&&(n=null),{type:11,selector:e,animation:t,options:n}},e.sequence=function(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}},e.stagger=function(e,t){return{type:12,timings:e,animation:t}},e.state=function(e,t,n){return{type:0,name:e,styles:t,options:n}},e.style=function(e){return{type:6,styles:e,offset:null}},e.transition=function(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}},e.trigger=function(e,t){return{type:7,name:e,definitions:t,options:{}}},e.useAnimation=function(e,t){return void 0===t&&(t=null),{type:10,animation:e,options:t}},e.NoopAnimationPlayer=r,e.ɵPRE_STYLE=\"!\",e.ɵAnimationGroupPlayer=o,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/animations\"),require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/animations/bundles/animations-browser.umd.js\",[\"@angular/animations\",\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/animations\"),e(\"@angular/core\"))})}(0,function(e,q,t){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function n(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var H=function(){return(H=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function h(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function l(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function W(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(l(arguments[t]));return e}function o(){return\"undefined\"!=typeof process}function G(e){switch(e.length){case 0:return new q.NoopAnimationPlayer;case 1:return e[0];default:return new q.ɵAnimationGroupPlayer(e)}}function w(e,o,t,n,a,s){void 0===a&&(a={}),void 0===s&&(s={});var l=[],u=[],c=-1,p=null;if(n.forEach(function(r){var e=r.offset,t=e==c,i=t&&p||{};Object.keys(r).forEach(function(e){var t=e,n=r[e];if(\"offset\"!==e)switch(t=o.normalizePropertyName(t,l),n){case q.ɵPRE_STYLE:n=a[e];break;case q.AUTO_STYLE:n=s[e];break;default:n=o.normalizeStyleValue(e,t,n,l)}i[t]=n}),t||u.push(i),p=i,c=e}),l.length){throw new Error(\"Unable to animate due to the following errors:\\n - \"+l.join(\"\\n - \"))}return u}function s(e,t,n,r){switch(t){case\"start\":e.onStart(function(){return r(n&&i(n,\"start\",e))});break;case\"done\":e.onDone(function(){return r(n&&i(n,\"done\",e))});break;case\"destroy\":e.onDestroy(function(){return r(n&&i(n,\"destroy\",e))})}}function i(e,t,n){var r=n.totalTime,i=!!n.disabled,o=u(e.element,e.triggerName,e.fromState,e.toState,t||e.phaseName,null==r?e.totalTime:r,i),a=e._data;return null!=a&&(o._data=a),o}function u(e,t,n,r,i,o,a){return void 0===i&&(i=\"\"),void 0===o&&(o=0),{element:e,triggerName:t,fromState:n,toState:r,phaseName:i,totalTime:o,disabled:!!a}}function Y(e,t,n){var r;return e instanceof Map?(r=e.get(t))||e.set(t,r=n):r=(r=e[t])||(e[t]=n),r}function c(e){var t=e.indexOf(\":\");return[e.substring(1,t),e.substr(t+1)]}var a=function(e,t){return!1},p=function(e,t){return!1},d=function(e,t,n){return[]},f=o();!f&&\"undefined\"==typeof Element||(a=function(e,t){return e.contains(t)},p=function(){if(f||Element.prototype.matches)return function(e,t){return e.matches(t)};var e=Element.prototype,n=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;return n?function(e,t){return n.apply(e,[t])}:p}(),d=function(e,t,n){var r=[];if(n)r.push.apply(r,W(e.querySelectorAll(t)));else{var i=e.querySelector(t);i&&r.push(i)}return r});var m=null,v=!1;function y(e){m||(m=(\"undefined\"==typeof document?null:document.body)||{},v=!!m.style&&\"WebkitAppearance\"in m.style);var t=!0;m.style&&!function(e){return\"ebkit\"==e.substring(1,6)}(e)&&!(t=e in m.style)&&v&&(t=\"Webkit\"+e.charAt(0).toUpperCase()+e.substr(1)in m.style);return t}var g=p,_=a,b=d;function x(n){var r={};return Object.keys(n).forEach(function(e){var t=e.replace(/([a-z])([A-Z])/g,\"$1-$2\");r[t]=n[e]}),r}var C=(S.prototype.validateStyleProperty=function(e){return y(e)},S.prototype.matchesElement=function(e,t){return g(e,t)},S.prototype.containsElement=function(e,t){return _(e,t)},S.prototype.query=function(e,t,n){return b(e,t,n)},S.prototype.computeStyle=function(e,t,n){return n||\"\"},S.prototype.animate=function(e,t,n,r,i,o,a){return void 0===o&&(o=[]),new q.NoopAnimationPlayer(n,r)},S=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}([t.Injectable()],S));function S(){}var E=(O.NOOP=new C,O);function O(){}var k=1e3,K=\"ng-enter\",Z=\"ng-leave\",D=\"ng-trigger\",T=\".ng-trigger\",I=\"ng-animating\",Q=\".ng-animating\";function P(e){if(\"number\"==typeof e)return e;var t=e.match(/^(-?[\\.\\d]+)(m?s)/);return!t||t.length<2?0:A(parseFloat(t[1]),t[2])}function A(e,t){switch(t){case\"s\":return e*k;default:return e}}function M(e,t,n){return e.hasOwnProperty(\"duration\")?e:function(e,t,n){var r,i=0,o=\"\";if(\"string\"==typeof e){var a=e.match(/^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i);if(null===a)return t.push('The provided timing value \"'+e+'\" is invalid.'),{duration:0,delay:0,easing:\"\"};r=A(parseFloat(a[1]),a[2]);var s=a[3];null!=s&&(i=A(parseFloat(s),a[4]));var l=a[5];l&&(o=l)}else r=e;if(!n){var u=!1,c=t.length;r<0&&(t.push(\"Duration values below 0 are not allowed for this animation step.\"),u=!0),i<0&&(t.push(\"Delay values below 0 are not allowed for this animation step.\"),u=!0),u&&t.splice(c,0,'The provided timing value \"'+e+'\" is invalid.')}return{duration:r,delay:i,easing:o}}(e,t,n)}function R(t,n){return void 0===n&&(n={}),Object.keys(t).forEach(function(e){n[e]=t[e]}),n}function N(e){var t={};return Array.isArray(e)?e.forEach(function(e){return j(e,!1,t)}):j(e,!1,t),t}function j(e,t,n){if(void 0===n&&(n={}),t)for(var r in e)n[r]=e[r];else R(e,n);return n}function F(e,t,n){return n?t+\":\"+n+\";\":\"\"}function L(e){for(var t=\"\",n=0;n<e.style.length;n++){t+=F(0,r=e.style.item(n),e.style.getPropertyValue(r))}for(var r in e.style){if(e.style.hasOwnProperty(r)&&!r.startsWith(\"_\"))t+=F(0,r.replace(/([a-z])([A-Z])/g,\"$1-$2\").toLowerCase(),e.style[r])}e.setAttribute(\"style\",t)}function X(n,r,i){n.style&&(Object.keys(r).forEach(function(e){var t=te(e);i&&!i.hasOwnProperty(e)&&(i[e]=n.style[t]),n.style[t]=r[e]}),o()&&L(n))}function $(n,e){n.style&&(Object.keys(e).forEach(function(e){var t=te(e);n.style[t]=\"\"}),o()&&L(n))}function V(e){return Array.isArray(e)?1==e.length?e[0]:q.sequence(e):e}var B=new RegExp(\"{{\\\\s*(.+?)\\\\s*}}\",\"g\");function U(e){var t=[];if(\"string\"==typeof e){for(var n=void 0;n=B.exec(e);)t.push(n[1]);B.lastIndex=0}return t}function z(e,r,i){var t=e.toString(),n=t.replace(B,function(e,t){var n=r[t];return r.hasOwnProperty(t)||(i.push(\"Please provide a value for the animation param \"+t),n=\"\"),n.toString()});return n==t?e:n}function J(e){for(var t=[],n=e.next();!n.done;)t.push(n.value),n=e.next();return t}var ee=/-+([a-z0-9])/g;function te(e){return e.replace(ee,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e[1].toUpperCase()})}function ne(e,t){return 0===e||0===t}function re(n,e,t){var r=Object.keys(t);if(r.length&&e.length){var i=e[0],o=[];if(r.forEach(function(e){i.hasOwnProperty(e)||o.push(e),i[e]=t[e]}),o.length)for(var a=function(){var t=e[s];o.forEach(function(e){t[e]=oe(n,e)})},s=1;s<e.length;s++)a()}return e}function ie(e,t,n){switch(t.type){case 7:return e.visitTrigger(t,n);case 0:return e.visitState(t,n);case 1:return e.visitTransition(t,n);case 2:return e.visitSequence(t,n);case 3:return e.visitGroup(t,n);case 4:return e.visitAnimate(t,n);case 5:return e.visitKeyframes(t,n);case 6:return e.visitStyle(t,n);case 8:return e.visitReference(t,n);case 9:return e.visitAnimateChild(t,n);case 10:return e.visitAnimateRef(t,n);case 11:return e.visitQuery(t,n);case 12:return e.visitStagger(t,n);default:throw new Error(\"Unable to resolve animation metadata node #\"+t.type)}}function oe(e,t){return window.getComputedStyle(e)[t]}var ae=\"*\";function se(e,t){var n=[];return\"string\"==typeof e?e.split(/\\s*,\\s*/).forEach(function(e){return function(e,t,n){if(\":\"==e[0]){var r=function(e,t){switch(e){case\":enter\":return\"void => *\";case\":leave\":return\"* => void\";case\":increment\":return function(e,t){return parseFloat(t)>parseFloat(e)};case\":decrement\":return function(e,t){return parseFloat(t)<parseFloat(e)};default:return t.push('The transition alias value \"'+e+'\" is not supported'),\"* => *\"}}(e,n);if(\"function\"==typeof r)return void t.push(r);e=r}var i=e.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);if(null==i||i.length<4)return n.push('The provided transition expression \"'+e+'\" is not supported'),t;var o=i[1],a=i[2],s=i[3];t.push(ce(o,s));var l=o==ae&&s==ae;\"<\"!=a[0]||l||t.push(ce(s,o))}(e,n,t)}):n.push(e),n}var le=new Set([\"true\",\"1\"]),ue=new Set([\"false\",\"0\"]);function ce(i,o){var a=le.has(i)||ue.has(i),s=le.has(o)||ue.has(o);return function(e,t){var n=i==ae||i==e,r=o==ae||o==t;return!n&&a&&\"boolean\"==typeof e&&(n=e?le.has(i):ue.has(i)),!r&&s&&\"boolean\"==typeof t&&(r=t?le.has(o):ue.has(o)),n&&r}}var pe=new RegExp(\"s*:selfs*,?\",\"g\");function de(e,t,n){return new he(e).build(t,n)}var he=(fe.prototype.build=function(e,t){var n=new me(t);return this._resetContextStyleTimingState(n),ie(this,V(e),n)},fe.prototype._resetContextStyleTimingState=function(e){e.currentQuerySelector=\"\",e.collectedStyles={},e.collectedStyles[\"\"]={},e.currentTime=0},fe.prototype.visitTrigger=function(e,i){var o=this,a=i.queryCount=0,s=i.depCount=0,l=[],u=[];return\"@\"==e.name.charAt(0)&&i.errors.push(\"animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))\"),e.definitions.forEach(function(e){if(o._resetContextStyleTimingState(i),0==e.type){var t=e,n=t.name;n.toString().split(/\\s*,\\s*/).forEach(function(e){t.name=e,l.push(o.visitState(t,i))}),t.name=n}else if(1==e.type){var r=o.visitTransition(e,i);a+=r.queryCount,s+=r.depCount,u.push(r)}else i.errors.push(\"only state() and transition() definitions can sit inside of a trigger()\")}),{type:7,name:e.name,states:l,transitions:u,queryCount:a,depCount:s,options:null}},fe.prototype.visitState=function(e,t){var n=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(n.containsDynamicStyles){var i=new Set,o=r||{};if(n.styles.forEach(function(e){if(ve(e)){var t=e;Object.keys(t).forEach(function(e){U(t[e]).forEach(function(e){o.hasOwnProperty(e)||i.add(e)})})}}),i.size){var a=J(i.values());t.errors.push('state(\"'+e.name+'\", ...) must define default values for all the following style substitutions: '+a.join(\", \"))}}return{type:0,name:e.name,style:n,options:r?{params:r}:null}},fe.prototype.visitTransition=function(e,t){t.queryCount=0,t.depCount=0;var n=ie(this,V(e.animation),t);return{type:1,matchers:se(e.expr,t.errors),animation:n,queryCount:t.queryCount,depCount:t.depCount,options:ye(e.options)}},fe.prototype.visitSequence=function(e,t){var n=this;return{type:2,steps:e.steps.map(function(e){return ie(n,e,t)}),options:ye(e.options)}},fe.prototype.visitGroup=function(e,n){var r=this,i=n.currentTime,o=0,t=e.steps.map(function(e){n.currentTime=i;var t=ie(r,e,n);return o=Math.max(o,n.currentTime),t});return n.currentTime=o,{type:3,steps:t,options:ye(e.options)}},fe.prototype.visitAnimate=function(e,t){var n,r=function(e,t){var n=null;if(e.hasOwnProperty(\"duration\"))n=e;else if(\"number\"==typeof e)return ge(M(e,t).duration,0,\"\");var r=e;if(r.split(/\\s+/).some(function(e){return\"{\"==e.charAt(0)&&\"{\"==e.charAt(1)})){var i=ge(0,0,\"\");return i.dynamic=!0,i.strValue=r,i}return ge((n=n||M(r,t)).duration,n.delay,n.easing)}(e.timings,t.errors);t.currentAnimateTimings=r;var i=e.styles?e.styles:q.style({});if(5==i.type)n=this.visitKeyframes(i,t);else{var o=e.styles,a=!1;if(!o){a=!0;var s={};r.easing&&(s.easing=r.easing),o=q.style(s)}t.currentTime+=r.duration+r.delay;var l=this.visitStyle(o,t);l.isEmptyStep=a,n=l}return{type:4,timings:r,style:n,options:t.currentAnimateTimings=null}},fe.prototype.visitStyle=function(e,t){var n=this._makeStyleAst(e,t);return this._validateStyleAst(n,t),n},fe.prototype._makeStyleAst=function(e,t){var n=[];Array.isArray(e.styles)?e.styles.forEach(function(e){\"string\"==typeof e?e==q.AUTO_STYLE?n.push(e):t.errors.push(\"The provided style string value \"+e+\" is not allowed.\"):n.push(e)}):n.push(e.styles);var i=!1,o=null;return n.forEach(function(e){if(ve(e)){var t=e,n=t.easing;if(n&&(o=n,delete t.easing),!i)for(var r in t)if(0<=t[r].toString().indexOf(\"{{\")){i=!0;break}}}),{type:6,styles:n,easing:o,offset:e.offset,containsDynamicStyles:i,options:null}},fe.prototype._validateStyleAst=function(e,o){var a=this,t=o.currentAnimateTimings,s=o.currentTime,l=o.currentTime;t&&0<l&&(l-=t.duration+t.delay),e.styles.forEach(function(i){\"string\"!=typeof i&&Object.keys(i).forEach(function(e){if(a._driver.validateStyleProperty(e)){var t=o.collectedStyles[o.currentQuerySelector],n=t[e],r=!0;n&&(l!=s&&l>=n.startTime&&s<=n.endTime&&(o.errors.push('The CSS property \"'+e+'\" that exists between the times of \"'+n.startTime+'ms\" and \"'+n.endTime+'ms\" is also being animated in a parallel animation between the times of \"'+l+'ms\" and \"'+s+'ms\"'),r=!1),l=n.startTime),r&&(t[e]={startTime:l,endTime:s}),o.options&&function(e,t,n){var r=t.params||{},i=U(e);i.length&&i.forEach(function(e){r.hasOwnProperty(e)||n.push(\"Unable to resolve the local animation param \"+e+\" in the given list of values\")})}(i[e],o.options,o.errors)}else o.errors.push('The provided animation property \"'+e+'\" is not a supported CSS property for animations')})})},fe.prototype.visitKeyframes=function(e,i){var o=this,a={type:5,styles:[],options:null};if(!i.currentAnimateTimings)return i.errors.push(\"keyframes() must be placed inside of a call to animate()\"),a;var s=0,l=[],u=!1,c=!1,p=0,t=e.steps.map(function(e){var t=o._makeStyleAst(e,i),n=null!=t.offset?t.offset:function(e){if(\"string\"==typeof e)return null;var n=null;if(Array.isArray(e))e.forEach(function(e){if(ve(e)&&e.hasOwnProperty(\"offset\")){var t=e;n=parseFloat(t.offset),delete t.offset}});else if(ve(e)&&e.hasOwnProperty(\"offset\")){var t=e;n=parseFloat(t.offset),delete t.offset}return n}(t.styles),r=0;return null!=n&&(s++,r=t.offset=n),c=c||r<0||1<r,u=u||r<p,p=r,l.push(r),t});c&&i.errors.push(\"Please ensure that all keyframe offsets are between 0 and 1\"),u&&i.errors.push(\"Please ensure that all keyframe offsets are in order\");var n=e.steps.length,d=0;0<s&&s<n?i.errors.push(\"Not all style() steps within the declared keyframes() contain offsets\"):0==s&&(d=1/(n-1));var h=n-1,f=i.currentTime,m=i.currentAnimateTimings,v=m.duration;return t.forEach(function(e,t){var n=0<d?t==h?1:d*t:l[t],r=n*v;i.currentTime=f+m.delay+r,m.duration=r,o._validateStyleAst(e,i),e.offset=n,a.styles.push(e)}),a},fe.prototype.visitReference=function(e,t){return{type:8,animation:ie(this,V(e.animation),t),options:ye(e.options)}},fe.prototype.visitAnimateChild=function(e,t){return t.depCount++,{type:9,options:ye(e.options)}},fe.prototype.visitAnimateRef=function(e,t){return{type:10,animation:this.visitReference(e.animation,t),options:ye(e.options)}},fe.prototype.visitQuery=function(e,t){var n=t.currentQuerySelector,r=e.options||{};t.queryCount++;var i=l(function(e){var t=!!e.split(/\\s*,\\s*/).find(function(e){return\":self\"==e});return t&&(e=e.replace(pe,\"\")),[e=e.replace(/@\\*/g,T).replace(/@\\w+/g,function(e){return T+\"-\"+e.substr(1)}).replace(/:animating/g,Q),t]}((t.currentQuery=e).selector),2),o=i[0],a=i[1];t.currentQuerySelector=n.length?n+\" \"+o:o,Y(t.collectedStyles,t.currentQuerySelector,{});var s=ie(this,V(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=n,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:a,animation:s,originalSelector:e.selector,options:ye(e.options)}},fe.prototype.visitStagger=function(e,t){t.currentQuery||t.errors.push(\"stagger() can only be used inside of query()\");var n=\"full\"===e.timings?{duration:0,delay:0,easing:\"full\"}:M(e.timings,t.errors,!0);return{type:12,animation:ie(this,V(e.animation),t),timings:n,options:null}},fe);function fe(e){this._driver=e}var me=function(e){this.errors=e,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 ve(e){return!Array.isArray(e)&&\"object\"==typeof e}function ye(e){return e?(e=R(e)).params&&(e.params=function(e){return e?R(e):null}(e.params)):e={},e}function ge(e,t,n){return{duration:e,delay:t,easing:n}}function _e(e,t,n,r,i,o,a,s){return void 0===a&&(a=null),void 0===s&&(s=!1),{type:1,element:e,keyframes:t,preStyleProps:n,postStyleProps:r,duration:i,delay:o,totalTime:i+o,easing:a,subTimeline:s}}var be=(we.prototype.consume=function(e){var t=this._map.get(e);return t?this._map.delete(e):t=[],t},we.prototype.append=function(e,t){var n=this._map.get(e);n||this._map.set(e,n=[]),n.push.apply(n,W(t))},we.prototype.has=function(e){return this._map.has(e)},we.prototype.clear=function(){this._map.clear()},we);function we(){this._map=new Map}var xe=new RegExp(\":enter\",\"g\"),Ce=new RegExp(\":leave\",\"g\");function Se(e,t,n,r,i,o,a,s,l,u){return void 0===o&&(o={}),void 0===a&&(a={}),void 0===u&&(u=[]),(new Ee).buildKeyframes(e,t,n,r,i,o,a,s,l,u)}var Ee=(Oe.prototype.buildKeyframes=function(e,t,n,r,i,o,a,s,l,u){void 0===u&&(u=[]),l=l||new be;var c=new De(e,t,l,r,i,u,[]);c.options=s,c.currentTimeline.setStyles([o],null,c.errors,s),ie(this,n,c);var p=c.timelines.filter(function(e){return e.containsAnimation()});if(p.length&&Object.keys(a).length){var d=p[p.length-1];d.allowOnlyTimelineStyles()||d.setStyles([a],null,c.errors,s)}return p.length?p.map(function(e){return e.buildKeyframes()}):[_e(t,[],[],[],0,0,\"\",!1)]},Oe.prototype.visitTrigger=function(e,t){},Oe.prototype.visitState=function(e,t){},Oe.prototype.visitTransition=function(e,t){},Oe.prototype.visitAnimateChild=function(e,t){var n=t.subInstructions.consume(t.element);if(n){var r=t.createSubContext(e.options),i=t.currentTimeline.currentTime,o=this._visitSubInstructions(n,r,r.options);i!=o&&t.transformIntoNewTimeline(o)}t.previousNode=e},Oe.prototype.visitAnimateRef=function(e,t){var n=t.createSubContext(e.options);n.transformIntoNewTimeline(),this.visitReference(e.animation,n),t.transformIntoNewTimeline(n.currentTimeline.currentTime),t.previousNode=e},Oe.prototype._visitSubInstructions=function(e,n,t){var r=n.currentTimeline.currentTime,i=null!=t.duration?P(t.duration):null,o=null!=t.delay?P(t.delay):null;return 0!==i&&e.forEach(function(e){var t=n.appendInstructionToTimeline(e,i,o);r=Math.max(r,t.duration+t.delay)}),r},Oe.prototype.visitReference=function(e,t){t.updateOptions(e.options,!0),ie(this,e.animation,t),t.previousNode=e},Oe.prototype.visitSequence=function(e,t){var n=this,r=t.subContextCount,i=t,o=e.options;if(o&&(o.params||o.delay)&&((i=t.createSubContext(o)).transformIntoNewTimeline(),null!=o.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=ke);var a=P(o.delay);i.delayNextStep(a)}e.steps.length&&(e.steps.forEach(function(e){return ie(n,e,i)}),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),t.previousNode=e},Oe.prototype.visitGroup=function(n,r){var i=this,o=[],a=r.currentTimeline.currentTime,s=n.options&&n.options.delay?P(n.options.delay):0;n.steps.forEach(function(e){var t=r.createSubContext(n.options);s&&t.delayNextStep(s),ie(i,e,t),a=Math.max(a,t.currentTimeline.currentTime),o.push(t.currentTimeline)}),o.forEach(function(e){return r.currentTimeline.mergeTimelineCollectedStyles(e)}),r.transformIntoNewTimeline(a),r.previousNode=n},Oe.prototype._visitTiming=function(e,t){if(e.dynamic){var n=e.strValue;return M(t.params?z(n,t.params,t.errors):n,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}},Oe.prototype.visitAnimate=function(e,t){var n=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;n.delay&&(t.incrementTime(n.delay),r.snapshotCurrentStyles());var i=e.style;5==i.type?this.visitKeyframes(i,t):(t.incrementTime(n.duration),this.visitStyle(i,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e},Oe.prototype.visitStyle=function(e,t){var n=t.currentTimeline,r=t.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var i=r&&r.easing||e.easing;e.isEmptyStep?n.applyEmptyStep(i):n.setStyles(e.styles,i,t.errors,t.options),t.previousNode=e},Oe.prototype.visitKeyframes=function(e,n){var t=n.currentAnimateTimings,r=n.currentTimeline.duration,i=t.duration,o=n.createSubContext().currentTimeline;o.easing=t.easing,e.styles.forEach(function(e){var t=e.offset||0;o.forwardTime(t*i),o.setStyles(e.styles,e.easing,n.errors,n.options),o.applyStylesToKeyframe()}),n.currentTimeline.mergeTimelineCollectedStyles(o),n.transformIntoNewTimeline(r+i),n.previousNode=e},Oe.prototype.visitQuery=function(i,o){var a=this,e=o.currentTimeline.currentTime,t=i.options||{},s=t.delay?P(t.delay):0;s&&(6===o.previousNode.type||0==e&&o.currentTimeline.getCurrentStyleProperties().length)&&(o.currentTimeline.snapshotCurrentStyles(),o.previousNode=ke);var l=e,n=o.invokeQuery(i.selector,i.originalSelector,i.limit,i.includeSelf,!!t.optional,o.errors);o.currentQueryTotal=n.length;var u=null;n.forEach(function(e,t){o.currentQueryIndex=t;var n=o.createSubContext(i.options,e);s&&n.delayNextStep(s),e===o.element&&(u=n.currentTimeline),ie(a,i.animation,n),n.currentTimeline.applyStylesToKeyframe();var r=n.currentTimeline.currentTime;l=Math.max(l,r)}),o.currentQueryIndex=0,o.currentQueryTotal=0,o.transformIntoNewTimeline(l),u&&(o.currentTimeline.mergeTimelineCollectedStyles(u),o.currentTimeline.snapshotCurrentStyles()),o.previousNode=i},Oe.prototype.visitStagger=function(e,t){var n=t.parentContext,r=t.currentTimeline,i=e.timings,o=Math.abs(i.duration),a=o*(t.currentQueryTotal-1),s=o*t.currentQueryIndex;switch(i.duration<0?\"reverse\":i.easing){case\"reverse\":s=a-s;break;case\"full\":s=n.currentStaggerTime}var l=t.currentTimeline;s&&l.delayNextStep(s);var u=l.currentTime;ie(this,e.animation,t),t.previousNode=e,n.currentStaggerTime=r.currentTime-u+(r.startTime-n.currentTimeline.startTime)},Oe);function Oe(){}var ke={},De=(Object.defineProperty(Te.prototype,\"params\",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),Te.prototype.updateOptions=function(e,t){var n=this;if(e){var r=e,i=this.options;null!=r.duration&&(i.duration=P(r.duration)),null!=r.delay&&(i.delay=P(r.delay));var o=r.params;if(o){var a=i.params;a=a||(this.options.params={}),Object.keys(o).forEach(function(e){t&&a.hasOwnProperty(e)||(a[e]=z(o[e],a,n.errors))})}}},Te.prototype._copyOptions=function(){var e={};if(this.options){var t=this.options.params;if(t){var n=e.params={};Object.keys(t).forEach(function(e){n[e]=t[e]})}}return e},Te.prototype.createSubContext=function(e,t,n){void 0===e&&(e=null);var r=t||this.element,i=new Te(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,n||0));return i.previousNode=this.previousNode,i.currentAnimateTimings=this.currentAnimateTimings,i.options=this._copyOptions(),i.updateOptions(e),i.currentQueryIndex=this.currentQueryIndex,i.currentQueryTotal=this.currentQueryTotal,(i.parentContext=this).subContextCount++,i},Te.prototype.transformIntoNewTimeline=function(e){return this.previousNode=ke,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline},Te.prototype.appendInstructionToTimeline=function(e,t,n){var r={duration:null!=t?t:e.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+e.delay,easing:\"\"},i=new Me(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(i),r},Te.prototype.incrementTime=function(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)},Te.prototype.delayNextStep=function(e){0<e&&this.currentTimeline.delayNextStep(e)},Te.prototype.invokeQuery=function(e,t,n,r,i,o){var a=[];if(r&&a.push(this.element),0<e.length){e=(e=e.replace(xe,\".\"+this._enterClassName)).replace(Ce,\".\"+this._leaveClassName);var s=1!=n,l=this._driver.query(this.element,e,s);0!==n&&(l=n<0?l.slice(l.length+n,l.length):l.slice(0,n)),a.push.apply(a,W(l))}return i||0!=a.length||o.push('`query(\"'+t+'\")` returned zero elements. (Use `query(\"'+t+'\", { optional: true })` if you wish to allow this.)'),a},Te);function Te(e,t,n,r,i,o,a,s){this._driver=e,this.element=t,this.subInstructions=n,this._enterClassName=r,this._leaveClassName=i,this.errors=o,this.timelines=a,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=ke,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=s||new Ie(this._driver,t,0),a.push(this.currentTimeline)}var Ie=(Pe.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return 0<this.getCurrentStyleProperties().length;default:return!0}},Pe.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(Pe.prototype,\"currentTime\",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),Pe.prototype.delayNextStep=function(e){var t=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e},Pe.prototype.fork=function(e,t){return this.applyStylesToKeyframe(),new Pe(this._driver,e,t||this.currentTime,this._elementTimelineStylesLookup)},Pe.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},Pe.prototype.forwardFrame=function(){this.duration+=1,this._loadKeyframe()},Pe.prototype.forwardTime=function(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()},Pe.prototype._updateStyle=function(e,t){this._localTimelineStyles[e]=t,this._globalTimelineStyles[e]=t,this._styleSummary[e]={time:this.currentTime,value:t}},Pe.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},Pe.prototype.applyEmptyStep=function(e){var t=this;e&&(this._previousKeyframe.easing=e),Object.keys(this._globalTimelineStyles).forEach(function(e){t._backFill[e]=t._globalTimelineStyles[e]||q.AUTO_STYLE,t._currentKeyframe[e]=q.AUTO_STYLE}),this._currentEmptyStepKeyframe=this._currentKeyframe},Pe.prototype.setStyles=function(e,t,n,r){var i=this;t&&(this._previousKeyframe.easing=t);var o=r&&r.params||{},a=function(e,t){var n,r={};return e.forEach(function(e){\"*\"===e?(n=n||Object.keys(t)).forEach(function(e){r[e]=q.AUTO_STYLE}):j(e,!1,r)}),r}(e,this._globalTimelineStyles);Object.keys(a).forEach(function(e){var t=z(a[e],o,n);i._pendingStyles[e]=t,i._localTimelineStyles.hasOwnProperty(e)||(i._backFill[e]=i._globalTimelineStyles.hasOwnProperty(e)?i._globalTimelineStyles[e]:q.AUTO_STYLE),i._updateStyle(e,t)})},Pe.prototype.applyStylesToKeyframe=function(){var n=this,r=this._pendingStyles,e=Object.keys(r);0!=e.length&&(this._pendingStyles={},e.forEach(function(e){var t=r[e];n._currentKeyframe[e]=t}),Object.keys(this._localTimelineStyles).forEach(function(e){n._currentKeyframe.hasOwnProperty(e)||(n._currentKeyframe[e]=n._localTimelineStyles[e])}))},Pe.prototype.snapshotCurrentStyles=function(){var n=this;Object.keys(this._localTimelineStyles).forEach(function(e){var t=n._localTimelineStyles[e];n._pendingStyles[e]=t,n._updateStyle(e,t)})},Pe.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(Pe.prototype,\"properties\",{get:function(){var e=[];for(var t in this._currentKeyframe)e.push(t);return e},enumerable:!0,configurable:!0}),Pe.prototype.mergeTimelineCollectedStyles=function(r){var i=this;Object.keys(r._styleSummary).forEach(function(e){var t=i._styleSummary[e],n=r._styleSummary[e];(!t||n.time>t.time)&&i._updateStyle(e,n.value)})},Pe.prototype.buildKeyframes=function(){var r=this;this.applyStylesToKeyframe();var i=new Set,o=new Set,a=1===this._keyframes.size&&0===this.duration,s=[];this._keyframes.forEach(function(e,t){var n=j(e,!0);Object.keys(n).forEach(function(e){var t=n[e];t==q.ɵPRE_STYLE?i.add(e):t==q.AUTO_STYLE&&o.add(e)}),a||(n.offset=t/r.duration),s.push(n)});var e=i.size?J(i.values()):[],t=o.size?J(o.values()):[];if(a){var n=s[0],l=R(n);n.offset=0,l.offset=1,s=[n,l]}return _e(this.element,s,e,t,this.duration,this.startTime,this.easing,!1)},Pe);function Pe(e,t,n,r){this._driver=e,this.element=t,this.startTime=n,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}var Ae,Me=(n(Re,Ae=Ie),Re.prototype.containsAnimation=function(){return 1<this.keyframes.length},Re.prototype.buildKeyframes=function(){var e=this.keyframes,t=this.timings,n=t.delay,r=t.duration,i=t.easing;if(this._stretchStartingKeyframe&&n){var o=[],a=r+n,s=n/a,l=j(e[0],!1);l.offset=0,o.push(l);var u=j(e[0],!1);u.offset=Ne(s),o.push(u);for(var c=e.length-1,p=1;p<=c;p++){var d=j(e[p],!1),h=n+d.offset*r;d.offset=Ne(h/a),o.push(d)}r=a,n=0,i=\"\",e=o}return _e(this.element,e,this.preStyleProps,this.postStyleProps,r,n,i,!0)},Re);function Re(e,t,n,r,i,o,a){void 0===a&&(a=!1);var s=Ae.call(this,e,t,o.delay)||this;return s.element=t,s.keyframes=n,s.preStyleProps=r,s.postStyleProps=i,s._stretchStartingKeyframe=a,s.timings={duration:o.duration,delay:o.delay,easing:o.easing},s}function Ne(e,t){void 0===t&&(t=3);var n=Math.pow(10,t-1);return Math.round(e*n)/n}var je=(Fe.prototype.buildTimelines=function(e,t,n,r,i){var o=Array.isArray(t)?N(t):t,a=Array.isArray(n)?N(n):n,s=[];i=i||new be;var l=Se(this._driver,e,this._animationAst,K,Z,o,a,r,i,s);if(s.length){var u=\"animation building failed:\\n\"+s.join(\"\\n\");throw new Error(u)}return l},Fe);function Fe(e,t){var n=[],r=de(this._driver=e,t,n);if(n.length){var i=\"animation validation failed:\\n\"+n.join(\"\\n\");throw new Error(i)}this._animationAst=r}function Le(){}var Ve=(Be.prototype.normalizePropertyName=function(e,t){return e},Be.prototype.normalizeStyleValue=function(e,t,n,r){return n},Be);function Be(){}var Ue,ze=(n(qe,Ue=Le),qe.prototype.normalizePropertyName=function(e,t){return te(e)},qe.prototype.normalizeStyleValue=function(e,t,n,r){var i=\"\",o=n.toString().trim();if(Ge[t]&&0!==n&&\"0\"!==n)if(\"number\"==typeof n)i=\"px\";else{var a=n.match(/^[+-]?[\\d\\.]+([a-z]*)$/);a&&0==a[1].length&&r.push(\"Please provide a CSS unit value for \"+e+\":\"+n)}return o+i},qe);function qe(){return null!==Ue&&Ue.apply(this,arguments)||this}var He,We,Ge=(He=\"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(\",\"),We={},He.forEach(function(e){return We[e]=!0}),We);function Ye(e,t,n,r,i,o,a,s,l,u,c,p,d){return{type:0,element:e,triggerName:t,isRemovalTransition:i,fromState:n,fromStyles:o,toState:r,toStyles:a,timelines:s,queriedElements:l,preStyleProps:u,postStyleProps:c,totalTime:p,errors:d}}var Ke={},Ze=(Qe.prototype.match=function(e,t,n,r){return function(e,t,n,r,i){return e.some(function(e){return e(t,n,r,i)})}(this.ast.matchers,e,t,n,r)},Qe.prototype.buildStyles=function(e,t,n){var r=this._stateStyles[\"*\"],i=this._stateStyles[e],o=r?r.buildStyles(t,n):{};return i?i.buildStyles(t,n):o},Qe.prototype.build=function(e,i,t,n,r,o,a,s,l,u){var c=[],p=this.ast.options&&this.ast.options.params||Ke,d=a&&a.params||Ke,h=this.buildStyles(t,d,c),f=s&&s.params||Ke,m=this.buildStyles(n,f,c),v=new Set,y=new Map,g=new Map,_=\"void\"===n,b={params:H(H({},p),f)},w=u?[]:Se(e,i,this.ast.animation,r,o,h,m,b,l,c),x=0;if(w.forEach(function(e){x=Math.max(e.duration+e.delay,x)}),c.length)return Ye(i,this._triggerName,t,n,_,h,m,[],[],y,g,x,c);w.forEach(function(e){var t=e.element,n=Y(y,t,{});e.preStyleProps.forEach(function(e){return n[e]=!0});var r=Y(g,t,{});e.postStyleProps.forEach(function(e){return r[e]=!0}),t!==i&&v.add(t)});var C=J(v.values());return Ye(i,this._triggerName,t,n,_,h,m,w,C,y,g,x)},Qe);function Qe(e,t,n){this._triggerName=e,this.ast=t,this._stateStyles=n}var Xe=($e.prototype.buildStyles=function(n,r){var i={},o=R(this.defaultParams);return Object.keys(n).forEach(function(e){var t=n[e];null!=t&&(o[e]=t)}),this.styles.styles.forEach(function(e){if(\"string\"!=typeof e){var n=e;Object.keys(n).forEach(function(e){var t=n[e];1<t.length&&(t=z(t,o,r)),i[e]=t})}}),i},$e);function $e(e,t){this.styles=e,this.defaultParams=t}var Je=(Object.defineProperty(et.prototype,\"containsQueries\",{get:function(){return 0<this.ast.queryCount},enumerable:!0,configurable:!0}),et.prototype.matchTransition=function(t,n,r,i){return this.transitionFactories.find(function(e){return e.match(t,n,r,i)})||null},et.prototype.matchStyles=function(e,t,n){return this.fallbackTransition.buildStyles(e,t,n)},et);function et(t,e){var n=this;this.name=t,this.ast=e,this.transitionFactories=[],this.states={},e.states.forEach(function(e){var t=e.options&&e.options.params||{};n.states[e.name]=new Xe(e.style,t)}),tt(this.states,\"true\",\"1\"),tt(this.states,\"false\",\"0\"),e.transitions.forEach(function(e){n.transitionFactories.push(new Ze(t,e,n.states))}),this.fallbackTransition=function(e,t){return new Ze(e,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(e,t){return!0}],options:null,queryCount:0,depCount:0},t)}(t,this.states)}function tt(e,t,n){e.hasOwnProperty(t)?e.hasOwnProperty(n)||(e[n]=e[t]):e.hasOwnProperty(n)&&(e[t]=e[n])}var nt=new be,rt=(it.prototype.register=function(e,t){var n=[],r=de(this._driver,t,n);if(n.length)throw new Error(\"Unable to build the animation due to the following errors: \"+n.join(\"\\n\"));this._animations[e]=r},it.prototype._buildPlayer=function(e,t,n){var r=e.element,i=w(this._driver,this._normalizer,0,e.keyframes,t,n);return this._driver.animate(r,i,e.duration,e.delay,e.easing,[],!0)},it.prototype.create=function(e,t,n){var r=this;void 0===n&&(n={});var i,o=[],a=this._animations[e],s=new Map;if(a?(i=Se(this._driver,t,a,K,Z,{},{},n,nt,o)).forEach(function(e){var t=Y(s,e.element,{});e.postStyleProps.forEach(function(e){return t[e]=null})}):(o.push(\"The requested animation doesn't exist or has already been destroyed\"),i=[]),o.length)throw new Error(\"Unable to create the animation due to the following errors: \"+o.join(\"\\n\"));s.forEach(function(t,n){Object.keys(t).forEach(function(e){t[e]=r._driver.computeStyle(n,e,q.AUTO_STYLE)})});var l=G(i.map(function(e){var t=s.get(e.element);return r._buildPlayer(e,{},t)}));return(this._playersById[e]=l).onDestroy(function(){return r.destroy(e)}),this.players.push(l),l},it.prototype.destroy=function(e){var t=this._getPlayer(e);t.destroy(),delete this._playersById[e];var n=this.players.indexOf(t);0<=n&&this.players.splice(n,1)},it.prototype._getPlayer=function(e){var t=this._playersById[e];if(!t)throw new Error(\"Unable to find the timeline player referenced by \"+e);return t},it.prototype.listen=function(e,t,n,r){var i=u(t,\"\",\"\",\"\");return s(this._getPlayer(e),n,i,r),function(){}},it.prototype.command=function(e,t,n,r){if(\"register\"!=n)if(\"create\"!=n){var i=this._getPlayer(e);switch(n){case\"play\":i.play();break;case\"pause\":i.pause();break;case\"reset\":i.reset();break;case\"restart\":i.restart();break;case\"finish\":i.finish();break;case\"init\":i.init();break;case\"setPosition\":i.setPosition(parseFloat(r[0]));break;case\"destroy\":this.destroy(e)}}else{var o=r[0]||{};this.create(e,t,o)}else this.register(e,r[0])},it);function it(e,t,n){this.bodyNode=e,this._driver=t,this._normalizer=n,this._animations={},this._playersById={},this.players=[]}var ot=\"ng-animate-queued\",at=\"ng-animate-disabled\",st=\".ng-animate-disabled\",lt=[],ut={namespaceId:\"\",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},ct={namespaceId:\"\",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},pt=\"__ng_removed\",dt=(Object.defineProperty(ht.prototype,\"params\",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),ht.prototype.absorbOptions=function(e){var t=e.params;if(t){var n=this.options.params;Object.keys(t).forEach(function(e){null==n[e]&&(n[e]=t[e])})}},ht);function ht(e,t){void 0===t&&(t=\"\"),this.namespaceId=t;var n=e&&e.hasOwnProperty(\"value\"),r=n?e.value:e;if(this.value=function(e){return null!=e?e:null}(r),n){var i=R(e);delete i.value,this.options=i}else this.options={};this.options.params||(this.options.params={})}var ft=\"void\",mt=new dt(ft),vt=(yt.prototype.listen=function(e,t,n,r){var i=this;if(!this._triggers.hasOwnProperty(t))throw new Error('Unable to listen on the animation trigger event \"'+n+'\" because the animation trigger \"'+t+\"\\\" doesn't exist!\");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger \"'+t+'\" because the provided event is undefined!');if(!function(e){return\"start\"==e||\"done\"==e}(n))throw new Error('The provided animation trigger event \"'+n+'\" for the animation trigger \"'+t+'\" is not supported!');var o=Y(this._elementListeners,e,[]),a={name:t,phase:n,callback:r};o.push(a);var s=Y(this._engine.statesByElement,e,{});return s.hasOwnProperty(t)||(kt(e,D),kt(e,D+\"-\"+t),s[t]=mt),function(){i._engine.afterFlush(function(){var e=o.indexOf(a);0<=e&&o.splice(e,1),i._triggers[t]||delete s[t]})}},yt.prototype.register=function(e,t){return!this._triggers[e]&&(this._triggers[e]=t,!0)},yt.prototype._getTrigger=function(e){var t=this._triggers[e];if(!t)throw new Error('The provided animation trigger \"'+e+'\" has not been registered!');return t},yt.prototype.trigger=function(r,t,e,n){var i=this;void 0===n&&(n=!0);var o=this._getTrigger(t),a=new bt(this.id,t,r),s=this._engine.statesByElement.get(r);s||(kt(r,D),kt(r,D+\"-\"+t),this._engine.statesByElement.set(r,s={}));var l=s[t],u=new dt(e,this.id);if(e&&e.hasOwnProperty(\"value\")||!l||u.absorbOptions(l.options),s[t]=u,l=l||mt,u.value===ft||l.value!==u.value){var c=Y(this._engine.playersByElement,r,[]);c.forEach(function(e){e.namespaceId==i.id&&e.triggerName==t&&e.queued&&e.destroy()});var p=o.matchTransition(l.value,u.value,r,u.params),d=!1;if(!p){if(!n)return;p=o.fallbackTransition,d=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:r,triggerName:t,transition:p,fromState:l,toState:u,player:a,isFallbackTransition:d}),d||(kt(r,ot),a.onStart(function(){Dt(r,ot)})),a.onDone(function(){var e=i.players.indexOf(a);0<=e&&i.players.splice(e,1);var t=i._engine.playersByElement.get(r);if(t){var n=t.indexOf(a);0<=n&&t.splice(n,1)}}),this.players.push(a),c.push(a),a}if(!function(e,t){var n=Object.keys(e),r=Object.keys(t);if(n.length!=r.length)return 0;for(var i=0;i<n.length;i++){var o=n[i];if(!t.hasOwnProperty(o)||e[o]!==t[o])return 0}return 1}(l.params,u.params)){var h=[],f=o.matchStyles(l.value,l.params,h),m=o.matchStyles(u.value,u.params,h);h.length?this._engine.reportError(h):this._engine.afterFlush(function(){$(r,f),X(r,m)})}},yt.prototype.deregister=function(n){var r=this;delete this._triggers[n],this._engine.statesByElement.forEach(function(e,t){delete e[n]}),this._elementListeners.forEach(function(e,t){r._elementListeners.set(t,e.filter(function(e){return e.name!=n}))})},yt.prototype.clearElementCache=function(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);var t=this._engine.playersByElement.get(e);t&&(t.forEach(function(e){return e.destroy()}),this._engine.playersByElement.delete(e))},yt.prototype._signalRemovalForInnerTriggers=function(e,n,t){var r=this;void 0===t&&(t=!1),this._engine.driver.query(e,T,!0).forEach(function(t){if(!t[pt]){var e=r._engine.fetchNamespacesByElement(t);e.size?e.forEach(function(e){return e.triggerLeaveAnimation(t,n,!1,!0)}):r.clearElementCache(t)}})},yt.prototype.triggerLeaveAnimation=function(n,e,t,r){var i=this,o=this._engine.statesByElement.get(n);if(o){var a=[];if(Object.keys(o).forEach(function(e){if(i._triggers[e]){var t=i.trigger(n,e,ft,r);t&&a.push(t)}}),a.length)return this._engine.markElementAsRemoved(this.id,n,!0,e),t&&G(a).onDone(function(){return i._engine.processLeaveNode(n)}),!0}return!1},yt.prototype.prepareLeaveAnimationListeners=function(a){var s=this,e=this._elementListeners.get(a);if(e){var l=new Set;e.forEach(function(e){var t=e.name;if(!l.has(t)){l.add(t);var n=s._triggers[t].fallbackTransition,r=s._engine.statesByElement.get(a)[t]||mt,i=new dt(ft),o=new bt(s.id,t,a);s._engine.totalQueuedPlayers++,s._queue.push({element:a,triggerName:t,transition:n,fromState:r,toState:i,player:o,isFallbackTransition:!0})}})}},yt.prototype.removeNode=function(e,t){var n=this,r=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,t,!0),!this.triggerLeaveAnimation(e,t,!0)){var i=!1;if(r.totalAnimations){var o=r.players.length?r.playersByQueriedElement.get(e):[];if(o&&o.length)i=!0;else for(var a=e;a=a.parentNode;)if(r.statesByElement.get(a)){i=!0;break}}this.prepareLeaveAnimationListeners(e),i?r.markElementAsRemoved(this.id,e,!1,t):(r.afterFlush(function(){return n.clearElementCache(e)}),r.destroyInnerAnimations(e),r._onRemovalComplete(e,t))}},yt.prototype.insertNode=function(e,t){kt(e,this._hostClassName)},yt.prototype.drainQueuedTransitions=function(i){var o=this,a=[];return this._queue.forEach(function(n){var e=n.player;if(!e.destroyed){var r=n.element,t=o._elementListeners.get(r);t&&t.forEach(function(e){if(e.name==n.triggerName){var t=u(r,n.triggerName,n.fromState.value,n.toState.value);t._data=i,s(n.player,e.phase,t,e.callback)}}),e.markedForDestroy?o._engine.afterFlush(function(){e.destroy()}):a.push(n)}}),this._queue=[],a.sort(function(e,t){var n=e.transition.ast.depCount,r=t.transition.ast.depCount;return 0==n||0==r?n-r:o._engine.driver.containsElement(e.element,t.element)?1:-1})},yt.prototype.destroy=function(e){this.players.forEach(function(e){return e.destroy()}),this._signalRemovalForInnerTriggers(this.hostElement,e)},yt.prototype.elementContainsData=function(t){var e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(function(e){return e.element===t})||e},yt);function yt(e,t,n){this.id=e,this.hostElement=t,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName=\"ng-tns-\"+e,kt(t,this._hostClassName)}var gt=(_t.prototype._onRemovalComplete=function(e,t){this.onRemovalComplete(e,t)},Object.defineProperty(_t.prototype,\"queuedPlayers\",{get:function(){var t=[];return this._namespaceList.forEach(function(e){e.players.forEach(function(e){e.queued&&t.push(e)})}),t},enumerable:!0,configurable:!0}),_t.prototype.createNamespace=function(e,t){var n=new vt(e,t,this);return t.parentNode?this._balanceNamespaceList(n,t):(this.newHostElements.set(t,n),this.collectEnterElement(t)),this._namespaceLookup[e]=n},_t.prototype._balanceNamespaceList=function(e,t){var n=this._namespaceList.length-1;if(0<=n){for(var r=!1,i=n;0<=i;i--){var o=this._namespaceList[i];if(this.driver.containsElement(o.hostElement,t)){this._namespaceList.splice(i+1,0,e),r=!0;break}}r||this._namespaceList.splice(0,0,e)}else this._namespaceList.push(e);return this.namespacesByHostElement.set(t,e),e},_t.prototype.register=function(e,t){var n=this._namespaceLookup[e];return n=n||this.createNamespace(e,t)},_t.prototype.registerTrigger=function(e,t,n){var r=this._namespaceLookup[e];r&&r.register(t,n)&&this.totalAnimations++},_t.prototype.destroy=function(t,e){var n=this;if(t){var r=this._fetchNamespace(t);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[t];var e=n._namespaceList.indexOf(r);0<=e&&n._namespaceList.splice(e,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(e)})}},_t.prototype._fetchNamespace=function(e){return this._namespaceLookup[e]},_t.prototype.fetchNamespacesByElement=function(e){var t=new Set,n=this.statesByElement.get(e);if(n)for(var r=Object.keys(n),i=0;i<r.length;i++){var o=n[r[i]].namespaceId;if(o){var a=this._fetchNamespace(o);a&&t.add(a)}}return t},_t.prototype.trigger=function(e,t,n,r){if(xt(t)){var i=this._fetchNamespace(e);if(i)return i.trigger(t,n,r),!0}return!1},_t.prototype.insertNode=function(e,t,n,r){if(xt(t)){var i=t[pt];if(i&&i.setForRemoval){i.setForRemoval=!1,i.setForMove=!0;var o=this.collectedLeaveElements.indexOf(t);0<=o&&this.collectedLeaveElements.splice(o,1)}if(e){var a=this._fetchNamespace(e);a&&a.insertNode(t,n)}r&&this.collectEnterElement(t)}},_t.prototype.collectEnterElement=function(e){this.collectedEnterElements.push(e)},_t.prototype.markElementAsDisabled=function(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),kt(e,at)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),Dt(e,at))},_t.prototype.removeNode=function(e,t,n,r){if(xt(t)){var i=e?this._fetchNamespace(e):null;if(i?i.removeNode(t,r):this.markElementAsRemoved(e,t,!1,r),n){var o=this.namespacesByHostElement.get(t);o&&o.id!==e&&o.removeNode(t,r)}}else this._onRemovalComplete(t,r)},_t.prototype.markElementAsRemoved=function(e,t,n,r){this.collectedLeaveElements.push(t),t[pt]={namespaceId:e,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},_t.prototype.listen=function(e,t,n,r,i){return xt(t)?this._fetchNamespace(e).listen(t,n,r,i):function(){}},_t.prototype._buildInstruction=function(e,t,n,r,i){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,n,r,e.fromState.options,e.toState.options,t,i)},_t.prototype.destroyInnerAnimations=function(e){var t=this,n=this.driver.query(e,T,!0);n.forEach(function(e){return t.destroyActiveAnimationsForElement(e)}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(e,Q,!0)).forEach(function(e){return t.finishActiveQueriedAnimationOnElement(e)})},_t.prototype.destroyActiveAnimationsForElement=function(e){var t=this.playersByElement.get(e);t&&t.forEach(function(e){e.queued?e.markedForDestroy=!0:e.destroy()})},_t.prototype.finishActiveQueriedAnimationOnElement=function(e){var t=this.playersByQueriedElement.get(e);t&&t.forEach(function(e){return e.finish()})},_t.prototype.whenRenderingDone=function(){var t=this;return new Promise(function(e){if(t.players.length)return G(t.players).onDone(function(){return e()});e()})},_t.prototype.processLeaveNode=function(e){var t=this,n=e[pt];if(n&&n.setForRemoval){if(e[pt]=ut,n.namespaceId){this.destroyInnerAnimations(e);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(e)}this._onRemovalComplete(e,n.setForRemoval)}this.driver.matchesElement(e,st)&&this.markElementAsDisabled(e,!1),this.driver.query(e,st,!0).forEach(function(e){t.markElementAsDisabled(e,!1)})},_t.prototype.flush=function(e){var n=this;void 0===e&&(e=-1);var t=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(e,t){return n._balanceNamespaceList(e,t)}),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(var r=0;r<this.collectedEnterElements.length;r++)kt(this.collectedEnterElements[r],\"ng-star-inserted\");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var i=[];try{t=this._flushAnimations(i,e)}finally{for(r=0;r<i.length;r++)i[r]()}}else for(r=0;r<this.collectedLeaveElements.length;r++){var o=this.collectedLeaveElements[r];this.processLeaveNode(o)}if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(function(e){return e()}),this._flushFns=[],this._whenQuietFns.length){var a=this._whenQuietFns;this._whenQuietFns=[],t.length?G(t).onDone(function(){a.forEach(function(e){return e()})}):a.forEach(function(e){return e()})}},_t.prototype.reportError=function(e){throw new Error(\"Unable to process animations due to the following failed trigger transitions\\n \"+e.join(\"\\n\"))},_t.prototype._flushAnimations=function(e,t){var c=this,p=new be,d=[],h=new Map,u=[],f=new Map,m=new Map,v=new Map,y=new Set;this.disabledNodes.forEach(function(e){y.add(e);for(var t=c.driver.query(e,\".ng-animate-queued\",!0),n=0;n<t.length;n++)y.add(t[n])});var g=this.bodyNode,n=Array.from(this.statesByElement.keys()),r=Et(n,this.collectedEnterElements),_=new Map,i=0;r.forEach(function(e,t){var n=K+i++;_.set(t,n),e.forEach(function(e){return kt(e,n)})});for(var o=[],a=new Set,s=new Set,l=0;l<this.collectedLeaveElements.length;l++)(j=(N=this.collectedLeaveElements[l])[pt])&&j.setForRemoval&&(o.push(N),a.add(N),j.hasAnimation?this.driver.query(N,\".ng-star-inserted\",!0).forEach(function(e){return a.add(e)}):s.add(N));var b=new Map,w=Et(n,Array.from(a));w.forEach(function(e,t){var n=Z+i++;b.set(t,n),e.forEach(function(e){return kt(e,n)})}),e.push(function(){r.forEach(function(e,t){var n=_.get(t);e.forEach(function(e){return Dt(e,n)})}),w.forEach(function(e,t){var n=b.get(t);e.forEach(function(e){return Dt(e,n)})}),o.forEach(function(e){c.processLeaveNode(e)})});for(var x=[],C=[],S=this._namespaceList.length-1;0<=S;S--)this._namespaceList[S].drainQueuedTransitions(t).forEach(function(e){var t=e.player,n=e.element;if(x.push(t),c.collectedEnterElements.length){var r=n[pt];if(r&&r.setForMove)return void t.destroy()}var i=!g||!c.driver.containsElement(g,n),o=b.get(n),a=_.get(n),s=c._buildInstruction(e,p,a,o,i);if(s.errors&&s.errors.length)C.push(s);else{if(i)return t.onStart(function(){return $(n,s.fromStyles)}),t.onDestroy(function(){return X(n,s.toStyles)}),void d.push(t);if(e.isFallbackTransition)return t.onStart(function(){return $(n,s.fromStyles)}),t.onDestroy(function(){return X(n,s.toStyles)}),void d.push(t);s.timelines.forEach(function(e){return e.stretchStartingKeyframe=!0}),p.append(n,s.timelines);var l={instruction:s,player:t,element:n};u.push(l),s.queriedElements.forEach(function(e){return Y(f,e,[]).push(t)}),s.preStyleProps.forEach(function(e,t){var n=Object.keys(e);if(n.length){var r=m.get(t);r||m.set(t,r=new Set),n.forEach(function(e){return r.add(e)})}}),s.postStyleProps.forEach(function(e,t){var n=Object.keys(e),r=v.get(t);r||v.set(t,r=new Set),n.forEach(function(e){return r.add(e)})})}});if(C.length){var E=[];C.forEach(function(e){E.push(\"@\"+e.triggerName+\" has failed due to:\\n\"),e.errors.forEach(function(e){return E.push(\"- \"+e+\"\\n\")})}),x.forEach(function(e){return e.destroy()}),this.reportError(E)}var O=new Map,k=new Map;u.forEach(function(e){var t=e.element;p.has(t)&&(k.set(t,t),c._beforeAnimationBuild(e.player.namespaceId,e.instruction,O))}),d.forEach(function(e){var t=e.element;c._getPreviousPlayers(t,!1,e.namespaceId,e.triggerName,null).forEach(function(e){Y(O,t,[]).push(e),e.destroy()})});var D=o.filter(function(e){return It(e,m,v)}),T=new Map;St(T,this.driver,s,v,q.AUTO_STYLE).forEach(function(e){It(e,m,v)&&D.push(e)});var I=new Map;r.forEach(function(e,t){St(I,c.driver,new Set(e),m,q.ɵPRE_STYLE)}),D.forEach(function(e){var t=T.get(e),n=I.get(e);T.set(e,H(H({},t),n))});var P=[],A=[],M={};u.forEach(function(e){var t=e.element,n=e.player,r=e.instruction;if(p.has(t)){if(y.has(t))return n.onDestroy(function(){return X(t,r.toStyles)}),n.disabled=!0,n.overrideTotalTime(r.totalTime),void d.push(n);var i=M;if(1<k.size){for(var o=t,a=[];o=o.parentNode;){var s=k.get(o);if(s){i=s;break}a.push(o)}a.forEach(function(e){return k.set(e,i)})}var l=c._buildAnimation(n.namespaceId,r,O,h,I,T);if(n.setRealPlayer(l),i===M)P.push(n);else{var u=c.playersByElement.get(i);u&&u.length&&(n.parentPlayer=G(u)),d.push(n)}}else $(t,r.fromStyles),n.onDestroy(function(){return X(t,r.toStyles)}),A.push(n),y.has(t)&&d.push(n)}),A.forEach(function(e){var t=h.get(e.element);if(t&&t.length){var n=G(t);e.setRealPlayer(n)}}),d.forEach(function(e){e.parentPlayer?e.syncPlayerEvents(e.parentPlayer):e.destroy()});for(var R=0;R<o.length;R++){var N,j=(N=o[R])[pt];if(Dt(N,Z),!j||!j.hasAnimation){var F=[];if(f.size){var L=f.get(N);L&&L.length&&F.push.apply(F,W(L));for(var V=this.driver.query(N,Q,!0),B=0;B<V.length;B++){var U=f.get(V[B]);U&&U.length&&F.push.apply(F,W(U))}}var z=F.filter(function(e){return!e.destroyed});z.length?Tt(this,N,z):this.processLeaveNode(N)}}return o.length=0,P.forEach(function(t){c.players.push(t),t.onDone(function(){t.destroy();var e=c.players.indexOf(t);c.players.splice(e,1)}),t.play()}),P},_t.prototype.elementContainsData=function(e,t){var n=!1,r=t[pt];return r&&r.setForRemoval&&(n=!0),this.playersByElement.has(t)&&(n=!0),this.playersByQueriedElement.has(t)&&(n=!0),this.statesByElement.has(t)&&(n=!0),this._fetchNamespace(e).elementContainsData(t)||n},_t.prototype.afterFlush=function(e){this._flushFns.push(e)},_t.prototype.afterFlushAnimationsDone=function(e){this._whenQuietFns.push(e)},_t.prototype._getPreviousPlayers=function(e,t,n,r,i){var o=[];if(t){var a=this.playersByQueriedElement.get(e);a&&(o=a)}else{var s=this.playersByElement.get(e);if(s){var l=!i||i==ft;s.forEach(function(e){e.queued||!l&&e.triggerName!=r||o.push(e)})}}return(n||r)&&(o=o.filter(function(e){return!(n&&n!=e.namespaceId||r&&r!=e.triggerName)})),o},_t.prototype._beforeAnimationBuild=function(e,i,o){function t(e){var t=e.element,n=t!==s,r=Y(o,t,[]);c._getPreviousPlayers(t,n,l,u,i.toState).forEach(function(e){var t=e.getRealPlayer();t.beforeDestroy&&t.beforeDestroy(),e.destroy(),r.push(e)})}var n,r,a=i.triggerName,s=i.element,l=i.isRemovalTransition?void 0:e,u=i.isRemovalTransition?void 0:a,c=this;try{for(var p=h(i.timelines),d=p.next();!d.done;d=p.next())t(d.value)}catch(e){n={error:e}}finally{try{d&&!d.done&&(r=p.return)&&r.call(p)}finally{if(n)throw n.error}}$(s,i.fromStyles)},_t.prototype._buildAnimation=function(c,e,p,d,h,f){var m=this,v=e.triggerName,y=e.element,g=[],_=new Set,b=new Set,t=e.timelines.map(function(e){var n=e.element;_.add(n);var t=n[pt];if(t&&t.removedBeforeQueried)return new q.NoopAnimationPlayer(e.duration,e.delay);var r=n!==y,i=function(e){var t=[];return function e(t,n){for(var r=0;r<t.length;r++){var i=t[r];i instanceof q.ɵAnimationGroupPlayer?e(i.players,n):n.push(i)}}(e,t),t}((p.get(n)||lt).map(function(e){return e.getRealPlayer()})).filter(function(e){var t=e;return!!t.element&&t.element===n}),o=h.get(n),a=f.get(n),s=w(m.driver,m._normalizer,0,e.keyframes,o,a),l=m._buildPlayer(e,s,i);if(e.subTimeline&&d&&b.add(n),r){var u=new bt(c,v,n);u.setRealPlayer(l),g.push(u)}return l});g.forEach(function(e){Y(m.playersByQueriedElement,e.element,[]).push(e),e.onDone(function(){return function(e,t,n){var r;if(e instanceof Map){if(r=e.get(t)){if(r.length){var i=r.indexOf(n);r.splice(i,1)}0==r.length&&e.delete(t)}}else(r=e[t])&&(r.length&&(i=r.indexOf(n),r.splice(i,1)),0==r.length&&delete e[t]);return r}(m.playersByQueriedElement,e.element,e)})}),_.forEach(function(e){return kt(e,I)});var n=G(t);return n.onDestroy(function(){_.forEach(function(e){return Dt(e,I)}),X(y,e.toStyles)}),b.forEach(function(e){Y(d,e,[]).push(n)}),n},_t.prototype._buildPlayer=function(e,t,n){return 0<t.length?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,n):new q.NoopAnimationPlayer(e.duration,e.delay)},_t);function _t(e,t,n){this.bodyNode=e,this.driver=t,this._normalizer=n,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.onRemovalComplete=function(e,t){}}var bt=(wt.prototype.setRealPlayer=function(n){var e=this;this._containsRealPlayer||(this._player=n,Object.keys(this._queuedCallbacks).forEach(function(t){e._queuedCallbacks[t].forEach(function(e){return s(n,t,void 0,e)})}),this._queuedCallbacks={},this._containsRealPlayer=!0,this.overrideTotalTime(n.totalTime),this.queued=!1)},wt.prototype.getRealPlayer=function(){return this._player},wt.prototype.overrideTotalTime=function(e){this.totalTime=e},wt.prototype.syncPlayerEvents=function(e){var t=this,n=this._player;n.triggerCallback&&e.onStart(function(){return n.triggerCallback(\"start\")}),e.onDone(function(){return t.finish()}),e.onDestroy(function(){return t.destroy()})},wt.prototype._queueEvent=function(e,t){Y(this._queuedCallbacks,e,[]).push(t)},wt.prototype.onDone=function(e){this.queued&&this._queueEvent(\"done\",e),this._player.onDone(e)},wt.prototype.onStart=function(e){this.queued&&this._queueEvent(\"start\",e),this._player.onStart(e)},wt.prototype.onDestroy=function(e){this.queued&&this._queueEvent(\"destroy\",e),this._player.onDestroy(e)},wt.prototype.init=function(){this._player.init()},wt.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},wt.prototype.play=function(){this.queued||this._player.play()},wt.prototype.pause=function(){this.queued||this._player.pause()},wt.prototype.restart=function(){this.queued||this._player.restart()},wt.prototype.finish=function(){this._player.finish()},wt.prototype.destroy=function(){this.destroyed=!0,this._player.destroy()},wt.prototype.reset=function(){this.queued||this._player.reset()},wt.prototype.setPosition=function(e){this.queued||this._player.setPosition(e)},wt.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},wt.prototype.triggerCallback=function(e){var t=this._player;t.triggerCallback&&t.triggerCallback(e)},wt);function wt(e,t,n){this.namespaceId=e,this.triggerName=t,this.element=n,this._player=new q.NoopAnimationPlayer,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}function xt(e){return e&&1===e.nodeType}function Ct(e,t){var n=e.style.display;return e.style.display=null!=t?t:\"none\",n}function St(t,i,e,n,o){var r=[];e.forEach(function(e){return r.push(Ct(e))});var a=[];n.forEach(function(e,n){var r={};e.forEach(function(e){var t=r[e]=i.computeStyle(n,e,o);t&&0!=t.length||(n[pt]=ct,a.push(n))}),t.set(n,r)});var s=0;return e.forEach(function(e){return Ct(e,r[s++])}),a}function Et(e,t){var i=new Map;if(e.forEach(function(e){return i.set(e,[])}),0==t.length)return i;var o=1,a=new Set(t),s=new Map;return t.forEach(function(e){var t=function e(t){if(!t)return o;var n=s.get(t);if(n)return n;var r=t.parentNode;return n=i.has(r)?r:a.has(r)?o:e(r),s.set(t,n),n}(e);t!==o&&i.get(t).push(e)}),i}var Ot=\"$$classes\";function kt(e,t){if(e.classList)e.classList.add(t);else{var n=e[Ot];(n=n||(e[Ot]={}))[t]=!0}}function Dt(e,t){if(e.classList)e.classList.remove(t);else{var n=e[Ot];n&&delete n[t]}}function Tt(e,t,n){G(n).onDone(function(){return e.processLeaveNode(t)})}function It(e,t,n){var r=n.get(e);if(!r)return!1;var i=t.get(e);return i?r.forEach(function(e){return i.add(e)}):t.set(e,r),n.delete(e),!0}var Pt=(At.prototype.registerTrigger=function(e,t,n,r,i){var o=e+\"-\"+r,a=this._triggerCache[o];if(!a){var s=[],l=de(this._driver,i,s);if(s.length)throw new Error('The animation trigger \"'+r+'\" has failed to build due to the following errors:\\n - '+s.join(\"\\n - \"));a=function(e,t){return new Je(e,t)}(r,l),this._triggerCache[o]=a}this._transitionEngine.registerTrigger(t,r,a)},At.prototype.register=function(e,t){this._transitionEngine.register(e,t)},At.prototype.destroy=function(e,t){this._transitionEngine.destroy(e,t)},At.prototype.onInsert=function(e,t,n,r){this._transitionEngine.insertNode(e,t,n,r)},At.prototype.onRemove=function(e,t,n,r){this._transitionEngine.removeNode(e,t,r||!1,n)},At.prototype.disableAnimations=function(e,t){this._transitionEngine.markElementAsDisabled(e,t)},At.prototype.process=function(e,t,n,r){if(\"@\"==n.charAt(0)){var i=l(c(n),2),o=i[0],a=i[1],s=r;this._timelineEngine.command(o,t,a,s)}else this._transitionEngine.trigger(e,t,n,r)},At.prototype.listen=function(e,t,n,r,i){if(\"@\"!=n.charAt(0))return this._transitionEngine.listen(e,t,n,r,i);var o=l(c(n),2),a=o[0],s=o[1];return this._timelineEngine.listen(a,t,s,i)},At.prototype.flush=function(e){void 0===e&&(e=-1),this._transitionEngine.flush(e)},Object.defineProperty(At.prototype,\"players\",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),At.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},At);function At(e,t,n){var r=this;this.bodyNode=e,this._driver=t,this._triggerCache={},this.onRemovalComplete=function(e,t){},this._transitionEngine=new gt(e,t,n),this._timelineEngine=new rt(e,t,n),this._transitionEngine.onRemovalComplete=function(e,t){return r.onRemovalComplete(e,t)}}function Mt(e,t){var n=null,r=null;return Array.isArray(t)&&t.length?(n=jt(t[0]),1<t.length&&(r=jt(t[t.length-1]))):t&&(n=jt(t)),n||r?new Rt(e,n,r):null}var Rt=(Nt.prototype.start=function(){this._state<1&&(this._startStyles&&X(this._element,this._startStyles,this._initialStyles),this._state=1)},Nt.prototype.finish=function(){this.start(),this._state<2&&(X(this._element,this._initialStyles),this._endStyles&&(X(this._element,this._endStyles),this._endStyles=null),this._state=1)},Nt.prototype.destroy=function(){this.finish(),this._state<3&&(Nt.initialStylesByElement.delete(this._element),this._startStyles&&($(this._element,this._startStyles),this._endStyles=null),this._endStyles&&($(this._element,this._endStyles),this._endStyles=null),X(this._element,this._initialStyles),this._state=3)},Nt.initialStylesByElement=new WeakMap,Nt);function Nt(e,t,n){this._element=e,this._startStyles=t,this._endStyles=n,this._state=0;var r=Nt.initialStylesByElement.get(e);r||Nt.initialStylesByElement.set(e,r={}),this._initialStyles=r}function jt(e){for(var t,n=null,r=Object.keys(e),i=0;i<r.length;i++){var o=r[i];\"display\"!==(t=o)&&\"position\"!==t||((n=n||{})[o]=e[o])}return n}var Ft=\"animation\",Lt=\"animationend\",Vt=(Bt.prototype.apply=function(){!function(e,t){var n=Gt(e,\"\").trim();n.length&&(function(e,t){for(var n=0,r=0;r<e.length;r++)e.charAt(r)===t&&n++}(n,\",\"),t=n+\", \"+t),Wt(e,\"\",t)}(this._element,this._duration+\"ms \"+this._easing+\" \"+this._delay+\"ms 1 normal \"+this._fillMode+\" \"+this._name),Ht(this._element,this._eventFn,!1),this._startTime=Date.now()},Bt.prototype.pause=function(){Ut(this._element,this._name,\"paused\")},Bt.prototype.resume=function(){Ut(this._element,this._name,\"running\")},Bt.prototype.setPosition=function(e){var t=zt(this._element,this._name);this._position=e*this._duration,Wt(this._element,\"Delay\",\"-\"+this._position+\"ms\",t)},Bt.prototype.getPosition=function(){return this._position},Bt.prototype._handleCallback=function(e){var t=e._ngTestManualTimestamp||Date.now(),n=1e3*parseFloat(e.elapsedTime.toFixed(3));e.animationName==this._name&&Math.max(t-this._startTime,0)>=this._delay&&n>=this._duration&&this.finish()},Bt.prototype.finish=function(){this._finished||(this._finished=!0,this._onDoneFn(),Ht(this._element,this._eventFn,!0))},Bt.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.finish(),function(e,t){var n=Gt(e,\"\").split(\",\"),r=qt(n,t);if(0<=r){n.splice(r,1);var i=n.join(\",\");Wt(e,\"\",i)}}(this._element,this._name))},Bt);function Bt(e,t,n,r,i,o,a){var s=this;this._element=e,this._name=t,this._duration=n,this._delay=r,this._easing=i,this._fillMode=o,this._onDoneFn=a,this._finished=!1,this._destroyed=!1,this._startTime=0,this._position=0,this._eventFn=function(e){return s._handleCallback(e)}}function Ut(e,t,n){Wt(e,\"PlayState\",n,zt(e,t))}function zt(e,t){var n=Gt(e,\"\");return 0<n.indexOf(\",\")?qt(n.split(\",\"),t):qt([n],t)}function qt(e,t){for(var n=0;n<e.length;n++)if(0<=e[n].indexOf(t))return n;return-1}function Ht(e,t,n){n?e.removeEventListener(Lt,t):e.addEventListener(Lt,t)}function Wt(e,t,n,r){var i=Ft+t;if(null!=r){var o=e.style[i];if(o.length){var a=o.split(\",\");a[r]=n,n=a.join(\",\")}}e.style[i]=n}function Gt(e,t){return e.style[Ft+t]}var Yt=(Kt.prototype.onStart=function(e){this._onStartFns.push(e)},Kt.prototype.onDone=function(e){this._onDoneFns.push(e)},Kt.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},Kt.prototype.destroy=function(){this.init(),4<=this._state||(this._state=4,this._styler.destroy(),this._flushStartFns(),this._flushDoneFns(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},Kt.prototype._flushDoneFns=function(){this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[]},Kt.prototype._flushStartFns=function(){this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[]},Kt.prototype.finish=function(){this.init(),3<=this._state||(this._state=3,this._styler.finish(),this._flushStartFns(),this._specialStyles&&this._specialStyles.finish(),this._flushDoneFns())},Kt.prototype.setPosition=function(e){this._styler.setPosition(e)},Kt.prototype.getPosition=function(){return this._styler.getPosition()},Kt.prototype.hasStarted=function(){return 2<=this._state},Kt.prototype.init=function(){1<=this._state||(this._state=1,this.element,this._styler.apply(),this._delay&&this._styler.pause())},Kt.prototype.play=function(){this.init(),this.hasStarted()||(this._flushStartFns(),this._state=2,this._specialStyles&&this._specialStyles.start()),this._styler.resume()},Kt.prototype.pause=function(){this.init(),this._styler.pause()},Kt.prototype.restart=function(){this.reset(),this.play()},Kt.prototype.reset=function(){this._styler.destroy(),this._buildStyler(),this._styler.apply()},Kt.prototype._buildStyler=function(){var e=this;this._styler=new Vt(this.element,this.animationName,this._duration,this._delay,this.easing,\"forwards\",function(){return e.finish()})},Kt.prototype.triggerCallback=function(e){var t=\"start\"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},Kt.prototype.beforeDestroy=function(){var t=this;this.init();var n={};if(this.hasStarted()){var r=3<=this._state;Object.keys(this._finalStyles).forEach(function(e){\"offset\"!=e&&(n[e]=r?t._finalStyles[e]:oe(t.element,e))})}this.currentSnapshot=n},Kt);function Kt(e,t,n,r,i,o,a,s){this.element=e,this.keyframes=t,this.animationName=n,this._duration=r,this._delay=i,this._finalStyles=a,this._specialStyles=s,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this.currentSnapshot={},this._state=0,this.easing=o||\"linear\",this.totalTime=r+i,this._buildStyler()}var Zt,Qt=(n(Xt,Zt=q.NoopAnimationPlayer),Xt.prototype.init=function(){var t=this;!this.__initialized&&this._startingStyles&&(this.__initialized=!0,Object.keys(this._styles).forEach(function(e){t._startingStyles[e]=t.element.style[e]}),Zt.prototype.init.call(this))},Xt.prototype.play=function(){var t=this;this._startingStyles&&(this.init(),Object.keys(this._styles).forEach(function(e){return t.element.style.setProperty(e,t._styles[e])}),Zt.prototype.play.call(this))},Xt.prototype.destroy=function(){var n=this;this._startingStyles&&(Object.keys(this._startingStyles).forEach(function(e){var t=n._startingStyles[e];t?n.element.style.setProperty(e,t):n.element.style.removeProperty(e)}),this._startingStyles=null,Zt.prototype.destroy.call(this))},Xt);function Xt(e,t){var n=Zt.call(this)||this;return n.element=e,n._startingStyles={},n.__initialized=!1,n._styles=x(t),n}var $t=(Jt.prototype.validateStyleProperty=function(e){return y(e)},Jt.prototype.matchesElement=function(e,t){return g(e,t)},Jt.prototype.containsElement=function(e,t){return _(e,t)},Jt.prototype.query=function(e,t,n){return b(e,t,n)},Jt.prototype.computeStyle=function(e,t,n){return window.getComputedStyle(e)[t]},Jt.prototype.buildKeyframeElement=function(e,t,n){n=n.map(function(e){return x(e)});var r=\"@keyframes \"+t+\" {\\n\",i=\"\";n.forEach(function(n){i=\" \";var e=parseFloat(n.offset);r+=\"\"+i+100*e+\"% {\\n\",i+=\" \",Object.keys(n).forEach(function(e){var t=n[e];switch(e){case\"offset\":return;case\"easing\":return void(t&&(r+=i+\"animation-timing-function: \"+t+\";\\n\"));default:return void(r+=\"\"+i+e+\": \"+t+\";\\n\")}}),r+=i+\"}\\n\"}),r+=\"}\\n\";var o=document.createElement(\"style\");return o.innerHTML=r,o},Jt.prototype.animate=function(e,t,n,r,i,o,a){void 0===o&&(o=[]),a&&this._notifyFaultyScrubber();var s=o.filter(function(e){return e instanceof Yt}),l={};ne(n,r)&&s.forEach(function(e){var t=e.currentSnapshot;Object.keys(t).forEach(function(e){return l[e]=t[e]})});var u=function(e){var n={};return e&&(Array.isArray(e)?e:[e]).forEach(function(t){Object.keys(t).forEach(function(e){\"offset\"!=e&&\"easing\"!=e&&(n[e]=t[e])})}),n}(t=re(e,t,l));if(0==n)return new Qt(e,u);var c=\"gen_css_kf_\"+this._count++,p=this.buildKeyframeElement(e,c,t);document.querySelector(\"head\").appendChild(p);var d=Mt(e,t),h=new Yt(e,t,c,n,r,i,u,d);return h.onDestroy(function(){return function(e){e.parentNode.removeChild(e)}(p)}),h},Jt.prototype._notifyFaultyScrubber=function(){this._warningIssued||(console.warn(\"@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\\n\",\"  visit http://bit.ly/IWukam to learn more about using the web-animation-js polyfill.\"),this._warningIssued=!0)},Jt);function Jt(){this._count=0,this._head=document.querySelector(\"head\"),this._warningIssued=!1}var en=(tn.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},tn.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},tn.prototype._buildPlayer=function(){var e=this;if(!this._initialized){this._initialized=!0;var t=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:{},this.domPlayer.addEventListener(\"finish\",function(){return e._onFinish()})}},tn.prototype._preparePlayerBeforeStart=function(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()},tn.prototype._triggerWebAnimation=function(e,t,n){return e.animate(t,n)},tn.prototype.onStart=function(e){this._onStartFns.push(e)},tn.prototype.onDone=function(e){this._onDoneFns.push(e)},tn.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},tn.prototype.play=function(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()},tn.prototype.pause=function(){this.init(),this.domPlayer.pause()},tn.prototype.finish=function(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()},tn.prototype.reset=function(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1},tn.prototype._resetDomPlayerState=function(){this.domPlayer&&this.domPlayer.cancel()},tn.prototype.restart=function(){this.reset(),this.play()},tn.prototype.hasStarted=function(){return this._started},tn.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},tn.prototype.setPosition=function(e){this.domPlayer.currentTime=e*this.time},tn.prototype.getPosition=function(){return this.domPlayer.currentTime/this.time},Object.defineProperty(tn.prototype,\"totalTime\",{get:function(){return this._delay+this._duration},enumerable:!0,configurable:!0}),tn.prototype.beforeDestroy=function(){var t=this,n={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(function(e){\"offset\"!=e&&(n[e]=t._finished?t._finalKeyframe[e]:oe(t.element,e))}),this.currentSnapshot=n},tn.prototype.triggerCallback=function(e){var t=\"start\"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},tn);function tn(e,t,n,r){this.element=e,this.keyframes=t,this.options=n,this._specialStyles=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay}var nn=(rn.prototype.validateStyleProperty=function(e){return y(e)},rn.prototype.matchesElement=function(e,t){return g(e,t)},rn.prototype.containsElement=function(e,t){return _(e,t)},rn.prototype.query=function(e,t,n){return b(e,t,n)},rn.prototype.computeStyle=function(e,t,n){return window.getComputedStyle(e)[t]},rn.prototype.overrideWebAnimationsSupport=function(e){this._isNativeImpl=e},rn.prototype.animate=function(e,t,n,r,i,o,a){if(void 0===o&&(o=[]),!a&&!this._isNativeImpl)return this._cssKeyframesDriver.animate(e,t,n,r,i,o);var s={duration:n,delay:r,fill:0==r?\"both\":\"forwards\"};i&&(s.easing=i);var l={},u=o.filter(function(e){return e instanceof en});ne(n,r)&&u.forEach(function(e){var t=e.currentSnapshot;Object.keys(t).forEach(function(e){return l[e]=t[e]})});var c=Mt(e,t=re(e,t=t.map(function(e){return j(e,!1)}),l));return new en(e,t,s,c)},rn);function rn(){this._isNativeImpl=/\\{\\s*\\[native\\s+code\\]\\s*\\}/.test(on().toString()),this._cssKeyframesDriver=new $t}function on(){return\"undefined\"!=typeof window&&void 0!==window.document&&Element.prototype.animate||{}}e.ɵangular_packages_animations_browser_browser_a=Rt,e.AnimationDriver=E,e.ɵAnimationDriver=E,e.ɵAnimation=je,e.ɵAnimationStyleNormalizer=Le,e.ɵNoopAnimationStyleNormalizer=Ve,e.ɵWebAnimationsStyleNormalizer=ze,e.ɵNoopAnimationDriver=C,e.ɵAnimationEngine=Pt,e.ɵCssKeyframesDriver=$t,e.ɵCssKeyframesPlayer=Yt,e.ɵcontainsElement=_,e.ɵinvokeQuery=b,e.ɵmatchesElement=g,e.ɵvalidateStyleProperty=y,e.ɵWebAnimationsDriver=nn,e.ɵsupportsWebAnimations=function(){return\"function\"==typeof on()},e.ɵWebAnimationsPlayer=en,e.ɵallowPreviousPlayerStylesMerge=ne,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/platform-browser\"),require(\"@angular/animations\"),require(\"@angular/animations/browser\"),require(\"@angular/common\")):System.registerDynamic(\"npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js\",[\"@angular/core\",\"@angular/platform-browser\",\"@angular/animations\",\"@angular/animations/browser\",\"@angular/common\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/platform-browser\"),e(\"@angular/animations\"),e(\"@angular/animations/browser\"),e(\"@angular/common\"))})}(0,function(e,i,t,r,n,o){\"use strict\";var a=function(e,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function s(e,t){function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function l(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function u(n,r){return function(e,t){r(e,t,n)}}function c(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function p(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function d(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(p(arguments[t]));return e}var h,f=(s(m,h=r.AnimationBuilder),m.prototype.build=function(e){var t=this._nextAnimationId.toString();this._nextAnimationId++;var n=Array.isArray(e)?r.sequence(e):e;return w(this._renderer,null,t,\"register\",[n]),new y(t,this._renderer)},m=l([i.Injectable(),u(1,i.Inject(o.DOCUMENT)),c(\"design:paramtypes\",[i.RendererFactory2,Object])],m));function m(e,t){var n=h.call(this)||this;n._nextAnimationId=0;var r={id:\"0\",encapsulation:i.ViewEncapsulation.None,styles:[],data:{animation:[]}};return n._renderer=e.createRenderer(t.body,r),n}var v,y=(s(g,v=r.AnimationFactory),g.prototype.create=function(e,t){return new _(this._id,e,t||{},this._renderer)},g);function g(e,t){var n=v.call(this)||this;return n._id=e,n._renderer=t,n}var _=(b.prototype._listen=function(e,t){return this._renderer.listen(this.element,\"@@\"+this.id+\":\"+e,t)},b.prototype._command=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return w(this._renderer,this.element,this.id,e,t)},b.prototype.onDone=function(e){this._listen(\"done\",e)},b.prototype.onStart=function(e){this._listen(\"start\",e)},b.prototype.onDestroy=function(e){this._listen(\"destroy\",e)},b.prototype.init=function(){this._command(\"init\")},b.prototype.hasStarted=function(){return this._started},b.prototype.play=function(){this._command(\"play\"),this._started=!0},b.prototype.pause=function(){this._command(\"pause\")},b.prototype.restart=function(){this._command(\"restart\")},b.prototype.finish=function(){this._command(\"finish\")},b.prototype.destroy=function(){this._command(\"destroy\")},b.prototype.reset=function(){this._command(\"reset\")},b.prototype.setPosition=function(e){this._command(\"setPosition\",e)},b.prototype.getPosition=function(){return 0},b);function b(e,t,n,r){this.id=e,this.element=t,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command(\"create\",n)}function w(e,t,n,r,i){return e.setProperty(t,\"@@\"+n+\":\"+r,i)}var x=\"@.disabled\",C=(S.prototype.createRenderer=function(t,e){var n=this,r=this.delegate.createRenderer(t,e);if(!(t&&e&&e.data&&e.data.animation)){var i=this._rendererCache.get(r);return i||(i=new E(\"\",r,this.engine),this._rendererCache.set(r,i)),i}var o=e.id,a=e.id+\"-\"+this._currentId;this._currentId++,this.engine.register(a,t);var s=function(e){Array.isArray(e)?e.forEach(s):n.engine.registerTrigger(o,a,t,e.name,e)};return e.data.animation.forEach(s),new D(this,a,r,this.engine)},S.prototype.begin=function(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()},S.prototype._scheduleCountTask=function(){var e=this;this.promise.then(function(){e._microtaskId++})},S.prototype.scheduleListenerCallback=function(e,t,n){var r=this;0<=e&&e<this._microtaskId?this._zone.run(function(){return t(n)}):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(function(){r._zone.run(function(){r._animationCallbacksBuffer.forEach(function(e){var t=p(e,2);(0,t[0])(t[1])}),r._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([t,n]))},S.prototype.end=function(){var e=this;this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(function(){e._scheduleCountTask(),e.engine.flush(e._microtaskId)}),this.delegate.end&&this.delegate.end()},S.prototype.whenRenderingDone=function(){return this.engine.whenRenderingDone()},S=l([i.Injectable(),c(\"design:paramtypes\",[i.RendererFactory2,n.ɵAnimationEngine,i.NgZone])],S));function S(e,t,n){this.delegate=e,this.engine=t,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),t.onRemovalComplete=function(e,t){t&&t.parentNode(e)&&t.removeChild(e.parentNode,e)}}var E=(Object.defineProperty(O.prototype,\"data\",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),O.prototype.destroy=function(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()},O.prototype.createElement=function(e,t){return this.delegate.createElement(e,t)},O.prototype.createComment=function(e){return this.delegate.createComment(e)},O.prototype.createText=function(e){return this.delegate.createText(e)},O.prototype.appendChild=function(e,t){this.delegate.appendChild(e,t),this.engine.onInsert(this.namespaceId,t,e,!1)},O.prototype.insertBefore=function(e,t,n){this.delegate.insertBefore(e,t,n),this.engine.onInsert(this.namespaceId,t,e,!0)},O.prototype.removeChild=function(e,t,n){this.engine.onRemove(this.namespaceId,t,this.delegate,n)},O.prototype.selectRootElement=function(e,t){return this.delegate.selectRootElement(e,t)},O.prototype.parentNode=function(e){return this.delegate.parentNode(e)},O.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},O.prototype.setAttribute=function(e,t,n,r){this.delegate.setAttribute(e,t,n,r)},O.prototype.removeAttribute=function(e,t,n){this.delegate.removeAttribute(e,t,n)},O.prototype.addClass=function(e,t){this.delegate.addClass(e,t)},O.prototype.removeClass=function(e,t){this.delegate.removeClass(e,t)},O.prototype.setStyle=function(e,t,n,r){this.delegate.setStyle(e,t,n,r)},O.prototype.removeStyle=function(e,t,n){this.delegate.removeStyle(e,t,n)},O.prototype.setProperty=function(e,t,n){\"@\"==t.charAt(0)&&t==x?this.disableAnimations(e,!!n):this.delegate.setProperty(e,t,n)},O.prototype.setValue=function(e,t){this.delegate.setValue(e,t)},O.prototype.listen=function(e,t,n){return this.delegate.listen(e,t,n)},O.prototype.disableAnimations=function(e,t){this.engine.disableAnimations(e,t)},O);function O(e,t,n){this.namespaceId=e,this.delegate=t,this.engine=n,this.destroyNode=this.delegate.destroyNode?function(e){return t.destroyNode(e)}:null}var k,D=(s(T,k=E),T.prototype.setProperty=function(e,t,n){\"@\"==t.charAt(0)?\".\"==t.charAt(1)&&t==x?(n=void 0===n||!!n,this.disableAnimations(e,n)):this.engine.process(this.namespaceId,e,t.substr(1),n):this.delegate.setProperty(e,t,n)},T.prototype.listen=function(e,t,n){var r,i=this;if(\"@\"!=t.charAt(0))return this.delegate.listen(e,t,n);var o=function(e){switch(e){case\"body\":return document.body;case\"document\":return document;case\"window\":return window;default:return e}}(e),a=t.substr(1),s=\"\";return\"@\"!=a.charAt(0)&&(a=(r=p(function(e){var t=e.indexOf(\".\"),n=e.substring(0,t),r=e.substr(t+1);return[n,r]}(a),2))[0],s=r[1]),this.engine.listen(this.namespaceId,o,a,s,function(e){var t=e._data||-1;i.factory.scheduleListenerCallback(t,n,e)})},T);function T(e,t,n,r){var i=k.call(this,t,n,r)||this;return i.factory=e,i.namespaceId=t,i}var I,P=(s(A,I=n.ɵAnimationEngine),A=l([i.Injectable(),u(0,i.Inject(o.DOCUMENT)),c(\"design:paramtypes\",[Object,n.AnimationDriver,n.ɵAnimationStyleNormalizer])],A));function A(e,t,n){return I.call(this,e.body,t,n)||this}function M(){return n.ɵsupportsWebAnimations()?new n.ɵWebAnimationsDriver:new n.ɵCssKeyframesDriver}function R(){return new n.ɵWebAnimationsStyleNormalizer}function N(e,t,n){return new C(e,t,n)}var j=new i.InjectionToken(\"AnimationModuleType\"),F=[{provide:r.AnimationBuilder,useClass:f},{provide:n.ɵAnimationStyleNormalizer,useFactory:R},{provide:n.ɵAnimationEngine,useClass:P},{provide:i.RendererFactory2,useFactory:N,deps:[t.ɵDomRendererFactory2,n.ɵAnimationEngine,i.NgZone]}],L=d([{provide:n.AnimationDriver,useFactory:M},{provide:j,useValue:\"BrowserAnimations\"}],F),V=d([{provide:n.AnimationDriver,useClass:n.ɵNoopAnimationDriver},{provide:j,useValue:\"NoopAnimations\"}],F),B=U=l([i.NgModule({exports:[t.BrowserModule],providers:L})],U);function U(){}var z=q=l([i.NgModule({exports:[t.BrowserModule],providers:V})],q);function q(){}e.ɵangular_packages_platform_browser_animations_animations_f=E,e.ɵangular_packages_platform_browser_animations_animations_d=L,e.ɵangular_packages_platform_browser_animations_animations_e=V,e.ɵangular_packages_platform_browser_animations_animations_b=R,e.ɵangular_packages_platform_browser_animations_animations_c=N,e.ɵangular_packages_platform_browser_animations_animations_a=M,e.BrowserAnimationsModule=B,e.NoopAnimationsModule=z,e.ANIMATION_MODULE_TYPE=j,e.ɵBrowserAnimationBuilder=f,e.ɵBrowserAnimationFactory=y,e.ɵAnimationRenderer=D,e.ɵAnimationRendererFactory=C,e.ɵInjectableAnimationEngine=P,Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-keycodes.umd.js\",[],!1,function(e,t,n){return r.call(t,t)})}(0,function(e){\"use strict\";e.MAC_ENTER=3,e.BACKSPACE=8,e.TAB=9,e.NUM_CENTER=12,e.ENTER=13,e.SHIFT=16,e.CONTROL=17,e.ALT=18,e.PAUSE=19,e.CAPS_LOCK=20,e.ESCAPE=27,e.SPACE=32,e.PAGE_UP=33,e.PAGE_DOWN=34,e.END=35,e.HOME=36,e.LEFT_ARROW=37,e.UP_ARROW=38,e.RIGHT_ARROW=39,e.DOWN_ARROW=40,e.PLUS_SIGN=43,e.PRINT_SCREEN=44,e.INSERT=45,e.DELETE=46,e.ZERO=48,e.ONE=49,e.TWO=50,e.THREE=51,e.FOUR=52,e.FIVE=53,e.SIX=54,e.SEVEN=55,e.EIGHT=56,e.NINE=57,e.FF_SEMICOLON=59,e.FF_EQUALS=61,e.QUESTION_MARK=63,e.AT_SIGN=64,e.A=65,e.B=66,e.C=67,e.D=68,e.E=69,e.F=70,e.G=71,e.H=72,e.I=73,e.J=74,e.K=75,e.L=76,e.M=77,e.N=78,e.O=79,e.P=80,e.Q=81,e.R=82,e.S=83,e.T=84,e.U=85,e.V=86,e.W=87,e.X=88,e.Y=89,e.Z=90,e.META=91,e.MAC_WK_CMD_LEFT=91,e.MAC_WK_CMD_RIGHT=93,e.CONTEXT_MENU=93,e.NUMPAD_ZERO=96,e.NUMPAD_ONE=97,e.NUMPAD_TWO=98,e.NUMPAD_THREE=99,e.NUMPAD_FOUR=100,e.NUMPAD_FIVE=101,e.NUMPAD_SIX=102,e.NUMPAD_SEVEN=103,e.NUMPAD_EIGHT=104,e.NUMPAD_NINE=105,e.NUMPAD_MULTIPLY=106,e.NUMPAD_PLUS=107,e.NUMPAD_MINUS=109,e.NUMPAD_PERIOD=110,e.NUMPAD_DIVIDE=111,e.F1=112,e.F2=113,e.F3=114,e.F4=115,e.F5=116,e.F6=117,e.F7=118,e.F8=119,e.F9=120,e.F10=121,e.F11=122,e.F12=123,e.NUM_LOCK=144,e.SCROLL_LOCK=145,e.FIRST_MEDIA=166,e.FF_MINUS=173,e.MUTE=173,e.VOLUME_DOWN=174,e.VOLUME_UP=175,e.FF_MUTE=181,e.FF_VOLUME_DOWN=182,e.LAST_MEDIA=183,e.FF_VOLUME_UP=183,e.SEMICOLON=186,e.EQUALS=187,e.COMMA=188,e.DASH=189,e.SLASH=191,e.APOSTROPHE=192,e.TILDE=192,e.OPEN_SQUARE_BRACKET=219,e.BACKSLASH=220,e.CLOSE_SQUARE_BRACKET=221,e.SINGLE_QUOTE=222,e.MAC_META=224,e.hasModifierKey=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.length?e.some(function(e){return t[e]}):t.altKey||t.shiftKey||t.ctrlKey||t.metaKey},Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\"),require(\"@angular/cdk/bidi\"),require(\"@angular/cdk\"),require(\"tslib\"),require(\"@angular/cdk/coercion\"),require(\"rxjs\"),require(\"@angular/cdk/platform\"),require(\"@angular/platform-browser\"),require(\"rxjs/operators\"),require(\"@angular/common\"),require(\"@angular/cdk/a11y\"),require(\"@angular/platform-browser/animations\"),require(\"@angular/cdk/keycodes\")):System.registerDynamic(\"npm:@angular/material/bundles/material-core.umd.js\",[\"@angular/core\",\"@angular/cdk/bidi\",\"@angular/cdk\",\"tslib\",\"@angular/cdk/coercion\",\"rxjs\",\"@angular/cdk/platform\",\"@angular/platform-browser\",\"rxjs/operators\",\"@angular/common\",\"@angular/cdk/a11y\",\"@angular/platform-browser/animations\",\"@angular/cdk/keycodes\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"),e(\"@angular/cdk/bidi\"),e(\"@angular/cdk\"),e(\"tslib\"),e(\"@angular/cdk/coercion\"),e(\"rxjs\"),e(\"@angular/cdk/platform\"),e(\"@angular/platform-browser\"),e(\"rxjs/operators\"),e(\"@angular/common\"),e(\"@angular/cdk/a11y\"),e(\"@angular/platform-browser/animations\"),e(\"@angular/cdk/keycodes\"))})}(0,function(d,i,e,t,h,o,a,n,r,s,l,u,c,p){\"use strict\";var f=new i.Version(\"9.0.0-next.0\"),m=(v.STANDARD_CURVE=\"cubic-bezier(0.4,0.0,0.2,1)\",v.DECELERATION_CURVE=\"cubic-bezier(0.0,0.0,0.2,1)\",v.ACCELERATION_CURVE=\"cubic-bezier(0.4,0.0,1,1)\",v.SHARP_CURVE=\"cubic-bezier(0.4,0.0,0.6,1)\",v);function v(){}var y=(g.COMPLEX=\"375ms\",g.ENTERING=\"225ms\",g.EXITING=\"195ms\",g);function g(){}var _=new i.Version(\"9.0.0-next.0\");function b(){return!0}var w=new i.InjectionToken(\"mat-sanity-checks\",{providedIn:\"root\",factory:b}),x=(C.prototype._checksAreEnabled=function(){return i.isDevMode()&&!this._isTestEnv()},C.prototype._isTestEnv=function(){var e=this._window;return e&&(e.__karma__||e.jasmine)},C.prototype._checkDoctypeIsDefined=function(){this._checksAreEnabled()&&(!0===this._sanityChecks||this._sanityChecks.doctype)&&this._document&&!this._document.doctype&&console.warn(\"Current document does not have a doctype. This may cause some Angular Material components not to behave as expected.\")},C.prototype._checkThemeIsPresent=function(){if(this._checksAreEnabled()&&!1!==this._sanityChecks&&this._sanityChecks.theme&&this._document&&this._document.body&&\"function\"==typeof getComputedStyle){var e=this._document.createElement(\"div\");e.classList.add(\"mat-theme-loaded-marker\"),this._document.body.appendChild(e);var t=getComputedStyle(e);t&&\"none\"!==t.display&&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(e)}},C.prototype._checkCdkVersionMatch=function(){this._checksAreEnabled()&&(!0===this._sanityChecks||this._sanityChecks.version)&&_.full!==t.VERSION.full&&console.warn(\"The Angular Material version (\"+_.full+\") does not match the Angular CDK version (\"+t.VERSION.full+\").\\nPlease ensure the versions of these two packages exactly match.\")},C.decorators=[{type:i.NgModule,args:[{imports:[e.BidiModule],exports:[e.BidiModule]}]}],C.ctorParameters=function(){return[{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[w]}]}]},C);function C(e){this._hasDoneGlobalChecks=!1,this._document=\"object\"==typeof document&&document?document:null,this._window=\"object\"==typeof window&&window?window:null,this._sanityChecks=e,this._hasDoneGlobalChecks||(this._checkDoctypeIsDefined(),this._checkThemeIsPresent(),this._checkCdkVersionMatch(),this._hasDoneGlobalChecks=!0)}function S(e){return r=e,h.__extends(t,r),Object.defineProperty(t.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=r.apply(this,h.__spread(e))||this;return n._disabled=!1,n}var r}var E=new i.InjectionToken(\"MAT_DATE_LOCALE\",{providedIn:\"root\",factory:O});function O(){return i.inject(i.LOCALE_ID)}var k={provide:E,useExisting:i.LOCALE_ID},D=(Object.defineProperty(T.prototype,\"localeChanges\",{get:function(){return this._localeChanges},enumerable:!0,configurable:!0}),T.prototype.deserialize=function(e){return null==e||this.isDateInstance(e)&&this.isValid(e)?e:this.invalid()},T.prototype.setLocale=function(e){this.locale=e,this._localeChanges.next()},T.prototype.compareDate=function(e,t){return this.getYear(e)-this.getYear(t)||this.getMonth(e)-this.getMonth(t)||this.getDate(e)-this.getDate(t)},T.prototype.sameDate=function(e,t){if(e&&t){var n=this.isValid(e),r=this.isValid(t);return n&&r?!this.compareDate(e,t):n==r}return e==t},T.prototype.clampDate=function(e,t,n){return t&&this.compareDate(e,t)<0?t:n&&0<this.compareDate(e,n)?n:e},T);function T(){this._localeChanges=new a.Subject}var I,P=new i.InjectionToken(\"mat-date-formats\");try{I=\"undefined\"!=typeof Intl}catch(e){I=!1}var A={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\"]},M=j(31,function(e){return String(e+1)}),R={long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"]},N=/^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;function j(e,t){for(var n=Array(e),r=0;r<e;r++)n[r]=t(r);return n}var F,L=(F=D,h.__extends(V,F),V.prototype.getYear=function(e){return e.getFullYear()},V.prototype.getMonth=function(e){return e.getMonth()},V.prototype.getDate=function(e){return e.getDate()},V.prototype.getDayOfWeek=function(e){return e.getDay()},V.prototype.getMonthNames=function(e){var t=this;if(I){var n=new Intl.DateTimeFormat(this.locale,{month:e,timeZone:\"utc\"});return j(12,function(e){return t._stripDirectionalityCharacters(t._format(n,new Date(2017,e,1)))})}return A[e]},V.prototype.getDateNames=function(){var t=this;if(I){var n=new Intl.DateTimeFormat(this.locale,{day:\"numeric\",timeZone:\"utc\"});return j(31,function(e){return t._stripDirectionalityCharacters(t._format(n,new Date(2017,0,e+1)))})}return M},V.prototype.getDayOfWeekNames=function(e){var t=this;if(I){var n=new Intl.DateTimeFormat(this.locale,{weekday:e,timeZone:\"utc\"});return j(7,function(e){return t._stripDirectionalityCharacters(t._format(n,new Date(2017,0,e+1)))})}return R[e]},V.prototype.getYearName=function(e){if(I){var t=new Intl.DateTimeFormat(this.locale,{year:\"numeric\",timeZone:\"utc\"});return this._stripDirectionalityCharacters(this._format(t,e))}return String(this.getYear(e))},V.prototype.getFirstDayOfWeek=function(){return 0},V.prototype.getNumDaysInMonth=function(e){return this.getDate(this._createDateWithOverflow(this.getYear(e),this.getMonth(e)+1,0))},V.prototype.clone=function(e){return new Date(e.getTime())},V.prototype.createDate=function(e,t,n){if(t<0||11<t)throw Error('Invalid month index \"'+t+'\". Month index has to be between 0 and 11.');if(n<1)throw Error('Invalid date \"'+n+'\". Date has to be greater than 0.');var r=this._createDateWithOverflow(e,t,n);if(r.getMonth()!=t)throw Error('Invalid date \"'+n+'\" for month with index \"'+t+'\".');return r},V.prototype.today=function(){return new Date},V.prototype.parse=function(e){return\"number\"==typeof e?new Date(e):e?new Date(Date.parse(e)):null},V.prototype.format=function(e,t){if(!this.isValid(e))throw Error(\"NativeDateAdapter: Cannot format invalid date.\");if(I){this._clampDate&&(e.getFullYear()<1||9999<e.getFullYear())&&(e=this.clone(e)).setFullYear(Math.max(1,Math.min(9999,e.getFullYear()))),t=h.__assign({},t,{timeZone:\"utc\"});var n=new Intl.DateTimeFormat(this.locale,t);return this._stripDirectionalityCharacters(this._format(n,e))}return this._stripDirectionalityCharacters(e.toDateString())},V.prototype.addCalendarYears=function(e,t){return this.addCalendarMonths(e,12*t)},V.prototype.addCalendarMonths=function(e,t){var n=this._createDateWithOverflow(this.getYear(e),this.getMonth(e)+t,this.getDate(e));return this.getMonth(n)!=((this.getMonth(e)+t)%12+12)%12&&(n=this._createDateWithOverflow(this.getYear(n),this.getMonth(n),0)),n},V.prototype.addCalendarDays=function(e,t){return this._createDateWithOverflow(this.getYear(e),this.getMonth(e),this.getDate(e)+t)},V.prototype.toIso8601=function(e){return[e.getUTCFullYear(),this._2digit(e.getUTCMonth()+1),this._2digit(e.getUTCDate())].join(\"-\")},V.prototype.deserialize=function(e){if(\"string\"==typeof e){if(!e)return null;if(N.test(e)){var t=new Date(e);if(this.isValid(t))return t}}return F.prototype.deserialize.call(this,e)},V.prototype.isDateInstance=function(e){return e instanceof Date},V.prototype.isValid=function(e){return!isNaN(e.getTime())},V.prototype.invalid=function(){return new Date(NaN)},V.prototype._createDateWithOverflow=function(e,t,n){var r=new Date(e,t,n);return 0<=e&&e<100&&r.setFullYear(this.getYear(r)-1900),r},V.prototype._2digit=function(e){return(\"00\"+e).slice(-2)},V.prototype._stripDirectionalityCharacters=function(e){return e.replace(/[\\u200e\\u200f]/g,\"\")},V.prototype._format=function(e,t){var n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return e.format(n)},V.decorators=[{type:i.Injectable}],V.ctorParameters=function(){return[{type:String,decorators:[{type:i.Optional},{type:i.Inject,args:[E]}]},{type:n.Platform}]},V);function V(e,t){var n=F.call(this)||this;return n.useUtcForDisplay=!0,F.prototype.setLocale.call(n,e),n.useUtcForDisplay=!t.TRIDENT,n._clampDate=t.TRIDENT||t.EDGE,n}var B={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\"}}},U=(z.decorators=[{type:i.NgModule,args:[{imports:[n.PlatformModule],providers:[{provide:D,useClass:L}]}]}],z);function z(){}var q=B,H=(W.decorators=[{type:i.NgModule,args:[{imports:[U],providers:[{provide:P,useValue:q}]}]}],W);function W(){}var G=(Y.prototype.isErrorState=function(e,t){return!!(e&&e.invalid&&(e.dirty||t&&t.submitted))},Y.decorators=[{type:i.Injectable}],Y);function Y(){}var K=(Z.prototype.isErrorState=function(e,t){return!!(e&&e.invalid&&(e.touched||t&&t.submitted))},Z.decorators=[{type:i.Injectable,args:[{providedIn:\"root\"}]}],Z.ngInjectableDef=i.ɵɵdefineInjectable({factory:function(){return new Z},token:Z,providedIn:\"root\"}),Z);function Z(){}function Q(){}var X,$=new i.InjectionToken(\"MAT_HAMMER_OPTIONS\"),J=[\"longpress\",\"slide\",\"slidestart\",\"slideend\",\"slideright\",\"slideleft\"],ee={on:function(){},off:Q},te=(X=r.HammerGestureConfig,h.__extends(ne,X),ne.prototype.buildHammer=function(e){var t=\"undefined\"!=typeof window?window.Hammer:null;if(!t)return ee;var n=new t(e,this._hammerOptions||void 0),r=new t.Pan,i=new t.Swipe,o=new t.Press,a=this._createRecognizer(r,{event:\"slide\",threshold:0},i),s=this._createRecognizer(o,{event:\"longpress\",time:500});return r.recognizeWith(i),s.recognizeWith(a),n.add([i,o,r,a,s]),n},ne.prototype._createRecognizer=function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var i=new e.constructor(t);return n.push(e),n.forEach(function(e){return i.recognizeWith(e)}),i},ne.decorators=[{type:i.Injectable}],ne.ctorParameters=function(){return[{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[$]}]},{type:x,decorators:[{type:i.Optional}]}]},ne);function ne(e,t){var n=X.call(this)||this;return n._hammerOptions=e,n.events=J,n}var re=(ie.decorators=[{type:i.Directive,args:[{selector:\"[mat-line], [matLine]\",host:{class:\"mat-line\"}}]}],ie);function ie(){}function oe(e,n){e.changes.pipe(s.startWith(e)).subscribe(function(e){var t=e.length;ae(n,\"mat-2-line\",!1),ae(n,\"mat-3-line\",!1),ae(n,\"mat-multi-line\",!1),2===t||3===t?ae(n,\"mat-\"+t+\"-line\",!0):3<t&&ae(n,\"mat-multi-line\",!0)})}function ae(e,t,n){var r=e.nativeElement.classList;n?r.add(t):r.remove(t)}function se(e,t){oe(e,t)}var le,ue=(ce.decorators=[{type:i.NgModule,args:[{imports:[x],exports:[re,x],declarations:[re]}]}],ce);function ce(){}(le=d.RippleState||(d.RippleState={}))[le.FADING_IN=0]=\"FADING_IN\",le[le.VISIBLE=1]=\"VISIBLE\",le[le.FADING_OUT=2]=\"FADING_OUT\",le[le.HIDDEN=3]=\"HIDDEN\";var pe=(de.prototype.fadeOut=function(){this._renderer.fadeOutRipple(this)},de);function de(e,t,n){this._renderer=e,this.element=t,this.config=n,this.state=d.RippleState.HIDDEN}var he={enterDuration:450,exitDuration:400},fe=n.normalizePassiveListenerOptions({passive:!0}),me=(ve.prototype.fadeInRipple=function(e,t,n){var r=this;void 0===n&&(n={});var i=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),o=h.__assign({},he,n.animation);n.centered&&(e=i.left+i.width/2,t=i.top+i.height/2);var a=n.radius||function(e,t,n){var r=Math.max(Math.abs(e-n.left),Math.abs(e-n.right)),i=Math.max(Math.abs(t-n.top),Math.abs(t-n.bottom));return Math.sqrt(r*r+i*i)}(e,t,i),s=e-i.left,l=t-i.top,u=o.enterDuration,c=document.createElement(\"div\");c.classList.add(\"mat-ripple-element\"),c.style.left=s-a+\"px\",c.style.top=l-a+\"px\",c.style.height=2*a+\"px\",c.style.width=2*a+\"px\",c.style.backgroundColor=n.color||null,c.style.transitionDuration=u+\"ms\",this._containerElement.appendChild(c),function(e){window.getComputedStyle(e).getPropertyValue(\"opacity\")}(c),c.style.transform=\"scale(1)\";var p=new pe(this,c,n);return p.state=d.RippleState.FADING_IN,this._activeRipples.add(p),n.persistent||(this._mostRecentTransientRipple=p),this._runTimeoutOutsideZone(function(){var e=p===r._mostRecentTransientRipple;p.state=d.RippleState.VISIBLE,n.persistent||e&&r._isPointerDown||p.fadeOut()},u),p},ve.prototype.fadeOutRipple=function(e){var t=this._activeRipples.delete(e);if(e===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),this._activeRipples.size||(this._containerRect=null),t){var n=e.element,r=h.__assign({},he,e.config.animation);n.style.transitionDuration=r.exitDuration+\"ms\",n.style.opacity=\"0\",e.state=d.RippleState.FADING_OUT,this._runTimeoutOutsideZone(function(){e.state=d.RippleState.HIDDEN,n.parentNode.removeChild(n)},r.exitDuration)}},ve.prototype.fadeOutAll=function(){this._activeRipples.forEach(function(e){return e.fadeOut()})},ve.prototype.setupTriggerEvents=function(e){var t=this,n=o.coerceElement(e);n&&n!==this._triggerElement&&(this._removeTriggerEvents(),this._ngZone.runOutsideAngular(function(){t._triggerEvents.forEach(function(e,t){n.addEventListener(t,e,fe)})}),this._triggerElement=n)},ve.prototype._runTimeoutOutsideZone=function(e,t){void 0===t&&(t=0),this._ngZone.runOutsideAngular(function(){return setTimeout(e,t)})},ve.prototype._removeTriggerEvents=function(){var n=this;this._triggerElement&&this._triggerEvents.forEach(function(e,t){n._triggerElement.removeEventListener(t,e,fe)})},ve);function ve(e,t,n,r){var i=this;this._target=e,this._ngZone=t,this._isPointerDown=!1,this._triggerEvents=new Map,this._activeRipples=new Set,this._onMousedown=function(e){var t=u.isFakeMousedownFromScreenReader(e),n=i._lastTouchStartEvent&&Date.now()<i._lastTouchStartEvent+800;i._target.rippleDisabled||t||n||(i._isPointerDown=!0,i.fadeInRipple(e.clientX,e.clientY,i._target.rippleConfig))},this._onTouchStart=function(e){if(!i._target.rippleDisabled){i._lastTouchStartEvent=Date.now(),i._isPointerDown=!0;for(var t=e.changedTouches,n=0;n<t.length;n++)i.fadeInRipple(t[n].clientX,t[n].clientY,i._target.rippleConfig)}},this._onPointerUp=function(){i._isPointerDown&&(i._isPointerDown=!1,i._activeRipples.forEach(function(e){var t=e.state===d.RippleState.VISIBLE||e.config.terminateOnPointerUp&&e.state===d.RippleState.FADING_IN;!e.config.persistent&&t&&e.fadeOut()}))},r.isBrowser&&(this._containerElement=o.coerceElement(n),this._triggerEvents.set(\"mousedown\",this._onMousedown).set(\"mouseup\",this._onPointerUp).set(\"mouseleave\",this._onPointerUp).set(\"touchstart\",this._onTouchStart).set(\"touchend\",this._onPointerUp).set(\"touchcancel\",this._onPointerUp))}var ye=new i.InjectionToken(\"mat-ripple-global-options\"),ge=(Object.defineProperty(_e.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=e,this._setupTriggerEventsIfEnabled()},enumerable:!0,configurable:!0}),Object.defineProperty(_e.prototype,\"trigger\",{get:function(){return this._trigger||this._elementRef.nativeElement},set:function(e){this._trigger=e,this._setupTriggerEventsIfEnabled()},enumerable:!0,configurable:!0}),_e.prototype.ngOnInit=function(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()},_e.prototype.ngOnDestroy=function(){this._rippleRenderer._removeTriggerEvents()},_e.prototype.fadeOutAll=function(){this._rippleRenderer.fadeOutAll()},Object.defineProperty(_e.prototype,\"rippleConfig\",{get:function(){return{centered:this.centered,radius:this.radius,color:this.color,animation:h.__assign({},this._globalOptions.animation,this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}},enumerable:!0,configurable:!0}),Object.defineProperty(_e.prototype,\"rippleDisabled\",{get:function(){return this.disabled||!!this._globalOptions.disabled},enumerable:!0,configurable:!0}),_e.prototype._setupTriggerEventsIfEnabled=function(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)},_e.prototype.launch=function(e,t,n){return void 0===t&&(t=0),\"number\"==typeof e?this._rippleRenderer.fadeInRipple(e,t,h.__assign({},this.rippleConfig,n)):this._rippleRenderer.fadeInRipple(0,0,h.__assign({},this.rippleConfig,e))},_e.decorators=[{type:i.Directive,args:[{selector:\"[mat-ripple], [matRipple]\",exportAs:\"matRipple\",host:{class:\"mat-ripple\",\"[class.mat-ripple-unbounded]\":\"unbounded\"}}]}],_e.ctorParameters=function(){return[{type:i.ElementRef},{type:i.NgZone},{type:n.Platform},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[ye]}]},{type:String,decorators:[{type:i.Optional},{type:i.Inject,args:[c.ANIMATION_MODULE_TYPE]}]}]},_e.propDecorators={color:[{type:i.Input,args:[\"matRippleColor\"]}],unbounded:[{type:i.Input,args:[\"matRippleUnbounded\"]}],centered:[{type:i.Input,args:[\"matRippleCentered\"]}],radius:[{type:i.Input,args:[\"matRippleRadius\"]}],animation:[{type:i.Input,args:[\"matRippleAnimation\"]}],disabled:[{type:i.Input,args:[\"matRippleDisabled\"]}],trigger:[{type:i.Input,args:[\"matRippleTrigger\"]}]},_e);function _e(e,t,n,r,i){this._elementRef=e,this.radius=0,this._disabled=!1,this._isInitialized=!1,this._globalOptions=r||{},this._rippleRenderer=new me(this,t,e,n),\"NoopAnimations\"===i&&(this._globalOptions.animation={enterDuration:0,exitDuration:0})}var be=(we.decorators=[{type:i.NgModule,args:[{imports:[x,n.PlatformModule],exports:[ge,x],declarations:[ge]}]}],we);function we(){}var xe=(Ce.decorators=[{type:i.Component,args:[{moduleId:module.id,encapsulation:i.ViewEncapsulation.None,changeDetection:i.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}/*# sourceMappingURL=pseudo-checkbox.css.map */\\n']}]}],Ce.ctorParameters=function(){return[{type:String,decorators:[{type:i.Optional},{type:i.Inject,args:[c.ANIMATION_MODULE_TYPE]}]}]},Ce.propDecorators={state:[{type:i.Input}],disabled:[{type:i.Input}]},Ce);function Ce(e){this._animationMode=e,this.state=\"unchecked\",this.disabled=!1}var Se=(Ee.decorators=[{type:i.NgModule,args:[{exports:[xe],declarations:[xe]}]}],Ee);function Ee(){}var Oe,ke=S(function(){}),De=0,Te=(Oe=ke,h.__extends(Ie,Oe),Ie.decorators=[{type:i.Component,args:[{moduleId:module.id,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:i.ViewEncapsulation.None,changeDetection:i.ChangeDetectionStrategy.OnPush,inputs:[\"disabled\"],host:{class:\"mat-optgroup\",role:\"group\",\"[class.mat-optgroup-disabled]\":\"disabled\",\"[attr.aria-disabled]\":\"disabled.toString()\",\"[attr.aria-labelledby]\":\"_labelId\"},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}/*# sourceMappingURL=optgroup.css.map */\\n\"]}]}],Ie.propDecorators={label:[{type:i.Input}]},Ie);function Ie(){var e=null!==Oe&&Oe.apply(this,arguments)||this;return e._labelId=\"mat-optgroup-label-\"+De++,e}var Pe=0,Ae=function(e,t){void 0===t&&(t=!1),this.source=e,this.isUserInput=t},Me=new i.InjectionToken(\"MAT_OPTION_PARENT_COMPONENT\"),Re=(Object.defineProperty(Ne.prototype,\"multiple\",{get:function(){return this._parent&&this._parent.multiple},enumerable:!0,configurable:!0}),Object.defineProperty(Ne.prototype,\"selected\",{get:function(){return this._selected},enumerable:!0,configurable:!0}),Object.defineProperty(Ne.prototype,\"disabled\",{get:function(){return this.group&&this.group.disabled||this._disabled},set:function(e){this._disabled=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(Ne.prototype,\"disableRipple\",{get:function(){return this._parent&&this._parent.disableRipple},enumerable:!0,configurable:!0}),Object.defineProperty(Ne.prototype,\"active\",{get:function(){return this._active},enumerable:!0,configurable:!0}),Object.defineProperty(Ne.prototype,\"viewValue\",{get:function(){return(this._getHostElement().textContent||\"\").trim()},enumerable:!0,configurable:!0}),Ne.prototype.select=function(){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent())},Ne.prototype.deselect=function(){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent())},Ne.prototype.focus=function(e,t){var n=this._getHostElement();\"function\"==typeof n.focus&&n.focus(t)},Ne.prototype.setActiveStyles=function(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())},Ne.prototype.setInactiveStyles=function(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())},Ne.prototype.getLabel=function(){return this.viewValue},Ne.prototype._handleKeydown=function(e){e.keyCode!==p.ENTER&&e.keyCode!==p.SPACE||p.hasModifierKey(e)||(this._selectViaInteraction(),e.preventDefault())},Ne.prototype._selectViaInteraction=function(){this.disabled||(this._selected=!this.multiple||!this._selected,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))},Ne.prototype._getAriaSelected=function(){return this.selected||!this.multiple&&null},Ne.prototype._getTabIndex=function(){return this.disabled?\"-1\":\"0\"},Ne.prototype._getHostElement=function(){return this._element.nativeElement},Ne.prototype.ngAfterViewChecked=function(){if(this._selected){var e=this.viewValue;e!==this._mostRecentViewValue&&(this._mostRecentViewValue=e,this._stateChanges.next())}},Ne.prototype.ngOnDestroy=function(){this._stateChanges.complete()},Ne.prototype._emitSelectionChangeEvent=function(e){void 0===e&&(e=!1),this.onSelectionChange.emit(new Ae(this,e))},Ne.decorators=[{type:i.Component,args:[{moduleId:module.id,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\"},template:'<mat-pseudo-checkbox *ngIf=\"multiple\" class=\"mat-option-pseudo-checkbox\"\\n    [state]=\"selected ? \\'checked\\' : \\'\\'\" [disabled]=\"disabled\"></mat-pseudo-checkbox>\\n\\n<span class=\"mat-option-text\"><ng-content></ng-content></span>\\n\\n<div class=\"mat-option-ripple\" mat-ripple\\n     [matRippleTrigger]=\"_getHostElement()\"\\n     [matRippleDisabled]=\"disabled || disableRipple\">\\n</div>\\n',encapsulation:i.ViewEncapsulation.None,changeDetection:i.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}@media(-ms-high-contrast: active){.mat-option{margin:0 1px}.mat-option.mat-active{border:solid 1px currentColor;margin:0}}.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}@media(-ms-high-contrast: active){.mat-option .mat-option-ripple{opacity:.5}}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}/*# sourceMappingURL=option.css.map */\\n\"]}]}],Ne.ctorParameters=function(){return[{type:i.ElementRef},{type:i.ChangeDetectorRef},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[Me]}]},{type:Te,decorators:[{type:i.Optional}]}]},Ne.propDecorators={value:[{type:i.Input}],id:[{type:i.Input}],disabled:[{type:i.Input}],onSelectionChange:[{type:i.Output}]},Ne);function Ne(e,t,n,r){this._element=e,this._changeDetectorRef=t,this._parent=n,this.group=r,this._selected=!1,this._active=!1,this._disabled=!1,this._mostRecentViewValue=\"\",this.id=\"mat-option-\"+Pe++,this.onSelectionChange=new i.EventEmitter,this._stateChanges=new a.Subject}var je=(Fe.decorators=[{type:i.NgModule,args:[{imports:[be,l.CommonModule,Se],exports:[Re,Te],declarations:[Re,Te]}]}],Fe);function Fe(){}var Le=new i.InjectionToken(\"mat-label-global-options\");d.ɵangular_material_src_material_core_core_a=b,d.VERSION=f,d.AnimationCurves=m,d.AnimationDurations=y,d.MatCommonModule=x,d.MATERIAL_SANITY_CHECKS=w,d.mixinDisabled=S,d.mixinColor=function(e,r){return i=e,h.__extends(t,i),Object.defineProperty(t.prototype,\"color\",{get:function(){return this._color},set:function(e){var t=e||r;t!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove(\"mat-\"+this._color),t&&this._elementRef.nativeElement.classList.add(\"mat-\"+t),this._color=t)},enumerable:!0,configurable:!0}),t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=i.apply(this,h.__spread(e))||this;return n.color=r,n}var i},d.mixinDisableRipple=function(e){return r=e,h.__extends(t,r),Object.defineProperty(t.prototype,\"disableRipple\",{get:function(){return this._disableRipple},set:function(e){this._disableRipple=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=r.apply(this,h.__spread(e))||this;return n._disableRipple=!1,n}var r},d.mixinTabIndex=function(e,r){return void 0===r&&(r=0),i=e,h.__extends(t,i),Object.defineProperty(t.prototype,\"tabIndex\",{get:function(){return this.disabled?-1:this._tabIndex},set:function(e){this._tabIndex=null!=e?e:r},enumerable:!0,configurable:!0}),t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=i.apply(this,h.__spread(e))||this;return n._tabIndex=r,n}var i},d.mixinErrorState=function(e){return r=e,h.__extends(t,r),t.prototype.updateErrorState=function(){var e=this.errorState,t=this._parentFormGroup||this._parentForm,n=this.errorStateMatcher||this._defaultErrorStateMatcher,r=this.ngControl?this.ngControl.control:null,i=n.isErrorState(r,t);i!==e&&(this.errorState=i,this.stateChanges.next())},t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=r.apply(this,h.__spread(e))||this;return n.errorState=!1,n.stateChanges=new a.Subject,n}var r},d.mixinInitialized=function(e){return r=e,h.__extends(t,r),t.prototype._markInitialized=function(){if(this._isInitialized)throw Error(\"This directive has already been marked as initialized and should not be called twice.\");this._isInitialized=!0,this._pendingSubscribers.forEach(this._notifySubscriber),this._pendingSubscribers=null},t.prototype._notifySubscriber=function(e){e.next(),e.complete()},t;function t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=r.apply(this,h.__spread(e))||this;return n._isInitialized=!1,n._pendingSubscribers=[],n.initialized=new a.Observable(function(e){n._isInitialized?n._notifySubscriber(e):n._pendingSubscribers.push(e)}),n}var r},d.NativeDateModule=U,d.MatNativeDateModule=H,d.ɵ0=q,d.MAT_DATE_LOCALE=E,d.MAT_DATE_LOCALE_FACTORY=O,d.MAT_DATE_LOCALE_PROVIDER=k,d.DateAdapter=D,d.MAT_DATE_FORMATS=P,d.NativeDateAdapter=L,d.MAT_NATIVE_DATE_FORMATS=B,d.ShowOnDirtyErrorStateMatcher=G,d.ErrorStateMatcher=K,d.MAT_HAMMER_OPTIONS=$,d.GestureConfig=te,d.ɵ1=Q,d.MatLine=re,d.setLines=oe,d.MatLineSetter=se,d.MatLineModule=ue,d.MatOptionModule=je,d.MatOptionSelectionChange=Ae,d.MAT_OPTION_PARENT_COMPONENT=Me,d.MatOption=Re,d._countGroupLabelsBeforeOption=function(e,t,n){if(n.length){for(var r=t.toArray(),i=n.toArray(),o=0,a=0;a<e+1;a++)r[a].group&&r[a].group===i[o]&&o++;return o}return 0},d._getOptionScrollPosition=function(e,t,n,r){var i=e*t;return i<n?i:n+r<i+t?Math.max(0,i-r+t):n},d.MatOptgroup=Te,d.MAT_LABEL_GLOBAL_OPTIONS=Le,d.MatRippleModule=be,d.MAT_RIPPLE_GLOBAL_OPTIONS=ye,d.MatRipple=ge,d.RippleRef=pe,d.defaultRippleAnimationConfig=he,d.RippleRenderer=me,d.MatPseudoCheckboxModule=Se,d.MatPseudoCheckbox=xe,d.JAN=0,d.FEB=1,d.MAR=2,d.APR=3,d.MAY=4,d.JUN=5,d.JUL=6,d.AUG=7,d.SEP=8,d.OCT=9,d.NOV=10,d.DEC=11,Object.defineProperty(d,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-coercion.umd.js\",[\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"))})}(0,function(e,t){\"use strict\";function n(e){return!isNaN(parseFloat(e))&&!isNaN(Number(e))}e.coerceBooleanProperty=function(e){return null!=e&&\"\"+e!=\"false\"},e.coerceNumberProperty=function(e,t){return void 0===t&&(t=0),n(e)?Number(e):t},e._isNumberValue=n,e.coerceArray=function(e){return Array.isArray(e)?e:[e]},e.coerceCssPixelValue=function(e){return null==e?\"\":\"string\"==typeof e?e:e+\"px\"},e.coerceElement=function(e){return e instanceof t.ElementRef?e.nativeElement:e},Object.defineProperty(e,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/common/bundles/common.umd.js\",[\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"@angular/core\"))})}(0,function(x,o){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function e(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var i=function(){return(i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function t(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function n(n,r){return function(e,t){r(e,t,n)}}function a(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function p(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function d(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}var s=(l.prototype.setValue=function(e){if(Array.isArray(e))this._lastSetValueType=4;else if(e instanceof Set)this._lastSetValueType=8;else if(e&&\"string\"==typeof e){if(!(4&this._options))throw new Error(this._name+\" string values are not allowed\");this._lastSetValueType=1}else this._lastSetValueType=e?2:0;this._lastSetValueIdentityChange=!0,this._lastSetValue=e||null},l.prototype.hasValueChanged=function(){var e=this._lastSetValueIdentityChange;if(!(e||14&this._lastSetValueType))return!1;var n=null,t=!!(1&this._options),r=!!(8&this._options),i=!!(2&this._options);switch(this._lastSetValueType){case 1:var o=this._lastSetValue.split(/\\s+/g);16&this._options?(n={},o.forEach(function(e,t){return n[e]=!0})):n=o.reduce(function(e,t,n){return e+(n?\" \":\"\")+t});break;case 2:var a=this._lastSetValue,s=Object.keys(a);(e=e||!this.value||function(e,t,n){var r=Object.keys(t),i=e;if(!m(r,i))return!0;for(var o=0;o<i.length;o++){var a=i[o];if(t[a]!==n[a])return!0}return!1}(s,this.value,a))&&(n=u(this._name,t,r,i,a,s));break;case 4:case 8:var l=Array.from(this._lastSetValue);(e=e||!m(Object.keys(this.value),l))&&(n=u(this._name,t,r,i,l));break;default:n=null}return e&&(this.value=n),e},l);function l(e,t){this._name=e,this._options=t,this.value=null,this._lastSetValue=null,this._lastSetValueType=0,this._lastSetValueIdentityChange=!1}function u(e,t,n,r,i,o){var a={};if(o)for(var s=0;s<o.length;s++){var l=o[s];h(a,l=t?l.trim():l,u=i[l],n,r)}else for(s=0;s<i.length;s++){var u;c(e,u=i[s]),h(a,u=t?u.trim():u,!0,!1,r)}return a}function c(e,t){if(\"string\"!=typeof t)throw new Error(e+\" can only toggle CSS classes expressed as strings, got \"+t)}function h(e,t,n,r,i){if(i&&0<t.indexOf(\" \"))for(var o=t.split(/\\s+/g),a=0;a<o.length;a++)f(e,o[a],n,r);else f(e,t,n,r)}function f(e,t,n,r){if(r){var i=function(e,t){var n=e.indexOf(\".\");if(0<n){var r=e.substr(n+1);e=e.substring(0,n),null!=t&&(t+=r)}return{key:e,value:t}}(t,n);n=i.value,t=i.key}e[t]=n}function m(e,t){if(e&&t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(-1===t.indexOf(e[n]))return!1;return!0}return!1}function v(){}var y=(g.prototype.getValue=function(){return null},g.prototype.setClass=function(e){this._removeClasses(this._initialClasses),this._initialClasses=\"string\"==typeof e?e.split(/\\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)},g.prototype.setNgClass=function(e){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass=\"string\"==typeof e?e.split(/\\s+/):e,this._rawClass&&(o.ɵisListLikeIterable(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},g.prototype.applyChanges=function(){if(this._iterableDiffer){var e=this._iterableDiffer.diff(this._rawClass);e&&this._applyIterableChanges(e)}else if(this._keyValueDiffer){var t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}},g.prototype._applyKeyValueChanges=function(e){var t=this;e.forEachAddedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachRemovedItem(function(e){e.previousValue&&t._toggleClass(e.key,!1)})},g.prototype._applyIterableChanges=function(e){var t=this;e.forEachAddedItem(function(e){if(\"string\"!=typeof e.item)throw new Error(\"NgClass can only toggle CSS classes expressed as strings, got \"+o.ɵstringify(e.item));t._toggleClass(e.item,!0)}),e.forEachRemovedItem(function(e){return t._toggleClass(e.item,!1)})},g.prototype._applyClasses=function(t){var n=this;t&&(Array.isArray(t)||t instanceof Set?t.forEach(function(e){return n._toggleClass(e,!0)}):Object.keys(t).forEach(function(e){return n._toggleClass(e,!!t[e])}))},g.prototype._removeClasses=function(e){var t=this;e&&(Array.isArray(e)||e instanceof Set?e.forEach(function(e){return t._toggleClass(e,!1)}):Object.keys(e).forEach(function(e){return t._toggleClass(e,!1)}))},g.prototype._toggleClass=function(e,t){var n=this;(e=e.trim())&&e.split(/\\s+/g).forEach(function(e){t?n._renderer.addClass(n._ngEl.nativeElement,e):n._renderer.removeClass(n._ngEl.nativeElement,e)})},g=t([o.Injectable(),a(\"design:paramtypes\",[o.IterableDiffers,o.KeyValueDiffers,o.ElementRef,o.Renderer2])],g));function g(e,t,n,r){this._iterableDiffers=e,this._keyValueDiffers=t,this._ngEl=n,this._renderer=r,this._initialClasses=[]}var _=(b.prototype.getValue=function(){return this._value},b.prototype.setClass=function(e){(e||this._classStringDiffer)&&(this._classStringDiffer=this._classStringDiffer||new s(\"class\",20),this._classStringDiffer.setValue(e))},b.prototype.setNgClass=function(e){this._ngClassDiffer.setValue(e)},b.prototype.applyChanges=function(){var e=!!this._classStringDiffer&&this._classStringDiffer.hasValueChanged(),t=this._ngClassDiffer.hasValueChanged();if(e||t){var n=this._ngClassDiffer.value;if(this._classStringDiffer){var r=this._classStringDiffer.value;r&&(n=n?i(i({},r),n):r)}this._value=n}},b=t([o.Injectable()],b));function b(){this._value=null,this._ngClassDiffer=new s(\"NgClass\",23),this._classStringDiffer=null}var w={provide:v,useClass:y},C={provide:v,useClass:_},S=w,E=o.ɵɵdefineDirective({type:function(){},selectors:null,hostBindings:function(e,t,n){1&e&&o.ɵɵallocHostVars(1),2&e&&o.ɵɵclassMap(t.getValue())}}),O=(k.prototype.getValue=function(){return this._delegate.getValue()},k.ɵdir=void 0,k.ɵfac=void 0,k);function k(e){this._delegate=e}var D,T=(e(I,D=O),Object.defineProperty(I.prototype,\"klass\",{set:function(e){this._delegate.setClass(e)},enumerable:!0,configurable:!0}),Object.defineProperty(I.prototype,\"ngClass\",{set:function(e){this._delegate.setNgClass(e)},enumerable:!0,configurable:!0}),I.prototype.ngDoCheck=function(){this._delegate.applyChanges()},t([o.Input(\"class\"),a(\"design:type\",String),a(\"design:paramtypes\",[String])],I.prototype,\"klass\",null),t([o.Input(\"ngClass\"),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],I.prototype,\"ngClass\",null),I=t([o.Directive({selector:\"[ngClass]\",providers:[S]}),a(\"design:paramtypes\",[v])],I));function I(e){return D.call(this,e)||this}function P(){}var A=(M.prototype.getValue=function(){return null},M.prototype.setNgStyle=function(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())},M.prototype.applyChanges=function(){if(this._differ){var e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}},M.prototype._applyChanges=function(e){var t=this;e.forEachRemovedItem(function(e){return t._setStyle(e.key,null)}),e.forEachAddedItem(function(e){return t._setStyle(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._setStyle(e.key,e.currentValue)})},M.prototype._setStyle=function(e,t){var n=d(e.split(\".\"),2),r=n[0],i=n[1];null!=(t=null!=t&&i?\"\"+t+i:t)?this._renderer.setStyle(this._ngEl.nativeElement,r,t):this._renderer.removeStyle(this._ngEl.nativeElement,r)},M=t([o.Injectable(),a(\"design:paramtypes\",[o.ElementRef,o.KeyValueDiffers,o.Renderer2])],M));function M(e,t,n){this._ngEl=e,this._differs=t,this._renderer=n}var R=(N.prototype.getValue=function(){return this._value},N.prototype.setNgStyle=function(e){this._differ.setValue(e)},N.prototype.applyChanges=function(){this._differ.hasValueChanged()&&(this._value=this._differ.value)},N=t([o.Injectable()],N));function N(){this._differ=new s(\"NgStyle\",8),this._value=null}var j={provide:P,useClass:A},F={provide:P,useClass:R},L=j,V=o.ɵɵdefineDirective({type:function(){},selectors:null,hostBindings:function(e,t,n){1&e&&o.ɵɵallocHostVars(1),2&e&&o.ɵɵstyleMap(t.getValue())}}),B=(U.prototype.getValue=function(){return this._delegate.getValue()},U.ɵdir=void 0,U.ɵfac=void 0,U);function U(e){this._delegate=e}var z,q=(e(H,z=B),Object.defineProperty(H.prototype,\"ngStyle\",{set:function(e){this._delegate.setNgStyle(e)},enumerable:!0,configurable:!0}),H.prototype.ngDoCheck=function(){this._delegate.applyChanges()},t([o.Input(\"ngStyle\"),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],H.prototype,\"ngStyle\",null),H=t([o.Directive({selector:\"[ngStyle]\",providers:[L]}),a(\"design:paramtypes\",[P])],H));function H(e){return z.call(this,e)||this}var W=null;function G(){return W}function Y(){}var K=new o.InjectionToken(\"DocumentToken\"),Z=(Q.ɵprov=o.ɵɵdefineInjectable({factory:X,token:Q,providedIn:\"platform\"}),Q=t([o.Injectable({providedIn:\"platform\",useFactory:X})],Q));function Q(){}function X(){return o.ɵɵinject(ee)}var $,J=new o.InjectionToken(\"Location Initialized\"),ee=(e(te,$=Z),te.prototype._init=function(){this.location=G().getLocation(),this._history=G().getHistory()},te.prototype.getBaseHrefFromDOM=function(){return G().getBaseHref(this._doc)},te.prototype.onPopState=function(e){G().getGlobalEventTarget(this._doc,\"window\").addEventListener(\"popstate\",e,!1)},te.prototype.onHashChange=function(e){G().getGlobalEventTarget(this._doc,\"window\").addEventListener(\"hashchange\",e,!1)},Object.defineProperty(te.prototype,\"href\",{get:function(){return this.location.href},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"protocol\",{get:function(){return this.location.protocol},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"hostname\",{get:function(){return this.location.hostname},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"port\",{get:function(){return this.location.port},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"pathname\",{get:function(){return this.location.pathname},set:function(e){this.location.pathname=e},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"search\",{get:function(){return this.location.search},enumerable:!0,configurable:!0}),Object.defineProperty(te.prototype,\"hash\",{get:function(){return this.location.hash},enumerable:!0,configurable:!0}),te.prototype.pushState=function(e,t,n){ne()?this._history.pushState(e,t,n):this.location.hash=n},te.prototype.replaceState=function(e,t,n){ne()?this._history.replaceState(e,t,n):this.location.hash=n},te.prototype.forward=function(){this._history.forward()},te.prototype.back=function(){this._history.back()},te.prototype.getState=function(){return this._history.state},te.ɵprov=o.ɵɵdefineInjectable({factory:re,token:te,providedIn:\"platform\"}),te=t([o.Injectable({providedIn:\"platform\",useFactory:re}),n(0,o.Inject(K)),a(\"design:paramtypes\",[Object])],te));function te(e){var t=$.call(this)||this;return t._doc=e,t._init(),t}function ne(){return!!window.history.pushState}function re(){return new ee(o.ɵɵinject(K))}function ie(e,t){if(0==e.length)return t;if(0==t.length)return e;var n=0;return e.endsWith(\"/\")&&n++,t.startsWith(\"/\")&&n++,2==n?e+t.substring(1):1==n?e+t:e+\"/\"+t}function oe(e){var t=e.match(/#|\\?|$/),n=t&&t.index||e.length,r=n-(\"/\"===e[n-1]?1:0);return e.slice(0,r)+e.slice(n)}function ae(e){return e&&\"?\"!==e[0]?\"?\"+e:e}var se=(le.ɵprov=o.ɵɵdefineInjectable({factory:ue,token:le,providedIn:\"root\"}),le=t([o.Injectable({providedIn:\"root\",useFactory:ue})],le));function le(){}function ue(e){var t=o.ɵɵinject(K).location;return new de(o.ɵɵinject(Z),t&&t.origin||\"\")}var ce,pe=new o.InjectionToken(\"appBaseHref\"),de=(e(he,ce=se),he.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},he.prototype.getBaseHref=function(){return this._baseHref},he.prototype.prepareExternalUrl=function(e){return ie(this._baseHref,e)},he.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.pathname+ae(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?\"\"+t+n:t},he.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ae(r));this._platformLocation.pushState(e,t,i)},he.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ae(r));this._platformLocation.replaceState(e,t,i)},he.prototype.forward=function(){this._platformLocation.forward()},he.prototype.back=function(){this._platformLocation.back()},he=t([o.Injectable(),n(1,o.Optional()),n(1,o.Inject(pe)),a(\"design:paramtypes\",[Z,String])],he));function he(e,t){var n=ce.call(this)||this;if(n._platformLocation=e,null==t&&(t=n._platformLocation.getBaseHrefFromDOM()),null==t)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.\");return n._baseHref=t,n}var fe,me=(e(ve,fe=se),ve.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},ve.prototype.getBaseHref=function(){return this._baseHref},ve.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.hash;return null==t&&(t=\"#\"),0<t.length?t.substring(1):t},ve.prototype.prepareExternalUrl=function(e){var t=ie(this._baseHref,e);return 0<t.length?\"#\"+t:t},ve.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ae(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(e,t,i)},ve.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ae(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(e,t,i)},ve.prototype.forward=function(){this._platformLocation.forward()},ve.prototype.back=function(){this._platformLocation.back()},ve=t([o.Injectable(),n(1,o.Optional()),n(1,o.Inject(pe)),a(\"design:paramtypes\",[Z,String])],ve));function ve(e,t){var n=fe.call(this)||this;return n._platformLocation=e,n._baseHref=\"\",null!=t&&(n._baseHref=t),n}var ye,ge=((ye=_e).prototype.path=function(e){return void 0===e&&(e=!1),this.normalize(this._platformStrategy.path(e))},_e.prototype.getState=function(){return this._platformLocation.getState()},_e.prototype.isCurrentPathEqualTo=function(e,t){return void 0===t&&(t=\"\"),this.path()==this.normalize(e+ae(t))},_e.prototype.normalize=function(e){return ye.stripTrailingSlash(function(e,t){return e&&t.startsWith(e)?t.substring(e.length):t}(this._baseHref,we(e)))},_e.prototype.prepareExternalUrl=function(e){return e&&\"/\"!==e[0]&&(e=\"/\"+e),this._platformStrategy.prepareExternalUrl(e)},_e.prototype.go=function(e,t,n){void 0===t&&(t=\"\"),void 0===n&&(n=null),this._platformStrategy.pushState(n,\"\",e,t),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+ae(t)),n)},_e.prototype.replaceState=function(e,t,n){void 0===t&&(t=\"\"),void 0===n&&(n=null),this._platformStrategy.replaceState(n,\"\",e,t),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+ae(t)),n)},_e.prototype.forward=function(){this._platformStrategy.forward()},_e.prototype.back=function(){this._platformStrategy.back()},_e.prototype.onUrlChange=function(e){var t=this;this._urlChangeListeners.push(e),this.subscribe(function(e){t._notifyUrlChangeListeners(e.url,e.state)})},_e.prototype._notifyUrlChangeListeners=function(t,n){void 0===t&&(t=\"\"),this._urlChangeListeners.forEach(function(e){return e(t,n)})},_e.prototype.subscribe=function(e,t,n){return this._subject.subscribe({next:e,error:t,complete:n})},_e.normalizeQueryParams=ae,_e.joinWithSlash=ie,_e.stripTrailingSlash=oe,_e.ɵprov=o.ɵɵdefineInjectable({factory:be,token:_e,providedIn:\"root\"}),_e=ye=t([o.Injectable({providedIn:\"root\",useFactory:be}),a(\"design:paramtypes\",[se,Z])],_e));function _e(e,t){var n=this;this._subject=new o.EventEmitter,this._urlChangeListeners=[],this._platformStrategy=e;var r=this._platformStrategy.getBaseHref();this._platformLocation=t,this._baseHref=oe(we(r)),this._platformStrategy.onPopState(function(e){n._subject.emit({url:n.path(!0),pop:!0,state:e.state,type:e.type})})}function be(){return new ge(o.ɵɵinject(se),o.ɵɵinject(Z))}function we(e){return e.replace(/\\/index.html$/,\"\")}var xe,Ce,Se,Ee,Oe,ke,De,Te={ADP:[void 0,void 0,0],AFN:[void 0,void 0,0],ALL:[void 0,void 0,0],AMD:[void 0,void 0,0],AOA:[void 0,\"Kz\"],ARS:[void 0,\"$\"],AUD:[\"A$\",\"$\"],BAM:[void 0,\"KM\"],BBD:[void 0,\"$\"],BDT:[void 0,\"৳\"],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,\"$\"],BND:[void 0,\"$\"],BOB:[void 0,\"Bs\"],BRL:[\"R$\"],BSD:[void 0,\"$\"],BWP:[void 0,\"P\"],BYN:[void 0,\"р.\",2],BYR:[void 0,void 0,0],BZD:[void 0,\"$\"],CAD:[\"CA$\",\"$\",2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,\"$\",0],CNY:[\"CN¥\",\"¥\"],COP:[void 0,\"$\",0],CRC:[void 0,\"₡\",2],CUC:[void 0,\"$\"],CUP:[void 0,\"$\"],CZK:[void 0,\"Kč\",2],DJF:[void 0,void 0,0],DKK:[void 0,\"kr\",2],DOP:[void 0,\"$\"],EGP:[void 0,\"E£\"],ESP:[void 0,\"₧\",0],EUR:[\"€\"],FJD:[void 0,\"$\"],FKP:[void 0,\"£\"],GBP:[\"£\"],GEL:[void 0,\"₾\"],GIP:[void 0,\"£\"],GNF:[void 0,\"FG\",0],GTQ:[void 0,\"Q\"],GYD:[void 0,\"$\",0],HKD:[\"HK$\",\"$\"],HNL:[void 0,\"L\"],HRK:[void 0,\"kn\"],HUF:[void 0,\"Ft\",2],IDR:[void 0,\"Rp\",0],ILS:[\"₪\"],INR:[\"₹\"],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,\"kr\",0],ITL:[void 0,void 0,0],JMD:[void 0,\"$\"],JOD:[void 0,void 0,3],JPY:[\"¥\",void 0,0],KHR:[void 0,\"៛\"],KMF:[void 0,\"CF\",0],KPW:[void 0,\"₩\",0],KRW:[\"₩\",void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,\"$\"],KZT:[void 0,\"₸\"],LAK:[void 0,\"₭\",0],LBP:[void 0,\"L£\",0],LKR:[void 0,\"Rs\"],LRD:[void 0,\"$\"],LTL:[void 0,\"Lt\"],LUF:[void 0,void 0,0],LVL:[void 0,\"Ls\"],LYD:[void 0,void 0,3],MGA:[void 0,\"Ar\",0],MGF:[void 0,void 0,0],MMK:[void 0,\"K\",0],MNT:[void 0,\"₮\",0],MRO:[void 0,void 0,0],MUR:[void 0,\"Rs\",0],MXN:[\"MX$\",\"$\"],MYR:[void 0,\"RM\"],NAD:[void 0,\"$\"],NGN:[void 0,\"₦\"],NIO:[void 0,\"C$\"],NOK:[void 0,\"kr\",2],NPR:[void 0,\"Rs\"],NZD:[\"NZ$\",\"$\"],OMR:[void 0,void 0,3],PHP:[void 0,\"₱\"],PKR:[void 0,\"Rs\",0],PLN:[void 0,\"zł\"],PYG:[void 0,\"₲\",0],RON:[void 0,\"lei\"],RSD:[void 0,void 0,0],RUB:[void 0,\"₽\"],RUR:[void 0,\"р.\"],RWF:[void 0,\"RF\",0],SBD:[void 0,\"$\"],SEK:[void 0,\"kr\",2],SGD:[void 0,\"$\"],SHP:[void 0,\"£\"],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,\"$\"],SSP:[void 0,\"£\"],STD:[void 0,void 0,0],STN:[void 0,\"Db\"],SYP:[void 0,\"£\",0],THB:[void 0,\"฿\"],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,\"T$\"],TRL:[void 0,void 0,0],TRY:[void 0,\"₺\"],TTD:[void 0,\"$\"],TWD:[\"NT$\",\"$\",2],TZS:[void 0,void 0,0],UAH:[void 0,\"₴\"],UGX:[void 0,void 0,0],USD:[\"$\"],UYI:[void 0,void 0,0],UYU:[void 0,\"$\"],UZS:[void 0,void 0,0],VEF:[void 0,\"Bs\"],VND:[\"₫\",void 0,0],VUV:[void 0,void 0,0],XAF:[\"FCFA\",void 0,0],XCD:[\"EC$\",\"$\"],XOF:[\"CFA\",void 0,0],XPF:[\"CFPF\",void 0,0],YER:[void 0,void 0,0],ZAR:[void 0,\"R\"],ZMK:[void 0,void 0,0],ZMW:[void 0,\"ZK\"],ZWD:[void 0,void 0,0]};function Ie(e){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.LocaleId]}function Pe(e,t,n){var r=o.ɵfindLocaleData(e);return He(He([r[o.ɵLocaleDataIndex.DayPeriodsFormat],r[o.ɵLocaleDataIndex.DayPeriodsStandalone]],t),n)}function Ae(e,t,n){var r=o.ɵfindLocaleData(e);return He(He([r[o.ɵLocaleDataIndex.DaysFormat],r[o.ɵLocaleDataIndex.DaysStandalone]],t),n)}function Me(e,t,n){var r=o.ɵfindLocaleData(e);return He(He([r[o.ɵLocaleDataIndex.MonthsFormat],r[o.ɵLocaleDataIndex.MonthsStandalone]],t),n)}function Re(e,t){return He(o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.Eras],t)}function Ne(e,t){return He(o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.DateFormat],t)}function je(e,t){return He(o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.TimeFormat],t)}function Fe(e,t){return He(o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.DateTimeFormat],t)}function Le(e,t){var n=o.ɵfindLocaleData(e),r=n[o.ɵLocaleDataIndex.NumberSymbols][t];if(void 0===r){if(t===x.NumberSymbol.CurrencyDecimal)return n[o.ɵLocaleDataIndex.NumberSymbols][x.NumberSymbol.Decimal];if(t===x.NumberSymbol.CurrencyGroup)return n[o.ɵLocaleDataIndex.NumberSymbols][x.NumberSymbol.Group]}return r}function Ve(e,t){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.NumberFormats][t]}(xe=x.NumberFormatStyle||(x.NumberFormatStyle={}))[xe.Decimal=0]=\"Decimal\",xe[xe.Percent=1]=\"Percent\",xe[xe.Currency=2]=\"Currency\",xe[xe.Scientific=3]=\"Scientific\",(Ce=x.Plural||(x.Plural={}))[Ce.Zero=0]=\"Zero\",Ce[Ce.One=1]=\"One\",Ce[Ce.Two=2]=\"Two\",Ce[Ce.Few=3]=\"Few\",Ce[Ce.Many=4]=\"Many\",Ce[Ce.Other=5]=\"Other\",(Se=x.FormStyle||(x.FormStyle={}))[Se.Format=0]=\"Format\",Se[Se.Standalone=1]=\"Standalone\",(Ee=x.TranslationWidth||(x.TranslationWidth={}))[Ee.Narrow=0]=\"Narrow\",Ee[Ee.Abbreviated=1]=\"Abbreviated\",Ee[Ee.Wide=2]=\"Wide\",Ee[Ee.Short=3]=\"Short\",(Oe=x.FormatWidth||(x.FormatWidth={}))[Oe.Short=0]=\"Short\",Oe[Oe.Medium=1]=\"Medium\",Oe[Oe.Long=2]=\"Long\",Oe[Oe.Full=3]=\"Full\",(ke=x.NumberSymbol||(x.NumberSymbol={}))[ke.Decimal=0]=\"Decimal\",ke[ke.Group=1]=\"Group\",ke[ke.List=2]=\"List\",ke[ke.PercentSign=3]=\"PercentSign\",ke[ke.PlusSign=4]=\"PlusSign\",ke[ke.MinusSign=5]=\"MinusSign\",ke[ke.Exponential=6]=\"Exponential\",ke[ke.SuperscriptingExponent=7]=\"SuperscriptingExponent\",ke[ke.PerMille=8]=\"PerMille\",ke[ke[1/0]=9]=\"Infinity\",ke[ke.NaN=10]=\"NaN\",ke[ke.TimeSeparator=11]=\"TimeSeparator\",ke[ke.CurrencyDecimal=12]=\"CurrencyDecimal\",ke[ke.CurrencyGroup=13]=\"CurrencyGroup\",(De=x.WeekDay||(x.WeekDay={}))[De.Sunday=0]=\"Sunday\",De[De.Monday=1]=\"Monday\",De[De.Tuesday=2]=\"Tuesday\",De[De.Wednesday=3]=\"Wednesday\",De[De.Thursday=4]=\"Thursday\",De[De.Friday=5]=\"Friday\",De[De.Saturday=6]=\"Saturday\";var Be=o.ɵgetLocalePluralCase;function Ue(e){if(!e[o.ɵLocaleDataIndex.ExtraData])throw new Error('Missing extra locale data for the locale \"'+e[o.ɵLocaleDataIndex.LocaleId]+'\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.')}function ze(e){var t=o.ɵfindLocaleData(e);return Ue(t),(t[o.ɵLocaleDataIndex.ExtraData][2]||[]).map(function(e){return\"string\"==typeof e?We(e):[We(e[0]),We(e[1])]})}function qe(e,t,n){var r=o.ɵfindLocaleData(e);return Ue(r),He(He([r[o.ɵLocaleDataIndex.ExtraData][0],r[o.ɵLocaleDataIndex.ExtraData][1]],t)||[],n)||[]}function He(e,t){for(var n=t;-1<n;n--)if(void 0!==e[n])return e[n];throw new Error(\"Locale data API: locale data undefined\")}function We(e){var t=d(e.split(\":\"),2);return{hours:+t[0],minutes:+t[1]}}function Ge(e,t,n){void 0===n&&(n=\"en\");var r=function(e){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.Currencies]}(n)[e]||Te[e]||[],i=r[1];return\"narrow\"===t&&\"string\"==typeof i?i:r[0]||e}var Ye=2;function Ke(e){var t,n=Te[e];return n&&(t=n[2]),\"number\"==typeof t?t:Ye}var Ze,Qe,Xe,$e,Je,et,tt=/^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/,nt={},rt=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{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]*)/;function it(e,t,n,r){var i=function(e){if(mt(e))return e;if(\"number\"==typeof e&&!isNaN(e))return new Date(e);if(\"string\"==typeof e){e=e.trim();var t=parseFloat(e);if(!isNaN(e-t))return new Date(t);if(/^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(e)){var n=d(e.split(\"-\").map(function(e){return+e}),3),r=n[0],i=n[1],o=n[2];return new Date(r,i-1,o)}var a;if(a=e.match(tt))return function(e){var t=new Date(0),n=0,r=0,i=e[8]?t.setUTCFullYear:t.setFullYear,o=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=Number(e[9]+e[10]),r=Number(e[9]+e[11]));i.call(t,Number(e[1]),Number(e[2])-1,Number(e[3]));var a=Number(e[4]||0)-n,s=Number(e[5]||0)-r,l=Number(e[6]||0),u=Math.round(1e3*parseFloat(\"0.\"+(e[7]||0)));return o.call(t,a,s,l,u),t}(a)}var s=new Date(e);if(mt(s))return s;throw new Error('Unable to convert \"'+e+'\" into a date')}(e);t=function e(t,n){var r=Ie(t);nt[r]=nt[r]||{};if(nt[r][n])return nt[r][n];var i=\"\";switch(n){case\"shortDate\":i=Ne(t,x.FormatWidth.Short);break;case\"mediumDate\":i=Ne(t,x.FormatWidth.Medium);break;case\"longDate\":i=Ne(t,x.FormatWidth.Long);break;case\"fullDate\":i=Ne(t,x.FormatWidth.Full);break;case\"shortTime\":i=je(t,x.FormatWidth.Short);break;case\"mediumTime\":i=je(t,x.FormatWidth.Medium);break;case\"longTime\":i=je(t,x.FormatWidth.Long);break;case\"fullTime\":i=je(t,x.FormatWidth.Full);break;case\"short\":var o=e(t,\"shortTime\"),a=e(t,\"shortDate\");i=ot(Fe(t,x.FormatWidth.Short),[o,a]);break;case\"medium\":var s=e(t,\"mediumTime\"),l=e(t,\"mediumDate\");i=ot(Fe(t,x.FormatWidth.Medium),[s,l]);break;case\"long\":var u=e(t,\"longTime\"),c=e(t,\"longDate\");i=ot(Fe(t,x.FormatWidth.Long),[u,c]);break;case\"full\":var p=e(t,\"fullTime\"),d=e(t,\"fullDate\");i=ot(Fe(t,x.FormatWidth.Full),[p,d])}i&&(nt[r][n]=i);return i}(n,t)||t;for(var o,a=[];t;){if(!(o=rt.exec(t))){a.push(t);break}var s=(a=a.concat(o.slice(1))).pop();if(!s)break;t=s}var l=i.getTimezoneOffset();r&&(l=ft(r,l),i=function(e,t,n){var r=n?-1:1,i=e.getTimezoneOffset(),o=ft(t,i);return function(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}(e,r*(o-i))}(i,r,!0));var u=\"\";return a.forEach(function(e){var t=function(e){if(ht[e])return ht[e];var t;switch(e){case\"G\":case\"GG\":case\"GGG\":t=lt(Je.Eras,x.TranslationWidth.Abbreviated);break;case\"GGGG\":t=lt(Je.Eras,x.TranslationWidth.Wide);break;case\"GGGGG\":t=lt(Je.Eras,x.TranslationWidth.Narrow);break;case\"y\":t=st(Xe.FullYear,1,0,!1,!0);break;case\"yy\":t=st(Xe.FullYear,2,0,!0,!0);break;case\"yyy\":t=st(Xe.FullYear,3,0,!1,!0);break;case\"yyyy\":t=st(Xe.FullYear,4,0,!1,!0);break;case\"M\":case\"L\":t=st(Xe.Month,1,1);break;case\"MM\":case\"LL\":t=st(Xe.Month,2,1);break;case\"MMM\":t=lt(Je.Months,x.TranslationWidth.Abbreviated);break;case\"MMMM\":t=lt(Je.Months,x.TranslationWidth.Wide);break;case\"MMMMM\":t=lt(Je.Months,x.TranslationWidth.Narrow);break;case\"LLL\":t=lt(Je.Months,x.TranslationWidth.Abbreviated,x.FormStyle.Standalone);break;case\"LLLL\":t=lt(Je.Months,x.TranslationWidth.Wide,x.FormStyle.Standalone);break;case\"LLLLL\":t=lt(Je.Months,x.TranslationWidth.Narrow,x.FormStyle.Standalone);break;case\"w\":t=dt(1);break;case\"ww\":t=dt(2);break;case\"W\":t=dt(1,!0);break;case\"d\":t=st(Xe.Date,1);break;case\"dd\":t=st(Xe.Date,2);break;case\"E\":case\"EE\":case\"EEE\":t=lt(Je.Days,x.TranslationWidth.Abbreviated);break;case\"EEEE\":t=lt(Je.Days,x.TranslationWidth.Wide);break;case\"EEEEE\":t=lt(Je.Days,x.TranslationWidth.Narrow);break;case\"EEEEEE\":t=lt(Je.Days,x.TranslationWidth.Short);break;case\"a\":case\"aa\":case\"aaa\":t=lt(Je.DayPeriods,x.TranslationWidth.Abbreviated);break;case\"aaaa\":t=lt(Je.DayPeriods,x.TranslationWidth.Wide);break;case\"aaaaa\":t=lt(Je.DayPeriods,x.TranslationWidth.Narrow);break;case\"b\":case\"bb\":case\"bbb\":t=lt(Je.DayPeriods,x.TranslationWidth.Abbreviated,x.FormStyle.Standalone,!0);break;case\"bbbb\":t=lt(Je.DayPeriods,x.TranslationWidth.Wide,x.FormStyle.Standalone,!0);break;case\"bbbbb\":t=lt(Je.DayPeriods,x.TranslationWidth.Narrow,x.FormStyle.Standalone,!0);break;case\"B\":case\"BB\":case\"BBB\":t=lt(Je.DayPeriods,x.TranslationWidth.Abbreviated,x.FormStyle.Format,!0);break;case\"BBBB\":t=lt(Je.DayPeriods,x.TranslationWidth.Wide,x.FormStyle.Format,!0);break;case\"BBBBB\":t=lt(Je.DayPeriods,x.TranslationWidth.Narrow,x.FormStyle.Format,!0);break;case\"h\":t=st(Xe.Hours,1,-12);break;case\"hh\":t=st(Xe.Hours,2,-12);break;case\"H\":t=st(Xe.Hours,1);break;case\"HH\":t=st(Xe.Hours,2);break;case\"m\":t=st(Xe.Minutes,1);break;case\"mm\":t=st(Xe.Minutes,2);break;case\"s\":t=st(Xe.Seconds,1);break;case\"ss\":t=st(Xe.Seconds,2);break;case\"S\":t=st(Xe.FractionalSeconds,1);break;case\"SS\":t=st(Xe.FractionalSeconds,2);break;case\"SSS\":t=st(Xe.FractionalSeconds,3);break;case\"Z\":case\"ZZ\":case\"ZZZ\":t=ut(Ze.Short);break;case\"ZZZZZ\":t=ut(Ze.Extended);break;case\"O\":case\"OO\":case\"OOO\":case\"z\":case\"zz\":case\"zzz\":t=ut(Ze.ShortGMT);break;case\"OOOO\":case\"ZZZZ\":case\"zzzz\":t=ut(Ze.Long);break;default:return null}return ht[e]=t}(e);u+=t?t(i,n,l):\"''\"===e?\"'\":e.replace(/(^'|'$)/g,\"\").replace(/''/g,\"'\")}),u}function ot(e,n){return n&&(e=e.replace(/\\{([^}]+)}/g,function(e,t){return null!=n&&t in n?n[t]:e})),e}function at(e,t,n,r,i){void 0===n&&(n=\"-\");var o=\"\";(e<0||i&&e<=0)&&(i?e=1-e:(e=-e,o=n));for(var a=String(e);a.length<t;)a=\"0\"+a;return r&&(a=a.substr(a.length-t)),o+a}function st(i,o,a,s,l){return void 0===a&&(a=0),void 0===s&&(s=!1),void 0===l&&(l=!1),function(e,t){var n=function(e,t){switch(e){case Xe.FullYear:return t.getFullYear();case Xe.Month:return t.getMonth();case Xe.Date:return t.getDate();case Xe.Hours:return t.getHours();case Xe.Minutes:return t.getMinutes();case Xe.Seconds:return t.getSeconds();case Xe.FractionalSeconds:return t.getMilliseconds();case Xe.Day:return t.getDay();default:throw new Error('Unknown DateType value \"'+e+'\".')}}(i,e);if((0<a||-a<n)&&(n+=a),i===Xe.Hours)0===n&&-12===a&&(n=12);else if(i===Xe.FractionalSeconds)return function(e,t){return at(e,3).substr(0,t)}(n,o);var r=Le(t,x.NumberSymbol.MinusSign);return at(n,o,r,s,l)}}function lt(n,r,i,o){return void 0===i&&(i=x.FormStyle.Format),void 0===o&&(o=!1),function(e,t){return function(e,t,n,r,i,o){switch(n){case Je.Months:return Me(t,i,r)[e.getMonth()];case Je.Days:return Ae(t,i,r)[e.getDay()];case Je.DayPeriods:var c=e.getHours(),p=e.getMinutes();if(o){var d,a=ze(t),h=qe(t,i,r);if(a.forEach(function(e,t){if(Array.isArray(e)){var n=e[0],r=n.hours,i=n.minutes,o=e[1],a=o.hours,s=o.minutes;r<=c&&i<=p&&(c<a||c===a&&p<s)&&(d=h[t])}else{var l=e.hours,u=e.minutes;l===c&&u===p&&(d=h[t])}}),d)return d}return Pe(t,i,r)[c<12?0:1];case Je.Eras:return Re(t,r)[e.getFullYear()<=0?0:1];default:throw new Error(\"unexpected translation type \"+n)}}(e,t,n,r,i,o)}}function ut(a){return function(e,t,n){var r=-1*n,i=Le(t,x.NumberSymbol.MinusSign),o=0<r?Math.floor(r/60):Math.ceil(r/60);switch(a){case Ze.Short:return(0<=r?\"+\":\"\")+at(o,2,i)+at(Math.abs(r%60),2,i);case Ze.ShortGMT:return\"GMT\"+(0<=r?\"+\":\"\")+at(o,1,i);case Ze.Long:return\"GMT\"+(0<=r?\"+\":\"\")+at(o,2,i)+\":\"+at(Math.abs(r%60),2,i);case Ze.Extended:return 0===n?\"Z\":(0<=r?\"+\":\"\")+at(o,2,i)+\":\"+at(Math.abs(r%60),2,i);default:throw new Error('Unknown zone width \"'+a+'\"')}}}(Qe=Ze=Ze||{})[Qe.Short=0]=\"Short\",Qe[Qe.ShortGMT=1]=\"ShortGMT\",Qe[Qe.Long=2]=\"Long\",Qe[Qe.Extended=3]=\"Extended\",($e=Xe=Xe||{})[$e.FullYear=0]=\"FullYear\",$e[$e.Month=1]=\"Month\",$e[$e.Date=2]=\"Date\",$e[$e.Hours=3]=\"Hours\",$e[$e.Minutes=4]=\"Minutes\",$e[$e.Seconds=5]=\"Seconds\",$e[$e.FractionalSeconds=6]=\"FractionalSeconds\",$e[$e.Day=7]=\"Day\",(et=Je=Je||{})[et.DayPeriods=0]=\"DayPeriods\",et[et.Days=1]=\"Days\",et[et.Months=2]=\"Months\",et[et.Eras=3]=\"Eras\";var ct=0,pt=4;function dt(s,l){return void 0===l&&(l=!1),function(e,t){var n;if(l){var r=new Date(e.getFullYear(),e.getMonth(),1).getDay()-1,i=e.getDate();n=1+Math.floor((i+r)/7)}else{var o=function(e){var t=new Date(e,ct,1).getDay();return new Date(e,0,1+(t<=pt?pt:pt+7)-t)}(e.getFullYear()),a=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+(pt-e.getDay()))}(e).getTime()-o.getTime();n=1+Math.round(a/6048e5)}return at(n,s,Le(t,x.NumberSymbol.MinusSign))}}var ht={};function ft(e,t){e=e.replace(/:/g,\"\");var n=Date.parse(\"Jan 01, 1970 00:00:00 \"+e)/6e4;return isNaN(n)?t:n}function mt(e){return e instanceof Date&&!isNaN(e.valueOf())}var vt=/^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/,yt=22,gt=\".\",_t=\"0\",bt=\";\",wt=\",\",xt=\"#\";function Ct(e,t,n,r,i,o,a){void 0===a&&(a=!1);var s=\"\",l=!1;if(isFinite(e)){var u=function(e){var t,n,r,i,o,a=Math.abs(e)+\"\",s=0;-1<(n=a.indexOf(gt))&&(a=a.replace(gt,\"\"));0<(r=a.search(/e/i))?(n<0&&(n=r),n+=+a.slice(r+1),a=a.substring(0,r)):n<0&&(n=a.length);for(r=0;a.charAt(r)===_t;r++);if(r===(o=a.length))t=[0],n=1;else{for(o--;a.charAt(o)===_t;)o--;for(n-=r,t=[],i=0;r<=o;r++,i++)t[i]=Number(a.charAt(r))}yt<n&&(t=t.splice(0,yt-1),s=n-1,n=1);return{digits:t,exponent:s,integerLen:n}}(e);a&&(u=function(e){if(0===e.digits[0])return e;var t=e.digits.length-e.integerLen;e.exponent?e.exponent+=2:(0==t?e.digits.push(0,0):1==t&&e.digits.push(0),e.integerLen+=2);return e}(u));var c=t.minInt,p=t.minFrac,d=t.maxFrac;if(o){var h=o.match(vt);if(null===h)throw new Error(o+\" is not a valid digit info\");var f=h[1],m=h[3],v=h[5];null!=f&&(c=Dt(f)),null!=m&&(p=Dt(m)),null!=v?d=Dt(v):null!=m&&d<p&&(d=p)}!function(e,t,n){if(n<t)throw new Error(\"The minimum number of digits after fraction (\"+t+\") is higher than the maximum (\"+n+\").\");var r=e.digits,i=r.length-e.integerLen,o=Math.min(Math.max(t,i),n),a=o+e.integerLen,s=r[a];if(0<a){r.splice(Math.max(e.integerLen,a));for(var l=a;l<r.length;l++)r[l]=0}else{i=Math.max(0,i),e.integerLen=1,r.length=Math.max(1,a=o+1),r[0]=0;for(var u=1;u<a;u++)r[u]=0}if(5<=s)if(a-1<0){for(var c=0;a<c;c--)r.unshift(0),e.integerLen++;r.unshift(1),e.integerLen++}else r[a-1]++;for(;i<Math.max(0,o);i++)r.push(0);var p=0!==o,d=t+e.integerLen,h=r.reduceRight(function(e,t,n,r){return t+=e,r[n]=t<10?t:t-10,p&&(0===r[n]&&d<=n?r.pop():p=!1),10<=t?1:0},0);h&&(r.unshift(h),e.integerLen++)}(u,p,d);var y=u.digits,g=u.integerLen,_=u.exponent,b=[];for(l=y.every(function(e){return!e});g<c;g++)y.unshift(0);for(;g<0;g++)y.unshift(0);0<g?b=y.splice(g,y.length):(b=y,y=[0]);var w=[];for(y.length>=t.lgSize&&w.unshift(y.splice(-t.lgSize,y.length).join(\"\"));y.length>t.gSize;)w.unshift(y.splice(-t.gSize,y.length).join(\"\"));y.length&&w.unshift(y.join(\"\")),s=w.join(Le(n,r)),b.length&&(s+=Le(n,i)+b.join(\"\")),_&&(s+=Le(n,x.NumberSymbol.Exponential)+\"+\"+_)}else s=Le(n,x.NumberSymbol.Infinity);return s=e<0&&!l?t.negPre+s+t.negSuf:t.posPre+s+t.posSuf}function St(e,t,n,r,i){var o=kt(Ve(t,x.NumberFormatStyle.Currency),Le(t,x.NumberSymbol.MinusSign));return o.minFrac=Ke(r),o.maxFrac=o.minFrac,Ct(e,o,t,x.NumberSymbol.CurrencyGroup,x.NumberSymbol.CurrencyDecimal,i).replace(\"¤\",n).replace(\"¤\",\"\")}function Et(e,t,n){return Ct(e,kt(Ve(t,x.NumberFormatStyle.Percent),Le(t,x.NumberSymbol.MinusSign)),t,x.NumberSymbol.Group,x.NumberSymbol.Decimal,n,!0).replace(new RegExp(\"%\",\"g\"),Le(t,x.NumberSymbol.PercentSign))}function Ot(e,t,n){return Ct(e,kt(Ve(t,x.NumberFormatStyle.Decimal),Le(t,x.NumberSymbol.MinusSign)),t,x.NumberSymbol.Group,x.NumberSymbol.Decimal,n)}function kt(e,t){void 0===t&&(t=\"-\");var n={minInt:1,minFrac:0,maxFrac:0,posPre:\"\",posSuf:\"\",negPre:\"\",negSuf:\"\",gSize:0,lgSize:0},r=e.split(bt),i=r[0],o=r[1],a=-1!==i.indexOf(gt)?i.split(gt):[i.substring(0,i.lastIndexOf(_t)+1),i.substring(i.lastIndexOf(_t)+1)],s=a[0],l=a[1]||\"\";n.posPre=s.substr(0,s.indexOf(xt));for(var u=0;u<l.length;u++){var c=l.charAt(u);c===_t?n.minFrac=n.maxFrac=u+1:c===xt?n.maxFrac=u+1:n.posSuf+=c}var p=s.split(wt);if(n.gSize=p[1]?p[1].length:0,n.lgSize=p[2]||p[1]?(p[2]||p[1]).length:0,o){var d=i.length-n.posPre.length-n.posSuf.length,h=o.indexOf(xt);n.negPre=o.substr(0,h).replace(/'/g,\"\"),n.negSuf=o.substr(h+d).replace(/'/g,\"\")}else n.negPre=t+n.posPre,n.negSuf=n.posSuf;return n}function Dt(e){var t=parseInt(e);if(isNaN(t))throw new Error(\"Invalid integer literal when parsing \"+e);return t}function Tt(){}function It(e,t,n,r){var i=\"=\"+e;if(-1<t.indexOf(i))return i;if(i=n.getPluralCategory(e,r),-1<t.indexOf(i))return i;if(-1<t.indexOf(\"other\"))return\"other\";throw new Error('No plural message found for value \"'+e+'\"')}var Pt,At=(e(Mt,Pt=Tt),Mt.prototype.getPluralCategory=function(e,t){switch(Be(t||this.locale)(e)){case x.Plural.Zero:return\"zero\";case x.Plural.One:return\"one\";case x.Plural.Two:return\"two\";case x.Plural.Few:return\"few\";case x.Plural.Many:return\"many\";default:return\"other\"}},Mt=t([o.Injectable(),n(0,o.Inject(o.LOCALE_ID)),a(\"design:paramtypes\",[String])],Mt));function Mt(e){var t=Pt.call(this)||this;return t.locale=e,t}function Rt(e,t,n){\"string\"!=typeof t&&(n=t,t=e[o.ɵLocaleDataIndex.LocaleId]),t=t.toLowerCase().replace(/_/g,\"-\"),o.ɵLOCALE_DATA[t]=e,n&&(o.ɵLOCALE_DATA[t][o.ɵLocaleDataIndex.ExtraData]=n)}var Nt=(jt.prototype.ngOnChanges=function(e){if(this._viewContainerRef.clear(),this._componentRef=null,this.ngComponentOutlet){var t=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;if(e.ngComponentOutletNgModuleFactory)if(this._moduleRef&&this._moduleRef.destroy(),this.ngComponentOutletNgModuleFactory){var n=t.get(o.NgModuleRef);this._moduleRef=this.ngComponentOutletNgModuleFactory.create(n.injector)}else this._moduleRef=null;var r=(this._moduleRef?this._moduleRef.componentFactoryResolver:t.get(o.ComponentFactoryResolver)).resolveComponentFactory(this.ngComponentOutlet);this._componentRef=this._viewContainerRef.createComponent(r,this._viewContainerRef.length,t,this.ngComponentOutletContent)}},jt.prototype.ngOnDestroy=function(){this._moduleRef&&this._moduleRef.destroy()},t([o.Input(),a(\"design:type\",o.Type)],jt.prototype,\"ngComponentOutlet\",void 0),t([o.Input(),a(\"design:type\",o.Injector)],jt.prototype,\"ngComponentOutletInjector\",void 0),t([o.Input(),a(\"design:type\",Array)],jt.prototype,\"ngComponentOutletContent\",void 0),t([o.Input(),a(\"design:type\",o.NgModuleFactory)],jt.prototype,\"ngComponentOutletNgModuleFactory\",void 0),jt=t([o.Directive({selector:\"[ngComponentOutlet]\"}),a(\"design:paramtypes\",[o.ViewContainerRef])],jt));function jt(e){this._viewContainerRef=e,this._componentRef=null,this._moduleRef=null}var Ft=(Object.defineProperty(Lt.prototype,\"first\",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(Lt.prototype,\"last\",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(Lt.prototype,\"even\",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(Lt.prototype,\"odd\",{get:function(){return!this.even},enumerable:!0,configurable:!0}),Lt);function Lt(e,t,n,r){this.$implicit=e,this.ngForOf=t,this.index=n,this.count=r}var Vt=(Object.defineProperty(Bt.prototype,\"ngForOf\",{set:function(e){this._ngForOf=e,this._ngForOfDirty=!0},enumerable:!0,configurable:!0}),Object.defineProperty(Bt.prototype,\"ngForTrackBy\",{get:function(){return this._trackByFn},set:function(e){o.isDevMode()&&null!=e&&\"function\"!=typeof e&&console&&console.warn&&console.warn(\"trackBy must be a function, but received \"+JSON.stringify(e)+\". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.\"),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(Bt.prototype,\"ngForTemplate\",{set:function(e){e&&(this._template=e)},enumerable:!0,configurable:!0}),Bt.prototype.ngDoCheck=function(){if(this._ngForOfDirty){this._ngForOfDirty=!1;var t=this._ngForOf;if(!this._differ&&t)try{this._differ=this._differs.find(t).create(this.ngForTrackBy)}catch(e){throw new Error(\"Cannot find a differ supporting object '\"+t+\"' of type '\"+function(e){return e.name||typeof e}(t)+\"'. NgFor only supports binding to Iterables such as Arrays.\")}}if(this._differ){var e=this._differ.diff(this._ngForOf);e&&this._applyChanges(e)}},Bt.prototype._applyChanges=function(e){var o=this,a=[];e.forEachOperation(function(e,t,n){if(null==e.previousIndex){var r=o._viewContainer.createEmbeddedView(o._template,new Ft(null,o._ngForOf,-1,-1),null===n?void 0:n),i=new Ut(e,r);a.push(i)}else null==n?o._viewContainer.remove(null===t?void 0:t):null!==t&&(r=o._viewContainer.get(t),o._viewContainer.move(r,n),i=new Ut(e,r),a.push(i))});for(var t=0;t<a.length;t++)this._perViewChange(a[t].view,a[t].record);t=0;for(var n=this._viewContainer.length;t<n;t++){var r=this._viewContainer.get(t);r.context.index=t,r.context.count=n,r.context.ngForOf=this._ngForOf}e.forEachIdentityChange(function(e){o._viewContainer.get(e.currentIndex).context.$implicit=e.item})},Bt.prototype._perViewChange=function(e,t){e.context.$implicit=t.item},Bt.ngTemplateContextGuard=function(e,t){return!0},t([o.Input(),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],Bt.prototype,\"ngForOf\",null),t([o.Input(),a(\"design:type\",Function),a(\"design:paramtypes\",[Function])],Bt.prototype,\"ngForTrackBy\",null),t([o.Input(),a(\"design:type\",o.TemplateRef),a(\"design:paramtypes\",[o.TemplateRef])],Bt.prototype,\"ngForTemplate\",null),Bt=t([o.Directive({selector:\"[ngFor][ngForOf]\"}),a(\"design:paramtypes\",[o.ViewContainerRef,o.TemplateRef,o.IterableDiffers])],Bt));function Bt(e,t,n){this._viewContainer=e,this._template=t,this._differs=n,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}var Ut=function(e,t){this.record=e,this.view=t};var zt=(Object.defineProperty(qt.prototype,\"ngIf\",{set:function(e){this._context.$implicit=this._context.ngIf=e,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(qt.prototype,\"ngIfThen\",{set:function(e){Wt(\"ngIfThen\",e),this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(qt.prototype,\"ngIfElse\",{set:function(e){Wt(\"ngIfElse\",e),this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),qt.prototype._updateView=function(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))},t([o.Input(),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],qt.prototype,\"ngIf\",null),t([o.Input(),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],qt.prototype,\"ngIfThen\",null),t([o.Input(),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],qt.prototype,\"ngIfElse\",null),qt=t([o.Directive({selector:\"[ngIf]\"}),a(\"design:paramtypes\",[o.ViewContainerRef,o.TemplateRef])],qt));function qt(e,t){this._viewContainer=e,this._context=new Ht,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=t}var Ht=function(){this.$implicit=null,this.ngIf=null};function Wt(e,t){if(!!(t&&!t.createEmbeddedView))throw new Error(e+\" must be a TemplateRef, but received '\"+o.ɵstringify(t)+\"'.\")}var Gt=(Yt.prototype.create=function(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)},Yt.prototype.destroy=function(){this._created=!1,this._viewContainerRef.clear()},Yt.prototype.enforceState=function(e){e&&!this._created?this.create():!e&&this._created&&this.destroy()},Yt);function Yt(e,t){this._viewContainerRef=e,this._templateRef=t,this._created=!1}var Kt=(Object.defineProperty(Zt.prototype,\"ngSwitch\",{set:function(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)},enumerable:!0,configurable:!0}),Zt.prototype._addCase=function(){return this._caseCount++},Zt.prototype._addDefault=function(e){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(e)},Zt.prototype._matchCase=function(e){var t=e==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||t,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),t},Zt.prototype._updateDefaultCases=function(e){if(this._defaultViews&&e!==this._defaultUsed){this._defaultUsed=e;for(var t=0;t<this._defaultViews.length;t++)this._defaultViews[t].enforceState(e)}},t([o.Input(),a(\"design:type\",Object),a(\"design:paramtypes\",[Object])],Zt.prototype,\"ngSwitch\",null),Zt=t([o.Directive({selector:\"[ngSwitch]\"})],Zt));function Zt(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}var Qt=(Xt.prototype.ngDoCheck=function(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))},t([o.Input(),a(\"design:type\",Object)],Xt.prototype,\"ngSwitchCase\",void 0),Xt=t([o.Directive({selector:\"[ngSwitchCase]\"}),n(2,o.Host()),a(\"design:paramtypes\",[o.ViewContainerRef,o.TemplateRef,Kt])],Xt));function Xt(e,t,n){(this.ngSwitch=n)._addCase(),this._view=new Gt(e,t)}var $t=Jt=t([o.Directive({selector:\"[ngSwitchDefault]\"}),n(2,o.Host()),a(\"design:paramtypes\",[o.ViewContainerRef,o.TemplateRef,Kt])],Jt);function Jt(e,t,n){n._addDefault(new Gt(e,t))}var en=(Object.defineProperty(tn.prototype,\"ngPlural\",{set:function(e){this._switchValue=e,this._updateView()},enumerable:!0,configurable:!0}),tn.prototype.addCase=function(e,t){this._caseViews[e]=t},tn.prototype._updateView=function(){this._clearViews();var e=Object.keys(this._caseViews),t=It(this._switchValue,e,this._localization);this._activateView(this._caseViews[t])},tn.prototype._clearViews=function(){this._activeView&&this._activeView.destroy()},tn.prototype._activateView=function(e){e&&(this._activeView=e,this._activeView.create())},t([o.Input(),a(\"design:type\",Number),a(\"design:paramtypes\",[Number])],tn.prototype,\"ngPlural\",null),tn=t([o.Directive({selector:\"[ngPlural]\"}),a(\"design:paramtypes\",[Tt])],tn));function tn(e){this._localization=e,this._caseViews={}}var nn=rn=t([o.Directive({selector:\"[ngPluralCase]\"}),n(0,o.Attribute(\"ngPluralCase\")),n(3,o.Host()),a(\"design:paramtypes\",[String,o.TemplateRef,o.ViewContainerRef,en])],rn);function rn(e,t,n,r){this.value=e;var i=!isNaN(Number(e));r.addCase(i?\"=\"+e:e,new Gt(n,t))}var on=(an.prototype.ngOnChanges=function(e){if(this._shouldRecreateView(e)){var t=this._viewContainerRef;this._viewRef&&t.remove(t.indexOf(this._viewRef)),this._viewRef=this.ngTemplateOutlet?t.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext):null}else this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)},an.prototype._shouldRecreateView=function(e){var t=e.ngTemplateOutletContext;return!!e.ngTemplateOutlet||t&&this._hasContextShapeChanged(t)},an.prototype._hasContextShapeChanged=function(e){var t,n,r=Object.keys(e.previousValue||{}),i=Object.keys(e.currentValue||{});if(r.length!==i.length)return!0;try{for(var o=p(i),a=o.next();!a.done;a=o.next()){var s=a.value;if(-1===r.indexOf(s))return!0}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return!1},an.prototype._updateExistingContext=function(e){var t,n;try{for(var r=p(Object.keys(e)),i=r.next();!i.done;i=r.next()){var o=i.value;this._viewRef.context[o]=this.ngTemplateOutletContext[o]}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},t([o.Input(),a(\"design:type\",Object)],an.prototype,\"ngTemplateOutletContext\",void 0),t([o.Input(),a(\"design:type\",Object)],an.prototype,\"ngTemplateOutlet\",void 0),an=t([o.Directive({selector:\"[ngTemplateOutlet]\"}),a(\"design:paramtypes\",[o.ViewContainerRef])],an));function an(e){this._viewContainerRef=e,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null}var sn=[T,Nt,Vt,zt,on,q,Kt,Qt,$t,en,nn];function ln(e,t){return Error(\"InvalidPipeArgument: '\"+t+\"' for pipe '\"+o.ɵstringify(e)+\"'\")}var un=(cn.prototype.createSubscription=function(e,t){return e.subscribe({next:t,error:function(e){throw e}})},cn.prototype.dispose=function(e){e.unsubscribe()},cn.prototype.onDestroy=function(e){e.unsubscribe()},cn);function cn(){}function pn(){}var dn,hn=new(pn.prototype.createSubscription=function(e,t){return e.then(t,function(e){throw e})},pn.prototype.dispose=function(e){},pn.prototype.onDestroy=function(e){},pn),fn=new un,mn=((dn=vn).prototype.ngOnDestroy=function(){this._subscription&&this._dispose()},vn.prototype.transform=function(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):o.ɵlooseIdentical(this._latestValue,this._latestReturnedValue)?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,o.WrappedValue.wrap(this._latestValue)):(e&&this._subscribe(e),this._latestReturnedValue=this._latestValue,this._latestValue)},vn.prototype._subscribe=function(t){var n=this;this._obj=t,this._strategy=this._selectStrategy(t),this._subscription=this._strategy.createSubscription(t,function(e){return n._updateLatestValue(t,e)})},vn.prototype._selectStrategy=function(e){if(o.ɵisPromise(e))return hn;if(o.ɵisObservable(e))return fn;throw ln(dn,e)},vn.prototype._dispose=function(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null},vn.prototype._updateLatestValue=function(e,t){e===this._obj&&(this._latestValue=t,this._ref.markForCheck())},vn=dn=t([o.Pipe({name:\"async\",pure:!1}),a(\"design:paramtypes\",[o.ChangeDetectorRef])],vn));function vn(e){this._ref=e,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}var yn,gn=((yn=_n).prototype.transform=function(e){if(!e)return e;if(\"string\"!=typeof e)throw ln(yn,e);return e.toLowerCase()},_n=yn=t([o.Pipe({name:\"lowercase\"})],_n));function _n(){}var bn,wn=/(?:[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,xn=((bn=Cn).prototype.transform=function(e){if(!e)return e;if(\"string\"!=typeof e)throw ln(bn,e);return e.replace(wn,function(e){return e[0].toUpperCase()+e.substr(1).toLowerCase()})},Cn=bn=t([o.Pipe({name:\"titlecase\"})],Cn));function Cn(){}var Sn,En=((Sn=On).prototype.transform=function(e){if(!e)return e;if(\"string\"!=typeof e)throw ln(Sn,e);return e.toUpperCase()},On=Sn=t([o.Pipe({name:\"uppercase\"})],On));function On(){}var kn,Dn=((kn=Tn).prototype.transform=function(e,t,n,r){if(void 0===t&&(t=\"mediumDate\"),null==e||\"\"===e||e!=e)return null;try{return it(e,t,r||this.locale,n)}catch(e){throw ln(kn,e.message)}},Tn=kn=t([o.Pipe({name:\"date\",pure:!0}),n(0,o.Inject(o.LOCALE_ID)),a(\"design:paramtypes\",[String])],Tn));function Tn(e){this.locale=e}var In,Pn=/#/g,An=((In=Mn).prototype.transform=function(e,t,n){if(null==e)return\"\";if(\"object\"!=typeof t||null===t)throw ln(In,t);return t[It(e,Object.keys(t),this._localization,n)].replace(Pn,e.toString())},Mn=In=t([o.Pipe({name:\"i18nPlural\",pure:!0}),a(\"design:paramtypes\",[Tt])],Mn));function Mn(e){this._localization=e}var Rn,Nn=((Rn=jn).prototype.transform=function(e,t){if(null==e)return\"\";if(\"object\"!=typeof t||\"string\"!=typeof e)throw ln(Rn,t);return t.hasOwnProperty(e)?t[e]:t.hasOwnProperty(\"other\")?t.other:\"\"},jn=Rn=t([o.Pipe({name:\"i18nSelect\",pure:!0})],jn));function jn(){}var Fn=(Ln.prototype.transform=function(e){return JSON.stringify(e,null,2)},Ln=t([o.Pipe({name:\"json\",pure:!1})],Ln));function Ln(){}var Vn=(Bn.prototype.transform=function(e,t){var n=this;if(void 0===t&&(t=Un),!e||!(e instanceof Map)&&\"object\"!=typeof e)return null;this.differ||(this.differ=this.differs.find(e).create());var r=this.differ.diff(e);return r&&(this.keyValues=[],r.forEachItem(function(e){n.keyValues.push(function(e,t){return{key:e,value:t}}(e.key,e.currentValue))}),this.keyValues.sort(t)),this.keyValues},Bn=t([o.Pipe({name:\"keyvalue\",pure:!1}),a(\"design:paramtypes\",[o.KeyValueDiffers])],Bn));function Bn(e){this.differs=e,this.keyValues=[]}function Un(e,t){var n=e.key,r=t.key;if(n===r)return 0;if(void 0===n)return 1;if(void 0===r)return-1;if(null===n)return 1;if(null===r)return-1;if(\"string\"==typeof n&&\"string\"==typeof r)return n<r?-1:1;if(\"number\"==typeof n&&\"number\"==typeof r)return n-r;if(\"boolean\"==typeof n&&\"boolean\"==typeof r)return n<r?-1:1;var i=String(n),o=String(r);return i==o?0:i<o?-1:1}var zn,qn=((zn=Hn).prototype.transform=function(e,t,n){if(Xn(e))return null;n=n||this._locale;try{return Ot($n(e),n,t)}catch(e){throw ln(zn,e.message)}},Hn=zn=t([o.Pipe({name:\"number\"}),n(0,o.Inject(o.LOCALE_ID)),a(\"design:paramtypes\",[String])],Hn));function Hn(e){this._locale=e}var Wn,Gn=((Wn=Yn).prototype.transform=function(e,t,n){if(Xn(e))return null;n=n||this._locale;try{return Et($n(e),n,t)}catch(e){throw ln(Wn,e.message)}},Yn=Wn=t([o.Pipe({name:\"percent\"}),n(0,o.Inject(o.LOCALE_ID)),a(\"design:paramtypes\",[String])],Yn));function Yn(e){this._locale=e}var Kn,Zn=((Kn=Qn).prototype.transform=function(e,t,n,r,i){if(void 0===n&&(n=\"symbol\"),Xn(e))return null;i=i||this._locale,\"boolean\"==typeof n&&(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\".'),n=n?\"symbol\":\"code\");var o=t||\"USD\";\"code\"!==n&&(o=\"symbol\"===n||\"symbol-narrow\"===n?Ge(o,\"symbol\"===n?\"wide\":\"narrow\",i):n);try{return St($n(e),i,o,t,r)}catch(e){throw ln(Kn,e.message)}},Qn=Kn=t([o.Pipe({name:\"currency\"}),n(0,o.Inject(o.LOCALE_ID)),a(\"design:paramtypes\",[String])],Qn));function Qn(e){this._locale=e}function Xn(e){return null==e||\"\"===e||e!=e}function $n(e){if(\"string\"==typeof e&&!isNaN(Number(e)-parseFloat(e)))return Number(e);if(\"number\"!=typeof e)throw new Error(e+\" is not a number\");return e}var Jn,er=((Jn=tr).prototype.transform=function(e,t,n){if(null==e)return e;if(!this.supports(e))throw ln(Jn,e);return e.slice(t,n)},tr.prototype.supports=function(e){return\"string\"==typeof e||Array.isArray(e)},tr=Jn=t([o.Pipe({name:\"slice\",pure:!1})],tr));function tr(){}var nr=[mn,En,gn,Fn,er,qn,Gn,xn,Zn,Dn,An,Nn,Vn],rr=ir=t([o.NgModule({declarations:[sn,nr],exports:[sn,nr],providers:[{provide:Tt,useClass:At}]})],ir);function ir(){}var or=\"browserWorkerApp\",ar=\"browserWorkerUi\";var sr=new o.Version(\"9.0.0-next.12\"),lr=(ur.ɵprov=o.ɵɵdefineInjectable({token:ur,providedIn:\"root\",factory:function(){return new cr(o.ɵɵinject(K),window,o.ɵɵinject(o.ErrorHandler))}}),ur);function ur(){}var cr=(pr.prototype.setOffset=function(e){Array.isArray(e)?this.offset=function(){return e}:this.offset=e},pr.prototype.getScrollPosition=function(){return this.supportScrollRestoration()?[this.window.scrollX,this.window.scrollY]:[0,0]},pr.prototype.scrollToPosition=function(e){this.supportScrollRestoration()&&this.window.scrollTo(e[0],e[1])},pr.prototype.scrollToAnchor=function(e){if(this.supportScrollRestoration()){e=this.window.CSS&&this.window.CSS.escape?this.window.CSS.escape(e):e.replace(/(\\\"|\\'\\ |:|\\.|\\[|\\]|,|=)/g,\"\\\\$1\");try{var t=this.document.querySelector(\"#\"+e);if(t)return void this.scrollToElement(t);var n=this.document.querySelector(\"[name='\"+e+\"']\");if(n)return void this.scrollToElement(n)}catch(e){this.errorHandler.handleError(e)}}},pr.prototype.setHistoryScrollRestoration=function(e){if(this.supportScrollRestoration()){var t=this.window.history;t&&t.scrollRestoration&&(t.scrollRestoration=e)}},pr.prototype.scrollToElement=function(e){var t=e.getBoundingClientRect(),n=t.left+this.window.pageXOffset,r=t.top+this.window.pageYOffset,i=this.offset();this.window.scrollTo(n-i[0],r-i[1])},pr.prototype.supportScrollRestoration=function(){try{return!!this.window&&!!this.window.scrollTo}catch(e){return!1}},pr);function pr(e,t,n){this.document=e,this.window=t,this.errorHandler=n,this.offset=function(){return[0,0]}}var dr=(hr.prototype.setOffset=function(e){},hr.prototype.getScrollPosition=function(){return[0,0]},hr.prototype.scrollToPosition=function(e){},hr.prototype.scrollToAnchor=function(e){},hr.prototype.setHistoryScrollRestoration=function(e){},hr);function hr(){}x.ɵangular_packages_common_common_k=sn,x.ɵangular_packages_common_common_c=S,x.ɵangular_packages_common_common_b=w,x.ɵangular_packages_common_common_a=_,x.ɵangular_packages_common_common_f=L,x.ɵangular_packages_common_common_e=j,x.ɵangular_packages_common_common_d=R,x.ɵangular_packages_common_common_i=be,x.ɵangular_packages_common_common_j=ue,x.ɵangular_packages_common_common_h=re,x.ɵangular_packages_common_common_g=X,x.ɵangular_packages_common_common_l=nr,x.ɵregisterLocaleData=Rt,x.registerLocaleData=Rt,x.formatDate=it,x.formatCurrency=St,x.formatNumber=Ot,x.formatPercent=Et,x.NgLocaleLocalization=At,x.NgLocalization=Tt,x.getNumberOfCurrencyDigits=Ke,x.getCurrencySymbol=Ge,x.getLocaleDayPeriods=Pe,x.getLocaleDayNames=Ae,x.getLocaleMonthNames=Me,x.getLocaleId=Ie,x.getLocaleEraNames=Re,x.getLocaleWeekEndRange=function(e){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.WeekendRange]},x.getLocaleFirstDayOfWeek=function(e){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.FirstDayOfWeek]},x.getLocaleDateFormat=Ne,x.getLocaleDateTimeFormat=Fe,x.getLocaleExtraDayPeriodRules=ze,x.getLocaleExtraDayPeriods=qe,x.getLocalePluralCase=Be,x.getLocaleTimeFormat=je,x.getLocaleNumberSymbol=Le,x.getLocaleNumberFormat=Ve,x.getLocaleCurrencyName=function(e){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.CurrencyName]||null},x.getLocaleCurrencySymbol=function(e){return o.ɵfindLocaleData(e)[o.ɵLocaleDataIndex.CurrencySymbol]||null},x.ɵparseCookieValue=function(e,t){var n,r;t=encodeURIComponent(t);try{for(var i=p(e.split(\";\")),o=i.next();!o.done;o=i.next()){var a=o.value,s=a.indexOf(\"=\"),l=d(-1==s?[a,\"\"]:[a.slice(0,s),a.slice(s+1)],2),u=l[0],c=l[1];if(u.trim()===t)return decodeURIComponent(c)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return null},x.CommonModule=rr,x.NgClass=T,x.NgClassBase=O,x.NgForOf=Vt,x.NgForOfContext=Ft,x.NgIf=zt,x.NgIfContext=Ht,x.NgPlural=en,x.NgPluralCase=nn,x.NgStyle=q,x.NgStyleBase=B,x.NgSwitch=Kt,x.NgSwitchCase=Qt,x.NgSwitchDefault=$t,x.NgTemplateOutlet=on,x.NgComponentOutlet=Nt,x.DOCUMENT=K,x.AsyncPipe=mn,x.DatePipe=Dn,x.I18nPluralPipe=An,x.I18nSelectPipe=Nn,x.JsonPipe=Fn,x.LowerCasePipe=gn,x.CurrencyPipe=Zn,x.DecimalPipe=qn,x.PercentPipe=Gn,x.SlicePipe=er,x.UpperCasePipe=En,x.TitleCasePipe=xn,x.KeyValuePipe=Vn,x.ɵPLATFORM_BROWSER_ID=\"browser\",x.ɵPLATFORM_SERVER_ID=\"server\",x.ɵPLATFORM_WORKER_APP_ID=or,x.ɵPLATFORM_WORKER_UI_ID=ar,x.isPlatformBrowser=function(e){return\"browser\"===e},x.isPlatformServer=function(e){return\"server\"===e},x.isPlatformWorkerApp=function(e){return e===or},x.isPlatformWorkerUi=function(e){return e===ar},x.VERSION=sr,x.ViewportScroller=lr,x.ɵNullViewportScroller=dr,x.ɵngClassDirectiveDef__POST_R3__=E,x.ɵngClassFactoryDef__POST_R3__=function(){},x.ɵNgClassImpl=v,x.ɵNgClassImplProvider__POST_R3__=C,x.ɵNgClassR2Impl=y,x.ɵngStyleDirectiveDef__POST_R3__=V,x.ɵngStyleFactoryDef__POST_R3__=function(){},x.ɵNgStyleImpl=P,x.ɵNgStyleImplProvider__POST_R3__=F,x.ɵNgStyleR2Impl=A,x.ɵDomAdapter=Y,x.ɵgetDOM=G,x.ɵsetRootDomAdapter=function(e){W=W||e},x.ɵBrowserPlatformLocation=ee,x.HashLocationStrategy=me,x.Location=ge,x.APP_BASE_HREF=pe,x.LocationStrategy=se,x.PathLocationStrategy=de,x.LOCATION_INITIALIZED=J,x.PlatformLocation=Z,Object.defineProperty(x,\"__esModule\",{value:!0})}),function(r){var i=\"object\"==typeof global?global:\"object\"==typeof self?self:\"object\"==typeof this?this:{};function o(n,r){return n!==i&&(\"function\"==typeof Object.create?Object.defineProperty(n,\"__esModule\",{value:!0}):n.__esModule=!0),function(e,t){return n[e]=r?r(e,t):t}}System.registerDynamic(\"npm:tslib/tslib.js\",[],!1,function(e,t,n){return function(e){r(o(i,o(e)))}.call(t,t,e)})}(function(e){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};__extends=function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)},__assign=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},__rest=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},__decorate=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a},__param=function(n,r){return function(e,t){r(e,t,n)}},__metadata=function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},__awaiter=function(o,a,s,l){return new(s=s||Promise)(function(e,t){function n(e){try{i(l.next(e))}catch(e){t(e)}}function r(e){try{i(l.throw(e))}catch(e){t(e)}}function i(t){t.done?e(t.value):new s(function(e){e(t.value)}).then(n,r)}i((l=l.apply(o,a||[])).next())})},__generator=function(n,r){var i,o,a,e,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return e={next:t(0),throw:t(1),return:t(2)},\"function\"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function t(t){return function(e){return function(t){if(i)throw new TypeError(\"Generator is already executing.\");for(;s;)try{if(i=1,o&&(a=2&t[0]?o.return:t[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,t[1])).done)return a;switch(o=0,a&&(t=[2&t[0],a.value]),t[0]){case 0:case 1:a=t;break;case 4:return s.label++,{value:t[1],done:!1};case 5:s.label++,o=t[1],t=[0];continue;case 7:t=s.ops.pop(),s.trys.pop();continue;default:if(!(a=0<(a=s.trys).length&&a[a.length-1])&&(6===t[0]||2===t[0])){s=0;continue}if(3===t[0]&&(!a||t[1]>a[0]&&t[1]<a[3])){s.label=t[1];break}if(6===t[0]&&s.label<a[1]){s.label=a[1],a=t;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(t);break}a[2]&&s.ops.pop(),s.trys.pop();continue}t=r.call(n,s)}catch(e){t=[6,e],o=0}finally{i=a=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([t,e])}}},__exportStar=function(e,t){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])},__values=function(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}},__read=function(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a},__spread=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(__read(arguments[t]));return e},__spreadArrays=function(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),i=0;for(t=0;t<n;t++)for(var o=arguments[t],a=0,s=o.length;a<s;a++,i++)r[i]=o[a];return r},__await=function(e){return this instanceof __await?(this.v=e,this):new __await(e)},__asyncGenerator=function(e,t,n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var i,o=n.apply(e,t||[]),a=[];return i={},r(\"next\"),r(\"throw\"),r(\"return\"),i[Symbol.asyncIterator]=function(){return this},i;function r(r){o[r]&&(i[r]=function(n){return new Promise(function(e,t){1<a.push([r,n,e,t])||s(r,n)})})}function s(e,t){try{!function(e){e.value instanceof __await?Promise.resolve(e.value.v).then(l,u):c(a[0][2],e)}(o[e](t))}catch(e){c(a[0][3],e)}}function l(e){s(\"next\",e)}function u(e){s(\"throw\",e)}function c(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}},__asyncDelegator=function(r){var e,i;return e={},t(\"next\"),t(\"throw\",function(e){throw e}),t(\"return\"),e[Symbol.iterator]=function(){return this},e;function t(t,n){e[t]=r[t]?function(e){return(i=!i)?{value:__await(r[t](e)),done:\"return\"===t}:n?n(e):e}:n}},__asyncValues=function(i){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var e,t=i[Symbol.asyncIterator];return t?t.call(i):(i=\"function\"==typeof __values?__values(i):i[Symbol.iterator](),e={},n(\"next\"),n(\"throw\"),n(\"return\"),e[Symbol.asyncIterator]=function(){return this},e);function n(r){e[r]=i[r]&&function(n){return new Promise(function(e,t){(function(t,e,n,r){Promise.resolve(r).then(function(e){t({value:e,done:n})},e)})(e,t,(n=i[r](n)).done,n.value)})}}},__makeTemplateObject=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},__importStar=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t},__importDefault=function(e){return e&&e.__esModule?e:{default:e}},e(\"__extends\",__extends),e(\"__assign\",__assign),e(\"__rest\",__rest),e(\"__decorate\",__decorate),e(\"__param\",__param),e(\"__metadata\",__metadata),e(\"__awaiter\",__awaiter),e(\"__generator\",__generator),e(\"__exportStar\",__exportStar),e(\"__values\",__values),e(\"__read\",__read),e(\"__spread\",__spread),e(\"__spreadArrays\",__spreadArrays),e(\"__await\",__await),e(\"__asyncGenerator\",__asyncGenerator),e(\"__asyncDelegator\",__asyncDelegator),e(\"__asyncValues\",__asyncValues),e(\"__makeTemplateObject\",__makeTemplateObject),e(\"__importStar\",__importStar),e(\"__importDefault\",__importDefault)}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/core/bundles/core.umd.js\",[\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(N,u,c){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function p(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var l=function(){return(l=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function e(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)(i=e[s])&&(a=(o<3?i(a):3<o?i(t,n,a):i(t,n))||a);return 3<o&&a&&Object.defineProperty(t,n,a),a}function t(n,r){return function(e,t){r(e,t,n)}}function n(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function y(e){var t=\"function\"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function j(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function O(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(j(arguments[t]));return e}var d=\"__annotations__\",h=\"__parameters__\",f=\"__prop__metadata__\";function i(e,t,n,i,o){var a=m(t);function s(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(this instanceof s)return a.call.apply(a,O([this],t)),this;var r=new((e=s).bind.apply(e,O([void 0],t)));return function(e){return o&&o.apply(void 0,O([e],t)),(e.hasOwnProperty(d)?e[d]:Object.defineProperty(e,d,{value:[]})[d]).push(r),i&&i(e),e}}return n&&(s.prototype=Object.create(n.prototype)),s.prototype.ngMetadataName=e,s.annotationCls=s}function m(i){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(i){var n=i.apply(void 0,O(e));for(var r in n)this[r]=n[r]}}}function o(e,t,n){var o=m(t);function a(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(this instanceof a)return o.apply(this,t),this;var i=new((e=a).bind.apply(e,O([void 0],t)));return r.annotation=i,r;function r(e,t,n){for(var r=e.hasOwnProperty(h)?e[h]:Object.defineProperty(e,h,{value:[]})[h];r.length<=n;)r.push(null);return(r[n]=r[n]||[]).push(i),e}}return n&&(a.prototype=Object.create(n.prototype)),a.prototype.ngMetadataName=e,a.annotationCls=a}function a(e,t,n,a){var r=m(t);function s(){for(var e,i=[],t=0;t<arguments.length;t++)i[t]=arguments[t];if(this instanceof s)return r.apply(this,i),this;var o=new((e=s).bind.apply(e,O([void 0],i)));return function(e,t){var n=e.constructor,r=n.hasOwnProperty(f)?n[f]:Object.defineProperty(n,f,{value:{}})[f];r[t]=r.hasOwnProperty(t)&&r[t]||[],r[t].unshift(o),a&&a.apply(void 0,O([e,t],i))}}return n&&(s.prototype=Object.create(n.prototype)),s.prototype.ngMetadataName=e,s.annotationCls=s}function s(e){return{token:e}}function v(e){return{attributeName:e}}var g,_=o(\"Inject\",s),b=o(\"Optional\"),w=o(\"Self\"),x=o(\"SkipSelf\"),C=o(\"Host\"),S=o(\"Attribute\",v);function E(e){for(var t in e)if(e[t]===E)return t;throw Error(\"Could not find renamed property on target object.\")}function k(e,t){for(var n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function D(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}(g=N.InjectFlags||(N.InjectFlags={}))[g.Default=0]=\"Default\",g[g.Host=1]=\"Host\",g[g.Self=2]=\"Self\",g[g.SkipSelf=4]=\"SkipSelf\",g[g.Optional=8]=\"Optional\";var T=D;function I(e){return{factory:e.factory,providers:e.providers||[],imports:e.imports||[]}}function P(e){var t=e[M]||e[F];return t&&t.token===e?t:null}function A(e){return e&&(e.hasOwnProperty(R)||e.hasOwnProperty(L))?e[R]:null}var M=E({\"ɵprov\":E}),R=E({\"ɵinj\":E}),F=E({ngInjectableDef:E}),L=E({ngInjectorDef:E});function V(e){if(\"string\"==typeof e)return e;if(Array.isArray(e))return\"[\"+e.map(V).join(\", \")+\"]\";if(null==e)return\"\"+e;if(e.overriddenName)return\"\"+e.overriddenName;if(e.name)return\"\"+e.name;var t=e.toString();if(null==t)return\"\"+t;var n=t.indexOf(\"\\n\");return-1===n?t:t.substring(0,n)}var B=E({__forward_ref__:E});function U(e){return e.__forward_ref__=U,e.toString=function(){return V(this())},e}function z(e){return q(e)?e():e}function q(e){return\"function\"==typeof e&&e.hasOwnProperty(B)&&e.__forward_ref__===U}var H,W,G=\"undefined\"!=typeof globalThis&&globalThis,Y=\"undefined\"!=typeof window&&window,K=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,Z=\"undefined\"!=typeof global&&global,Q=G||Z||Y||K;function X(){var e=Q.ng;if(!e||!e.ɵ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 e.ɵcompilerFacade}(W=H=H||{})[W.Token=0]=\"Token\",W[W.Attribute=1]=\"Attribute\",W[W.ChangeDetectorRef=2]=\"ChangeDetectorRef\";var $=E({\"ɵcmp\":E}),J=E({\"ɵdir\":E}),ee=E({\"ɵpipe\":E}),te=E({\"ɵmod\":E}),ne=E({\"ɵloc\":E}),re=E({ngBaseDef:E}),ie=E({\"ɵfac\":E}),oe=E({__NG_ELEMENT_ID__:E}),ae=(se.prototype.toString=function(){return\"InjectionToken \"+this._desc},se);function se(e,t){this._desc=e,this.ngMetadataName=\"InjectionToken\",this.ɵprov=void 0,\"number\"==typeof t?this.__NG_ELEMENT_ID__=t:void 0!==t&&(this.ɵprov=D({token:this,providedIn:t.providedIn||\"root\",factory:t.factory}))}var le,ue=new ae(\"INJECTOR\",-1),ce=new Object,pe=\"ngTempTokenPath\",de=\"ngTokenPath\",he=/\\n/gm,fe=\"ɵ\",me=\"__source\",ve=E({provide:String,useValue:E}),ye=void 0;function ge(e){var t=ye;return ye=e,t}function _e(e){var t=le;return le=e,t}function be(e,t){if(void 0===t&&(t=N.InjectFlags.Default),void 0===ye)throw new Error(\"inject() must be called from an injection context\");return null===ye?Ce(e,void 0,t):ye.get(e,t&N.InjectFlags.Optional?null:void 0,t)}function we(e,t){return void 0===t&&(t=N.InjectFlags.Default),(le||be)(z(e),t)}var xe=we;function Ce(e,t,n){var r=P(e);if(r&&\"root\"==r.providedIn)return void 0===r.value?r.value=r.factory():r.value;if(n&N.InjectFlags.Optional)return null;if(void 0!==t)return t;throw new Error(\"Injector: NOT_FOUND [\"+V(e)+\"]\")}function Se(e){for(var t=[],n=0;n<e.length;n++){var r=z(e[n]);if(Array.isArray(r)){if(0===r.length)throw new Error(\"Arguments array must have arguments.\");for(var i=void 0,o=N.InjectFlags.Default,a=0;a<r.length;a++){var s=r[a];s instanceof b||\"Optional\"===s.ngMetadataName||s===b?o|=N.InjectFlags.Optional:s instanceof x||\"SkipSelf\"===s.ngMetadataName||s===x?o|=N.InjectFlags.SkipSelf:s instanceof w||\"Self\"===s.ngMetadataName||s===w?o|=N.InjectFlags.Self:i=s instanceof _||s===_?s.token:s}t.push(we(i,o))}else t.push(we(r))}return t}var Ee=(Oe.prototype.get=function(e,t){if(void 0===t&&(t=ce),t!==ce)return t;var n=new Error(\"NullInjectorError: No provider for \"+V(e)+\"!\");throw n.name=\"NullInjectorError\",n},Oe);function Oe(){}function ke(e,t,n,r){var i=e[pe];throw t[me]&&i.unshift(t[me]),e.message=De(\"\\n\"+e.message,i,n,r),e[de]=i,e[pe]=null,e}function De(e,t,n,r){void 0===r&&(r=null),e=e&&\"\\n\"===e.charAt(0)&&e.charAt(1)==fe?e.substr(2):e;var i=V(t);if(Array.isArray(t))i=t.map(V).join(\" -> \");else if(\"object\"==typeof t){var o=[];for(var a in t)if(t.hasOwnProperty(a)){var s=t[a];o.push(a+\":\"+(\"string\"==typeof s?JSON.stringify(s):V(s)))}i=\"{\"+o.join(\", \")+\"}\"}return n+(r?\"(\"+r+\")\":\"\")+\"[\"+i+\"]: \"+e.replace(he,\"\\n  \")}var Te={\"ɵɵdefineInjectable\":D,\"ɵɵdefineInjector\":I,\"ɵɵinject\":we,\"ɵɵgetFactoryOf\":function t(e){var n=e;if(q(e))return function(){var e=t(z(n));return e?e():null};var r=P(n)||A(n);if(!r||void 0===r.factory)return null;return r.factory}};function Ie(){}var Pe,Ae,Me,Re=function(){};function Ne(e,t){for(var n=0;n<e.length;n++)t.push(e[n])}function je(e,t){void 0===t&&(t=e);for(var n=0;n<e.length;n++){var r=e[n];Array.isArray(r)?(t===e&&(t=e.slice(0,n)),je(r,t)):t!==e&&t.push(r)}return t}function Fe(e,t){e.forEach(function(e){return Array.isArray(e)?Fe(e,t):t(e)})}function Le(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ve(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function Be(e,t){for(var n=[],r=0;r<e;r++)n.push(t);return n}function Ue(e,t,n){e!=t&&Ye(n)}function ze(e,t,n){e==t&&Ye(n)}function qe(e,t,n){e===t&&Ye(n)}function He(e,t,n){t<=e&&Ye(n)}function We(e,t,n){e<=t&&Ye(n)}function Ge(e,t){null==e&&Ye(t)}function Ye(e){throw new Error(\"ASSERTION ERROR: \"+e)}function Ke(e){Ue(\"undefined\"!=typeof Node&&e instanceof Node||\"object\"==typeof e&&null!=e&&\"WebWorkerRenderNode\"===e.constructor.name,!0,\"The provided value must be an instance of a DOM Node but got \"+V(e))}function Ze(e,t){var n=e?e.length:0;He(t,n,\"Index expected to be less than \"+n+\" but got \"+t)}function Qe(e){return\"\"+{toString:e}}function Xe(){return!(\"undefined\"!=typeof ngDevMode&&!ngDevMode)&&(\"object\"!=typeof ngDevMode&&function(){var e=\"undefined\"!=typeof location?location.toString():\"\",t={namedConstructors:-1!=e.indexOf(\"ngDevMode=namedConstructors\"),firstTemplatePass: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,styleMap:0,styleMapCacheMiss:0,classMap:0,classMapCacheMiss:0,styleProp:0,stylePropCacheMiss:0,classProp:0,classPropCacheMiss:0,flushStyling:0,classesApplied:0,stylesApplied:0},n=-1===e.indexOf(\"ngDevMode=false\");Q.ngDevMode=n&&t}(),!!ngDevMode)}(Pe=N.ChangeDetectionStrategy||(N.ChangeDetectionStrategy={}))[Pe.OnPush=0]=\"OnPush\",Pe[Pe.Default=1]=\"Default\",(Ae=N.ɵChangeDetectorStatus||(N.ɵChangeDetectorStatus={}))[Ae.CheckOnce=0]=\"CheckOnce\",Ae[Ae.Checked=1]=\"Checked\",Ae[Ae.CheckAlways=2]=\"CheckAlways\",Ae[Ae.Detached=3]=\"Detached\",Ae[Ae.Errored=4]=\"Errored\",Ae[Ae.Destroyed=5]=\"Destroyed\",(Me=N.ViewEncapsulation||(N.ViewEncapsulation={}))[Me.Emulated=0]=\"Emulated\",Me[Me.Native=1]=\"Native\",Me[Me.None=2]=\"None\",Me[Me.ShadowDom=3]=\"ShadowDom\";var $e={},Je=[];(\"undefined\"==typeof ngDevMode||ngDevMode)&&Xe()&&(Object.freeze($e),Object.freeze(Je));var et=0;function tt(r){\"undefined\"!=typeof ngDevMode&&!ngDevMode||Xe();var e=r.type,t=e.prototype,i={},o={type:e,providersResolver:null,decls:r.decls,vars:r.vars,factory:null,template:r.template||null,consts:r.consts||null,ngContentSelectors:r.ngContentSelectors,hostBindings:r.hostBindings||null,contentQueries:r.contentQueries||null,declaredInputs:i,inputs:null,outputs:null,exportAs:r.exportAs||null,onChanges:null,onInit:t.ngOnInit||null,doCheck:t.ngDoCheck||null,afterContentInit:t.ngAfterContentInit||null,afterContentChecked:t.ngAfterContentChecked||null,afterViewInit:t.ngAfterViewInit||null,afterViewChecked:t.ngAfterViewChecked||null,onDestroy:t.ngOnDestroy||null,onPush:r.changeDetection===N.ChangeDetectionStrategy.OnPush,directiveDefs:null,pipeDefs:null,selectors:r.selectors,viewQuery:r.viewQuery||null,features:r.features||null,data:r.data||{},encapsulation:r.encapsulation||N.ViewEncapsulation.Emulated,id:\"c\",styles:r.styles||Je,_:null,setInput:null,schemas:r.schemas||null,tView:null};return o._=Qe(function(){var e=r.directives,t=r.features,n=r.pipes;o.id+=et++,o.inputs=st(r.inputs,i),o.outputs=st(r.outputs),t&&t.forEach(function(e){return e(o)}),o.directiveDefs=e?function(){return(\"function\"==typeof e?e():e).map(rt)}:null,o.pipeDefs=n?function(){return(\"function\"==typeof n?n():n).map(it)}:null}),o}function nt(e,t,n){var r=e.ɵcmp;r.directiveDefs=function(){return t.map(rt)},r.pipeDefs=function(){return n.map(it)}}function rt(e){var t=pt(e)||dt(e);if(ngDevMode&&!t)throw new Error(\"'\"+e.name+\"' is neither 'ComponentType' or 'DirectiveType'.\");return t}function it(e){var t=ht(e);if(ngDevMode&&!t)throw new Error(\"'\"+e.name+\"' is not a 'PipeType'.\");return t}function ot(e){return{type:e.type,bootstrap:e.bootstrap||Je,declarations:e.declarations||Je,imports:e.imports||Je,exports:e.exports||Je,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}}function at(t,n){return Qe(function(){var e=mt(t,!0);e.declarations=n.declarations||Je,e.imports=n.imports||Je,e.exports=n.exports||Je})}function st(e,t){if(null==e)return $e;var n={};for(var r in e)if(e.hasOwnProperty(r)){var i=e[r],o=i;Array.isArray(i)&&(o=i[1],i=i[0]),n[i]=r,t&&(t[i]=o)}return n}function lt(e){var t={};return{inputs:st(e.inputs,t),declaredInputs:t,outputs:st(e.outputs),viewQuery:e.viewQuery||null,contentQueries:e.contentQueries||null,hostBindings:e.hostBindings||null}}var ut=tt;function ct(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,onDestroy:e.type.prototype.ngOnDestroy||null}}function pt(e){return e[$]||null}function dt(e){return e[J]||null}function ht(e){return e[ee]||null}function ft(e,t){var n=e.hasOwnProperty(ie);if(!n&&!0===t&&ngDevMode)throw new Error(\"Type \"+V(e)+\" does not have 'ɵfac' property.\");return n?e[ie]:null}function mt(e,t){var n=e[te]||null;if(!n&&!0===t)throw new Error(\"Type \"+V(e)+\" does not have 'ɵmod' property.\");return n}var vt=0,yt=1,gt=2,_t=3,bt=4,wt=5,xt=6,Ct=7,St=8,Et=9,Ot=10,kt=11,Dt=12,Tt=13,It=14,Pt=15,At=16,Mt=17,Rt=18,Nt=19,jt=1,Ft=2,Lt=5,Vt=7,Bt=8,Ut=9;function zt(e){return Array.isArray(e)&&\"object\"==typeof e[jt]}function qt(e){return Array.isArray(e)&&!0===e[jt]}function Ht(e){return 0!=(8&e.flags)}function Wt(e){return 2==(2&e.flags)}function Gt(e){return 1==(1&e.flags)}function Yt(e){return null!==e.template}function Kt(e){return 0!=(512&e[gt])}function Zt(e,t){e.hasOwnProperty(\"tView_\")&&Ue(e.tView_,t[yt],\"This TNode does not belong to this LView.\")}function Qt(e,t){void 0===t&&(t=\"Type passed in is not ComponentType, it does not have 'ɵcmp' property.\"),pt(e)||Ye(t)}function Xt(e){Ge(e,\"previousOrParentTNode should exist!\"),Ge(e.parent,\"previousOrParentTNode should have a parent\")}function $t(e){Ge(e,\"LContainer must be defined\"),Ue(qt(e),!0,\"Expecting LContainer\")}function Jt(e){e&&Ue(zt(e),!0,\"Expecting LView or undefined or null\")}function en(e){Ge(e,\"LView must be defined\"),Ue(zt(e),!0,\"Expecting LView\")}function tn(e,t){Ue(e.firstTemplatePass,!0,t||\"Should only be called in first template pass.\")}var nn=8,rn=8,on=9,an=-1,sn=function(e,t,n){this.factory=e,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=n};function ln(e,t){Ge(e,\"should be called with a TNode\"),Ue(e.type,t,\"should be a \"+cn(t))}function un(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];Ge(t,\"should be called with a TNode\"),Ue(e.some(function(e){return t.type===e}),!0,\"Should be one of \"+e.map(cn).join(\", \")+\" but got \"+cn(t.type))}function cn(e){return 1==e?\"Projection\":0==e?\"Container\":5==e?\"IcuContainer\":2==e?\"View\":3==e?\"Element\":4==e?\"ElementContainer\":\"<unknown>\"}var pn,dn,hn={previousOrParentTNode:null,isParent:null,lView:null,selectedIndex:-2,contextLView:null,checkNoChangesMode:!1,elementDepthCount:0,bindingsEnabled:!0,currentNamespace:null,currentSanitizer:null,currentDirectiveDef:null,activeDirectiveId:0,bindingRootIndex:-1,currentQueryIndex:0,elementExitFn:null};function fn(e){hn.currentDirectiveDef=e}function mn(){return hn.bindingsEnabled}function vn(){hn.bindingsEnabled=!0}function yn(){hn.bindingsEnabled=!1}function gn(){return hn.lView}function _n(e){return(hn.selectedIndex&e)===e}function bn(e){void 0===e&&(e=null),Vn()!==e&&(_n(1)&&wn(),Bn(null===e?-1:e),hn.activeDirectiveId=0)}function wn(){hn.elementExitFn(),hn.selectedIndex&=-2}function xn(e){!function(e){hn.selectedIndex|=e}(1),null==hn.elementExitFn&&(hn.elementExitFn=e),ngDevMode&&Ue(hn.elementExitFn,e,\"Expecting to always get the same function\")}function Cn(){return hn.activeDirectiveId}function Sn(){hn.activeDirectiveId+=1}function En(e){hn.contextLView=e}function On(){return hn.previousOrParentTNode}function kn(e,t){hn.previousOrParentTNode=e,hn.isParent=t}function Dn(e,t){ngDevMode&&Jt(t),hn.previousOrParentTNode=e,hn.lView=t}function Tn(){return hn.isParent}function In(){hn.isParent=!1}function Pn(){return hn.checkNoChangesMode}function An(e){hn.checkNoChangesMode=e}function Mn(){return hn.bindingRootIndex}function Rn(e){hn.bindingRootIndex=e}function Nn(){return hn.currentQueryIndex}function jn(e){hn.currentQueryIndex=e}function Fn(e,t){_n(1)&&wn(),ngDevMode&&Jt(e);var n=hn.lView;return hn.previousOrParentTNode=t,hn.isParent=!0,hn.lView=hn.contextLView=e,n}function Ln(e){return void 0===e&&(e=1),hn.contextLView=function(e,t){for(;0<e;)ngDevMode&&Ge(t[At],\"Declaration view should be defined if nesting level is greater than 0.\"),t=t[At],e--;return t}(e,hn.contextLView),hn.contextLView[Et]}function Vn(){return hn.selectedIndex>>1}function Bn(e){hn.selectedIndex=e<<1}function Un(){hn.currentNamespace=\"http://www.w3.org/2000/svg\"}function zn(){hn.currentNamespace=\"http://www.w3.org/1998/MathML/\"}function qn(){Hn()}function Hn(){hn.currentNamespace=null}function Wn(e){hn.currentSanitizer=e}function Gn(){return hn.currentSanitizer}function Yn(e){return!!e.listen}(dn=pn=pn||{})[dn.Important=1]=\"Important\",dn[dn.DashCase=2]=\"DashCase\";var Kn={createRenderer:function(e,t){return document}};function Zn(e,t,n){for(var r=Yn(e),i=0;i<n.length;){var o=n[i];if(\"number\"==typeof o){if(0!==o)break;i++;var a=n[i++],s=n[i++],l=n[i++];ngDevMode&&ngDevMode.rendererSetAttribute++,r?e.setAttribute(t,s,l,a):t.setAttributeNS(a,s,l)}else{s=o,l=n[++i];ngDevMode&&ngDevMode.rendererSetAttribute++,Xn(s)?r&&e.setProperty(t,s,l):r?e.setAttribute(t,s,l):t.setAttribute(s,l),i++}}return i}function Qn(e){return 3===e||4===e||6===e}function Xn(e){return 64===e.charCodeAt(0)}function $n(e){return e!==an}function Jn(e){return 32767&e}function er(e){return e>>16}function tr(e,t){for(var n=er(e),r=t;0<n;)r=r[At],n--;return r}function nr(e){return\"string\"==typeof e?e:null==e?\"\":\"\"+e}function rr(e){return\"function\"==typeof e?e.name||e.toString():\"object\"==typeof e&&null!=e&&\"function\"==typeof e.type?e.type.name||e.type.toString():nr(e)}var ir=(\"undefined\"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(Q);function or(e){return{name:\"window\",target:e.ownerDocument.defaultView}}function ar(e){return{name:\"document\",target:e.ownerDocument}}function sr(e){return{name:\"body\",target:e.ownerDocument.body}}var lr=\"�\";function ur(e){return e instanceof Function?e():e}var cr={},pr=\"[MAP]\",dr=0,hr=null,fr=0,mr=1,vr=1;function yr(e){return[e]}function gr(e){return e[0]}function _r(e,t){return 0!=(gr(e)&t)}function br(e,t){var n=!1,r=gr(e),i=0!=(r&Ar(t));if(0==(1&r))n=!ngDevMode||i;else if(i){n=0==(8&r)&&6!=(6&r)}return n}function wr(e,t){e[0]|=t}function xr(e,t){return e[t+3]}function Cr(e,t){return 0!=(1&function(e,t){return 1&e[t+0]}(e,t))}function Sr(e,t,n){return e[t+(n?2:1)]}function Er(e){return Or(e)+1}function Or(e){return e[1]}function kr(e,t,n){return e[t+4+n]}function Dr(e,t){return e[t+4+Or(e)]}function Tr(e,t,n){e[t]=n}function Ir(e,t){return 0!==t?e[t]:null}function Pr(e,t){return _r(e,Ar(t))}function Ar(e){return e?256:128}function Mr(e){var t=3;return _r(e,4)&&(t+=4+Er(e)),t}function Rr(e,t){if(t===cr)return!1;var n=Array.isArray(e)?e[0]:e,r=Array.isArray(t)?t[0]:t;return!Object.is(n,r)}function Nr(e){return null!=e&&\"\"!==e}function jr(e,t,n){return void 0===n&&(n=\" \"),e+(t.length&&e.length?n:\"\")+t}function Fr(e){return Lr(e)?e[2]:e}function Lr(e){return Array.isArray(e)&&3<=e.length&&\"string\"!=typeof e[1]}function Vr(e){var t=Fr(e);return t&&t[0]||\"\"}function Br(e){return 0!=(16&e.flags)}function Ur(e){return 0!=(32&e.flags)}function zr(e,t){return e[t+0]}var qr=\"undefined\"!=typeof ngDevMode&&ngDevMode?{}:{MAP_DIRTY_VALUE:!0};function Hr(e,t,n){e[t+1]=n}function Wr(e,t){return e[t+1]}function Gr(e){return e!==dr}function Yr(e,t){for(var n=\"\",r=1;r<e.length;r+=2){var i=zr(e,r),o=Wr(e,r);n=jr(n,jr(i,t?\"\":o,\":\"),t?\" \":\"; \")}return n}function Kr(e,t,n,r){for(var i=1;i<e.length;i+=2){var o=zr(e,i);if(t<=o){var a=!1;if(o===t){var s=e[i];!r&&Nr(s)||(a=!0,Hr(e,i,n))}else a=!0,e.splice(i,0,t,n);return a}}return e.push(t,n),!0}function Zr(e,t,n){var r=Array.isArray(e)?e:yr(null);r[0]=t;for(var i=1;i<r.length;i+=2)Hr(r,i,null);var o,a=null,s=!1;if(\"string\"==typeof t?t.length&&(a=t.split(/\\s+/),s=!0):(a=t?Object.keys(t):null,o=t),a)for(var l=0;l<a.length;l++){var u=a[l];Kr(r,n?u.replace(/[a-z][A-Z]/g,function(e){return e.charAt(0)+\"-\"+e.charAt(1)}).toLowerCase():u,!!s||o[u],!0)}return r}function Qr(e){return e.hasOwnProperty(\"class\")?\"class\":\"className\"}var Xr=\"__ngContext__\";function $r(e){for(;Array.isArray(e);)e=e[vt];return e}function Jr(e,t){return $r(t[e+Nt])}function ei(e,t){ngDevMode&&Zt(e,t),ngDevMode&&Ze(t,e.index);var n=$r(t[e.index]);return ngDevMode&&!Yn(t[Dt])&&Ke(n),n}function ti(e,t){var n=e.index;if(-1===n)return null;ngDevMode&&Zt(e,t);var r=$r(t[n]);return ngDevMode&&null!==r&&!Yn(t[Dt])&&Ke(r),r}function ni(e,t){return ngDevMode&&We(e,-1,\"wrong index for TNode\"),ngDevMode&&He(e,t[yt].data.length,\"wrong index for TNode\"),t[yt].data[e+Nt]}function ri(e,t){return ngDevMode&&Ze(e,t+Nt),e[t+Nt]}function ii(e,t){ngDevMode&&Ze(t,e);var n=t[e];return zt(n)?n:n[vt]}function oi(e){return ngDevMode&&Ge(e,\"Target expected\"),e[Xr]||null}function ai(e){var t=oi(e);return t?Array.isArray(t)?t:t.lView:null}function si(e){return 4==(4&e[gt])}function li(e){e[Rt]=0}function ui(e){ngDevMode&&en(e);var t=e[_t];return qt(t)?t[_t]:t}function ci(e){ngDevMode&&Ge(e,\"component\");for(var t=zt(e)?e:ai(e);t&&!(512&t[gt]);)t=ui(t);return ngDevMode&&en(t),t}function pi(e){for(var t=e[xt];null!==t&&2===t.type;)ngDevMode&&Ge(e[At],\"lView[DECLARATION_VIEW]\"),t=(e=e[At])[xt];return ngDevMode&&en(e),e}function di(e){var t=ci(e);return ngDevMode&&Ge(t[Et],\"RootView has no context. Perhaps it is disconnected?\"),t[Et]}var hi=!0;function fi(e){var t=hi;return hi=e,t}var mi=255,vi=0;function yi(e,t){var n=_i(e,t);if(-1!==n)return n;var r=t[yt];r.firstTemplatePass&&(e.injectorIndex=t.length,gi(r.data,e),gi(t,null),gi(r.blueprint,null));var i=bi(e,t),o=e.injectorIndex;if($n(i))for(var a=Jn(i),s=tr(i,t),l=s[yt].data,u=0;u<8;u++)t[o+u]=s[a+u]|l[a+u];return t[o+rn]=i,o}function gi(e,t){e.push(0,0,0,0,0,0,0,0,t)}function _i(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null==t[e.injectorIndex+rn]?-1:e.injectorIndex}function bi(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;for(var n=t[xt],r=1;n&&-1===n.injectorIndex;)n=(t=t[At])?t[xt]:null,r++;return n?n.injectorIndex|r<<16:-1}function wi(e,t,n){!function(e,t,n){ngDevMode&&Ue(t.firstTemplatePass,!0,\"expected firstTemplatePass to be true\");var r=\"string\"!=typeof n?n[oe]:n.charCodeAt(0)||0;null==r&&(r=n[oe]=vi++);var i=r&mi,o=1<<i,a=128&i,s=64&i,l=32&i,u=t.data;a?s?l?u[e+7]|=o:u[e+6]|=o:l?u[e+5]|=o:u[e+4]|=o:s?l?u[e+3]|=o:u[e+2]|=o:l?u[e+1]|=o:u[e]|=o}(e,t,n)}function xi(e,t){if(ngDevMode&&un(e,0,3,4),ngDevMode&&Ge(e,\"expecting tNode\"),\"class\"===t)return Vr(e.classes);if(\"style\"===t)return Vr(e.styles);var n=e.attrs;if(n)for(var r=n.length,i=0;i<r;){var o=n[i];if(Qn(o))break;if(0===o)i+=2;else if(\"number\"==typeof o)for(i++;i<r&&\"string\"==typeof n[i];)i++;else{if(o===t)return n[i+1];i+=2}}return null}function Ci(e,t,n,r,i){if(void 0===r&&(r=N.InjectFlags.Default),e){var o=function(e){if(ngDevMode&&Ge(e,\"token must be defined\"),\"string\"==typeof e)return e.charCodeAt(0)||0;var t=e[oe];return\"number\"==typeof t&&0<t?t&mi:t}(n);if(\"function\"==typeof o){var a=On(),s=gn();Dn(e,t);try{var l=o();if(null!=l||r&N.InjectFlags.Optional)return l;throw new Error(\"No provider for \"+rr(n)+\"!\")}finally{Dn(a,s)}}else if(\"number\"==typeof o){if(-1===o)return new Ii(e,t);var u=null,c=_i(e,t),p=an,d=r&N.InjectFlags.Host?pi(t)[xt]:null;for((-1===c||r&N.InjectFlags.SkipSelf)&&(p=-1===c?bi(e,t):t[c+rn],Ti(r,!1)?(u=t[yt],c=Jn(p),t=tr(p,t)):c=-1);-1!==c;){p=t[c+rn];var h=t[yt];if(Di(o,c,h.data)){var f=Ei(c,t,n,u,r,d);if(f!==Si)return f}Ti(r,t[yt].data[c+nn]===d)&&Di(o,c,t)?(u=h,c=Jn(p),t=tr(p,t)):c=-1}}}if(r&N.InjectFlags.Optional&&void 0===i&&(i=null),0==(r&(N.InjectFlags.Self|N.InjectFlags.Host))){var m=t[Ot],v=_e(void 0);try{return m?m.get(n,i,r&N.InjectFlags.Optional):Ce(n,i,r&N.InjectFlags.Optional)}finally{_e(v)}}if(r&N.InjectFlags.Optional)return i;throw new Error(\"NodeInjector: NOT_FOUND [\"+rr(n)+\"]\")}var Si={};function Ei(e,t,n,r,i,o){var a=t[yt],s=a.data[e+nn],l=Oi(s,a,n,null==r?Wt(s)&&hi:r!=a&&3===s.type,i&N.InjectFlags.Host&&o===s);return null!==l?ki(a.data,t,l,s):Si}function Oi(e,t,n,r,i){for(var o=e.providerIndexes,a=t.data,s=65535&o,l=e.directiveStart,u=e.directiveEnd,c=o>>16,p=i?s+c:u,d=r?s:s+c;d<p;d++){var h=a[d];if(d<l&&n===h||l<=d&&h.type===n)return d}if(i){var f=a[l];if(f&&Yt(f)&&f.type===n)return l}return null}function ki(e,t,n,r){var i=t[n];if(function(e){return e instanceof sn}(i)){var o=i;if(o.resolving)throw new Error(\"Circular dep for \"+rr(e[n]));var a=fi(o.canSeeViewProviders);o.resolving=!0;var s=void 0;o.injectImpl&&(s=_e(o.injectImpl));var l=On(),u=gn();Dn(r,t);try{i=t[n]=o.factory(void 0,e,t,r)}finally{o.injectImpl&&_e(s),fi(a),o.resolving=!1,Dn(l,u)}}return i}function Di(e,t,n){var r=1<<e,i=64&e,o=32&e;return!!((128&e?i?o?n[t+7]:n[t+6]:o?n[t+5]:n[t+4]:i?o?n[t+3]:n[t+2]:o?n[t+1]:n[t])&r)}function Ti(e,t){return!(e&N.InjectFlags.Self||e&N.InjectFlags.Host&&t)}var Ii=(Pi.prototype.get=function(e,t){return Ci(this._tNode,this._lView,e,void 0,t)},Pi);function Pi(e,t){this._tNode=e,this._lView=t}function Ai(e){var t=e;if(q(e))return function(){var e=Ai(z(t));return e?e():null};var n=ft(t);if(null===n){var r=A(t);n=r&&r.factory}return n||null}function Mi(e){var t=Object.getPrototypeOf(e.prototype).constructor,n=t[ie]||Ai(t);return null!==n?n:function(e){return new e}}var Ri=\"ngDebugContext\",Ni=\"ngOriginalError\",ji=\"ngErrorLogger\";function Fi(e){return e[Ri]}function Li(e){return e[Ni]}function Vi(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e.error.apply(e,O(t))}var Bi=(Ui.prototype.handleError=function(e){var t=this._findOriginalError(e),n=this._findContext(e),r=function(e){return e[ji]||Vi}(e);r(this._console,\"ERROR\",e),t&&r(this._console,\"ORIGINAL ERROR\",t),n&&r(this._console,\"ERROR CONTEXT\",n)},Ui.prototype._findContext=function(e){return e?Fi(e)?Fi(e):this._findContext(Li(e)):null},Ui.prototype._findOriginalError=function(e){for(var t=Li(e);t&&Li(t);)t=Li(t);return t},Ui);function Ui(){this._console=console}var zi={name:\"custom-elements\"},qi={name:\"no-errors-schema\"},Hi=(Wi.prototype.toString=function(){return\"SafeValue must use [property]=binding: \"+this.changingThisBreaksApplicationSecurity+\" (see http://g.co/ng/security#xss)\"},Wi);function Wi(e){this.changingThisBreaksApplicationSecurity=e}var Gi,Yi=(p(Ki,Gi=Hi),Ki.prototype.getTypeName=function(){return\"HTML\"},Ki);function Ki(){return null!==Gi&&Gi.apply(this,arguments)||this}var Zi,Qi=(p(Xi,Zi=Hi),Xi.prototype.getTypeName=function(){return\"Style\"},Xi);function Xi(){return null!==Zi&&Zi.apply(this,arguments)||this}var $i,Ji=(p(eo,$i=Hi),eo.prototype.getTypeName=function(){return\"Script\"},eo);function eo(){return null!==$i&&$i.apply(this,arguments)||this}var to,no=(p(ro,to=Hi),ro.prototype.getTypeName=function(){return\"URL\"},ro);function ro(){return null!==to&&to.apply(this,arguments)||this}var io,oo=(p(ao,io=Hi),ao.prototype.getTypeName=function(){return\"ResourceURL\"},ao);function ao(){return null!==io&&io.apply(this,arguments)||this}function so(e){return e instanceof Hi?e.changingThisBreaksApplicationSecurity:e}function lo(e,t){var n=uo(e);if(null==n||n===t)return n===t;if(\"ResourceURL\"===n&&\"URL\"===t)return!0;throw new Error(\"Required a safe \"+t+\", got a \"+n+\" (see http://g.co/ng/security#xss)\")}function uo(e){return e instanceof Hi&&e.getTypeName()||null}var co=!0,po=!1;function ho(){return po=!0,co}var fo=(mo.prototype.getInertBodyElement_XHR=function(e){e=\"<body><remove></remove>\"+e+\"</body>\";try{e=encodeURI(e)}catch(e){return null}var t=new XMLHttpRequest;t.responseType=\"document\",t.open(\"GET\",\"data:text/html;charset=utf-8,\"+e,!1),t.send(void 0);var n=t.response.body;return n.removeChild(n.firstChild),n},mo.prototype.getInertBodyElement_DOMParser=function(e){e=\"<body><remove></remove>\"+e+\"</body>\";try{var t=(new window.DOMParser).parseFromString(e,\"text/html\").body;return t.removeChild(t.firstChild),t}catch(e){return null}},mo.prototype.getInertBodyElement_InertDocument=function(e){var t=this.inertDocument.createElement(\"template\");return\"content\"in t?(t.innerHTML=e,t):(this.inertBodyElement.innerHTML=e,this.defaultDoc.documentMode&&this.stripCustomNsAttrs(this.inertBodyElement),this.inertBodyElement)},mo.prototype.stripCustomNsAttrs=function(e){for(var t=e.attributes,n=t.length-1;0<n;n--){var r=t.item(n).name;\"xmlns:ns1\"!==r&&0!==r.indexOf(\"ns1:\")||e.removeAttribute(r)}for(var i=e.firstChild;i;)i.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(i),i=i.nextSibling},mo);function mo(e){if(this.defaultDoc=e,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument(\"sanitization-inert\"),this.inertBodyElement=this.inertDocument.body,null==this.inertBodyElement){var t=this.inertDocument.createElement(\"html\");this.inertDocument.appendChild(t),this.inertBodyElement=this.inertDocument.createElement(\"body\"),t.appendChild(this.inertBodyElement)}this.inertBodyElement.innerHTML='<svg><g onload=\"this.parentNode.remove()\"></g></svg>',!this.inertBodyElement.querySelector||this.inertBodyElement.querySelector(\"svg\")?(this.inertBodyElement.innerHTML='<svg><p><style><img src=\"</style><img src=x onerror=alert(1)//\">',this.inertBodyElement.querySelector&&this.inertBodyElement.querySelector(\"svg img\")&&function(){try{return!!window.DOMParser}catch(e){return!1}}()?this.getInertBodyElement=this.getInertBodyElement_DOMParser:this.getInertBodyElement=this.getInertBodyElement_InertDocument):this.getInertBodyElement=this.getInertBodyElement_XHR}var vo=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,yo=/^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 go(e){return(e=String(e)).match(vo)||e.match(yo)?e:(ho()&&console.warn(\"WARNING: sanitizing unsafe URL value \"+e+\" (see http://g.co/ng/security#xss)\"),\"unsafe:\"+e)}function _o(e){return(e=String(e)).split(\",\").map(function(e){return go(e.trim())}).join(\", \")}function bo(e){var t,n,r={};try{for(var i=y(e.split(\",\")),o=i.next();!o.done;o=i.next()){r[o.value]=!0}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r}function wo(){for(var t,e,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i={};try{for(var o=y(n),a=o.next();!a.done;a=o.next()){var s=a.value;for(var l in s)s.hasOwnProperty(l)&&(i[l]=!0)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return i}var xo=bo(\"area,br,col,hr,img,wbr\"),Co=bo(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),So=bo(\"rp,rt\"),Eo=wo(So,Co),Oo=wo(Co,bo(\"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\")),ko=wo(So,bo(\"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\")),Do=wo(xo,Oo,ko,Eo),To=bo(\"background,cite,href,itemtype,longdesc,poster,src,xlink:href\"),Io=bo(\"srcset\"),Po=bo(\"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\"),Ao=bo(\"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\"),Mo=wo(To,Io,Po,Ao),Ro=bo(\"script,style,template\"),No=(jo.prototype.sanitizeChildren=function(e){for(var t=e.firstChild,n=!0;t;)if(t.nodeType===Node.ELEMENT_NODE?n=this.startElement(t):t.nodeType===Node.TEXT_NODE?this.chars(t.nodeValue):this.sanitizedSomething=!0,n&&t.firstChild)t=t.firstChild;else for(;t;){t.nodeType===Node.ELEMENT_NODE&&this.endElement(t);var r=this.checkClobberedElement(t,t.nextSibling);if(r){t=r;break}t=this.checkClobberedElement(t,t.parentNode)}return this.buf.join(\"\")},jo.prototype.startElement=function(e){var t=e.nodeName.toLowerCase();if(!Do.hasOwnProperty(t))return this.sanitizedSomething=!0,!Ro.hasOwnProperty(t);this.buf.push(\"<\"),this.buf.push(t);for(var n=e.attributes,r=0;r<n.length;r++){var i=n.item(r),o=i.name,a=o.toLowerCase();if(Mo.hasOwnProperty(a)){var s=i.value;To[a]&&(s=go(s)),Io[a]&&(s=_o(s)),this.buf.push(\" \",o,'=\"',Uo(s),'\"')}else this.sanitizedSomething=!0}return this.buf.push(\">\"),!0},jo.prototype.endElement=function(e){var t=e.nodeName.toLowerCase();Do.hasOwnProperty(t)&&!xo.hasOwnProperty(t)&&(this.buf.push(\"</\"),this.buf.push(t),this.buf.push(\">\"))},jo.prototype.chars=function(e){this.buf.push(Uo(e))},jo.prototype.checkClobberedElement=function(e,t){if(t&&(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(\"Failed to sanitize html because the element is clobbered: \"+e.outerHTML);return t},jo);function jo(){this.sanitizedSomething=!1,this.buf=[]}var Fo,Lo,Vo=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,Bo=/([^\\#-~ |!])/g;function Uo(e){return e.replace(/&/g,\"&amp;\").replace(Vo,function(e){return\"&#\"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+\";\"}).replace(Bo,function(e){return\"&#\"+e.charCodeAt(0)+\";\"}).replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function zo(e,t){var n=null;try{Fo=Fo||new fo(e);var r=t?String(t):\"\";n=Fo.getInertBodyElement(r);var i=5,o=r;do{if(0===i)throw new Error(\"Failed to sanitize html because the input is unstable\");i--,r=o,o=n.innerHTML,n=Fo.getInertBodyElement(r)}while(r!==o);var a=new No,s=a.sanitizeChildren(qo(n)||n);return ho()&&a.sanitizedSomething&&console.warn(\"WARNING: sanitizing HTML stripped some content, see http://g.co/ng/security#xss\"),s}finally{if(n)for(var l=qo(n)||n;l.firstChild;)l.removeChild(l.firstChild)}}function qo(e){return\"content\"in e&&function(e){return e.nodeType===Node.ELEMENT_NODE&&\"TEMPLATE\"===e.nodeName}(e)?e.content:null}(Lo=N.SecurityContext||(N.SecurityContext={}))[Lo.NONE=0]=\"NONE\",Lo[Lo.HTML=1]=\"HTML\",Lo[Lo.STYLE=2]=\"STYLE\",Lo[Lo.SCRIPT=3]=\"SCRIPT\",Lo[Lo.URL=4]=\"URL\",Lo[Lo.RESOURCE_URL=5]=\"RESOURCE_URL\";var Ho=new RegExp(\"^([-,.\\\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|Z|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\\\([-0-9.%, #a-zA-Z]+\\\\))$\",\"g\"),Wo=/^url\\(([^)]+)\\)$/;function Go(e){if(!(e=String(e).trim()))return\"\";var t=e.match(Wo);return t&&go(t[1])===t[1]||e.match(Ho)&&function(e){for(var t=!0,n=!0,r=0;r<e.length;r++){var i=e.charAt(r);\"'\"===i&&n?t=!t:'\"'===i&&t&&(n=!n)}return t&&n}(e)?e:(ho()&&console.warn(\"WARNING: sanitizing unsafe style value \"+e+\" (see http://g.co/ng/security#xss).\"),\"unsafe\")}function Yo(e){var t=ta();return t?t.sanitize(N.SecurityContext.HTML,e)||\"\":lo(e,\"HTML\")?so(e):zo(document,nr(e))}function Ko(e){var t=ta();return t?t.sanitize(N.SecurityContext.STYLE,e)||\"\":lo(e,\"Style\")?so(e):Go(nr(e))}function Zo(e){var t=ta();return t?t.sanitize(N.SecurityContext.URL,e)||\"\":lo(e,\"URL\")?so(e):go(nr(e))}function Qo(e){var t=ta();if(t)return t.sanitize(N.SecurityContext.RESOURCE_URL,e)||\"\";if(lo(e,\"ResourceURL\"))return so(e);throw new Error(\"unsafe value used in a resource URL context (see http://g.co/ng/security#xss)\")}function Xo(e){var t=ta();if(t)return t.sanitize(N.SecurityContext.SCRIPT,e)||\"\";if(lo(e,\"Script\"))return so(e);throw new Error(\"unsafe value used in a script context\")}function $o(e,t){return\"src\"===t&&(\"embed\"===e||\"frame\"===e||\"iframe\"===e||\"media\"===e||\"script\"===e)||\"href\"===t&&(\"base\"===e||\"link\"===e)?Qo:Zo}function Jo(e,t,n){return $o(t,n)(e)}function ea(e,t,n){var r=!0;return 1&(n=n||3)&&(r=\"background-image\"===e||\"background\"===e||\"border-image\"===e||\"filter\"===e||\"list-style\"===e||\"list-style-image\"===e||\"clip-path\"===e),2&n?r?Ko(t):t:r}function ta(){var e=gn();return e&&e[Tt]}function na(e){if(!ngDevMode)throw new Error(\"Looks like we are in 'prod mode', but we are creating a named Array type, which is wrong! Check your code\");try{return new na.constructor(\"Array\",\"return class \"+e+\" extends Array{}\")(Array)}catch(e){return Array}}function ra(e){return\"ng-reflect-\"+(e=function(e){return e.replace(ia,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return\"-\"+e[1].toLowerCase()})}(e.replace(/[$@]/g,\"_\")))}var ia=/([A-Z])/g;function oa(e){try{return null!=e?e.toString().slice(0,30):e}catch(e){return\"[ERROR] Exception while trying to serialize the value\"}}function aa(e){var t=oi(e);if(t){if(Array.isArray(t)){var n=t,r=void 0,i=void 0,o=void 0;if(function(e){return e&&e.constructor&&e.constructor.ɵcmp}(e)){if(-1==(r=da(n,e)))throw new Error(\"The provided component was not found in the application\");i=e}else if(function(e){return e&&e.constructor&&e.constructor.ɵdir}(e)){if(-1==(r=function(e,t){var n=e[yt].firstChild;for(;n;){for(var r=n.directiveStart,i=n.directiveEnd,o=r;o<i;o++)if(e[o]===t)return n.index;n=pa(n)}return-1}(n,e)))throw new Error(\"The provided directive was not found in the application\");o=ha(r,n,!1)}else if(-1==(r=ca(n,e)))return null;var a=oi(h=$r(n[r])),s=a&&!Array.isArray(a)?a:sa(n,r,h);if(i&&void 0===s.component&&(s.component=i,ua(s.component,s)),o&&void 0===s.directives){s.directives=o;for(var l=0;l<o.length;l++)ua(o[l],s)}ua(s.native,s),t=s}}else{var u=e;ngDevMode&&Ke(u);for(var c=u;c=c.parentNode;){var p=oi(c);if(p){n=void 0;if(!(n=Array.isArray(p)?p:p.lView))return null;var d=ca(n,u);if(0<=d){var h;ua(h=$r(n[d]),s=sa(n,d,h)),t=s;break}}}}return t||null}function sa(e,t,n){return{lView:e,nodeIndex:t,native:n,component:void 0,directives:void 0,localRefs:void 0}}function la(e){var t,n=oi(e);if(Array.isArray(n)){var r=da(n,e);ua((i=sa(n,r,(t=ii(r,n))[vt])).component=e,i),ua(i.native,i)}else{var i;t=ii((i=n).nodeIndex,i.lView)}return t}function ua(e,t){e[Xr]=t}function ca(e,t){for(var n=e[yt].firstChild;n;){if(ti(n,e)===t)return n.index;n=pa(n)}return-1}function pa(e){if(e.child)return e.child;if(e.next)return e.next;for(;e.parent&&!e.parent.next;)e=e.parent;return e.parent&&e.parent.next}function da(e,t){var n=e[yt].components;if(n)for(var r=0;r<n.length;r++){var i=n[r];if(ii(i,e)[Et]===t)return i}else if(ii(Nt,e)[Et]===t)return Nt;return-1}function ha(e,t,n){var r=t[yt].data[e],i=r.directiveStart;if(0==i)return Je;var o=r.directiveEnd;return!n&&2&r.flags&&i++,t.slice(i,o)}function fa(e){throw new Error(\"Multiple components match node with tagname \"+e.tagName)}function ma(e,t,n){var r=\"ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '\"+t+\"'. Current value: '\"+n+\"'.\";throw e&&(r+=\" 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 ?\"),new Error(r)}function va(){throw new Error(\"Cannot mix multi providers and regular providers\")}function ya(e,t,n,r,i,o){ngDevMode&&tn(n);var a=t.onChanges,s=t.onInit,l=t.doCheck;0<=i&&(!n.preOrderHooks||i===n.preOrderHooks.length)&&(a||s||l)&&(n.preOrderHooks||(n.preOrderHooks=[])).push(r),0<=o&&(!n.preOrderCheckHooks||o===n.preOrderCheckHooks.length)&&(a||l)&&(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(r),a&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,a),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,a)),s&&(n.preOrderHooks||(n.preOrderHooks=[])).push(-e,s),l&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,l),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,l))}function ga(e,t){ngDevMode&&tn(e);for(var n=t.directiveStart,r=t.directiveEnd;n<r;n++){var i=e.data[n];i.afterContentInit&&(e.contentHooks||(e.contentHooks=[])).push(-n,i.afterContentInit),i.afterContentChecked&&((e.contentHooks||(e.contentHooks=[])).push(n,i.afterContentChecked),(e.contentCheckHooks||(e.contentCheckHooks=[])).push(n,i.afterContentChecked)),i.afterViewInit&&(e.viewHooks||(e.viewHooks=[])).push(-n,i.afterViewInit),i.afterViewChecked&&((e.viewHooks||(e.viewHooks=[])).push(n,i.afterViewChecked),(e.viewCheckHooks||(e.viewCheckHooks=[])).push(n,i.afterViewChecked)),null!=i.onDestroy&&(e.destroyHooks||(e.destroyHooks=[])).push(n,i.onDestroy)}}function _a(e,t,n){xa(e,t,3,n)}function ba(e,t,n,r){ngDevMode&&ze(n,3,\"Init pre-order hooks should not be called more than once\"),(3&e[gt])===n&&xa(e,t,n,r)}function wa(e,t){ngDevMode&&ze(t,3,\"Init hooks phase should not be incremented after all init hooks have been run.\");var n=e[gt];(3&n)===t&&(n&=1023,n+=1,e[gt]=n)}function xa(e,t,n,r){ngDevMode&&Ue(Pn(),!1,\"Hooks should never be run in the check no changes mode.\");for(var i=null!=r?r:-1,o=0,a=void 0!==r?65535&e[Rt]:0;a<t.length;a++){if(\"number\"==typeof t[a+1]){if(o=t[a],null!=r&&r<=o)break}else t[a]<0&&(e[Rt]+=65536),(o<i||-1==i)&&(Ca(e,n,t,a),e[Rt]=(4294901760&e[Rt])+a+2),a++}}function Ca(e,t,n,r){var i=n[r]<0,o=n[r+1],a=e[i?-n[r]:n[r]];i?e[gt]>>10<e[Rt]>>16&&(3&e[gt])===t&&(e[gt]+=1024,o.call(a)):o.call(a)}var Sa=\"ng-template\";function Ea(e,t){var n=e.length,r=e.toLowerCase().indexOf(t),i=r+t.length;return!(-1===r||0<r&&\" \"!==e[r-1]||i<n&&\" \"!==e[i])}function Oa(e,t,n){ngDevMode&&Ge(t[0],\"Selector should have a tag name\");for(var r,i,o=4,a=e.attrs||[],s=function(e){for(var t=0;t<e.length;t++){if(Qn(e[t]))return t}return e.length}(a),l=!1,u=0;u<t.length;u++){var c=t[u];if(\"number\"!=typeof c){if(!l)if(4&o){if(o=2|1&o,\"\"!==c&&(i=n,c!==(0!==(r=e).type||i?r.tagName:Sa))||\"\"===c&&1===t.length){if(ka(o))return!1;l=!0}}else{var p=8&o?c:t[++u];if(8&o&&e.classes){if(!Ea(Vr(e.classes),p)){if(ka(o))return!1;l=!0}continue}var d=Da(8&o?\"class\":c,a,0==e.type&&e.tagName!==Sa,n);if(-1===d){if(ka(o))return!1;l=!0;continue}if(\"\"!==p){var h=void 0;h=s<d?\"\":(ngDevMode&&ze(a[d],0,\"We do not match directives on namespaced attributes\"),a[d+1].toLowerCase());var f=8&o?h:null;if(f&&!Ea(f,p)||2&o&&p!==h){if(ka(o))return!1;l=!0}}}}else{if(!l&&!ka(o)&&!ka(c))return!1;if(l&&ka(c))continue;l=!1,o=c|1&o}}return ka(o)||l}function ka(e){return 0==(1&e)}function Da(e,t,n,r){if(null===t)return-1;var i=0;if(!r&&n)return function(e,t){var n=e.indexOf(4);if(-1<n)for(n++;n<e.length;){if(e[n]===t)return n;n++}return-1}(t,e);for(var o=!1;i<t.length;){var a=t[i];if(a===e)return i;if(3===a||6===a)o=!0;else{if(1===a||2===a){for(var s=t[++i];\"string\"==typeof s;)s=t[++i];continue}if(4===a)break;if(0===a){i+=4;continue}}i+=o?1:2}return-1}function Ta(e,t,n){void 0===n&&(n=!1);for(var r=0;r<t.length;r++)if(Oa(e,t[r],n))return!0;return!1}function Ia(e,t){e:for(var n=0;n<t.length;n++){var r=t[n];if(e.length===r.length){for(var i=0;i<e.length;i++)if(e[i]!==r[i])continue e;return!0}}return!1}var Pa={element:null,directiveIndex:-1,sourceIndex:-1,classesBitMask:-1,classesIndex:-1,stylesBitMask:-1,stylesIndex:-1,lastDirectClassMap:null,lastDirectStyleMap:null},Aa=0,Ma=1;function Ra(e,t){return Pa.element!==e?(Pa.element=e,Pa.directiveIndex=t,Pa.sourceIndex=t===dr?0:1,Pa.classesBitMask=Aa,Pa.classesIndex=Ma,Pa.stylesBitMask=Aa,Pa.stylesIndex=Ma,Pa.lastDirectClassMap=null,Pa.lastDirectStyleMap=null):Pa.directiveIndex!==t&&(Pa.directiveIndex=t,Pa.sourceIndex++),Pa}var Na=0;function ja(e,t,n,r,i,o,a,s){var l=!i,u=Ra(n,r),c=l?Na:u.classesIndex++;if((!Pr(e,Gr(u.sourceIndex))||a!==cr)&&(La(e,t,c,u.sourceIndex,i,o,a,s,!1)||s))return u.classesBitMask|=1<<c,!0;return!1}function Fa(e,t,n,r,i,o,a,s,l){var u=!i,c=Ra(n,r),p=u?Na:c.stylesIndex++;if(!Pr(e,Gr(c.sourceIndex))||a!==cr){var d=u||!!s&&s(i,null,1);if(La(e,t,p,c.sourceIndex,i,o,a,l,d)||l)return c.stylesBitMask|=1<<p,!0}return!1}function La(e,t,n,r,i,o,a,s,l){var u=Gr(r);Pr(e,u)||(Va(e,n,r,i,o,l),wr(e,u?64:32));var c=s||Rr(t[o],a);c&&(Tr(t,o,a),!(64&gr(e))||u||i&&a||function(e,t,n){var r=Er(e);if(null!==n&&_r(e,2)){for(var i=4+r,o=3,a=!1;o<e.length;){if(xr(e,o)===n){a=!0;break}o+=i}if(a)for(var s=(c=o+4)+r-1,l=c+1;l<s;l++){var u=e[l];0!==u&&Tr(t,u,null)}}if(_r(e,4)){var c;for(s=(c=7)+r-1,o=c+1;o<s;o++){var p=Ir(t,e[o]);p&&(p[0]=qr)}}}(e,t,i));return c}function Va(e,t,n,r,i,o){var a=!1;r=r||pr;for(var s=Or(e);s<=n;)za(e),s++;for(var l=\"number\"==typeof i,u=4+Er(e),c=3;c<e.length;){var p=xr(e,c);if(r<=p){r<p?Ba(e,c,r,o):l&&wr(e,8),Ua(e,c,i,t,n),a=!0;break}c+=u}a||(Ba(e,e.length,r,o),Ua(e,c,i,t,n))}function Ba(e,t,n,r){var i=r?1:0;e.splice(t,0,i,vr,vr,n),t+=4;for(var o=Or(e),a=0;a<o;a++)e.splice(t,0,fr),t++;e.splice(t,0,hr)}function Ua(e,t,n,r,i){if(\"number\"==typeof n){var o=Gr(i);e[t+4+i]=n,function(e,t,n,r){e[t+(r?2:1)]=n}(e,t,Sr(e,t,o)|1<<r,o)}else null!==n&&null===Dr(e,t)&&function(e,t,n){e[t+4+Or(e)]=n}(e,t,n)}function za(e){for(var t=4+Er(e)-1,n=3;n<e.length;)n+=t,e.splice(n++,0,fr),n++;e[1]++}function qa(e,t,n,r,i,o,a){ngDevMode&&ngDevMode.flushStyling++;var s=Ra(i,o),l=Gr(s.sourceIndex);r&&(Pr(r,l)||Ha(r,l),0!==s.stylesBitMask&&Wa(r,e,i,t,s.stylesBitMask,Za,a,l)),n&&(Pr(n,l)||Ha(n,l),0!==s.classesBitMask&&Wa(n,e,i,t,s.classesBitMask,Qa,null,l)),Pa.element=null}function Ha(e,t){!function(e,t){for(var n=!1,r=1;r<t.length;r+=2){var i=Wr(t,r);if(i){var o=zr(t,r);Va(e,-1,0,o,i,!1),n=!0}}n&&wr(e,16)}(e,Fr(e)),function(e,t){wr(e,Ar(t))}(e,t)}function Wa(e,t,n,r,i,o,a,s){var l=function(e){return!0===e?-1:!1===e?0:e}(i),u=null,c=!1;_r(e,4)&&(u=Ka,c=0!=(l&Sr(e,3,s)));var p=Er(e),d=1,h=c?1:0;s&&(h|=8,d=p-1);for(var f=Mr(e);f<e.length;){if(l&Sr(e,f,s)){for(var m=!1,v=xr(e,f),y=Dr(e,f),g=0;g<d;g++){var _=kr(e,f,g);if(!m&&0!==_){var b=Ir(r,_);if(Nr(b)){if(!(s&&0===g))o(t,n,v,a&&Cr(e,f)?a(v,b,2):so(b),_);m=!0}}if(u){var w=h|(m?4:2);s&&0===g&&(w|=16);var x=u(e,t,n,r,g,o,a,w,v,y);m=m||x}}m||o(t,n,v,y)}f+=4+p}u&&(s&&(h|=16),u(e,t,n,r,0,o,a,h))}function Ga(e,t,n,r,i,o,a){var s=so(r);return!!Nr(s)&&(i(e,t,n,s=a?a(n,r,3):s,o),!0)}function Ya(e,t,n,r,i,o,a){for(var s=1;s<r.length;s+=2){var l=zr(r,s);if(l===i){var u=Wr(r,s);return n(e,t,i,u=a?a(i,u,3):u,o),!0}if(i<l)break}return!1}var Ka=null;var Za=function(e,t,n,r){var i;null!==e&&(Nr(r)?(r=r.toString(),ngDevMode&&ngDevMode.rendererSetStyle++,Yn(e)?e.setStyle(t,n,r,pn.DashCase):null!=(i=t.style)&&i.setProperty(n,r)):(ngDevMode&&ngDevMode.rendererRemoveStyle++,Yn(e)?e.removeStyle(t,n,pn.DashCase):null!=(i=t.style)&&i.removeProperty(n)))},Qa=function(e,t,n,r){var i;null!==e&&\"\"!==n&&(r?(ngDevMode&&ngDevMode.rendererAddClass++,Yn(e)?e.addClass(t,n):null!=(i=t.classList)&&i.add(n)):(ngDevMode&&ngDevMode.rendererRemoveClass++,Yn(e)?e.removeClass(t,n):null!=(i=t.classList)&&i.remove(n)))};function Xa(e,t,n,r){var i=Fr(n);if(i)for(var o=1;o<i.length;o+=2){var a=zr(i,o),s=Wr(i,o);r?Qa(e,t,a,s,null):Za(e,t,a,s,null)}}function $a(e){ngDevMode&&We(e,0,\"Can only advance forward\"),es(gn(),Vn()+e,Pn())}function Ja(e){es(gn(),e,Pn())}function es(e,t,n){if(ngDevMode&&We(t,-1,\"Invalid index\"),ngDevMode&&Ze(e,t+Nt),_n(1)&&wn(),!n)if(3==(3&e[gt])){var r=e[yt].preOrderCheckHooks;null!==r&&_a(e,r,t)}else{var i=e[yt].preOrderHooks;null!==i&&ba(e,i,0,t)}Bn(t)}var ts={marker:\"element\"},ns={marker:\"comment\"};function rs(e,t){Object.defineProperty(e,\"debug\",{value:t,enumerable:!1})}function is(){!function(e){Ka=e}(os)}var os=function(e,t,n,r,i,o,a,s,l,u){var c=!1;if(Er(e)){var p=!0,d=!l;d&&0==(1&s)&&(c=!(p=!1)),p&&(c=function e(t,n,r,i,o,a,s,l,u,c){var p=Er(t)-1;var d=p-1;var h=u<d&&0!=(8&s);var f=0!=(16&s);f&&(s&=-17);var m=!1;if(u<=d){var v=us(u),y=kr(t,3,u),g=Ir(i,y);if(g){for(;v<g.length;){var _=zr(g,v),b=l&&l<_,w=!b&&_===l,x=Wr(g,v),C=Nr(x),S=b?s:as(s,C,w),E=b?l:_,O=h&&e(t,n,r,i,o,a,S,E,u+1,c);if(b){m=m||O;break}if(!O&&ss(s,w)&&(O=!0,!f)){var k=w&&!C,D=w?y:null,T=void 0;T=k?c:a?a(_,x,3):x?so(x):null,o(n,r,_,T,D)}m=O&&w,v+=2}I=v,ls[u]=I,!h||1!==g.length&&l||(m=e(t,n,r,i,o,a,s,l,u+1,c))}else h&&(m=e(t,n,r,i,o,a,s,l,u+1,c))}var I;return m}(e,t,n,r,o,a,s,l||null,i,u||null)),d&&function(){for(var e=0;e<ls.length;e++)ls[e]=1}()}return c};function as(e,t,n){var r=e;return!t&&(n?2&e:1&e)?(r|=2,r&=-5):(r|=4,r&=-3),r}function ss(e,t){var n=0!=(1&e);return n?4&e&&t&&(n=!1):2&e&&(n=t),n}var ls=[];function us(e){return e>=ls.length&&ls.push(1),ls[e]}var cs=(Object.defineProperty(ps.prototype,\"config\",{get:function(){return ys(this.context)},enumerable:!0,configurable:!0}),Object.defineProperty(ps.prototype,\"entries\",{get:function(){for(var e=this.context,t=Er(e),n={},r=Mr(e);r<e.length;){for(var i=xr(e,r),o=Sr(e,r,!1),a=Sr(e,r,!0),s=Dr(e,r),l=Cr(e,r),u=r+4,c=[],p=0;p<t;p++){var d=e[u+p];0!==d&&c.push(d)}n[i]={prop:i,templateBitMask:o,hostBindingsBitMask:a,sanitizationRequired:l,valuesCount:c.length,defaultValue:s,sources:c},r+=4+t}return n},enumerable:!0,configurable:!0}),ps.prototype.printSources=function(){for(var r=\"\\n\",e=this.context,t=this._isClassBased?\"class\":\"style\",n=[],i=Er(e),o=4+i,a=0;a<i;a++){for(var s=a===i-1,l=a!==dr,u=hs(a,i),c=[],p=3;p<e.length;){var d=kr(e,p,a);if(s||0<d){var h=Sr(e,p,l),f=s?-1:d,m=xr(e,p),v=t+(m===pr?\"\":\".\"+m);c.push({binding:v,value:d,bindingIndex:f,bitMask:h})}p+=o}n.push({type:u,entries:c.sort(function(e,t){return e.bindingIndex-t.bindingIndex})})}n.forEach(function(e){r+=\"[\"+e.type.toUpperCase()+\"]\\n\",r+=fs(\"-\",e.type.length+2)+\"\\n\",e.entries.forEach(function(e){var t=\"number\"!=typeof e.value,n=e.value;t&&null===n||(r+=\"  [\"+e.binding+\"] = `\"+n+\"`\",r+=\"\\n\")}),r+=\"\\n\"}),console.log(r)},ps.prototype.printTable=function(){if(!console.table)throw new Error(\"This feature is not supported in your browser\");for(var e=this.context,t=[],n=Er(e),r=4+n,i=Math.floor(e.length/r),o=3;o<e.length;){for(var a=xr(e,o),s=a===pr,l={prop:a,\"tpl mask\":ds(Sr(e,o,!1),s,i),\"host mask\":ds(Sr(e,o,!0),s,i)},u=0;u<n;u++){var c=hs(u,n),p=kr(e,o,u);l[c]=p}o+=r,t.push(l)}console.table(t)},ps);function ps(e,t){this.context=e,this._isClassBased=t}function ds(e,t,n){return t||1<e?\"0b\"+function(e,t,n){return fs(n,t-e.length)+e}(e.toString(2),n,\"0\"):null}function hs(e,t){return e===dr?\"template\":e===t-1?\"defaults\":\"dir #\"+e}function fs(e,t){for(var n=\"\",r=0;r<t;r++)n+=e;return n}var ms=(Object.defineProperty(vs.prototype,\"context\",{get:function(){return this._debugContext},enumerable:!0,configurable:!0}),vs.prototype.overrideSanitizer=function(e){this._sanitizer=e},Object.defineProperty(vs.prototype,\"summary\",{get:function(){var r={};return this._mapValues(function(e,t,n){r[e]={prop:e,value:t,bindingIndex:n}}),r},enumerable:!0,configurable:!0}),Object.defineProperty(vs.prototype,\"config\",{get:function(){return ys(this.context.context)},enumerable:!0,configurable:!0}),Object.defineProperty(vs.prototype,\"values\",{get:function(){var n={};return this._mapValues(function(e,t){n[e]=t}),n},enumerable:!0,configurable:!0}),vs.prototype._mapValues=function(o){var e={};function t(e,t,n,r,i){return o(n,r,i||null)}_r(this.context.context,4)&&is();var n=this._isClassBased?null:this._sanitizer||Gn();Wa(this.context.context,null,e,this._data,!0,t,n,!1),Wa(this.context.context,null,e,this._data,!0,t,n,!0)},vs);function vs(e,t,n){this._data=t,this._isClassBased=n,this._sanitizer=null,this._debugContext=Lr(e)?new cs(e,n):e}function ys(e){return{hasMapBindings:_r(e,4),hasPropBindings:_r(e,2),hasCollisions:_r(e,8),hasTemplateBindings:_r(e,32),hasHostBindings:_r(e,64),templateBindingsLocked:_r(e,128),hostBindingsLocked:_r(e,256),allowDirectStyling:br(e,!1)||br(e,!0)}}var gs,_s=(\"undefined\"==typeof ngDevMode||!!ngDevMode)&&Xe(),bs=_s&&na(\"LView\")||null;var ws=(Object.defineProperty(xs.prototype,\"template_\",{get:function(){var e=[];return Es(this.firstChild,e),e.join(\"\")},enumerable:!0,configurable:!0}),xs);function xs(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y,g,_,b,w,x,C,S,E,O,k){this.id=e,this.blueprint=t,this.template=n,this.queries=r,this.viewQuery=i,this.node=o,this.data=a,this.bindingStartIndex=s,this.expandoStartIndex=l,this.expandoInstructions=u,this.firstTemplatePass=c,this.staticViewQueries=p,this.staticContentQueries=d,this.preOrderHooks=h,this.preOrderCheckHooks=f,this.contentHooks=m,this.contentCheckHooks=v,this.viewHooks=y,this.viewCheckHooks=g,this.destroyHooks=_,this.cleanup=b,this.contentQueries=w,this.components=x,this.directiveRegistry=C,this.pipeRegistry=S,this.firstChild=E,this.schemas=O,this.consts=k}var Cs=(Object.defineProperty(Ss.prototype,\"type_\",{get:function(){switch(this.type){case 0:return\"TNodeType.Container\";case 3:return\"TNodeType.Element\";case 4:return\"TNodeType.ElementContainer\";case 5:return\"TNodeType.IcuContainer\";case 1:return\"TNodeType.Projection\";case 2:return\"TNodeType.View\";default:return\"TNodeType.???\"}},enumerable:!0,configurable:!0}),Object.defineProperty(Ss.prototype,\"flags_\",{get:function(){var e=[];return 16&this.flags&&e.push(\"TNodeFlags.hasClassInput\"),8&this.flags&&e.push(\"TNodeFlags.hasContentQuery\"),32&this.flags&&e.push(\"TNodeFlags.hasStyleInput\"),64&this.flags&&e.push(\"TNodeFlags.hasInitialStyling\"),256&this.flags&&e.push(\"TNodeFlags.hasHostBindings\"),2&this.flags&&e.push(\"TNodeFlags.isComponentHost\"),1&this.flags&&e.push(\"TNodeFlags.isDirectiveHost\"),128&this.flags&&e.push(\"TNodeFlags.isDetached\"),4&this.flags&&e.push(\"TNodeFlags.isProjected\"),e.join(\"|\")},enumerable:!0,configurable:!0}),Object.defineProperty(Ss.prototype,\"template_\",{get:function(){var e=[];if(e.push(\"<\",this.tagName||this.type_),this.attrs)for(var t=0;t<this.attrs.length;){var n=this.attrs[t++];if(\"number\"==typeof n)break;var r=this.attrs[t++];e.push(\" \",n,'=\"',r,'\"')}return e.push(\">\"),Es(this.child,e),e.push(\"</\",this.tagName||this.type_,\">\"),e.join(\"\")},enumerable:!0,configurable:!0}),Ss);function Ss(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y,g,_,b,w,x){this.tView_=e,this.type=t,this.index=n,this.injectorIndex=r,this.directiveStart=i,this.directiveEnd=o,this.propertyBindings=a,this.flags=s,this.providerIndexes=l,this.tagName=u,this.attrs=c,this.localNames=p,this.initialInputs=d,this.inputs=h,this.outputs=f,this.tViews=m,this.next=v,this.projectionNext=y,this.child=g,this.parent=_,this.projection=b,this.styles=w,this.classes=x}function Es(e,t){for(;e;)t.push(e.template_),e=e.next}var Os,ks=_s&&na(\"TViewData\")||null;var Ds=_s&&na(\"LViewBlueprint\")||null,Ts=_s&&na(\"MatchesArray\")||null,Is=_s&&na(\"TViewComponents\")||null,Ps=_s&&na(\"TNodeLocalNames\")||null,As=_s&&na(\"TNodeInitialInputs\")||null,Ms=(_s&&na(\"TNodeInitialData\"),_s&&na(\"LCleanup\")||null),Rs=_s&&na(\"TCleanup\")||null;function Ns(e){if(e){var t=e.debug;return Ge(t,\"Object does not have a debug representation.\"),t}return e}function js(e,t){void 0===t&&(t=!1);var n=$r(e);if(n){var r=n.nodeType===Node.TEXT_NODE,i=(r?n.textContent:n.outerHTML)||\"\";if(t||r)return i;var o=\">\"+n.innerHTML+\"<\";return i.split(o)[0]+\">\"}return null}var Fs=(Object.defineProperty(Ls.prototype,\"flags\",{get:function(){var e=this._raw_lView[gt];return{__raw__flags__:e,initPhaseState:3&e,creationMode:!!(4&e),firstViewPass:!!(8&e),checkAlways:!!(16&e),dirty:!!(64&e),attached:!!(128&e),destroyed:!!(256&e),isRoot:!!(512&e),indexWithinInitPhase:e>>10}},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"parent\",{get:function(){return Ns(this._raw_lView[_t])},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"host\",{get:function(){return js(this._raw_lView[vt],!0)},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"html\",{get:function(){return(this.nodes||[]).map(function(e){return js(e.native,!0)}).join(\"\")},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"context\",{get:function(){return this._raw_lView[Et]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"nodes\",{get:function(){var e=this._raw_lView;return Vs(e[yt].firstChild,e)},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"tView\",{get:function(){return this._raw_lView[yt]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"cleanup\",{get:function(){return this._raw_lView[St]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"injector\",{get:function(){return this._raw_lView[Ot]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"rendererFactory\",{get:function(){return this._raw_lView[kt]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"renderer\",{get:function(){return this._raw_lView[Dt]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"sanitizer\",{get:function(){return this._raw_lView[Tt]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"childHead\",{get:function(){return Ns(this._raw_lView[It])},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"next\",{get:function(){return Ns(this._raw_lView[bt])},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"childTail\",{get:function(){return Ns(this._raw_lView[Pt])},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"declarationView\",{get:function(){return Ns(this._raw_lView[At])},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"queries\",{get:function(){return this._raw_lView[wt]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"tHost\",{get:function(){return this._raw_lView[xt]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"bindingIndex\",{get:function(){return this._raw_lView[Ct]},enumerable:!0,configurable:!0}),Object.defineProperty(Ls.prototype,\"childViews\",{get:function(){for(var e=[],t=this.childHead;t;)e.push(t),t=t.next;return e},enumerable:!0,configurable:!0}),Ls);function Ls(e){this._raw_lView=e}function Vs(e,t){if(e){for(var n=[],r=e;r;)n.push(Bs(r,t,r.index)),r=r.next;return n}return null}function Bs(e,t,n){var r=t[n],i=$r(r),o=Ns(function(e){for(;Array.isArray(e);){if(e.length>=Nt-1)return e;e=e[vt]}return null}(r)),a=Lr(e.styles)?new ms(e.styles,t,!1):null,s=Lr(e.classes)?new ms(e.classes,t,!0):null;return{html:js(i),native:i,styles:a,classes:s,nodes:Vs(e.child,t),component:o}}var Us=(Object.defineProperty(zs.prototype,\"activeIndex\",{get:function(){return this._raw_lContainer[Ft]},enumerable:!0,configurable:!0}),Object.defineProperty(zs.prototype,\"views\",{get:function(){return this._raw_lContainer.slice(Ut).map(Ns)},enumerable:!0,configurable:!0}),Object.defineProperty(zs.prototype,\"parent\",{get:function(){return Ns(this._raw_lContainer[_t])},enumerable:!0,configurable:!0}),Object.defineProperty(zs.prototype,\"movedViews\",{get:function(){return this._raw_lContainer[Lt]},enumerable:!0,configurable:!0}),Object.defineProperty(zs.prototype,\"host\",{get:function(){return this._raw_lContainer[vt]},enumerable:!0,configurable:!0}),Object.defineProperty(zs.prototype,\"native\",{get:function(){return this._raw_lContainer[Vt]},enumerable:!0,configurable:!0}),Object.defineProperty(zs.prototype,\"next\",{get:function(){return Ns(this._raw_lContainer[bt])},enumerable:!0,configurable:!0}),zs);function zs(e){this._raw_lContainer=e}var qs=(Object.defineProperty(Hs.prototype,\"tNode\",{get:function(){return ni(this.nodeIndex,this._lView)},enumerable:!0,configurable:!0}),Hs);function Hs(e,t,n,r){this.__raw_opCode=e,this._lView=t,this.nodeIndex=n,this.type=r}var Ws=(Object.defineProperty(Gs.prototype,\"operations\",{get:function(){for(var e=this.__lView,t=this.__raw_opCodes,n=[],r=0;r<t.length;r++){var i=t[r],o=void 0;if(\"string\"==typeof i&&(o={__raw_opCode:i,type:\"Create Text Node\",nodeIndex:t[++r],text:i}),\"number\"==typeof i)switch(7&i){case 1:o=new qs(i,e,i>>>17,\"AppendChild\");break;case 0:o=new qs(i,e,i>>>3,\"Select\");break;case 5:var a=i>>>3;o=new qs(i,e,a,\"ElementEnd\");break;case 4:(o=new qs(i,e,a=i>>>3,\"Attr\")).attrName=t[++r],o.attrValue=t[++r]}if(!o)switch(i){case ns:o={__raw_opCode:i,type:\"COMMENT_MARKER\",commentValue:t[++r],nodeIndex:t[++r]};break;case ts:o={__raw_opCode:i,type:\"ELEMENT_MARKER\"}}o=o||{__raw_opCode:i,type:\"Unknown Op Code\",code:i},n.push(o)}return n},enumerable:!0,configurable:!0}),Gs);function Gs(e,t){this.__raw_opCodes=e,this.__lView=t}var Ys=(Object.defineProperty(Ks.prototype,\"operations\",{get:function(){for(var e=this.__lView,t=this.__raw_opCodes,n=this.icus,r=[],i=0;i<t.length;i++){for(var o=t[i],a=t[++i],s=\"\",l=i+1;l<=i+a;l++){var u=t[l];if(\"string\"==typeof u)s+=u;else if(\"number\"==typeof u)if(u<0)s+=\"�\"+(-u-1)+\"�\";else{var c=u>>>2,p=void 0,d=void 0;switch(3&u){case 1:var h=t[++l],f=t[++l];r.push({__raw_opCode:u,checkBit:o,type:\"Attr\",attrValue:s,attrName:h,sanitizeFn:f});break;case 0:r.push({__raw_opCode:u,checkBit:o,type:\"Text\",nodeIndex:c,text:s});break;case 2:d=n[p=t[++l]];var m=new qs(u,e,c,\"IcuSwitch\");m.tIcuIndex=p,m.checkBit=o,m.mainBinding=s,m.tIcu=d,r.push(m);break;case 3:d=n[p=t[++l]],(m=new qs(u,e,c,\"IcuUpdate\")).tIcuIndex=p,m.checkBit=o,m.tIcu=d,r.push(m)}}}i+=a}return r},enumerable:!0,configurable:!0}),Ks);function Ks(e,t,n){this.__raw_opCodes=e,this.icus=t,this.__lView=n}var Zs=Promise.resolve(null);function Qs(e,t){var n=e.contentQueries;if(null!==n)for(var r=0;r<n.length;r+=2){var i=n[r],o=n[r+1];if(-1!==o){var a=e.data[o];ngDevMode&&Ge(a.contentQueries,\"contentQueries function should be defined\"),jn(i),a.contentQueries(2,t[o],o)}}}function Xs(e,t,n){return Yn(t)?t.createElement(e,n):null===n?t.createElement(e):t.createElementNS(n,e)}function $s(e,t,n,r,i,o,a,s,l,u){var c=ngDevMode?function(e){return void 0===gs&&(gs=new bs),gs.concat(e)}(t.blueprint):t.blueprint.slice();return c[vt]=i,c[gt]=140|r,li(c),c[_t]=c[At]=e,c[Et]=n,c[kt]=a||e&&e[kt],ngDevMode&&Ge(c[kt],\"RendererFactory is required\"),c[Dt]=s||e&&e[Dt],ngDevMode&&Ge(c[Dt],\"Renderer is required\"),c[Tt]=l||e&&e[Tt]||null,c[Ot]=u||e&&e[Ot]||null,c[xt]=o,ngDevMode&&function(e){rs(e,new Fs(e))}(c),c}function Js(e,t,n,r,i,o){var a=n+Nt,s=e.data[a]||function(e,t,n,r,i,o){var a=On(),s=Tn(),l=s?a:a&&a.parent,u=l&&l!==t?l:null,c=e.data[n]=dl(e,u,r,n,i,o);null===e.firstChild&&(e.firstChild=c);a&&(!s||null!=a.child||null===c.parent&&2!==a.type?s||(a.next=c):a.child=c);return c}(e,t,a,r,i,o);return kn(s,!0),s}function el(e,t,n,r){var i=e.node;return null==i&&(ngDevMode&&t&&un(t,3,0),e.node=i=dl(e,t,2,n,null,null)),r[xt]=i}function tl(e,t,n){ngDevMode&&Ue(si(e),!0,\"Should be run in creation mode\");var r=Fn(e,e[xt]);try{var i=t.viewQuery;null!==i&&Bl(1,i,n);var o=t.template;null!==o&&il(e,o,1,n),t.firstTemplatePass&&(t.firstTemplatePass=!1),t.staticContentQueries&&Qs(t,e),t.staticViewQueries&&Bl(2,t.viewQuery,n);var a=t.components;null!==a&&function(e,t){for(var n=0;n<t.length;n++)Ml(e,t[n])}(e,a)}finally{e[gt]&=-5,Fn(r,null)}}function nl(e,t,n,r){ngDevMode&&Ue(si(e),!1,\"Should be run in update mode\");var i=Fn(e,e[xt]),o=e[gt];try{li(e),Rn(e[Ct]=t.bindingStartIndex),null!==n&&il(e,n,2,r);var a=Pn(),s=3==(3&o);if(!a)if(s){var l=t.preOrderCheckHooks;null!==l&&_a(e,l,null)}else{var u=t.preOrderHooks;null!==u&&ba(e,u,0,null),wa(e,0)}if(!function(e){var t=e[It];for(;null!==t;){if(qt(t)&&-1===t[Ft])for(var n=Ut;n<t.length;n++){var r=t[n],i=r[yt];ngDevMode&&Ge(i,\"TView must be allocated\"),nl(r,i,i.template,r[Et])}t=t[bt]}}(e),null!==t.contentQueries&&Qs(t,e),!a)if(s){var c=t.contentCheckHooks;null!==c&&_a(e,c)}else{var p=t.contentHooks;null!==p&&ba(e,p,1),wa(e,1)}!function(e,t){var n=Vn();try{if(null!==e.expandoInstructions){var r=t[Ct]=e.expandoStartIndex;Rn(r);for(var i=-1,o=-1,a=0;a<e.expandoInstructions.length;a++){var s=e.expandoInstructions[a];if(\"number\"==typeof s){if(s<=0){bn(o=-s);var l=e.expandoInstructions[++a];i=r+=on+l}else r+=s;Rn(r)}else{if(null!==s)Sn(),t[Ct]=r,s(2,$r(t[i]),o);i++}}}}finally{bn(n)}}(t,e);var d=t.components;null!==d&&function(e,t){for(var n=0;n<t.length;n++)Al(e,t[n])}(e,d);var h=t.viewQuery;if(null!==h&&Bl(2,h,r),!a)if(s){var f=t.viewCheckHooks;null!==f&&_a(e,f)}else{var m=t.viewHooks;null!==m&&ba(e,m,2),wa(e,2)}}finally{e[gt]&=-73,Fn(i,null)}}function rl(e,t,n){var r=e[kt],i=!Pn(),o=si(e),a=On(),s=Tn();try{i&&!o&&r.begin&&r.begin();var l=e[yt];o&&tl(e,l,n),nl(e,l,t,n)}finally{i&&!o&&r.end&&r.end(),kn(a,s)}}function il(e,t,n,r){Hn();var i=Vn();try{bn(null),2&n&&e.length>Nt&&es(e,0,Pn()),t(n,r)}finally{_n(1)&&wn(),Bn(i)}}function ol(e,t,n){if(Ht(t))for(var r=t.directiveStart,i=t.directiveEnd,o=r;o<i;o++){var a=e.data[o];a.contentQueries&&a.contentQueries(1,n[o],o)}}function al(e,t,n){mn()&&(function(e,t,n){var r=n.directiveStart,i=n.directiveEnd;e.firstTemplatePass||yi(n,t);for(var o=r;o<i;o++){var a=e.data[o];Yt(a)&&(c=a,h=void 0,p=ei(u=n,l=t),d=ll(c),h=l[kt],f=Rl(l,$s(l,d,null,c.onPush?64:16,p,u,h,h.createRenderer(p,c))),l[u.index]=f);var s=ki(e.data,t,o,n);xl(t,n,s,a,o-r)}var l,u,c,p,d,h,f}(e,t,n),256==(256&n.flags)&&function(e,t,n){var r=n.directiveStart,i=n.directiveEnd,o=e.expandoInstructions,a=e.firstTemplatePass,s=n.index-Nt;try{bn(s);for(var l=r;l<i;l++){var u=e.data[l],c=t[l];u.hostBindings?(Sn(),bl(u,o,c,n,a)):a&&o.push(null)}}finally{bn(null)}}(e,t,n))}function sl(e,t,n){void 0===n&&(n=ei);var r=t.localNames;if(r)for(var i=t.index+1,o=0;o<r.length;o+=2){var a=r[o+1],s=-1===a?n(t,e):e[a];e[i++]=s}}function ll(e){return e.tView||(e.tView=ul(-1,e.template,e.decls,e.vars,e.directiveDefs,e.pipeDefs,e.viewQuery,e.schemas,e.consts))}function ul(e,t,n,r,i,o,a,s,l){ngDevMode&&ngDevMode.tView++;var u=Nt+n,c=u+r,p=function(e,t){for(var n=ngDevMode?new Ds:[],r=0;r<t;r++)n.push(r<e?null:cr);return n[Ct]=e,n}(u,c);return p[yt]=ngDevMode?new ws(e,p,t,null,a,null,function(e){return void 0===Os&&(Os=new ks),Os.concat(e)}(p).fill(null,u),u,c,null,!0,!1,!1,null,null,null,null,null,null,null,null,null,null,\"function\"==typeof i?i():i,\"function\"==typeof o?o():o,null,s,l):{id:e,blueprint:p,template:t,queries:null,viewQuery:a,node:null,data:p.slice().fill(null,u),bindingStartIndex:u,expandoStartIndex:c,expandoInstructions:null,firstTemplatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:\"function\"==typeof i?i():i,pipeRegistry:\"function\"==typeof o?o():o,firstChild:null,schemas:s,consts:l}}function cl(e,t){return new Error(\"Renderer: \"+e+\" [\"+rr(t)+\"]\")}function pl(e,t){var n=e.createRenderer(null,null),r=\"string\"==typeof t?Yn(n)?n.selectRootElement(t):n.querySelector(t):t;if(ngDevMode&&!r)throw cl(\"string\"==typeof t?\"Host node with selector not found:\":\"Host node is required:\",t);return r}function dl(e,t,n,r,i,o){ngDevMode&&ngDevMode.tNode++;var a=t?t.injectorIndex:-1;return ngDevMode?new Cs(e,n,r,a,-1,-1,null,0,0,i,o,null,void 0,void 0,void 0,null,null,null,null,t,null,null,null):{type:n,index:r,injectorIndex:a,directiveStart:-1,directiveEnd:-1,propertyBindings:null,flags:0,providerIndexes:0,tagName:i,attrs:o,localNames:null,initialInputs:void 0,inputs:void 0,outputs:void 0,tViews:null,next:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,classes:null}}function hl(e,t,n){for(var r in e)if(e.hasOwnProperty(r)){n=null===n?{}:n;var i=e[r];n.hasOwnProperty(r)?n[r].push(t,r,i):n[r]=[t,r,i]}return n}function fl(e,t,n,r,i,o,a){ngDevMode&&qe(r,cr,\"Incoming value should never be NO_CHANGE.\");var s,l=Jr(t,e),u=ni(t,e),c=u.inputs;if(!o&&null!=c&&(s=c[n]))Yl(e,s,r),Wt(u)&&function(e,t){ngDevMode&&en(e);var n=ii(t,e);16&n[gt]||(n[gt]|=64)}(e,t+Nt),ngDevMode&&vl(e,l,u.type,s,r);else if(3===u.type){if(n=function(e){return\"class\"===e?\"className\":\"for\"===e?\"htmlFor\":\"formaction\"===e?\"formAction\":\"innerHtml\"===e?\"innerHTML\":\"readonly\"===e?\"readOnly\":\"tabindex\"===e?\"tabIndex\":e}(n),ngDevMode){if(!function(e){if(e.toLowerCase().startsWith(\"on\")){var t=\"Binding to event property '\"+e+\"' is disallowed for security reasons, please use (\"+e.slice(2)+\")=...\\nIf '\"+e+\"' is a directive input, make sure the directive is imported by the current module.\";throw new Error(t)}}(n),!function(e,t,n,r){return yl(e,r.tagName)||n in t||Xn(n)||\"function\"!=typeof Node||!(t instanceof Node)}(e,l,n,u))return void gl(n,u);ngDevMode.rendererSetProperty++}var p=a?a(u,e):e[Dt];r=null!=i?i(r,u.tagName||\"\",n):r,Yn(p)?p.setProperty(l,n,r):Xn(n)||(l.setProperty?l.setProperty(n,r):l[n]=r)}else 0===u.type&&ngDevMode&&!yl(e,u.tagName)&&gl(n,u)}function ml(e,t,n,r,i){var o,a=e[Dt];r=ra(r);var s=oa(i);if(3===n)null==i?Yn(a)?a.removeAttribute(t,r):t.removeAttribute(r):Yn(a)?a.setAttribute(t,r,s):t.setAttribute(r,s);else{var l=\"bindings=\"+JSON.stringify(((o={})[r]=s,o),null,2);Yn(a)?a.setValue(t,l):t.textContent=l}}function vl(e,t,n,r,i){if(3===n||0===n)for(var o=0;o<r.length;o+=3)ml(e,t,n,r[o+2],i)}function yl(e,t){var n=e[yt].schemas;if(null!==n)for(var r=0;r<n.length;r++){var i=n[r];if(i===qi||i===zi&&t&&-1<t.indexOf(\"-\"))return!0}return!1}function gl(e,t){console.warn(\"Can't bind to '\"+e+\"' since it isn't a known property of '\"+t.tagName+\"'.\")}function _l(e,t,n,r){if(ngDevMode&&tn(e),mn()){var i=function(e,t,n){ngDevMode&&tn(e),ngDevMode&&un(n,3,4,0);var r=e.directiveRegistry,i=null;if(r)for(var o=0;o<r.length;o++){var a=r[o];Ta(n,a.selectors,!1)&&(i=i||(ngDevMode?new Ts:[]),wi(yi(n,t),e,a.type),Yt(a)?(2&n.flags&&fa(n),Sl(e,n),i.unshift(a)):i.push(a))}return i}(e,t,n),o=r?{\"\":-1}:null;if(null!==i){Ol(n,e.data.length,i.length);for(var a=0;a<i.length;a++){(c=i[a]).providersResolver&&c.providersResolver(c)}wl(e,n,i.length);var s=e.preOrderHooks&&e.preOrderHooks.length||0,l=e.preOrderCheckHooks&&e.preOrderCheckHooks.length||0,u=n.index-Nt;for(a=0;a<i.length;a++){var c=i[a],p=e.data.length;kl(e,t,c),El(e.data.length-1,c,o),null!==c.contentQueries&&(n.flags|=8),null!==c.hostBindings&&(n.flags|=256),ya(p,c,e,u,s,l)}!function(e,t){ngDevMode&&tn(e);for(var n=t.directiveStart,r=t.directiveEnd,i=e.data,o=t.attrs,a=ngDevMode?new As:[],s=null,l=null,u=n;u<r;u++){var c=i[u],p=c.inputs;a.push(null!==o?Tl(p,o):null),s=hl(p,u,s),l=hl(c.outputs,u,l)}null!==s&&((s.hasOwnProperty(\"class\")||s.hasOwnProperty(\"className\"))&&(t.flags|=16),s.hasOwnProperty(\"style\")&&(t.flags|=32)),t.initialInputs=a,t.inputs=s,t.outputs=l}(e,n)}o&&function(e,t,n){if(t)for(var r=e.localNames=ngDevMode?new Ps:[],i=0;i<t.length;i+=2){var o=n[t[i+1]];if(null==o)throw new Error(\"Export of name '\"+t[i+1]+\"' not found!\");r.push(t[i],o)}}(n,r,o)}}function bl(e,t,n,r,i){var o=t.length;fn(e);var a=r.index-Nt;e.hostBindings(1,n,a),fn(null),o===t.length&&i&&t.push(e.hostBindings)}function wl(e,t,n){ngDevMode&&Ue(e.firstTemplatePass,!0,\"Expando block should only be generated on first template pass.\");var r=-(t.index-Nt),i=65535&t.providerIndexes,o=e.data.length-i;(e.expandoInstructions||(e.expandoInstructions=[])).push(r,o,n)}function xl(e,t,n,r,i){Cl(e,t,n),null!==t.initialInputs&&function(e,t,n,r,i){var o=i.initialInputs[t];if(null!==o)for(var a=r.setInput,s=0;s<o.length;){var l=o[s++],u=o[s++],c=o[s++];if(null!==a?r.setInput(n,c,l,u):n[u]=c,ngDevMode){var p=ei(i,e);ml(e,p,i.type,u,c)}}}(e,i,n,r,t),Yt(r)&&(ii(t.index,e)[Et]=n)}function Cl(e,t,n){ngDevMode&&Ue(e[Ct],e[yt].bindingStartIndex,\"directives should be created before any bindings\"),ua(n,e);var r=ei(t,e);r&&ua(r,e)}function Sl(e,t){ngDevMode&&tn(e),t.flags|=2,(e.components||(e.components=ngDevMode?new Is:[])).push(t.index)}function El(e,t,n){if(n){if(t.exportAs)for(var r=0;r<t.exportAs.length;r++)n[t.exportAs[r]]=e;t.template&&(n[\"\"]=e)}}function Ol(e,t,n){ngDevMode&&ze(n,e.directiveEnd-e.directiveStart,\"Reached the max number of directives\"),e.flags|=1,e.directiveStart=t,e.directiveEnd=t+n,e.providerIndexes=t}function kl(e,t,n){e.data.push(n);var r=n.factory||(n.factory=ft(n.type,!0)),i=new sn(r,Yt(n),null);e.blueprint.push(i),t.push(i)}function Dl(e,t,n,r,i,o){ngDevMode&&qe(n,cr,\"Incoming value should never be NO_CHANGE.\"),ngDevMode&&function(e){if(e.toLowerCase().startsWith(\"on\")){var t=\"Binding to event attribute '\"+e+\"' is disallowed for security reasons, please use (\"+e.slice(2)+\")=...\";throw new Error(t)}}(t);var a=Jr(e,r),s=r[Dt];if(null==n)ngDevMode&&ngDevMode.rendererRemoveAttribute++,Yn(s)?s.removeAttribute(a,t,o):a.removeAttribute(t);else{ngDevMode&&ngDevMode.rendererSetAttribute++;var l=ni(e,r),u=null==i?nr(n):i(n,l.tagName||\"\",t);Yn(s)?s.setAttribute(a,t,u,o):o?a.setAttributeNS(o,t,u):a.setAttribute(t,u)}}function Tl(e,t){for(var n=null,r=0;r<t.length;){var i=t[r];if(0!==i)if(5!==i){if(\"number\"==typeof i)break;e.hasOwnProperty(i)&&(null===n&&(n=[]),n.push(i,e[i],t[r+1])),r+=2}else r+=2;else r+=4}return n}var Il=(\"undefined\"==typeof ngDevMode||ngDevMode)&&Xe()&&na(\"LContainer\");function Pl(e,t,n,r,i){ngDevMode&&en(t),ngDevMode&&!Yn(t[Dt])&&Ke(n);var o=new(ngDevMode?Il:Array)(e,!0,i?-1:0,t,null,null,r,n,null);return ngDevMode&&function(e){rs(e,new Us(e))}(o),o}function Al(e,t){ngDevMode&&Ue(si(e),!1,\"Should be run in update mode\");var n=ii(t,e);if(function(e){return 128==(128&e[gt])}(n)&&80&n[gt]){var r=n[yt];nl(n,r,r.template,n[Et])}}function Ml(e,t){ngDevMode&&Ue(si(e),!0,\"Should be run in creation mode\");var n=ii(t,e);!function(e){for(var t=e[yt],n=e.length;n<t.blueprint.length;n++)e.push(t.blueprint[n])}(n),tl(n,n[yt],n[Et])}function Rl(e,t){return e[It]?e[Pt][bt]=t:e[It]=t,e[Pt]=t}function Nl(e){for(;e;){e[gt]|=64;var t=ui(e);if(Kt(e)&&!t)return e;e=t}return null}function jl(e){for(var t=0;t<e.components.length;t++){var n=e.components[t],r=ai(n);rl(r,r[yt].template,n)}}function Fl(t,e){var n=t[kt],r=On(),i=Tn();n.begin&&n.begin();try{var o=t[yt];nl(t,o,o.template,e)}catch(e){throw Gl(t,e),e}finally{n.end&&n.end(),kn(r,i)}}function Ll(e){jl(e[Et])}function Vl(e,t){An(!0);try{Fl(e,t)}finally{An(!1)}}function Bl(e,t,n){ngDevMode&&Ge(t,\"View queries function to execute must be defined.\"),jn(0),t(e,n)}function Ul(e,t,n,r){for(var i=[],o=4;o<arguments.length;o++)i[o-4]=arguments[o];if(null===e[r]){var a=e[t+Nt];if(null==a.inputs||!a.inputs[n]){(a.propertyBindings||(a.propertyBindings=[])).push(r);var s=n;0<i.length&&(s+=lr+i.join(lr)),e[r]=s}}}var zl=Zs;function ql(e){return e[St]||(e[St]=ngDevMode?new Ms:[])}function Hl(e){return e[yt].cleanup||(e[yt].cleanup=ngDevMode?new Rs:[])}function Wl(e,t){return t[e.index][Dt]}function Gl(e,t){var n=e[Ot],r=n?n.get(Bi,null):null;r&&r.handleError(t)}function Yl(e,t,n){for(var r=e[yt],i=0;i<t.length;){var o=t[i++],a=t[i++],s=t[i++],l=e[o];ngDevMode&&Ze(e,o);var u=r.data[o];u.setInput?u.setInput(l,n,a,s):l[s]=n}}function Kl(e,t,n){ngDevMode&&qe(n,cr,\"value should not be NO_CHANGE\"),ngDevMode&&Ze(e,t+Nt);var r=Jr(t,e);ngDevMode&&Ge(r,\"native element should exist\"),ngDevMode&&ngDevMode.rendererSetText++;var i=e[Dt];Yn(i)?i.setValue(r,n):r.textContent=n}function Zl(e,t,n){Xa(e,t,n.classes,!0),Xa(e,t,n.styles,!1)}function Ql(e,t){ngDevMode&&en(t);var n=t[_t];return-1===e.index?qt(n)?n:null:(ngDevMode&&$t(n),n)}function Xl(e,t){var n=Ql(e,t);return n?du(t[Dt],n[Vt]):null}function $l(e,t,n,r,i){if(null!=r){var o=void 0,a=!1;qt(r)?o=r:zt(r)&&(a=!0,ngDevMode&&Ge(r[vt],\"HOST must be defined for a component LView\"),r=r[vt]);var s=$r(r);ngDevMode&&!Yn(t)&&Ke(s),0===e&&null!==n?null==i?cu(t,n,s):uu(t,n,s,i||null):1===e&&null!==n?uu(t,n,s,i||null):2===e?vu(t,s,a):3===e&&(ngDevMode&&ngDevMode.rendererDestroyNode++,t.destroyNode(s)),null!=o&&function(e,t,n,r,i){ngDevMode&&$t(n);var o=n[Vt],a=$r(n);o!==a&&$l(t,e,r,o,i);for(var s=Ut;s<n.length;s++){var l=n[s];gu(e,t,l,r,o)}}(t,e,o,n,i)}}function Jl(e,t){return ngDevMode&&ngDevMode.rendererCreateTextNode++,ngDevMode&&ngDevMode.rendererSetText++,Yn(t)?t.createText(e):t.createTextNode(e)}function eu(e,t,n){var r=Xl(e[yt].node,e);ngDevMode&&ln(e[yt].node,2),r&&gu(e[Dt],t?1:2,e,r,n)}function tu(e,t,n){ngDevMode&&en(e),ngDevMode&&$t(t);var r=Ut+n,i=t.length;0<n&&(t[r-1][bt]=e),n<i-Ut?(e[bt]=t[r],Le(t,Ut+n,e)):(t.push(e),e[bt]=null),e[_t]=t;var o=e[Mt];null!==o&&t!==o&&function(e,t){ngDevMode&&$t(e);var n=e[Lt];null===n?e[Lt]=[t]:n.push(t)}(o,e);var a=e[wt];null!==a&&a.insertView(e[yt]),e[gt]|=128}function nu(e,t){ngDevMode&&$t(e),ngDevMode&&Ge(e[Lt],\"A projected view should belong to a non-empty projected views collection\");var n=e[Lt],r=n.indexOf(t);n.splice(r,1)}function ru(e,t){if(!(e.length<=Ut)){var n=Ut+t,r=e[n];if(r){var i=r[Mt];null!==i&&i!==e&&nu(i,r),0<t&&(e[n-1][bt]=r[bt]);var o=Ve(e,Ut+t);eu(r,!1,null);var a=o[wt];null!==a&&a.detachView(o[yt]),r[_t]=null,r[bt]=null,r[gt]&=-129}return r}}function iu(e,t){var n=ru(e,t);n&&ou(n)}function ou(e){if(!(256&e[gt])){var t=e[Dt];Yn(t)&&t.destroyNode&&gu(t,3,e,null,null),function(e){var t=e[It];if(!t)return su(e);for(;t;){var n=null;if(zt(t))n=t[It];else{ngDevMode&&$t(t);var r=t[Ut];r&&(n=r)}if(!n){for(;t&&!t[bt]&&t!==e;)su(t),t=au(t,e);su(t||e),n=t&&t[bt]}t=n}}(e)}}function au(e,t){var n;return zt(e)&&(n=e[xt])&&2===n.type?Ql(n,e):e[_t]===t?null:e[_t]}function su(e){if(zt(e)&&!(256&e[gt])){e[gt]&=-129,e[gt]|=256,function(e){var t,n=e[yt];if(null!=n&&null!=(t=n.destroyHooks))for(var r=0;r<t.length;r+=2){var i=e[t[r]];i instanceof sn||t[r+1].call(i)}}(e),function(e){var t=e[yt].cleanup;if(null!==t){for(var n=e[St],r=0;r<t.length-1;r+=2)if(\"string\"==typeof t[r]){var i=t[r+1],o=\"function\"==typeof i?i(e):$r(e[i]),a=n[t[r+2]],s=t[r+3];\"boolean\"==typeof s?o.removeEventListener(t[r],a,s):0<=s?n[s]():n[-s].unsubscribe(),r+=2}else{var l=n[t[r+1]];t[r].call(l)}e[St]=null}}(e);var t=e[xt];t&&3===t.type&&Yn(e[Dt])&&(ngDevMode&&ngDevMode.rendererDestroy++,e[Dt].destroy());var n=e[Mt];if(null!==n&&qt(e[_t])){n!==e[_t]&&nu(n,e);var r=e[wt];null!==r&&r.detachView(e[yt])}}}function lu(e,t){if(Kt(t))return du(t[Dt],ei(e,t));for(var n=e.parent;null!=n&&(4===n.type||5===n.type);)n=(e=n).parent;if(null==n){var r=t[xt];return 2===r.type?Xl(r,t):function(e){ngDevMode&&en(e);var t=e[xt];return t&&3===t.type?ei(t,ui(e)):null}(t)}if(e&&5===e.type&&4&e.flags)return ei(e,t).parentNode;if(ngDevMode&&ln(n,3),2&n.flags){var i=t[yt].data,o=i[i[n.index].directiveStart].encapsulation;if(o!==N.ViewEncapsulation.ShadowDom&&o!==N.ViewEncapsulation.Native)return null}return ei(n,t)}function uu(e,t,n,r){ngDevMode&&ngDevMode.rendererInsertBefore++,Yn(e)?e.insertBefore(t,n,r):t.insertBefore(n,r,!0)}function cu(e,t,n){ngDevMode&&ngDevMode.rendererAppendChild++,ngDevMode&&Ge(t,\"parent node must be defined\"),Yn(e)?e.appendChild(t,n):t.appendChild(n)}function pu(e,t,n,r){null!==r?uu(e,t,n,r):cu(e,t,n)}function du(e,t){return Yn(e)?e.parentNode(t):t.parentNode}function hu(e,t){if(2!==e.type)return 4===e.type||5===e.type?ei(e,t):null;var n=Ql(e,t);return null===n?null:mu(n.indexOf(t,Ut)-Ut,n)}function fu(e,t,n){var r=lu(t,n);if(null!=r){var i=n[Dt],o=hu(t.parent||n[xt],n);if(Array.isArray(e))for(var a=0;a<e.length;a++)pu(i,r,e[a],o);else pu(i,r,e,o)}}function mu(e,t){var n=Ut+e+1;if(n<t.length){var r=t[n];ngDevMode&&Ge(r[xt],\"Missing Host TNode\");var i=r[xt].child;if(null!==i){if(4===i.type||5===i.type){for(var o=i.child;o&&(4===o.type||5===o.type);)o=o.child;i=o||i}return ti(i,r)}}return t[Vt]}function vu(e,t,n){var r=du(e,t);r&&function(e,t,n,r){Yn(e)?e.removeChild(t,n,r):t.removeChild(n)}(e,r,t,n)}function yu(e,t,n,r,i,o,a){for(;null!=n;){ngDevMode&&Zt(n,r),ngDevMode&&un(n,0,3,4,1,1,5);var s=r[n.index],l=n.type;a&&0===t&&(s&&ua($r(s),r),n.flags|=4),128!=(128&n.flags)&&(4===l||5===l?(yu(e,t,n.child,r,i,o,!1),$l(t,e,i,s,o)):1===l?bu(e,t,r,n,i,o):(ngDevMode&&un(n,3,0),$l(t,e,i,s,o))),n=a?n.projectionNext:n.next}}function gu(e,t,n,r,i){var o=n[yt];ngDevMode&&ln(o.node,2),yu(e,t,o.node.child,n,r,i,!1)}function _u(e,t){bu(e[Dt],0,e,t,lu(t,e),hu(t.parent||e[xt],e))}function bu(e,t,n,r,i,o){var a=pi(n),s=a[xt];ngDevMode&&Ue(typeof r.projection,\"number\",\"expecting projection index\");var l=s.projection[r.projection];if(Array.isArray(l))for(var u=0;u<l.length;u++){$l(t,e,i,l[u],o)}else yu(e,t,l,a[_t],i,o,!0)}var wu=(Object.defineProperty(xu.prototype,\"rootNodes\",{get:function(){if(null!=this._lView[vt])return[];var e=this._lView[xt];return function e(t,n,r){for(var i=n.child;i;){var o=ti(i,t);if(o&&r.push(o),4===i.type)e(t,i,r);else if(1===i.type)for(var a=pi(t),s=a[xt],l=ui(a),u=s.projection[i.projection];u&&l;)r.push(ei(u,l)),u=u.next;i=i.next}return r}(this._lView,e,[])},enumerable:!0,configurable:!0}),Object.defineProperty(xu.prototype,\"context\",{get:function(){return this._context?this._context:this._lookUpContext()},enumerable:!0,configurable:!0}),Object.defineProperty(xu.prototype,\"destroyed\",{get:function(){return 256==(256&this._lView[gt])},enumerable:!0,configurable:!0}),xu.prototype.destroy=function(){if(this._appRef)this._appRef.detachView(this);else if(this._viewContainerRef){var e=this._viewContainerRef.indexOf(this);-1<e&&this._viewContainerRef.detach(e),this._viewContainerRef=null}ou(this._lView)},xu.prototype.onDestroy=function(e){!function(e,t){ql(e).push(t),e[yt].firstTemplatePass&&Hl(e).push(e[St].length-1,null)}(this._lView,e)},xu.prototype.markForCheck=function(){Nl(this._lView)},xu.prototype.detach=function(){this._lView[gt]&=-129},xu.prototype.reattach=function(){this._lView[gt]|=128},xu.prototype.detectChanges=function(){Fl(this._lView,this.context)},xu.prototype.checkNoChanges=function(){Vl(this._lView,this.context)},xu.prototype.attachToViewContainerRef=function(e){if(this._appRef)throw new Error(\"This view is already attached directly to the ApplicationRef!\");this._viewContainerRef=e},xu.prototype.detachFromAppRef=function(){this._appRef=null,function(e){gu(e[Dt],2,e,null,null)}(this._lView)},xu.prototype.attachToAppRef=function(e){if(this._viewContainerRef)throw new Error(\"This view is already attached to a ViewContainer!\");this._appRef=e},xu.prototype._lookUpContext=function(){return this._context=ui(this._lView)[this._componentIndex]},xu);function xu(e,t,n){this._context=t,this._componentIndex=n,this._appRef=null,this._viewContainerRef=null,this._tViewNode=null,this._lView=e}var Cu,Su,Eu,Ou,ku=(p(Du,Cu=wu),Du.prototype.detectChanges=function(){Ll(this._view)},Du.prototype.checkNoChanges=function(){!function(e){An(!0);try{Ll(e)}finally{An(!1)}}(this._view)},Object.defineProperty(Du.prototype,\"context\",{get:function(){return null},enumerable:!0,configurable:!0}),Du);function Du(e){var t=Cu.call(this,e,null,-1)||this;return t._view=e,t}function Tu(e,t,n){function r(){return null!==i&&i.apply(this,arguments)||this}var i;return Su||(p(r,i=e),Su=r),new Su(ei(t,n))}function Iu(e,t,n,r){function i(e,t,n){var r=o.call(this)||this;return r._declarationView=e,r._declarationTContainer=t,r.elementRef=n,r}var o;return Eu||(p(i,o=e),i.prototype.createEmbeddedView=function(e){var t=this._declarationTContainer.tViews,n=$s(this._declarationView,t,e,16,null,t.node),r=this._declarationView[this._declarationTContainer.index];ngDevMode&&$t(r),n[Mt]=r;var i=this._declarationView[wt];null!==i&&(n[wt]=i.createEmbeddedView(t)),tl(n,t,e);var o=new wu(n,e,-1);return o._tViewNode=n[xt],o},Eu=i),0===n.type?(ngDevMode&&Ge(n.tViews,\"TView must be allocated\"),new Eu(r,n,Tu(t,n,r))):null}function Pu(e,t,n,r){function i(e,t,n){var r=o.call(this)||this;return r._lContainer=e,r._hostTNode=t,r._hostView=n,r}var o,a;Ou||(p(i,o=e),Object.defineProperty(i.prototype,\"element\",{get:function(){return Tu(t,this._hostTNode,this._hostView)},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,\"injector\",{get:function(){return new Ii(this._hostTNode,this._hostView)},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,\"parentInjector\",{get:function(){var e=bi(this._hostTNode,this._hostView),t=tr(e,this._hostView),n=function(e,t,n){if(n.parent&&-1!==n.parent.injectorIndex){for(var r=n.parent.injectorIndex,i=n.parent;null!=i.parent&&r==i.injectorIndex;)i=i.parent;return i}for(var o=er(e),a=t,s=t[xt];1<o;)s=(a=a[At])[xt],o--;return s}(e,this._hostView,this._hostTNode);return $n(e)&&null!=n?new Ii(n,t):new Ii(null,this._hostView)},enumerable:!0,configurable:!0}),i.prototype.clear=function(){for(;0<this.length;)this.remove(this.length-1)},i.prototype.get=function(e){return null!==this._lContainer[Bt]&&this._lContainer[Bt][e]||null},Object.defineProperty(i.prototype,\"length\",{get:function(){return this._lContainer.length-Ut},enumerable:!0,configurable:!0}),i.prototype.createEmbeddedView=function(e,t,n){var r=e.createEmbeddedView(t||{});return this.insert(r,n),r},i.prototype.createComponent=function(e,t,n,r,i){var o=n||this.parentInjector;!i&&null==e.ngModule&&o&&(i=o.get(Re,null)||void 0);var a=e.create(o,r,void 0,i);return this.insert(a.hostView,t),a},i.prototype.insert=function(e,t){if(e.destroyed)throw new Error(\"Cannot insert a destroyed View in a ViewContainer!\");this.allocateContainerIfNeeded();var n=e._lView,r=this._adjustIndex(t);return function(e){return qt(e[_t])}(n)?this.move(e,r):(tu(n,this._lContainer,r),eu(n,!0,mu(r,this._lContainer)),e.attachToViewContainerRef(this),Le(this._lContainer[Bt],r,e),e)},i.prototype.move=function(e,t){if(e.destroyed)throw new Error(\"Cannot move a destroyed View in a ViewContainer!\");var n=this.indexOf(e);return-1!==n&&this.detach(n),this.insert(e,t),e},i.prototype.indexOf=function(e){return null!==this._lContainer[Bt]?this._lContainer[Bt].indexOf(e):0},i.prototype.remove=function(e){this.allocateContainerIfNeeded();var t=this._adjustIndex(e,-1);iu(this._lContainer,t),Ve(this._lContainer[Bt],t)},i.prototype.detach=function(e){this.allocateContainerIfNeeded();var t=this._adjustIndex(e,-1),n=ru(this._lContainer,t);return n&&null!=Ve(this._lContainer[Bt],t)?new wu(n,n[Et],-1):null},i.prototype._adjustIndex=function(e,t){return void 0===t&&(t=0),null==e?this.length+t:(ngDevMode&&(We(e,-1,\"index must be positive\"),He(e,this.length+1+t,\"index\")),e)},i.prototype.allocateContainerIfNeeded=function(){null===this._lContainer[Bt]&&(this._lContainer[Bt]=[])},Ou=i),ngDevMode&&un(n,0,3,4);var s=r[n.index];if(qt(s))(a=s)[Ft]=-1;else{var l=void 0;if(l=4===n.type?$r(s):(ngDevMode&&ngDevMode.rendererCreateComment++,r[Dt].createComment(ngDevMode?\"container\":\"\")),Kt(r)){var u=r[Dt],c=ei(n,r);uu(u,du(u,c),l,function(e,t){return Yn(e)?e.nextSibling(t):t.nextSibling}(u,c))}else fu(l,n,r);r[n.index]=a=Pl(s,r,l,n,!0),Rl(r,a)}return new Ou(a,n,r)}function Au(e){return void 0===e&&(e=!1),function(e,t,n){{if(Wt(e)&&!n){var r=e.directiveStart,i=ii(e.index,t);return new wu(i,null,r)}if(3===e.type||0===e.type||4===e.type){var o=pi(t);return new wu(o,o[Et],-1)}}return null}(On(),gn(),e)}var Mu=(Ru.__NG_ELEMENT_ID__=function(){return Fu()},Ru);function Ru(){}function Nu(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]}var ju=Au,Fu=Nu,Lu=Function;function Vu(e){return\"function\"==typeof e}var Bu=/^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*arguments\\)/,Uu=/^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/,zu=/^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/,qu=/^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{\\s+super\\(\\.\\.\\.arguments\\)/;var Hu=(Wu.prototype.isReflectionEnabled=function(){return!0},Wu.prototype.factory=function(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new(n.bind.apply(n,O([void 0],e)))}},Wu.prototype._zipTypesAndAnnotations=function(e,t){var n;n=Be(void 0===e?t.length:e.length);for(var r=0;r<n.length;r++)void 0===e?n[r]=[]:e[r]&&e[r]!=Object?n[r]=[e[r]]:n[r]=[],t&&null!=t[r]&&(n[r]=n[r].concat(t[r]));return n},Wu.prototype._ownParameters=function(e,t){if(function(e){return Bu.test(e)||qu.test(e)||Uu.test(e)&&!zu.test(e)}(e.toString()))return null;if(e.parameters&&e.parameters!==t.parameters)return e.parameters;var n=e.ctorParameters;if(n&&n!==t.ctorParameters){var r=\"function\"==typeof n?n():n,i=r.map(function(e){return e&&e.type}),o=r.map(function(e){return e&&Gu(e.decorators)});return this._zipTypesAndAnnotations(i,o)}var a=e.hasOwnProperty(h)&&e[h],s=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata(\"design:paramtypes\",e);return s||a?this._zipTypesAndAnnotations(s,a):Be(e.length)},Wu.prototype.parameters=function(e){if(!Vu(e))return[];var t=Yu(e),n=this._ownParameters(e,t);return n||t===Object||(n=this.parameters(t)),n||[]},Wu.prototype._ownAnnotations=function(e,t){if(e.annotations&&e.annotations!==t.annotations){var n=e.annotations;return\"function\"==typeof n&&n.annotations&&(n=n.annotations),n}return e.decorators&&e.decorators!==t.decorators?Gu(e.decorators):e.hasOwnProperty(d)?e[d]:null},Wu.prototype.annotations=function(e){if(!Vu(e))return[];var t=Yu(e),n=this._ownAnnotations(e,t)||[];return(t!==Object?this.annotations(t):[]).concat(n)},Wu.prototype._ownPropMetadata=function(e,t){if(e.propMetadata&&e.propMetadata!==t.propMetadata){var n=e.propMetadata;return\"function\"==typeof n&&n.propMetadata&&(n=n.propMetadata),n}if(e.propDecorators&&e.propDecorators!==t.propDecorators){var r=e.propDecorators,i={};return Object.keys(r).forEach(function(e){i[e]=Gu(r[e])}),i}return e.hasOwnProperty(f)?e[f]:null},Wu.prototype.propMetadata=function(e){if(!Vu(e))return{};var t=Yu(e),n={};if(t!==Object){var r=this.propMetadata(t);Object.keys(r).forEach(function(e){n[e]=r[e]})}var i=this._ownPropMetadata(e,t);return i&&Object.keys(i).forEach(function(e){var t=[];n.hasOwnProperty(e)&&t.push.apply(t,O(n[e])),t.push.apply(t,O(i[e])),n[e]=t}),n},Wu.prototype.ownPropMetadata=function(e){return Vu(e)&&this._ownPropMetadata(e,Yu(e))||{}},Wu.prototype.hasLifecycleHook=function(e,t){return e instanceof Lu&&t in e.prototype},Wu.prototype.guards=function(e){return{}},Wu.prototype.getter=function(e){return new Function(\"o\",\"return o.\"+e+\";\")},Wu.prototype.setter=function(e){return new Function(\"o\",\"v\",\"return o.\"+e+\" = v;\")},Wu.prototype.method=function(e){return new Function(\"o\",\"args\",\"if (!o.\"+e+\") throw new Error('\\\"\"+e+\"\\\" is undefined');\\n        return o.\"+e+\".apply(o, args);\")},Wu.prototype.importUri=function(e){return\"object\"==typeof e&&e.filePath?e.filePath:\"./\"+V(e)},Wu.prototype.resourceUri=function(e){return\"./\"+V(e)},Wu.prototype.resolveIdentifier=function(e,t,n,r){return r},Wu.prototype.resolveEnum=function(e,t){return e[t]},Wu);function Wu(e){this._reflect=e||Q.Reflect}function Gu(e){return e?e.map(function(e){var t=e.type.annotationCls,n=e.args?e.args:[];return new(t.bind.apply(t,O([void 0],n)))}):[]}function Yu(e){var t=e.prototype?Object.getPrototypeOf(e.prototype):null;return(t?t.constructor:null)||Object}var Ku=null;function Zu(){return Ku=Ku||new Hu}function Qu(e){return Xu(Zu().parameters(e))}function Xu(e){var t=X();return e.map(function(e){return function(t,e){var n={token:null,host:!1,optional:!1,resolved:t.R3ResolvedDependencyType.Token,self:!1,skipSelf:!1};function r(e){n.resolved=t.R3ResolvedDependencyType.Token,n.token=e}if(Array.isArray(e)){if(0===e.length)throw new Error(\"Dependency array must have arguments.\");for(var i=0;i<e.length;i++){var o=e[i];if(void 0!==o)if(o instanceof b||\"Optional\"===o.__proto__.ngMetadataName)n.optional=!0;else if(o instanceof x||\"SkipSelf\"===o.__proto__.ngMetadataName)n.skipSelf=!0;else if(o instanceof w||\"Self\"===o.__proto__.ngMetadataName)n.self=!0;else if(o instanceof C||\"Host\"===o.__proto__.ngMetadataName)n.host=!0;else if(o instanceof _)n.token=o.token;else if(o instanceof S){if(void 0===o.attributeName)throw new Error(\"Attribute name must be defined.\");n.token=o.attributeName,n.resolved=t.R3ResolvedDependencyType.Attribute}else o===Mu?(n.token=o,n.resolved=t.R3ResolvedDependencyType.ChangeDetectorRef):r(o)}}else r(e);return n}(t,e)})}var $u=E({provide:String,useValue:E});function Ju(e){return void 0!==e.useClass}function ec(e){return void 0!==e.useFactory}function tc(e,t){var n=t||{providedIn:null},r={name:e.name,type:e,typeArgumentCount:0,providedIn:n.providedIn,userDeps:void 0};return(Ju(n)||ec(n))&&void 0!==n.deps&&(r.userDeps=Xu(n.deps)),Ju(n)?r.useClass=z(n.useClass):!function(e){return $u in e}(n)?ec(n)?r.useFactory=n.useFactory:function(e){return void 0!==e.useExisting}(n)&&(r.useExisting=z(n.useExisting)):r.useValue=z(n.useValue),r}var nc=E({provide:String,useValue:E}),rc=[];function ic(e,t){if(!t){var n=(l=new Hu).parameters(e);return function(){return new(e.bind.apply(e,O([void 0],Se(n))))}}if(nc in t){var r=t;return function(){return r.useValue}}if(t.useExisting){var i=t;return function(){return we(z(i.useExisting))}}if(t.useFactory){var o=t;return function(){return o.useFactory.apply(o,O(Se(o.deps||rc)))}}if(t.useClass){var a=t,s=t.deps;if(!s){var l=new Hu;s=l.parameters(e)}return function(){var e;return new((e=z(a.useClass)).bind.apply(e,O([void 0],Se(s))))}}var u=t.deps;if(!u){l=new Hu;u=l.parameters(e)}return function(){return new(e.bind.apply(e,O([void 0],Se(u))))}}var oc=i(\"Injectable\",void 0,void 0,void 0,function(e,t){return sc(e,t)});function ac(t,n){var e=null,r=null;t.hasOwnProperty(M)||Object.defineProperty(t,M,{get:function(){return null===e&&(e=X().compileInjectable(Te,\"ng:///\"+t.name+\"/ɵprov.js\",tc(t,n))),e}}),t.hasOwnProperty(ie)||Object.defineProperty(t,ie,{get:function(){if(null===r){var e=tc(t,n);r=X().compileFactory(Te,\"ng:///\"+t.name+\"/ɵfac.js\",{name:e.name,type:e.type,typeArgumentCount:e.typeArgumentCount,deps:Qu(t),injectFn:\"inject\",isPipe:!1})}return r},configurable:!0})}var sc=function(e,t){t&&void 0!==t.providedIn&&!P(e)&&(e.ɵprov=D({token:e,providedIn:t.providedIn,factory:ic(e,t)}))},lc=new ae(\"Set Injector scope.\"),uc={},cc={},pc=[],dc=void 0;function hc(){return void 0===dc&&(dc=new Ee),dc}function fc(e,t,n,r){return void 0===t&&(t=null),void 0===n&&(n=null),t=t||hc(),new mc(e,n,t,r)}var mc=(Object.defineProperty(vc.prototype,\"destroyed\",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),vc.prototype.destroy=function(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(function(e){return e.ngOnDestroy()})}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}},vc.prototype.get=function(t,e,n){void 0===e&&(e=ce),void 0===n&&(n=N.InjectFlags.Default),this.assertNotDestroyed();var r=ge(this);try{if(!(n&N.InjectFlags.SkipSelf)){var i=this.records.get(t);if(void 0===i){var o=function(e){return\"function\"==typeof e||\"object\"==typeof e&&e instanceof ae}(t)&&P(t);i=o&&this.injectableDefInScope(o)?_c(yc(t),uc):null,this.records.set(t,i)}if(null!=i)return this.hydrate(t,i)}var a=n&N.InjectFlags.Self?hc():this.parent;return e=n&N.InjectFlags.Optional&&e===ce?null:e,a.get(t,e)}catch(e){if(\"NullInjectorError\"!==e.name)throw e;if((e[pe]=e[pe]||[]).unshift(V(t)),r)throw e;return ke(e,t,\"R3InjectorError\",this.source)}finally{ge(r)}},vc.prototype.toString=function(){var n=[];return this.records.forEach(function(e,t){return n.push(V(t))}),\"R3Injector[\"+n.join(\", \")+\"]\"},vc.prototype.assertNotDestroyed=function(){if(this._destroyed)throw new Error(\"Injector has already been destroyed.\")},vc.prototype.processInjectorType=function(e,t,n){var i=this;if(!(e=z(e)))return!1;var r=A(e),o=null==r&&e.ngModule||void 0,a=void 0===o?e:o;if(ngDevMode&&-1!==t.indexOf(a)){var s=V(a);throw new Error(\"Circular dependency in DI detected for type \"+s+\". Dependency path: \"+t.map(function(e){return V(e)}).join(\" > \")+\" > \"+s+\".\")}var l=-1!==n.indexOf(a);if(void 0!==o&&(r=A(o)),null==r)return!1;if(this.injectorDefTypes.add(a),this.records.set(a,_c(r.factory,uc)),null!=r.imports&&!l){var u;ngDevMode&&t.push(a),n.push(a);try{Fe(r.imports,function(e){i.processInjectorType(e,t,n)&&(void 0===u&&(u=[]),u.push(e))})}finally{ngDevMode&&t.pop()}if(void 0!==u)for(var c=function(e){var t=u[e],n=t.ngModule,r=t.providers;Fe(r,function(e){return i.processProvider(e,n,r||pc)})},p=0;p<u.length;p++)c(p)}var d=r.providers;if(null!=d&&!l){var h=e;Fe(d,function(e){return i.processProvider(e,h,d)})}return void 0!==o&&void 0!==e.providers},vc.prototype.processProvider=function(e,t,n){var r=wc(e=z(e))?e:z(e&&e.provide),i=function(e,t,n){var r=gc(e,t,n);return bc(e)?_c(void 0,e.useValue):_c(r,uc)}(e,t,n);if(wc(e)||!0!==e.multi){var o=this.records.get(r);o&&void 0!==o.multi&&va()}else{var a=this.records.get(r);a?void 0===a.multi&&va():((a=_c(void 0,uc,!0)).factory=function(){return Se(a.multi)},this.records.set(r,a)),r=e,a.multi.push(e)}this.records.set(r,i)},vc.prototype.hydrate=function(e,t){return t.value===cc?function(e){throw new Error(\"Cannot instantiate cyclic dependency! \"+e)}(V(e)):t.value===uc&&(t.value=cc,t.value=t.factory()),\"object\"==typeof t.value&&t.value&&function(e){return null!==e&&\"object\"==typeof e&&\"function\"==typeof e.ngOnDestroy}(t.value)&&this.onDestroy.add(t.value),t.value},vc.prototype.injectableDefInScope=function(e){return!!e.providedIn&&(\"string\"==typeof e.providedIn?\"any\"===e.providedIn||e.providedIn===this.scope:this.injectorDefTypes.has(e.providedIn))},vc);function vc(t,n,e,r){var i=this;void 0===r&&(r=null),this.parent=e,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this._destroyed=!1;var o=[];n&&Fe(n,function(e){return i.processProvider(e,t,n)}),Fe([t],function(e){return i.processInjectorType(e,[],o)}),this.records.set(ue,_c(void 0,this));var a=this.records.get(lc);this.scope=null!=a?a.value:null,this.injectorDefTypes.forEach(function(e){return i.get(e)}),this.source=r||(\"object\"==typeof t?null:V(t))}function yc(e){var t=P(e),n=null!==t?t.factory:ft(e);if(null!==n)return n;var r=A(e);if(null!==r)return r.factory;if(e instanceof ae)throw new Error(\"Token \"+V(e)+\" is missing a ɵprov definition.\");if(e instanceof Function)return function(e){var t=e.length;if(0<t){var n=Be(t,\"?\");throw new Error(\"Can't resolve all parameters for \"+V(e)+\": (\"+n.join(\", \")+\").\")}var r=function(e){var t=e&&(e[M]||e[F]);return t?(console.warn('DEPRECATED: DI is instantiating a token \"'+e.name+'\" that inherits its @Injectable decorator but does not provide one itself.\\nThis will become an error in v10. Please add @Injectable() to the \"'+e.name+'\" class.'),t):null}(e);return null!==r?function(){return r.factory(e)}:function(){return new e}}(e);throw new Error(\"unreachable\")}function gc(e,t,n){var r=void 0;if(wc(e))return yc(z(e));if(bc(e))r=function(){return z(e.useValue)};else if(function(e){return!(!e||!e.useExisting)}(e))r=function(){return we(z(e.useExisting))};else if(function(e){return!(!e||!e.useFactory)}(e))r=function(){return e.useFactory.apply(e,O(Se(e.deps||[])))};else{var i=z(e&&(e.useClass||e.provide));if(i||function(e,t,n){var r=\"\";throw e&&t&&(r=\" - only instances of Provider and Type are allowed, got: [\"+t.map(function(e){return e==n?\"?\"+n+\"?\":\"...\"}).join(\", \")+\"]\"),new Error(\"Invalid provider for the NgModule '\"+V(e)+\"'\"+r)}(t,n,e),!function(e){return!!e.deps}(e))return yc(i);r=function(){return new(i.bind.apply(i,O([void 0],Se(e.deps))))}}return r}function _c(e,t,n){return void 0===n&&(n=!1),{factory:e,value:t,multi:n?[]:void 0}}function bc(e){return null!==e&&\"object\"==typeof e&&ve in e}function wc(e){return\"function\"==typeof e}var xc=function(e,t,n){return new Ic(e,t,n)},Cc=(Sc.create=function(e,t){return Array.isArray(e)?xc(e,t,\"\"):xc(e.providers,e.parent,e.name||\"\")},Sc.THROW_IF_NOT_FOUND=ce,Sc.NULL=new Ee,Sc.ɵprov=D({token:Sc,providedIn:\"any\",factory:function(){return we(ue)}}),Sc.__NG_ELEMENT_ID__=-1,Sc);function Sc(){}var Ec=function(e){return e},Oc=[],kc=Ec,Dc=function(){return Array.prototype.slice.call(arguments)},Tc=\"ɵ\",Ic=(Pc.prototype.get=function(t,e,n){void 0===n&&(n=N.InjectFlags.Default);var r=this._records,i=r.get(t);if(void 0===i){var o=P(t);if(o){var a=o&&o.providedIn;(\"any\"===a||null!=a&&a===this.scope)&&r.set(t,i=Ac({provide:t,useFactory:o.factory,deps:Oc}))}void 0===i&&r.set(t,null)}var s=ge(this);try{return Rc(t,i,r,this.parent,e,n)}catch(e){return ke(e,t,\"StaticInjectorError\",this.source)}finally{ge(s)}},Pc.prototype.toString=function(){var n=[];return this._records.forEach(function(e,t){return n.push(V(t))}),\"StaticInjector[\"+n.join(\", \")+\"]\"},Pc);function Pc(e,t,n){void 0===t&&(t=Cc.NULL),void 0===n&&(n=null),this.parent=t,this.source=n;var r=this._records=new Map;r.set(Cc,{token:Cc,fn:Ec,deps:Oc,value:this,useNew:!1}),r.set(ue,{token:ue,fn:Ec,deps:Oc,value:this,useNew:!1}),this.scope=function e(t,n){var r=null;if(n)if(n=z(n),Array.isArray(n))for(var i=0;i<n.length;i++)r=e(t,n[i])||r;else{if(\"function\"==typeof n)throw Nc(\"Function/Class not supported\",n);if(!n||\"object\"!=typeof n||!n.provide)throw Nc(\"Unexpected provider\",n);var o=z(n.provide),a=Ac(n);if(!0===n.multi){var s=t.get(o);if(s){if(s.fn!==Dc)throw Mc(o)}else t.set(o,s={token:n.provide,deps:[],useNew:!1,fn:Dc,value:Oc});o=n,s.deps.push({token:o,options:6})}var l=t.get(o);if(l&&l.fn==Dc)throw Mc(o);o===lc&&(r=a.value),t.set(o,a)}return r}(r,e)}function Ac(e){var t=function(e){var t=Oc,n=e.deps;if(n&&n.length){t=[];for(var r=0;r<n.length;r++){var i=6,o=z(n[r]);if(Array.isArray(o))for(var a=0,s=o;a<s.length;a++){var l=s[a];l instanceof b||l==b?i|=1:l instanceof x||l==x?i&=-3:l instanceof w||l==w?i&=-5:o=l instanceof _?l.token:z(l)}t.push({token:o,options:i})}}else if(e.useExisting){o=z(e.useExisting);t=[{token:o,options:6}]}else if(!(n||ve in e))throw Nc(\"'deps' required\",e);return t}(e),n=Ec,r=Oc,i=!1,o=z(e.provide);if(ve in e)r=e.useValue;else if(e.useFactory)n=e.useFactory;else if(e.useExisting);else if(e.useClass)i=!0,n=z(e.useClass);else{if(\"function\"!=typeof o)throw Nc(\"StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable\",e);i=!0,n=o}return{deps:t,fn:n,useNew:i,value:r}}function Mc(e){return Nc(\"Cannot mix multi providers and regular providers\",e)}function Rc(t,n,e,r,i,o){try{return function(e,t,n,r,i,o){var a,s;if(!t||o&N.InjectFlags.SkipSelf)s=o&N.InjectFlags.Self?o&N.InjectFlags.Optional?Cc.NULL.get(e,void 0!==i?i:null):Cc.NULL.get(e,i):r.get(e,i,N.InjectFlags.Default);else{if((s=t.value)==kc)throw Error(Tc+\"Circular dependency\");if(s===Oc){t.value=kc;var l=t.useNew,u=t.fn,c=t.deps,p=Oc;if(c.length){p=[];for(var d=0;d<c.length;d++){var h=c[d],f=h.options,m=2&f?n.get(h.token):void 0;p.push(Rc(h.token,m,n,m||4&f?r:Cc.NULL,1&f?null:Cc.THROW_IF_NOT_FOUND,N.InjectFlags.Default))}}t.value=s=l?new((a=u).bind.apply(a,O([void 0],p))):u.apply(void 0,p)}}return s}(t,n,e,r,i,o)}catch(e){throw e instanceof Error||(e=new Error(e)),(e[pe]=e[pe]||[]).unshift(t),n&&n.value==kc&&(n.value=Oc),e}}function Nc(e,t){return new Error(De(e,t,\"StaticInjectorError\"))}function jc(e){return 1<e.length?\" (\"+function(e){for(var t=[],n=0;n<e.length;++n){if(-1<t.indexOf(e[n]))return t.push(e[n]),t;t.push(e[n])}return t}(e.slice().reverse()).map(function(e){return V(e.token)}).join(\" -> \")+\")\":\"\"}function Fc(e,t,n,r){var i=[t],o=n(i),a=r?function(e,t){var n=e+\" caused by: \"+(t instanceof Error?t.message:t),r=Error(n);return r[Ni]=t,r}(o,r):Error(o);return a.addKey=Lc,a.keys=i,a.injectors=[e],a.constructResolvingMessage=n,a[Ni]=r,a}function Lc(e,t){this.injectors.push(e),this.keys.push(t),this.message=this.constructResolvingMessage(this.keys)}function Vc(e,t){for(var n=[],r=0,i=t.length;r<i;r++){var o=t[r];o&&0!=o.length?n.push(o.map(V).join(\" \")):n.push(\"?\")}return Error(\"Cannot resolve all parameters for '\"+V(e)+\"'(\"+n.join(\", \")+\"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '\"+V(e)+\"' is decorated with Injectable.\")}var Bc=(Uc.get=function(e){return qc.get(z(e))},Object.defineProperty(Uc,\"numberOfKeys\",{get:function(){return qc.numberOfKeys},enumerable:!0,configurable:!0}),Uc);function Uc(e,t){if(this.token=e,this.id=t,!e)throw new Error(\"Token must be defined!\");this.displayName=V(this.token)}function zc(){this._allKeys=new Map}var qc=new(zc.prototype.get=function(e){if(e instanceof Bc)return e;if(this._allKeys.has(e))return this._allKeys.get(e);var t=new Bc(e,Bc.numberOfKeys);return this._allKeys.set(e,t),t},Object.defineProperty(zc.prototype,\"numberOfKeys\",{get:function(){return this._allKeys.size},enumerable:!0,configurable:!0}),zc);function Hc(e){this.reflectionCapabilities=e}var Wc=new(Hc.prototype.updateCapabilities=function(e){this.reflectionCapabilities=e},Hc.prototype.factory=function(e){return this.reflectionCapabilities.factory(e)},Hc.prototype.parameters=function(e){return this.reflectionCapabilities.parameters(e)},Hc.prototype.annotations=function(e){return this.reflectionCapabilities.annotations(e)},Hc.prototype.propMetadata=function(e){return this.reflectionCapabilities.propMetadata(e)},Hc.prototype.hasLifecycleHook=function(e,t){return this.reflectionCapabilities.hasLifecycleHook(e,t)},Hc.prototype.getter=function(e){return this.reflectionCapabilities.getter(e)},Hc.prototype.setter=function(e){return this.reflectionCapabilities.setter(e)},Hc.prototype.method=function(e){return this.reflectionCapabilities.method(e)},Hc.prototype.importUri=function(e){return this.reflectionCapabilities.importUri(e)},Hc.prototype.resourceUri=function(e){return this.reflectionCapabilities.resourceUri(e)},Hc.prototype.resolveIdentifier=function(e,t,n,r){return this.reflectionCapabilities.resolveIdentifier(e,t,n,r)},Hc.prototype.resolveEnum=function(e,t){return this.reflectionCapabilities.resolveEnum(e,t)},Hc)(new Hu),Gc=(Yc.fromKey=function(e){return new Yc(e,!1,null)},Yc);function Yc(e,t,n){this.key=e,this.optional=t,this.visibility=n}var Kc=[],Zc=function(e,t,n){this.key=e,this.resolvedFactories=t,this.multiProvider=n,this.resolvedFactory=this.resolvedFactories[0]},Qc=function(e,t){this.factory=e,this.dependencies=t};function Xc(e){var t,n;if(e.useClass){var r=z(e.useClass);t=Wc.factory(r),n=ep(r)}else n=e.useExisting?(t=function(e){return e},[Gc.fromKey(Bc.get(e.useExisting))]):e.useFactory?(t=e.useFactory,function(t,e){{if(e){var n=e.map(function(e){return[e]});return e.map(function(e){return tp(t,e,n)})}return ep(t)}}(e.useFactory,e.deps)):(t=function(){return e.useValue},Kc);return new Qc(t,n)}function $c(e){return new Zc(Bc.get(e.provide),[Xc(e)],e.multi||!1)}function Jc(e){var t=function(e,t){for(var n=0;n<e.length;n++){var r=e[n],i=t.get(r.key.id);if(i){if(r.multiProvider!==i.multiProvider)throw Error(\"Cannot mix multi providers and regular providers, got: \"+i+\" \"+r);if(r.multiProvider)for(var o=0;o<r.resolvedFactories.length;o++)i.resolvedFactories.push(r.resolvedFactories[o]);else t.set(r.key.id,r)}else{var a=void 0;a=r.multiProvider?new Zc(r.key,r.resolvedFactories.slice(),r.multiProvider):r,t.set(r.key.id,a)}}return t}(function t(e,n){e.forEach(function(e){if(e instanceof Lu)n.push({provide:e,useClass:e});else if(e&&\"object\"==typeof e&&void 0!==e.provide)n.push(e);else{if(!Array.isArray(e))throw Error(\"Invalid provider - only instances of Provider and Type are allowed, got: \"+e);t(e,n)}});return n}(e,[]).map($c),new Map);return Array.from(t.values())}function ep(t){var n=Wc.parameters(t);if(!n)return[];if(n.some(function(e){return null==e}))throw Vc(t,n);return n.map(function(e){return tp(t,e,n)})}function tp(e,t,n){var r=null,i=!1;if(!Array.isArray(t))return np(t instanceof _?t.token:t,i,null);for(var o=null,a=0;a<t.length;++a){var s=t[a];s instanceof Lu?r=s:s instanceof _?r=s.token:s instanceof b?i=!0:s instanceof w||s instanceof x?o=s:s instanceof ae&&(r=s)}if(null!=(r=z(r)))return np(r,i,o);throw Vc(e,n)}function np(e,t,n){return new Gc(Bc.get(e),t,n)}var rp=new Object,ip=(op.resolve=function(e){return Jc(e)},op.resolveAndCreate=function(e,t){var n=op.resolve(e);return op.fromResolvedProviders(n,t)},op.fromResolvedProviders=function(e,t){return new ap(e,t)},op);function op(){}var ap=(sp.prototype.get=function(e,t){return void 0===t&&(t=ce),this._getByKey(Bc.get(e),null,t)},sp.prototype.resolveAndCreateChild=function(e){var t=ip.resolve(e);return this.createChildFromResolved(t)},sp.prototype.createChildFromResolved=function(e){var t=new sp(e);return t.parent=this,t},sp.prototype.resolveAndInstantiate=function(e){return this.instantiateResolved(ip.resolve([e])[0])},sp.prototype.instantiateResolved=function(e){return this._instantiateProvider(e)},sp.prototype.getProviderAtIndex=function(e){if(e<0||e>=this._providers.length)throw function(e){return Error(\"Index \"+e+\" is out-of-bounds.\")}(e);return this._providers[e]},sp.prototype._new=function(e){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw function(e,t){return Fc(e,t,function(e){return\"Cannot instantiate cyclic dependency!\"+jc(e)})}(this,e.key);return this._instantiateProvider(e)},sp.prototype._getMaxNumberOfObjects=function(){return this.objs.length},sp.prototype._instantiateProvider=function(e){if(e.multiProvider){for(var t=[],n=0;n<e.resolvedFactories.length;++n)t[n]=this._instantiate(e,e.resolvedFactories[n]);return t}return this._instantiate(e,e.resolvedFactories[0])},sp.prototype._instantiate=function(t,e){var n,r,i=this,o=e.factory;try{n=e.dependencies.map(function(e){return i._getByReflectiveDependency(e)})}catch(e){throw e.addKey&&e.addKey(this,t.key),e}try{r=o.apply(void 0,O(n))}catch(e){throw function(e,n,t,r){return Fc(e,r,function(e){var t=V(e[0].token);return n.message+\": Error during instantiation of \"+t+\"!\"+jc(e)+\".\"},n)}(this,e,e.stack,t.key)}return r},sp.prototype._getByReflectiveDependency=function(e){return this._getByKey(e.key,e.visibility,e.optional?null:ce)},sp.prototype._getByKey=function(e,t,n){return e===sp.INJECTOR_KEY?this:t instanceof w?this._getByKeySelf(e,n):this._getByKeyDefault(e,n,t)},sp.prototype._getObjByKeyId=function(e){for(var t=0;t<this.keyIds.length;t++)if(this.keyIds[t]===e)return this.objs[t]===rp&&(this.objs[t]=this._new(this._providers[t])),this.objs[t];return rp},sp.prototype._throwOrNull=function(e,t){if(t!==ce)return t;throw function(e,t){return Fc(e,t,function(e){return\"No provider for \"+V(e[0].token)+\"!\"+jc(e)})}(this,e)},sp.prototype._getByKeySelf=function(e,t){var n=this._getObjByKeyId(e.id);return n!==rp?n:this._throwOrNull(e,t)},sp.prototype._getByKeyDefault=function(e,t,n){var r;for(r=n instanceof x?this.parent:this;r instanceof sp;){var i=r,o=i._getObjByKeyId(e.id);if(o!==rp)return o;r=i.parent}return null!==r?r.get(e.token,t):this._throwOrNull(e,t)},Object.defineProperty(sp.prototype,\"displayName\",{get:function(){return\"ReflectiveInjector(providers: [\"+function(e,t){for(var n=[],r=0;r<e._providers.length;++r)n[r]=t(e.getProviderAtIndex(r));return n}(this,function(e){return' \"'+e.key.displayName+'\" '}).join(\", \")+\"])\"},enumerable:!0,configurable:!0}),sp.prototype.toString=function(){return this.displayName},sp.INJECTOR_KEY=Bc.get(Cc),sp);function sp(e,t){this._constructionCounter=0,this._providers=e,this.parent=t||null;var n=e.length;this.keyIds=[],this.objs=[];for(var r=0;r<n;r++)this.keyIds[r]=e[r].key.id,this.objs[r]=rp}function lp(){}var up=new ae(\"AnalyzeForEntryComponents\"),cp=a(\"ContentChildren\",function(e,t){return void 0===t&&(t={}),l({selector:e,first:!1,isViewQuery:!1,descendants:!1},t)},lp),pp=a(\"ContentChild\",function(e,t){return void 0===t&&(t={}),l({selector:e,first:!0,isViewQuery:!1,descendants:!0},t)},lp),dp=a(\"ViewChildren\",function(e,t){return void 0===t&&(t={}),l({selector:e,first:!1,isViewQuery:!0,descendants:!0},t)},lp),hp=a(\"ViewChild\",function(e,t){return l({selector:e,first:!0,isViewQuery:!0,descendants:!0},t)},lp);function fp(r){var n=[],i=new Map;function l(e){var t=i.get(e);if(!t){var n=r(e);i.set(e,t=n.then(_p))}return t}return mp.forEach(function(r,e){var i=[];r.templateUrl&&i.push(l(r.templateUrl).then(function(e){r.template=e}));var o=r.styleUrls,a=r.styles||(r.styles=[]),s=r.styles.length;o&&o.forEach(function(t,n){a.push(\"\"),i.push(l(t).then(function(e){a[s+n]=e,o.splice(o.indexOf(t),1),0==o.length&&(r.styleUrls=void 0)}))});var t=Promise.all(i).then(function(){return function(e){vp.delete(e)}(e)});n.push(t)}),gp(),Promise.all(n).then(function(){})}var mp=new Map,vp=new Set;function yp(e){return!!(e.templateUrl&&!e.hasOwnProperty(\"template\")||e.styleUrls&&e.styleUrls.length)}function gp(){var e=mp;return mp=new Map,e}function _p(e){return\"string\"==typeof e?e:e.text()}function bp(e){var t=gn(),n=t[yt];n.firstTemplatePass&&(function(e,t,n){ngDevMode&&Ue(e.firstTemplatePass,!0,\"Should only be called in first template pass.\");var r=e.expandoInstructions,i=r.length;2<=i&&r[i-2]===t.hostBindings?r[i-1]=r[i-1]+n:r.push(t.hostBindings,n)}(n,hn.currentDirectiveDef,e),function(e,t,n){ngDevMode&&Ue(e.firstTemplatePass,!0,\"Should only be called in first template pass.\");for(var r=0;r<n;r++)t.push(cr),e.blueprint.push(cr),e.data.push(null)}(n,t,e))}var wp=null;function xp(){if(!wp){var e=Q.Symbol;if(e&&e.iterator)wp=e.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),n=0;n<t.length;++n){var r=t[n];\"entries\"!==r&&\"size\"!==r&&Map.prototype[r]===Map.prototype.entries&&(wp=r)}}return wp}function Cp(e,t){return e===t||\"number\"==typeof e&&\"number\"==typeof t&&isNaN(e)&&isNaN(t)}function Sp(e,t){var n=kp(e),r=kp(t);return n&&r?function(e,t,n){var r=e[xp()](),i=t[xp()]();for(;;){var o=r.next(),a=i.next();if(o.done&&a.done)return!0;if(o.done||a.done)return!1;if(!n(o.value,a.value))return!1}}(e,t,Sp):!(n||!(e&&(\"object\"==typeof e||\"function\"==typeof e))||r||!(t&&(\"object\"==typeof t||\"function\"==typeof t)))||Cp(e,t)}var Ep=(Op.wrap=function(e){return new Op(e)},Op.unwrap=function(e){return Op.isWrapped(e)?e.wrapped:e},Op.isWrapped=function(e){return e instanceof Op},Op);function Op(e){this.wrapped=e}function kp(e){return!!Dp(e)&&(Array.isArray(e)||!(e instanceof Map)&&xp()in e)}function Dp(e){return null!==e&&(\"function\"==typeof e||\"object\"==typeof e)}function Tp(e,t,n){return e[t]=n}function Ip(e,t){return ngDevMode&&Ze(e,t),ngDevMode&&qe(e[t],cr,\"Stored value should never be NO_CHANGE.\"),e[t]}function Pp(e,t,n){ngDevMode&&qe(n,cr,\"Incoming value should never be NO_CHANGE.\"),ngDevMode&&He(t,e.length,\"Slot should have been initialized to NO_CHANGE\");var r=e[t];if(Object.is(r,n))return!1;if(ngDevMode&&Pn()){var i=r!==cr?r:void 0;Sp(i,n)||ma(r===cr,i,n)}return e[t]=n,!0}function Ap(e,t,n,r){var i=Pp(e,t,n);return Pp(e,t+1,r)||i}function Mp(e,t,n,r,i){var o=Ap(e,t,n,r);return Pp(e,t+2,i)||o}function Rp(e,t,n,r,i,o){var a=Ap(e,t,n,r);return Ap(e,t+2,i,o)||a}function Np(e,t,n,r){var i=gn();return Pp(i,i[Ct]++,t)&&Dl(Vn(),e,t,i,n,r),Np}function jp(e,t){ngDevMode&&He(2,t.length,\"should have at least 3 values\"),ngDevMode&&Ue(t.length%2,1,\"should have an odd number of values\");for(var n=!1,r=e[Ct],i=1;i<t.length;i+=2)n=Pp(e,r++,t[i])||n;if(e[Ct]=r,!n)return cr;var o=t[0];for(i=1;i<t.length;i+=2)o+=nr(t[i])+t[i+1];return o}function Fp(e,t,n,r){return Pp(e,e[Ct]++,n)?t+nr(n)+r:cr}function Lp(e,t,n,r,i,o){var a=Ap(e,e[Ct],n,i);return e[Ct]+=2,a?t+nr(n)+r+nr(i)+o:cr}function Vp(e,t,n,r,i,o,a,s){var l=Mp(e,e[Ct],n,i,a);return e[Ct]+=3,l?t+nr(n)+r+nr(i)+o+nr(a)+s:cr}function Bp(e,t,n,r,i,o,a,s,l,u){var c=Rp(e,e[Ct],n,i,a,l);return e[Ct]+=4,c?t+nr(n)+r+nr(i)+o+nr(a)+s+nr(l)+u:cr}function Up(e,t,n,r,i,o,a,s,l,u,c,p){var d=e[Ct],h=Rp(e,d,n,i,a,l);return h=Pp(e,d+4,c)||h,e[Ct]+=5,h?t+nr(n)+r+nr(i)+o+nr(a)+s+nr(l)+u+nr(c)+p:cr}function zp(e,t,n,r,i,o,a,s,l,u,c,p,d,h){var f=e[Ct],m=Rp(e,f,n,i,a,l);return m=Ap(e,f+4,c,d)||m,e[Ct]+=6,m?t+nr(n)+r+nr(i)+o+nr(a)+s+nr(l)+u+nr(c)+p+nr(d)+h:cr}function qp(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m){var v=e[Ct],y=Rp(e,v,n,i,a,l);return y=Mp(e,v+4,c,d,f)||y,e[Ct]+=7,y?t+nr(n)+r+nr(i)+o+nr(a)+s+nr(l)+u+nr(c)+p+nr(d)+h+nr(f)+m:cr}function Hp(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y){var g=e[Ct],_=Rp(e,g,n,i,a,l);return _=Rp(e,g+4,c,d,f,v)||_,e[Ct]+=8,_?t+nr(n)+r+nr(i)+o+nr(a)+s+nr(l)+u+nr(c)+p+nr(d)+h+nr(f)+m+nr(v)+y:cr}function Wp(e,t,n,r,i,o){var a=gn(),s=Fp(a,t,n,r);return s!==cr&&Dl(Vn(),e,s,a,i,o),Wp}function Gp(e,t,n,r,i,o,a,s){var l=gn(),u=Lp(l,t,n,r,i,o);return u!==cr&&Dl(Vn(),e,u,l,a,s),Gp}function Yp(e,t,n,r,i,o,a,s,l,u){var c=gn(),p=Vp(c,t,n,r,i,o,a,s);return p!==cr&&Dl(Vn(),e,p,c,l,u),Yp}function Kp(e,t,n,r,i,o,a,s,l,u,c,p){var d=gn(),h=Bp(d,t,n,r,i,o,a,s,l,u);return h!==cr&&Dl(Vn(),e,h,d,c,p),Kp}function Zp(e,t,n,r,i,o,a,s,l,u,c,p,d,h){var f=gn(),m=Up(f,t,n,r,i,o,a,s,l,u,c,p);return m!==cr&&Dl(Vn(),e,m,f,d,h),Zp}function Qp(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m){var v=gn(),y=zp(v,t,n,r,i,o,a,s,l,u,c,p,d,h);return y!==cr&&Dl(Vn(),e,y,v,f,m),Qp}function Xp(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y){var g=Vn(),_=gn(),b=qp(_,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m);return b!==cr&&Dl(g,e,b,_,v,y),Xp}function $p(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y,g,_){var b=gn(),w=Hp(b,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y);return w!==cr&&Dl(Vn(),e,w,b,g,_),$p}function Jp(e,t,n,r){var i=gn(),o=jp(i,t);return o!==cr&&Dl(Vn(),e,o,i,n,r),Jp}function ed(e){ngDevMode&&Ge(e,\"component\");var t=Nl(la(e));ngDevMode&&Ge(t[Et],\"rootContext should be defined\"),function(t,e){var n,r=0===t.flags;t.flags|=e,r&&t.clean==Zs&&(t.clean=new Promise(function(e){return n=e}),t.scheduler(function(){if(1&t.flags&&(t.flags&=-2,jl(t)),2&t.flags){t.flags&=-3;var e=t.playerHandler;e&&e.flushPlayers()}t.clean=Zs,n(null)}))}(t[Et],1)}function td(e){var t=gn(),n=od(t,e,null,null);t[yt].firstTemplatePass&&(n.tViews=[]),In()}function nd(e,t,n,r,i,o,a,s){var l=gn(),u=l[yt],c=u.consts,p=od(l,e,i||null,null===c||null==o?null:c[o]);if(u.firstTemplatePass){ngDevMode&&ngDevMode.firstTemplatePass++,_l(u,l,p,a||null),ga(u,p);var d=p.tViews=ul(-1,t,n,r,u.directiveRegistry,u.pipeRegistry,null,u.schemas,c),h=dl(u,null,2,-1,null,null);h.injectorIndex=p.injectorIndex,d.node=h,null!==u.queries&&(u.queries.template(u,p),d.queries=u.queries.embeddedTView(p))}Gt(p)&&al(u,l,p),null!=a&&sl(l,p,s),In()}function rd(e){var t=gn(),n=t[yt],r=ri(n.data,e);if(ngDevMode&&ln(r,0),kn(r,!0),t[e+Nt][Ft]=0,!Pn())if(3==(3&t[gt])){var i=n.preOrderCheckHooks;null!==i&&_a(t,i,null)}else{var o=n.preOrderHooks;null!==o&&ba(t,o,0,null),wa(t,0)}}function id(){var e=On();Tn()?In():(ngDevMode&&ln(e,2),ngDevMode&&Xt(e),kn(e=e.parent,!1)),ngDevMode&&ln(e,0);for(var t=gn()[e.index],n=t[Ft];n<t.length-Ut;)iu(t,n)}function od(e,t,n,r){ngDevMode&&Ue(e[Ct],e[yt].bindingStartIndex,\"container nodes should be created before any bindings\");var i=t+Nt;ngDevMode&&Ze(e,t+Nt),ngDevMode&&ngDevMode.rendererCreateComment++;var o=e[i]=e[Dt].createComment(ngDevMode?\"container\":\"\"),a=Js(e[yt],e[xt],t,0,n,r),s=e[i]=Pl(o,e,o,a);return fu(o,a,e),ua(ei(a,e),e),Rl(e,s),ngDevMode&&ln(On(),0),a}function ad(e,t){var n=gn(),r=n[yt],i=e+Nt;i>=r.data.length&&(r.data[i]=null,r.blueprint[i]=null),n[i]=t}function sd(e){return ri(hn.contextLView,e)}function ld(e,t){void 0===t&&(t=N.InjectFlags.Default),e=z(e);var n=gn();return null==n?we(e,t):Ci(On(),n,e,t)}function ud(e){return xi(On(),e)}function cd(e){Wn(e)}function pd(e,t,n){dd(Vn(),e,t,n)}function dd(e,t,n,r){var i=fd(e,gn()[Ct]++,t,function(e,t){if(e===cr)return e;var n=null;null!==e&&(n=t?nr(e)+t:e);return n}(n,r),!1);ngDevMode&&(ngDevMode.styleProp++,i&&ngDevMode.stylePropCacheMiss++)}function hd(e,t){var n=gn()[Ct]++,r=fd(Vn(),n,e,t,!0);ngDevMode&&(ngDevMode.classProp++,r&&ngDevMode.classPropCacheMiss++)}function fd(e,t,n,r,i){var o=!1,a=gn(),s=ni(e,a),l=ei(s,a),u=kd(),c=i?Ed(s):Sd(s),p=i?null:Gn();if(Pr(c,u)||wr(c,2),ngDevMode&&Pn()){var d=Ir(a,t);Rr(d,r)&&ma(!1,d,r)}if(br(c,u)){var h=i?null:p;o=function(e,t,n,r,i,o,a,s,l,u){var c=!1;if(Rr(r[i],a)){if(Tr(r,i,a),!(c=Ga(e,n,o,a,l,i,u))&&_r(t,4)){var p=Ra(n,dr);c=!!(d=s?p.lastDirectClassMap:p.lastDirectStyleMap)&&Ya(e,n,l,d,o,i,u)}var d;if(!c&&_r(t,16))c=!!(d=Fr(t))&&Ya(e,n,l,d,o,i);c||l(e,n,o,null,i)}return c}(wd(s,a),c,l,a,t,n,r,i,i?Qa:Za,h),h&&xn(bd)}else{var f=Cn();o=i?ja(c,a,l,f,n,t,r):Fa(c,a,l,f,n,t,r,p),xn(bd)}return o}function md(e){var t=Vn(),n=gn(),r=ni(t,n),i=Sd(r),o=n[Ct]++;!kd()&&Ur(r)&&e!==cr&&(_d(i,n,r,o,e,!1),e=cr);var a=gd(t,i,o,e,!1);ngDevMode&&(ngDevMode.styleMap++,a&&ngDevMode.styleMapCacheMiss++)}function vd(e){yd(Vn(),e)}function yd(e,t){var n=gn(),r=ni(e,n),i=Ed(r),o=n[Ct]++;!kd()&&Br(r)&&t!==cr&&(_d(i,n,r,o,t,!0),t=cr);var a=gd(e,i,o,t,!0);ngDevMode&&(ngDevMode.classMap++,a&&ngDevMode.classMapCacheMiss++)}function gd(e,t,n,r,i){var o=!1,a=gn(),s=Cn(),l=ni(e,a),u=ei(l,a),c=Ir(a,n),p=kd(),d=Gn(),h=Rr(c,r);ngDevMode&&h&&Pn()&&ma(!1,c,r),Pr(t,p)||wr(t,4);var f=r===cr?cr:Zr(c,r,!i);if(br(t,p)){var m=i?null:d;o=function(e,t,n,r,i,o,a,s,l,u){if(u||Rr(r[i],o)){Tr(r,i,o);for(var c=_r(t,16)?Fr(t):null,p=1;p<o.length;p+=2){var d=zr(o,p),h=Ga(e,n,d,Wr(o,p),s,i,l);!h&&c&&(h=Ya(e,n,s,c,d,i,l)),h||s(e,n,d,null,i)}var f=Ra(n,dr);return a?f.lastDirectClassMap=o:f.lastDirectStyleMap=o,!0}return!1}(wd(l,a),t,u,a,n,f,i,i?Qa:Za,m,h),m&&xn(bd)}else o=h,is(),i?ja(t,a,u,s,null,n,f,h):Fa(t,a,u,s,null,n,f,d,h),xn(bd);return o}function _d(e,t,n,r,i,o){if(t[r]!==i){if(i||Pr(e,!1)){var a=o?Qr(n.inputs):\"style\";Yl(t,n.inputs[a],function(e,t,n){var r=t;e.length&&(r=n?jr(e,function(e){return e&&\"string\"!=typeof e&&(e=Object.keys(e).join(\" \")),e||\"\"}(t)):jr(e,function(e){var t=\"\";if(e)for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r];t=jr(t,i+\":\"+e[i],\";\")}return t}(t),\";\"));return r}(Vr(e),i,o)),xn(bd)}Tr(t,r,i)}}function bd(){var e=gn(),t=ni(Vn(),e),n=ei(t,e),r=Cn(),i=wd(t,e),o=Gn();qa(i,e,Lr(t.classes)?t.classes:null,Lr(t.styles)?t.styles:null,n,r,o),Wn(null)}function wd(e,t){return 3===e.type?t[Dt]:null}function xd(e,t,n){for(var r=!1,i=Fr(e.styles),o=Fr(e.classes),a=-1,s=n;s<t.length;s++){var l=t[s];if(\"number\"==typeof l)a=l;else if(1==a)Kr(o=o||yr(null),l,!0),r=!0;else if(2==a){var u=t[++s];Kr(i=i||yr(null),l,u),r=!0}}return o&&1<o.length&&(e.classes||(e.classes=o),Cd(e.classes,Yr(o,!0))),i&&1<i.length&&(e.styles||(e.styles=i),Cd(e.styles,Yr(i,!1))),r&&(e.flags|=64),r}function Cd(e,t){Fr(e)[0]=t}function Sd(e){return Od(e,!1)}function Ed(e){return Od(e,!0)}function Od(e,t){var n=t?e.classes:e.styles;Lr(n)||(n=function(e,t){var n=0;return t&&(n|=1),1<(e=e||yr(null)).length&&(n|=16),[n,mr,e]}(n,Gt(e)),ngDevMode&&function(e,t){var n=new cs(e,t);rs(e,n)}(n,t),t?e.classes=n:e.styles=n);return n}function kd(){return Gr(Cn())}function Dd(e,t,n,r){var i=gn(),o=i[yt],a=o.consts,s=null===a||null==n?null:a[n];ngDevMode&&Ue(i[Ct],o.bindingStartIndex,\"elements should be created before any bindings\"),ngDevMode&&ngDevMode.rendererCreateElement++,ngDevMode&&Ze(i,e+Nt);var l=i[Dt],u=i[e+Nt]=Xs(t,l,hn.currentNamespace),c=Js(o,i[xt],e,3,t,s);if(null!=s){var p=Zn(l,u,s);o.firstTemplatePass&&xd(c,s,p)}64==(64&c.flags)&&Zl(l,u,c),fu(u,c,i),0===hn.elementDepthCount&&ua(u,i),hn.elementDepthCount++,o.firstTemplatePass&&(ngDevMode&&ngDevMode.firstTemplatePass++,_l(o,i,c,r||null),null!==o.queries&&o.queries.elementStart(o,c)),Gt(c)&&(al(o,i,c),ol(o,c,i)),null!=r&&sl(i,c)}function Td(){var e=On();ngDevMode&&Ge(e,\"No parent node to close.\"),Tn()?In():(ngDevMode&&Xt(On()),kn(e=e.parent,!1));var t=e;ngDevMode&&ln(t,3);var n=gn(),r=n[yt];if(hn.elementDepthCount--,r.firstTemplatePass&&(ga(r,e),Ht(e)&&r.queries.elementEnd(e)),Br(t)){var i=Qr(t.inputs);Ad(t.classes,n,t.inputs[i])}Ur(t)&&Ad(t.styles,n,t.inputs.style)}function Id(e,t,n,r){Dd(e,t,n,r),Td()}function Pd(e){var t=Vn(),n=gn(),r=n[yt],i=ni(t,n);if(3===i.type){var o=ei(i,n),a=Zn(n[Dt],o,e);if(r.firstTemplatePass)if(xd(i,e,a))Zl(n[Dt],o,i)}}function Ad(e,t,n){Yl(t,n,e&&Vr(e)||null)}function Md(e,t,n){var r=gn(),i=r[yt],o=r[Dt],a=\"ng-container\",s=i.consts,l=null===s||null==t?null:s[t];ngDevMode&&Ue(r[Ct],i.bindingStartIndex,\"element containers should be created before any bindings\"),ngDevMode&&ngDevMode.rendererCreateComment++,ngDevMode&&Ze(r,e+Nt);var u=r[e+Nt]=o.createComment(ngDevMode?a:\"\");ngDevMode&&Ze(r,e-1);var c=Js(i,r[xt],e,4,a,l);l&&i.firstTemplatePass&&xd(c,l,0),fu(u,c,r),ua(u,r),i.firstTemplatePass&&(ngDevMode&&ngDevMode.firstTemplatePass++,_l(i,r,c,n||null),i.queries&&i.queries.elementStart(i,c)),Gt(c)&&(al(i,r,c),ol(i,c,r)),null!=n&&sl(r,c)}function Rd(){var e=On(),t=gn()[yt];Tn()?In():(ngDevMode&&Xt(e),kn(e=e.parent,!1)),ngDevMode&&ln(e,4),t.firstTemplatePass&&(ga(t,e),Ht(e)&&t.queries.elementEnd(e))}function Nd(e,t,n){Md(e,t,n),Rd()}function jd(e,t,n){var r=gn(),i=On(),o=2===i.type?i.parent:i,a=r[o.index];ngDevMode&&ln(o,0);var s=function(e,t,n){for(var r=t+Ut;r<e.length;r++){var i=e[r][yt].id;if(i===n)return e[r];if(!(i<n))break;iu(e,r-Ut)}return null}(a,a[Ft],e);if(s)hn.isParent=!0,Fn(s,s[yt].node);else{s=$s(r,function(e,t,n,r){var i=gn()[yt];ngDevMode&&ln(r,0);var o=r.tViews;ngDevMode&&Ge(o,\"TView expected\"),ngDevMode&&Ue(Array.isArray(o),!0,\"TViews should be in an array\"),(e>=o.length||null==o[e])&&(o[e]=ul(e,null,t,n,i.directiveRegistry,i.pipeRegistry,null,null,i.consts));return o[e]}(e,t,n,o),null,16,null,null);var l=Tn()?i:i&&i.parent;el(s[yt],l,e,s),Fn(s,s[yt].node)}return a&&(si(s)&&tu(s,a,a[Ft]),a[Ft]++),si(s)?3:2}function Fd(){var e=gn(),t=e[yt],n=e[xt],r=e[Et];si(e)&&tl(e,t,r),nl(e,t,t.template,r);var i=e[_t];ngDevMode&&function(e){e&&Ue(qt(e),!0,\"Expecting LContainer or undefined or null\")}(i),Fn(i[_t],null),kn(n,!1)}function Ld(){return gn()}function Vd(e){return!!e&&\"function\"==typeof e.then}function Bd(e){return!!e&&\"function\"==typeof e.subscribe}function Ud(e,t,n,r){void 0===n&&(n=!1);var i=gn(),o=On();qd(i,i[Dt],o,e,t,n,r)}function zd(e,t,n,r){void 0===n&&(n=!1);var i=gn(),o=On();qd(i,Wl(o,i),o,e,t,n,r)}function qd(e,t,n,r,i,o,a){void 0===o&&(o=!1);var s=e[yt],l=Gt(n),u=s.firstTemplatePass&&(s.cleanup||(s.cleanup=[]));ngDevMode&&un(n,3,0,4);var c=!0;if(3===n.type){var p=ei(n,e),d=a?a(p):$e,h=d.target||p,f=(w=ql(e)).length,m=a?function(e){return a($r(e[n.index])).target}:n.index;if(Yn(t)){var v=null;if(!a&&l&&(v=function(e,t,n){var r=e[yt].cleanup;if(null!=r)for(var i=0;i<r.length-1;i+=2){var o=r[i];if(o===t&&r[i+1]===n){var a=e[St],s=r[i+2];return a.length>s?a[s]:null}\"string\"==typeof o&&(i+=2)}return null}(e,r,n.index)),null!==v){(v.__ngLastListenerFn__||v).__ngNextListenerFn__=i,v.__ngLastListenerFn__=i,c=!1}else{i=Wd(n,e,i,!1);var y=t.listen(d.name||h,r,i);ngDevMode&&ngDevMode.rendererAddEventListener++,w.push(i,y),u&&u.push(r,m,f,f+1)}}else i=Wd(n,e,i,!0),h.addEventListener(r,i,o),ngDevMode&&ngDevMode.rendererAddEventListener++,w.push(i),u&&u.push(r,m,f,o)}var g,_=n.outputs;if(c&&null!=_&&(g=_[r])){var b=g.length;if(b)for(var w=ql(e),x=0;x<b;x+=3){var C=g[x];ngDevMode&&Ze(e,C);var S=g[x+2],E=e[C],O=E[S];if(ngDevMode&&!Bd(O))throw new Error(\"@Output \"+S+\" not initialized in '\"+E.constructor.name+\"'.\");var k=O.subscribe(i),D=w.length;w.push(i,k),u&&u.push(r,n.index,D,-(D+1))}}}function Hd(t,e,n){try{return!1!==e(n)}catch(e){return Gl(t,e),!1}}function Wd(o,a,s,l){return function e(t){if(t===Function)return s;var n=2&o.flags?ii(o.index,a):a;0==(32&a[gt])&&Nl(n);for(var r=Hd(a,s,t),i=e.__ngNextListenerFn__;i;)r=Hd(a,i,t)&&r,i=i.__ngNextListenerFn__;return l&&!1===r&&(t.preventDefault(),t.returnValue=!1),r}}function Gd(e){return void 0===e&&(e=1),Ln(e)}function Yd(e,t){for(var n=null,r=function(e){var t=e.attrs;if(null!=t){var n=t.indexOf(5);if(0==(1&n))return t[n+1]}return null}(e),i=0;i<t.length;i++){var o=t[i];if(\"*\"!==o){if(null===r?Ta(e,o,!0):Ia(r,o))return i}else n=i}return n}function Kd(e){var t=pi(gn())[xt];if(!t.projection)for(var n=e?e.length:1,r=t.projection=Be(n,null),i=r.slice(),o=t.child;null!==o;){var a=e?Yd(o,e):0;null!==a&&(i[a]?i[a].projectionNext=o:r[a]=o,i[a]=o),o=o.next}}var Zd=!1;function Qd(e){Zd=e}function Xd(e,t,n){void 0===t&&(t=0);var r=gn(),i=Js(r[yt],r[xt],e,1,null,n||null);null===i.projection&&(i.projection=t),In(),Zd||_u(r,i)}function $d(e,t,n){var r=gn(),i=r[Ct]++;if(Pp(r,i,t)){var o=Vn();fl(r,o,e,t,n),ngDevMode&&Ul(r[yt].data,o,e,i)}return $d}function Jd(e,t,n){return eh(e,\"\",t,\"\",n),Jd}function eh(e,t,n,r,i){var o=gn(),a=Fp(o,t,n,r);return a!==cr&&(fl(o,Vn(),e,a,i),ngDevMode&&Ul(o[yt].data,Vn(),e,o[Ct]-1,t,r)),eh}function th(e,t,n,r,i,o,a){var s=gn(),l=Lp(s,t,n,r,i,o);if(l!==cr){var u=Vn();fl(s,u,e,l,a),ngDevMode&&Ul(s[yt].data,u,e,s[Ct]-2,t,r,o)}return th}function nh(e,t,n,r,i,o,a,s,l){var u=gn(),c=Vp(u,t,n,r,i,o,a,s);if(c!==cr){var p=Vn();fl(u,p,e,c,l),ngDevMode&&Ul(u[yt].data,p,e,u[Ct]-3,t,r,o,s)}return nh}function rh(e,t,n,r,i,o,a,s,l,u,c){var p=gn(),d=Bp(p,t,n,r,i,o,a,s,l,u);if(d!==cr){var h=Vn();fl(p,h,e,d,c),ngDevMode&&Ul(p[yt].data,h,e,p[Ct]-4,t,r,o,s,u)}return rh}function ih(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=gn(),f=Up(h,t,n,r,i,o,a,s,l,u,c,p);if(f!==cr){var m=Vn();fl(h,m,e,f,d),ngDevMode&&Ul(h[yt].data,m,e,h[Ct]-5,t,r,o,s,u,p)}return ih}function oh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f){var m=gn(),v=zp(m,t,n,r,i,o,a,s,l,u,c,p,d,h);if(v!==cr){var y=Vn();fl(m,y,e,v,f),ngDevMode&&Ul(m[yt].data,y,e,m[Ct]-6,t,r,o,s,u,p,h)}return oh}function ah(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v){var y=gn(),g=qp(y,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m);if(g!==cr){var _=Vn();fl(y,_,e,g,v),ngDevMode&&Ul(y[yt].data,_,e,y[Ct]-7,t,r,o,s,u,p,h,m)}return ah}function sh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y,g){var _=gn(),b=Hp(_,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y);if(b!==cr){var w=Vn();fl(_,w,e,b,g),ngDevMode&&Ul(_[yt].data,w,e,_[Ct]-8,t,r,o,s,u,p,h,m,y)}return sh}function lh(e,t,n){var r=gn(),i=jp(r,t);if(i!==cr){var o=Vn();if(fl(r,o,e,i,n),ngDevMode){for(var a=[t[0]],s=2;s<t.length;s+=2)a.push(t[s]);Ul.apply(void 0,O([r[yt].data,o,e,r[Ct]-a.length+1],a))}}return lh}function uh(e,t){void 0===t&&(t=\"\");var n=gn();ngDevMode&&Ue(n[Ct],n[yt].bindingStartIndex,\"text nodes should be created before any bindings\"),ngDevMode&&Ze(n,e+Nt);var r=n[e+Nt]=Jl(t,n[Dt]),i=Js(n[yt],n[xt],e,3,null,null);In(),fu(r,i,n)}function ch(e){return ph(\"\",e,\"\"),ch}function ph(e,t,n){var r=gn(),i=Fp(r,e,t,n);return i!==cr&&Kl(r,Vn(),i),ph}function dh(e,t,n,r,i){var o=gn(),a=Lp(o,e,t,n,r,i);return a!==cr&&Kl(o,Vn(),a),dh}function hh(e,t,n,r,i,o,a){var s=gn(),l=Vp(s,e,t,n,r,i,o,a);return l!==cr&&Kl(s,Vn(),l),hh}function fh(e,t,n,r,i,o,a,s,l){var u=gn(),c=Bp(u,e,t,n,r,i,o,a,s,l);return c!==cr&&Kl(u,Vn(),c),fh}function mh(e,t,n,r,i,o,a,s,l,u,c){var p=gn(),d=Up(p,e,t,n,r,i,o,a,s,l,u,c);return d!==cr&&Kl(p,Vn(),d),mh}function vh(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=gn(),f=zp(h,e,t,n,r,i,o,a,s,l,u,c,p,d);return f!==cr&&Kl(h,Vn(),f),vh}function yh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f){var m=gn(),v=qp(m,e,t,n,r,i,o,a,s,l,u,c,p,d,h,f);return v!==cr&&Kl(m,Vn(),v),yh}function gh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v){var y=gn(),g=Hp(y,e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v);return g!==cr&&Kl(y,Vn(),g),gh}function _h(e){var t=gn(),n=jp(t,e);return n!==cr&&Kl(t,Vn(),n),_h}function bh(e,t,n){var r=Fp(gn(),e,t,n);yd(Vn(),r)}function wh(e,t,n,r,i){var o=Lp(gn(),e,t,n,r,i);yd(Vn(),o)}function xh(e,t,n,r,i,o,a){var s=Vp(gn(),e,t,n,r,i,o,a);yd(Vn(),s)}function Ch(e,t,n,r,i,o,a,s,l){var u=Bp(gn(),e,t,n,r,i,o,a,s,l);yd(Vn(),u)}function Sh(e,t,n,r,i,o,a,s,l,u,c){var p=Up(gn(),e,t,n,r,i,o,a,s,l,u,c);yd(Vn(),p)}function Eh(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=zp(gn(),e,t,n,r,i,o,a,s,l,u,c,p,d);yd(Vn(),h)}function Oh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f){var m=qp(gn(),e,t,n,r,i,o,a,s,l,u,c,p,d,h,f);yd(Vn(),m)}function kh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v){var y=Hp(gn(),e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v);yd(Vn(),y)}function Dh(e){var t=jp(gn(),e);yd(Vn(),t)}function Th(e,t,n,r,i){var o=Fp(gn(),t,n,r);return dd(Vn(),e,o,i),Th}function Ih(e,t,n,r,i,o,a){var s=Lp(gn(),t,n,r,i,o);return dd(Vn(),e,s,a),Ih}function Ph(e,t,n,r,i,o,a,s,l){var u=Vp(gn(),t,n,r,i,o,a,s);return dd(Vn(),e,u,l),Ph}function Ah(e,t,n,r,i,o,a,s,l,u,c){var p=Bp(gn(),t,n,r,i,o,a,s,l,u);return dd(Vn(),e,p,c),Ah}function Mh(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=Up(gn(),t,n,r,i,o,a,s,l,u,c,p);return dd(Vn(),e,h,d),Mh}function Rh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f){var m=zp(gn(),t,n,r,i,o,a,s,l,u,c,p,d,h);return dd(Vn(),e,m,f),Rh}function Nh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v){var y=qp(gn(),t,n,r,i,o,a,s,l,u,c,p,d,h,f,m);return dd(Vn(),e,y,v),Nh}function jh(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y,g){var _=Hp(gn(),t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y);return dd(Vn(),e,_,g),jh}function Fh(e,t,n){var r=jp(gn(),t);return dd(Vn(),e,r,n),Fh}function Lh(e,t,n){var r=gn(),i=r[Ct]++;if(Pp(r,i,t)){var o=Vn();fl(r,o,e,t,n,!0),ngDevMode&&Ul(r[yt].data,o,e,i)}return Lh}function Vh(e,t,n){var r=gn(),i=r[Ct]++;if(Pp(r,i,t)){var o=Vn();fl(r,o,e,t,n,!0,Wl),ngDevMode&&Ul(r[yt].data,o,e,i)}return Vh}function Bh(e){if(!(e instanceof Node))throw new Error(\"Expecting instance of DOM Node\");var t=Gh(e,!1);return null===t?null:(void 0===t.component&&(t.component=function(e,t){var n=t[yt].data[e],r=n.directiveStart;return 2&n.flags?t[r]:null}(t.nodeIndex,t.lView)),t.component)}function Uh(e){if(!(e instanceof Node))throw new Error(\"Expecting instance of DOM Node\");var t=Gh(e,!1);return null===t?null:t.lView[Et]}function zh(e){var t=Gh(e,!1);if(null===t)return null;var n,r=t.lView;for(ngDevMode&&en(r);null===r[vt]&&(n=ui(r));)r=n;return 512&r[gt]?null:r[Et]}function qh(e){return O(di(e).components)}function Hh(e){var t=Gh(e,!1);if(null===t)return Cc.NULL;var n=t.lView[yt].data[t.nodeIndex];return new Ii(n,t.lView)}function Wh(e){var t=Gh(e);return void 0===t.directives&&(t.directives=ha(t.nodeIndex,t.lView,!1)),t.directives||[]}function Gh(e,t){void 0===t&&(t=!0);var n=aa(e);if(!n&&t)throw new Error(ngDevMode?\"Unable to find context associated with \"+rr(e):\"Invalid ng target\");return n}function Yh(e){var t=Gh(e,!1);return null===t?{}:(void 0===t.localRefs&&(t.localRefs=function(e,t){var n=e[yt].data[t];if(n&&n.localNames){for(var r={},i=n.index+1,o=0;o<n.localNames.length;o+=2)r[n.localNames[o]]=e[i],i++;return r}return null}(t.lView,t.nodeIndex)),t.localRefs||{})}function Kh(e){return aa(e).native}function Zh(e){return\"boolean\"==typeof e.useCapture}function Qh(e){if(!(e instanceof Node))throw new Error(\"Expecting instance of DOM Node\");var t=Gh(e,!1);if(null===t)return[];var n=t.lView,r=n[yt],i=n[St],o=r.cleanup,a=[];if(o&&i)for(var s=0;s<o.length;){var l=o[s++],u=o[s++];if(\"string\"==typeof l){var c=l,p=$r(n[u]),d=i[o[s++]],h=o[s++],f=\"boolean\"==typeof h?h:!(0<=h)&&null;e==p&&a.push({element:e,name:c,callback:d,useCapture:f})}}return a.sort(Xh),a}function Xh(e,t){return e.name==t.name?0:e.name<t.name?-1:1}function $h(e){var t=null,n=function(e){if(!(e instanceof Node))throw new Error(\"Expecting instance of DOM Node\");return Gh(e)}(e),r=n.lView,i=n.nodeIndex;if(-1!==i){var o=r[i];t=Bs(zt(o)?o[xt]:ni(i-Nt,r),r,i)}return t}var Jh=\"ng\",ef=!1;function tf(){ef||(ef=!0,nf(\"getComponent\",Bh),nf(\"getContext\",Uh),nf(\"getListeners\",Qh),nf(\"getViewComponent\",zh),nf(\"getHostElement\",Kh),nf(\"getInjector\",Hh),nf(\"getRootComponents\",qh),nf(\"getDirectives\",Wh),nf(\"getDebugNode\",$h),nf(\"markDirty\",ed))}function nf(e,t){if(\"undefined\"==typeof COMPILED||!COMPILED){var n=Q;if(ngDevMode&&Ge(t,\"function not defined\"),n){var r=n[Jh];(r=r||(n[Jh]={}))[e]=t}}}function rf(e,t,n,r,i,o){hn.isParent=!1,hn.previousOrParentTNode=null,hn.elementDepthCount=0,hn.bindingsEnabled=!0,Wn(null);var a=n[yt];ngDevMode&&Ze(n,0+Nt),n[0+Nt]=e;var s=Js(a,null,0,3,null,null),l=$s(n,ll(t),null,t.onPush?64:16,n[Nt],s,r,i,o);return a.firstTemplatePass&&(wi(yi(s,n),a,t.type),Sl(a,s),Ol(s,n.length,1)),Rl(n,l),n[Nt]=l}function of(e,t,n,r,i){var o=n[yt],a=function(e,t,n){var r=On();e.firstTemplatePass&&(n.providersResolver&&n.providersResolver(n),wl(e,r,1),kl(e,t,n));var i=ki(e.data,t,t.length-1,r);return Cl(t,r,i),i}(o,n,t);r.components.push(a),e[Et]=a,i&&i.forEach(function(e){return e(a,t)}),t.contentQueries&&t.contentQueries(1,a,n.length-1);var s=On();if(o.firstTemplatePass&&t.hostBindings){bn(s.index-Nt),Sn();var l=o.expandoInstructions;bl(t,l,a,s,o.firstTemplatePass),bn(null)}return a}function af(e,t){return{components:[],scheduler:e||ir,clean:zl,playerHandler:t||null,flags:0}}function sf(e,t){var n=ai(e)[yt],r=n.data.length-1;ya(r,t,n,-1,-1,-1),ga(n,{directiveStart:r,directiveEnd:1+r})}var lf=(uf.prototype.isFirstChange=function(){return this.firstChange},uf);function uf(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}function cf(){return pf.ngInherit=!0,pf}function pf(e){e.type.prototype.ngOnChanges&&(e.setInput=df,e.onChanges=function(){var e=ff(this),t=e&&e.current;if(t){var n=e.previous;if(n===$e)e.previous=t;else for(var r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}})}function df(e,t,n,r){var i=ff(e)||function(e,t){return e[hf]=t}(e,{previous:$e,current:null}),o=i.current||(i.current={}),a=i.previous,s=this.declaredInputs[n],l=a[s];o[s]=new lf(l&&l.currentValue,t,a===$e),e[r]=t}var hf=\"__ngSimpleChanges__\";function ff(e){return e[hf]||null}function mf(e){for(var t=function(e){return Object.getPrototypeOf(e.prototype).constructor}(e.type);t;){var n=void 0;if(Yt(e))n=t.ɵcmp||t.ɵdir;else{if(t.ɵcmp)throw new Error(\"Directives cannot inherit Components\");n=t.ɵdir}var r=t.ngBaseDef;if(r||n){var i=e;i.inputs=vf(e.inputs),i.declaredInputs=vf(e.declaredInputs),i.outputs=vf(e.outputs)}if(r){var o=r.viewQuery,a=r.contentQueries,s=r.hostBindings;s&&_f(e,s),o&&yf(e,o),a&&gf(e,a),k(e.inputs,r.inputs),k(e.declaredInputs,r.declaredInputs),k(e.outputs,r.outputs)}if(n){var l=n.hostBindings;l&&_f(e,l);var u=n.viewQuery,c=n.contentQueries;u&&yf(e,u),c&&gf(e,c),k(e.inputs,n.inputs),k(e.declaredInputs,n.declaredInputs),k(e.outputs,n.outputs),e.afterContentChecked=e.afterContentChecked||n.afterContentChecked,e.afterContentInit=e.afterContentInit||n.afterContentInit,e.afterViewChecked=e.afterViewChecked||n.afterViewChecked,e.afterViewInit=e.afterViewInit||n.afterViewInit,e.doCheck=e.doCheck||n.doCheck,e.onDestroy=e.onDestroy||n.onDestroy,e.onInit=e.onInit||n.onInit;var p=n.features;if(p)for(var d=0;d<p.length;d++){var h=p[d];h&&h.ngInherit&&h(e)}}else{var f=t.prototype;f&&(e.afterContentChecked=e.afterContentChecked||f.ngAfterContentChecked,e.afterContentInit=e.afterContentInit||f.ngAfterContentInit,e.afterViewChecked=e.afterViewChecked||f.ngAfterViewChecked,e.afterViewInit=e.afterViewInit||f.ngAfterViewInit,e.doCheck=e.doCheck||f.ngDoCheck,e.onDestroy=e.onDestroy||f.ngOnDestroy,e.onInit=e.onInit||f.ngOnInit,f.ngOnChanges&&cf()(e))}t=Object.getPrototypeOf(t)}}function vf(e){return e===$e?{}:e===Je?[]:e}function yf(e,n){var r=e.viewQuery;e.viewQuery=r?function(e,t){n(e,t),r(e,t)}:n}function gf(e,r){var i=e.contentQueries;e.contentQueries=i?function(e,t,n){r(e,t,n),i(e,t,n)}:r}function _f(e,r){var i=e.hostBindings;r!==i&&(e.hostBindings=i?function(e,t,n){r(e,t,n),i(e,t,n)}:r)}function bf(e,t,n,r,i){if(e=z(e),Array.isArray(e))for(var o=0;o<e.length;o++)bf(e[o],t,n,r,i);else{var a=gn(),s=a[yt],l=wc(e)?e:z(e.provide),u=gc(e),c=On(),p=65535&c.providerIndexes,d=c.directiveStart,h=c.providerIndexes>>16;if(function(e){return!!e.useClass}(e)||wc(e)){var f=(e.useClass||e).prototype.ngOnDestroy;f&&(s.destroyHooks||(s.destroyHooks=[])).push(t.length,f)}if(wc(e)||!e.multi){var m=new sn(u,i,ld),v=xf(l,t,i?p:p+h,d);-1==v?(wi(yi(c,a),s,l),t.push(l),c.directiveStart++,c.directiveEnd++,i&&(c.providerIndexes+=65536),n.push(m),a.push(m)):(n[v]=m,a[v]=m)}else{var y=xf(l,t,p+h,d),g=xf(l,t,p,p+h),_=0<=y&&n[y],b=0<=g&&n[g];if(i&&!b||!i&&!_){wi(yi(c,a),s,l);m=function(e,t,n,r,i){var o=new sn(e,n,ld);return o.multi=[],o.index=t,o.componentProviders=0,wf(o,i,r&&!n),o}(i?Sf:Cf,n.length,i,r,u);!i&&b&&(n[g].providerFactory=m),t.push(l),c.directiveStart++,c.directiveEnd++,i&&(c.providerIndexes+=65536),n.push(m),a.push(m)}else wf(n[i?g:y],u,!i&&r);!i&&r&&b&&n[g].componentProviders++}}}function wf(e,t,n){e.multi.push(t),n&&e.componentProviders++}function xf(e,t,n,r){for(var i=n;i<r;i++)if(t[i]===e)return i;return-1}function Cf(e,t,n,r){return Ef(this.multi,[])}function Sf(e,t,n,r){var i,o=this.multi;if(this.providerFactory){var a=this.providerFactory.componentProviders,s=ki(t,n,this.providerFactory.index,r);Ef(o,i=s.slice(0,a));for(var l=a;l<s.length;l++)i.push(s[l])}else Ef(o,i=[]);return i}function Ef(e,t){for(var n=0;n<e.length;n++){var r=e[n];t.push(r())}return t}function Of(n,r){return void 0===r&&(r=[]),function(e){e.providersResolver=function(e,t){return function(e,t,n){var r=gn()[yt];if(r.firstTemplatePass){var i=Yt(e);bf(n,r.data,r.blueprint,i,!0),bf(t,r.data,r.blueprint,i,!1)}}(e,t?t(n):n,r)}}}function kf(){}function Df(){}function Tf(e){var t=Error(\"No component factory found for \"+V(e)+\". Did you add it to @NgModule.entryComponents?\");return t[If]=e,t}var If=\"ngComponent\";var Pf=(Af.prototype.resolveComponentFactory=function(e){throw Tf(e)},Af);function Af(){}var Mf=(Rf.NULL=new Pf,Rf);function Rf(){}var Nf=(jf.prototype.resolveComponentFactory=function(e){var t=this._factories.get(e);if(!t&&this._parent&&(t=this._parent.resolveComponentFactory(e)),!t)throw Tf(e);return new Lf(t,this._ngModule)},jf);function jf(e,t,n){this._parent=t,this._ngModule=n,this._factories=new Map;for(var r=0;r<e.length;r++){var i=e[r];this._factories.set(i.componentType,i)}}var Ff,Lf=(p(Vf,Ff=Df),Vf.prototype.create=function(e,t,n,r){return this.factory.create(e,t,n,r||this.ngModule)},Vf);function Vf(e,t){var n=Ff.call(this)||this;return n.factory=e,n.ngModule=t,n.selector=e.selector,n.componentType=e.componentType,n.ngContentSelectors=e.ngContentSelectors,n.inputs=e.inputs,n.outputs=e.outputs,n}function Bf(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]}var Uf=(zf.__NG_ELEMENT_ID__=function(){return Wf(zf)},zf);function zf(e){this.nativeElement=e}function qf(e){return Tu(e,On(),gn())}var Hf,Wf=Bf,Gf=(new ae(\"Renderer2Interceptor\"),function(){});(Hf=N.RendererStyleFlags2||(N.RendererStyleFlags2={}))[Hf.Important=1]=\"Important\",Hf[Hf.DashCase=2]=\"DashCase\";var Yf=(Kf.__NG_ELEMENT_ID__=function(){return Qf()},Kf);function Kf(){}function Zf(){var e=gn(),t=ii(On().index,e);return function(e){var t=e[Dt];if(Yn(t))return t;throw new Error(\"Cannot inject Renderer2 when the application uses Renderer3!\")}(zt(t)?t:e)}var Qf=Bf,Xf=($f.ɵprov=D({token:$f,providedIn:\"root\",factory:function(){return null}}),$f);function $f(){}var Jf=function(e){this.full=e,this.major=e.split(\".\")[0],this.minor=e.split(\".\")[1],this.patch=e.split(\".\").slice(2).join(\".\")},em=new Jf(\"9.0.0-next.12\"),tm=(nm.prototype.supports=function(e){return kp(e)},nm.prototype.create=function(e){return new im(e)},nm);function nm(){}function rm(e,t){return t}var im=(om.prototype.forEachItem=function(e){var t;for(t=this._itHead;null!==t;t=t._next)e(t)},om.prototype.forEachOperation=function(e){for(var t=this._itHead,n=this._removalsHead,r=0,i=null;t||n;){var o=!n||t&&t.currentIndex<pm(n,r,i)?t:n,a=pm(o,r,i),s=o.currentIndex;if(o===n)r--,n=n._nextRemoved;else if(t=t._next,null==o.previousIndex)r++;else{i=i||[];var l=a-r,u=s-r;if(l!=u){for(var c=0;c<l;c++){var p=c<i.length?i[c]:i[c]=0,d=p+c;u<=d&&d<l&&(i[c]=p+1)}i[o.previousIndex]=u-l}}a!==s&&e(o,a,s)}},om.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousItHead;null!==t;t=t._nextPrevious)e(t)},om.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},om.prototype.forEachMovedItem=function(e){var t;for(t=this._movesHead;null!==t;t=t._nextMoved)e(t)},om.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},om.prototype.forEachIdentityChange=function(e){var t;for(t=this._identityChangesHead;null!==t;t=t._nextIdentityChange)e(t)},om.prototype.diff=function(e){if(null==e&&(e=[]),!kp(e))throw new Error(\"Error trying to diff '\"+V(e)+\"'. Only arrays and iterables are allowed\");return this.check(e)?this:null},om.prototype.onDestroy=function(){},om.prototype.check=function(e){var t=this;this._reset();var n,r,i,o=this._itHead,a=!1;if(Array.isArray(e)){this.length=e.length;for(var s=0;s<this.length;s++)r=e[s],i=this._trackByFn(s,r),null!==o&&Cp(o.trackById,i)?(a&&(o=this._verifyReinsertion(o,r,i,s)),Cp(o.item,r)||this._addIdentityChange(o,r)):(o=this._mismatch(o,r,i,s),a=!0),o=o._next}else n=0,function(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++)t(e[n]);else for(var r=e[xp()](),i=void 0;!(i=r.next()).done;)t(i.value)}(e,function(e){i=t._trackByFn(n,e),null!==o&&Cp(o.trackById,i)?(a&&(o=t._verifyReinsertion(o,e,i,n)),Cp(o.item,e)||t._addIdentityChange(o,e)):(o=t._mismatch(o,e,i,n),a=!0),o=o._next,n++}),this.length=n;return this._truncate(o),this.collection=e,this.isDirty},Object.defineProperty(om.prototype,\"isDirty\",{get:function(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead},enumerable:!0,configurable:!0}),om.prototype._reset=function(){if(this.isDirty){var e=void 0,t=void 0;for(e=this._previousItHead=this._itHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._additionsHead;null!==e;e=e._nextAdded)e.previousIndex=e.currentIndex;for(this._additionsHead=this._additionsTail=null,e=this._movesHead;null!==e;e=t)e.previousIndex=e.currentIndex,t=e._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}},om.prototype._mismatch=function(e,t,n,r){var i;return null===e?i=this._itTail:(i=e._prev,this._remove(e)),null!==(e=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(Cp(e.item,t)||this._addIdentityChange(e,t),this._moveAfter(e,i,r)):null!==(e=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(Cp(e.item,t)||this._addIdentityChange(e,t),this._reinsertAfter(e,i,r)):e=this._addAfter(new am(t,n),i,r),e},om.prototype._verifyReinsertion=function(e,t,n,r){var i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==i?e=this._reinsertAfter(i,e._prev,r):e.currentIndex!=r&&(e.currentIndex=r,this._addToMoves(e,r)),e},om.prototype._truncate=function(e){for(;null!==e;){var t=e._next;this._addToRemovals(this._unlink(e)),e=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)},om.prototype._reinsertAfter=function(e,t,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(e);var r=e._prevRemoved,i=e._nextRemoved;return null===r?this._removalsHead=i:r._nextRemoved=i,null===i?this._removalsTail=r:i._prevRemoved=r,this._insertAfter(e,t,n),this._addToMoves(e,n),e},om.prototype._moveAfter=function(e,t,n){return this._unlink(e),this._insertAfter(e,t,n),this._addToMoves(e,n),e},om.prototype._addAfter=function(e,t,n){return this._insertAfter(e,t,n),null===this._additionsTail?this._additionsTail=this._additionsHead=e:this._additionsTail=this._additionsTail._nextAdded=e,e},om.prototype._insertAfter=function(e,t,n){var r=null===t?this._itHead:t._next;return e._next=r,e._prev=t,null===r?this._itTail=e:r._prev=e,null===t?this._itHead=e:t._next=e,null===this._linkedRecords&&(this._linkedRecords=new um),this._linkedRecords.put(e),e.currentIndex=n,e},om.prototype._remove=function(e){return this._addToRemovals(this._unlink(e))},om.prototype._unlink=function(e){null!==this._linkedRecords&&this._linkedRecords.remove(e);var t=e._prev,n=e._next;return null===t?this._itHead=n:t._next=n,null===n?this._itTail=t:n._prev=t,e},om.prototype._addToMoves=function(e,t){return e.previousIndex===t||(null===this._movesTail?this._movesTail=this._movesHead=e:this._movesTail=this._movesTail._nextMoved=e),e},om.prototype._addToRemovals=function(e){return null===this._unlinkedRecords&&(this._unlinkedRecords=new um),this._unlinkedRecords.put(e),e.currentIndex=null,(e._nextRemoved=null)===this._removalsTail?(this._removalsTail=this._removalsHead=e,e._prevRemoved=null):(e._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=e),e},om.prototype._addIdentityChange=function(e,t){return e.item=t,null===this._identityChangesTail?this._identityChangesTail=this._identityChangesHead=e:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=e,e},om);function om(e){this.length=0,this._linkedRecords=null,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,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=e||rm}var am=function(e,t){this.item=e,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null},sm=(lm.prototype.add=function(e){null===this._head?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):((this._tail._nextDup=e)._prevDup=this._tail,e._nextDup=null,this._tail=e)},lm.prototype.get=function(e,t){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===t||t<=n.currentIndex)&&Cp(n.trackById,e))return n;return null},lm.prototype.remove=function(e){var t=e._prevDup,n=e._nextDup;return null===t?this._head=n:t._nextDup=n,null===n?this._tail=t:n._prevDup=t,null===this._head},lm);function lm(){this._head=null,this._tail=null}var um=(cm.prototype.put=function(e){var t=e.trackById,n=this.map.get(t);n||(n=new sm,this.map.set(t,n)),n.add(e)},cm.prototype.get=function(e,t){var n=e,r=this.map.get(n);return r?r.get(e,t):null},cm.prototype.remove=function(e){var t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e},Object.defineProperty(cm.prototype,\"isEmpty\",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),cm.prototype.clear=function(){this.map.clear()},cm);function cm(){this.map=new Map}function pm(e,t,n){var r=e.previousIndex;if(null===r)return r;var i=0;return n&&r<n.length&&(i=n[r]),r+t+i}var dm=(hm.prototype.supports=function(e){return e instanceof Map||Dp(e)},hm.prototype.create=function(){return new fm},hm);function hm(){}var fm=(Object.defineProperty(mm.prototype,\"isDirty\",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),mm.prototype.forEachItem=function(e){var t;for(t=this._mapHead;null!==t;t=t._next)e(t)},mm.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousMapHead;null!==t;t=t._nextPrevious)e(t)},mm.prototype.forEachChangedItem=function(e){var t;for(t=this._changesHead;null!==t;t=t._nextChanged)e(t)},mm.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},mm.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},mm.prototype.diff=function(e){if(e){if(!(e instanceof Map||Dp(e)))throw new Error(\"Error trying to diff '\"+V(e)+\"'. Only maps and objects are allowed\")}else e=new Map;return this.check(e)?this:null},mm.prototype.onDestroy=function(){},mm.prototype.check=function(e){var r=this;this._reset();var i=this._mapHead;if(this._appendAfter=null,this._forEach(e,function(e,t){if(i&&i.key===t)r._maybeAddToChanges(i,e),i=(r._appendAfter=i)._next;else{var n=r._getOrCreateRecordForKey(t,e);i=r._insertBeforeOrAppend(i,n)}}),i){i._prev&&(i._prev._next=null);for(var t=this._removalsHead=i;null!==t;t=t._nextRemoved)t===this._mapHead&&(this._mapHead=null),this._records.delete(t.key),t._nextRemoved=t._next,t.previousValue=t.currentValue,t.currentValue=null,t._prev=null,t._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},mm.prototype._insertBeforeOrAppend=function(e,t){if(e){var n=e._prev;return t._next=e,t._prev=n,e._prev=t,n&&(n._next=t),e===this._mapHead&&(this._mapHead=t),this._appendAfter=e}return this._appendAfter?(this._appendAfter._next=t)._prev=this._appendAfter:this._mapHead=t,this._appendAfter=t,null},mm.prototype._getOrCreateRecordForKey=function(e,t){if(this._records.has(e)){var n=this._records.get(e);this._maybeAddToChanges(n,t);var r=n._prev,i=n._next;return r&&(r._next=i),i&&(i._prev=r),n._next=null,n._prev=null,n}var o=new vm(e);return this._records.set(e,o),o.currentValue=t,this._addToAdditions(o),o},mm.prototype._reset=function(){if(this.isDirty){var e=void 0;for(this._previousMapHead=this._mapHead,e=this._previousMapHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._changesHead;null!==e;e=e._nextChanged)e.previousValue=e.currentValue;for(e=this._additionsHead;null!=e;e=e._nextAdded)e.previousValue=e.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},mm.prototype._maybeAddToChanges=function(e,t){Cp(t,e.currentValue)||(e.previousValue=e.currentValue,e.currentValue=t,this._addToChanges(e))},mm.prototype._addToAdditions=function(e){null===this._additionsHead?this._additionsHead=this._additionsTail=e:(this._additionsTail._nextAdded=e,this._additionsTail=e)},mm.prototype._addToChanges=function(e){null===this._changesHead?this._changesHead=this._changesTail=e:(this._changesTail._nextChanged=e,this._changesTail=e)},mm.prototype._forEach=function(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(function(e){return n(t[e],e)})},mm);function mm(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}var vm=function(e){this.key=e,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null},ym=(gm.create=function(e,t){if(null!=t){var n=t.factories.slice();e=e.concat(n)}return new gm(e)},gm.extend=function(t){return{provide:gm,useFactory:function(e){if(!e)throw new Error(\"Cannot extend IterableDiffers without a parent injector\");return gm.create(t,e)},deps:[[gm,new x,new b]]}},gm.prototype.find=function(t){var e=this.factories.find(function(e){return e.supports(t)});if(null!=e)return e;throw new Error(\"Cannot find a differ supporting object '\"+t+\"' of type '\"+function(e){return e.name||typeof e}(t)+\"'\")},gm.ɵprov=D({token:gm,providedIn:\"root\",factory:function(){return new gm([new tm])}}),gm);function gm(e){this.factories=e}var _m=(bm.create=function(e,t){if(t){var n=t.factories.slice();e=e.concat(n)}return new bm(e)},bm.extend=function(t){return{provide:bm,useFactory:function(e){if(!e)throw new Error(\"Cannot extend KeyValueDiffers without a parent injector\");return bm.create(t,e)},deps:[[bm,new x,new b]]}},bm.prototype.find=function(t){var e=this.factories.find(function(e){return e.supports(t)});if(e)return e;throw new Error(\"Cannot find a differ supporting object '\"+t+\"'\")},bm.ɵprov=D({token:bm,providedIn:\"root\",factory:function(){return new bm([new dm])}}),bm);function bm(e){this.factories=e}var wm=[new dm],xm=new ym([new tm]),Cm=new _m(wm),Sm=(Em.__NG_ELEMENT_ID__=function(){return km(Em,Uf)},Em);function Em(){}function Om(e,t){return Iu(e,t,On(),gn())}var km=Bf,Dm=(Tm.__NG_ELEMENT_ID__=function(){return Pm(Tm,Uf)},Tm);function Tm(){}function Im(e,t){return Pu(e,t,On(),gn())}var Pm=Bf;function Am(e,t,n,r){var i=\"ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '\"+t+\"'. Current value: '\"+n+\"'.\";return r&&(i+=\" 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 ?\"),function(e,t){var n=new Error(e);return Mm(n,t),n}(i,e)}function Mm(e,t){e[Ri]=t,e[ji]=t.logError.bind(t)}function Rm(e){return new Error(\"ViewDestroyedError: Attempt to use a destroyed view: \"+e)}function Nm(e,t,n){var r=e.state,i=1792&r;return i===t?(e.state=-1793&r|n,e.initIndex=-1,!0):i===n}function jm(e,t,n){return(1792&e.state)===t&&e.initIndex<=n&&(e.initIndex=n+1,!0)}function Fm(e,t){return e.nodes[t]}function Lm(e,t){return e.nodes[t]}function Vm(e,t){return e.nodes[t]}function Bm(e,t){return e.nodes[t]}function Um(e,t){return e.nodes[t]}function zm(){}var qm={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0},Hm=function(){},Wm=new Map;function Gm(e){var t=Wm.get(e);return t||(t=V(e)+\"_\"+Wm.size,Wm.set(e,t)),t}var Ym=\"$$undefined\",Km=\"$$empty\";var Zm=0;function Qm(e,t,n,r){var i=e.oldValues;return!(!(2&e.state)&&Cp(i[t.bindingIndex+n],r))}function Xm(e,t,n,r){return!!Qm(e,t,n,r)&&(e.oldValues[t.bindingIndex+n]=r,!0)}function $m(e,t,n,r){var i=e.oldValues[t.bindingIndex+n];if(1&e.state||!Sp(i,r)){var o=t.bindings[n].name;throw Am(qm.createDebugContext(e,t.nodeIndex),o+\": \"+i,o+\": \"+r,0!=(1&e.state))}}function Jm(e){for(var t=e;t;)2&t.def.flags&&(t.state|=8),t=t.viewContainerParent||t.parent}function ev(e,t){for(var n=e;n&&n!==t;)n.state|=64,n=n.viewContainerParent||n.parent}function tv(t,e,n,r){try{return Jm(33554432&t.def.nodes[e].flags?Lm(t,e).componentView:t),qm.handleEvent(t,e,n,r)}catch(e){t.root.errorHandler.handleError(e)}}function nv(e){return e.parent?Lm(e.parent,e.parentNodeDef.nodeIndex):null}function rv(e){return e.parent?e.parentNodeDef.parent:null}function iv(e,t){switch(201347067&t.flags){case 1:return Lm(e,t.nodeIndex).renderElement;case 2:return Fm(e,t.nodeIndex).renderText}}function ov(e){return!!e.parent&&!!(32768&e.parentNodeDef.flags)}function av(e){return 1<<e%32}function sv(e){var i={},o=0,a={};return e&&e.forEach(function(e){var t=j(e,2),n=t[0],r=t[1];\"number\"==typeof n?(i[n]=r,o|=av(n)):a[n]=r}),{matchedQueries:i,references:a,matchedQueryIds:o}}function lv(e,i){return e.map(function(e){var t,n,r;return(n=Array.isArray(e)?(r=(t=j(e,2))[0],t[1]):(r=0,e))&&(\"function\"==typeof n||\"object\"==typeof n)&&i&&Object.defineProperty(n,me,{value:i,configurable:!0}),{flags:r,token:n,tokenKey:Gm(n)}})}function uv(e,t,n){var r=n.renderParent;return r?0==(1&r.flags)||0==(33554432&r.flags)||r.element.componentRendererType&&r.element.componentRendererType.encapsulation===N.ViewEncapsulation.Native?Lm(e,n.renderParent.nodeIndex).renderElement:void 0:t}var cv=new WeakMap;function pv(e){var t=cv.get(e);return t||((t=e(function(){return Hm})).factory=e,cv.set(e,t)),t}function dv(e,t,n,r,i){3===t&&(n=e.renderer.parentNode(iv(e,e.def.lastRenderRootNode))),hv(e,t,0,e.def.nodes.length-1,n,r,i)}function hv(e,t,n,r,i,o,a){for(var s=n;s<=r;s++){var l=e.def.nodes[s];11&l.flags&&mv(e,l,t,i,o,a),s+=l.childCount}}function fv(e,t,n,r,i,o){for(var a=e;a&&!ov(a);)a=a.parent;for(var s=a.parent,l=rv(a),u=l.nodeIndex+1,c=l.nodeIndex+l.childCount,p=u;p<=c;p++){var d=s.def.nodes[p];d.ngContentIndex===t&&mv(s,d,n,r,i,o),p+=d.childCount}if(!s.parent){var h=e.root.projectableNodes[t];if(h)for(p=0;p<h.length;p++)vv(e,h[p],n,r,i,o)}}function mv(e,t,n,r,i,o){if(8&t.flags)fv(e,t.ngContent.index,n,r,i,o);else{var a=iv(e,t);if(3===n&&33554432&t.flags&&48&t.bindingFlags){if(16&t.bindingFlags&&vv(e,a,n,r,i,o),32&t.bindingFlags)vv(Lm(e,t.nodeIndex).componentView,a,n,r,i,o)}else vv(e,a,n,r,i,o);if(16777216&t.flags)for(var s=Lm(e,t.nodeIndex).viewContainer._embeddedViews,l=0;l<s.length;l++)dv(s[l],n,r,i,o);1&t.flags&&!t.element.name&&hv(e,n,t.nodeIndex+1,t.nodeIndex+t.childCount,r,i,o)}}function vv(e,t,n,r,i,o){var a=e.renderer;switch(n){case 1:a.appendChild(r,t);break;case 2:a.insertBefore(r,t,i);break;case 3:a.removeChild(r,t);break;case 0:o.push(t)}}var yv=/^:([^:]+):(.+)$/;function gv(e){if(\":\"!==e[0])return[\"\",e];var t=e.match(yv);return[t[1],t[2]]}function _v(e){for(var t=0,n=0;n<e.length;n++)t|=e[n].flags;return t}function bv(e){return null!=e?e.toString():\"\"}var wv=new Object,xv=Gm(Cc),Cv=Gm(ue),Sv=Gm(Re);function Ev(e,t,n){void 0===n&&(n=Cc.THROW_IF_NOT_FOUND);var r=ge(e);try{if(8&t.flags)return t.token;if(2&t.flags&&(n=null),1&t.flags)return e._parent.get(t.token,n);var i=t.tokenKey;switch(i){case xv:case Cv:case Sv:return e}var o=e._def.providersByKey[i],a=void 0;if(o){var s=e._providers[o.index];return void 0===s&&(s=e._providers[o.index]=Ov(e,o)),s===wv?void 0:s}if((a=P(t.token))&&function(e,t){var n=t.providedIn;return null!=n&&(\"any\"===n||n===e._def.scope||function(e,t){return-1<e._def.modules.indexOf(t)}(e,n))}(e,a)){var l=e._providers.length;return e._def.providers[l]=e._def.providersByKey[t.tokenKey]={flags:5120,value:a.factory,deps:[],index:l,token:t.token},e._providers[l]=wv,e._providers[l]=Ov(e,e._def.providersByKey[t.tokenKey])}return 4&t.flags?n:e._parent.get(t.token,n)}finally{ge(r)}}function Ov(e,t){var n;switch(201347067&t.flags){case 512:n=function(e,t,n){var r=n.length;switch(r){case 0:return new t;case 1:return new t(Ev(e,n[0]));case 2:return new t(Ev(e,n[0]),Ev(e,n[1]));case 3:return new t(Ev(e,n[0]),Ev(e,n[1]),Ev(e,n[2]));default:for(var i=[],o=0;o<r;o++)i[o]=Ev(e,n[o]);return new(t.bind.apply(t,O([void 0],i)))}}(e,t.value,t.deps);break;case 1024:n=function(e,t,n){var r=n.length;switch(r){case 0:return t();case 1:return t(Ev(e,n[0]));case 2:return t(Ev(e,n[0]),Ev(e,n[1]));case 3:return t(Ev(e,n[0]),Ev(e,n[1]),Ev(e,n[2]));default:for(var i=[],o=0;o<r;o++)i[o]=Ev(e,n[o]);return t.apply(void 0,O(i))}}(e,t.value,t.deps);break;case 2048:n=Ev(e,t.deps[0]);break;case 256:n=t.value}return n===wv||null===n||\"object\"!=typeof n||131072&t.flags||\"function\"!=typeof n.ngOnDestroy||(t.flags|=131072),void 0===n?wv:n}function kv(e,t,n,r){var i=t.viewContainer._embeddedViews;null==n&&(n=i.length),r.viewContainerParent=e,Le(i,n,r),function(e,t){var n=nv(t);if(!n||n===e||16&t.state)return;t.state|=16;var r=n.template._projectedViews;r=r||(n.template._projectedViews=[]);r.push(t),function(e,t){if(4&t.flags)return;e.nodeFlags|=4,t.flags|=4;var n=t.parent;for(;n;)n.childFlags|=4,n=n.parent}(t.parent.def,t.parentNodeDef)}(t,r),qm.dirtyParentQueries(r),Tv(t,0<n?i[n-1]:null,r)}function Dv(e,t){var n=e.viewContainer._embeddedViews;if((null==t||t>=n.length)&&(t=n.length-1),t<0)return null;var r=n[t];return r.viewContainerParent=null,Ve(n,t),qm.dirtyParentQueries(r),Iv(r),r}function Tv(e,t,n){var r=t?iv(t,t.def.lastRenderRootNode):e.renderElement,i=n.renderer.parentNode(r),o=n.renderer.nextSibling(r);dv(n,2,i,o,void 0)}function Iv(e){dv(e,3,null,null,void 0)}var Pv=new Object;function Av(e){return e.viewDefFactory}var Mv,Rv=(p(Nv,Mv=Df),Object.defineProperty(Nv.prototype,\"inputs\",{get:function(){var e=[],t=this._inputs;for(var n in t){var r=t[n];e.push({propName:n,templateName:r})}return e},enumerable:!0,configurable:!0}),Object.defineProperty(Nv.prototype,\"outputs\",{get:function(){var e=[];for(var t in this._outputs){var n=this._outputs[t];e.push({propName:t,templateName:n})}return e},enumerable:!0,configurable:!0}),Nv.prototype.create=function(e,t,n,r){if(!r)throw new Error(\"ngModule should be provided\");var i=pv(this.viewDefFactory),o=i.nodes[0].element.componentProvider.nodeIndex,a=qm.createRootView(e,t||[],n,i,r,Pv),s=Vm(a,o).instance;return n&&a.renderer.setAttribute(Lm(a,0).renderElement,\"ng-version\",em.full),new Fv(a,new Uv(a),s)},Nv);function Nv(e,t,n,r,i,o){var a=Mv.call(this)||this;return a.selector=e,a.componentType=t,a._inputs=r,a._outputs=i,a.ngContentSelectors=o,a.viewDefFactory=n,a}var jv,Fv=(p(Lv,jv=kf),Object.defineProperty(Lv.prototype,\"location\",{get:function(){return new Uf(Lm(this._view,this._elDef.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(Lv.prototype,\"injector\",{get:function(){return new Yv(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(Lv.prototype,\"componentType\",{get:function(){return this._component.constructor},enumerable:!0,configurable:!0}),Lv.prototype.destroy=function(){this._viewRef.destroy()},Lv.prototype.onDestroy=function(e){this._viewRef.onDestroy(e)},Lv);function Lv(e,t,n){var r=jv.call(this)||this;return r._view=e,r._viewRef=t,r._component=n,r._elDef=r._view.def.nodes[0],r.hostView=t,r.changeDetectorRef=t,r.instance=n,r}var Vv=(Object.defineProperty(Bv.prototype,\"element\",{get:function(){return new Uf(this._data.renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(Bv.prototype,\"injector\",{get:function(){return new Yv(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(Bv.prototype,\"parentInjector\",{get:function(){for(var e=this._view,t=this._elDef.parent;!t&&e;)t=rv(e),e=e.parent;return e?new Yv(e,t):new Yv(this._view,null)},enumerable:!0,configurable:!0}),Bv.prototype.clear=function(){for(var e=this._embeddedViews.length-1;0<=e;e--){var t=Dv(this._data,e);qm.destroyView(t)}},Bv.prototype.get=function(e){var t=this._embeddedViews[e];if(t){var n=new Uv(t);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(Bv.prototype,\"length\",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),Bv.prototype.createEmbeddedView=function(e,t,n){var r=e.createEmbeddedView(t||{});return this.insert(r,n),r},Bv.prototype.createComponent=function(e,t,n,r,i){var o=n||this.parentInjector;i||e instanceof Lf||(i=o.get(Re));var a=e.create(o,r,void 0,i);return this.insert(a.hostView,t),a},Bv.prototype.insert=function(e,t){if(e.destroyed)throw new Error(\"Cannot insert a destroyed View in a ViewContainer!\");var n=e,r=n._view;return kv(this._view,this._data,t,r),n.attachToViewContainerRef(this),e},Bv.prototype.move=function(e,t){if(e.destroyed)throw new Error(\"Cannot move a destroyed View in a ViewContainer!\");var n=this._embeddedViews.indexOf(e._view);return function(e,t,n){var r=e.viewContainer._embeddedViews,i=r[t];Ve(r,t),null==n&&(n=r.length),Le(r,n,i),qm.dirtyParentQueries(i),Iv(i),Tv(e,0<n?r[n-1]:null,i)}(this._data,n,t),e},Bv.prototype.indexOf=function(e){return this._embeddedViews.indexOf(e._view)},Bv.prototype.remove=function(e){var t=Dv(this._data,e);t&&qm.destroyView(t)},Bv.prototype.detach=function(e){var t=Dv(this._data,e);return t?new Uv(t):null},Bv);function Bv(e,t,n){this._view=e,this._elDef=t,this._data=n,this._embeddedViews=[]}var Uv=(Object.defineProperty(zv.prototype,\"rootNodes\",{get:function(){return function(e){var t=[];return dv(e,0,void 0,void 0,t),t}(this._view)},enumerable:!0,configurable:!0}),Object.defineProperty(zv.prototype,\"context\",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(zv.prototype,\"destroyed\",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),zv.prototype.markForCheck=function(){Jm(this._view)},zv.prototype.detach=function(){this._view.state&=-5},zv.prototype.detectChanges=function(){var e=this._view.root.rendererFactory;e.begin&&e.begin();try{qm.checkAndUpdateView(this._view)}finally{e.end&&e.end()}},zv.prototype.checkNoChanges=function(){qm.checkNoChangesView(this._view)},zv.prototype.reattach=function(){this._view.state|=4},zv.prototype.onDestroy=function(e){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(e)},zv.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),qm.destroyView(this._view)},zv.prototype.detachFromAppRef=function(){this._appRef=null,Iv(this._view),qm.dirtyParentQueries(this._view)},zv.prototype.attachToAppRef=function(e){if(this._viewContainerRef)throw new Error(\"This view is already attached to a ViewContainer!\");this._appRef=e},zv.prototype.attachToViewContainerRef=function(e){if(this._appRef)throw new Error(\"This view is already attached directly to the ApplicationRef!\");this._viewContainerRef=e},zv);function zv(e){this._view=e,this._viewContainerRef=null,this._appRef=null}var qv,Hv=(p(Wv,qv=Sm),Wv.prototype.createEmbeddedView=function(e){return new Uv(qm.createEmbeddedView(this._parentView,this._def,this._def.element.template,e))},Object.defineProperty(Wv.prototype,\"elementRef\",{get:function(){return new Uf(Lm(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Wv);function Wv(e,t){var n=qv.call(this)||this;return n._parentView=e,n._def=t,n}function Gv(e,t){return new Yv(e,t)}var Yv=(Kv.prototype.get=function(e,t){void 0===t&&(t=Cc.THROW_IF_NOT_FOUND);var n=!!this.elDef&&0!=(33554432&this.elDef.flags);return qm.resolveDep(this.view,this.elDef,n,{flags:0,token:e,tokenKey:Gm(e)},t)},Kv);function Kv(e,t){this.view=e,this.elDef=t}function Zv(e,t,n,r){return new Qv(e,t,n,r)}var Qv=(Xv.prototype.get=function(e,t,n){void 0===t&&(t=Cc.THROW_IF_NOT_FOUND),void 0===n&&(n=N.InjectFlags.Default);var r=0;return n&N.InjectFlags.SkipSelf?r|=1:n&N.InjectFlags.Self&&(r|=4),Ev(this,{token:e,tokenKey:Gm(e),flags:r},t)},Object.defineProperty(Xv.prototype,\"instance\",{get:function(){return this.get(this._moduleType)},enumerable:!0,configurable:!0}),Object.defineProperty(Xv.prototype,\"componentFactoryResolver\",{get:function(){return this.get(Mf)},enumerable:!0,configurable:!0}),Xv.prototype.destroy=function(){if(this._destroyed)throw new Error(\"The ng module \"+V(this.instance.constructor)+\" has already been destroyed.\");this._destroyed=!0,function(e){for(var t=e._def,n=new Set,r=0;r<t.providers.length;r++)if(131072&t.providers[r].flags){var i=e._providers[r];if(i&&i!==wv){var o=i.ngOnDestroy;\"function\"!=typeof o||n.has(i)||(o.apply(i),n.add(i))}}}(this),this._destroyListeners.forEach(function(e){return e()})},Xv.prototype.onDestroy=function(e){this._destroyListeners.push(e)},Xv);function Xv(e,t,n,r){this._moduleType=e,this._parent=t,this._bootstrapComponents=n,this._def=r,this._destroyListeners=[],this._destroyed=!1,function(e){for(var t=e._def,n=e._providers=Be(t.providers.length),r=0;r<t.providers.length;r++){var i=t.providers[r];4096&i.flags||void 0===n[r]&&(n[r]=Ov(e,i))}}(this.injector=this)}var $v=Gm(Yf),Jv=Gm(Uf),ey=Gm(Dm),ty=Gm(Sm),ny=Gm(Mu),ry=Gm(Cc),iy=Gm(ue);function oy(e,t,n,r,i,o,a,s,l){var u=sv(n),c=u.matchedQueries,p=u.references,d=u.matchedQueryIds;l=l||[],s=s||[],o=z(o);var h=lv(a,V(i));return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:c,matchedQueryIds:d,references:p,ngContentIndex:-1,childCount:r,bindings:s,bindingFlags:_v(s),outputs:l,element:null,provider:{token:i,value:o,deps:h},text:null,query:null,ngContent:null}}function ay(e,t){for(var n=e;n.parent&&!ov(n);)n=n.parent;return cy(n.parent,rv(n),!0,t.provider.value,t.provider.deps)}function sy(e,t){var n=0<(32768&t.flags),r=cy(e,t.parent,n,t.provider.value,t.provider.deps);if(t.outputs.length)for(var i=0;i<t.outputs.length;i++){var o=t.outputs[i],a=r[o.propName];if(!Bd(a))throw new Error(\"@Output \"+o.propName+\" not initialized in '\"+r.constructor.name+\"'.\");var s=a.subscribe(ly(e,t.parent.nodeIndex,o.eventName));e.disposables[t.outputIndex+i]=s.unsubscribe.bind(s)}return r}function ly(t,n,r){return function(e){return tv(t,n,r,e)}}function uy(e,t){var n=0<(8192&t.flags),r=t.provider;switch(201347067&t.flags){case 512:return cy(e,t.parent,n,r.value,r.deps);case 1024:return function(e,t,n,r,i){var o=i.length;switch(o){case 0:return r();case 1:return r(dy(e,t,n,i[0]));case 2:return r(dy(e,t,n,i[0]),dy(e,t,n,i[1]));case 3:return r(dy(e,t,n,i[0]),dy(e,t,n,i[1]),dy(e,t,n,i[2]));default:for(var a=[],s=0;s<o;s++)a.push(dy(e,t,n,i[s]));return r.apply(void 0,O(a))}}(e,t.parent,n,r.value,r.deps);case 2048:return dy(e,t.parent,n,r.deps[0]);case 256:return r.value}}function cy(e,t,n,r,i){var o=i.length;switch(o){case 0:return new r;case 1:return new r(dy(e,t,n,i[0]));case 2:return new r(dy(e,t,n,i[0]),dy(e,t,n,i[1]));case 3:return new r(dy(e,t,n,i[0]),dy(e,t,n,i[1]),dy(e,t,n,i[2]));default:for(var a=[],s=0;s<o;s++)a.push(dy(e,t,n,i[s]));return new(r.bind.apply(r,O([void 0],a)))}}var py={};function dy(e,t,n,r,i){if(void 0===i&&(i=Cc.THROW_IF_NOT_FOUND),8&r.flags)return r.token;var o=e;2&r.flags&&(i=null);var a=r.tokenKey;a===ny&&(n=!(!t||!t.element.componentView)),t&&1&r.flags&&(n=!1,t=t.parent);for(var s=e;s;){if(t)switch(a){case $v:return hy(s,t,n).renderer;case Jv:return new Uf(Lm(s,t.nodeIndex).renderElement);case ey:return Lm(s,t.nodeIndex).viewContainer;case ty:if(t.element.template)return Lm(s,t.nodeIndex).template;break;case ny:var l=hy(s,t,n);return new Uv(l);case ry:case iy:return Gv(s,t);default:var u=(n?t.element.allProviders:t.element.publicProviders)[a];if(u){var c=Vm(s,u.nodeIndex);return c||(c={instance:uy(s,u)},s.nodes[u.nodeIndex]=c),c.instance}}n=ov(s),t=rv(s),s=s.parent,4&r.flags&&(s=null)}var p=o.root.injector.get(r.token,py);return p!==py||i===py?p:o.root.ngModule.injector.get(r.token,i)}function hy(e,t,n){var r;if(n)r=Lm(e,t.nodeIndex).componentView;else for(r=e;r.parent&&!ov(r);)r=r.parent;return r}function fy(e,t,n,r,i,o){if(32768&n.flags){var a=Lm(e,n.parent.nodeIndex).componentView;2&a.def.flags&&(a.state|=8)}var s=n.bindings[r].name;if(t.instance[s]=i,524288&n.flags){o=o||{};var l=Ep.unwrap(e.oldValues[n.bindingIndex+r]);o[n.bindings[r].nonMinifiedName]=new lf(l,i,0!=(2&e.state))}return e.oldValues[n.bindingIndex+r]=i,o}function my(e,t){if(e.def.nodeFlags&t)for(var n=e.def.nodes,r=0,i=0;i<n.length;i++){var o=n[i],a=o.parent;for(!a&&o.flags&t&&yy(e,i,o.flags&t,r++),0==(o.childFlags&t)&&(i+=o.childCount);a&&1&a.flags&&i===a.nodeIndex+a.childCount;)a.directChildFlags&t&&(r=vy(e,a,t,r)),a=a.parent}}function vy(e,t,n,r){for(var i=t.nodeIndex+1;i<=t.nodeIndex+t.childCount;i++){var o=e.def.nodes[i];o.flags&n&&yy(e,i,o.flags&n,r++),i+=o.childCount}return r}function yy(e,t,n,r){var i=Vm(e,t);if(i){var o=i.instance;o&&(qm.setCurrentNode(e,t),1048576&n&&jm(e,512,r)&&o.ngAfterContentInit(),2097152&n&&o.ngAfterContentChecked(),4194304&n&&jm(e,768,r)&&o.ngAfterViewInit(),8388608&n&&o.ngAfterViewChecked(),131072&n&&o.ngOnDestroy())}}var gy,_y=(p(by,gy=Mf),by.prototype.resolveComponentFactory=function(e){ngDevMode&&Qt(e);var t=pt(e);return new Sy(t,this.ngModule)},by);function by(e){var t=gy.call(this)||this;return t.ngModule=e,t}function wy(e){var t=[];for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];t.push({propName:r,templateName:n})}return t}var xy=new ae(\"SCHEDULER_TOKEN\",{providedIn:\"root\",factory:function(){return ir}});var Cy,Sy=(p(Ey,Cy=Df),Object.defineProperty(Ey.prototype,\"inputs\",{get:function(){return wy(this.componentDef.inputs)},enumerable:!0,configurable:!0}),Object.defineProperty(Ey.prototype,\"outputs\",{get:function(){return wy(this.componentDef.outputs)},enumerable:!0,configurable:!0}),Ey.prototype.create=function(e,t,n,r){var i=(r=r||this.ngModule)?function(i,o){return{get:function(e,t,n){var r=i.get(e,py,n);return r!==py||t===py?r:o.get(e,t,n)}}}(e,r.injector):e,o=i.get(Gf,Kn),a=i.get(Xf,null);Hn();var s=n?pl(o,n):Xs(this.selector,o.createRenderer(null,this.componentDef),null),l=this.componentDef.onPush?576:528,u=\"string\"==typeof n&&/^#root-ng-internal-isolated-\\d+/.test(n),c=af(),p=o.createRenderer(s,this.componentDef);n&&s&&(ngDevMode&&ngDevMode.rendererSetAttribute++,Yn(p)?p.setAttribute(s,\"ng-version\",em.full):s.setAttribute(\"ng-version\",em.full));var d,h,f=ul(-1,null,1,0,null,null,null,null,null),m=$s(null,f,c,l,null,null,o,p,a,i),v=Fn(m,null);try{var y=rf(s,this.componentDef,m,o,p);h=ni(0,m),t&&(h.projection=t.map(function(e){return Array.from(e)})),d=of(y,this.componentDef,m,c,[sf]),tl(m,f,null)}finally{Fn(v,null)}var g=new ky(this.componentType,d,Tu(Uf,h,m),m,h);return n&&!u||(g.hostView._tViewNode.child=h),g},Ey);function Ey(e,t){var n=Cy.call(this)||this;return n.componentDef=e,n.ngModule=t,n.componentType=e.type,n.selector=e.selectors[0][0]||\"div\",n.ngContentSelectors=e.ngContentSelectors?e.ngContentSelectors:[],n.isBoundToModule=!!t,n}new _y;var Oy,ky=(p(Dy,Oy=kf),Object.defineProperty(Dy.prototype,\"injector\",{get:function(){return new Ii(this._tNode,this._rootLView)},enumerable:!0,configurable:!0}),Dy.prototype.destroy=function(){this.destroyCbs&&(this.destroyCbs.forEach(function(e){return e()}),this.destroyCbs=null,this.hostView.destroyed||this.hostView.destroy())},Dy.prototype.onDestroy=function(e){this.destroyCbs&&this.destroyCbs.push(e)},Dy);function Dy(e,t,n,r,i){var o=Oy.call(this)||this;return o.location=n,o._rootLView=r,o._tNode=i,o.destroyCbs=[],o.instance=t,o.hostView=o.changeDetectorRef=new ku(r),o.hostView._tViewNode=el(r[yt],null,-1,r),o.componentType=e,o}\"undefined\"==typeof ngI18nClosureMode&&(Q.ngI18nClosureMode=\"undefined\"!=typeof goog&&\"function\"==typeof goog.getMsg);var Ty,Iy={};(Ty=N.ɵLocaleDataIndex||(N.ɵLocaleDataIndex={}))[Ty.LocaleId=0]=\"LocaleId\",Ty[Ty.DayPeriodsFormat=1]=\"DayPeriodsFormat\",Ty[Ty.DayPeriodsStandalone=2]=\"DayPeriodsStandalone\",Ty[Ty.DaysFormat=3]=\"DaysFormat\",Ty[Ty.DaysStandalone=4]=\"DaysStandalone\",Ty[Ty.MonthsFormat=5]=\"MonthsFormat\",Ty[Ty.MonthsStandalone=6]=\"MonthsStandalone\",Ty[Ty.Eras=7]=\"Eras\",Ty[Ty.FirstDayOfWeek=8]=\"FirstDayOfWeek\",Ty[Ty.WeekendRange=9]=\"WeekendRange\",Ty[Ty.DateFormat=10]=\"DateFormat\",Ty[Ty.TimeFormat=11]=\"TimeFormat\",Ty[Ty.DateTimeFormat=12]=\"DateTimeFormat\",Ty[Ty.NumberSymbols=13]=\"NumberSymbols\",Ty[Ty.NumberFormats=14]=\"NumberFormats\",Ty[Ty.CurrencySymbol=15]=\"CurrencySymbol\",Ty[Ty.CurrencyName=16]=\"CurrencyName\",Ty[Ty.Currencies=17]=\"Currencies\",Ty[Ty.PluralCase=18]=\"PluralCase\",Ty[Ty.ExtraData=19]=\"ExtraData\";var Py=void 0;var Ay=[\"en\",[[\"a\",\"p\"],[\"AM\",\"PM\"],Py],[[\"AM\",\"PM\"],Py,Py],[[\"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\"]],Py,[[\"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\"]],Py,[[\"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}\",Py,\"{1} 'at' {0}\",Py],[\".\",\",\",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"¤#,##0.00\",\"#E0\"],\"$\",\"US Dollar\",{},function(e){var t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\\.?/,\"\").length;return 1===t&&0===n?1:5}];function My(e){return Ry(e)[N.ɵLocaleDataIndex.PluralCase]}function Ry(e){var t=e.toLowerCase().replace(/_/g,\"-\"),n=Iy[t];if(n)return n;var r=t.split(\"-\")[0];if(n=Iy[r])return n;if(\"en\"===r)return Ay;throw new Error('Missing locale data for the locale \"'+e+'\".')}var Ny=\"en-US\",jy=\"�\",Fy=/^\\s*(�\\d+:?\\d*�)\\s*,\\s*(select|plural)\\s*,/,Ly=/�\\/?\\*(\\d+:\\d+)�/gi,Vy=/�(\\/?[#*!]\\d+):?\\d*�/gi,By=/�(\\d+):?\\d*�/gi,Uy=/({\\s*�\\d+:?\\d*�\\s*,\\s*\\S{6}\\s*,[\\s\\S]*})/gi,zy=/\\[(�.+?�?)\\]/,qy=/\\[(�.+?�?)\\]|(�\\/?\\*\\d+:\\d+�)/g,Hy=/({\\s*)(VAR_(PLURAL|SELECT)(_\\d+)?)(\\s*,)/g,Wy=/{([A-Z0-9_]+)}/g,Gy=/�I18N_EXP_(ICU(_\\d+)?)�/g,Yy=/\\/\\*/,Ky=/\\d+\\:(\\d+)/;function Zy(e){if(!e)return[];var t,n=0,r=[],i=[],o=/[{}]/g;for(o.lastIndex=0;t=o.exec(e);){var a=t.index;if(\"}\"==t[0]){if(r.pop(),0==r.length){var s=e.substring(n,a);Fy.test(s)?i.push(Qy(s)):i.push(s),n=a+1}}else{if(0==r.length){var l=e.substring(n,a);i.push(l),n=a+1}r.push(\"{\")}}var u=e.substring(n);return i.push(u),i}function Qy(e){for(var t=[],n=[],r=1,i=0,o=Zy(e=e.replace(Fy,function(e,t,n){return r=\"select\"===n?0:1,i=parseInt(t.substr(1),10),\"\"})),a=0;a<o.length;){var s=o[a++].trim();1===r&&(s=s.replace(/\\s*(?:=)?(\\w+)\\s*/,\"$1\")),s.length&&t.push(s);var l=Zy(o[a++]);t.length>n.length&&n.push(l)}return We(t.indexOf(\"other\"),-1,'Missing key \"other\" in ICU statement.'),{type:r,mainBinding:i,cases:t,values:n}}function Xy(e){for(var t,n,r=\"\",i=0,o=!1;null!==(t=Ly.exec(e));)o?t[0]===jy+\"/*\"+n+jy&&(i=t.index,o=!1):(r+=e.substring(i,t.index+t[0].length),n=t[1],o=!0);return ngDevMode&&Ue(o,!1,'Tag mismatch: unable to find the end of the sub-template in the translation \"'+e+'\"'),r+=e.substr(i)}function $y(e,t,n,r){void 0===r&&(r=null);for(var i=[null,null],o=e.split(By),a=0,s=0;s<o.length;s++){var l=o[s];if(1&s){var u=parseInt(l,10);i.push(-1-u),a|=ng(u)}else\"\"!==l&&i.push(l)}return i.push(t<<2|(n?1:0)),n&&i.push(n,r),i[0]=a,i[1]=i.length-2,i}function Jy(e,t){var n;void 0===t&&(t=0),t|=ng(e.mainBinding);for(var r=0;r<e.values.length;r++)for(var i=e.values[r],o=0;o<i.length;o++){var a=i[o];if(\"string\"==typeof a)for(;n=By.exec(a);)t|=ng(parseInt(n[1],10));else t=Jy(a,t)}return t}var eg=[],tg=-1;function ng(e){return 1<<Math.min(e,31)}var rg,ig=[];function og(e,t,n){var r=gn(),i=r[yt];ngDevMode&&Ge(i,\"tView should be defined\"),eg[++tg]=e,Qd(!0),i.firstTemplatePass&&null===i.data[e+Nt]&&function(e,t,n,r,i){var o=t.blueprint.length-Nt;rg=0;var a=On(),s=Tn()?a:a&&a.parent,l=s&&s!==e[xt]?s.index-Nt:n,u=0;ig[u]=l;var c=[];0<n&&a!==s&&c.push(a.index<<3|0);for(var p=[],d=[],h=function(e){return e.replace(xg,\" \")}(function(e,t){if(\"number\"!=typeof t)return Xy(e);var n=e.indexOf(\":\"+t+jy)+2+t.toString().length,r=e.search(new RegExp(jy+\"\\\\/\\\\*\\\\d+:\"+t+jy));return Xy(e.substring(n,r))}(r,i)).split(Vy),f=0;f<h.length;f++){var m=h[f];if(1&f)if(\"/\"===m.charAt(0)){if(\"#\"===m.charAt(1)){var v=parseInt(m.substr(2),10);l=ig[--u],c.push(v<<3|5)}}else{v=parseInt(m.substr(1),10);c.push(v<<3|0,l<<17|1),\"#\"===m.charAt(0)&&(ig[++u]=l=v)}else for(var y=Zy(m),g=0;g<y.length;g++)if(1&g){var _=o+rg++;c.push(ns,ngDevMode?\"ICU \"+_:\"\",_,l<<17|1);var b=y[g],w=Jy(b);_g(d,b,_,_);var x=d.length-1;p.push(ng(b.mainBinding),3,-1-b.mainBinding,_<<2|2,x,w,2,_<<2|3,x)}else if(\"\"!==y[g]){var C=y[g],S=C.match(By),E=o+rg++;c.push(S?\"\":C,E,l<<17|1),S&&Ne($y(C,E),p)}}0<rg&&function(e,t){if(ngDevMode&&We(t,0,\"The number of slots to alloc should be greater than 0\"),0<t){var n=e[yt];if(n.firstTemplatePass){for(var r=0;r<t;r++)n.blueprint.push(null),n.data.push(null),e.push(null);n.expandoInstructions?n.expandoInstructions.push(t):n.expandoStartIndex+=t}}}(e,rg);ngDevMode&&function(e,t,n,r){rs(e,new Ws(e,r)),rs(t,new Ys(t,n,r)),n&&n.forEach(function(e){e.create.forEach(function(e){rs(e,new Ws(e,r))}),e.update.forEach(function(e){rs(e,new Ys(e,n,r))})})}(c,p,d.length?d:null,e);var O={vars:rg,create:c,update:p,icus:d.length?d:null};t.data[n+Nt]=O}(r,i,e,t,n)}function ag(e,t,n,r){ngDevMode&&ngDevMode.rendererMoveNode++;var i=e.next;(n=n||t)===t&&e!==t.child?(e.next=t.child,t.child=e):n!==t&&e!==n.next?(e.next=n.next,n.next=e):e.next=null,t!==r[xt]&&(e.parent=t);for(var o=e.next;o;)o.next===e&&(o.next=i),o=o.next;if(1===e.type)return _u(r,e),e;fu(ei(e,r),e,r);var a=r[e.index];return 0!==e.type&&qt(a)&&fu(a[Vt],e,r),e}function sg(e,a){void 0===a&&(a={});var t=e;if(zy.test(e)){var d={},h=[0];t=t.replace(qy,function(e,t,n){var r=t||n,i=d[r]||[];if(i.length||(r.split(\"|\").forEach(function(e){var t=e.match(Ky),n=t?parseInt(t[1],10):0,r=Yy.test(e);i.push([n,r,e])}),d[r]=i),!i.length)throw new Error(\"i18n postprocess: unmatched placeholder - \"+r);for(var o=h[h.length-1],a=0,s=0;s<i.length;s++)if(i[s][0]===o){a=s;break}var l=j(i[a],3),u=l[0],c=l[1],p=l[2];return c?h.pop():o!==u&&h.push(u),i.splice(a,1),p})}return Object.keys(a).length?t=(t=(t=t.replace(Hy,function(e,t,n,r,i,o){return a.hasOwnProperty(n)?\"\"+t+a[n]+o:e})).replace(Wy,function(e,t){return a.hasOwnProperty(t)?a[t]:e})).replace(Gy,function(e,t){if(a.hasOwnProperty(t)){var n=a[t];if(!n.length)throw new Error(\"i18n postprocess: unmatched ICU - \"+e+\" with key: \"+t);return n.shift()}return e}):t}function lg(){var e=gn(),t=e[yt];ngDevMode&&Ge(t,\"tView should be defined\"),function(e,t){ngDevMode&&Ue(e[Ct],t.bindingStartIndex,\"i18nEnd should be called before any binding\");var n=eg[tg--],r=t.data[n+Nt];ngDevMode&&Ge(r,\"You should call i18nStart before i18nEnd\");for(var i=On(),o=cg(n,r.create,e),a=n+1;a<=i.index-Nt;a++)-1===o.indexOf(a)&&pg(a,e,!0)}(e,t),Qd(!1)}function ug(e,t,n,r,i){var o=On();ngDevMode&&Ze(e,t+Nt),e[t+Nt]=r;var a=Js(e[yt],e[xt],t,n,i,null);return o&&o.next===a&&(o.next=null),a}function cg(e,t,n){for(var r=n[Dt],i=null,o=null,a=[],s=0;s<t.length;s++){var l=t[s];if(\"string\"==typeof l){var u=Jl(l,r),c=t[++s];ngDevMode&&ngDevMode.rendererCreateTextNode++,o=i,i=ug(n,c,3,u,null),a.push(c),In()}else if(\"number\"==typeof l)switch(7&l){case 1:var p=l>>>17,d=void 0;d=p===e?n[xt]:ni(p,n),ngDevMode&&Ge(i,\"You need to create or select a node before you can insert it into the DOM\"),o=ag(i,d,o,n);break;case 0:var h=l>>>3;a.push(h),o=i,(i=ni(h,n))&&kn(i,3===i.type);break;case 5:o=i=ni(l>>>3,n),kn(i,!1);break;case 4:Dl(g=l>>>3,t[++s],t[++s],n);break;default:throw new Error('Unable to determine the type of mutate operation for \"'+l+'\"')}else switch(l){case ns:var f=t[++s],m=t[++s];ngDevMode&&Ue(typeof f,\"string\",'Expected \"'+f+'\" to be a comment node value');var v=r.createComment(f);ngDevMode&&ngDevMode.rendererCreateComment++,o=i,i=ug(n,m,5,v,null),a.push(m),ua(v,n),i.activeCaseIndex=null,In();break;case ts:var y=t[++s],g=t[++s];ngDevMode&&Ue(typeof y,\"string\",'Expected \"'+y+'\" to be an element node tag name');var _=r.createElement(y);ngDevMode&&ngDevMode.rendererCreateElement++,o=i,i=ug(n,g,3,_,y),a.push(g);break;default:throw new Error('Unable to determine the type of mutate operation for \"'+l+'\"')}}return In(),a}function pg(e,t,n){var r=ni(e,t),i=Jr(e,t);i&&vu(t[Dt],i);var o=ri(t,e);if(qt(o)){var a=o;0!==r.type&&vu(t[Dt],a[Vt])}n&&(r.flags|=128),ngDevMode&&ngDevMode.rendererRemoveNode++}function dg(e,t,n){og(e,t,n),lg()}function hg(e,t){var n=gn(),r=n[yt];ngDevMode&&Ge(r,\"tView should be defined\"),function(e,t,n,r){for(var i=On().index-Nt,o=[],a=0;a<r.length;a+=2)for(var s=r[a],l=r[a+1].split(Uy),u=0;u<l.length;u++){var c=l[u];if(1&u)throw new Error(\"ICU expressions are not yet supported in attributes\");if(\"\"!==c)if(!!c.match(By))t.firstTemplatePass&&null===t.data[n+Nt]&&Ne($y(c,i,s),o);else{Dl(i,s,c,e);var p=ni(i,e),d=p.inputs&&p.inputs[s];if(d&&(Yl(e,d,c),ngDevMode)){var h=Jr(i,e);vl(e,h,p.type,d,c)}}}t.firstTemplatePass&&null===t.data[n+Nt]&&(t.data[n+Nt]=o)}(n,r,e,t)}var fg=0,mg=0;function vg(e){var t=gn();return Pp(t,t[Ct]++,e)&&(fg|=1<<mg),mg++,vg}function yg(e){if(mg){var t=gn(),n=t[yt];ngDevMode&&Ge(n,\"tView should be defined\");var r=n.data[e+Nt],i=void 0,o=null;Array.isArray(r)?i=r:(i=r.update,o=r.icus),function e(t,n,r,i,o,a){void 0===a&&(a=!1);for(var s=!1,l=0;l<t.length;l++){var u=t[l],c=t[++l];if(a||u&i)for(var p=\"\",d=l+1;d<=l+c;d++){var h=t[d];if(\"string\"==typeof h)p+=h;else if(\"number\"==typeof h)if(h<0)p+=nr(o[r-h]);else{var f=h>>>2,m=void 0,v=void 0;switch(3&h){case 1:fl(o,f,t[++d],p,t[++d]);break;case 0:Kl(o,f,p);break;case 2:if(m=n[t[++d]],null!==(v=ni(f,o)).activeCaseIndex)for(var y=m.remove[v.activeCaseIndex],g=0;g<y.length;g++){var _=y[g];switch(7&_){case 3:pg(_>>>3,o,!1);break;case 6:var b=ni(y[g+1]>>>3,o).activeCaseIndex;null!==b&&Ne(n[_>>>3].remove[b],y)}}var w=gg(m,p);v.activeCaseIndex=-1!==w?w:null,cg(-1,m.create[w],o),s=!0;break;case 3:m=n[t[++d]],v=ni(f,o),e(m.update[v.activeCaseIndex],n,r,i,o,s)}}}l+=c}}(i,o,t[Ct]-mg-1,fg,t),mg=fg=0}}function gg(e,t){var n=e.cases.indexOf(t);if(-1===n)switch(e.type){case 1:var r=function(e,t){switch(My(t)(e)){case 0:return\"zero\";case 1:return\"one\";case 2:return\"two\";case 3:return\"few\";case 4:return\"many\";default:return\"other\"}}(t,Cg);-1===(n=e.cases.indexOf(r))&&\"other\"!==r&&(n=e.cases.indexOf(\"other\"));break;case 0:n=e.cases.indexOf(\"other\")}return n}function _g(e,t,n,r){for(var i=[],o=[],a=[],s=[],l=[],u=0;u<t.values.length;u++){for(var c=t.values[u],p=[],d=0;d<c.length;d++){var h=c[d];if(\"string\"!=typeof h){var f=p.push(h)-1;c[d]=\"\\x3c!--�\"+f+\"�--\\x3e\"}}var m=bg(c.join(\"\"),n,p,e,r);i.push(m.create),o.push(m.remove),a.push(m.update),s.push(m.vars),l.push(m.childIcus)}var v={type:t.type,vars:s,childIcus:l,cases:t.cases,create:i,remove:o,update:a};e.push(v),rg+=Math.max.apply(Math,O(s))}function bg(e,t,n,r,i){var o=new fo(document).getInertBodyElement(e);if(!o)throw new Error(\"Unable to generate inert body element\");var a={vars:0,childIcus:[],create:[],remove:[],update:[]};return function e(t,n,r,i,o,a){if(t){for(var s=[];t;){var l=t.nextSibling,u=a+ ++n.vars;switch(t.nodeType){case Node.ELEMENT_NODE:var c=t,p=c.tagName.toLowerCase();if(Do.hasOwnProperty(p)){n.create.push(ts,p,u,r<<17|1);for(var d=c.attributes,h=0;h<d.length;h++){var f=d.item(h),m=f.name.toLowerCase(),v=!!f.value.match(By);v?Mo.hasOwnProperty(m)?To[m]?Ne($y(f.value,u,f.name,go),n.update):Io[m]?Ne($y(f.value,u,f.name,_o),n.update):Ne($y(f.value,u,f.name),n.update):ngDevMode&&console.warn(\"WARNING: ignoring unsafe attribute value \"+m+\" on element \"+p+\" (see http://g.co/ng/security#xss)\"):n.create.push(u<<3|4,f.name,f.value)}e(t.firstChild,n,u,i,o,a),n.remove.push(u<<3|3)}else n.vars--;break;case Node.TEXT_NODE:var y=t.textContent||\"\",g=y.match(By);n.create.push(g?\"\":y,u,r<<17|1),n.remove.push(u<<3|3),g&&Ne($y(y,u),n.update);break;case Node.COMMENT_NODE:var _=wg.exec(t.textContent||\"\");if(_){var b=parseInt(_[1],10),w=ngDevMode?\"nested ICU \"+b:\"\";n.create.push(ns,w,u,r<<17|1);var x=i[b];s.push([x,u])}else n.vars--;break;default:n.vars--}t=l}for(var h=0;h<s.length;h++){var x=s[h][0],C=s[h][1];_g(o,x,C,a+n.vars);var S=o.length-1;n.vars+=Math.max.apply(Math,O(o[S].vars)),n.childIcus.push(S);var E=Jy(x);n.update.push(ng(x.mainBinding),3,-1-x.mainBinding,C<<2|2,S,E,2,C<<2|3,S),n.remove.push(S<<3|6,C<<3|3)}}}((qo(o)||o).firstChild,a,t,n,r,i),a}var wg=/�(\\d+)�/;var xg=/\\uE500/g;var Cg=Ny;function Sg(e){Ge(e,\"Expected localeId to be defined\"),\"string\"==typeof e&&(Cg=e.toLowerCase().replace(/_/g,\"-\"))}var Eg=new Map;function Og(e,t,n){if(t&&t!==n)throw new Error(\"Duplicate module registered for \"+e+\" - \"+V(t)+\" vs \"+V(t.name))}function kg(e){if(null!==e.ɵmod.id){var t=e.ɵmod.id;Og(t,Eg.get(t),e),Eg.set(t,e)}var n=e.ɵmod.imports;n instanceof Function&&(n=n()),n&&n.forEach(function(e){return kg(e)})}function Dg(e){return Eg.get(e)}var Tg,Ig={provide:Mf,useClass:_y,deps:[Re]},Pg=(p(Ag,Tg=Re),Ag.prototype.get=function(e,t,n){return void 0===t&&(t=Cc.THROW_IF_NOT_FOUND),void 0===n&&(n=N.InjectFlags.Default),e===Cc||e===Re||e===ue?this:this._r3Injector.get(e,t,n)},Object.defineProperty(Ag.prototype,\"componentFactoryResolver\",{get:function(){return this.get(Mf)},enumerable:!0,configurable:!0}),Ag.prototype.destroy=function(){ngDevMode&&Ge(this.destroyCbs,\"NgModule already destroyed\");var e=this._r3Injector;e.destroyed||e.destroy(),this.destroyCbs.forEach(function(e){return e()}),this.destroyCbs=null},Ag.prototype.onDestroy=function(e){ngDevMode&&Ge(this.destroyCbs,\"NgModule already destroyed\"),this.destroyCbs.push(e)},Ag);function Ag(e,t){var n=Tg.call(this)||this;n._parent=t,n._bootstrapComponents=[],(n.injector=n).destroyCbs=[];var r=mt(e);ngDevMode&&Ge(r,\"NgModule '\"+V(e)+\"' is not a subtype of 'NgModuleType'.\");var i=function(e){return e[ne]||null}(e);i&&Sg(i),n._bootstrapComponents=ur(r.bootstrap);var o=[{provide:Re,useValue:n},Ig];return n._r3Injector=fc(e,t,o,V(e)),n.instance=n.get(e),n}var Mg,Rg=(p(Ng,Mg=Ie),Ng.prototype.create=function(e){return new Pg(this.moduleType,e)},Ng);function Ng(e){var t=Mg.call(this)||this;return null!==mt(t.moduleType=e)&&kg(e),t}function jg(e,t,n){var r=Mn()+e,i=gn();return si(i)?Tp(i,r,n?t.call(n):t()):Ip(i,r)}function Fg(e,t,n,r){var i=gn(),o=Mn()+e;return Pp(i,o,n)?Tp(i,o+1,r?t.call(r,n):t(n)):Ip(i,o+1)}function Lg(e,t,n,r,i){var o=Mn()+e,a=gn();return Ap(a,o,n,r)?Tp(a,o+2,i?t.call(i,n,r):t(n,r)):Ip(a,o+2)}function Vg(e,t,n,r,i,o){var a=Mn()+e,s=gn();return Mp(s,a,n,r,i)?Tp(s,a+3,o?t.call(o,n,r,i):t(n,r,i)):Ip(s,a+3)}function Bg(e,t,n,r,i,o,a){var s=Mn()+e,l=gn();return Rp(l,s,n,r,i,o)?Tp(l,s+4,a?t.call(a,n,r,i,o):t(n,r,i,o)):Ip(l,s+4)}function Ug(e,t,n,r,i,o,a,s){var l=Mn()+e,u=gn(),c=Rp(u,l,n,r,i,o);return Pp(u,l+4,a)||c?Tp(u,l+5,s?t.call(s,n,r,i,o,a):t(n,r,i,o,a)):Ip(u,l+5)}function zg(e,t,n,r,i,o,a,s,l){var u=Mn()+e,c=gn(),p=Rp(c,u,n,r,i,o);return Ap(c,u+4,a,s)||p?Tp(c,u+6,l?t.call(l,n,r,i,o,a,s):t(n,r,i,o,a,s)):Ip(c,u+6)}function qg(e,t,n,r,i,o,a,s,l,u){var c=Mn()+e,p=gn(),d=Rp(p,c,n,r,i,o);return Mp(p,c+4,a,s,l)||d?Tp(p,c+7,u?t.call(u,n,r,i,o,a,s,l):t(n,r,i,o,a,s,l)):Ip(p,c+7)}function Hg(e,t,n,r,i,o,a,s,l,u,c){var p=Mn()+e,d=gn(),h=Rp(d,p,n,r,i,o);return Rp(d,p+4,a,s,l,u)||h?Tp(d,p+8,c?t.call(c,n,r,i,o,a,s,l,u):t(n,r,i,o,a,s,l,u)):Ip(d,p+8)}function Wg(e,t,n,r){for(var i=Mn()+e,o=!1,a=gn(),s=0;s<n.length;s++)Pp(a,i++,n[s])&&(o=!0);return o?Tp(a,i,t.apply(r,n)):Ip(a,i)}function Gg(e,t){var n,r=gn()[yt],i=e+Nt;r.firstTemplatePass?(n=function(e,t){if(t)for(var n=t.length-1;0<=n;n--){var r=t[n];if(e===r.name)return r}throw new Error(\"The pipe '\"+e+\"' could not be found!\")}(t,r.pipeRegistry),(r.data[i]=n).onDestroy&&(r.destroyHooks||(r.destroyHooks=[])).push(i,n.onDestroy)):n=r.data[i];var o=(n.factory||(n.factory=ft(n.type,!0)))();return ad(e,o),o}function Yg(e,t,n){var r=gn(),i=ri(r,e);return Jg(r,$g(r,e)?Fg(t,i.transform,n,i):i.transform(n))}function Kg(e,t,n,r){var i=gn(),o=ri(i,e);return Jg(i,$g(i,e)?Lg(t,o.transform,n,r,o):o.transform(n,r))}function Zg(e,t,n,r,i){var o=gn(),a=ri(o,e);return Jg(o,$g(o,e)?Vg(t,a.transform,n,r,i,a):a.transform(n,r,i))}function Qg(e,t,n,r,i,o){var a=gn(),s=ri(a,e);return Jg(a,$g(a,e)?Bg(t,s.transform,n,r,i,o,s):s.transform(n,r,i,o))}function Xg(e,t,n){var r=gn(),i=ri(r,e);return Jg(r,$g(r,e)?Wg(t,i.transform,n,i):i.transform.apply(i,n))}function $g(e,t){return e[yt].data[t+Nt].pure}function Jg(e,t){Ep.isWrapped(t)&&(t=Ep.unwrap(t),e[e[Ct]]=cr);return t}var e_,t_=(p(n_,e_=u.Subject),n_.prototype.emit=function(e){e_.prototype.next.call(this,e)},n_.prototype.subscribe=function(t,n,e){var r,i=function(e){return null},o=function(){return null};t&&\"object\"==typeof t?(r=this.__isAsync?function(e){setTimeout(function(){return t.next(e)})}:function(e){t.next(e)},t.error&&(i=this.__isAsync?function(e){setTimeout(function(){return t.error(e)})}:function(e){t.error(e)}),t.complete&&(o=this.__isAsync?function(){setTimeout(function(){return t.complete()})}:function(){t.complete()})):(r=this.__isAsync?function(e){setTimeout(function(){return t(e)})}:function(e){t(e)},n&&(i=this.__isAsync?function(e){setTimeout(function(){return n(e)})}:function(e){n(e)}),e&&(o=this.__isAsync?function(){setTimeout(function(){return e()})}:function(){e()}));var a=e_.prototype.subscribe.call(this,r,i,o);return t instanceof u.Subscription&&t.add(a),a},n_);function n_(e){void 0===e&&(e=!1);var t=e_.call(this)||this;return t.__isAsync=e,t}function r_(){return this._results[xp()]()}var i_=(o_.prototype.map=function(e){return this._results.map(e)},o_.prototype.filter=function(e){return this._results.filter(e)},o_.prototype.find=function(e){return this._results.find(e)},o_.prototype.reduce=function(e,t){return this._results.reduce(e,t)},o_.prototype.forEach=function(e){this._results.forEach(e)},o_.prototype.some=function(e){return this._results.some(e)},o_.prototype.toArray=function(){return this._results.slice()},o_.prototype.toString=function(){return this._results.toString()},o_.prototype.reset=function(e){this._results=je(e),this.dirty=!1,this.length=this._results.length,this.last=this._results[this.length-1],this.first=this._results[0]},o_.prototype.notifyOnChanges=function(){this.changes.emit(this)},o_.prototype.setDirty=function(){this.dirty=!0},o_.prototype.destroy=function(){this.changes.complete(),this.changes.unsubscribe()},o_);function o_(){this.dirty=!0,this._results=[],this.changes=new t_,this.length=0;var e=xp(),t=o_.prototype;t[e]||(t[e]=r_)}var a_=(s_.prototype.clone=function(){return new s_(this.queryList)},s_.prototype.setDirty=function(){this.queryList.setDirty()},s_);function s_(e){this.queryList=e,this.matches=null}var l_=(u_.prototype.createEmbeddedView=function(e){var t=e.queries;if(null===t)return null;for(var n=null!==e.contentQueries?e.contentQueries[0]:t.length,r=[],i=0;i<n;i++){var o=t.getByIndex(i),a=this.queries[o.indexInDeclarationView];r.push(a.clone())}return new u_(r)},u_.prototype.insertView=function(e){this.dirtyQueriesWithMatches(e)},u_.prototype.detachView=function(e){this.dirtyQueriesWithMatches(e)},u_.prototype.dirtyQueriesWithMatches=function(e){for(var t=0;t<this.queries.length;t++)null!==D_(e,t).matches&&this.queries[t].setDirty()},u_);function u_(e){void 0===e&&(e=[]),this.queries=e}var c_=function(e,t,n,r){void 0===r&&(r=null),this.predicate=e,this.descendants=t,this.isStatic=n,this.read=r},p_=(d_.prototype.elementStart=function(e,t){ngDevMode&&tn(e,\"Queries should collect results on the first template pass only\");for(var n=0;n<this.queries.length;n++)this.queries[n].elementStart(e,t)},d_.prototype.elementEnd=function(e){for(var t=0;t<this.queries.length;t++)this.queries[t].elementEnd(e)},d_.prototype.embeddedTView=function(e){for(var t=null,n=0;n<this.length;n++){var r=null!==t?t.length:0,i=this.getByIndex(n).embeddedTView(e,r);i&&(i.indexInDeclarationView=n,null!==t?t.push(i):t=[i])}return null!==t?new d_(t):null},d_.prototype.template=function(e,t){ngDevMode&&tn(e,\"Queries should collect results on the first template pass only\");for(var n=0;n<this.queries.length;n++)this.queries[n].template(e,t)},d_.prototype.getByIndex=function(e){return ngDevMode&&Ze(this.queries,e),this.queries[e]},Object.defineProperty(d_.prototype,\"length\",{get:function(){return this.queries.length},enumerable:!0,configurable:!0}),d_.prototype.track=function(e){this.queries.push(e)},d_);function d_(e){void 0===e&&(e=[]),this.queries=e}var h_=(f_.prototype.elementStart=function(e,t){this.isApplyingToNode(t)&&this.matchTNode(e,t)},f_.prototype.elementEnd=function(e){this._declarationNodeIndex===e.index&&(this._appliesToNextNode=!1)},f_.prototype.template=function(e,t){this.elementStart(e,t)},f_.prototype.embeddedTView=function(e,t){return this.isApplyingToNode(e)?(this.crossesNgTemplate=!0,this.addMatch(-e.index,t),new f_(this.metadata)):null},f_.prototype.isApplyingToNode=function(e){return this._appliesToNextNode&&!1===this.metadata.descendants?this._declarationNodeIndex===(e.parent?e.parent.index:-1):this._appliesToNextNode},f_.prototype.matchTNode=function(e,t){if(Array.isArray(this.metadata.predicate))for(var n=this.metadata.predicate,r=0;r<n.length;r++)this.matchTNodeWithReadOption(e,t,m_(t,n[r]));else{var i=this.metadata.predicate;i===Sm?0===t.type&&this.matchTNodeWithReadOption(e,t,-1):this.matchTNodeWithReadOption(e,t,Oi(t,e,i,!1,!1))}},f_.prototype.matchTNodeWithReadOption=function(e,t,n){if(null!==n){var r=this.metadata.read;if(null!==r)if(r===Uf||r===Dm||r===Sm&&0===t.type)this.addMatch(t.index,-2);else{var i=Oi(t,e,r,!1,!1);null!==i&&this.addMatch(t.index,i)}else this.addMatch(t.index,n)}},f_.prototype.addMatch=function(e,t){null===this.matches?this.matches=[e,t]:this.matches.push(e,t)},f_);function f_(e,t){void 0===t&&(t=-1),this.metadata=e,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=t}function m_(e,t){var n=e.localNames;if(null!==n)for(var r=0;r<n.length;r+=2)if(n[r]===t)return n[r+1];return null}function v_(e,t,n,r){return-1===n?function(e,t){return 3===e.type||4===e.type?Tu(Uf,e,t):0===e.type?Iu(Sm,Uf,e,t):null}(t,e):-2===n?function(e,t,n){{if(n===Uf)return Tu(Uf,t,e);if(n===Sm)return Iu(Sm,Uf,t,e);if(n===Dm)return ngDevMode&&un(t,3,0,4),Pu(Dm,Uf,t,e);ngDevMode&&Ye(\"Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got \"+V(n)+\".\")}}(e,t,r):ki(e[yt].data,e,n,t)}function y_(e,t,n){var r=e[wt].queries[n];if(null===r.matches){for(var i=e[yt].data,o=t.matches,a=[],s=0;s<o.length;s+=2){var l=o[s];if(l<0)a.push(null);else{ngDevMode&&Ze(i,l);var u=i[l];a.push(v_(e,u,o[s+1],t.metadata.read))}}r.matches=a}return r.matches}function g_(e){var t=gn(),n=Nn();jn(n+1);var r=D_(t[yt],n);if(e.dirty&&si(t)===r.metadata.isStatic){if(null===r.matches)e.reset([]);else{var i=r.crossesNgTemplate?function e(t,n,r){var i=t[yt].queries.getByIndex(n),o=i.matches;if(null!==o)for(var a=y_(t,i,n),s=0;s<o.length;s+=2){var l=o[s];if(0<l){var u=a[s/2];ngDevMode&&Ge(u,\"materialized query result should be defined\"),r.push(u)}else{var c=o[s+1],p=t[-l];ngDevMode&&$t(p);for(var d=Ut;d<p.length;d++){var h=p[d];h[Mt]===h[_t]&&e(h,c,r)}if(null!==p[Lt])for(var f=p[Lt],m=0;m<f.length;m++)e(f[m],c,r)}}return r}(t,n,[]):y_(t,r,n);e.reset(i),e.notifyOnChanges()}return!0}return!1}function __(e,t,n){w_(gn(),e,t,n,!0)}function b_(e,t,n){w_(gn(),e,t,n,!1)}function w_(e,t,n,r,i){var o=e[yt];o.firstTemplatePass&&(k_(o,new c_(t,n,i,r),-1),i&&(o.staticViewQueries=!0)),O_(e)}function x_(e,t,n,r){S_(gn(),t,n,r,!1,On(),e)}function C_(e,t,n,r){S_(gn(),t,n,r,!0,On(),e)}function S_(e,t,n,r,i,o,a){var s=e[yt];s.firstTemplatePass&&(k_(s,new c_(t,n,i,r),o.index),function(e,t){var n=e.contentQueries||(e.contentQueries=[]),r=e.contentQueries.length?n[n.length-1]:-1;t!==r&&n.push(e.queries.length-1,t)}(s,a),i&&(s.staticContentQueries=!0)),O_(e)}function E_(){return function(e,t){return ngDevMode&&Ge(e[wt],\"LQueries should be defined when trying to load a query\"),ngDevMode&&Ze(e[wt].queries,t),e[wt].queries[t].queryList}(gn(),Nn())}function O_(e){var t=new i_;!function(e,t,n){var r=ql(e);r.push(t),e[yt].firstTemplatePass&&Hl(e).push(n,r.length-1)}(e,t,t.destroy),null===e[wt]&&(e[wt]=new l_),e[wt].queries.push(new a_(t))}function k_(e,t,n){null===e.queries&&(e.queries=new p_),e.queries.track(new h_(t,n))}function D_(e,t){return ngDevMode&&Ge(e.queries,\"TQueries must be defined to retrieve a TQuery\"),e.queries.getByIndex(t)}function T_(e,t){return Iu(Sm,Uf,e,t)}function I_(e){void 0===e&&(e=N.InjectFlags.Default);var t=Au(!0);if(null!=t||e&N.InjectFlags.Optional)return t;throw new Error(\"No provider for ChangeDetectorRef!\")}var P_={\"ɵɵattribute\":Np,\"ɵɵattributeInterpolate1\":Wp,\"ɵɵattributeInterpolate2\":Gp,\"ɵɵattributeInterpolate3\":Yp,\"ɵɵattributeInterpolate4\":Kp,\"ɵɵattributeInterpolate5\":Zp,\"ɵɵattributeInterpolate6\":Qp,\"ɵɵattributeInterpolate7\":Xp,\"ɵɵattributeInterpolate8\":$p,\"ɵɵattributeInterpolateV\":Jp,\"ɵɵdefineBase\":lt,\"ɵɵdefineComponent\":tt,\"ɵɵdefineDirective\":ut,\"ɵɵdefineInjectable\":D,\"ɵɵdefineInjector\":I,\"ɵɵdefineNgModule\":ot,\"ɵɵdefinePipe\":ct,\"ɵɵdirectiveInject\":ld,\"ɵɵgetFactoryOf\":Ai,\"ɵɵgetInheritedFactory\":Mi,\"ɵɵinject\":we,\"ɵɵinjectAttribute\":ud,\"ɵɵinjectPipeChangeDetectorRef\":I_,\"ɵɵtemplateRefExtractor\":T_,\"ɵɵNgOnChangesFeature\":cf,\"ɵɵProvidersFeature\":Of,\"ɵɵInheritDefinitionFeature\":mf,\"ɵɵcontainer\":td,\"ɵɵnextContext\":Gd,\"ɵɵcontainerRefreshStart\":rd,\"ɵɵcontainerRefreshEnd\":id,\"ɵɵnamespaceHTML\":qn,\"ɵɵnamespaceMathML\":zn,\"ɵɵnamespaceSVG\":Un,\"ɵɵenableBindings\":vn,\"ɵɵdisableBindings\":yn,\"ɵɵallocHostVars\":bp,\"ɵɵelementStart\":Dd,\"ɵɵelementEnd\":Td,\"ɵɵelement\":Id,\"ɵɵelementContainerStart\":Md,\"ɵɵelementContainerEnd\":Rd,\"ɵɵelementContainer\":Nd,\"ɵɵpureFunction0\":jg,\"ɵɵpureFunction1\":Fg,\"ɵɵpureFunction2\":Lg,\"ɵɵpureFunction3\":Vg,\"ɵɵpureFunction4\":Bg,\"ɵɵpureFunction5\":Ug,\"ɵɵpureFunction6\":zg,\"ɵɵpureFunction7\":qg,\"ɵɵpureFunction8\":Hg,\"ɵɵpureFunctionV\":Wg,\"ɵɵgetCurrentView\":Ld,\"ɵɵrestoreView\":En,\"ɵɵlistener\":Ud,\"ɵɵprojection\":Xd,\"ɵɵupdateSyntheticHostBinding\":Vh,\"ɵɵcomponentHostSyntheticListener\":zd,\"ɵɵpipeBind1\":Yg,\"ɵɵpipeBind2\":Kg,\"ɵɵpipeBind3\":Zg,\"ɵɵpipeBind4\":Qg,\"ɵɵpipeBindV\":Xg,\"ɵɵprojectionDef\":Kd,\"ɵɵhostProperty\":Lh,\"ɵɵproperty\":$d,\"ɵɵpropertyInterpolate\":Jd,\"ɵɵpropertyInterpolate1\":eh,\"ɵɵpropertyInterpolate2\":th,\"ɵɵpropertyInterpolate3\":nh,\"ɵɵpropertyInterpolate4\":rh,\"ɵɵpropertyInterpolate5\":ih,\"ɵɵpropertyInterpolate6\":oh,\"ɵɵpropertyInterpolate7\":ah,\"ɵɵpropertyInterpolate8\":sh,\"ɵɵpropertyInterpolateV\":lh,\"ɵɵpipe\":Gg,\"ɵɵqueryRefresh\":g_,\"ɵɵviewQuery\":b_,\"ɵɵstaticViewQuery\":__,\"ɵɵstaticContentQuery\":C_,\"ɵɵloadQuery\":E_,\"ɵɵcontentQuery\":x_,\"ɵɵreference\":sd,\"ɵɵelementHostAttrs\":Pd,\"ɵɵclassMap\":vd,\"ɵɵclassMapInterpolate1\":bh,\"ɵɵclassMapInterpolate2\":wh,\"ɵɵclassMapInterpolate3\":xh,\"ɵɵclassMapInterpolate4\":Ch,\"ɵɵclassMapInterpolate5\":Sh,\"ɵɵclassMapInterpolate6\":Eh,\"ɵɵclassMapInterpolate7\":Oh,\"ɵɵclassMapInterpolate8\":kh,\"ɵɵclassMapInterpolateV\":Dh,\"ɵɵstyleMap\":md,\"ɵɵstyleProp\":pd,\"ɵɵstylePropInterpolate1\":Th,\"ɵɵstylePropInterpolate2\":Ih,\"ɵɵstylePropInterpolate3\":Ph,\"ɵɵstylePropInterpolate4\":Ah,\"ɵɵstylePropInterpolate5\":Mh,\"ɵɵstylePropInterpolate6\":Rh,\"ɵɵstylePropInterpolate7\":Nh,\"ɵɵstylePropInterpolate8\":jh,\"ɵɵstylePropInterpolateV\":Fh,\"ɵɵstyleSanitizer\":cd,\"ɵɵclassProp\":hd,\"ɵɵselect\":Ja,\"ɵɵadvance\":$a,\"ɵɵtemplate\":nd,\"ɵɵtext\":uh,\"ɵɵtextInterpolate\":ch,\"ɵɵtextInterpolate1\":ph,\"ɵɵtextInterpolate2\":dh,\"ɵɵtextInterpolate3\":hh,\"ɵɵtextInterpolate4\":fh,\"ɵɵtextInterpolate5\":mh,\"ɵɵtextInterpolate6\":vh,\"ɵɵtextInterpolate7\":yh,\"ɵɵtextInterpolate8\":gh,\"ɵɵtextInterpolateV\":_h,\"ɵɵembeddedViewStart\":jd,\"ɵɵembeddedViewEnd\":Fd,\"ɵɵi18n\":dg,\"ɵɵi18nAttributes\":hg,\"ɵɵi18nExp\":vg,\"ɵɵi18nStart\":og,\"ɵɵi18nEnd\":lg,\"ɵɵi18nApply\":yg,\"ɵɵi18nPostprocess\":sg,\"ɵɵresolveWindow\":or,\"ɵɵresolveDocument\":ar,\"ɵɵresolveBody\":sr,\"ɵɵsetComponentScope\":nt,\"ɵɵsetNgModuleScope\":at,\"ɵɵsanitizeHtml\":Yo,\"ɵɵsanitizeStyle\":Ko,\"ɵɵdefaultStyleSanitizer\":ea,\"ɵɵsanitizeResourceUrl\":Qo,\"ɵɵsanitizeScript\":Xo,\"ɵɵsanitizeUrl\":Zo,\"ɵɵsanitizeUrlOrResourceUrl\":Jo},A_=[],M_=[];var R_=!1;function N_(){if(!R_){R_=!0;try{for(var e=M_.length-1;0<=e;e--){var t=M_[e],n=t.moduleType,r=t.ngModule;r.declarations&&r.declarations.every(j_)&&(M_.splice(e,1),W_(n,r))}}finally{R_=!1}}}function j_(e){return Array.isArray(e)?e.every(j_):!!z(e)}function F_(e,t){void 0===t&&(t={}),L_(e,t),function(e,t){M_.push({moduleType:e,ngModule:t})}(e,t)}function L_(t,n,r){void 0===r&&(r=!1),ngDevMode&&Ge(t,\"Required value moduleType\"),ngDevMode&&Ge(n,\"Required value ngModule\");var e=je(n.declarations||A_),i=null;Object.defineProperty(t,te,{configurable:!0,get:function(){if(null===i){if(ngDevMode&&n.imports&&-1<n.imports.indexOf(t))throw new Error(\"'\"+rr(t)+\"' module can't import itself\");i=X().compileNgModule(P_,\"ng:///\"+t.name+\"/ɵmod.js\",{type:t,bootstrap:je(n.bootstrap||A_).map(z),declarations:e.map(z),imports:je(n.imports||A_).map(z).map(K_),exports:je(n.exports||A_).map(z).map(K_),emitInline:!0,schemas:n.schemas?je(n.schemas):null,id:n.id||null})}return i}});var o=null;Object.defineProperty(t,R,{get:function(){if(null===o){ngDevMode&&V_(t,r);var e={name:t.name,type:t,deps:Qu(t),providers:n.providers||A_,imports:[(n.imports||A_).map(z),(n.exports||A_).map(z)]};o=X().compileInjector(P_,\"ng:///\"+t.name+\"/ɵinj.js\",e)}return o},configurable:!!ngDevMode})}function V_(i,t,e){if(!q_.get(i)){var n;if(q_.set(i,!0),i=z(i),e){if(!(n=mt(i)))throw new Error(\"Unexpected value '\"+i.name+\"' imported by the module '\"+e.name+\"'. Please add an @NgModule annotation.\")}else n=mt(i,!0);var o=[],r=ur(n.declarations),a=ur(n.imports);je(a).map(B_).forEach(function(e){p(e,i),V_(e,!1,i)});var s=ur(n.exports);r.forEach(function(e){pt(e=z(e))||dt(e)||ht(e)||o.push(\"Unexpected value '\"+rr(e)+\"' declared by the module '\"+rr(i)+\"'. Please add a @Pipe/@Directive/@Component annotation.\")}),r.forEach(function(e){var t=dt(e=z(e));!pt(e)&&t&&0==t.selectors.length&&o.push(\"Directive \"+rr(e)+\" has no selector, please add it!\")});var l=O(r.map(z),je(a.map(H_)).map(z));s.forEach(function(e){var t=(pt(e=z(e))?\"component\":dt(e)&&\"directive\")||ht(e)&&\"pipe\";t&&-1===l.lastIndexOf(e)&&o.push(\"Can't export \"+t+\" \"+rr(e)+\" from \"+rr(i)+\" as it was neither declared nor imported!\")}),r.forEach(function(e){return function(e,t){e=z(e);var n=z_.get(e);if(n&&n!==i){if(!t){var r=[n,i].map(rr).sort();o.push(\"Type \"+rr(e)+\" is part of the declarations of 2 modules: \"+r[0]+\" and \"+r[1]+\"! Please consider moving \"+rr(e)+\" to a higher module that imports \"+r[0]+\" and \"+r[1]+\". You can also create a new NgModule that exports and includes \"+rr(e)+\" then import that NgModule in \"+r[0]+\" and \"+r[1]+\".\")}}else z_.set(e,i)}(e,t)}),r.forEach(function(e){if(pt(e=z(e))){var t=U_(e,\"Component\");t&&t.entryComponents&&Fe(t.entryComponents,c)}});var u=U_(i,\"NgModule\");if(u&&(u.imports&&je(u.imports).map(B_).forEach(function(e){p(e,i),V_(e,!1,i)}),u.bootstrap&&Fe(u.bootstrap,function(e){pt(e=z(e))||o.push(rr(e)+\" cannot be used as an entry component.\")}),u.bootstrap&&Fe(u.bootstrap,c),u.entryComponents&&Fe(u.entryComponents,c)),o.length)throw new Error(o.join(\"\\n\"))}function c(e){e=z(e),z_.get(e)||o.push(\"Component \"+rr(e)+\" is not part of any NgModule or the module has not been imported into your module.\")}function p(e,t){if(pt(e=z(e))||dt(e))throw new Error(\"Unexpected directive '\"+e.name+\"' imported by the module '\"+t.name+\"'. Please add an @NgModule annotation.\");if(ht(e))throw new Error(\"Unexpected pipe '\"+e.name+\"' imported by the module '\"+t.name+\"'. Please add an @NgModule annotation.\")}}function B_(e){return(e=z(e)).ngModule||e}function U_(e,t){var n=null;return r(e.__annotations__),r(e.decorators),n;function r(e){e&&e.forEach(i)}function i(e){if(!n)if(Object.getPrototypeOf(e).ngMetadataName==t)n=e;else if(e.type){Object.getPrototypeOf(e.type).ngMetadataName==t&&(n=e.args[0])}}}var z_=new Map,q_=new Map;function H_(e){return O(je(ur(mt(e=z(e),!0).exports).map(function(e){return mt(e)?(V_(e,!1),H_(e)):e})))}function W_(t,e){var n=je(e.declarations||A_),r=Y_(t);n.forEach(function(e){e.hasOwnProperty($)?G_(pt(e),r):e.hasOwnProperty(J)||e.hasOwnProperty(ee)||(e.ngSelectorScope=t)})}function G_(e,t){e.directiveDefs=function(){return Array.from(t.compilation.directives).map(function(e){return e.hasOwnProperty($)?pt(e):dt(e)}).filter(function(e){return!!e})},e.pipeDefs=function(){return Array.from(t.compilation.pipes).map(function(e){return ht(e)})},e.schemas=t.schemas,e.tView=null}function Y_(e,r){if(!Z_(e))throw new Error(e.name+\" does not have a module def (ɵmod property)\");var t=mt(e);if(null!==t.transitiveCompileScopes)return t.transitiveCompileScopes;var i={schemas:t.schemas||null,compilation:{directives:new Set,pipes:new Set},exported:{directives:new Set,pipes:new Set}};return ur(t.declarations).forEach(function(e){ht(e)?i.compilation.pipes.add(e):i.compilation.directives.add(e)}),ur(t.imports).forEach(function(e){var t=e;if(!Z_(t))throw new Error(\"Importing \"+t.name+\" which does not have a ɵmod property\");r&&r(t);var n=Y_(t,r);n.exported.directives.forEach(function(e){return i.compilation.directives.add(e)}),n.exported.pipes.forEach(function(e){return i.compilation.pipes.add(e)})}),ur(t.exports).forEach(function(e){var t=e;if(Z_(t)){var n=Y_(t,r);n.exported.directives.forEach(function(e){i.compilation.directives.add(e),i.exported.directives.add(e)}),n.exported.pipes.forEach(function(e){i.compilation.pipes.add(e),i.exported.pipes.add(e)})}else ht(t)?i.exported.pipes.add(t):i.exported.directives.add(t)}),t.transitiveCompileScopes=i}function K_(e){return function(e){return void 0!==e.ngModule}(e)?e.ngModule:e}function Z_(e){return!!mt(e)}function Q_(o,a){\"undefined\"!=typeof ngDevMode&&!ngDevMode||Xe();var s=null;!function(e,t){yp(t)&&(mp.set(e,t),vp.add(e))}(o,a),J_(o,a),Object.defineProperty(o,$,{get:function(){if(null===s){var e=X();if(yp(a)){var t=[\"Component '\"+o.name+\"' is not resolved:\"];throw a.templateUrl&&t.push(\" - templateUrl: \"+a.templateUrl),a.styleUrls&&a.styleUrls.length&&t.push(\" - styleUrls: \"+JSON.stringify(a.styleUrls)),t.push(\"Did you run and wait for 'resolveComponentResources()'?\"),new Error(t.join(\"\\n\"))}var n=a.templateUrl||\"ng:///\"+o.name+\"/template.html\",r=l(l({},eb(o,a)),{typeSourceSpan:e.createParseSourceSpan(\"Component\",o.name,n),template:a.template||\"\",preserveWhitespaces:a.preserveWhitespaces||!1,styles:a.styles||Je,animations:a.animations,directives:[],changeDetection:a.changeDetection,pipes:new Map,encapsulation:a.encapsulation||N.ViewEncapsulation.Emulated,interpolation:a.interpolation,viewProviders:a.viewProviders||null});if(r.usesInheritance&&tb(o),s=e.compileComponent(P_,n,r),N_(),function(e){return void 0!==e.ngSelectorScope}(o)){var i=Y_(o.ngSelectorScope);G_(s,i)}}return s},configurable:!!ngDevMode})}function X_(t,n){var r=null;J_(t,n||{}),Object.defineProperty(t,J,{get:function(){if(null===r){var e=$_(t,n||{});r=X().compileDirective(P_,e.sourceMapUrl,e.metadata)}return r},configurable:!!ngDevMode})}function $_(e,t){var n=e&&e.name,r=\"ng:///\"+n+\"/ɵdir.js\",i=X(),o=eb(e,t);return o.typeSourceSpan=i.createParseSourceSpan(\"Directive\",n,r),o.usesInheritance&&tb(e),{metadata:o,sourceMapUrl:r}}function J_(t,n){var r=null;Object.defineProperty(t,ie,{get:function(){if(null===r){var e=$_(t,n);r=X().compileFactory(P_,\"ng:///\"+t.name+\"/ɵfac.js\",l(l({},e.metadata),{injectFn:\"directiveInject\",isPipe:!1}))}return r},configurable:!!ngDevMode})}function eb(e,t){var n=Zu().ownPropMetadata(e);return{name:e.name,type:e,typeArgumentCount:0,selector:t.selector,deps:Qu(e),host:t.host||$e,propMetadata:n,inputs:t.inputs||Je,outputs:t.outputs||Je,queries:ob(e,n,ab),lifecycle:{usesOnChanges:e.prototype.hasOwnProperty(\"ngOnChanges\")},typeSourceSpan:null,usesInheritance:!function(e){return Object.getPrototypeOf(e.prototype)===Object.prototype}(e),exportAs:function(e){return void 0!==e?e.split(\",\").map(function(e){return e.trim()}):null}(t.exportAs),providers:t.providers||null,viewQueries:ob(e,n,sb)}}function tb(e){for(var t=Object.prototype,n=Object.getPrototypeOf(e);n&&n!==t;){if(!dt(n)&&!pt(n)&&!n[re]){var r=rb(n);r&&nb(n,r)}n=Object.getPrototypeOf(n)}}function nb(n,r){var i=null;Object.defineProperty(n,re,{get:function(){if(null===i){var e=\"ng://\"+(n&&n.name)+\"/ngBaseDef.js\",t=X();i=t.compileBase(P_,e,r)}return i},configurable:!!ngDevMode})}function rb(e){function t(n){o[n].forEach(function(e){var t=e.ngMetadataName;\"Input\"===t?(r=r||{})[n]=e.bindingPropertyName?[e.bindingPropertyName,n]:n:\"Output\"===t?(i=i||{})[n]=e.bindingPropertyName||n:\"HostBinding\"!==t&&\"HostListener\"!==t||(s=!0)})}var r,i,o=Zu().ownPropMetadata(e),n=ob(e,o,sb),a=ob(e,o,ab),s=!1;for(var l in o)t(l);return r||i||n.length||a.length||s?{name:e.name,type:e,inputs:r,outputs:i,viewQueries:n,queries:a,propMetadata:o}:null}function ib(e){return\"string\"==typeof e?function(e){return e.split(\",\").map(function(e){return e.trim()})}(e):z(e)}function ob(r,e,i){function t(t){if(e.hasOwnProperty(t)){var n=e[t];n.forEach(function(e){if(i(e)){if(!e.selector)throw new Error(\"Can't construct a query for the property \\\"\"+t+'\" of \"'+rr(r)+\"\\\" since the query selector wasn't defined.\");if(n.some(lb))throw new Error(\"Cannot combine @Input decorators with query decorators\");o.push(function(e,t){return{propertyName:e,predicate:ib(t.selector),descendants:t.descendants,first:t.first,read:t.read?t.read:null,static:!!t.static}}(t,e))}})}}var o=[];for(var n in e)t(n);return o}function ab(e){var t=e.ngMetadataName;return\"ContentChild\"===t||\"ContentChildren\"===t}function sb(e){var t=e.ngMetadataName;return\"ViewChild\"===t||\"ViewChildren\"===t}function lb(e){return\"Input\"===e.ngMetadataName}function ub(t,n){var r=null,i=null;Object.defineProperty(t,ie,{get:function(){if(null===i){var e=cb(t,n);i=X().compileFactory(P_,\"ng:///\"+e.name+\"/ɵfac.js\",l(l({},e),{injectFn:\"directiveInject\",isPipe:!0}))}return i},configurable:!!ngDevMode}),Object.defineProperty(t,ee,{get:function(){if(null===r){var e=cb(t,n);r=X().compilePipe(P_,\"ng:///\"+e.name+\"/ɵpipe.js\",e)}return r},configurable:!!ngDevMode})}function cb(e,t){return{type:e,typeArgumentCount:0,name:e.name,deps:Qu(e),pipeName:t.name,pure:void 0===t.pure||t.pure}}var pb=i(\"Directive\",function(e){return void 0===e&&(e={}),e},void 0,void 0,function(e,t){return xb(e,t)}),db=i(\"Component\",function(e){return void 0===e&&(e={}),l({changeDetection:N.ChangeDetectionStrategy.Default},e)},pb,void 0,function(e,t){return wb(e,t)}),hb=i(\"Pipe\",function(e){return l({pure:!0},e)},void 0,void 0,function(e,t){return Cb(e,t)}),fb=a(\"Input\",function(e){return{bindingPropertyName:e}}),mb=a(\"Output\",function(e){return{bindingPropertyName:e}}),vb=a(\"HostBinding\",function(e){return{hostPropertyName:e}}),yb=a(\"HostListener\",function(e,t){return{eventName:e,args:t}}),gb=Q_,_b=X_,bb=ub,wb=Bf,xb=Bf,Cb=Bf,Sb=i(\"NgModule\",function(e){return e},void 0,void 0,function(e,t){return Ob(e,t)});var Eb=F_,Ob=function(e,t){var n=t&&t.imports||[];t&&t.exports&&(n=O(n,[t.exports])),e.ɵinj=I({factory:ic(e,{useClass:e}),providers:t&&t.providers,imports:n})},kb=new ae(\"Application Initializer\"),Db=(Tb.prototype.runInitializers=function(){var t=this;if(!this.initialized){var e=[],n=function(){t.done=!0,t.resolve()};if(this.appInits)for(var r=0;r<this.appInits.length;r++){var i=this.appInits[r]();Vd(i)&&e.push(i)}Promise.all(e).then(function(){n()}).catch(function(e){t.reject(e)}),0===e.length&&n(),this.initialized=!0}},Tb=e([oc(),t(0,_(kb)),t(0,b()),n(\"design:paramtypes\",[Array])],Tb));function Tb(e){var n=this;this.appInits=e,this.initialized=!1,this.done=!1,this.donePromise=new Promise(function(e,t){n.resolve=e,n.reject=t})}var Ib=new ae(\"AppId\");function Pb(){return\"\"+Mb()+Mb()+Mb()}var Ab={provide:Ib,useFactory:Pb,deps:[]};function Mb(){return String.fromCharCode(97+Math.floor(25*Math.random()))}var Rb=new ae(\"Platform Initializer\"),Nb=new ae(\"Platform ID\"),jb=new ae(\"appBootstrapListener\"),Fb=new ae(\"Application Packages Root URL\"),Lb=(Vb.prototype.log=function(e){console.log(e)},Vb.prototype.warn=function(e){console.warn(e)},Vb=e([oc()],Vb));function Vb(){}var Bb,Ub=new ae(\"LocaleId\"),zb=new ae(\"Translations\"),qb=new ae(\"TranslationsFormat\");(Bb=N.MissingTranslationStrategy||(N.MissingTranslationStrategy={}))[Bb.Error=0]=\"Error\",Bb[Bb.Warning=1]=\"Warning\";Bb[Bb.Ignore=2]=\"Ignore\",Bb[Bb.Ignore=2]=\"Ignore\";var Hb=function(e,t){this.ngModuleFactory=e,this.componentFactories=t};function Wb(){throw new Error(\"Runtime compiler is not loaded\")}function Gb(e){return new Rg(e)}function Yb(e){var t=Gb(e),n=ur(mt(e).declarations).reduce(function(e,t){var n=pt(t);return n&&e.push(new Sy(n)),e},[]);return new Hb(t,n)}var Kb=Wb,Zb=Wb,Qb=Wb,Xb=Wb,$b=(Jb.prototype.clearCache=function(){},Jb.prototype.clearCacheFor=function(e){},Jb.prototype.getModuleId=function(e){},Jb=e([oc()],Jb));function Jb(){this.compileModuleSync=Kb,this.compileModuleAsync=Zb,this.compileModuleAndAllComponentsSync=Qb,this.compileModuleAndAllComponentsAsync=Xb}function ew(){}var tw,nw,rw=new ae(\"compilerOptions\");function iw(){var e=Q.wtf;return!(!e||!(tw=e.trace))&&(nw=tw.events,!0)}function ow(e,t){return void 0===t&&(t=null),nw.createScope(e,t)}function aw(e,t){return tw.leaveScope(e,t),t}function sw(e,t){return tw.beginTimeRange(e,t)}function lw(e){tw.endTimeRange(e)}var uw=iw();function cw(e,t){return null}var pw=uw?ow:function(e,t){return cw},dw=uw?aw:function(e,t){return t},hw=uw?sw:function(e,t){return null},fw=uw?lw:function(e){return null},mw=Promise.resolve(0);function vw(e){\"undefined\"==typeof Zone?mw.then(function(){e&&e.apply(null,null)}):Zone.current.scheduleMicroTask(\"scheduleMicrotask\",e)}var yw=(gw.isInAngularZone=function(){return!0===Zone.current.get(\"isAngularZone\")},gw.assertInAngularZone=function(){if(!gw.isInAngularZone())throw new Error(\"Expected to be in Angular Zone, but it is not!\")},gw.assertNotInAngularZone=function(){if(gw.isInAngularZone())throw new Error(\"Expected to not be in Angular Zone, but it is!\")},gw.prototype.run=function(e,t,n){return this._inner.run(e,t,n)},gw.prototype.runTask=function(e,t,n,r){var i=this._inner,o=i.scheduleEventTask(\"NgZoneEvent: \"+r,e,bw,_w,_w);try{return i.runTask(o,t,n)}finally{i.cancelTask(o)}},gw.prototype.runGuarded=function(e,t,n){return this._inner.runGuarded(e,t,n)},gw.prototype.runOutsideAngular=function(e){return this._outer.run(e)},gw);function gw(e){var t=e.enableLongStackTrace,n=void 0!==t&&t;if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new t_(!1),this.onMicrotaskEmpty=new t_(!1),this.onStable=new t_(!1),this.onError=new t_(!1),\"undefined\"==typeof Zone)throw new Error(\"In this configuration Angular requires Zone.js\");Zone.assertZonePatched();var r=this;r._nesting=0,r._outer=r._inner=Zone.current,Zone.wtfZoneSpec&&(r._inner=r._inner.fork(Zone.wtfZoneSpec)),Zone.TaskTrackingZoneSpec&&(r._inner=r._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(r._inner=r._inner.fork(Zone.longStackTraceZoneSpec)),function(s){s._inner=s._inner.fork({name:\"angular\",properties:{isAngularZone:!0},onInvokeTask:function(e,t,n,r,i,o){try{return xw(s),e.invokeTask(n,r,i,o)}finally{Cw(s)}},onInvoke:function(e,t,n,r,i,o,a){try{return xw(s),e.invoke(n,r,i,o,a)}finally{Cw(s)}},onHasTask:function(e,t,n,r){e.hasTask(n,r),t===n&&(\"microTask\"==r.change?(s.hasPendingMicrotasks=r.microTask,ww(s)):\"macroTask\"==r.change&&(s.hasPendingMacrotasks=r.macroTask))},onHandleError:function(e,t,n,r){return e.handleError(n,r),s.runOutsideAngular(function(){return s.onError.emit(r)}),!1}})}(r)}function _w(){}var bw={};function ww(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(function(){return e.onStable.emit(null)})}finally{e.isStable=!0}}}function xw(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Cw(e){e._nesting--,ww(e)}var Sw=(Ew.prototype.run=function(e,t,n){return e.apply(t,n)},Ew.prototype.runGuarded=function(e,t,n){return e.apply(t,n)},Ew.prototype.runOutsideAngular=function(e){return e()},Ew.prototype.runTask=function(e,t,n,r){return e.apply(t,n)},Ew);function Ew(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new t_,this.onMicrotaskEmpty=new t_,this.onStable=new t_,this.onError=new t_}var Ow=(kw.prototype._watchAngularEvents=function(){var e=this;this._ngZone.onUnstable.subscribe({next:function(){e._didWork=!0,e._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.subscribe({next:function(){yw.assertNotInAngularZone(),vw(function(){e._isZoneStable=!0,e._runCallbacksIfReady()})}})})},kw.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},kw.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error(\"pending async requests below zero\");return this._runCallbacksIfReady(),this._pendingCount},kw.prototype.isStable=function(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks},kw.prototype._runCallbacksIfReady=function(){var t=this;if(this.isStable())vw(function(){for(;0!==t._callbacks.length;){var e=t._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb(t._didWork)}t._didWork=!1});else{var n=this.getPendingTasks();this._callbacks=this._callbacks.filter(function(e){return!e.updateCb||!e.updateCb(n)||(clearTimeout(e.timeoutId),!1)}),this._didWork=!0}},kw.prototype.getPendingTasks=function(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(function(e){return{source:e.source,creationLocation:e.creationLocation,data:e.data}}):[]},kw.prototype.addCallback=function(e,t,n){var r=this,i=-1;t&&0<t&&(i=setTimeout(function(){r._callbacks=r._callbacks.filter(function(e){return e.timeoutId!==i}),e(r._didWork,r.getPendingTasks())},t)),this._callbacks.push({doneCb:e,timeoutId:i,updateCb:n})},kw.prototype.whenStable=function(e,t,n){if(n&&!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?');this.addCallback(e,t,n),this._runCallbacksIfReady()},kw.prototype.getPendingRequestCount=function(){return this._pendingCount},kw.prototype.findProviders=function(e,t,n){return[]},kw=e([oc(),n(\"design:paramtypes\",[yw])],kw));function kw(e){var t=this;this._ngZone=e,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),e.run(function(){t.taskTrackingZone=\"undefined\"==typeof Zone?null:Zone.current.get(\"TaskTrackingZone\")})}var Dw=(Tw.prototype.registerApplication=function(e,t){this._applications.set(e,t)},Tw.prototype.unregisterApplication=function(e){this._applications.delete(e)},Tw.prototype.unregisterAllApplications=function(){this._applications.clear()},Tw.prototype.getTestability=function(e){return this._applications.get(e)||null},Tw.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},Tw.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},Tw.prototype.findTestabilityInTree=function(e,t){return void 0===t&&(t=!0),Aw.findTestabilityInTree(this,e,t)},Tw=e([oc(),n(\"design:paramtypes\",[])],Tw));function Tw(){this._applications=new Map,Aw.addToWindow(this)}function Iw(){}var Pw,Aw=new(Iw.prototype.addToWindow=function(e){},Iw.prototype.findTestabilityInTree=function(e,t,n){return null},Iw),Mw=function(e,t,n){return e.get(ew).createCompiler([t]).compileModuleAsync(n)};var Rw=function(){},Nw=function(e){return e instanceof Lf};function jw(e,t){this.name=e,this.token=t}var Fw=new ae(\"AllowMultipleToken\");function Lw(e){if(Pw&&!Pw.destroyed&&!Pw.injector.get(Fw,!1))throw new Error(\"There can be only one platform. Destroy the previous one to create a new one.\");Rw(),Pw=e.get(zw);var t=e.get(Rb,null);return t&&t.forEach(function(e){return e()}),Pw}function Vw(r,e,i){void 0===i&&(i=[]);var o=\"Platform: \"+e,a=new ae(o);return function(e){void 0===e&&(e=[]);var t=Uw();if(!t||t.injector.get(Fw,!1))if(r)r(i.concat(e).concat({provide:a,useValue:!0}));else{var n=i.concat(e).concat({provide:a,useValue:!0},{provide:lc,useValue:\"platform\"});Lw(Cc.create({providers:n,name:o}))}return Bw(a)}}function Bw(e){var t=Uw();if(!t)throw new Error(\"No platform exists!\");if(!t.injector.get(e,null))throw new Error(\"A platform with a different configuration has been created. Please destroy it first.\");return t}function Uw(){return Pw&&!Pw.destroyed?Pw:null}var zw=(qw.prototype.bootstrapModuleFactory=function(r,e){var i=this,o=function(e){return\"noop\"===e?new Sw:(\"zone.js\"===e?void 0:e)||new yw({enableLongStackTrace:ho()})}(e?e.ngZone:void 0),a=[{provide:yw,useValue:o}];return o.run(function(){var e=Cc.create({providers:a,parent:i.injector,name:r.moduleType.name}),t=r.create(e),n=t.injector.get(Bi,null);if(!n)throw new Error(\"No ErrorHandler. Is platform module (BrowserModule) included?\");return t.onDestroy(function(){return Kw(i._modules,t)}),o.runOutsideAngular(function(){return o.onError.subscribe({next:function(e){n.handleError(e)}})}),function(t,n,e){try{var r=e();return Vd(r)?r.catch(function(e){throw n.runOutsideAngular(function(){return t.handleError(e)}),e}):r}catch(e){throw n.runOutsideAngular(function(){return t.handleError(e)}),e}}(n,o,function(){var e=t.injector.get(Db);return e.runInitializers(),e.donePromise.then(function(){return i._moduleDoBootstrap(t),t})})})},qw.prototype.bootstrapModule=function(e,t){var n=this;void 0===t&&(t=[]);var r=Hw({},t);return Mw(this.injector,r,e).then(function(e){return n.bootstrapModuleFactory(e,r)})},qw.prototype._moduleDoBootstrap=function(e){var t=e.injector.get(Gw);if(0<e._bootstrapComponents.length)e._bootstrapComponents.forEach(function(e){return t.bootstrap(e)});else{if(!e.instance.ngDoBootstrap)throw new Error(\"The module \"+V(e.instance.constructor)+' was bootstrapped, but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. Please define one of these.');e.instance.ngDoBootstrap(t)}this._modules.push(e)},qw.prototype.onDestroy=function(e){this._destroyListeners.push(e)},Object.defineProperty(qw.prototype,\"injector\",{get:function(){return this._injector},enumerable:!0,configurable:!0}),qw.prototype.destroy=function(){if(this._destroyed)throw new Error(\"The platform has already been destroyed!\");this._modules.slice().forEach(function(e){return e.destroy()}),this._destroyListeners.forEach(function(e){return e()}),this._destroyed=!0},Object.defineProperty(qw.prototype,\"destroyed\",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),qw=e([oc(),n(\"design:paramtypes\",[Cc])],qw));function qw(e){this._injector=e,this._modules=[],this._destroyListeners=[],this._destroyed=!1}function Hw(e,t){return e=Array.isArray(t)?t.reduce(Hw,e):l(l({},e),t)}var Ww,Gw=((Ww=Yw).prototype.bootstrap=function(e,t){var n,r=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.\");n=e instanceof Df?e:this._componentFactoryResolver.resolveComponentFactory(e),this.componentTypes.push(n.componentType);var i=Nw(n)?void 0:this._injector.get(Re),o=t||n.selector,a=n.create(Cc.NULL,[],o,i);a.onDestroy(function(){r._unloadComponent(a)});var s=a.injector.get(Ow,null);return s&&a.injector.get(Dw).registerApplication(a.location.nativeElement,s),this._loadComponent(a),ho()&&this._console.log(\"Angular is running in the development mode. Call enableProdMode() to enable the production mode.\"),a},Yw.prototype.tick=function(){var t,e,n,r,i=this;if(this._runningTick)throw new Error(\"ApplicationRef.tick is called recursively\");var o=Ww._tickScope();try{this._runningTick=!0;try{for(var a=y(this._views),s=a.next();!s.done;s=a.next())s.value.detectChanges()}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}if(this._enforceNoNewChanges)try{for(var l=y(this._views),u=l.next();!u.done;u=l.next())u.value.checkNoChanges()}catch(e){n={error:e}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}}catch(e){this._zone.runOutsideAngular(function(){return i._exceptionHandler.handleError(e)})}finally{this._runningTick=!1,dw(o)}},Yw.prototype.attachView=function(e){var t=e;this._views.push(t),t.attachToAppRef(this)},Yw.prototype.detachView=function(e){var t=e;Kw(this._views,t),t.detachFromAppRef()},Yw.prototype._loadComponent=function(t){this.attachView(t.hostView),this.tick(),this.components.push(t),this._injector.get(jb,[]).concat(this._bootstrapListeners).forEach(function(e){return e(t)})},Yw.prototype._unloadComponent=function(e){this.detachView(e.hostView),Kw(this.components,e)},Yw.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(e){return e.destroy()})},Object.defineProperty(Yw.prototype,\"viewCount\",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),Yw._tickScope=pw(\"ApplicationRef#tick()\"),Yw=Ww=e([oc(),n(\"design:paramtypes\",[yw,Lb,Cc,Bi,Mf,Db])],Yw));function Yw(e,t,n,r,i,o){var a=this;this._zone=e,this._console=t,this._injector=n,this._exceptionHandler=r,this._componentFactoryResolver=i,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=ho(),this._zone.onMicrotaskEmpty.subscribe({next:function(){a._zone.run(function(){a.tick()})}});var s=new u.Observable(function(e){a._stable=a._zone.isStable&&!a._zone.hasPendingMacrotasks&&!a._zone.hasPendingMicrotasks,a._zone.runOutsideAngular(function(){e.next(a._stable),e.complete()})}),l=new u.Observable(function(e){var t;a._zone.runOutsideAngular(function(){t=a._zone.onStable.subscribe(function(){yw.assertNotInAngularZone(),vw(function(){a._stable||a._zone.hasPendingMacrotasks||a._zone.hasPendingMicrotasks||(a._stable=!0,e.next(!0))})})});var n=a._zone.onUnstable.subscribe(function(){yw.assertInAngularZone(),a._stable&&(a._stable=!1,a._zone.runOutsideAngular(function(){e.next(!1)}))});return function(){t.unsubscribe(),n.unsubscribe()}});this.isStable=u.merge(s,l.pipe(c.share()))}function Kw(e,t){var n=e.indexOf(t);-1<n&&e.splice(n,1)}function Zw(){}function Qw(e){var t=Dg(e);if(!t)throw $w(e);return t}var Xw=Qw;function $w(e){return new Error(\"No module with ID \"+e+\" loaded\")}function Jw(){}var ex={factoryPathPrefix:\"\",factoryPathSuffix:\".ngfactory\"},tx=(nx.prototype.load=function(e){return this._compiler instanceof $b?this.loadFactory(e):this.loadAndCompile(e)},nx.prototype.loadAndCompile=function(e){var t=this,n=j(e.split(\"#\"),2),r=n[0],i=n[1];return void 0===i&&(i=\"default\"),System.import(r).then(function(e){return e[i]}).then(function(e){return rx(e,r,i)}).then(function(e){return t._compiler.compileModuleAsync(e)})},nx.prototype.loadFactory=function(e){var t=j(e.split(\"#\"),2),n=t[0],r=t[1],i=\"NgFactory\";return void 0===r&&(r=\"default\",i=\"\"),System.import(this._config.factoryPathPrefix+n+this._config.factoryPathSuffix).then(function(e){return e[r+i]}).then(function(e){return rx(e,n,r)})},nx=e([oc(),t(1,b()),n(\"design:paramtypes\",[$b,Jw])],nx));function nx(e,t){this._compiler=e,this._config=t||ex}function rx(e,t,n){if(!e)throw new Error(\"Cannot find '\"+n+\"' in '\"+t+\"'\");return e}var ix,ox=(p(ax,ix=Mu),ax);function ax(){return null!==ix&&ix.apply(this,arguments)||this}var sx,lx=(p(ux,sx=ox),ux);function ux(){return null!==sx&&sx.apply(this,arguments)||this}var cx=function(e,t){this.name=e,this.callback=t},px=(Object.defineProperty(dx.prototype,\"injector\",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(dx.prototype,\"componentInstance\",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(dx.prototype,\"context\",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(dx.prototype,\"references\",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(dx.prototype,\"providerTokens\",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),dx);function dx(e,t,n){this.listeners=[],this.parent=null,this._debugContext=n,this.nativeNode=e,t&&t instanceof fx&&t.addChild(this)}var hx,fx=(p(mx,hx=px),mx.prototype.addChild=function(e){e&&(this.childNodes.push(e),e.parent=this)},mx.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);-1!==t&&(e.parent=null,this.childNodes.splice(t,1))},mx.prototype.insertChildrenAfter=function(t,e){var n,r=this,i=this.childNodes.indexOf(t);-1!==i&&((n=this.childNodes).splice.apply(n,O([i+1,0],e)),e.forEach(function(e){e.parent&&e.parent.removeChild(e),t.parent=r}))},mx.prototype.insertBefore=function(e,t){var n=this.childNodes.indexOf(e);-1===n?this.addChild(t):(t.parent&&t.parent.removeChild(t),(t.parent=this).childNodes.splice(n,0,t))},mx.prototype.query=function(e){return this.queryAll(e)[0]||null},mx.prototype.queryAll=function(e){var t=[];return function t(e,n,r){e.childNodes.forEach(function(e){e instanceof fx&&(n(e)&&r.push(e),t(e,n,r))})}(this,e,t),t},mx.prototype.queryAllNodes=function(e){var t=[];return function t(e,n,r){e instanceof fx&&e.childNodes.forEach(function(e){n(e)&&r.push(e),e instanceof fx&&t(e,n,r)})}(this,e,t),t},Object.defineProperty(mx.prototype,\"children\",{get:function(){return this.childNodes.filter(function(e){return e instanceof mx})},enumerable:!0,configurable:!0}),mx.prototype.triggerEventHandler=function(t,n){this.listeners.forEach(function(e){e.name==t&&e.callback(n)})},mx);function mx(e,t,n){var r=hx.call(this,e,t,n)||this;return r.properties={},r.attributes={},r.classes={},r.styles={},r.childNodes=[],r.nativeElement=e,r}var vx=(Object.defineProperty(yx.prototype,\"parent\",{get:function(){var e=this.nativeNode.parentNode;return e?new _x(e):null},enumerable:!0,configurable:!0}),Object.defineProperty(yx.prototype,\"injector\",{get:function(){return Hh(this.nativeNode)},enumerable:!0,configurable:!0}),Object.defineProperty(yx.prototype,\"componentInstance\",{get:function(){var e=this.nativeNode;return e&&(Bh(e)||zh(e))},enumerable:!0,configurable:!0}),Object.defineProperty(yx.prototype,\"context\",{get:function(){return Bh(this.nativeNode)||Uh(this.nativeNode)},enumerable:!0,configurable:!0}),Object.defineProperty(yx.prototype,\"listeners\",{get:function(){return Qh(this.nativeNode).filter(Zh)},enumerable:!0,configurable:!0}),Object.defineProperty(yx.prototype,\"references\",{get:function(){return Yh(this.nativeNode)},enumerable:!0,configurable:!0}),Object.defineProperty(yx.prototype,\"providerTokens\",{get:function(){return function(e){var t=Gh(e,!1);if(null===t)return[];for(var n,r=t.lView[yt],i=r.data[t.nodeIndex],o=[],a=65535&i.providerIndexes,s=i.directiveEnd,l=a;l<s;l++){var u=r.data[l];void 0!==(n=u).type&&void 0!==n.template&&void 0!==n.declaredInputs&&(u=u.type),o.push(u)}return o}(this.nativeNode)},enumerable:!0,configurable:!0}),yx);function yx(e){this.nativeNode=e}var gx,_x=(p(bx,gx=vx),Object.defineProperty(bx.prototype,\"nativeElement\",{get:function(){return this.nativeNode.nodeType==Node.ELEMENT_NODE?this.nativeNode:null},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"name\",{get:function(){try{var e=Gh(this.nativeNode);return e.lView[yt].data[e.nodeIndex].tagName}catch(e){return this.nativeNode.nodeName}},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"properties\",{get:function(){var e=Gh(this.nativeNode,!1);if(null==e)return{};var t=e.lView,n=t[yt].data,r=function(e,t,n){var r={},i=e.propertyBindings;if(null!==i)for(var o=0;o<i.length;o++){var a=i[o],s=n[a].split(lr),l=s[0];if(1<s.length){for(var u=s[1],c=1;c<s.length-1;c++)u+=nr(t[a+c-1])+s[c+1];r[l]=u}else r[l]=t[a]}return r}(n[e.nodeIndex],t,n),i=function(e){var t,n,r=e.classes,i=\"\";try{for(var o=y(Object.keys(r)),a=o.next();!a.done;a=o.next()){var s=a.value;r[s]&&(i=i?i+\" \"+s:s)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return i}(this);return i&&(r.className=r.className?r.className+\" \"+i:i),r},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"attributes\",{get:function(){var e={},t=this.nativeElement;if(!t)return e;var n=Gh(t,!1);if(null==n)return{};var r=n.lView[yt].data[n.nodeIndex].attrs,i=[];if(r)for(var o=0;o<r.length;){var a=r[o];if(\"string\"!=typeof a)break;var s=r[o+1];e[a]=s,i.push(a.toLowerCase()),o+=2}var l=t.attributes;for(o=0;o<l.length;o++){var u=l[o];-1===i.indexOf(u.name)&&(e[u.name]=u.value)}return e},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"styles\",{get:function(){return this.nativeElement&&this.nativeElement.style?this.nativeElement.style:{}},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"classes\",{get:function(){if(!this._classesProxy){var r=this.nativeElement;this._classesProxy=function(e){var t=Q;if(!t.Proxy)throw new Error(\"Proxy is not supported in this browser\");return new t.Proxy({},e)}({get:function(e,t){return!!r&&r.classList.contains(t)},set:function(e,t,n){return!!r&&r.classList.toggle(t,!!n)},ownKeys:function(){return r?Array.from(r.classList).sort():[]},getOwnPropertyDescriptor:function(e){return{enumerable:!0,configurable:!0}}})}return this._classesProxy},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"childNodes\",{get:function(){for(var e=this.nativeNode.childNodes,t=[],n=0;n<e.length;n++){var r=e[n];t.push(kx(r))}return t},enumerable:!0,configurable:!0}),Object.defineProperty(bx.prototype,\"children\",{get:function(){var e=this.nativeElement;if(!e)return[];for(var t=e.children,n=[],r=0;r<t.length;r++){var i=t[r];n.push(kx(i))}return n},enumerable:!0,configurable:!0}),bx.prototype.query=function(e){return this.queryAll(e)[0]||null},bx.prototype.queryAll=function(e){var t=[];return wx(this,e,t,!0),t},bx.prototype.queryAllNodes=function(e){var t=[];return wx(this,e,t,!1),t},bx.prototype.triggerEventHandler=function(n,r){var e=this.nativeNode,i=[];this.listeners.forEach(function(e){if(e.name===n){var t=e.callback;t(r),i.push(t)}}),\"function\"==typeof e.eventListeners&&e.eventListeners(n).forEach(function(e){var t=e(Function);return-1===i.indexOf(t)&&t(r)})},bx);function bx(e){return ngDevMode&&Ke(e),gx.call(this,e)||this}function wx(e,t,n,r){var i=Gh(e.nativeNode);xx(i.lView[yt].data[i.nodeIndex],i.lView,t,n,r,e.nativeNode)}function xx(e,t,n,r,i,o){var a,s,l=ti(e,t);if(3===e.type||4===e.type){if(Sx(l,n,r,i,o),Wt(e))(p=ii(e.index,t))&&p[yt].firstChild&&xx(p[yt].firstChild,p,n,r,i,o);else e.child&&xx(e.child,t,n,r,i,o),l&&function e(t,n,r,i){var o=t.childNodes;var a=o.length;for(var s=0;s<a;s++){var l=o[s],u=Dx(l);u&&(i&&u instanceof _x&&n(u)&&-1===r.indexOf(u)?r.push(u):!i&&n(u)&&-1===r.indexOf(u)&&r.push(u),e(l,n,r,i))}}(l,n,r,i);var u=t[e.index];qt(u)&&Cx(u,n,r,i,o)}else if(0===e.type){var c=t[e.index];Sx(c[Vt],n,r,i,o),Cx(c,n,r,i,o)}else if(1===e.type){var p,d=(p=pi(t))[xt].projection[e.projection];if(Array.isArray(d))try{for(var h=y(d),f=h.next();!f.done;f=h.next()){Sx(f.value,n,r,i,o)}}catch(e){a={error:e}}finally{try{f&&!f.done&&(s=h.return)&&s.call(h)}finally{if(a)throw a.error}}else if(d){var m,v=p[_t];xx(m=v[yt].data[d.index],v,n,r,i,o)}}else e.child&&xx(e.child,t,n,r,i,o);o!==l&&(m=4&e.flags?e.projectionNext:e.next)&&xx(m,t,n,r,i,o)}function Cx(e,t,n,r,i){for(var o=Ut;o<e.length;o++){var a=e[o];xx(a[yt].node,a,t,n,r,i)}}function Sx(e,t,n,r,i){if(i!==e){var o=Dx(e);if(!o)return;r&&o instanceof _x&&t(o)&&-1===n.indexOf(o)?n.push(o):!r&&t(o)&&-1===n.indexOf(o)&&n.push(o)}}var Ex=new Map;var Ox=\"__ng_debug__\";function kx(e){return e instanceof Node?(e.hasOwnProperty(Ox)||(e[Ox]=e.nodeType==Node.ELEMENT_NODE?new _x(e):new vx(e)),e[Ox]):null}var Dx=function(e){return Ex.get(e)||null};function Tx(e){Ex.set(e.nativeNode,e)}var Ix=px,Px=fx,Ax=Vw(null,\"core\",[{provide:Nb,useValue:\"unknown\"},{provide:zw,deps:[Cc]},{provide:Dw,deps:[]},{provide:Lb,deps:[]}]);function Mx(){return xm}function Rx(){return Cm}function Nx(e){return e||(ngI18nClosureMode&&\"undefined\"!=typeof goog&&\"en\"!==goog.LOCALE?goog.LOCALE:Ny)}var jx=[{provide:Gw,useClass:Gw,deps:[yw,Lb,Cc,Bi,Mf,Db]},{provide:xy,deps:[yw],useFactory:Fx},{provide:Db,useClass:Db,deps:[[new b,kb]]},{provide:$b,useClass:$b,deps:[]},Ab,{provide:ym,useFactory:Mx,deps:[]},{provide:_m,useFactory:Rx,deps:[]},{provide:Ub,useFactory:Nx,deps:[[new _(Ub),new b,new x]]}];function Fx(e){var t=[];return e.onStable.subscribe(function(){for(;t.length;)t.pop()()}),function(e){t.push(e)}}var Lx,Vx,Bx=Ux=e([Sb({providers:jx}),n(\"design:paramtypes\",[Gw])],Ux);function Ux(e){}function zx(e,t,n){var r,i=n.element,o=e.root.selectorOrNode,a=e.renderer;if(e.parent||!o){r=i.name?a.createElement(i.name,i.ns):a.createComment(\"\");var s=uv(e,t,n);s&&a.appendChild(s,r)}else{var l=!!i.componentRendererType&&i.componentRendererType.encapsulation===N.ViewEncapsulation.ShadowDom;r=a.selectRootElement(o,l)}if(i.attrs)for(var u=0;u<i.attrs.length;u++){var c=j(i.attrs[u],3),p=c[0],d=c[1],h=c[2];a.setAttribute(r,d,h,p)}return r}function qx(e,t,n,r){for(var i=0;i<n.outputs.length;i++){var o=n.outputs[i],a=Hx(e,n.nodeIndex,(c=o.target,p=o.eventName,c?c+\":\"+p:p)),s=o.target,l=e;\"component\"===o.target&&(s=null,l=t);var u=l.renderer.listen(s||r,o.eventName,a);e.disposables[n.outputIndex+i]=u}var c,p}function Hx(t,n,r){return function(e){return tv(t,n,r,e)}}function Wx(e,t,n,r){if(!Xm(e,t,n,r))return!1;var i=t.bindings[n],o=Lm(e,t.nodeIndex),a=o.renderElement,s=i.name;switch(15&i.flags){case 1:!function(e,t,n,r,i,o){var a=t.securityContext,s=a?e.root.sanitizer.sanitize(a,o):o;s=null!=s?s.toString():null;var l=e.renderer;null!=o?l.setAttribute(n,i,s,r):l.removeAttribute(n,i,r)}(e,i,a,i.ns,s,r);break;case 2:!function(e,t,n,r){var i=e.renderer;r?i.addClass(t,n):i.removeClass(t,n)}(e,a,s,r);break;case 4:!function(e,t,n,r,i){var o=e.root.sanitizer.sanitize(N.SecurityContext.STYLE,i);if(null!=o){o=o.toString();var a=t.suffix;null!=a&&(o+=a)}else o=null;var s=e.renderer;null!=o?s.setStyle(n,r,o):s.removeStyle(n,r)}(e,i,a,s,r);break;case 8:!function(e,t,n,r,i){var o=t.securityContext,a=o?e.root.sanitizer.sanitize(o,i):i;e.renderer.setProperty(n,r,a)}(33554432&t.flags&&32&i.flags?o.componentView:e,i,a,s,r)}return!0}function Gx(e){for(var t,n=e.def.nodeMatchedQueries;e.parent&&((t=e).parent&&!(32768&t.parentNodeDef.flags));){var r=e.parentNodeDef;e=e.parent;for(var i=r.nodeIndex+r.childCount,o=0;o<=i;o++){67108864&(a=e.def.nodes[o]).flags&&536870912&a.flags&&(a.query.filterId&n)===a.query.filterId&&Um(e,o).setDirty(),!(1&a.flags&&o+a.childCount<r.nodeIndex)&&67108864&a.childFlags&&536870912&a.childFlags||(o+=a.childCount)}}if(134217728&e.def.nodeFlags)for(o=0;o<e.def.nodes.length;o++){var a;134217728&(a=e.def.nodes[o]).flags&&536870912&a.flags&&Um(e,o).setDirty(),o+=a.childCount}}function Yx(e,t){var n=Um(e,t.nodeIndex);if(n.dirty){var r,i=void 0;if(67108864&t.flags){var o=t.parent.parent;i=Kx(e,o.nodeIndex,o.nodeIndex+o.childCount,t.query,[]),r=Vm(e,t.parent.nodeIndex).instance}else 134217728&t.flags&&(i=Kx(e,0,e.def.nodes.length-1,t.query,[]),r=e.component);n.reset(i);for(var a=t.query.bindings,s=!1,l=0;l<a.length;l++){var u=a[l],c=void 0;switch(u.bindingType){case 0:c=n.first;break;case 1:c=n,s=!0}r[u.propName]=c}s&&n.notifyOnChanges()}}function Kx(e,t,n,r,i){for(var o=t;o<=n;o++){var a=e.def.nodes[o],s=a.matchedQueries[r.id];if(null!=s&&i.push(Zx(e,a,s)),1&a.flags&&a.element.template&&(a.element.template.nodeMatchedQueries&r.filterId)===r.filterId){var l=Lm(e,o);if((a.childMatchedQueries&r.filterId)===r.filterId&&(Kx(e,o+1,o+a.childCount,r,i),o+=a.childCount),16777216&a.flags)for(var u=l.viewContainer._embeddedViews,c=0;c<u.length;c++){var p=u[c],d=nv(p);d&&d===l&&Kx(p,0,p.def.nodes.length-1,r,i)}var h=l.template._projectedViews;if(h)for(c=0;c<h.length;c++){var f=h[c];Kx(f,0,f.def.nodes.length-1,r,i)}}(a.childMatchedQueries&r.filterId)!==r.filterId&&(o+=a.childCount)}return i}function Zx(e,t,n){if(null!=n)switch(n){case 1:return Lm(e,t.nodeIndex).renderElement;case 0:return new Uf(Lm(e,t.nodeIndex).renderElement);case 2:return Lm(e,t.nodeIndex).template;case 3:return Lm(e,t.nodeIndex).viewContainer;case 4:return Vm(e,t.nodeIndex).instance}}function Qx(e,t,n){for(var r=[],i=0;i<n.length;i++){var o=n[i];r.push({flags:8,name:o,ns:null,nonMinifiedName:o,securityContext:null,suffix:null})}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:r,bindingFlags:_v(r),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function Xx(e,t,n){var r,i=e.renderer;r=i.createText(n.text.prefix);var o=uv(e,t,n);return o&&i.appendChild(o,r),{renderText:r}}function $x(e,t){return(null!=e?e.toString():\"\")+t.suffix}function Jx(e){return 0!=(1&e.flags)&&null===e.element.name}function eC(e,t,n){var r=t.element&&t.element.template;if(r){if(!r.lastRenderRootNode)throw new Error(\"Illegal State: Embedded templates without nodes are not allowed!\");if(r.lastRenderRootNode&&16777216&r.lastRenderRootNode.flags)throw new Error(\"Illegal State: Last root node of a template can't have embedded views, at index \"+t.nodeIndex+\"!\")}if(20224&t.flags&&0==(1&(e?e.flags:0)))throw new Error(\"Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index \"+t.nodeIndex+\"!\");if(t.query){if(67108864&t.flags&&(!e||0==(16384&e.flags)))throw new Error(\"Illegal State: Content Query nodes need to be children of directives, at index \"+t.nodeIndex+\"!\");if(134217728&t.flags&&e)throw new Error(\"Illegal State: View Query nodes have to be top level nodes, at index \"+t.nodeIndex+\"!\")}if(t.childCount){var i=e?e.nodeIndex+e.childCount:n-1;if(t.nodeIndex<=i&&t.nodeIndex+t.childCount>i)throw new Error(\"Illegal State: childCount of node leads outside of parent, at index \"+t.nodeIndex+\"!\")}}function tC(e,t,n,r){var i=iC(e.root,e.renderer,e,t,n);return oC(i,e.component,r),aC(i),i}function nC(e,t,n){var r=iC(e,e.renderer,null,null,t);return oC(r,n,n),aC(r),r}function rC(e,t,n,r){var i,o=t.element.componentRendererType;return i=o?e.root.rendererFactory.createRenderer(r,o):e.root.renderer,iC(e.root,i,e,t.element.componentProvider,n)}function iC(e,t,n,r,i){var o=new Array(i.nodes.length),a=i.outputCount?new Array(i.outputCount):null;return{def:i,parent:n,viewContainerParent:null,parentNodeDef:r,context:null,component:null,nodes:o,state:13,root:e,renderer:t,oldValues:new Array(i.bindingCount),disposables:a,initIndex:-1}}function oC(e,t,n){e.component=t,e.context=n}function aC(e){var t;if(ov(e)){var n=e.parentNodeDef;t=Lm(e.parent,n.parent.nodeIndex).renderElement}for(var r,i,o,a,s,l=e.def,u=e.nodes,c=0;c<l.nodes.length;c++){var p=l.nodes[c];qm.setCurrentNode(e,c);var d=void 0;switch(201347067&p.flags){case 1:var h=zx(e,t,p),f=void 0;if(33554432&p.flags){var m=pv(p.element.componentView);f=qm.createComponentView(e,p,m,h)}qx(e,f,p,h),d={renderElement:h,componentView:f,viewContainer:null,template:p.element.template?(a=e,s=p,new Hv(a,s)):void 0},16777216&p.flags&&(d.viewContainer=new Vv(e,p,d));break;case 2:d=Xx(e,t,p);break;case 512:case 1024:case 2048:case 256:if(!((d=u[c])||4096&p.flags))d={instance:uy(e,p)};break;case 16:d={instance:ay(e,p)};break;case 16384:if(!(d=u[c]))d={instance:sy(e,p)};if(32768&p.flags)oC(Lm(e,p.parent.nodeIndex).componentView,d.instance,d.instance);break;case 32:case 64:case 128:d={value:void 0};break;case 67108864:case 134217728:d=new i_;break;case 8:void 0,(o=uv(r=e,t,i=p))&&fv(r,i.ngContent.index,1,o,null,void 0),d=void 0}u[c]=d}fC(e,Lx.CreateViewNodes),gC(e,201326592,268435456,0)}function sC(e){cC(e),qm.updateDirectives(e,1),mC(e,Lx.CheckNoChanges),qm.updateRenderer(e,1),fC(e,Lx.CheckNoChanges),e.state&=-97}function lC(e){1&e.state?(e.state&=-2,e.state|=2):e.state&=-3,Nm(e,0,256),cC(e),qm.updateDirectives(e,0),mC(e,Lx.CheckAndUpdate),gC(e,67108864,536870912,0);var t=Nm(e,256,512);my(e,2097152|(t?1048576:0)),qm.updateRenderer(e,0),fC(e,Lx.CheckAndUpdate),gC(e,134217728,536870912,0),my(e,8388608|((t=Nm(e,512,768))?4194304:0)),2&e.def.flags&&(e.state&=-9),e.state&=-97,Nm(e,768,1024)}function uC(e,t,n,r,i,o,a,s,l,u,c,p,d){return 0===n?function(e,t,n,r,i,o,a,s,l,u,c,p){switch(201347067&t.flags){case 1:return function(e,t,n,r,i,o,a,s,l,u,c,p){var d=t.bindings.length,h=!1;return 0<d&&Wx(e,t,0,n)&&(h=!0),1<d&&Wx(e,t,1,r)&&(h=!0),2<d&&Wx(e,t,2,i)&&(h=!0),3<d&&Wx(e,t,3,o)&&(h=!0),4<d&&Wx(e,t,4,a)&&(h=!0),5<d&&Wx(e,t,5,s)&&(h=!0),6<d&&Wx(e,t,6,l)&&(h=!0),7<d&&Wx(e,t,7,u)&&(h=!0),8<d&&Wx(e,t,8,c)&&(h=!0),9<d&&Wx(e,t,9,p)&&(h=!0),h}(e,t,n,r,i,o,a,s,l,u,c,p);case 2:return function(e,t,n,r,i,o,a,s,l,u,c,p){var d=!1,h=t.bindings,f=h.length;if(0<f&&Xm(e,t,0,n)&&(d=!0),1<f&&Xm(e,t,1,r)&&(d=!0),2<f&&Xm(e,t,2,i)&&(d=!0),3<f&&Xm(e,t,3,o)&&(d=!0),4<f&&Xm(e,t,4,a)&&(d=!0),5<f&&Xm(e,t,5,s)&&(d=!0),6<f&&Xm(e,t,6,l)&&(d=!0),7<f&&Xm(e,t,7,u)&&(d=!0),8<f&&Xm(e,t,8,c)&&(d=!0),9<f&&Xm(e,t,9,p)&&(d=!0),d){var m=t.text.prefix;0<f&&(m+=$x(n,h[0])),1<f&&(m+=$x(r,h[1])),2<f&&(m+=$x(i,h[2])),3<f&&(m+=$x(o,h[3])),4<f&&(m+=$x(a,h[4])),5<f&&(m+=$x(s,h[5])),6<f&&(m+=$x(l,h[6])),7<f&&(m+=$x(u,h[7])),8<f&&(m+=$x(c,h[8])),9<f&&(m+=$x(p,h[9]));var v=Fm(e,t.nodeIndex).renderText;e.renderer.setValue(v,m)}return d}(e,t,n,r,i,o,a,s,l,u,c,p);case 16384:return function(e,t,n,r,i,o,a,s,l,u,c,p){var d=Vm(e,t.nodeIndex),h=d.instance,f=!1,m=void 0,v=t.bindings.length;return 0<v&&Qm(e,t,0,n)&&(f=!0,m=fy(e,d,t,0,n,m)),1<v&&Qm(e,t,1,r)&&(f=!0,m=fy(e,d,t,1,r,m)),2<v&&Qm(e,t,2,i)&&(f=!0,m=fy(e,d,t,2,i,m)),3<v&&Qm(e,t,3,o)&&(f=!0,m=fy(e,d,t,3,o,m)),4<v&&Qm(e,t,4,a)&&(f=!0,m=fy(e,d,t,4,a,m)),5<v&&Qm(e,t,5,s)&&(f=!0,m=fy(e,d,t,5,s,m)),6<v&&Qm(e,t,6,l)&&(f=!0,m=fy(e,d,t,6,l,m)),7<v&&Qm(e,t,7,u)&&(f=!0,m=fy(e,d,t,7,u,m)),8<v&&Qm(e,t,8,c)&&(f=!0,m=fy(e,d,t,8,c,m)),9<v&&Qm(e,t,9,p)&&(f=!0,m=fy(e,d,t,9,p,m)),m&&h.ngOnChanges(m),65536&t.flags&&jm(e,256,t.nodeIndex)&&h.ngOnInit(),262144&t.flags&&h.ngDoCheck(),f}(e,t,n,r,i,o,a,s,l,u,c,p);case 32:case 64:case 128:return function(e,t,n,r,i,o,a,s,l,u,c,p){var d=t.bindings,h=!1,f=d.length;if(0<f&&Xm(e,t,0,n)&&(h=!0),1<f&&Xm(e,t,1,r)&&(h=!0),2<f&&Xm(e,t,2,i)&&(h=!0),3<f&&Xm(e,t,3,o)&&(h=!0),4<f&&Xm(e,t,4,a)&&(h=!0),5<f&&Xm(e,t,5,s)&&(h=!0),6<f&&Xm(e,t,6,l)&&(h=!0),7<f&&Xm(e,t,7,u)&&(h=!0),8<f&&Xm(e,t,8,c)&&(h=!0),9<f&&Xm(e,t,9,p)&&(h=!0),h){var m=Bm(e,t.nodeIndex),v=void 0;switch(201347067&t.flags){case 32:v=[],0<f&&v.push(n),1<f&&v.push(r),2<f&&v.push(i),3<f&&v.push(o),4<f&&v.push(a),5<f&&v.push(s),6<f&&v.push(l),7<f&&v.push(u),8<f&&v.push(c),9<f&&v.push(p);break;case 64:v={},0<f&&(v[d[0].name]=n),1<f&&(v[d[1].name]=r),2<f&&(v[d[2].name]=i),3<f&&(v[d[3].name]=o),4<f&&(v[d[4].name]=a),5<f&&(v[d[5].name]=s),6<f&&(v[d[6].name]=l),7<f&&(v[d[7].name]=u),8<f&&(v[d[8].name]=c),9<f&&(v[d[9].name]=p);break;case 128:var y=n;switch(f){case 1:v=y.transform(n);break;case 2:v=y.transform(r);break;case 3:v=y.transform(r,i);break;case 4:v=y.transform(r,i,o);break;case 5:v=y.transform(r,i,o,a);break;case 6:v=y.transform(r,i,o,a,s);break;case 7:v=y.transform(r,i,o,a,s,l);break;case 8:v=y.transform(r,i,o,a,s,l,u);break;case 9:v=y.transform(r,i,o,a,s,l,u,c);break;case 10:v=y.transform(r,i,o,a,s,l,u,c,p)}}m.value=v}return h}(e,t,n,r,i,o,a,s,l,u,c,p);default:throw\"unreachable\"}}(e,t,r,i,o,a,s,l,u,c,p,d):function(e,t,n){switch(201347067&t.flags){case 1:return function(e,t,n){for(var r=!1,i=0;i<n.length;i++)Wx(e,t,i,n[i])&&(r=!0);return r}(e,t,n);case 2:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Xm(e,t,o,n[o])&&(i=!0);if(i){var a=\"\";for(o=0;o<n.length;o++)a+=$x(n[o],r[o]);a=t.text.prefix+a;var s=Fm(e,t.nodeIndex).renderText;e.renderer.setValue(s,a)}return i}(e,t,n);case 16384:return function(e,t,n){for(var r=Vm(e,t.nodeIndex),i=r.instance,o=!1,a=void 0,s=0;s<n.length;s++)Qm(e,t,s,n[s])&&(o=!0,a=fy(e,r,t,s,n[s],a));return a&&i.ngOnChanges(a),65536&t.flags&&jm(e,256,t.nodeIndex)&&i.ngOnInit(),262144&t.flags&&i.ngDoCheck(),o}(e,t,n);case 32:case 64:case 128:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Xm(e,t,o,n[o])&&(i=!0);if(i){var a=Bm(e,t.nodeIndex),s=void 0;switch(201347067&t.flags){case 32:s=n;break;case 64:s={};for(o=0;o<n.length;o++)s[r[o].name]=n[o];break;case 128:var l=n[0],u=n.slice(1);s=l.transform.apply(l,O(u))}a.value=s}return i}(e,t,n);default:throw\"unreachable\"}}(e,t,r)}function cC(e){var t=e.def;if(4&t.nodeFlags)for(var n=0;n<t.nodes.length;n++){var r=t.nodes[n];if(4&r.flags){var i=Lm(e,n).template._projectedViews;if(i)for(var o=0;o<i.length;o++){var a=i[o];a.state|=32,ev(a,e)}}else 0==(4&r.childFlags)&&(n+=r.childCount)}}function pC(e,t,n,r,i,o,a,s,l,u,c,p,d){return 0===n?function(e,t,n,r,i,o,a,s,l,u,c,p){var d=t.bindings.length;0<d&&$m(e,t,0,n);1<d&&$m(e,t,1,r);2<d&&$m(e,t,2,i);3<d&&$m(e,t,3,o);4<d&&$m(e,t,4,a);5<d&&$m(e,t,5,s);6<d&&$m(e,t,6,l);7<d&&$m(e,t,7,u);8<d&&$m(e,t,8,c);9<d&&$m(e,t,9,p)}(e,t,r,i,o,a,s,l,u,c,p,d):function(e,t,n){for(var r=0;r<n.length;r++)$m(e,t,r,n[r])}(e,t,r),!1}function dC(e,t){if(Um(e,t.nodeIndex).dirty)throw Am(qm.createDebugContext(e,t.nodeIndex),\"Query \"+t.query.id+\" not dirty\",\"Query \"+t.query.id+\" dirty\",0!=(1&e.state))}function hC(e){if(!(128&e.state)){if(mC(e,Lx.Destroy),fC(e,Lx.Destroy),my(e,131072),e.disposables)for(var t=0;t<e.disposables.length;t++)e.disposables[t]();!function(e){if(16&e.state){var t=nv(e);if(t){var n=t.template._projectedViews;n&&(Ve(n,n.indexOf(e)),qm.dirtyParentQueries(e))}}}(e),e.renderer.destroyNode&&function(e){for(var t=e.def.nodes.length,n=0;n<t;n++){var r=e.def.nodes[n];1&r.flags?e.renderer.destroyNode(Lm(e,n).renderElement):2&r.flags?e.renderer.destroyNode(Fm(e,n).renderText):(67108864&r.flags||134217728&r.flags)&&Um(e,n).destroy()}}(e),ov(e)&&e.renderer.destroy(),e.state|=128}}function fC(e,t){var n=e.def;if(33554432&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];33554432&i.flags?vC(Lm(e,r).componentView,t):0==(33554432&i.childFlags)&&(r+=i.childCount)}}function mC(e,t){var n=e.def;if(16777216&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];if(16777216&i.flags)for(var o=Lm(e,r).viewContainer._embeddedViews,a=0;a<o.length;a++)vC(o[a],t);else 0==(16777216&i.childFlags)&&(r+=i.childCount)}}function vC(e,t){var n=e.state;switch(t){case Lx.CheckNoChanges:0==(128&n)&&(12==(12&n)?sC(e):64&n&&yC(e,Lx.CheckNoChangesProjectedViews));break;case Lx.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?sC(e):64&n&&yC(e,t));break;case Lx.CheckAndUpdate:0==(128&n)&&(12==(12&n)?lC(e):64&n&&yC(e,Lx.CheckAndUpdateProjectedViews));break;case Lx.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?lC(e):64&n&&yC(e,t));break;case Lx.Destroy:hC(e);break;case Lx.CreateViewNodes:aC(e)}}function yC(e,t){mC(e,t),fC(e,t)}function gC(e,t,n,r){if(e.def.nodeFlags&t&&e.def.nodeFlags&n)for(var i=e.def.nodes.length,o=0;o<i;o++){var a=e.def.nodes[o];if(a.flags&t&&a.flags&n)switch(qm.setCurrentNode(e,a.nodeIndex),r){case 0:Yx(e,a);break;case 1:dC(e,a)}a.childFlags&t&&a.childFlags&n||(o+=a.childCount)}}(Vx=Lx=Lx||{})[Vx.CreateViewNodes=0]=\"CreateViewNodes\",Vx[Vx.CheckNoChanges=1]=\"CheckNoChanges\",Vx[Vx.CheckNoChangesProjectedViews=2]=\"CheckNoChangesProjectedViews\",Vx[Vx.CheckAndUpdate=3]=\"CheckAndUpdate\",Vx[Vx.CheckAndUpdateProjectedViews=4]=\"CheckAndUpdateProjectedViews\";var _C=!(Vx[Vx.Destroy=5]=\"Destroy\");function bC(){if(!_C){_C=!0;var e=ho()?{setCurrentNode:HC,createRootView:xC,createEmbeddedView:SC,createComponentView:EC,createNgModuleRef:OC,overrideProvider:NC,overrideComponentView:jC,clearOverrides:FC,checkAndUpdateView:UC,checkNoChangesView:zC,destroyView:qC,createDebugContext:function(e,t){return new $C(e,t)},handleEvent:WC,updateDirectives:GC,updateRenderer:YC}:{setCurrentNode:function(){},createRootView:wC,createEmbeddedView:tC,createComponentView:rC,createNgModuleRef:Zv,overrideProvider:Hm,overrideComponentView:Hm,clearOverrides:Hm,checkAndUpdateView:lC,checkNoChangesView:sC,destroyView:hC,createDebugContext:function(e,t){return new $C(e,t)},handleEvent:function(e,t,n,r){return e.def.handleEvent(e,t,n,r)},updateDirectives:function(e,t){return e.def.updateDirectives(0===t?VC:BC,e)},updateRenderer:function(e,t){return e.def.updateRenderer(0===t?VC:BC,e)}};qm.setCurrentNode=e.setCurrentNode,qm.createRootView=e.createRootView,qm.createEmbeddedView=e.createEmbeddedView,qm.createComponentView=e.createComponentView,qm.createNgModuleRef=e.createNgModuleRef,qm.overrideProvider=e.overrideProvider,qm.overrideComponentView=e.overrideComponentView,qm.clearOverrides=e.clearOverrides,qm.checkAndUpdateView=e.checkAndUpdateView,qm.checkNoChangesView=e.checkNoChangesView,qm.destroyView=e.destroyView,qm.resolveDep=dy,qm.createDebugContext=e.createDebugContext,qm.handleEvent=e.handleEvent,qm.updateDirectives=e.updateDirectives,qm.updateRenderer=e.updateRenderer,qm.dirtyParentQueries=Gx}}function wC(e,t,n,r,i,o){var a=i.injector.get(Gf);return nC(CC(e,i,a,t,n),r,o)}function xC(e,t,n,r,i,o){var a=i.injector.get(Gf),s=CC(e,i,new rS(a),t,n),l=LC(r);return tS(kC.create,nC,null,[s,l,o])}function CC(e,t,n,r,i){var o=t.injector.get(Xf),a=t.injector.get(Bi),s=n.createRenderer(null,null);return{ngModule:t,injector:e,projectableNodes:r,selectorOrNode:i,sanitizer:o,rendererFactory:n,renderer:s,errorHandler:a}}function SC(e,t,n,r){var i=LC(n);return tS(kC.create,tC,null,[e,t,i,r])}function EC(e,t,n,r){var i=RC.get(t.element.componentProvider.provider.token);return n=i||LC(n),tS(kC.create,rC,null,[e,t,n,r])}function OC(e,t,n,r){return Zv(e,t,n,function(e){var t=function(e){var r=!1,i=!1;return 0!==AC.size&&(e.providers.forEach(function(e){var t=AC.get(e.token);3840&e.flags&&t&&(r=!0,i=i||t.deprecatedBehavior)}),e.modules.forEach(function(n){MC.forEach(function(e,t){P(t).providedIn===n&&(r=!0,i=i||e.deprecatedBehavior)})})),{hasOverrides:r,hasDeprecatedOverrides:i}}(e),n=t.hasOverrides,o=t.hasDeprecatedOverrides;return n&&function(r){for(var e=0;e<r.providers.length;e++){var t=r.providers[e];o&&(t.flags|=4096);var n=AC.get(t.token);n&&(t.flags=-3841&t.flags|n.flags,t.deps=lv(n.deps),t.value=n.value)}if(0<MC.size){var i=new Set(r.modules);MC.forEach(function(e,t){if(i.has(P(t).providedIn)){var n={token:t,flags:e.flags|(o?4096:0),deps:lv(e.deps),value:e.value,index:r.providers.length};r.providers.push(n),r.providersByKey[Gm(t)]=n}})}}(e=e.factory(function(){return Hm})),e}(r))}var kC,DC,TC,IC,PC,AC=new Map,MC=new Map,RC=new Map;function NC(e){var t;AC.set(e.token,e),\"function\"==typeof e.token&&(t=P(e.token))&&\"function\"==typeof t.providedIn&&MC.set(e.token,e)}function jC(e,t){var n=pv(pv(Av(t)).nodes[0].element.componentView);RC.set(e,n)}function FC(){AC.clear(),MC.clear(),RC.clear()}function LC(e){if(0===AC.size)return e;var t=function(e){for(var t=[],n=null,r=0;r<e.nodes.length;r++){var i=e.nodes[r];1&i.flags&&(n=i),n&&3840&i.flags&&AC.has(i.provider.token)&&(t.push(n.nodeIndex),n=null)}return t}(e);if(0===t.length)return e;e=e.factory(function(){return Hm});for(var n=0;n<t.length;n++)r(e,t[n]);return e;function r(e,t){for(var n=t+1;n<e.nodes.length;n++){var r=e.nodes[n];if(1&r.flags)return;if(3840&r.flags){var i=r.provider,o=AC.get(i.token);o&&(r.flags=-3841&r.flags|o.flags,i.deps=lv(o.deps),i.value=o.value)}}}}function VC(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=e.def.nodes[t];return uC(e,h,n,r,i,o,a,s,l,u,c,p,d),224&h.flags?Bm(e,t).value:void 0}function BC(e,t,n,r,i,o,a,s,l,u,c,p,d){var h=e.def.nodes[t];return pC(e,h,n,r,i,o,a,s,l,u,c,p,d),224&h.flags?Bm(e,t).value:void 0}function UC(e){return tS(kC.detectChanges,lC,null,[e])}function zC(e){return tS(kC.checkNoChanges,sC,null,[e])}function qC(e){return tS(kC.destroy,hC,null,[e])}function HC(e,t){IC=e,PC=t}function WC(e,t,n,r){return HC(e,t),tS(kC.handleEvent,e.def.handleEvent,null,[e,t,n,r])}function GC(e,a){if(128&e.state)throw Rm(kC[TC]);return HC(e,QC(e,0)),e.def.updateDirectives(function(e,t,n){for(var r=[],i=3;i<arguments.length;i++)r[i-3]=arguments[i];var o=e.def.nodes[t];0===a?KC(e,o,n,r):ZC(e,o,n,r);16384&o.flags&&HC(e,QC(e,t));return 224&o.flags?Bm(e,o.nodeIndex).value:void 0},e)}function YC(e,a){if(128&e.state)throw Rm(kC[TC]);return HC(e,XC(e,0)),e.def.updateRenderer(function(e,t,n){for(var r=[],i=3;i<arguments.length;i++)r[i-3]=arguments[i];var o=e.def.nodes[t];0===a?KC(e,o,n,r):ZC(e,o,n,r);3&o.flags&&HC(e,XC(e,t));return 224&o.flags?Bm(e,o.nodeIndex).value:void 0},e)}function KC(e,t,n,r){if(uC.apply(void 0,O([e,t,n],r))){var i=1===n?r[0]:r;if(16384&t.flags){for(var o={},a=0;a<t.bindings.length;a++){var s=t.bindings[a],l=i[a];8&s.flags&&(o[ra(s.nonMinifiedName)]=oa(l))}var u=t.parent,c=Lm(e,u.nodeIndex).renderElement;if(u.element.name)for(var p in o){null!=(l=o[p])?e.renderer.setAttribute(c,p,l):e.renderer.removeAttribute(c,p)}else e.renderer.setValue(c,\"bindings=\"+JSON.stringify(o,null,2))}}}function ZC(e,t,n,r){pC.apply(void 0,O([e,t,n],r))}function QC(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(16384&r.flags&&r.bindings&&r.bindings.length)return n}return null}function XC(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(3&r.flags&&r.bindings&&r.bindings.length)return n}return null}(DC=kC=kC||{})[DC.create=0]=\"create\",DC[DC.detectChanges=1]=\"detectChanges\",DC[DC.checkNoChanges=2]=\"checkNoChanges\",DC[DC.destroy=3]=\"destroy\",DC[DC.handleEvent=4]=\"handleEvent\";var $C=(Object.defineProperty(JC.prototype,\"elOrCompView\",{get:function(){return Lm(this.elView,this.elDef.nodeIndex).componentView||this.view},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"injector\",{get:function(){return Gv(this.elView,this.elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"component\",{get:function(){return this.elOrCompView.component},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"context\",{get:function(){return this.elOrCompView.context},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"providerTokens\",{get:function(){var e=[];if(this.elDef)for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&e.push(n.provider.token),t+=n.childCount}return e},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"references\",{get:function(){var e={};if(this.elDef){eS(this.elView,this.elDef,e);for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&eS(this.elView,n,e),t+=n.childCount}}return e},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"componentRenderElement\",{get:function(){var e=function(e){for(;e&&!ov(e);)e=e.parent;return e.parent?Lm(e.parent,rv(e).nodeIndex):null}(this.elOrCompView);return e?e.renderElement:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(JC.prototype,\"renderNode\",{get:function(){return 2&this.nodeDef.flags?iv(this.view,this.nodeDef):iv(this.elView,this.elDef)},enumerable:!0,configurable:!0}),JC.prototype.logError=function(t){for(var e,n,r=[],i=1;i<arguments.length;i++)r[i-1]=arguments[i];n=2&this.nodeDef.flags?(e=this.view.def,this.nodeDef.nodeIndex):(e=this.elView.def,this.elDef.nodeIndex);var o=function(e,t){for(var n=-1,r=0;r<=t;r++)3&e.nodes[r].flags&&n++;return n}(e,n),a=-1;e.factory(function(){var e;return++a===o?(e=t.error).bind.apply(e,O([t],r)):Hm}),a<o&&(t.error(\"Illegal state: the ViewDefinitionFactory did not call the logger!\"),t.error.apply(t,O(r)))},JC);function JC(e,t){this.view=e,null==(this.nodeIndex=t)&&(this.nodeIndex=t=0),this.nodeDef=e.def.nodes[t];for(var n=this.nodeDef,r=e;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&r;)n=rv(r),r=r.parent;this.elDef=n,this.elView=r}function eS(e,t,n){for(var r in t.references)n[r]=Zx(e,t,t.references[r])}function tS(e,t,n,r){var i=TC,o=IC,a=PC;try{TC=e;var s=t.apply(n,r);return IC=o,PC=a,TC=i,s}catch(e){if(function(e){return!!Fi(e)}(e)||!IC)throw e;throw function(e,t){return e instanceof Error||(e=new Error(e.toString())),Mm(e,t),e}(e,nS())}}function nS(){return IC?new $C(IC,PC):null}var rS=(iS.prototype.createRenderer=function(e,t){return new oS(this.delegate.createRenderer(e,t))},iS.prototype.begin=function(){this.delegate.begin&&this.delegate.begin()},iS.prototype.end=function(){this.delegate.end&&this.delegate.end()},iS.prototype.whenRenderingDone=function(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)},iS);function iS(e){this.delegate=e}var oS=(aS.prototype.createDebugContext=function(e){return this.debugContextFactory(e)},aS.prototype.destroyNode=function(e){var t=Dx(e);!function(e){Ex.delete(e.nativeNode)}(t),t instanceof px&&(t.listeners.length=0),this.delegate.destroyNode&&this.delegate.destroyNode(e)},aS.prototype.destroy=function(){this.delegate.destroy()},aS.prototype.createElement=function(e,t){var n=this.delegate.createElement(e,t),r=this.createDebugContext(n);if(r){var i=new fx(n,null,r);i.name=e,Tx(i)}return n},aS.prototype.createComment=function(e){var t=this.delegate.createComment(e),n=this.createDebugContext(t);return n&&Tx(new px(t,null,n)),t},aS.prototype.createText=function(e){var t=this.delegate.createText(e),n=this.createDebugContext(t);return n&&Tx(new px(t,null,n)),t},aS.prototype.appendChild=function(e,t){var n=Dx(e),r=Dx(t);n&&r&&n instanceof fx&&n.addChild(r),this.delegate.appendChild(e,t)},aS.prototype.insertBefore=function(e,t,n){var r=Dx(e),i=Dx(t),o=Dx(n);r&&i&&r instanceof fx&&r.insertBefore(o,i),this.delegate.insertBefore(e,t,n)},aS.prototype.removeChild=function(e,t){var n=Dx(e),r=Dx(t);n&&r&&n instanceof fx&&n.removeChild(r),this.delegate.removeChild(e,t)},aS.prototype.selectRootElement=function(e,t){var n=this.delegate.selectRootElement(e,t),r=nS();return r&&Tx(new fx(n,null,r)),n},aS.prototype.setAttribute=function(e,t,n,r){var i=Dx(e);if(i&&i instanceof fx){var o=r?r+\":\"+t:t;i.attributes[o]=n}this.delegate.setAttribute(e,t,n,r)},aS.prototype.removeAttribute=function(e,t,n){var r=Dx(e);if(r&&r instanceof fx){var i=n?n+\":\"+t:t;r.attributes[i]=null}this.delegate.removeAttribute(e,t,n)},aS.prototype.addClass=function(e,t){var n=Dx(e);n&&n instanceof fx&&(n.classes[t]=!0),this.delegate.addClass(e,t)},aS.prototype.removeClass=function(e,t){var n=Dx(e);n&&n instanceof fx&&(n.classes[t]=!1),this.delegate.removeClass(e,t)},aS.prototype.setStyle=function(e,t,n,r){var i=Dx(e);i&&i instanceof fx&&(i.styles[t]=n),this.delegate.setStyle(e,t,n,r)},aS.prototype.removeStyle=function(e,t,n){var r=Dx(e);r&&r instanceof fx&&(r.styles[t]=null),this.delegate.removeStyle(e,t,n)},aS.prototype.setProperty=function(e,t,n){var r=Dx(e);r&&r instanceof fx&&(r.properties[t]=n),this.delegate.setProperty(e,t,n)},aS.prototype.listen=function(e,t,n){if(\"string\"!=typeof e){var r=Dx(e);r&&r.listeners.push(new cx(t,n))}return this.delegate.listen(e,t,n)},aS.prototype.parentNode=function(e){return this.delegate.parentNode(e)},aS.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},aS.prototype.setValue=function(e,t){return this.delegate.setValue(e,t)},aS);function aS(e){this.delegate=e,this.debugContextFactory=nS,this.data=this.delegate.data}var sS,lS=(p(uS,sS=Ie),uS.prototype.create=function(e){bC();var t=function(e){var t=Array.from(e.providers),n=Array.from(e.modules),r={};for(var i in e.providersByKey)r[i]=e.providersByKey[i];return{factory:e.factory,scope:e.scope,providers:t,modules:n,providersByKey:r}}(pv(this._ngModuleDefFactory));return qm.createNgModuleRef(this.moduleType,e||Cc.NULL,this._bootstrapComponents,t)},uS);function uS(e,t,n){var r=sS.call(this)||this;return r.moduleType=e,r._bootstrapComponents=t,r._ngModuleDefFactory=n,r}ngDevMode&&(Q.$localize=Q.$localize||function(){throw new Error(\"It looks like your application or one of its dependencies is using i18n.\\nAngular 9 introduced a global `$localize()` function that needs to be loaded.\\nPlease 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.ɵangular_packages_core_core_r=jx,N.ɵangular_packages_core_core_o=Mx,N.ɵangular_packages_core_core_p=Rx,N.ɵangular_packages_core_core_q=Nx,N.ɵangular_packages_core_core_s=Fx,N.ɵangular_packages_core_core_g=Pb,N.ɵangular_packages_core_core_m=tm,N.ɵangular_packages_core_core_n=dm,N.ɵangular_packages_core_core_l=fx,N.ɵangular_packages_core_core_k=px,N.ɵangular_packages_core_core_a=q,N.ɵangular_packages_core_core_c=Ee,N.ɵangular_packages_core_core_b=be,N.ɵangular_packages_core_core_d=ap,N.ɵangular_packages_core_core_e=Gc,N.ɵangular_packages_core_core_f=Jc,N.ɵangular_packages_core_core_j=Qw,N.ɵangular_packages_core_core_t=uw,N.ɵangular_packages_core_core_v=ow,N.ɵangular_packages_core_core_u=iw,N.ɵangular_packages_core_core_y=lw,N.ɵangular_packages_core_core_w=aw,N.ɵangular_packages_core_core_x=sw,N.ɵangular_packages_core_core_bb=xy,N.ɵangular_packages_core_core_bc=xi,N.ɵangular_packages_core_core_be=gn,N.ɵangular_packages_core_core_bf=On,N.ɵangular_packages_core_core_bd=hn,N.ɵangular_packages_core_core_bg=Ln,N.ɵangular_packages_core_core_bo=di,N.ɵangular_packages_core_core_h=Tu,N.ɵangular_packages_core_core_i=Iu,N.ɵangular_packages_core_core_bi=$o,N.ɵangular_packages_core_core_bn=Qe,N.ɵangular_packages_core_core_bj=o,N.ɵangular_packages_core_core_bk=a,N.ɵangular_packages_core_core_bl=E,N.ɵangular_packages_core_core_z=oy,N.ɵangular_packages_core_core_ba=zm,N.createPlatform=Lw,N.assertPlatform=Bw,N.destroyPlatform=function(){Pw&&!Pw.destroyed&&Pw.destroy()},N.getPlatform=Uw,N.PlatformRef=zw,N.ApplicationRef=Gw,N.createPlatformFactory=Vw,N.NgProbeToken=jw,N.enableProdMode=function(){if(po)throw new Error(\"Cannot enable prod mode after platform setup.\");co=!1},N.isDevMode=ho,N.APP_ID=Ib,N.PACKAGE_ROOT_URL=Fb,N.PLATFORM_INITIALIZER=Rb,N.PLATFORM_ID=Nb,N.APP_BOOTSTRAP_LISTENER=jb,N.APP_INITIALIZER=kb,N.ApplicationInitStatus=Db,N.DebugElement=Px,N.DebugEventListener=cx,N.DebugNode=Ix,N.asNativeElements=function(e){return e.map(function(e){return e.nativeElement})},N.getDebugNode=Dx,N.Testability=Ow,N.TestabilityRegistry=Dw,N.setTestabilityGetter=function(e){Aw=e},N.TRANSLATIONS=zb,N.TRANSLATIONS_FORMAT=qb,N.LOCALE_ID=Ub,N.ApplicationModule=Bx,N.wtfCreateScope=pw,N.wtfLeave=dw,N.wtfStartTimeRange=hw,N.wtfEndTimeRange=fw,N.Type=Lu,N.EventEmitter=t_,N.ErrorHandler=Bi,N.Sanitizer=Xf,N.Attribute=S,N.ANALYZE_FOR_ENTRY_COMPONENTS=up,N.ContentChild=pp,N.ContentChildren=cp,N.Query=lp,N.ViewChild=hp,N.ViewChildren=dp,N.Component=db,N.Directive=pb,N.HostBinding=vb,N.HostListener=yb,N.Input=fb,N.Output=mb,N.Pipe=hb,N.NgModule=Sb,N.CUSTOM_ELEMENTS_SCHEMA=zi,N.NO_ERRORS_SCHEMA=qi,N.Version=Jf,N.VERSION=em,N.ɵɵdefineInjectable=D,N.defineInjectable=T,N.ɵɵdefineInjector=I,N.forwardRef=U,N.resolveForwardRef=z,N.Injectable=oc,N.Injector=Cc,N.ɵɵinject=we,N.inject=xe,N.INJECTOR=ue,N.ReflectiveInjector=ip,N.ResolvedReflectiveFactory=Qc,N.ReflectiveKey=Bc,N.InjectionToken=ae,N.Inject=_,N.Optional=b,N.Self=w,N.SkipSelf=x,N.Host=C,N.ɵ0=s,N.ɵ1=v,N.NgZone=yw,N.ɵNoopNgZone=Sw,N.Renderer2=Yf,N.RendererFactory2=Gf,N.COMPILER_OPTIONS=rw,N.Compiler=$b,N.CompilerFactory=ew,N.ModuleWithComponentFactories=Hb,N.ComponentFactory=Df,N.ɵComponentFactory=Df,N.ComponentRef=kf,N.ComponentFactoryResolver=Mf,N.ElementRef=Uf,N.NgModuleFactory=Ie,N.NgModuleRef=Re,N.NgModuleFactoryLoader=Zw,N.getModuleFactory=Xw,N.QueryList=i_,N.SystemJsNgModuleLoader=tx,N.SystemJsNgModuleLoaderConfig=Jw,N.TemplateRef=Sm,N.ViewContainerRef=Dm,N.EmbeddedViewRef=lx,N.ViewRef=ox,N.ChangeDetectorRef=Mu,N.DefaultIterableDiffer=im,N.IterableDiffers=ym,N.KeyValueDiffers=_m,N.SimpleChange=lf,N.WrappedValue=Ep,N.platformCore=Ax,N.ɵALLOW_MULTIPLE_PLATFORMS=Fw,N.ɵAPP_ID_RANDOM_PROVIDER=Ab,N.ɵdefaultIterableDiffers=xm,N.ɵdefaultKeyValueDiffers=Cm,N.ɵdevModeEqual=Sp,N.ɵisListLikeIterable=kp,N.ɵisDefaultChangeDetectionStrategy=function(e){return null==e||e===N.ChangeDetectionStrategy.Default},N.ɵConsole=Lb,N.ɵsetCurrentInjector=ge,N.ɵgetInjectableDef=P,N.ɵINJECTOR_SCOPE=lc,N.ɵDEFAULT_LOCALE_ID=Ny,N.ɵivyEnabled=!1,N.ɵCodegenComponentFactoryResolver=Nf,N.ɵclearResolutionOfComponentResourcesQueue=gp,N.ɵresolveComponentResources=fp,N.ɵReflectionCapabilities=Hu,N.ɵ_sanitizeHtml=zo,N.ɵ_sanitizeStyle=Go,N.ɵ_sanitizeUrl=go,N.ɵglobal=Q,N.ɵlooseIdentical=Cp,N.ɵstringify=V,N.ɵmakeDecorator=i,N.ɵisObservable=Bd,N.ɵisPromise=Vd,N.ɵclearOverrides=function(){return bC(),qm.clearOverrides()},N.ɵinitServicesIfNeeded=bC,N.ɵoverrideComponentView=function(e,t){return bC(),qm.overrideComponentView(e,t)},N.ɵoverrideProvider=function(e){return bC(),qm.overrideProvider(e)},N.ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR=py,N.ɵgetLocalePluralCase=My,N.ɵfindLocaleData=Ry,N.ɵLOCALE_DATA=Iy,N.ɵallowSanitizationBypassAndThrow=lo,N.ɵgetSanitizationBypassType=uo,N.ɵunwrapSafeValue=so,N.ɵɵattribute=Np,N.ɵɵattributeInterpolate1=Wp,N.ɵɵattributeInterpolate2=Gp,N.ɵɵattributeInterpolate3=Yp,N.ɵɵattributeInterpolate4=Kp,N.ɵɵattributeInterpolate5=Zp,N.ɵɵattributeInterpolate6=Qp,N.ɵɵattributeInterpolate7=Xp,N.ɵɵattributeInterpolate8=$p,N.ɵɵattributeInterpolateV=Jp,N.ɵɵdefineBase=lt,N.ɵɵdefineComponent=tt,N.ɵɵdefineDirective=ut,N.ɵɵdefinePipe=ct,N.ɵɵdefineNgModule=ot,N.ɵdetectChanges=function(e){Fl(la(e),e)},N.ɵrenderComponent=function(e,t){void 0===t&&(t={}),ngDevMode&&tf(),ngDevMode&&Qt(e),bn(null);var n=t.rendererFactory||Kn,r=t.sanitizer||null,i=pt(e);i.type!=e&&(i.type=e);var o,a=i.selectors[0][0],s=pl(n,t.host||a),l=i.onPush?576:528,u=af(t.scheduler,t.playerHandler),c=n.createRenderer(s,i),p=ul(-1,null,1,0,null,null,null,null,null),d=$s(null,p,u,l,null,null,n,c,void 0,t.injector||null),h=Fn(d,null);try{n.begin&&n.begin(),o=of(rf(s,i,d,n,c,r),i,d,u,t.hostFeatures||null),tl(d,p,null),nl(d,p,null,null)}finally{Fn(h,null),n.end&&n.end()}return o},N.ɵRender3ComponentFactory=Sy,N.ɵRender3ComponentRef=ky,N.ɵɵdirectiveInject=ld,N.ɵɵinjectAttribute=ud,N.ɵɵinjectPipeChangeDetectorRef=I_,N.ɵɵgetFactoryOf=Ai,N.ɵɵgetInheritedFactory=Mi,N.ɵɵsetComponentScope=nt,N.ɵɵsetNgModuleScope=at,N.ɵɵtemplateRefExtractor=T_,N.ɵɵProvidersFeature=Of,N.ɵɵInheritDefinitionFeature=mf,N.ɵɵNgOnChangesFeature=cf,N.ɵLifecycleHooksFeature=sf,N.ɵRender3NgModuleRef=Pg,N.ɵmarkDirty=ed,N.ɵNgModuleFactory=Rg,N.ɵNO_CHANGE=cr,N.ɵɵcontainer=td,N.ɵɵnextContext=Gd,N.ɵɵelementStart=Dd,N.ɵɵnamespaceHTML=qn,N.ɵɵnamespaceMathML=zn,N.ɵɵnamespaceSVG=Un,N.ɵɵelement=Id,N.ɵɵlistener=Ud,N.ɵɵtext=uh,N.ɵɵtextInterpolate=ch,N.ɵɵtextInterpolate1=ph,N.ɵɵtextInterpolate2=dh,N.ɵɵtextInterpolate3=hh,N.ɵɵtextInterpolate4=fh,N.ɵɵtextInterpolate5=mh,N.ɵɵtextInterpolate6=vh,N.ɵɵtextInterpolate7=yh,N.ɵɵtextInterpolate8=gh,N.ɵɵtextInterpolateV=_h,N.ɵɵembeddedViewStart=jd,N.ɵɵprojection=Xd,N.ɵɵpipeBind1=Yg,N.ɵɵpipeBind2=Kg,N.ɵɵpipeBind3=Zg,N.ɵɵpipeBind4=Qg,N.ɵɵpipeBindV=Xg,N.ɵɵpureFunction0=jg,N.ɵɵpureFunction1=Fg,N.ɵɵpureFunction2=Lg,N.ɵɵpureFunction3=Vg,N.ɵɵpureFunction4=Bg,N.ɵɵpureFunction5=Ug,N.ɵɵpureFunction6=zg,N.ɵɵpureFunction7=qg,N.ɵɵpureFunction8=Hg,N.ɵɵpureFunctionV=Wg,N.ɵɵgetCurrentView=Ld,N.ɵgetDirectives=Wh,N.ɵgetHostElement=Kh,N.ɵɵrestoreView=En,N.ɵɵcontainerRefreshStart=rd,N.ɵɵcontainerRefreshEnd=id,N.ɵɵqueryRefresh=g_,N.ɵɵviewQuery=b_,N.ɵɵstaticViewQuery=__,N.ɵɵstaticContentQuery=C_,N.ɵɵcontentQuery=x_,N.ɵɵloadQuery=E_,N.ɵɵelementEnd=Td,N.ɵɵhostProperty=Lh,N.ɵɵproperty=$d,N.ɵɵpropertyInterpolate=Jd,N.ɵɵpropertyInterpolate1=eh,N.ɵɵpropertyInterpolate2=th,N.ɵɵpropertyInterpolate3=nh,N.ɵɵpropertyInterpolate4=rh,N.ɵɵpropertyInterpolate5=ih,N.ɵɵpropertyInterpolate6=oh,N.ɵɵpropertyInterpolate7=ah,N.ɵɵpropertyInterpolate8=sh,N.ɵɵpropertyInterpolateV=lh,N.ɵɵupdateSyntheticHostBinding=Vh,N.ɵɵcomponentHostSyntheticListener=zd,N.ɵɵprojectionDef=Kd,N.ɵɵreference=sd,N.ɵɵenableBindings=vn,N.ɵɵdisableBindings=yn,N.ɵɵallocHostVars=bp,N.ɵɵelementContainerStart=Md,N.ɵɵelementContainerEnd=Rd,N.ɵɵelementContainer=Nd,N.ɵɵstyleMap=md,N.ɵɵstyleSanitizer=cd,N.ɵɵclassMap=vd,N.ɵɵclassMapInterpolate1=bh,N.ɵɵclassMapInterpolate2=wh,N.ɵɵclassMapInterpolate3=xh,N.ɵɵclassMapInterpolate4=Ch,N.ɵɵclassMapInterpolate5=Sh,N.ɵɵclassMapInterpolate6=Eh,N.ɵɵclassMapInterpolate7=Oh,N.ɵɵclassMapInterpolate8=kh,N.ɵɵclassMapInterpolateV=Dh,N.ɵɵstyleProp=pd,N.ɵɵstylePropInterpolate1=Th,N.ɵɵstylePropInterpolate2=Ih,N.ɵɵstylePropInterpolate3=Ph,N.ɵɵstylePropInterpolate4=Ah,N.ɵɵstylePropInterpolate5=Mh,N.ɵɵstylePropInterpolate6=Rh,N.ɵɵstylePropInterpolate7=Nh,N.ɵɵstylePropInterpolate8=jh,N.ɵɵstylePropInterpolateV=Fh,N.ɵɵclassProp=hd,N.ɵɵelementHostAttrs=Pd,N.ɵɵselect=Ja,N.ɵɵadvance=$a,N.ɵɵtemplate=nd,N.ɵɵembeddedViewEnd=Fd,N.ɵstore=ad,N.ɵɵpipe=Gg,N.ɵwhenRendered=function(e){return di(e).clean},N.ɵɵi18n=dg,N.ɵɵi18nAttributes=hg,N.ɵɵi18nExp=vg,N.ɵɵi18nStart=og,N.ɵɵi18nEnd=lg,N.ɵɵi18nApply=yg,N.ɵɵi18nPostprocess=sg,N.ɵsetLocaleId=Sg,N.ɵsetClassMetadata=function(i,o,a,s){return Qe(function(){var e,t=i,n=t.prototype?Object.getPrototypeOf(t.prototype):null,r=n&&n.constructor;null!==o&&(void 0===t.decorators||r&&r.decorators===t.decorators?t.decorators=o:(e=t.decorators).push.apply(e,O(o))),null!==a&&(t.ctorParameters=a),null!==s&&(void 0===t.propDecorators||r&&r.propDecorators===t.propDecorators?t.propDecorators=s:t.propDecorators=l(l({},t.propDecorators),s))})},N.ɵɵresolveWindow=or,N.ɵɵresolveDocument=ar,N.ɵɵresolveBody=sr,N.ɵcompileComponent=Q_,N.ɵcompileDirective=X_,N.ɵcompileNgModule=F_,N.ɵcompileNgModuleDefs=L_,N.ɵpatchComponentDefWithScope=G_,N.ɵresetCompiledComponents=function(){z_=new Map,q_=new Map,M_.length=0},N.ɵflushModuleScopingQueueAsMuchAsPossible=N_,N.ɵtransitiveScopesFor=Y_,N.ɵcompilePipe=ub,N.ɵɵsanitizeHtml=Yo,N.ɵɵsanitizeStyle=Ko,N.ɵɵdefaultStyleSanitizer=ea,N.ɵɵsanitizeScript=Xo,N.ɵɵsanitizeUrl=Zo,N.ɵɵsanitizeResourceUrl=Qo,N.ɵɵsanitizeUrlOrResourceUrl=Jo,N.ɵbypassSanitizationTrustHtml=function(e){return new Yi(e)},N.ɵbypassSanitizationTrustStyle=function(e){return new Qi(e)},N.ɵbypassSanitizationTrustScript=function(e){return new Ji(e)},N.ɵbypassSanitizationTrustUrl=function(e){return new no(e)},N.ɵbypassSanitizationTrustResourceUrl=function(e){return new oo(e)},N.ɵgetLContext=aa,N.ɵNG_ELEMENT_ID=oe,N.ɵNG_COMP_DEF=$,N.ɵNG_DIR_DEF=J,N.ɵNG_PIPE_DEF=ee,N.ɵNG_MOD_DEF=te,N.ɵNG_BASE_DEF=re,N.ɵNG_PROV_DEF=M,N.ɵNG_INJ_DEF=R,N.ɵcompileNgModuleFactory__POST_R3__=function(e,t,n){ngDevMode&&function(e,t){void 0===t&&(t=\"Type passed in is not NgModuleType, it does not have 'ɵmod' property.\"),mt(e)||Ye(t)}(n);var r=new Rg(n);if(0===mp.size)return Promise.resolve(r);var i=function(e){var t=[];return e.forEach(function(e){return e&&t.push.apply(t,O(e))}),t}(e.get(rw,[]).concat(t).map(function(e){return e.providers}));if(0===i.length)return Promise.resolve(r);var o=X(),a=Cc.create({providers:i}).get(o.ResourceLoader);return fp(function(e){return Promise.resolve(a.get(e))}).then(function(){return r})},N.ɵisBoundToModule__POST_R3__=function(e){return e.isBoundToModule},N.ɵSWITCH_COMPILE_COMPONENT__POST_R3__=gb,N.ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__=_b,N.ɵSWITCH_COMPILE_PIPE__POST_R3__=bb,N.ɵSWITCH_COMPILE_NGMODULE__POST_R3__=Eb,N.ɵgetDebugNode__POST_R3__=kx,N.ɵSWITCH_COMPILE_INJECTABLE__POST_R3__=ac,N.ɵSWITCH_IVY_ENABLED__POST_R3__=!0,N.ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__=ju,N.ɵCompiler_compileModuleSync__POST_R3__=Gb,N.ɵCompiler_compileModuleAsync__POST_R3__=function(e){return Promise.resolve(Gb(e))},N.ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__=Yb,N.ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__=function(e){return Promise.resolve(Yb(e))},N.ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__=qf,N.ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__=Om,N.ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__=Im,N.ɵSWITCH_RENDERER2_FACTORY__POST_R3__=Zf,N.ɵgetModuleFactory__POST_R3__=function(e){var t=Dg(e);if(!t)throw $w(e);return new Rg(t)},N.ɵregisterNgModuleType=kg,N.ɵpublishGlobalUtil=nf,N.ɵpublishDefaultGlobalUtils=tf,N.ɵcreateInjector=fc,N.ɵINJECTOR_IMPL__POST_R3__=function(e,t,n){return fc({name:n},t,e,n)},N.ɵregisterModuleFactory=function(e,t){var n=Eg.get(e);Og(e,n&&n.moduleType,t.moduleType),Eg.set(e,t)},N.ɵEMPTY_ARRAY=[],N.ɵEMPTY_MAP={},N.ɵand=function(e,t,n,r,i,o){e|=1;var a=sv(t),s=a.matchedQueries,l=a.references;return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:e,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:s,matchedQueryIds:a.matchedQueryIds,references:l,ngContentIndex:n,childCount:r,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:o?pv(o):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:i||Hm},provider:null,text:null,query:null,ngContent:null}},N.ɵccf=function(e,t,n,r,i,o){return new Rv(e,t,n,r,i,o)},N.ɵcmf=function(e,t,n){return new lS(e,t,n)},N.ɵcrt=function(e){return{id:Ym,styles:e.styles,encapsulation:e.encapsulation,data:e.data}},N.ɵdid=function(e,t,n,r,i,o,a,s){var l=[];if(a)for(var u in a){var c=j(a[u],2),p=c[0],d=c[1];l[p]={flags:8,name:u,nonMinifiedName:d,ns:null,securityContext:null,suffix:null}}var h=[];if(s)for(var f in s)h.push({type:1,propName:f,target:null,eventName:s[f]});return oy(e,t|=16384,n,r,i,i,o,l,h)},N.ɵeld=function(e,t,n,r,i,o,a,s,l,u,c,p){var d;void 0===a&&(a=[]),u=u||Hm;var h=sv(n),f=h.matchedQueries,m=h.references,v=h.matchedQueryIds,y=null,g=null;o&&(y=(d=j(gv(o),2))[0],g=d[1]),s=s||[];for(var _=[],b=0;b<s.length;b++){var w=j(s[b],3),x=w[0],C=w[1],S=w[2],E=j(gv(C),2),O=E[0],k=E[1],D=void 0,T=void 0;switch(15&x){case 4:T=S;break;case 1:case 8:D=S}_[b]={flags:x,ns:O,name:k,nonMinifiedName:k,securityContext:D,suffix:T}}l=l||[];var I=[];for(b=0;b<l.length;b++){var P=j(l[b],2),A=P[0],M=P[1];I[b]={type:0,target:A,eventName:M,propName:null}}var R=(a=a||[]).map(function(e){var t=j(e,2),n=t[0],r=t[1],i=j(gv(n),2);return[i[0],i[1],r]});return p=function(e){if(e&&e.id===Ym){var t=null!=e.encapsulation&&e.encapsulation!==N.ViewEncapsulation.None||e.styles.length||Object.keys(e.data).length;e.id=t?\"c\"+Zm++:Km}return e&&e.id===Km&&(e=null),e||null}(p),c&&(t|=33554432),{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t|=1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:f,matchedQueryIds:v,references:m,ngContentIndex:r,childCount:i,bindings:_,bindingFlags:_v(_),outputs:I,element:{ns:y,name:g,attrs:R,template:null,componentProvider:null,componentView:c||null,componentRendererType:p,publicProviders:null,allProviders:null,handleEvent:u||Hm},provider:null,text:null,query:null,ngContent:null}},N.ɵgetComponentViewDefinitionFactory=Av,N.ɵinlineInterpolate=function(e,t,n,r,i,o,a,s,l,u,c,p,d,h,f,m,v,y,g,_){switch(e){case 1:return t+bv(n)+r;case 2:return t+bv(n)+r+bv(i)+o;case 3:return t+bv(n)+r+bv(i)+o+bv(a)+s;case 4:return t+bv(n)+r+bv(i)+o+bv(a)+s+bv(l)+u;case 5:return t+bv(n)+r+bv(i)+o+bv(a)+s+bv(l)+u+bv(c)+p;case 6:return t+bv(n)+r+bv(i)+o+bv(a)+s+bv(l)+u+bv(c)+p+bv(d)+h;case 7:return t+bv(n)+r+bv(i)+o+bv(a)+s+bv(l)+u+bv(c)+p+bv(d)+h+bv(f)+m;case 8:return t+bv(n)+r+bv(i)+o+bv(a)+s+bv(l)+u+bv(c)+p+bv(d)+h+bv(f)+m+bv(v)+y;case 9:return t+bv(n)+r+bv(i)+o+bv(a)+s+bv(l)+u+bv(c)+p+bv(d)+h+bv(f)+m+bv(v)+y+bv(g)+_;default:throw new Error(\"Does not support more than 9 expressions\")}},N.ɵinterpolate=function(e,t){for(var n=\"\",r=0;r<2*e;r+=2)n=n+t[r]+bv(t[r+1]);return n+t[2*e]},N.ɵmod=function(e){for(var t={},n=[],r=null,i=0;i<e.length;i++){var o=e[i];o.token===lc&&(r=o.value),1073741824&o.flags&&n.push(o.token),o.index=i,t[Gm(o.token)]=o}return{factory:null,providersByKey:t,providers:e,modules:n,scope:r}},N.ɵmpd=function(e,t,n,r){return n=z(n),{index:-1,deps:lv(r,V(t)),flags:e,token:t,value:n}},N.ɵncd=function(e,t){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:t}}},N.ɵnov=function(e,t){var n=e.def.nodes[t];if(1&n.flags){var r=Lm(e,n.nodeIndex);return n.element.template?r.template:r.renderElement}if(2&n.flags)return Fm(e,n.nodeIndex).renderText;if(20240&n.flags)return Vm(e,n.nodeIndex).instance;throw new Error(\"Illegal state: read nodeValue for node index \"+t)},N.ɵpid=function(e,t,n){return oy(-1,e|=16,null,0,t,t,n)},N.ɵprd=function(e,t,n,r,i){return oy(-1,e,t,0,n,r,i)},N.ɵpad=function(e,t){return Qx(32,e,Be(t))},N.ɵpod=function(e,t){for(var n=Object.keys(t),r=n.length,i=[],o=0;o<r;o++){var a=n[o];t[a];i.push(a)}return Qx(64,e,i)},N.ɵppd=function(e,t){return Qx(128,e,Be(t+1))},N.ɵqud=function(e,t,n){var r=[];for(var i in n){var o=n[i];r.push({propName:i,bindingType:o})}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:e,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:t,filterId:av(t),bindings:r},ngContent:null}},N.ɵted=function(e,t,n){for(var r=[],i=1;i<n.length;i++)r[i-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[i]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:r,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}},N.ɵunv=function(e,t,n,r){if(Ep.isWrapped(r)){r=Ep.unwrap(r);var i=e.def.nodes[t].bindingIndex+n,o=Ep.unwrap(e.oldValues[i]);e.oldValues[i]=new Ep(o)}return r},N.ɵvid=function(e,i,t,n){for(var r=0,o=0,a=0,s=0,l=0,u=null,c=null,p=!1,d=!1,h=null,f=0;f<i.length;f++){var m=i[f];if(m.nodeIndex=f,m.parent=u,m.bindingIndex=r,m.outputIndex=o,m.renderParent=c,a|=m.flags,l|=m.matchedQueryIds,m.element){var v=m.element;v.publicProviders=u?u.element.publicProviders:Object.create(null),v.allProviders=v.publicProviders,d=p=!1,m.element.template&&(l|=m.element.template.nodeMatchedQueries)}if(eC(u,m,i.length),r+=m.bindings.length,o+=m.outputs.length,!c&&3&m.flags&&(h=m),20224&m.flags){p||(p=!0,u.element.publicProviders=Object.create(u.element.publicProviders),u.element.allProviders=u.element.publicProviders);var y=0!=(8192&m.flags),g=0!=(32768&m.flags);!y||g?u.element.publicProviders[Gm(m.provider.token)]=m:(d||(d=!0,u.element.allProviders=Object.create(u.element.publicProviders)),u.element.allProviders[Gm(m.provider.token)]=m),g&&(u.element.componentProvider=m)}if(u?(u.childFlags|=m.flags,u.directChildFlags|=m.flags,u.childMatchedQueries|=m.matchedQueryIds,m.element&&m.element.template&&(u.childMatchedQueries|=m.element.template.nodeMatchedQueries)):s|=m.flags,0<m.childCount)Jx(u=m)||(c=m);else for(;u&&f===u.nodeIndex+u.childCount;){var _=u.parent;_&&(_.childFlags|=u.childFlags,_.childMatchedQueries|=u.childMatchedQueries),c=(u=_)&&Jx(u)?u.renderParent:u}}return{factory:null,nodeFlags:a,rootNodeFlags:s,nodeMatchedQueries:l,flags:e,nodes:i,updateDirectives:t||Hm,updateRenderer:n||Hm,handleEvent:function(e,t,n,r){return i[t].element.handleEvent(e,n,r)},bindingCount:r,outputCount:o,lastRenderRootNode:h}},Object.defineProperty(N,\"__esModule\",{value:!0})}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"rxjs\"),require(\"@angular/core\")):System.registerDynamic(\"npm:@angular/cdk/bundles/cdk-collections.umd.js\",[\"tslib\",\"rxjs\",\"@angular/core\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"rxjs\"),e(\"@angular/core\"))})}(0,function(e,a,i,t){\"use strict\";function n(){}var r,o=(r=n,a.__extends(s,r),s.prototype.connect=function(){return this._data instanceof i.Observable?this._data:i.of(this._data)},s.prototype.disconnect=function(){},s);function s(e){var t=r.call(this)||this;return t._data=e,t}var l=(Object.defineProperty(u.prototype,\"selected\",{get:function(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected},enumerable:!0,configurable:!0}),u.prototype.select=function(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];this._verifyValueAssignment(e),e.forEach(function(e){return t._markSelected(e)}),this._emitChangeEvent()},u.prototype.deselect=function(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];this._verifyValueAssignment(e),e.forEach(function(e){return t._unmarkSelected(e)}),this._emitChangeEvent()},u.prototype.toggle=function(e){this.isSelected(e)?this.deselect(e):this.select(e)},u.prototype.clear=function(){this._unmarkAll(),this._emitChangeEvent()},u.prototype.isSelected=function(e){return this._selection.has(e)},u.prototype.isEmpty=function(){return 0===this._selection.size},u.prototype.hasValue=function(){return!this.isEmpty()},u.prototype.sort=function(e){this._multiple&&this.selected&&this._selected.sort(e)},u.prototype.isMultipleSelection=function(){return this._multiple},u.prototype._emitChangeEvent=function(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])},u.prototype._markSelected=function(e){this.isSelected(e)||(this._multiple||this._unmarkAll(),this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))},u.prototype._unmarkSelected=function(e){this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))},u.prototype._unmarkAll=function(){var t=this;this.isEmpty()||this._selection.forEach(function(e){return t._unmarkSelected(e)})},u.prototype._verifyValueAssignment=function(e){if(1<e.length&&!this._multiple)throw c()},u);function u(e,t,n){var r=this;void 0===e&&(e=!1),void 0===n&&(n=!0),this._multiple=e,this._emitChanges=n,this._selection=new Set,this._deselectedToEmit=[],this._selectedToEmit=[],this.changed=new i.Subject,this.onChange=this.changed,t&&t.length&&(e?t.forEach(function(e){return r._markSelected(e)}):this._markSelected(t[0]),this._selectedToEmit.length=0)}function c(){return Error(\"Cannot pass multiple values into SelectionModel with single-value mode.\")}var p=(d.prototype.notify=function(e,t){var n,r;try{for(var i=a.__values(this._listeners),o=i.next();!o.done;o=i.next())(0,o.value)(e,t)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}},d.prototype.listen=function(t){var e=this;return this._listeners.push(t),function(){e._listeners=e._listeners.filter(function(e){return t!==e})}},d.prototype.ngOnDestroy=function(){this._listeners=[]},d.decorators=[{type:t.Injectable,args:[{providedIn:\"root\"}]}],d.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new d},token:d,providedIn:\"root\"}),d);function d(){this._listeners=[]}e.UniqueSelectionDispatcher=p,e.ArrayDataSource=o,e.DataSource=n,e.isDataSource=function(e){return e&&\"function\"==typeof e.connect},e.SelectionModel=l,e.getMultipleValuesInSingleSelectionError=c,Object.defineProperty(e,\"__esModule\",{value:!0})}),System.registerDynamic(\"npm:rxjs/internal/scheduler/AnimationFrameAction.js\",[\"./AsyncAction\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./AsyncAction\"),s=(o=a.AsyncAction,i(l,o),l.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),null!==n&&0<n?o.prototype.requestAsyncId.call(this,e,t,n):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame(function(){return e.flush(null)})))},l.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&0<n||null===n&&0<this.delay)return o.prototype.recycleAsyncId.call(this,e,t,n);0===e.actions.length&&(cancelAnimationFrame(t),e.scheduled=void 0)},l);function l(e,t){var n=o.call(this,e,t)||this;return n.scheduler=e,n.work=t,n}t.AnimationFrameAction=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/AnimationFrameScheduler.js\",[\"./AsyncScheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./AsyncScheduler\"),s=(o=a.AsyncScheduler,i(l,o),l.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,r=-1,i=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++r<i&&(e=n.shift()));if(this.active=!1,t){for(;++r<i&&(e=n.shift());)e.unsubscribe();throw t}},l);function l(){return null!==o&&o.apply(this,arguments)||this}t.AnimationFrameScheduler=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/animationFrame.js\",[\"./AnimationFrameAction\",\"./AnimationFrameScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./AnimationFrameAction\"),i=e(\"./AnimationFrameScheduler\");t.animationFrame=new i.AnimationFrameScheduler(r.AnimationFrameAction)}),System.registerDynamic(\"npm:rxjs/internal/scheduler/VirtualTimeScheduler.js\",[\"./AsyncAction\",\"./AsyncScheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./AsyncAction\"),s=e(\"./AsyncScheduler\"),l=(o=s.AsyncScheduler,i(u,o),u.prototype.flush=function(){for(var e,t,n=this.actions,r=this.maxFrames;(t=n[0])&&t.delay<=r&&(n.shift(),this.frame=t.delay,!(e=t.execute(t.state,t.delay))););if(e){for(;t=n.shift();)t.unsubscribe();throw e}},u.frameTimeFactor=10,u);function u(e,t){void 0===e&&(e=p),void 0===t&&(t=Number.POSITIVE_INFINITY);var n=o.call(this,e,function(){return n.frame})||this;return n.maxFrames=t,n.frame=0,n.index=-1,n}t.VirtualTimeScheduler=l;var c,p=(c=a.AsyncAction,i(d,c),d.prototype.schedule=function(e,t){if(void 0===t&&(t=0),!this.id)return c.prototype.schedule.call(this,e,t);this.active=!1;var n=new d(this.scheduler,this.work);return this.add(n),n.schedule(e,t)},d.prototype.requestAsyncId=function(e,t,n){void 0===n&&(n=0),this.delay=e.frame+n;var r=e.actions;return r.push(this),r.sort(d.sortActions),!0},d.prototype.recycleAsyncId=function(e,t,n){void 0===n&&(n=0)},d.prototype._execute=function(e,t){if(!0===this.active)return c.prototype._execute.call(this,e,t)},d.sortActions=function(e,t){return e.delay===t.delay?e.index===t.index?0:e.index>t.index?1:-1:e.delay>t.delay?1:-1},d);function d(e,t,n){void 0===n&&(n=e.index+=1);var r=c.call(this,e,t)||this;return r.scheduler=e,r.work=t,r.index=n,r.active=!0,r.index=e.index=n,r}t.VirtualAction=p}),System.registerDynamic(\"npm:rxjs/internal/util/isObservable.js\",[\"../Observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\");t.isObservable=function(e){return!!e&&(e instanceof r.Observable||\"function\"==typeof e.lift&&\"function\"==typeof e.subscribe)}}),System.registerDynamic(\"npm:rxjs/internal/observable/bindCallback.js\",[\"../Observable\",\"../AsyncSubject\",\"../operators/map\",\"../util/canReportError\",\"../util/isArray\",\"../util/isScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var l=e(\"../Observable\"),u=e(\"../AsyncSubject\"),i=e(\"../operators/map\"),c=e(\"../util/canReportError\"),o=e(\"../util/isArray\"),p=e(\"../util/isScheduler\");function d(e){var r=this,t=e.args,n=e.subscriber,i=e.params,o=i.callbackFunc,a=i.context,s=i.scheduler,l=i.subject;if(!l){l=i.subject=new u.AsyncSubject;try{o.apply(a,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.length<=1?e[0]:e;r.add(s.schedule(h,0,{value:n,subject:l}))}]))}catch(e){l.error(e)}}this.add(l.subscribe(n))}function h(e){var t=e.value,n=e.subject;n.next(t),n.complete()}t.bindCallback=function n(a,r,s){if(r){if(!p.isScheduler(r))return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(a,s).apply(void 0,e).pipe(i.map(function(e){return o.isArray(e)?r.apply(void 0,e):r(e)}))};s=r}return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r,i=this,o={context:i,subject:r,callbackFunc:a,scheduler:s};return new l.Observable(function(e){if(s){var t={args:n,subscriber:e,params:o};return s.schedule(d,0,t)}if(!r){r=new u.AsyncSubject;try{a.apply(i,n.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];r.next(e.length<=1?e[0]:e),r.complete()}]))}catch(e){c.canReportError(r)?r.error(e):console.warn(e)}}return r.subscribe(e)})}}}),System.registerDynamic(\"npm:rxjs/internal/observable/bindNodeCallback.js\",[\"../Observable\",\"../AsyncSubject\",\"../operators/map\",\"../util/canReportError\",\"../util/isScheduler\",\"../util/isArray\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var s=e(\"../Observable\"),u=e(\"../AsyncSubject\"),i=e(\"../operators/map\"),l=e(\"../util/canReportError\"),c=e(\"../util/isScheduler\"),p=e(\"../util/isArray\");function d(e){var i=this,t=e.params,n=e.subscriber,r=e.context,o=t.callbackFunc,a=t.args,s=t.scheduler,l=t.subject;if(!l){l=t.subject=new u.AsyncSubject;try{o.apply(r,a.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.shift();if(n)i.add(s.schedule(f,0,{err:n,subject:l}));else{var r=e.length<=1?e[0]:e;i.add(s.schedule(h,0,{value:r,subject:l}))}}]))}catch(e){this.add(s.schedule(f,0,{err:e,subject:l}))}}this.add(l.subscribe(n))}function h(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function f(e){var t=e.err;e.subject.error(t)}t.bindNodeCallback=function n(o,r,a){if(r){if(!c.isScheduler(r))return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(o,a).apply(void 0,e).pipe(i.map(function(e){return p.isArray(e)?r.apply(void 0,e):r(e)}))};a=r}return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var i={subject:void 0,args:n,callbackFunc:o,scheduler:a,context:this};return new s.Observable(function(e){var t=i.context,r=i.subject;if(a)return a.schedule(d,0,{params:i,subscriber:e,context:t});if(!r){r=i.subject=new u.AsyncSubject;try{o.apply(t,n.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.shift();n?r.error(n):(r.next(e.length<=1?e[0]:e),r.complete())}]))}catch(e){l.canReportError(r)?r.error(e):console.warn(e)}}return r.subscribe(e)})}}}),System.registerDynamic(\"npm:rxjs/internal/observable/forkJoin.js\",[\"../Observable\",\"../util/isArray\",\"../operators/map\",\"../util/isObject\",\"./from\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),o=e(\"../util/isArray\"),a=e(\"../operators/map\"),s=e(\"../util/isObject\"),c=e(\"./from\");function l(l,u){return new r.Observable(function(r){var i=l.length;if(0!==i)for(var o=new Array(i),a=0,s=0,e=function(t){var e=c.from(l[t]),n=!1;r.add(e.subscribe({next:function(e){n||(n=!0,s++),o[t]=e},error:function(e){return r.error(e)},complete:function(){++a!==i&&n||(s===i&&r.next(u?u.reduce(function(e,t,n){return e[t]=o[n],e},{}):o),r.complete())}}))},t=0;t<i;t++)e(t);else r.complete()})}t.forkJoin=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){var n=e[0];if(o.isArray(n))return l(n,null);if(s.isObject(n)&&Object.getPrototypeOf(n)===Object.prototype){var r=Object.keys(n);return l(r.map(function(e){return n[e]}),r)}}if(\"function\"!=typeof e[e.length-1])return l(e,null);var i=e.pop();return l(e=1===e.length&&o.isArray(e[0])?e[0]:e,null).pipe(a.map(function(e){return i.apply(void 0,e)}))}}),System.registerDynamic(\"npm:rxjs/internal/observable/fromEvent.js\",[\"../Observable\",\"../util/isArray\",\"../util/isFunction\",\"../operators/map\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../util/isArray\"),s=e(\"../util/isFunction\"),l=e(\"../operators/map\");Object.prototype.toString;t.fromEvent=function e(n,r,i,t){return s.isFunction(i)&&(t=i,i=void 0),t?e(n,r,i).pipe(l.map(function(e){return a.isArray(e)?t.apply(void 0,e):t(e)})):new o.Observable(function(t){!function e(t,n,r,i,o){var a,s,l,u;if((u=t)&&\"function\"==typeof u.addEventListener&&\"function\"==typeof u.removeEventListener){var c=t;t.addEventListener(n,r,o),a=function(){return c.removeEventListener(n,r,o)}}else if((l=t)&&\"function\"==typeof l.on&&\"function\"==typeof l.off){var p=t;t.on(n,r),a=function(){return p.off(n,r)}}else if((s=t)&&\"function\"==typeof s.addListener&&\"function\"==typeof s.removeListener){var d=t;t.addListener(n,r),a=function(){return d.removeListener(n,r)}}else{if(!t||!t.length)throw new TypeError(\"Invalid event target\");for(var h=0,f=t.length;h<f;h++)e(t[h],n,r,i,o)}i.add(a)}(n,r,function(e){1<arguments.length?t.next(Array.prototype.slice.call(arguments)):t.next(e)},t,i)})}}),System.registerDynamic(\"npm:rxjs/internal/observable/fromEventPattern.js\",[\"../Observable\",\"../util/isArray\",\"../util/isFunction\",\"../operators/map\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../util/isArray\"),s=e(\"../util/isFunction\"),l=e(\"../operators/map\");t.fromEventPattern=function e(r,i,t){return t?e(r,i).pipe(l.map(function(e){return a.isArray(e)?t.apply(void 0,e):t(e)})):new o.Observable(function(n){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n.next(1===e.length?e[0]:e)}var t;try{t=r(e)}catch(e){return void n.error(e)}if(s.isFunction(i))return function(){return i(e,t)}})}}),System.registerDynamic(\"npm:rxjs/internal/observable/generate.js\",[\"../Observable\",\"../util/identity\",\"../util/isScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),u=e(\"../util/identity\"),c=e(\"../util/isScheduler\");function p(e){var t=e.subscriber,n=e.condition;if(!t.closed){if(e.needIterate)try{e.state=e.iterate(e.state)}catch(e){return void t.error(e)}else e.needIterate=!0;if(n){var r=void 0;try{r=n(e.state)}catch(e){return void t.error(e)}if(!r)return void t.complete();if(t.closed)return}var i;try{i=e.resultSelector(e.state)}catch(e){return void t.error(e)}if(!t.closed&&(t.next(i),!t.closed))return this.schedule(e)}}t.generate=function(e,i,o,t,a){var s,l;if(1==arguments.length){var n=e;l=n.initialState,i=n.condition,o=n.iterate,s=n.resultSelector||u.identity,a=n.scheduler}else void 0===t||c.isScheduler(t)?(l=e,s=u.identity,a=t):(l=e,s=t);return new r.Observable(function(t){var e=l;if(a)return a.schedule(p,0,{subscriber:t,iterate:o,condition:i,resultSelector:s,state:e});for(;;){if(i){var n=void 0;try{n=i(e)}catch(e){return void t.error(e)}if(!n){t.complete();break}}var r=void 0;try{r=s(e)}catch(e){return void t.error(e)}if(t.next(r),t.closed)break;try{e=o(e)}catch(e){return void t.error(e)}}})}}),System.registerDynamic(\"npm:rxjs/internal/observable/iif.js\",[\"./defer\",\"./empty\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./defer\"),i=e(\"./empty\");t.iif=function(e,t,n){return void 0===t&&(t=i.EMPTY),void 0===n&&(n=i.EMPTY),r.defer(function(){return e()?t:n})}}),System.registerDynamic(\"npm:rxjs/internal/observable/interval.js\",[\"../Observable\",\"../scheduler/async\",\"../util/isNumeric\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),i=e(\"../scheduler/async\"),o=e(\"../util/isNumeric\");function a(e){var t=e.subscriber,n=e.counter,r=e.period;t.next(n),this.schedule({subscriber:t,counter:n+1,period:r},r)}t.interval=function(t,n){return void 0===t&&(t=0),void 0===n&&(n=i.async),(!o.isNumeric(t)||t<0)&&(t=0),n&&\"function\"==typeof n.schedule||(n=i.async),new r.Observable(function(e){return e.add(n.schedule(a,t,{subscriber:e,counter:0,period:t})),e})}}),System.registerDynamic(\"npm:rxjs/internal/observable/never.js\",[\"../Observable\",\"../util/noop\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),i=e(\"../util/noop\");t.NEVER=new r.Observable(i.noop),t.never=function(){return t.NEVER}}),System.registerDynamic(\"npm:rxjs/internal/observable/onErrorResumeNext.js\",[\"../Observable\",\"./from\",\"../util/isArray\",\"./empty\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"./from\"),s=e(\"../util/isArray\"),l=e(\"./empty\");t.onErrorResumeNext=function n(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(0===e.length)return l.EMPTY;var r=e[0],i=e.slice(1);return 1===e.length&&s.isArray(r)?n.apply(void 0,r):new o.Observable(function(t){function e(){return t.add(n.apply(void 0,i).subscribe(t))}return a.from(r).subscribe({next:function(e){t.next(e)},error:e,complete:e})})}}),System.registerDynamic(\"npm:rxjs/internal/observable/pairs.js\",[\"../Observable\",\"../Subscription\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../Subscription\");function s(e){var t=e.keys,n=e.index,r=e.subscriber,i=e.subscription,o=e.obj;if(!r.closed)if(n<t.length){var a=t[n];r.next([a,o[a]]),i.add(this.schedule({keys:t,index:n+1,subscriber:r,subscription:i,obj:o}))}else r.complete()}t.pairs=function(i,r){return r?new o.Observable(function(e){var t=Object.keys(i),n=new a.Subscription;return n.add(r.schedule(s,0,{keys:t,index:0,subscriber:e,subscription:n,obj:i})),n}):new o.Observable(function(e){for(var t=Object.keys(i),n=0;n<t.length&&!e.closed;n++){var r=t[n];i.hasOwnProperty(r)&&e.next([r,i[r]])}e.complete()})},t.dispatch=s}),System.registerDynamic(\"npm:rxjs/internal/observable/partition.js\",[\"../util/not\",\"../util/subscribeTo\",\"../operators/filter\",\"../Observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../util/not\"),i=e(\"../util/subscribeTo\"),o=e(\"../operators/filter\"),a=e(\"../Observable\");t.partition=function(e,t,n){return[o.filter(t,n)(new a.Observable(i.subscribeTo(e))),o.filter(r.not(t,n))(new a.Observable(i.subscribeTo(e)))]}}),System.registerDynamic(\"npm:rxjs/internal/observable/range.js\",[\"../Observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var a=e(\"../Observable\");function s(e){var t=e.start,n=e.index,r=e.count,i=e.subscriber;r<=n?i.complete():(i.next(t),i.closed||(e.index=n+1,e.start=t+1,this.schedule(e)))}t.range=function(r,i,o){return void 0===r&&(r=0),new a.Observable(function(e){void 0===i&&(i=r,r=0);var t=0,n=r;if(o)return o.schedule(s,0,{index:t,count:i,start:r,subscriber:e});for(;;){if(t++>=i){e.complete();break}if(e.next(n++),e.closed)break}})},t.dispatch=s}),System.registerDynamic(\"npm:rxjs/internal/observable/using.js\",[\"../Observable\",\"./from\",\"./empty\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),a=e(\"./from\"),s=e(\"./empty\");t.using=function(i,o){return new r.Observable(function(t){var e,n;try{e=i()}catch(e){return void t.error(e)}try{n=o(e)}catch(e){return void t.error(e)}var r=(n?a.from(n):s.EMPTY).subscribe(t);return function(){r.unsubscribe(),e&&e.unsubscribe()}})}}),System.registerDynamic(\"npm:rxjs/index.js\",[\"./internal/Observable\",\"./internal/observable/ConnectableObservable\",\"./internal/operators/groupBy\",\"./internal/symbol/observable\",\"./internal/Subject\",\"./internal/BehaviorSubject\",\"./internal/ReplaySubject\",\"./internal/AsyncSubject\",\"./internal/scheduler/asap\",\"./internal/scheduler/async\",\"./internal/scheduler/queue\",\"./internal/scheduler/animationFrame\",\"./internal/scheduler/VirtualTimeScheduler\",\"./internal/Scheduler\",\"./internal/Subscription\",\"./internal/Subscriber\",\"./internal/Notification\",\"./internal/util/pipe\",\"./internal/util/noop\",\"./internal/util/identity\",\"./internal/util/isObservable\",\"./internal/util/ArgumentOutOfRangeError\",\"./internal/util/EmptyError\",\"./internal/util/ObjectUnsubscribedError\",\"./internal/util/UnsubscriptionError\",\"./internal/util/TimeoutError\",\"./internal/observable/bindCallback\",\"./internal/observable/bindNodeCallback\",\"./internal/observable/combineLatest\",\"./internal/observable/concat\",\"./internal/observable/defer\",\"./internal/observable/empty\",\"./internal/observable/forkJoin\",\"./internal/observable/from\",\"./internal/observable/fromEvent\",\"./internal/observable/fromEventPattern\",\"./internal/observable/generate\",\"./internal/observable/iif\",\"./internal/observable/interval\",\"./internal/observable/merge\",\"./internal/observable/never\",\"./internal/observable/of\",\"./internal/observable/onErrorResumeNext\",\"./internal/observable/pairs\",\"./internal/observable/partition\",\"./internal/observable/race\",\"./internal/observable/range\",\"./internal/observable/throwError\",\"./internal/observable/timer\",\"./internal/observable/using\",\"./internal/observable/zip\",\"./internal/scheduled/scheduled\",\"./internal/config\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./internal/Observable\");t.Observable=r.Observable;var i=e(\"./internal/observable/ConnectableObservable\");t.ConnectableObservable=i.ConnectableObservable;var o=e(\"./internal/operators/groupBy\");t.GroupedObservable=o.GroupedObservable;var a=e(\"./internal/symbol/observable\");t.observable=a.observable;var s=e(\"./internal/Subject\");t.Subject=s.Subject;var l=e(\"./internal/BehaviorSubject\");t.BehaviorSubject=l.BehaviorSubject;var u=e(\"./internal/ReplaySubject\");t.ReplaySubject=u.ReplaySubject;var c=e(\"./internal/AsyncSubject\");t.AsyncSubject=c.AsyncSubject;var p=e(\"./internal/scheduler/asap\");t.asapScheduler=p.asap;var d=e(\"./internal/scheduler/async\");t.asyncScheduler=d.async;var h=e(\"./internal/scheduler/queue\");t.queueScheduler=h.queue;var f=e(\"./internal/scheduler/animationFrame\");t.animationFrameScheduler=f.animationFrame;var m=e(\"./internal/scheduler/VirtualTimeScheduler\");t.VirtualTimeScheduler=m.VirtualTimeScheduler,t.VirtualAction=m.VirtualAction;var v=e(\"./internal/Scheduler\");t.Scheduler=v.Scheduler;var y=e(\"./internal/Subscription\");t.Subscription=y.Subscription;var g=e(\"./internal/Subscriber\");t.Subscriber=g.Subscriber;var _=e(\"./internal/Notification\");t.Notification=_.Notification,t.NotificationKind=_.NotificationKind;var b=e(\"./internal/util/pipe\");t.pipe=b.pipe;var w=e(\"./internal/util/noop\");t.noop=w.noop;var x=e(\"./internal/util/identity\");t.identity=x.identity;var C=e(\"./internal/util/isObservable\");t.isObservable=C.isObservable;var S=e(\"./internal/util/ArgumentOutOfRangeError\");t.ArgumentOutOfRangeError=S.ArgumentOutOfRangeError;var E=e(\"./internal/util/EmptyError\");t.EmptyError=E.EmptyError;var O=e(\"./internal/util/ObjectUnsubscribedError\");t.ObjectUnsubscribedError=O.ObjectUnsubscribedError;var k=e(\"./internal/util/UnsubscriptionError\");t.UnsubscriptionError=k.UnsubscriptionError;var D=e(\"./internal/util/TimeoutError\");t.TimeoutError=D.TimeoutError;var T=e(\"./internal/observable/bindCallback\");t.bindCallback=T.bindCallback;var I=e(\"./internal/observable/bindNodeCallback\");t.bindNodeCallback=I.bindNodeCallback;var P=e(\"./internal/observable/combineLatest\");t.combineLatest=P.combineLatest;var A=e(\"./internal/observable/concat\");t.concat=A.concat;var M=e(\"./internal/observable/defer\");t.defer=M.defer;var R=e(\"./internal/observable/empty\");t.empty=R.empty;var N=e(\"./internal/observable/forkJoin\");t.forkJoin=N.forkJoin;var j=e(\"./internal/observable/from\");t.from=j.from;var F=e(\"./internal/observable/fromEvent\");t.fromEvent=F.fromEvent;var L=e(\"./internal/observable/fromEventPattern\");t.fromEventPattern=L.fromEventPattern;var V=e(\"./internal/observable/generate\");t.generate=V.generate;var B=e(\"./internal/observable/iif\");t.iif=B.iif;var U=e(\"./internal/observable/interval\");t.interval=U.interval;var z=e(\"./internal/observable/merge\");t.merge=z.merge;var q=e(\"./internal/observable/never\");t.never=q.never;var H=e(\"./internal/observable/of\");t.of=H.of;var W=e(\"./internal/observable/onErrorResumeNext\");t.onErrorResumeNext=W.onErrorResumeNext;var G=e(\"./internal/observable/pairs\");t.pairs=G.pairs;var Y=e(\"./internal/observable/partition\");t.partition=Y.partition;var K=e(\"./internal/observable/race\");t.race=K.race;var Z=e(\"./internal/observable/range\");t.range=Z.range;var Q=e(\"./internal/observable/throwError\");t.throwError=Q.throwError;var X=e(\"./internal/observable/timer\");t.timer=X.timer;var $=e(\"./internal/observable/using\");t.using=$.using;var J=e(\"./internal/observable/zip\");t.zip=J.zip;var ee=e(\"./internal/scheduled/scheduled\");t.scheduled=ee.scheduled;var te=e(\"./internal/observable/empty\");t.EMPTY=te.EMPTY;var ne=e(\"./internal/observable/never\");t.NEVER=ne.NEVER;var re=e(\"./internal/config\");t.config=re.config}),System.registerDynamic(\"npm:rxjs/internal/operators/audit.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.audit=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.durationSelector))},l);function l(e){this.durationSelector=e}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype._next=function(e){if(this.value=e,this.hasValue=!0,!this.throttled){var t=void 0;try{t=(0,this.durationSelector)(e)}catch(e){return this.destination.error(e)}var n=a.subscribeToResult(this,t);!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}},p.prototype.clearThrottle=function(){var e=this.value,t=this.hasValue,n=this.throttled;n&&(this.remove(n),this.throttled=null,n.unsubscribe()),t&&(this.value=null,this.hasValue=!1,this.destination.next(e))},p.prototype.notifyNext=function(e,t,n,r){this.clearThrottle()},p.prototype.notifyComplete=function(){this.clearThrottle()},p);function p(e,t){var n=u.call(this,e)||this;return n.durationSelector=t,n.hasValue=!1,n}}),System.registerDynamic(\"npm:rxjs/internal/observable/timer.js\",[\"../Observable\",\"../scheduler/async\",\"../util/isNumeric\",\"../util/isScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../scheduler/async\"),s=e(\"../util/isNumeric\"),l=e(\"../util/isScheduler\");function u(e){var t=e.index,n=e.period,r=e.subscriber;if(r.next(t),!r.closed){if(-1===n)return r.complete();e.index=t+1,this.schedule(e,n)}}t.timer=function(n,e,r){void 0===n&&(n=0);var i=-1;return s.isNumeric(e)?i=Number(e)<1?1:Number(e):l.isScheduler(e)&&(r=e),l.isScheduler(r)||(r=a.async),new o.Observable(function(e){var t=s.isNumeric(n)?n:+n-r.now();return r.schedule(u,t,{index:0,period:i,subscriber:e})})}}),System.registerDynamic(\"npm:rxjs/internal/operators/auditTime.js\",[\"../scheduler/async\",\"./audit\",\"../observable/timer\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../scheduler/async\"),i=e(\"./audit\"),o=e(\"../observable/timer\");t.auditTime=function(e,t){return void 0===t&&(t=r.async),i.audit(function(){return o.timer(e,t)})}}),System.registerDynamic(\"npm:rxjs/internal/operators/buffer.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.buffer=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.closingNotifier))},l);function l(e){this.closingNotifier=e}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype._next=function(e){this.buffer.push(e)},p.prototype.notifyNext=function(e,t,n,r,i){var o=this.buffer;this.buffer=[],this.destination.next(o)},p);function p(e,t){var n=u.call(this,e)||this;return n.buffer=[],n.add(a.subscribeToResult(n,t)),n}}),System.registerDynamic(\"npm:rxjs/internal/operators/bufferCount.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.bufferCount=function(t,n){return void 0===n&&(n=null),function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new this.subscriberClass(e,this.bufferSize,this.startBufferEvery))},s);function s(e,t){this.bufferSize=e,this.startBufferEvery=t,this.subscriberClass=t&&e!==t?d:u}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){var t=this.buffer;t.push(e),t.length==this.bufferSize&&(this.destination.next(t),this.buffer=[])},c.prototype._complete=function(){var e=this.buffer;0<e.length&&this.destination.next(e),l.prototype._complete.call(this)},c);function c(e,t){var n=l.call(this,e)||this;return n.bufferSize=t,n.buffer=[],n}var p,d=(p=o.Subscriber,i(h,p),h.prototype._next=function(e){var t=this.bufferSize,n=this.startBufferEvery,r=this.buffers,i=this.count;this.count++,i%n==0&&r.push([]);for(var o=r.length;o--;){var a=r[o];a.push(e),a.length===t&&(r.splice(o,1),this.destination.next(a))}},h.prototype._complete=function(){for(var e=this.buffers,t=this.destination;0<e.length;){var n=e.shift();0<n.length&&t.next(n)}p.prototype._complete.call(this)},h);function h(e,t,n){var r=p.call(this,e)||this;return r.bufferSize=t,r.startBufferEvery=n,r.buffers=[],r.count=0,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/bufferTime.js\",[\"../scheduler/async\",\"../Subscriber\",\"../util/isScheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../scheduler/async\"),a=e(\"../Subscriber\"),s=e(\"../util/isScheduler\");t.bufferTime=function(t){var e=arguments.length,n=o.async;s.isScheduler(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],e--);var r=null;2<=e&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return 3<=e&&(i=arguments[2]),function(e){return e.lift(new l(t,r,i,n))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new d(e,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},u);function u(e,t,n,r){this.bufferTimeSpan=e,this.bufferCreationInterval=t,this.maxBufferSize=n,this.scheduler=r}var c,p=function(){this.buffer=[]},d=(c=a.Subscriber,i(h,c),h.prototype._next=function(e){for(var t,n=this.contexts,r=n.length,i=0;i<r;i++){var o=n[i],a=o.buffer;a.push(e),a.length==this.maxBufferSize&&(t=o)}t&&this.onBufferFull(t)},h.prototype._error=function(e){this.contexts.length=0,c.prototype._error.call(this,e)},h.prototype._complete=function(){for(var e=this.contexts,t=this.destination;0<e.length;){var n=e.shift();t.next(n.buffer)}c.prototype._complete.call(this)},h.prototype._unsubscribe=function(){this.contexts=null},h.prototype.onBufferFull=function(e){this.closeContext(e);var t=e.closeAction;if(t.unsubscribe(),this.remove(t),!this.closed&&this.timespanOnly){e=this.openContext();var n=this.bufferTimeSpan,r={subscriber:this,context:e,bufferTimeSpan:n};this.add(e.closeAction=this.scheduler.schedule(f,n,r))}},h.prototype.openContext=function(){var e=new p;return this.contexts.push(e),e},h.prototype.closeContext=function(e){this.destination.next(e.buffer);var t=this.contexts;0<=(t?t.indexOf(e):-1)&&t.splice(t.indexOf(e),1)},h);function h(e,t,n,r,i){var o=c.call(this,e)||this;o.bufferTimeSpan=t,o.bufferCreationInterval=n,o.maxBufferSize=r,o.scheduler=i,o.contexts=[];var a=o.openContext();if(o.timespanOnly=null==n||n<0,o.timespanOnly){var s={subscriber:o,context:a,bufferTimeSpan:t};o.add(a.closeAction=i.schedule(f,t,s))}else{var l={subscriber:o,context:a},u={bufferTimeSpan:t,bufferCreationInterval:n,subscriber:o,scheduler:i};o.add(a.closeAction=i.schedule(v,t,l)),o.add(i.schedule(m,n,u))}return o}function f(e){var t=e.subscriber,n=e.context;n&&t.closeContext(n),t.closed||(e.context=t.openContext(),e.context.closeAction=this.schedule(e,e.bufferTimeSpan))}function m(e){var t=e.bufferCreationInterval,n=e.bufferTimeSpan,r=e.subscriber,i=e.scheduler,o=r.openContext();r.closed||(r.add(o.closeAction=i.schedule(v,n,{subscriber:r,context:o})),this.schedule(e,t))}function v(e){var t=e.subscriber,n=e.context;t.closeContext(n)}}),System.registerDynamic(\"npm:rxjs/internal/operators/bufferToggle.js\",[\"../Subscription\",\"../util/subscribeToResult\",\"../OuterSubscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscription\"),a=e(\"../util/subscribeToResult\"),s=e(\"../OuterSubscriber\");t.bufferToggle=function(t,n){return function(e){return e.lift(new l(t,n))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.openings,this.closingSelector))},u);function u(e,t){this.openings=e,this.closingSelector=t}var c,p=(c=s.OuterSubscriber,i(d,c),d.prototype._next=function(e){for(var t=this.contexts,n=t.length,r=0;r<n;r++)t[r].buffer.push(e)},d.prototype._error=function(e){for(var t=this.contexts;0<t.length;){var n=t.shift();n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,c.prototype._error.call(this,e)},d.prototype._complete=function(){for(var e=this.contexts;0<e.length;){var t=e.shift();this.destination.next(t.buffer),t.subscription.unsubscribe(),t.buffer=null,t.subscription=null}this.contexts=null,c.prototype._complete.call(this)},d.prototype.notifyNext=function(e,t,n,r,i){e?this.closeBuffer(e):this.openBuffer(t)},d.prototype.notifyComplete=function(e){this.closeBuffer(e.context)},d.prototype.openBuffer=function(e){try{var t=this.closingSelector.call(this,e);t&&this.trySubscribe(t)}catch(e){this._error(e)}},d.prototype.closeBuffer=function(e){var t=this.contexts;if(t&&e){var n=e.buffer,r=e.subscription;this.destination.next(n),t.splice(t.indexOf(e),1),this.remove(r),r.unsubscribe()}},d.prototype.trySubscribe=function(e){var t=this.contexts,n=new o.Subscription,r={buffer:[],subscription:n};t.push(r);var i=a.subscribeToResult(this,e,r);!i||i.closed?this.closeBuffer(r):(i.context=r,this.add(i),n.add(i))},d);function d(e,t,n){var r=c.call(this,e)||this;return r.openings=t,r.closingSelector=n,r.contexts=[],r.add(a.subscribeToResult(r,t)),r}}),System.registerDynamic(\"npm:rxjs/internal/operators/bufferWhen.js\",[\"../Subscription\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscription\"),a=e(\"../OuterSubscriber\"),s=e(\"../util/subscribeToResult\");t.bufferWhen=function(t){return function(e){return e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.closingSelector))},u);function u(e){this.closingSelector=e}var c,p=(c=a.OuterSubscriber,i(d,c),d.prototype._next=function(e){this.buffer.push(e)},d.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),c.prototype._complete.call(this)},d.prototype._unsubscribe=function(){this.buffer=null,this.subscribing=!1},d.prototype.notifyNext=function(e,t,n,r,i){this.openBuffer()},d.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},d.prototype.openBuffer=function(){var e=this.closingSubscription;e&&(this.remove(e),e.unsubscribe());var t,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{t=(0,this.closingSelector)()}catch(e){return this.error(e)}e=new o.Subscription,this.closingSubscription=e,this.add(e),this.subscribing=!0,e.add(s.subscribeToResult(this,t)),this.subscribing=!1},d);function d(e,t){var n=c.call(this,e)||this;return n.closingSelector=t,n.subscribing=!1,n.openBuffer(),n}}),System.registerDynamic(\"npm:rxjs/internal/operators/catchError.js\",[\"../OuterSubscriber\",\"../InnerSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../InnerSubscriber\"),s=e(\"../util/subscribeToResult\");t.catchError=function(r){return function(e){var t=new l(r),n=e.lift(t);return t.caught=n}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.selector,this.caught))},u);function u(e){this.selector=e}var c,p=(c=o.OuterSubscriber,i(d,c),d.prototype.error=function(e){if(!this.isStopped){var t=void 0;try{t=this.selector(e,this.caught)}catch(e){return void c.prototype.error.call(this,e)}this._unsubscribeAndRecycle();var n=new a.InnerSubscriber(this,void 0,void 0);this.add(n),s.subscribeToResult(this,t,void 0,void 0,n)}},d);function d(e,t,n){var r=c.call(this,e)||this;return r.selector=t,r.caught=n,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/combineAll.js\",[\"../observable/combineLatest\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/combineLatest\");t.combineAll=function(t){return function(e){return e.lift(new r.CombineLatestOperator(t))}}}),System.registerDynamic(\"npm:rxjs/internal/observable/combineLatest.js\",[\"../util/isScheduler\",\"../util/isArray\",\"../OuterSubscriber\",\"../util/subscribeToResult\",\"./fromArray\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../util/isScheduler\"),a=e(\"../util/isArray\"),s=e(\"../OuterSubscriber\"),l=e(\"../util/subscribeToResult\"),u=e(\"./fromArray\"),c={};t.combineLatest=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=null,r=null;return o.isScheduler(e[e.length-1])&&(r=e.pop()),\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&a.isArray(e[0])&&(e=e[0]),u.fromArray(e,r).lift(new p(n))};var p=(d.prototype.call=function(e,t){return t.subscribe(new f(e,this.resultSelector))},d);function d(e){this.resultSelector=e}t.CombineLatestOperator=p;var h,f=(h=s.OuterSubscriber,i(m,h),m.prototype._next=function(e){this.values.push(c),this.observables.push(e)},m.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var r=e[n];this.add(l.subscribeToResult(this,r,r,n))}}},m.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},m.prototype.notifyNext=function(e,t,n,r,i){var o=this.values,a=o[n],s=this.toRespond?a===c?--this.toRespond:this.toRespond:0;o[n]=t,0===s&&(this.resultSelector?this._tryResultSelector(o):this.destination.next(o.slice()))},m.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},m);function m(e,t){var n=h.call(this,e)||this;return n.resultSelector=t,n.active=0,n.values=[],n.observables=[],n}t.CombineLatestSubscriber=f}),System.registerDynamic(\"npm:rxjs/internal/operators/combineLatest.js\",[\"../util/isArray\",\"../observable/combineLatest\",\"../observable/from\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../util/isArray\"),i=e(\"../observable/combineLatest\"),o=e(\"../observable/from\");t.combineLatest=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=null;return\"function\"==typeof t[t.length-1]&&(n=t.pop()),1===t.length&&r.isArray(t[0])&&(t=t[0].slice()),function(e){return e.lift.call(o.from([e].concat(t)),new i.CombineLatestOperator(n))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/concat.js\",[\"../observable/concat\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/concat\");t.concat=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return e.lift.call(r.concat.apply(void 0,[e].concat(t)))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/concatMap.js\",[\"./mergeMap\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./mergeMap\");t.concatMap=function(e,t){return r.mergeMap(e,t,1)}}),System.registerDynamic(\"npm:rxjs/internal/operators/concatMapTo.js\",[\"./concatMap\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./concatMap\");t.concatMapTo=function(e,t){return r.concatMap(function(){return e},t)}}),System.registerDynamic(\"npm:rxjs/internal/operators/count.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.count=function(t){return function(e){return e.lift(new a(t,e))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.source))},s);function s(e,t){this.predicate=e,this.source=t}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){this.predicate?this._tryPredicate(e):this.count++},c.prototype._tryPredicate=function(e){var t;try{t=this.predicate(e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t&&this.count++},c.prototype._complete=function(){this.destination.next(this.count),this.destination.complete()},c);function c(e,t,n){var r=l.call(this,e)||this;return r.predicate=t,r.source=n,r.count=0,r.index=0,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/debounce.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.debounce=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.durationSelector))},l);function l(e){this.durationSelector=e}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype._next=function(e){try{var t=this.durationSelector.call(this,e);t&&this._tryNext(e,t)}catch(e){this.destination.error(e)}},p.prototype._complete=function(){this.emitValue(),this.destination.complete()},p.prototype._tryNext=function(e,t){var n=this.durationSubscription;this.value=e,this.hasValue=!0,n&&(n.unsubscribe(),this.remove(n)),(n=a.subscribeToResult(this,t))&&!n.closed&&this.add(this.durationSubscription=n)},p.prototype.notifyNext=function(e,t,n,r,i){this.emitValue()},p.prototype.notifyComplete=function(){this.emitValue()},p.prototype.emitValue=function(){if(this.hasValue){var e=this.value,t=this.durationSubscription;t&&(this.durationSubscription=null,t.unsubscribe(),this.remove(t)),this.value=null,this.hasValue=!1,u.prototype._next.call(this,e)}},p);function p(e,t){var n=u.call(this,e)||this;return n.durationSelector=t,n.hasValue=!1,n.durationSubscription=null,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/debounceTime.js\",[\"../Subscriber\",\"../scheduler/async\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../scheduler/async\");t.debounceTime=function(t,n){return void 0===n&&(n=a.async),function(e){return e.lift(new s(t,n))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.dueTime,this.scheduler))},l);function l(e,t){this.dueTime=e,this.scheduler=t}var u,c=(u=o.Subscriber,i(p,u),p.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(d,this.dueTime,this))},p.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},p.prototype.debouncedNext=function(){if(this.clearDebounce(),this.hasValue){var e=this.lastValue;this.lastValue=null,this.hasValue=!1,this.destination.next(e)}},p.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},p);function p(e,t,n){var r=u.call(this,e)||this;return r.dueTime=t,r.scheduler=n,r.debouncedSubscription=null,r.lastValue=null,r.hasValue=!1,r}function d(e){e.debouncedNext()}}),System.registerDynamic(\"npm:rxjs/internal/operators/delay.js\",[\"../scheduler/async\",\"../util/isDate\",\"../Subscriber\",\"../Notification\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../scheduler/async\"),a=e(\"../util/isDate\"),s=e(\"../Subscriber\"),l=e(\"../Notification\");t.delay=function(e,t){void 0===t&&(t=o.async);var n=a.isDate(e)?+e-t.now():Math.abs(e);return function(e){return e.lift(new u(n,t))}};var u=(c.prototype.call=function(e,t){return t.subscribe(new d(e,this.delay,this.scheduler))},c);function c(e,t){this.delay=e,this.scheduler=t}var p,d=(p=s.Subscriber,i(h,p),h.dispatch=function(e){for(var t=e.source,n=t.queue,r=e.scheduler,i=e.destination;0<n.length&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(0<n.length){var o=Math.max(0,n[0].time-r.now());this.schedule(e,o)}else this.unsubscribe(),t.active=!1},h.prototype._schedule=function(e){this.active=!0,this.destination.add(e.schedule(h.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))},h.prototype.scheduleNotification=function(e){if(!0!==this.errored){var t=this.scheduler,n=new f(t.now()+this.delay,e);this.queue.push(n),!1===this.active&&this._schedule(t)}},h.prototype._next=function(e){this.scheduleNotification(l.Notification.createNext(e))},h.prototype._error=function(e){this.errored=!0,this.queue=[],this.destination.error(e),this.unsubscribe()},h.prototype._complete=function(){this.scheduleNotification(l.Notification.createComplete()),this.unsubscribe()},h);function h(e,t,n){var r=p.call(this,e)||this;return r.delay=t,r.scheduler=n,r.queue=[],r.active=!1,r.errored=!1,r}var f=function(e,t){this.time=e,this.notification=t}}),System.registerDynamic(\"npm:rxjs/internal/operators/delayWhen.js\",[\"../Subscriber\",\"../Observable\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../Observable\"),s=e(\"../OuterSubscriber\"),l=e(\"../util/subscribeToResult\");t.delayWhen=function(t,n){return n?function(e){return new m(e,n).lift(new u(t))}:function(e){return e.lift(new u(t))}};var u=(c.prototype.call=function(e,t){return t.subscribe(new d(e,this.delayDurationSelector))},c);function c(e){this.delayDurationSelector=e}var p,d=(p=s.OuterSubscriber,i(h,p),h.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(e),this.removeSubscription(i),this.tryComplete()},h.prototype.notifyError=function(e,t){this._error(e)},h.prototype.notifyComplete=function(e){var t=this.removeSubscription(e);t&&this.destination.next(t),this.tryComplete()},h.prototype._next=function(e){var t=this.index++;try{var n=this.delayDurationSelector(e,t);n&&this.tryDelay(n,e)}catch(e){this.destination.error(e)}},h.prototype._complete=function(){this.completed=!0,this.tryComplete(),this.unsubscribe()},h.prototype.removeSubscription=function(e){e.unsubscribe();var t=this.delayNotifierSubscriptions.indexOf(e);return-1!==t&&this.delayNotifierSubscriptions.splice(t,1),e.outerValue},h.prototype.tryDelay=function(e,t){var n=l.subscribeToResult(this,e,t);n&&!n.closed&&(this.destination.add(n),this.delayNotifierSubscriptions.push(n))},h.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},h);function h(e,t){var n=p.call(this,e)||this;return n.delayDurationSelector=t,n.completed=!1,n.delayNotifierSubscriptions=[],n.index=0,n}var f,m=(f=a.Observable,i(v,f),v.prototype._subscribe=function(e){this.subscriptionDelay.subscribe(new g(e,this.source))},v);function v(e,t){var n=f.call(this)||this;return n.source=e,n.subscriptionDelay=t,n}var y,g=(y=o.Subscriber,i(_,y),_.prototype._next=function(e){this.subscribeToSource()},_.prototype._error=function(e){this.unsubscribe(),this.parent.error(e)},_.prototype._complete=function(){this.unsubscribe(),this.subscribeToSource()},_.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},_);function _(e,t){var n=y.call(this)||this;return n.parent=e,n.source=t,n.sourceSubscribed=!1,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/dematerialize.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.dematerialize=function(){return function(e){return e.lift(new a)}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e))},s);function s(){}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){e.observe(this.destination)},c);function c(e){return l.call(this,e)||this}}),System.registerDynamic(\"npm:rxjs/internal/operators/distinct.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.distinct=function(t,n){return function(e){return e.lift(new s(t,n))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.keySelector,this.flushes))},l);function l(e,t){this.keySelector=e,this.flushes=t}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype.notifyNext=function(e,t,n,r,i){this.values.clear()},p.prototype.notifyError=function(e,t){this._error(e)},p.prototype._next=function(e){this.keySelector?this._useKeySelector(e):this._finalizeNext(e,e)},p.prototype._useKeySelector=function(e){var t,n=this.destination;try{t=this.keySelector(e)}catch(e){return void n.error(e)}this._finalizeNext(t,e)},p.prototype._finalizeNext=function(e,t){var n=this.values;n.has(e)||(n.add(e),this.destination.next(t))},p);function p(e,t,n){var r=u.call(this,e)||this;return r.keySelector=t,r.values=new Set,n&&r.add(a.subscribeToResult(r,n)),r}t.DistinctSubscriber=c}),System.registerDynamic(\"npm:rxjs/internal/operators/distinctUntilChanged.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.distinctUntilChanged=function(t,n){return function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.compare,this.keySelector))},s);function s(e,t){this.compare=e,this.keySelector=t}var l,u=(l=o.Subscriber,i(c,l),c.prototype.compare=function(e,t){return e===t},c.prototype._next=function(e){var t;try{var n=this.keySelector;t=n?n(e):e}catch(e){return this.destination.error(e)}var r=!1;if(this.hasKey)try{r=(0,this.compare)(this.key,t)}catch(e){return this.destination.error(e)}else this.hasKey=!0;r||(this.key=t,this.destination.next(e))},c);function c(e,t,n){var r=l.call(this,e)||this;return r.keySelector=n,r.hasKey=!1,\"function\"==typeof t&&(r.compare=t),r}}),System.registerDynamic(\"npm:rxjs/internal/operators/distinctUntilKeyChanged.js\",[\"./distinctUntilChanged\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"./distinctUntilChanged\");t.distinctUntilKeyChanged=function(n,r){return i.distinctUntilChanged(function(e,t){return r?r(e[n],t[n]):e[n]===t[n]})}}),System.registerDynamic(\"npm:rxjs/internal/operators/elementAt.js\",[\"../util/ArgumentOutOfRangeError\",\"./filter\",\"./throwIfEmpty\",\"./defaultIfEmpty\",\"./take\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"../util/ArgumentOutOfRangeError\"),o=e(\"./filter\"),a=e(\"./throwIfEmpty\"),s=e(\"./defaultIfEmpty\"),l=e(\"./take\");t.elementAt=function(n,t){if(n<0)throw new i.ArgumentOutOfRangeError;var r=2<=arguments.length;return function(e){return e.pipe(o.filter(function(e,t){return t===n}),l.take(1),r?s.defaultIfEmpty(t):a.throwIfEmpty(function(){return new i.ArgumentOutOfRangeError}))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/endWith.js\",[\"../observable/concat\",\"../observable/of\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/concat\"),i=e(\"../observable/of\");t.endWith=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return r.concat(e,i.of.apply(void 0,t))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/every.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.every=function(t,n){return function(e){return e.lift(new a(t,n,e))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.thisArg,this.source))},s);function s(e,t,n){this.predicate=e,this.thisArg=t,this.source=n}var l,u=(l=o.Subscriber,i(c,l),c.prototype.notifyComplete=function(e){this.destination.next(e),this.destination.complete()},c.prototype._next=function(e){var t=!1;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t||this.notifyComplete(!1)},c.prototype._complete=function(){this.notifyComplete(!0)},c);function c(e,t,n,r){var i=l.call(this,e)||this;return i.predicate=t,i.thisArg=n,i.source=r,i.index=0,i.thisArg=n||i,i}}),System.registerDynamic(\"npm:rxjs/internal/operators/exhaust.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.exhaust=function(){return function(e){return e.lift(new s)}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e))},l);function l(){}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype._next=function(e){this.hasSubscription||(this.hasSubscription=!0,this.add(a.subscribeToResult(this,e)))},p.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},p.prototype.notifyComplete=function(e){this.remove(e),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},p);function p(e){var t=u.call(this,e)||this;return t.hasCompleted=!1,t.hasSubscription=!1,t}}),System.registerDynamic(\"npm:rxjs/internal/operators/exhaustMap.js\",[\"../OuterSubscriber\",\"../InnerSubscriber\",\"../util/subscribeToResult\",\"./map\",\"../observable/from\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../InnerSubscriber\"),s=e(\"../util/subscribeToResult\"),l=e(\"./map\"),u=e(\"../observable/from\");t.exhaustMap=function t(i,o){return o?function(e){return e.pipe(t(function(n,r){return u.from(i(n,r)).pipe(l.map(function(e,t){return o(n,e,r,t)}))}))}:function(e){return e.lift(new c(i))}};var c=(p.prototype.call=function(e,t){return t.subscribe(new h(e,this.project))},p);function p(e){this.project=e}var d,h=(d=o.OuterSubscriber,i(f,d),f.prototype._next=function(e){this.hasSubscription||this.tryNext(e)},f.prototype.tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.hasSubscription=!0,this._innerSub(t,e,n)},f.prototype._innerSub=function(e,t,n){var r=new a.InnerSubscriber(this,void 0,void 0);this.destination.add(r),s.subscribeToResult(this,e,t,n,r)},f.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete(),this.unsubscribe()},f.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},f.prototype.notifyError=function(e){this.destination.error(e)},f.prototype.notifyComplete=function(e){this.destination.remove(e),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},f);function f(e,t){var n=d.call(this,e)||this;return n.project=t,n.hasSubscription=!1,n.hasCompleted=!1,n.index=0,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/expand.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.expand=function(t,n,r){return void 0===n&&(n=Number.POSITIVE_INFINITY),void 0===r&&(r=void 0),n=(n||0)<1?Number.POSITIVE_INFINITY:n,function(e){return e.lift(new s(t,n,r))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.project,this.concurrent,this.scheduler))},l);function l(e,t,n){this.project=e,this.concurrent=t,this.scheduler=n}t.ExpandOperator=s;var u,c=(u=o.OuterSubscriber,i(p,u),p.dispatch=function(e){var t=e.subscriber,n=e.result,r=e.value,i=e.index;t.subscribeToProjection(n,r,i)},p.prototype._next=function(e){var t=this.destination;if(t.closed)this._complete();else{var n=this.index++;if(this.active<this.concurrent){t.next(e);try{var r=(0,this.project)(e,n);if(this.scheduler){var i={subscriber:this,result:r,value:e,index:n};this.destination.add(this.scheduler.schedule(p.dispatch,0,i))}else this.subscribeToProjection(r,e,n)}catch(e){t.error(e)}}else this.buffer.push(e)}},p.prototype.subscribeToProjection=function(e,t,n){this.active++,this.destination.add(a.subscribeToResult(this,e,t,n))},p.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete(),this.unsubscribe()},p.prototype.notifyNext=function(e,t,n,r,i){this._next(t)},p.prototype.notifyComplete=function(e){var t=this.buffer;this.destination.remove(e),this.active--,t&&0<t.length&&this._next(t.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},p);function p(e,t,n,r){var i=u.call(this,e)||this;return i.project=t,i.concurrent=n,i.scheduler=r,i.index=0,i.active=0,i.hasCompleted=!1,n<Number.POSITIVE_INFINITY&&(i.buffer=[]),i}t.ExpandSubscriber=c}),System.registerDynamic(\"npm:rxjs/internal/operators/finalize.js\",[\"../Subscriber\",\"../Subscription\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../Subscription\");t.finalize=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.callback))},l);function l(e){this.callback=e}var u,c=(u=o.Subscriber,i(p,u),p);function p(e,t){var n=u.call(this,e)||this;return n.add(new a.Subscription(t)),n}}),System.registerDynamic(\"npm:rxjs/internal/operators/find.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.find=function(t,n){if(\"function\"!=typeof t)throw new TypeError(\"predicate is not a function\");return function(e){return e.lift(new a(t,e,!1,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.source,this.yieldIndex,this.thisArg))},s);function s(e,t,n,r){this.predicate=e,this.source=t,this.yieldIndex=n,this.thisArg=r}t.FindValueOperator=a;var l,u=(l=o.Subscriber,i(c,l),c.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete(),this.unsubscribe()},c.prototype._next=function(e){var t=this.predicate,n=this.thisArg,r=this.index++;try{t.call(n||this,e,r,this.source)&&this.notifyComplete(this.yieldIndex?r:e)}catch(e){this.destination.error(e)}},c.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},c);function c(e,t,n,r,i){var o=l.call(this,e)||this;return o.predicate=t,o.source=n,o.yieldIndex=r,o.thisArg=i,o.index=0,o}t.FindValueSubscriber=u}),System.registerDynamic(\"npm:rxjs/internal/operators/findIndex.js\",[\"../operators/find\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../operators/find\");t.findIndex=function(t,n){return function(e){return e.lift(new r.FindValueOperator(t,e,!0,n))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/first.js\",[\"../util/EmptyError\",\"./filter\",\"./take\",\"./defaultIfEmpty\",\"./throwIfEmpty\",\"../util/identity\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"../util/EmptyError\"),o=e(\"./filter\"),a=e(\"./take\"),s=e(\"./defaultIfEmpty\"),l=e(\"./throwIfEmpty\"),u=e(\"../util/identity\");t.first=function(r,e){var t=2<=arguments.length;return function(n){return n.pipe(r?o.filter(function(e,t){return r(e,t,n)}):u.identity,a.take(1),t?s.defaultIfEmpty(e):l.throwIfEmpty(function(){return new i.EmptyError}))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/groupBy.js\",[\"../Subscriber\",\"../Subscription\",\"../Observable\",\"../Subject\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../Subscription\"),s=e(\"../Observable\"),l=e(\"../Subject\");t.groupBy=function(t,n,r,i){return function(e){return e.lift(new u(t,n,r,i))}};var u=(c.prototype.call=function(e,t){return t.subscribe(new d(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},c);function c(e,t,n,r){this.keySelector=e,this.elementSelector=t,this.durationSelector=n,this.subjectSelector=r}var p,d=(p=o.Subscriber,i(h,p),h.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){return void this.error(e)}this._group(e,t)},h.prototype._group=function(e,t){var n,r=this.groups,i=(r=r||(this.groups=new Map)).get(t);if(this.elementSelector)try{n=this.elementSelector(e)}catch(e){this.error(e)}else n=e;if(!i){i=this.subjectSelector?this.subjectSelector():new l.Subject,r.set(t,i);var o=new g(t,i,this);if(this.destination.next(o),this.durationSelector){var a=void 0;try{a=this.durationSelector(new g(t,i))}catch(e){return void this.error(e)}this.add(a.subscribe(new m(t,i,this)))}}i.closed||i.next(n)},h.prototype._error=function(n){var e=this.groups;e&&(e.forEach(function(e,t){e.error(n)}),e.clear()),this.destination.error(n)},h.prototype._complete=function(){var e=this.groups;e&&(e.forEach(function(e,t){e.complete()}),e.clear()),this.destination.complete()},h.prototype.removeGroup=function(e){this.groups.delete(e)},h.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&p.prototype.unsubscribe.call(this))},h);function h(e,t,n,r,i){var o=p.call(this,e)||this;return o.keySelector=t,o.elementSelector=n,o.durationSelector=r,o.subjectSelector=i,o.groups=null,o.attemptedToUnsubscribe=!1,o.count=0,o}var f,m=(f=o.Subscriber,i(v,f),v.prototype._next=function(e){this.complete()},v.prototype._unsubscribe=function(){var e=this.parent,t=this.key;this.key=this.parent=null,e&&e.removeGroup(t)},v);function v(e,t,n){var r=f.call(this,t)||this;return r.key=e,r.group=t,r.parent=n,r}var y,g=(y=s.Observable,i(_,y),_.prototype._subscribe=function(e){var t=new a.Subscription,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&t.add(new w(n)),t.add(r.subscribe(e)),t},_);function _(e,t,n){var r=y.call(this)||this;return r.key=e,r.groupSubject=t,r.refCountSubscription=n,r}t.GroupedObservable=g;var b,w=(b=a.Subscription,i(x,b),x.prototype.unsubscribe=function(){var e=this.parent;e.closed||this.closed||(b.prototype.unsubscribe.call(this),e.count-=1,0===e.count&&e.attemptedToUnsubscribe&&e.unsubscribe())},x);function x(e){var t=b.call(this)||this;return(t.parent=e).count++,t}}),System.registerDynamic(\"npm:rxjs/internal/operators/ignoreElements.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.ignoreElements=function(){return function(e){return e.lift(new a)}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e))},s);function s(){}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){},c);function c(){return null!==l&&l.apply(this,arguments)||this}}),System.registerDynamic(\"npm:rxjs/internal/operators/isEmpty.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.isEmpty=function(){return function(e){return e.lift(new a)}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e))},s);function s(){}var l,u=(l=o.Subscriber,i(c,l),c.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete()},c.prototype._next=function(e){this.notifyComplete(!1)},c.prototype._complete=function(){this.notifyComplete(!0)},c);function c(e){return l.call(this,e)||this}}),System.registerDynamic(\"npm:rxjs/internal/operators/last.js\",[\"../util/EmptyError\",\"./filter\",\"./takeLast\",\"./throwIfEmpty\",\"./defaultIfEmpty\",\"../util/identity\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"../util/EmptyError\"),o=e(\"./filter\"),a=e(\"./takeLast\"),s=e(\"./throwIfEmpty\"),l=e(\"./defaultIfEmpty\"),u=e(\"../util/identity\");t.last=function(r,e){var t=2<=arguments.length;return function(n){return n.pipe(r?o.filter(function(e,t){return r(e,t,n)}):u.identity,a.takeLast(1),t?l.defaultIfEmpty(e):s.throwIfEmpty(function(){return new i.EmptyError}))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/mapTo.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.mapTo=function(t){return function(e){return e.lift(new a(t))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.value))},s);function s(e){this.value=e}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){this.destination.next(this.value)},c);function c(e,t){var n=l.call(this,e)||this;return n.value=t,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/materialize.js\",[\"../Subscriber\",\"../Notification\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../Notification\");t.materialize=function(){return function(e){return e.lift(new s)}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e))},l);function l(){}var u,c=(u=o.Subscriber,i(p,u),p.prototype._next=function(e){this.destination.next(a.Notification.createNext(e))},p.prototype._error=function(e){var t=this.destination;t.next(a.Notification.createError(e)),t.complete()},p.prototype._complete=function(){var e=this.destination;e.next(a.Notification.createComplete()),e.complete()},p);function p(e){return u.call(this,e)||this}}),System.registerDynamic(\"npm:rxjs/internal/operators/max.js\",[\"./reduce\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./reduce\");t.max=function(n){var e=\"function\"==typeof n?function(e,t){return 0<n(e,t)?e:t}:function(e,t){return t<e?e:t};return r.reduce(e)}}),System.registerDynamic(\"npm:rxjs/internal/observable/merge.js\",[\"../Observable\",\"../util/isScheduler\",\"../operators/mergeAll\",\"./fromArray\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../util/isScheduler\"),s=e(\"../operators/mergeAll\"),l=e(\"./fromArray\");t.merge=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Number.POSITIVE_INFINITY,r=null,i=e[e.length-1];return a.isScheduler(i)?(r=e.pop(),1<e.length&&\"number\"==typeof e[e.length-1]&&(n=e.pop())):\"number\"==typeof i&&(n=e.pop()),null===r&&1===e.length&&e[0]instanceof o.Observable?e[0]:s.mergeAll(n)(l.fromArray(e,r))}}),System.registerDynamic(\"npm:rxjs/internal/operators/merge.js\",[\"../observable/merge\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/merge\");t.merge=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return e.lift.call(r.merge.apply(void 0,[e].concat(t)))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/mergeMapTo.js\",[\"./mergeMap\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./mergeMap\");t.mergeMapTo=function(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?r.mergeMap(function(){return e},t,n):(\"number\"==typeof t&&(n=t),r.mergeMap(function(){return e},n))}}),System.registerDynamic(\"npm:rxjs/internal/operators/mergeScan.js\",[\"../util/subscribeToResult\",\"../OuterSubscriber\",\"../InnerSubscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../util/subscribeToResult\"),a=e(\"../OuterSubscriber\"),s=e(\"../InnerSubscriber\");t.mergeScan=function(t,n,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),function(e){return e.lift(new l(t,n,r))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.accumulator,this.seed,this.concurrent))},u);function u(e,t,n){this.accumulator=e,this.seed=t,this.concurrent=n}t.MergeScanOperator=l;var c,p=(c=a.OuterSubscriber,i(d,c),d.prototype._next=function(e){if(this.active<this.concurrent){var t=this.index++,n=this.destination,r=void 0;try{r=(0,this.accumulator)(this.acc,e,t)}catch(e){return n.error(e)}this.active++,this._innerSub(r,e,t)}else this.buffer.push(e)},d.prototype._innerSub=function(e,t,n){var r=new s.InnerSubscriber(this,void 0,void 0);this.destination.add(r),o.subscribeToResult(this,e,t,n,r)},d.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete()),this.unsubscribe()},d.prototype.notifyNext=function(e,t,n,r,i){var o=this.destination;this.acc=t,this.hasValue=!0,o.next(t)},d.prototype.notifyComplete=function(e){var t=this.buffer;this.destination.remove(e),this.active--,0<t.length?this._next(t.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},d);function d(e,t,n,r){var i=c.call(this,e)||this;return i.accumulator=t,i.acc=n,i.concurrent=r,i.hasValue=!1,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}t.MergeScanSubscriber=p}),System.registerDynamic(\"npm:rxjs/internal/operators/min.js\",[\"./reduce\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./reduce\");t.min=function(n){var e=\"function\"==typeof n?function(e,t){return n(e,t)<0?e:t}:function(e,t){return e<t?e:t};return r.reduce(e)}}),System.registerDynamic(\"npm:rxjs/internal/operators/onErrorResumeNext.js\",[\"../observable/from\",\"../util/isArray\",\"../OuterSubscriber\",\"../InnerSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../observable/from\"),a=e(\"../util/isArray\"),s=e(\"../OuterSubscriber\"),l=e(\"../InnerSubscriber\"),u=e(\"../util/subscribeToResult\");t.onErrorResumeNext=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 1===t.length&&a.isArray(t[0])&&(t=t[0]),function(e){return e.lift(new c(t))}},t.onErrorResumeNextStatic=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n;return 1===e.length&&a.isArray(e[0])&&(e=e[0]),n=e.shift(),o.from(n,null).lift(new c(e))};var c=(p.prototype.call=function(e,t){return t.subscribe(new h(e,this.nextSources))},p);function p(e){this.nextSources=e}var d,h=(d=s.OuterSubscriber,i(f,d),f.prototype.notifyError=function(e,t){this.subscribeToNextSource()},f.prototype.notifyComplete=function(e){this.subscribeToNextSource()},f.prototype._error=function(e){this.subscribeToNextSource(),this.unsubscribe()},f.prototype._complete=function(){this.subscribeToNextSource(),this.unsubscribe()},f.prototype.subscribeToNextSource=function(){var e=this.nextSources.shift();if(e){var t=new l.InnerSubscriber(this,void 0,void 0);this.destination.add(t),u.subscribeToResult(this,e,void 0,void 0,t)}else this.destination.complete()},f);function f(e,t){var n=d.call(this,e)||this;return n.destination=e,n.nextSources=t,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/pairwise.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.pairwise=function(){return function(e){return e.lift(new a)}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e))},s);function s(){}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){var t;this.hasPrev?t=[this.prev,e]:this.hasPrev=!0,this.prev=e,t&&this.destination.next(t)},c);function c(e){var t=l.call(this,e)||this;return t.hasPrev=!1,t}}),System.registerDynamic(\"npm:rxjs/internal/util/not.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.not=function(e,t){function n(){return!n.pred.apply(n.thisArg,arguments)}return n.pred=e,n.thisArg=t,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/filter.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.filter=function(t,n){return function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.thisArg))},s);function s(e,t){this.predicate=e,this.thisArg=t}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},c);function c(e,t,n){var r=l.call(this,e)||this;return r.predicate=t,r.thisArg=n,r.count=0,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/partition.js\",[\"../util/not\",\"./filter\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../util/not\"),i=e(\"./filter\");t.partition=function(t,n){return function(e){return[i.filter(t,n)(e),i.filter(r.not(t,n))(e)]}}}),System.registerDynamic(\"npm:rxjs/internal/operators/pluck.js\",[\"./map\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./map\");t.pluck=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t.length;if(0===n)throw new Error(\"list of properties cannot be empty.\");return function(e){return r.map(function(i,o){return function(e){for(var t=e,n=0;n<o;n++){var r=t[i[n]];if(void 0===r)return;t=r}return t}}(t,n))(e)}}}),System.registerDynamic(\"npm:rxjs/internal/operators/publish.js\",[\"../Subject\",\"./multicast\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Subject\"),i=e(\"./multicast\");t.publish=function(e){return e?i.multicast(function(){return new r.Subject},e):i.multicast(new r.Subject)}}),System.registerDynamic(\"npm:rxjs/internal/BehaviorSubject.js\",[\"./Subject\",\"./util/ObjectUnsubscribedError\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Subject\"),s=e(\"./util/ObjectUnsubscribedError\"),l=(o=a.Subject,i(u,o),Object.defineProperty(u.prototype,\"value\",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),u.prototype._subscribe=function(e){var t=o.prototype._subscribe.call(this,e);return t&&!t.closed&&e.next(this._value),t},u.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new s.ObjectUnsubscribedError;return this._value},u.prototype.next=function(e){o.prototype.next.call(this,this._value=e)},u);function u(e){var t=o.call(this)||this;return t._value=e,t}t.BehaviorSubject=l}),System.registerDynamic(\"npm:rxjs/internal/operators/publishBehavior.js\",[\"../BehaviorSubject\",\"./multicast\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../BehaviorSubject\"),i=e(\"./multicast\");t.publishBehavior=function(t){return function(e){return i.multicast(new r.BehaviorSubject(t))(e)}}}),System.registerDynamic(\"npm:rxjs/internal/AsyncSubject.js\",[\"./Subject\",\"./Subscription\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Subject\"),s=e(\"./Subscription\"),l=(o=a.Subject,i(u,o),u.prototype._subscribe=function(e){return this.hasError?(e.error(this.thrownError),s.Subscription.EMPTY):this.hasCompleted&&this.hasNext?(e.next(this.value),e.complete(),s.Subscription.EMPTY):o.prototype._subscribe.call(this,e)},u.prototype.next=function(e){this.hasCompleted||(this.value=e,this.hasNext=!0)},u.prototype.error=function(e){this.hasCompleted||o.prototype.error.call(this,e)},u.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&o.prototype.next.call(this,this.value),o.prototype.complete.call(this)},u);function u(){var e=null!==o&&o.apply(this,arguments)||this;return e.value=null,e.hasNext=!1,e.hasCompleted=!1,e}t.AsyncSubject=l}),System.registerDynamic(\"npm:rxjs/internal/operators/publishLast.js\",[\"../AsyncSubject\",\"./multicast\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../AsyncSubject\"),i=e(\"./multicast\");t.publishLast=function(){return function(e){return i.multicast(new r.AsyncSubject)(e)}}}),System.registerDynamic(\"npm:rxjs/internal/operators/publishReplay.js\",[\"../ReplaySubject\",\"./multicast\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var a=e(\"../ReplaySubject\"),s=e(\"./multicast\");t.publishReplay=function(e,t,n,r){n&&\"function\"!=typeof n&&(r=n);var i=\"function\"==typeof n?n:void 0,o=new a.ReplaySubject(e,t,r);return function(e){return s.multicast(function(){return o},i)(e)}}}),System.registerDynamic(\"npm:rxjs/internal/observable/race.js\",[\"../util/isArray\",\"./fromArray\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../util/isArray\"),a=e(\"./fromArray\"),s=e(\"../OuterSubscriber\"),l=e(\"../util/subscribeToResult\");t.race=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){if(!o.isArray(e[0]))return e[0];e=e[0]}return a.fromArray(e,void 0).lift(new u)};var u=(c.prototype.call=function(e,t){return t.subscribe(new d(e))},c);function c(){}t.RaceOperator=u;var p,d=(p=s.OuterSubscriber,i(h,p),h.prototype._next=function(e){this.observables.push(e)},h.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{for(var n=0;n<t&&!this.hasFirst;n++){var r=e[n],i=l.subscribeToResult(this,r,r,n);this.subscriptions&&this.subscriptions.push(i),this.add(i)}this.observables=null}},h.prototype.notifyNext=function(e,t,n,r,i){if(!this.hasFirst){this.hasFirst=!0;for(var o=0;o<this.subscriptions.length;o++)if(o!==n){var a=this.subscriptions[o];a.unsubscribe(),this.remove(a)}this.subscriptions=null}this.destination.next(t)},h);function h(e){var t=p.call(this,e)||this;return t.hasFirst=!1,t.observables=[],t.subscriptions=[],t}t.RaceSubscriber=d}),System.registerDynamic(\"npm:rxjs/internal/operators/race.js\",[\"../util/isArray\",\"../observable/race\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../util/isArray\"),i=e(\"../observable/race\");t.race=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return 1===t.length&&r.isArray(t[0])&&(t=t[0]),e.lift.call(i.race.apply(void 0,[e].concat(t)))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/repeat.js\",[\"../Subscriber\",\"../observable/empty\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../observable/empty\");t.repeat=function(t){return void 0===t&&(t=-1),function(e){return 0===t?a.empty():t<0?e.lift(new s(-1,e)):e.lift(new s(t-1,e))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.count,this.source))},l);function l(e,t){this.count=e,this.source=t}var u,c=(u=o.Subscriber,i(p,u),p.prototype.complete=function(){if(!this.isStopped){var e=this.source,t=this.count;if(0===t)return u.prototype.complete.call(this);-1<t&&(this.count=t-1),e.subscribe(this._unsubscribeAndRecycle())}},p);function p(e,t,n){var r=u.call(this,e)||this;return r.count=t,r.source=n,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/repeatWhen.js\",[\"../Subject\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subject\"),a=e(\"../OuterSubscriber\"),s=e(\"../util/subscribeToResult\");t.repeatWhen=function(t){return function(e){return e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.notifier,t))},u);function u(e){this.notifier=e}var c,p=(c=a.OuterSubscriber,i(d,c),d.prototype.notifyNext=function(e,t,n,r,i){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},d.prototype.notifyComplete=function(e){if(!1===this.sourceIsBeingSubscribedTo)return c.prototype.complete.call(this)},d.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return c.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next()}},d.prototype._unsubscribe=function(){var e=this.notifications,t=this.retriesSubscription;e&&(e.unsubscribe(),this.notifications=null),t&&(t.unsubscribe(),this.retriesSubscription=null),this.retries=null},d.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;return this._unsubscribe=null,c.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=e,this},d.prototype.subscribeToRetries=function(){var e;this.notifications=new o.Subject;try{e=(0,this.notifier)(this.notifications)}catch(e){return c.prototype.complete.call(this)}this.retries=e,this.retriesSubscription=s.subscribeToResult(this,e)},d);function d(e,t,n){var r=c.call(this,e)||this;return r.notifier=t,r.source=n,r.sourceIsBeingSubscribedTo=!0,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/retry.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.retry=function(t){return void 0===t&&(t=-1),function(e){return e.lift(new a(t,e))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.count,this.source))},s);function s(e,t){this.count=e,this.source=t}var l,u=(l=o.Subscriber,i(c,l),c.prototype.error=function(e){if(!this.isStopped){var t=this.source,n=this.count;if(0===n)return l.prototype.error.call(this,e);-1<n&&(this.count=n-1),t.subscribe(this._unsubscribeAndRecycle())}},c);function c(e,t,n){var r=l.call(this,e)||this;return r.count=t,r.source=n,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/retryWhen.js\",[\"../Subject\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subject\"),a=e(\"../OuterSubscriber\"),s=e(\"../util/subscribeToResult\");t.retryWhen=function(t){return function(e){return e.lift(new l(t,e))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.notifier,this.source))},u);function u(e,t){this.notifier=e,this.source=t}var c,p=(c=a.OuterSubscriber,i(d,c),d.prototype.error=function(e){if(!this.isStopped){var t=this.errors,n=this.retries,r=this.retriesSubscription;if(n)this.errors=null,this.retriesSubscription=null;else{t=new o.Subject;try{n=(0,this.notifier)(t)}catch(e){return c.prototype.error.call(this,e)}r=s.subscribeToResult(this,n)}this._unsubscribeAndRecycle(),this.errors=t,this.retries=n,this.retriesSubscription=r,t.next(e)}},d.prototype._unsubscribe=function(){var e=this.errors,t=this.retriesSubscription;e&&(e.unsubscribe(),this.errors=null),t&&(t.unsubscribe(),this.retriesSubscription=null),this.retries=null},d.prototype.notifyNext=function(e,t,n,r,i){var o=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=o,this.source.subscribe(this)},d);function d(e,t,n){var r=c.call(this,e)||this;return r.notifier=t,r.source=n,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/sample.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.sample=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){var n=new c(e),r=t.subscribe(n);return r.add(a.subscribeToResult(n,this.notifier)),r},l);function l(e){this.notifier=e}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype._next=function(e){this.value=e,this.hasValue=!0},p.prototype.notifyNext=function(e,t,n,r,i){this.emitValue()},p.prototype.notifyComplete=function(){this.emitValue()},p.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},p);function p(){var e=null!==u&&u.apply(this,arguments)||this;return e.hasValue=!1,e}}),System.registerDynamic(\"npm:rxjs/internal/operators/sampleTime.js\",[\"../Subscriber\",\"../scheduler/async\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../scheduler/async\");t.sampleTime=function(t,n){return void 0===n&&(n=a.async),function(e){return e.lift(new s(t,n))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.period,this.scheduler))},l);function l(e,t){this.period=e,this.scheduler=t}var u,c=(u=o.Subscriber,i(p,u),p.prototype._next=function(e){this.lastValue=e,this.hasValue=!0},p.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},p);function p(e,t,n){var r=u.call(this,e)||this;return r.period=t,r.scheduler=n,r.hasValue=!1,r.add(n.schedule(d,t,{subscriber:r,period:t})),r}function d(e){var t=e.subscriber,n=e.period;t.notifyNext(),this.schedule(e,n)}}),System.registerDynamic(\"npm:rxjs/internal/operators/sequenceEqual.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.sequenceEqual=function(t,n){return function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.compareTo,this.comparator))},s);function s(e,t){this.compareTo=e,this.comparator=t}t.SequenceEqualOperator=a;var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(e),this.checkValues())},c.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},c.prototype.checkValues=function(){for(var e=this._a,t=this._b,n=this.comparator;0<e.length&&0<t.length;){var r=e.shift(),i=t.shift(),o=!1;try{o=n?n(r,i):r===i}catch(e){this.destination.error(e)}o||this.emit(!1)}},c.prototype.emit=function(e){var t=this.destination;t.next(e),t.complete()},c.prototype.nextB=function(e){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(e),this.checkValues())},c.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},c);function c(e,t,n){var r=l.call(this,e)||this;return r.compareTo=t,r.comparator=n,r._a=[],r._b=[],r._oneComplete=!1,r.destination.add(t.subscribe(new d(e,r))),r}t.SequenceEqualSubscriber=u;var p,d=(p=o.Subscriber,i(h,p),h.prototype._next=function(e){this.parent.nextB(e)},h.prototype._error=function(e){this.parent.error(e),this.unsubscribe()},h.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},h);function h(e,t){var n=p.call(this,e)||this;return n.parent=t,n}}),System.registerDynamic(\"npm:rxjs/internal/observable/ConnectableObservable.js\",[\"../Subject\",\"../Observable\",\"../Subscriber\",\"../Subscription\",\"../operators/refCount\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a,s=e(\"../Subject\"),l=e(\"../Observable\"),u=e(\"../Subscriber\"),c=e(\"../Subscription\"),p=e(\"../operators/refCount\"),d=(o=l.Observable,i(h,o),h.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},h.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},h.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new c.Subscription).add(this.source.subscribe(new m(this.getSubject(),this))),e.closed&&(this._connection=null,e=c.Subscription.EMPTY)),e},h.prototype.refCount=function(){return p.refCount()(this)},h);function h(e,t){var n=o.call(this)||this;return n.source=e,n.subjectFactory=t,n._refCount=0,n._isComplete=!1,n}t.ConnectableObservable=d,t.connectableObservableDescriptor={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:(a=d.prototype)._subscribe},_isComplete:{value:a._isComplete,writable:!0},getSubject:{value:a.getSubject},connect:{value:a.connect},refCount:{value:a.refCount}};var f,m=(f=s.SubjectSubscriber,i(v,f),v.prototype._error=function(e){this._unsubscribe(),f.prototype._error.call(this,e)},v.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),f.prototype._complete.call(this)},v.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},v);function v(e,t){var n=f.call(this,e)||this;return n.connectable=t,n}y.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new _(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i};function y(e){this.connectable=e}var g,_=(g=u.Subscriber,i(b,g),b.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,1<t)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},b);function b(e,t){var n=g.call(this,e)||this;return n.connectable=t,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/multicast.js\",[\"../observable/ConnectableObservable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../observable/ConnectableObservable\");t.multicast=function(r,i){return function(e){var t;if(t=\"function\"==typeof r?r:function(){return r},\"function\"==typeof i)return e.lift(new a(t,i));var n=Object.create(e,o.connectableObservableDescriptor);return n.source=e,n.subjectFactory=t,n}};var a=(r.prototype.call=function(e,t){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(e);return i.add(t.subscribe(r)),i},r);function r(e,t){this.subjectFactory=e,this.selector=t}t.MulticastOperator=a}),System.registerDynamic(\"npm:rxjs/internal/operators/refCount.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.refCount=function(){return function(e){return e.lift(new a(e))}};var a=(s.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new u(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i},s);function s(e){this.connectable=e}var l,u=(l=o.Subscriber,i(c,l),c.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,1<t)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},c);function c(e,t){var n=l.call(this,e)||this;return n.connectable=t,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/share.js\",[\"./multicast\",\"./refCount\",\"../Subject\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./multicast\"),i=e(\"./refCount\"),o=e(\"../Subject\");function a(){return new o.Subject}t.share=function(){return function(e){return i.refCount()(r.multicast(a)(e))}}}),System.registerDynamic(\"npm:rxjs/internal/scheduler/QueueAction.js\",[\"./AsyncAction\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./AsyncAction\"),s=(o=a.AsyncAction,i(l,o),l.prototype.schedule=function(e,t){return void 0===t&&(t=0),0<t?o.prototype.schedule.call(this,e,t):(this.delay=t,this.state=e,this.scheduler.flush(this),this)},l.prototype.execute=function(e,t){return 0<t||this.closed?o.prototype.execute.call(this,e,t):this._execute(e,t)},l.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),null!==n&&0<n||null===n&&0<this.delay?o.prototype.requestAsyncId.call(this,e,t,n):e.flush(this)},l);function l(e,t){var n=o.call(this,e,t)||this;return n.scheduler=e,n.work=t,n}t.QueueAction=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/QueueScheduler.js\",[\"./AsyncScheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./AsyncScheduler\"),s=(o=a.AsyncScheduler,i(l,o),l);function l(){return null!==o&&o.apply(this,arguments)||this}t.QueueScheduler=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/queue.js\",[\"./QueueAction\",\"./QueueScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./QueueAction\"),i=e(\"./QueueScheduler\");t.queue=new i.QueueScheduler(r.QueueAction)}),System.registerDynamic(\"npm:rxjs/internal/Notification.js\",[\"./observable/empty\",\"./observable/of\",\"./observable/throwError\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r,i=e(\"./observable/empty\"),o=e(\"./observable/of\"),a=e(\"./observable/throwError\");(r=t.NotificationKind||(t.NotificationKind={})).NEXT=\"N\",r.ERROR=\"E\",r.COMPLETE=\"C\";var s=(l.prototype.observe=function(e){switch(this.kind){case\"N\":return e.next&&e.next(this.value);case\"E\":return e.error&&e.error(this.error);case\"C\":return e.complete&&e.complete()}},l.prototype.do=function(e,t,n){switch(this.kind){case\"N\":return e&&e(this.value);case\"E\":return t&&t(this.error);case\"C\":return n&&n()}},l.prototype.accept=function(e,t,n){return e&&\"function\"==typeof e.next?this.observe(e):this.do(e,t,n)},l.prototype.toObservable=function(){switch(this.kind){case\"N\":return o.of(this.value);case\"E\":return a.throwError(this.error);case\"C\":return i.empty()}throw new Error(\"unexpected notification kind value\")},l.createNext=function(e){return void 0!==e?new l(\"N\",e):l.undefinedValueNotification},l.createError=function(e){return new l(\"E\",void 0,e)},l.createComplete=function(){return l.completeNotification},l.completeNotification=new l(\"C\"),l.undefinedValueNotification=new l(\"N\",void 0),l);function l(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue=\"N\"===e}t.Notification=s}),System.registerDynamic(\"npm:rxjs/internal/operators/observeOn.js\",[\"../Subscriber\",\"../Notification\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../Notification\");t.observeOn=function(t,n){return void 0===n&&(n=0),function(e){return e.lift(new s(t,n))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.scheduler,this.delay))},l);function l(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}t.ObserveOnOperator=s;var u,c=(u=o.Subscriber,i(p,u),p.dispatch=function(e){var t=e.notification,n=e.destination;t.observe(n),this.unsubscribe()},p.prototype.scheduleMessage=function(e){this.destination.add(this.scheduler.schedule(p.dispatch,this.delay,new d(e,this.destination)))},p.prototype._next=function(e){this.scheduleMessage(a.Notification.createNext(e))},p.prototype._error=function(e){this.scheduleMessage(a.Notification.createError(e)),this.unsubscribe()},p.prototype._complete=function(){this.scheduleMessage(a.Notification.createComplete()),this.unsubscribe()},p);function p(e,t,n){void 0===n&&(n=0);var r=u.call(this,e)||this;return r.scheduler=t,r.delay=n,r}t.ObserveOnSubscriber=c;var d=function(e,t){this.notification=e,this.destination=t};t.ObserveOnMessage=d}),System.registerDynamic(\"npm:rxjs/internal/ReplaySubject.js\",[\"./Subject\",\"./scheduler/queue\",\"./Subscription\",\"./operators/observeOn\",\"./util/ObjectUnsubscribedError\",\"./SubjectSubscription\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Subject\"),s=e(\"./scheduler/queue\"),l=e(\"./Subscription\"),u=e(\"./operators/observeOn\"),c=e(\"./util/ObjectUnsubscribedError\"),p=e(\"./SubjectSubscription\"),d=(o=a.Subject,i(h,o),h.prototype.nextInfiniteTimeWindow=function(e){var t=this._events;t.push(e),t.length>this._bufferSize&&t.shift(),o.prototype.next.call(this,e)},h.prototype.nextTimeWindow=function(e){this._events.push(new f(this._getNow(),e)),this._trimBufferThenGetEvents(),o.prototype.next.call(this,e)},h.prototype._subscribe=function(e){var t,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new c.ObjectUnsubscribedError;if(t=this.isStopped||this.hasError?l.Subscription.EMPTY:(this.observers.push(e),new p.SubjectSubscription(this,e)),i&&e.add(e=new u.ObserveOnSubscriber(e,i)),n)for(var a=0;a<o&&!e.closed;a++)e.next(r[a]);else for(a=0;a<o&&!e.closed;a++)e.next(r[a].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},h.prototype._getNow=function(){return(this.scheduler||s.queue).now()},h.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(e-r[o].time<n);)o++;return t<i&&(o=Math.max(o,i-t)),0<o&&r.splice(0,o),r},h);function h(e,t,n){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===t&&(t=Number.POSITIVE_INFINITY);var r=o.call(this)||this;return r.scheduler=n,r._events=[],r._infiniteTimeWindow=!1,r._bufferSize=e<1?1:e,r._windowTime=t<1?1:t,t===Number.POSITIVE_INFINITY?(r._infiniteTimeWindow=!0,r.next=r.nextInfiniteTimeWindow):r.next=r.nextTimeWindow,r}t.ReplaySubject=d;var f=function(e,t){this.time=e,this.value=t}}),System.registerDynamic(\"npm:rxjs/internal/operators/shareReplay.js\",[\"../ReplaySubject\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var d=e(\"../ReplaySubject\");t.shareReplay=function(e,t,n){var r;return r=e&&\"object\"==typeof e?e:{bufferSize:e,windowTime:t,refCount:!1,scheduler:n},function(e){return e.lift(function(e){var n,r,t=e.bufferSize,i=void 0===t?Number.POSITIVE_INFINITY:t,o=e.windowTime,a=void 0===o?Number.POSITIVE_INFINITY:o,s=e.refCount,l=e.scheduler,u=0,c=!1,p=!1;return function(e){u++,n&&!c||(c=!1,n=new d.ReplaySubject(i,a,l),r=e.subscribe({next:function(e){n.next(e)},error:function(e){c=!0,n.error(e)},complete:function(){p=!0,n.complete()}}));var t=n.subscribe(this);this.add(function(){u--,t.unsubscribe(),r&&!p&&s&&0===u&&(r.unsubscribe(),n=r=void 0)})}}(r))}}}),System.registerDynamic(\"npm:rxjs/internal/operators/single.js\",[\"../Subscriber\",\"../util/EmptyError\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../util/EmptyError\");t.single=function(t){return function(e){return e.lift(new s(t,e))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.predicate,this.source))},l);function l(e,t){this.predicate=e,this.source=t}var u,c=(u=o.Subscriber,i(p,u),p.prototype.applySingleValue=function(e){this.seenValue?this.destination.error(\"Sequence contains more than one element\"):(this.seenValue=!0,this.singleValue=e)},p.prototype._next=function(e){var t=this.index++;this.predicate?this.tryNext(e,t):this.applySingleValue(e)},p.prototype.tryNext=function(e,t){try{this.predicate(e,t,this.source)&&this.applySingleValue(e)}catch(e){this.destination.error(e)}},p.prototype._complete=function(){var e=this.destination;0<this.index?(e.next(this.seenValue?this.singleValue:void 0),e.complete()):e.error(new a.EmptyError)},p);function p(e,t,n){var r=u.call(this,e)||this;return r.predicate=t,r.source=n,r.seenValue=!1,r.index=0,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/skip.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.skip=function(t){return function(e){return e.lift(new a(t))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.total))},s);function s(e){this.total=e}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},c);function c(e,t){var n=l.call(this,e)||this;return n.total=t,n.count=0,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/skipLast.js\",[\"../Subscriber\",\"../util/ArgumentOutOfRangeError\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../util/ArgumentOutOfRangeError\");t.skipLast=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){return 0===this._skipCount?t.subscribe(new o.Subscriber(e)):t.subscribe(new c(e,this._skipCount))},l);function l(e){if(this._skipCount=e,this._skipCount<0)throw new a.ArgumentOutOfRangeError}var u,c=(u=o.Subscriber,i(p,u),p.prototype._next=function(e){var t=this._skipCount,n=this._count++;if(n<t)this._ring[n]=e;else{var r=n%t,i=this._ring,o=i[r];i[r]=e,this.destination.next(o)}},p);function p(e,t){var n=u.call(this,e)||this;return n._skipCount=t,n._count=0,n._ring=new Array(t),n}}),System.registerDynamic(\"npm:rxjs/internal/operators/skipUntil.js\",[\"../OuterSubscriber\",\"../InnerSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../InnerSubscriber\"),s=e(\"../util/subscribeToResult\");t.skipUntil=function(t){return function(e){return e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.notifier))},u);function u(e){this.notifier=e}var c,p=(c=o.OuterSubscriber,i(d,c),d.prototype._next=function(e){this.hasValue&&c.prototype._next.call(this,e)},d.prototype.notifyNext=function(e,t,n,r,i){this.hasValue=!0,this.innerSubscription&&this.innerSubscription.unsubscribe()},d.prototype.notifyComplete=function(){},d);function d(e,t){var n=c.call(this,e)||this;n.hasValue=!1;var r=new a.InnerSubscriber(n,void 0,void 0);return n.add(r),n.innerSubscription=r,s.subscribeToResult(n,t,void 0,void 0,r),n}}),System.registerDynamic(\"npm:rxjs/internal/operators/skipWhile.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.skipWhile=function(t){return function(e){return e.lift(new a(t))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate))},s);function s(e){this.predicate=e}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){var t=this.destination;this.skipping&&this.tryCallPredicate(e),this.skipping||t.next(e)},c.prototype.tryCallPredicate=function(e){try{var t=this.predicate(e,this.index++);this.skipping=Boolean(t)}catch(e){this.destination.error(e)}},c);function c(e,t){var n=l.call(this,e)||this;return n.predicate=t,n.skipping=!0,n.index=0,n}}),System.registerDynamic(\"npm:rxjs/internal/observable/of.js\",[\"../util/isScheduler\",\"./fromArray\",\"../scheduled/scheduleArray\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../util/isScheduler\"),i=e(\"./fromArray\"),o=e(\"../scheduled/scheduleArray\");t.of=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return r.isScheduler(n)?(e.pop(),o.scheduleArray(e,n)):i.fromArray(e)}}),System.registerDynamic(\"npm:rxjs/internal/operators/mergeMap.js\",[\"../util/subscribeToResult\",\"../OuterSubscriber\",\"../InnerSubscriber\",\"./map\",\"../observable/from\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../util/subscribeToResult\"),a=e(\"../OuterSubscriber\"),s=e(\"../InnerSubscriber\"),l=e(\"./map\"),u=e(\"../observable/from\");t.mergeMap=function t(i,o,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof o?function(e){return e.pipe(t(function(n,r){return u.from(i(n,r)).pipe(l.map(function(e,t){return o(n,e,r,t)}))},n))}:(\"number\"==typeof o&&(n=o),function(e){return e.lift(new c(i,n))})};var c=(p.prototype.call=function(e,t){return t.subscribe(new h(e,this.project,this.concurrent))},p);function p(e,t){void 0===t&&(t=Number.POSITIVE_INFINITY),this.project=e,this.concurrent=t}t.MergeMapOperator=c;var d,h=(d=a.OuterSubscriber,i(f,d),f.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},f.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.active++,this._innerSub(t,e,n)},f.prototype._innerSub=function(e,t,n){var r=new s.InnerSubscriber(this,void 0,void 0);this.destination.add(r),o.subscribeToResult(this,e,t,n,r)},f.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()},f.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},f.prototype.notifyComplete=function(e){var t=this.buffer;this.remove(e),this.active--,0<t.length?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},f);function f(e,t,n){void 0===n&&(n=Number.POSITIVE_INFINITY);var r=d.call(this,e)||this;return r.project=t,r.concurrent=n,r.hasCompleted=!1,r.buffer=[],r.active=0,r.index=0,r}t.MergeMapSubscriber=h}),System.registerDynamic(\"npm:rxjs/internal/operators/mergeAll.js\",[\"./mergeMap\",\"../util/identity\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./mergeMap\"),i=e(\"../util/identity\");t.mergeAll=function(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),r.mergeMap(i.identity,e)}}),System.registerDynamic(\"npm:rxjs/internal/operators/concatAll.js\",[\"./mergeAll\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./mergeAll\");t.concatAll=function(){return r.mergeAll(1)}}),System.registerDynamic(\"npm:rxjs/internal/observable/concat.js\",[\"./of\",\"../operators/concatAll\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./of\"),i=e(\"../operators/concatAll\");t.concat=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return i.concatAll()(r.of.apply(void 0,e))}}),System.registerDynamic(\"npm:rxjs/internal/operators/startWith.js\",[\"../observable/concat\",\"../util/isScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/concat\"),i=e(\"../util/isScheduler\");t.startWith=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t[t.length-1];return i.isScheduler(n)?(t.pop(),function(e){return r.concat(t,e,n)}):function(e){return r.concat(t,e)}}}),System.registerDynamic(\"npm:rxjs/internal/util/Immediate.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=1,i={};t.Immediate={setImmediate:function(e){var t=r++;return i[t]=e,Promise.resolve().then(function(){return function(e){var t=i[e];t&&t()}(t)}),t},clearImmediate:function(e){delete i[e]}}}),System.registerDynamic(\"npm:rxjs/internal/scheduler/AsapAction.js\",[\"../util/Immediate\",\"./AsyncAction\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"../util/Immediate\"),s=e(\"./AsyncAction\"),l=(o=s.AsyncAction,i(u,o),u.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),null!==n&&0<n?o.prototype.requestAsyncId.call(this,e,t,n):(e.actions.push(this),e.scheduled||(e.scheduled=a.Immediate.setImmediate(e.flush.bind(e,null))))},u.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&0<n||null===n&&0<this.delay)return o.prototype.recycleAsyncId.call(this,e,t,n);0===e.actions.length&&(a.Immediate.clearImmediate(t),e.scheduled=void 0)},u);function u(e,t){var n=o.call(this,e,t)||this;return n.scheduler=e,n.work=t,n}t.AsapAction=l}),System.registerDynamic(\"npm:rxjs/internal/scheduler/AsapScheduler.js\",[\"./AsyncScheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./AsyncScheduler\"),s=(o=a.AsyncScheduler,i(l,o),l.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,r=-1,i=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++r<i&&(e=n.shift()));if(this.active=!1,t){for(;++r<i&&(e=n.shift());)e.unsubscribe();throw t}},l);function l(){return null!==o&&o.apply(this,arguments)||this}t.AsapScheduler=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/asap.js\",[\"./AsapAction\",\"./AsapScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./AsapAction\"),i=e(\"./AsapScheduler\");t.asap=new i.AsapScheduler(r.AsapAction)}),System.registerDynamic(\"npm:rxjs/internal/observable/SubscribeOnObservable.js\",[\"../Observable\",\"../scheduler/asap\",\"../util/isNumeric\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"../Observable\"),s=e(\"../scheduler/asap\"),l=e(\"../util/isNumeric\"),u=(o=a.Observable,i(c,o),c.create=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=s.asap),new c(e,t,n)},c.dispatch=function(e){var t=e.source,n=e.subscriber;return this.add(t.subscribe(n))},c.prototype._subscribe=function(e){var t=this.delayTime,n=this.source;return this.scheduler.schedule(c.dispatch,t,{source:n,subscriber:e})},c);function c(e,t,n){void 0===t&&(t=0),void 0===n&&(n=s.asap);var r=o.call(this)||this;return r.source=e,r.delayTime=t,r.scheduler=n,(!l.isNumeric(t)||t<0)&&(r.delayTime=0),n&&\"function\"==typeof n.schedule||(r.scheduler=s.asap),r}t.SubscribeOnObservable=u}),System.registerDynamic(\"npm:rxjs/internal/operators/subscribeOn.js\",[\"../observable/SubscribeOnObservable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/SubscribeOnObservable\");t.subscribeOn=function(t,n){return void 0===n&&(n=0),function(e){return e.lift(new i(t,n))}};var i=(o.prototype.call=function(e,t){return new r.SubscribeOnObservable(t,this.delay,this.scheduler).subscribe(e)},o);function o(e,t){this.scheduler=e,this.delay=t}}),System.registerDynamic(\"npm:rxjs/internal/util/identity.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.identity=function(e){return e}}),System.registerDynamic(\"npm:rxjs/internal/operators/switchAll.js\",[\"./switchMap\",\"../util/identity\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./switchMap\"),i=e(\"../util/identity\");t.switchAll=function(){return r.switchMap(i.identity)}}),System.registerDynamic(\"npm:rxjs/internal/operators/switchMap.js\",[\"../OuterSubscriber\",\"../InnerSubscriber\",\"../util/subscribeToResult\",\"./map\",\"../observable/from\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../InnerSubscriber\"),s=e(\"../util/subscribeToResult\"),l=e(\"./map\"),u=e(\"../observable/from\");t.switchMap=function t(i,o){return\"function\"==typeof o?function(e){return e.pipe(t(function(n,r){return u.from(i(n,r)).pipe(l.map(function(e,t){return o(n,e,r,t)}))}))}:function(e){return e.lift(new c(i))}};var c=(p.prototype.call=function(e,t){return t.subscribe(new h(e,this.project))},p);function p(e){this.project=e}var d,h=(d=o.OuterSubscriber,i(f,d),f.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t,e,n)},f.prototype._innerSub=function(e,t,n){var r=this.innerSubscription;r&&r.unsubscribe();var i=new a.InnerSubscriber(this,void 0,void 0);this.destination.add(i),this.innerSubscription=s.subscribeToResult(this,e,t,n,i)},f.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||d.prototype._complete.call(this),this.unsubscribe()},f.prototype._unsubscribe=function(){this.innerSubscription=null},f.prototype.notifyComplete=function(e){this.destination.remove(e),this.innerSubscription=null,this.isStopped&&d.prototype._complete.call(this)},f.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},f);function f(e,t){var n=d.call(this,e)||this;return n.project=t,n.index=0,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/switchMapTo.js\",[\"./switchMap\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./switchMap\");t.switchMapTo=function(e,t){return t?r.switchMap(function(){return e},t):r.switchMap(function(){return e})}}),System.registerDynamic(\"npm:rxjs/internal/operators/take.js\",[\"../Subscriber\",\"../util/ArgumentOutOfRangeError\",\"../observable/empty\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../util/ArgumentOutOfRangeError\"),s=e(\"../observable/empty\");t.take=function(t){return function(e){return 0===t?s.empty():e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.total))},u);function u(e){if(this.total=e,this.total<0)throw new a.ArgumentOutOfRangeError}var c,p=(c=o.Subscriber,i(d,c),d.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},d);function d(e,t){var n=c.call(this,e)||this;return n.total=t,n.count=0,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/takeUntil.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");t.takeUntil=function(t){return function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){var n=new c(e),r=a.subscribeToResult(n,this.notifier);return r&&!n.seenValue?(n.add(r),t.subscribe(n)):n},l);function l(e){this.notifier=e}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype.notifyNext=function(e,t,n,r,i){this.seenValue=!0,this.complete()},p.prototype.notifyComplete=function(){},p);function p(e){var t=u.call(this,e)||this;return t.seenValue=!1,t}}),System.registerDynamic(\"npm:rxjs/internal/operators/takeWhile.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.takeWhile=function(t,n){return void 0===n&&(n=!1),function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.inclusive))},s);function s(e,t){this.predicate=e,this.inclusive=t}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){var t,n=this.destination;try{t=this.predicate(e,this.index++)}catch(e){return void n.error(e)}this.nextOrComplete(e,t)},c.prototype.nextOrComplete=function(e,t){var n=this.destination;Boolean(t)?n.next(e):(this.inclusive&&n.next(e),n.complete())},c);function c(e,t,n){var r=l.call(this,e)||this;return r.predicate=t,r.inclusive=n,r.index=0,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/tap.js\",[\"../Subscriber\",\"../util/noop\",\"../util/isFunction\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../util/noop\"),s=e(\"../util/isFunction\");t.tap=function(t,n,r){return function(e){return e.lift(new l(t,n,r))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.nextOrObserver,this.error,this.complete))},u);function u(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}var c,p=(c=o.Subscriber,i(d,c),d.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.next(e)},d.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.error(e)},d.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){return void this.destination.error(e)}return this.destination.complete()},d);function d(e,t,n,r){var i=c.call(this,e)||this;return i._tapNext=a.noop,i._tapError=a.noop,i._tapComplete=a.noop,i._tapError=n||a.noop,i._tapComplete=r||a.noop,s.isFunction(t)?(i._context=i)._tapNext=t:t&&(i._context=t,i._tapNext=t.next||a.noop,i._tapError=t.error||a.noop,i._tapComplete=t.complete||a.noop),i}}),System.registerDynamic(\"npm:rxjs/internal/operators/throttle.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,r,t){\"use strict\";this||self;var i,n=r&&r.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(r,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),a=e(\"../util/subscribeToResult\");r.defaultThrottleConfig={leading:!0,trailing:!1},r.throttle=function(t,n){return void 0===n&&(n=r.defaultThrottleConfig),function(e){return e.lift(new s(t,n.leading,n.trailing))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.durationSelector,this.leading,this.trailing))},l);function l(e,t,n){this.durationSelector=e,this.leading=t,this.trailing=n}var u,c=(u=o.OuterSubscriber,n(p,u),p.prototype._next=function(e){this._hasValue=!0,this._sendValue=e,this._throttled||(this._leading?this.send():this.throttle(e))},p.prototype.send=function(){var e=this._hasValue,t=this._sendValue;e&&(this.destination.next(t),this.throttle(t)),this._hasValue=!1,this._sendValue=null},p.prototype.throttle=function(e){var t=this.tryDurationSelector(e);t&&this.add(this._throttled=a.subscribeToResult(this,t))},p.prototype.tryDurationSelector=function(e){try{return this.durationSelector(e)}catch(e){return this.destination.error(e),null}},p.prototype.throttlingDone=function(){var e=this._throttled,t=this._trailing;e&&e.unsubscribe(),this._throttled=null,t&&this.send()},p.prototype.notifyNext=function(e,t,n,r,i){this.throttlingDone()},p.prototype.notifyComplete=function(){this.throttlingDone()},p);function p(e,t,n,r){var i=u.call(this,e)||this;return i.destination=e,i.durationSelector=t,i._leading=n,i._trailing=r,i._hasValue=!1,i}}),System.registerDynamic(\"npm:rxjs/internal/operators/throttleTime.js\",[\"../Subscriber\",\"../scheduler/async\",\"./throttle\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../scheduler/async\"),s=e(\"./throttle\");t.throttleTime=function(t,n,r){return void 0===n&&(n=a.async),void 0===r&&(r=s.defaultThrottleConfig),function(e){return e.lift(new l(t,n,r.leading,r.trailing))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.duration,this.scheduler,this.leading,this.trailing))},u);function u(e,t,n,r){this.duration=e,this.scheduler=t,this.leading=n,this.trailing=r}var c,p=(c=o.Subscriber,i(d,c),d.prototype._next=function(e){this.throttled?this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(h,this.duration,{subscriber:this})),this.leading?this.destination.next(e):this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0))},d.prototype._complete=function(){this._hasTrailingValue&&this.destination.next(this._trailingValue),this.destination.complete()},d.prototype.clearThrottle=function(){var e=this.throttled;e&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),e.unsubscribe(),this.remove(e),this.throttled=null)},d);function d(e,t,n,r,i){var o=c.call(this,e)||this;return o.duration=t,o.scheduler=n,o.leading=r,o.trailing=i,o._hasTrailingValue=!1,o._trailingValue=null,o}function h(e){e.subscriber.clearThrottle()}}),System.registerDynamic(\"npm:rxjs/internal/util/EmptyError.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=(i.prototype=Object.create(Error.prototype),i);function i(){return Error.call(this),this.message=\"no elements in sequence\",this.name=\"EmptyError\",this}t.EmptyError=r}),System.registerDynamic(\"npm:rxjs/internal/operators/throwIfEmpty.js\",[\"../util/EmptyError\",\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../util/EmptyError\"),a=e(\"../Subscriber\");t.throwIfEmpty=function(t){return void 0===t&&(t=d),function(e){return e.lift(new s(t))}};var s=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.errorFactory))},l);function l(e){this.errorFactory=e}var u,c=(u=a.Subscriber,i(p,u),p.prototype._next=function(e){this.hasValue=!0,this.destination.next(e)},p.prototype._complete=function(){if(this.hasValue)return this.destination.complete();var t=void 0;try{t=this.errorFactory()}catch(e){t=e}this.destination.error(t)},p);function p(e,t){var n=u.call(this,e)||this;return n.errorFactory=t,n.hasValue=!1,n}function d(){return new o.EmptyError}}),System.registerDynamic(\"npm:rxjs/internal/scheduled/scheduleObservable.js\",[\"../Observable\",\"../Subscription\",\"../symbol/observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../Subscription\"),s=e(\"../symbol/observable\");t.scheduleObservable=function(r,i){return new o.Observable(function(t){var n=new a.Subscription;return n.add(i.schedule(function(){var e=r[s.observable]();n.add(e.subscribe({next:function(e){n.add(i.schedule(function(){return t.next(e)}))},error:function(e){n.add(i.schedule(function(){return t.error(e)}))},complete:function(){n.add(i.schedule(function(){return t.complete()}))}}))})),n})}}),System.registerDynamic(\"npm:rxjs/internal/scheduled/schedulePromise.js\",[\"../Observable\",\"../Subscription\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"../Observable\"),o=e(\"../Subscription\");t.schedulePromise=function(e,r){return new i.Observable(function(t){var n=new o.Subscription;return n.add(r.schedule(function(){return e.then(function(e){n.add(r.schedule(function(){t.next(e),n.add(r.schedule(function(){return t.complete()}))}))},function(e){n.add(r.schedule(function(){return t.error(e)}))})})),n})}}),System.registerDynamic(\"npm:rxjs/internal/scheduled/scheduleIterable.js\",[\"../Observable\",\"../Subscription\",\"../symbol/iterator\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),o=e(\"../Subscription\"),a=e(\"../symbol/iterator\");t.scheduleIterable=function(t,n){if(!t)throw new Error(\"Iterable cannot be null\");return new r.Observable(function(r){var i,e=new o.Subscription;return e.add(function(){i&&\"function\"==typeof i.return&&i.return()}),e.add(n.schedule(function(){i=t[a.iterator](),e.add(n.schedule(function(){if(!r.closed){var e,t;try{var n=i.next();e=n.value,t=n.done}catch(e){return void r.error(e)}t?r.complete():(r.next(e),this.schedule())}}))})),e})}}),System.registerDynamic(\"npm:rxjs/internal/util/isInteropObservable.js\",[\"../symbol/observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../symbol/observable\");t.isInteropObservable=function(e){return e&&\"function\"==typeof e[r.observable]}}),System.registerDynamic(\"npm:rxjs/internal/util/isIterable.js\",[\"../symbol/iterator\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../symbol/iterator\");t.isIterable=function(e){return e&&\"function\"==typeof e[r.iterator]}}),System.registerDynamic(\"npm:rxjs/internal/scheduled/scheduled.js\",[\"./scheduleObservable\",\"./schedulePromise\",\"./scheduleArray\",\"./scheduleIterable\",\"../util/isInteropObservable\",\"../util/isPromise\",\"../util/isArrayLike\",\"../util/isIterable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./scheduleObservable\"),i=e(\"./schedulePromise\"),o=e(\"./scheduleArray\"),a=e(\"./scheduleIterable\"),s=e(\"../util/isInteropObservable\"),l=e(\"../util/isPromise\"),u=e(\"../util/isArrayLike\"),c=e(\"../util/isIterable\");t.scheduled=function(e,t){if(null!=e){if(s.isInteropObservable(e))return r.scheduleObservable(e,t);if(l.isPromise(e))return i.schedulePromise(e,t);if(u.isArrayLike(e))return o.scheduleArray(e,t);if(c.isIterable(e)||\"string\"==typeof e)return a.scheduleIterable(e,t)}throw new TypeError((null!==e&&typeof e||e)+\" is not observable\")}}),System.registerDynamic(\"npm:rxjs/internal/observable/from.js\",[\"../Observable\",\"../util/subscribeTo\",\"../scheduled/scheduled\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),i=e(\"../util/subscribeTo\"),o=e(\"../scheduled/scheduled\");t.from=function(e,t){return t?o.scheduled(e,t):e instanceof r.Observable?e:new r.Observable(i.subscribeTo(e))}}),System.registerDynamic(\"npm:rxjs/internal/observable/defer.js\",[\"../Observable\",\"./from\",\"./empty\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),i=e(\"./from\"),o=e(\"./empty\");t.defer=function(n){return new r.Observable(function(t){var e;try{e=n()}catch(e){return void t.error(e)}return(e?i.from(e):o.empty()).subscribe(t)})}}),System.registerDynamic(\"npm:rxjs/internal/operators/timeInterval.js\",[\"../scheduler/async\",\"./scan\",\"../observable/defer\",\"./map\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"../scheduler/async\"),o=e(\"./scan\"),a=e(\"../observable/defer\"),s=e(\"./map\");t.timeInterval=function(r){return void 0===r&&(r=i.async),function(e){return a.defer(function(){return e.pipe(o.scan(function(e,t){var n=e.current;return{value:t,current:r.now(),last:n}},{current:r.now(),value:void 0,last:void 0}),s.map(function(e){var t=e.current,n=e.last,r=e.value;return new l(r,t-n)}))})}};var l=function(e,t){this.value=e,this.interval=t};t.TimeInterval=l}),System.registerDynamic(\"npm:rxjs/internal/util/TimeoutError.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=(i.prototype=Object.create(Error.prototype),i);function i(){return Error.call(this),this.message=\"Timeout has occurred\",this.name=\"TimeoutError\",this}t.TimeoutError=r}),System.registerDynamic(\"npm:rxjs/internal/observable/throwError.js\",[\"../Observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\");function i(e){var t=e.error;e.subscriber.error(t)}t.throwError=function(t,n){return n?new r.Observable(function(e){return n.schedule(i,0,{error:t,subscriber:e})}):new r.Observable(function(e){return e.error(t)})}}),System.registerDynamic(\"npm:rxjs/internal/operators/timeout.js\",[\"../scheduler/async\",\"../util/TimeoutError\",\"./timeoutWith\",\"../observable/throwError\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../scheduler/async\"),i=e(\"../util/TimeoutError\"),o=e(\"./timeoutWith\"),a=e(\"../observable/throwError\");t.timeout=function(e,t){return void 0===t&&(t=r.async),o.timeoutWith(e,a.throwError(new i.TimeoutError),t)}}),System.registerDynamic(\"npm:rxjs/internal/util/isDate.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isDate=function(e){return e instanceof Date&&!isNaN(+e)}}),System.registerDynamic(\"npm:rxjs/internal/operators/timeoutWith.js\",[\"../scheduler/async\",\"../util/isDate\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var a=e(\"../scheduler/async\"),s=e(\"../util/isDate\"),o=e(\"../OuterSubscriber\"),l=e(\"../util/subscribeToResult\");t.timeoutWith=function(r,i,o){return void 0===o&&(o=a.async),function(e){var t=s.isDate(r),n=t?+r-o.now():Math.abs(r);return e.lift(new u(n,t,i,o))}};var u=(c.prototype.call=function(e,t){return t.subscribe(new d(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))},c);function c(e,t,n,r){this.waitFor=e,this.absoluteTimeout=t,this.withObservable=n,this.scheduler=r}var p,d=(p=o.OuterSubscriber,i(h,p),h.dispatchTimeout=function(e){var t=e.withObservable;e._unsubscribeAndRecycle(),e.add(l.subscribeToResult(e,t))},h.prototype.scheduleTimeout=function(){var e=this.action;e?this.action=e.schedule(this,this.waitFor):this.add(this.action=this.scheduler.schedule(h.dispatchTimeout,this.waitFor,this))},h.prototype._next=function(e){this.absoluteTimeout||this.scheduleTimeout(),p.prototype._next.call(this,e)},h.prototype._unsubscribe=function(){this.action=null,this.scheduler=null,this.withObservable=null},h);function h(e,t,n,r,i){var o=p.call(this,e)||this;return o.absoluteTimeout=t,o.waitFor=n,o.withObservable=r,o.scheduler=i,o.action=null,o.scheduleTimeout(),o}}),System.registerDynamic(\"npm:rxjs/internal/operators/map.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.map=function(t,n){return function(e){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.project,this.thisArg))},s);function s(e,t){this.project=e,this.thisArg=t}t.MapOperator=a;var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},c);function c(e,t,n){var r=l.call(this,e)||this;return r.project=t,r.count=0,r.thisArg=n||r,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/timestamp.js\",[\"../scheduler/async\",\"./map\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../scheduler/async\"),i=e(\"./map\");t.timestamp=function(t){return void 0===t&&(t=r.async),i.map(function(e){return new o(e,t.now())})};var o=function(e,t){this.value=e,this.timestamp=t};t.Timestamp=o}),System.registerDynamic(\"npm:rxjs/internal/operators/scan.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.scan=function(t,n){var r=!1;return 2<=arguments.length&&(r=!0),function(e){return e.lift(new a(t,n,r))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.accumulator,this.seed,this.hasSeed))},s);function s(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}var l,u=(l=o.Subscriber,i(c,l),Object.defineProperty(c.prototype,\"seed\",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),c.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},c.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},c);function c(e,t,n,r){var i=l.call(this,e)||this;return i.accumulator=t,i._seed=n,i.hasSeed=r,i.index=0,i}}),System.registerDynamic(\"npm:rxjs/internal/util/ArgumentOutOfRangeError.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=(i.prototype=Object.create(Error.prototype),i);function i(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}t.ArgumentOutOfRangeError=r}),System.registerDynamic(\"npm:rxjs/internal/observable/empty.js\",[\"../Observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\");t.EMPTY=new r.Observable(function(e){return e.complete()}),t.empty=function(e){return e?function(t){return new r.Observable(function(e){return t.schedule(function(){return e.complete()})})}(e):t.EMPTY}}),System.registerDynamic(\"npm:rxjs/internal/operators/takeLast.js\",[\"../Subscriber\",\"../util/ArgumentOutOfRangeError\",\"../observable/empty\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),a=e(\"../util/ArgumentOutOfRangeError\"),s=e(\"../observable/empty\");t.takeLast=function(t){return function(e){return 0===t?s.empty():e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.total))},u);function u(e){if(this.total=e,this.total<0)throw new a.ArgumentOutOfRangeError}var c,p=(c=o.Subscriber,i(d,c),d.prototype._next=function(e){var t=this.ring,n=this.total,r=this.count++;t.length<n?t.push(e):t[r%n]=e},d.prototype._complete=function(){var e=this.destination,t=this.count;if(0<t)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i<n;i++){var o=t++%n;e.next(r[o])}e.complete()},d);function d(e,t){var n=c.call(this,e)||this;return n.total=t,n.ring=new Array,n.count=0,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/defaultIfEmpty.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.defaultIfEmpty=function(t){return void 0===t&&(t=null),function(e){return e.lift(new a(t))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.defaultValue))},s);function s(e){this.defaultValue=e}var l,u=(l=o.Subscriber,i(c,l),c.prototype._next=function(e){this.isEmpty=!1,this.destination.next(e)},c.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},c);function c(e,t){var n=l.call(this,e)||this;return n.defaultValue=t,n.isEmpty=!0,n}}),System.registerDynamic(\"npm:rxjs/internal/operators/reduce.js\",[\"./scan\",\"./takeLast\",\"./defaultIfEmpty\",\"../util/pipe\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"./scan\"),o=e(\"./takeLast\"),a=e(\"./defaultIfEmpty\"),s=e(\"../util/pipe\");t.reduce=function(r,t){return 2<=arguments.length?function(e){return s.pipe(i.scan(r,t),o.takeLast(1),a.defaultIfEmpty(t))(e)}:function(e){return s.pipe(i.scan(function(e,t,n){return r(e,t,n+1)}),o.takeLast(1))(e)}}}),System.registerDynamic(\"npm:rxjs/internal/operators/toArray.js\",[\"./reduce\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./reduce\");function i(e,t,n){return 0===n?[t]:(e.push(t),e)}t.toArray=function(){return r.reduce(i,[])}}),System.registerDynamic(\"npm:rxjs/internal/operators/window.js\",[\"../Subject\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subject\"),a=e(\"../OuterSubscriber\"),s=e(\"../util/subscribeToResult\");t.window=function(t){return function(e){return e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){var n=new p(e),r=t.subscribe(n);return r.closed||n.add(s.subscribeToResult(n,this.windowBoundaries)),r},u);function u(e){this.windowBoundaries=e}var c,p=(c=a.OuterSubscriber,i(d,c),d.prototype.notifyNext=function(e,t,n,r,i){this.openWindow()},d.prototype.notifyError=function(e,t){this._error(e)},d.prototype.notifyComplete=function(e){this._complete()},d.prototype._next=function(e){this.window.next(e)},d.prototype._error=function(e){this.window.error(e),this.destination.error(e)},d.prototype._complete=function(){this.window.complete(),this.destination.complete()},d.prototype._unsubscribe=function(){this.window=null},d.prototype.openWindow=function(){var e=this.window;e&&e.complete();var t=this.destination,n=this.window=new o.Subject;t.next(n)},d);function d(e){var t=c.call(this,e)||this;return t.window=new o.Subject,e.next(t.window),t}}),System.registerDynamic(\"npm:rxjs/internal/operators/windowCount.js\",[\"../Subscriber\",\"../Subject\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\"),u=e(\"../Subject\");t.windowCount=function(t,n){return void 0===n&&(n=0),function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new c(e,this.windowSize,this.startWindowEvery))},s);function s(e,t){this.windowSize=e,this.startWindowEvery=t}var l,c=(l=o.Subscriber,i(p,l),p.prototype._next=function(e){for(var t=0<this.startWindowEvery?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,a=0;a<o&&!this.closed;a++)i[a].next(e);var s=this.count-r+1;if(0<=s&&s%t==0&&!this.closed&&i.shift().complete(),++this.count%t==0&&!this.closed){var l=new u.Subject;i.push(l),n.next(l)}},p.prototype._error=function(e){var t=this.windows;if(t)for(;0<t.length&&!this.closed;)t.shift().error(e);this.destination.error(e)},p.prototype._complete=function(){var e=this.windows;if(e)for(;0<e.length&&!this.closed;)e.shift().complete();this.destination.complete()},p.prototype._unsubscribe=function(){this.count=0,this.windows=null},p);function p(e,t,n){var r=l.call(this,e)||this;return r.destination=e,r.windowSize=t,r.startWindowEvery=n,r.windows=[new u.Subject],r.count=0,e.next(r.windows[0]),r}}),System.registerDynamic(\"npm:rxjs/internal/scheduler/Action.js\",[\"../Subscription\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"../Subscription\"),s=(o=a.Subscription,i(l,o),l.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},l);function l(e,t){return o.call(this)||this}t.Action=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/AsyncAction.js\",[\"./Action\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Action\"),s=(o=a.Action,i(l,o),l.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,t)),this.pending=!0,this.delay=t,this.id=this.id||this.requestAsyncId(r,this.id,t),this},l.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),setInterval(e.flush.bind(e,this),n)},l.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;clearInterval(t)},l.prototype.execute=function(e,t){if(this.closed)return new Error(\"executing a cancelled action\");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},l.prototype._execute=function(e,t){var n=!1,r=void 0;try{this.work(e)}catch(e){n=!0,r=!!e&&e||new Error(e)}if(n)return this.unsubscribe(),r},l.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},l);function l(e,t){var n=o.call(this,e,t)||this;return n.scheduler=e,n.work=t,n.pending=!1,n}t.AsyncAction=s}),System.registerDynamic(\"npm:rxjs/internal/Scheduler.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=(i.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},i.now=function(){return Date.now()},i);function i(e,t){void 0===t&&(t=i.now),this.SchedulerAction=e,this.now=t}t.Scheduler=r}),System.registerDynamic(\"npm:rxjs/internal/scheduler/AsyncScheduler.js\",[\"../Scheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"../Scheduler\"),s=(o=a.Scheduler,i(l,o),l.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),l.delegate&&l.delegate!==this?l.delegate.schedule(e,t,n):o.prototype.schedule.call(this,e,t,n)},l.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},l);function l(e,t){void 0===t&&(t=a.Scheduler.now);var n=o.call(this,e,function(){return l.delegate&&l.delegate!==n?l.delegate.now():t()})||this;return n.actions=[],n.active=!1,n.scheduled=void 0,n}t.AsyncScheduler=s}),System.registerDynamic(\"npm:rxjs/internal/scheduler/async.js\",[\"./AsyncAction\",\"./AsyncScheduler\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./AsyncAction\"),i=e(\"./AsyncScheduler\");t.async=new i.AsyncScheduler(r.AsyncAction)}),System.registerDynamic(\"npm:rxjs/internal/util/isNumeric.js\",[\"./isArray\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./isArray\");t.isNumeric=function(e){return!r.isArray(e)&&0<=e-parseFloat(e)+1}}),System.registerDynamic(\"npm:rxjs/internal/util/isScheduler.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isScheduler=function(e){return e&&\"function\"==typeof e.schedule}}),System.registerDynamic(\"npm:rxjs/internal/operators/windowTime.js\",[\"../Subject\",\"../scheduler/async\",\"../Subscriber\",\"../util/isNumeric\",\"../util/isScheduler\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subject\"),a=e(\"../scheduler/async\"),s=e(\"../Subscriber\"),l=e(\"../util/isNumeric\"),u=e(\"../util/isScheduler\");t.windowTime=function(t){var n=a.async,r=null,i=Number.POSITIVE_INFINITY;return u.isScheduler(arguments[3])&&(n=arguments[3]),u.isScheduler(arguments[2])?n=arguments[2]:l.isNumeric(arguments[2])&&(i=arguments[2]),u.isScheduler(arguments[1])?n=arguments[1]:l.isNumeric(arguments[1])&&(r=arguments[1]),function(e){return e.lift(new c(t,r,i,n))}};var c=(p.prototype.call=function(e,t){return t.subscribe(new v(e,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},p);function p(e,t,n,r){this.windowTimeSpan=e,this.windowCreationInterval=t,this.maxWindowSize=n,this.scheduler=r}var d,h=(d=o.Subject,i(f,d),f.prototype.next=function(e){this._numberOfNextedValues++,d.prototype.next.call(this,e)},Object.defineProperty(f.prototype,\"numberOfNextedValues\",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),f);function f(){var e=null!==d&&d.apply(this,arguments)||this;return e._numberOfNextedValues=0,e}var m,v=(m=s.Subscriber,i(y,m),y.prototype._next=function(e){for(var t=this.windows,n=t.length,r=0;r<n;r++){var i=t[r];i.closed||(i.next(e),i.numberOfNextedValues>=this.maxWindowSize&&this.closeWindow(i))}},y.prototype._error=function(e){for(var t=this.windows;0<t.length;)t.shift().error(e);this.destination.error(e)},y.prototype._complete=function(){for(var e=this.windows;0<e.length;){var t=e.shift();t.closed||t.complete()}this.destination.complete()},y.prototype.openWindow=function(){var e=new h;return this.windows.push(e),this.destination.next(e),e},y.prototype.closeWindow=function(e){e.complete();var t=this.windows;t.splice(t.indexOf(e),1)},y);function y(e,t,n,r,i){var o=m.call(this,e)||this;o.destination=e,o.windowTimeSpan=t,o.windowCreationInterval=n,o.maxWindowSize=r,o.scheduler=i,o.windows=[];var a=o.openWindow();if(null!==n&&0<=n){var s={subscriber:o,window:a,context:null},l={windowTimeSpan:t,windowCreationInterval:n,subscriber:o,scheduler:i};o.add(i.schedule(b,t,s)),o.add(i.schedule(_,n,l))}else{var u={subscriber:o,window:a,windowTimeSpan:t};o.add(i.schedule(g,t,u))}return o}function g(e){var t=e.subscriber,n=e.windowTimeSpan,r=e.window;r&&t.closeWindow(r),e.window=t.openWindow(),this.schedule(e,n)}function _(e){var t=e.windowTimeSpan,n=e.subscriber,r=e.scheduler,i=e.windowCreationInterval,o=n.openWindow(),a={action:this,subscription:null},s={subscriber:n,window:o,context:a};a.subscription=r.schedule(b,t,s),this.add(a.subscription),this.schedule(e,i)}function b(e){var t=e.subscriber,n=e.window,r=e.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),t.closeWindow(n)}}),System.registerDynamic(\"npm:rxjs/internal/operators/windowToggle.js\",[\"../Subject\",\"../Subscription\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var c=e(\"../Subject\"),p=e(\"../Subscription\"),o=e(\"../OuterSubscriber\"),d=e(\"../util/subscribeToResult\");t.windowToggle=function(t,n){return function(e){return e.lift(new a(t,n))}};var a=(s.prototype.call=function(e,t){return t.subscribe(new u(e,this.openings,this.closingSelector))},s);function s(e,t){this.openings=e,this.closingSelector=t}var l,u=(l=o.OuterSubscriber,i(h,l),h.prototype._next=function(e){var t=this.contexts;if(t)for(var n=t.length,r=0;r<n;r++)t[r].window.next(e)},h.prototype._error=function(e){var t=this.contexts;if(this.contexts=null,t)for(var n=t.length,r=-1;++r<n;){var i=t[r];i.window.error(e),i.subscription.unsubscribe()}l.prototype._error.call(this,e)},h.prototype._complete=function(){var e=this.contexts;if(this.contexts=null,e)for(var t=e.length,n=-1;++n<t;){var r=e[n];r.window.complete(),r.subscription.unsubscribe()}l.prototype._complete.call(this)},h.prototype._unsubscribe=function(){var e=this.contexts;if(this.contexts=null,e)for(var t=e.length,n=-1;++n<t;){var r=e[n];r.window.unsubscribe(),r.subscription.unsubscribe()}},h.prototype.notifyNext=function(e,t,n,r,i){if(e===this.openings){var o=void 0;try{o=(0,this.closingSelector)(t)}catch(e){return this.error(e)}var a=new c.Subject,s=new p.Subscription,l={window:a,subscription:s};this.contexts.push(l);var u=d.subscribeToResult(this,o,l);u.closed?this.closeWindow(this.contexts.length-1):(u.context=l,s.add(u)),this.destination.next(a)}else this.closeWindow(this.contexts.indexOf(e))},h.prototype.notifyError=function(e){this.error(e)},h.prototype.notifyComplete=function(e){e!==this.openSubscription&&this.closeWindow(this.contexts.indexOf(e.context))},h.prototype.closeWindow=function(e){if(-1!==e){var t=this.contexts,n=t[e],r=n.window,i=n.subscription;t.splice(e,1),r.complete(),i.unsubscribe()}},h);function h(e,t,n){var r=l.call(this,e)||this;return r.openings=t,r.closingSelector=n,r.contexts=[],r.add(r.openSubscription=d.subscribeToResult(r,t,t)),r}}),System.registerDynamic(\"npm:rxjs/internal/util/ObjectUnsubscribedError.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=(i.prototype=Object.create(Error.prototype),i);function i(){return Error.call(this),this.message=\"object unsubscribed\",this.name=\"ObjectUnsubscribedError\",this}t.ObjectUnsubscribedError=r}),System.registerDynamic(\"npm:rxjs/internal/SubjectSubscription.js\",[\"./Subscription\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Subscription\"),s=(o=a.Subscription,i(l,o),l.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},l);function l(e,t){var n=o.call(this)||this;return n.subject=e,n.subscriber=t,n.closed=!1,n}t.SubjectSubscription=s}),System.registerDynamic(\"npm:rxjs/internal/Subject.js\",[\"./Observable\",\"./Subscriber\",\"./Subscription\",\"./util/ObjectUnsubscribedError\",\"./SubjectSubscription\",\"../internal/symbol/rxSubscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Observable\"),s=e(\"./Subscriber\"),l=e(\"./Subscription\"),u=e(\"./util/ObjectUnsubscribedError\"),c=e(\"./SubjectSubscription\"),p=e(\"../internal/symbol/rxSubscriber\"),d=(o=s.Subscriber,i(h,o),h);function h(e){var t=o.call(this,e)||this;return t.destination=e,t}t.SubjectSubscriber=d;var f,m=(f=a.Observable,i(v,f),v.prototype[p.rxSubscriber]=function(){return new d(this)},v.prototype.lift=function(e){var t=new g(this,this);return t.operator=e,t},v.prototype.next=function(e){if(this.closed)throw new u.ObjectUnsubscribedError;if(!this.isStopped)for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].next(e)},v.prototype.error=function(e){if(this.closed)throw new u.ObjectUnsubscribedError;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].error(e);this.observers.length=0},v.prototype.complete=function(){if(this.closed)throw new u.ObjectUnsubscribedError;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),r=0;r<t;r++)n[r].complete();this.observers.length=0},v.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},v.prototype._trySubscribe=function(e){if(this.closed)throw new u.ObjectUnsubscribedError;return f.prototype._trySubscribe.call(this,e)},v.prototype._subscribe=function(e){if(this.closed)throw new u.ObjectUnsubscribedError;return this.hasError?(e.error(this.thrownError),l.Subscription.EMPTY):this.isStopped?(e.complete(),l.Subscription.EMPTY):(this.observers.push(e),new c.SubjectSubscription(this,e))},v.prototype.asObservable=function(){var e=new a.Observable;return e.source=this,e},v.create=function(e,t){return new g(e,t)},v);function v(){var e=f.call(this)||this;return e.observers=[],e.closed=!1,e.isStopped=!1,e.hasError=!1,e.thrownError=null,e}t.Subject=m;var y,g=(i(_,y=m),_.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},_.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},_.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},_.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):l.Subscription.EMPTY},_);function _(e,t){var n=y.call(this)||this;return n.destination=e,n.source=t,n}t.AnonymousSubject=g}),System.registerDynamic(\"npm:rxjs/internal/operators/windowWhen.js\",[\"../Subject\",\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subject\"),a=e(\"../OuterSubscriber\"),s=e(\"../util/subscribeToResult\");t.windowWhen=function(t){return function(e){return e.lift(new l(t))}};var l=(u.prototype.call=function(e,t){return t.subscribe(new p(e,this.closingSelector))},u);function u(e){this.closingSelector=e}var c,p=(c=a.OuterSubscriber,i(d,c),d.prototype.notifyNext=function(e,t,n,r,i){this.openWindow(i)},d.prototype.notifyError=function(e,t){this._error(e)},d.prototype.notifyComplete=function(e){this.openWindow(e)},d.prototype._next=function(e){this.window.next(e)},d.prototype._error=function(e){this.window.error(e),this.destination.error(e),this.unsubscribeClosingNotification()},d.prototype._complete=function(){this.window.complete(),this.destination.complete(),this.unsubscribeClosingNotification()},d.prototype.unsubscribeClosingNotification=function(){this.closingNotification&&this.closingNotification.unsubscribe()},d.prototype.openWindow=function(e){void 0===e&&(e=null),e&&(this.remove(e),e.unsubscribe());var t=this.window;t&&t.complete();var n,r=this.window=new o.Subject;this.destination.next(r);try{n=(0,this.closingSelector)()}catch(e){return this.destination.error(e),void this.window.error(e)}this.add(this.closingNotification=s.subscribeToResult(this,n))},d);function d(e,t){var n=c.call(this,e)||this;return n.destination=e,n.closingSelector=t,n.openWindow(),n}}),System.registerDynamic(\"npm:rxjs/internal/operators/withLatestFrom.js\",[\"../OuterSubscriber\",\"../util/subscribeToResult\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../OuterSubscriber\"),s=e(\"../util/subscribeToResult\");t.withLatestFrom=function(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return function(e){var t;\"function\"==typeof r[r.length-1]&&(t=r.pop());var n=r;return e.lift(new a(n,t))}};var a=(l.prototype.call=function(e,t){return t.subscribe(new c(e,this.observables,this.project))},l);function l(e,t){this.observables=e,this.project=t}var u,c=(u=o.OuterSubscriber,i(p,u),p.prototype.notifyNext=function(e,t,n,r,i){this.values[n]=t;var o=this.toRespond;if(0<o.length){var a=o.indexOf(n);-1!==a&&o.splice(a,1)}},p.prototype.notifyComplete=function(){},p.prototype._next=function(e){if(0===this.toRespond.length){var t=[e].concat(this.values);this.project?this._tryProject(t):this.destination.next(t)}},p.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},p);function p(e,t,n){var r=u.call(this,e)||this;r.observables=t,r.project=n,r.toRespond=[];var i=t.length;r.values=new Array(i);for(var o=0;o<i;o++)r.toRespond.push(o);for(o=0;o<i;o++){var a=t[o];r.add(s.subscribeToResult(r,a,a,o))}return r}}),System.registerDynamic(\"npm:rxjs/internal/operators/zip.js\",[\"../observable/zip\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/zip\");t.zip=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return e.lift.call(r.zip.apply(void 0,[e].concat(t)))}}}),System.registerDynamic(\"npm:rxjs/internal/scheduled/scheduleArray.js\",[\"../Observable\",\"../Subscription\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Observable\"),a=e(\"../Subscription\");t.scheduleArray=function(r,i){return new o.Observable(function(e){var t=new a.Subscription,n=0;return t.add(i.schedule(function(){n!==r.length?(e.next(r[n++]),e.closed||t.add(this.schedule())):e.complete()})),t})}}),System.registerDynamic(\"npm:rxjs/internal/observable/fromArray.js\",[\"../Observable\",\"../util/subscribeToArray\",\"../scheduled/scheduleArray\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Observable\"),i=e(\"../util/subscribeToArray\"),o=e(\"../scheduled/scheduleArray\");t.fromArray=function(e,t){return t?o.scheduleArray(e,t):new r.Observable(i.subscribeToArray(e))}}),System.registerDynamic(\"npm:rxjs/internal/OuterSubscriber.js\",[\"./Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Subscriber\"),s=(o=a.Subscriber,i(l,o),l.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},l.prototype.notifyError=function(e,t){this.destination.error(e)},l.prototype.notifyComplete=function(e){this.destination.complete()},l);function l(){return null!==o&&o.apply(this,arguments)||this}t.OuterSubscriber=s}),System.registerDynamic(\"npm:rxjs/internal/InnerSubscriber.js\",[\"./Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,a=e(\"./Subscriber\"),s=(o=a.Subscriber,i(l,o),l.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},l.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},l.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},l);function l(e,t,n){var r=o.call(this)||this;return r.parent=e,r.outerValue=t,r.outerIndex=n,r.index=0,r}t.InnerSubscriber=s}),System.registerDynamic(\"npm:rxjs/internal/util/subscribeToArray.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.subscribeToArray=function(r){return function(e){for(var t=0,n=r.length;t<n&&!e.closed;t++)e.next(r[t]);e.complete()}}}),System.registerDynamic(\"npm:rxjs/internal/util/subscribeToPromise.js\",[\"./hostReportError\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./hostReportError\");t.subscribeToPromise=function(e){return function(t){return e.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,r.hostReportError),t}}}),System.registerDynamic(\"npm:rxjs/internal/util/subscribeToIterable.js\",[\"../symbol/iterator\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var i=e(\"../symbol/iterator\");t.subscribeToIterable=function(r){return function(e){for(var t=r[i.iterator]();;){var n=t.next();if(n.done){e.complete();break}if(e.next(n.value),e.closed)break}return\"function\"==typeof t.return&&e.add(function(){t.return&&t.return()}),e}}}),System.registerDynamic(\"npm:rxjs/internal/util/subscribeToObservable.js\",[\"../symbol/observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../symbol/observable\");t.subscribeToObservable=function(n){return function(e){var t=n[r.observable]();if(\"function\"!=typeof t.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return t.subscribe(e)}}}),System.registerDynamic(\"npm:rxjs/internal/util/isArrayLike.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isArrayLike=function(e){return e&&\"number\"==typeof e.length&&\"function\"!=typeof e}}),System.registerDynamic(\"npm:rxjs/internal/util/isPromise.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isPromise=function(e){return!!e&&\"function\"!=typeof e.subscribe&&\"function\"==typeof e.then}}),System.registerDynamic(\"npm:rxjs/internal/util/subscribeTo.js\",[\"./subscribeToArray\",\"./subscribeToPromise\",\"./subscribeToIterable\",\"./subscribeToObservable\",\"./isArrayLike\",\"./isPromise\",\"./isObject\",\"../symbol/iterator\",\"../symbol/observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./subscribeToArray\"),i=e(\"./subscribeToPromise\"),o=e(\"./subscribeToIterable\"),a=e(\"./subscribeToObservable\"),s=e(\"./isArrayLike\"),l=e(\"./isPromise\"),u=e(\"./isObject\"),c=e(\"../symbol/iterator\"),p=e(\"../symbol/observable\");t.subscribeTo=function(e){if(e&&\"function\"==typeof e[p.observable])return a.subscribeToObservable(e);if(s.isArrayLike(e))return r.subscribeToArray(e);if(l.isPromise(e))return i.subscribeToPromise(e);if(e&&\"function\"==typeof e[c.iterator])return o.subscribeToIterable(e);var t=u.isObject(e)?\"an invalid object\":\"'\"+e+\"'\";throw new TypeError(\"You provided \"+t+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\")}}),System.registerDynamic(\"npm:rxjs/internal/util/canReportError.js\",[\"../Subscriber\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../Subscriber\");t.canReportError=function(e){for(;e;){var t=e,n=t.closed,r=t.destination,i=t.isStopped;if(n||i)return!1;e=r&&r instanceof o.Subscriber?r:null}return!0}}),System.registerDynamic(\"npm:rxjs/internal/util/isArray.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isArray=Array.isArray||function(e){return e&&\"number\"==typeof e.length}}),System.registerDynamic(\"npm:rxjs/internal/util/isObject.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=function(e){return null!==e&&\"object\"==typeof e}}),System.registerDynamic(\"npm:rxjs/internal/util/isFunction.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.isFunction=function(e){return\"function\"==typeof e}}),System.registerDynamic(\"npm:rxjs/internal/util/UnsubscriptionError.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=(i.prototype=Object.create(Error.prototype),i);function i(e){return Error.call(this),this.message=e?e.length+\" errors occurred during unsubscription:\\n\"+e.map(function(e,t){return t+1+\") \"+e.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=e,this}t.UnsubscriptionError=r}),System.registerDynamic(\"npm:rxjs/internal/Subscription.js\",[\"./util/isArray\",\"./util/isObject\",\"./util/isFunction\",\"./util/UnsubscriptionError\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r,s=e(\"./util/isArray\"),l=e(\"./util/isObject\"),u=e(\"./util/isFunction\"),c=e(\"./util/UnsubscriptionError\"),i=(p.prototype.unsubscribe=function(){var t;if(!this.closed){var e=this._parentOrParents,n=this._unsubscribe,r=this._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,e instanceof p)e.remove(this);else if(null!==e)for(var i=0;i<e.length;++i)e[i].remove(this);if(u.isFunction(n))try{n.call(this)}catch(e){t=e instanceof c.UnsubscriptionError?d(e.errors):[e]}if(s.isArray(r)){i=-1;for(var o=r.length;++i<o;){var a=r[i];if(l.isObject(a))try{a.unsubscribe()}catch(e){t=t||[],e instanceof c.UnsubscriptionError?t=t.concat(d(e.errors)):t.push(e)}}}if(t)throw new c.UnsubscriptionError(t)}},p.prototype.add=function(e){var t=e;if(!e)return p.EMPTY;switch(typeof e){case\"function\":t=new p(e);case\"object\":if(t===this||t.closed||\"function\"!=typeof t.unsubscribe)return t;if(this.closed)return t.unsubscribe(),t;if(!(t instanceof p)){var n=t;(t=new p)._subscriptions=[n]}break;default:throw new Error(\"unrecognized teardown \"+e+\" added to Subscription.\")}var r=t._parentOrParents;if(null===r)t._parentOrParents=this;else if(r instanceof p){if(r===this)return t;t._parentOrParents=[r,this]}else{if(-1!==r.indexOf(this))return t;r.push(this)}var i=this._subscriptions;return null===i?this._subscriptions=[t]:i.push(t),t},p.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},p.EMPTY=((r=new p).closed=!0,r),p);function p(e){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,e&&(this._unsubscribe=e)}function d(e){return e.reduce(function(e,t){return e.concat(t instanceof c.UnsubscriptionError?t.errors:t)},[])}t.Subscription=i}),System.registerDynamic(\"npm:rxjs/internal/Subscriber.js\",[\"./util/isFunction\",\"./Observer\",\"./Subscription\",\"../internal/symbol/rxSubscriber\",\"./config\",\"./util/hostReportError\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o,s=e(\"./util/isFunction\"),l=e(\"./Observer\"),a=e(\"./Subscription\"),u=e(\"../internal/symbol/rxSubscriber\"),c=e(\"./config\"),p=e(\"./util/hostReportError\"),d=(o=a.Subscription,i(h,o),h.prototype[u.rxSubscriber]=function(){return this},h.create=function(e,t,n){var r=new h(e,t,n);return r.syncErrorThrowable=!1,r},h.prototype.next=function(e){this.isStopped||this._next(e)},h.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},h.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},h.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,o.prototype.unsubscribe.call(this))},h.prototype._next=function(e){this.destination.next(e)},h.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},h.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},h.prototype._unsubscribeAndRecycle=function(){var e=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=e,this},h);function h(e,t,n){var r=o.call(this)||this;switch(r.syncErrorValue=null,r.syncErrorThrown=!1,r.syncErrorThrowable=!1,r.isStopped=!1,arguments.length){case 0:r.destination=l.empty;break;case 1:if(!e){r.destination=l.empty;break}if(\"object\"==typeof e){e instanceof h?(r.syncErrorThrowable=e.syncErrorThrowable,(r.destination=e).add(r)):(r.syncErrorThrowable=!0,r.destination=new m(r,e));break}default:r.syncErrorThrowable=!0,r.destination=new m(r,e,t,n)}return r}t.Subscriber=d;var f,m=(i(v,f=d),v.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;c.config.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},v.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber,n=c.config.useDeprecatedSynchronousErrorHandling;if(this._error)n&&t.syncErrorThrowable?this.__tryOrSetError(t,this._error,e):this.__tryOrUnsub(this._error,e),this.unsubscribe();else if(t.syncErrorThrowable)n?(t.syncErrorValue=e,t.syncErrorThrown=!0):p.hostReportError(e),this.unsubscribe();else{if(this.unsubscribe(),n)throw e;p.hostReportError(e)}}},v.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};c.config.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,n):this.__tryOrUnsub(n),this.unsubscribe()}else this.unsubscribe()}},v.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){if(this.unsubscribe(),c.config.useDeprecatedSynchronousErrorHandling)throw e;p.hostReportError(e)}},v.prototype.__tryOrSetError=function(t,e,n){if(!c.config.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{e.call(this._context,n)}catch(e){return c.config.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0):(p.hostReportError(e),!0)}return!1},v.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},v);function v(e,t,n,r){var i,o=f.call(this)||this;o._parentSubscriber=e;var a=o;return s.isFunction(t)?i=t:t&&(i=t.next,n=t.error,r=t.complete,t!==l.empty&&(a=Object.create(t),s.isFunction(a.unsubscribe)&&o.add(a.unsubscribe.bind(a)),a.unsubscribe=o.unsubscribe.bind(o))),o._context=a,o._next=i,o._error=n,o._complete=r,o}t.SafeSubscriber=m}),System.registerDynamic(\"npm:rxjs/internal/symbol/rxSubscriber.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.rxSubscriber=\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random(),t.$$rxSubscriber=t.rxSubscriber}),System.registerDynamic(\"npm:rxjs/internal/util/hostReportError.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.hostReportError=function(e){setTimeout(function(){throw e},0)}}),System.registerDynamic(\"npm:rxjs/internal/Observer.js\",[\"./config\",\"./util/hostReportError\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./config\"),i=e(\"./util/hostReportError\");t.empty={closed:!0,next:function(e){},error:function(e){if(r.config.useDeprecatedSynchronousErrorHandling)throw e;i.hostReportError(e)},complete:function(){}}}),System.registerDynamic(\"npm:rxjs/internal/util/toSubscriber.js\",[\"../Subscriber\",\"../symbol/rxSubscriber\",\"../Observer\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../Subscriber\"),i=e(\"../symbol/rxSubscriber\"),o=e(\"../Observer\");t.toSubscriber=function(e,t,n){if(e){if(e instanceof r.Subscriber)return e;if(e[i.rxSubscriber])return e[i.rxSubscriber]()}return e||t||n?new r.Subscriber(e,t,n):new r.Subscriber(o.empty)}}),System.registerDynamic(\"npm:rxjs/internal/symbol/observable.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.observable=\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}),System.registerDynamic(\"npm:rxjs/internal/util/noop.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0}),t.noop=function(){}}),System.registerDynamic(\"npm:rxjs/internal/util/pipe.js\",[\"./noop\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./noop\");function i(t){return t?1===t.length?t[0]:function(e){return t.reduce(function(e,t){return t(e)},e)}:r.noop}t.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return i(e)},t.pipeFromArray=i}),System.registerDynamic(\"npm:rxjs/internal/config.js\",[],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=!1;t.config={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){if(e){var t=new Error;console.warn(\"DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n\"+t.stack)}else r&&console.log(\"RxJS: Back to a better error behavior. Thank you. <3\");r=e},get useDeprecatedSynchronousErrorHandling(){return r}}}),System.registerDynamic(\"npm:rxjs/internal/Observable.js\",[\"./util/canReportError\",\"./util/toSubscriber\",\"./symbol/observable\",\"./util/pipe\",\"./config\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"./util/canReportError\"),o=e(\"./util/toSubscriber\"),i=e(\"./symbol/observable\"),a=e(\"./util/pipe\"),s=e(\"./config\"),l=(u.prototype.lift=function(e){var t=new u;return t.source=this,t.operator=e,t},u.prototype.subscribe=function(e,t,n){var r=this.operator,i=o.toSubscriber(e,t,n);if(r?i.add(r.call(i,this.source)):i.add(this.source||s.config.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i)),s.config.useDeprecatedSynchronousErrorHandling&&i.syncErrorThrowable&&(i.syncErrorThrowable=!1,i.syncErrorThrown))throw i.syncErrorValue;return i},u.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){s.config.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),r.canReportError(t)?t.error(e):console.warn(e)}},u.prototype.forEach=function(r,e){var i=this;return new(e=c(e))(function(e,t){var n;n=i.subscribe(function(e){try{r(e)}catch(e){t(e),n&&n.unsubscribe()}},t,e)})},u.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)},u.prototype[i.observable]=function(){return this},u.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 0===e.length?this:a.pipeFromArray(e)(this)},u.prototype.toPromise=function(e){var r=this;return new(e=c(e))(function(e,t){var n;r.subscribe(function(e){return n=e},function(e){return t(e)},function(){return e(n)})})},u.create=function(e){return new u(e)},u);function u(e){this._isScalar=!1,e&&(this._subscribe=e)}function c(e){if(!(e=e||(s.config.Promise||Promise)))throw new Error(\"no Promise impl found\");return e}t.Observable=l}),System.registerDynamic(\"npm:rxjs/internal/util/subscribeToResult.js\",[\"../InnerSubscriber\",\"./subscribeTo\",\"../Observable\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"../InnerSubscriber\"),a=e(\"./subscribeTo\"),s=e(\"../Observable\");t.subscribeToResult=function(e,t,n,r,i){if(void 0===i&&(i=new o.InnerSubscriber(e,n,r)),!i.closed)return t instanceof s.Observable?t.subscribe(i):a.subscribeTo(t)(i)}}),System.registerDynamic(\"npm:rxjs/internal/symbol/iterator.js\",[],!0,function(e,t,n){\"use strict\";this||self;function r(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getSymbolIterator=r,t.iterator=r(),t.$$iterator=t.iterator}),System.registerDynamic(\"npm:rxjs/internal/observable/zip.js\",[\"./fromArray\",\"../util/isArray\",\"../Subscriber\",\"../OuterSubscriber\",\"../util/subscribeToResult\",\"../../internal/symbol/iterator\"],!0,function(e,t,n){\"use strict\";this||self;var r,i=t&&t.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,\"__esModule\",{value:!0});var o=e(\"./fromArray\"),a=e(\"../util/isArray\"),s=e(\"../Subscriber\"),l=e(\"../OuterSubscriber\"),u=e(\"../util/subscribeToResult\"),c=e(\"../../internal/symbol/iterator\");t.zip=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return\"function\"==typeof n&&e.pop(),o.fromArray(e,void 0).lift(new p(n))};var p=(d.prototype.call=function(e,t){return t.subscribe(new f(e,this.resultSelector))},d);function d(e){this.resultSelector=e}t.ZipOperator=p;var h,f=(h=s.Subscriber,i(m,h),m.prototype._next=function(e){var t=this.iterators;a.isArray(e)?t.push(new g(e)):\"function\"==typeof e[c.iterator]?t.push(new v(e[c.iterator]())):t.push(new w(this.destination,this,e))},m.prototype._complete=function(){var e=this.iterators,t=e.length;if(this.unsubscribe(),0!==t){this.active=t;for(var n=0;n<t;n++){var r=e[n];r.stillUnsubscribed?this.destination.add(r.subscribe(r,n)):this.active--}}else this.destination.complete()},m.prototype.notifyInactive=function(){this.active--,0===this.active&&this.destination.complete()},m.prototype.checkIterators=function(){for(var e=this.iterators,t=e.length,n=this.destination,r=0;r<t;r++)if(\"function\"==typeof(a=e[r]).hasValue&&!a.hasValue())return;var i=!1,o=[];for(r=0;r<t;r++){var a,s=(a=e[r]).next();if(a.hasCompleted()&&(i=!0),s.done)return void n.complete();o.push(s.value)}this.resultSelector?this._tryresultSelector(o):n.next(o),i&&n.complete()},m.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},m);function m(e,t,n){void 0===n&&(n=Object.create(null));var r=h.call(this,e)||this;return r.iterators=[],r.active=0,r.resultSelector=\"function\"==typeof t?t:null,r.values=n,r}t.ZipSubscriber=f;var v=(y.prototype.hasValue=function(){return!0},y.prototype.next=function(){var e=this.nextResult;return this.nextResult=this.iterator.next(),e},y.prototype.hasCompleted=function(){var e=this.nextResult;return e&&e.done},y);function y(e){this.iterator=e,this.nextResult=e.next()}var g=(_.prototype[c.iterator]=function(){return this},_.prototype.next=function(e){var t=this.index++,n=this.array;return t<this.length?{value:n[t],done:!1}:{value:null,done:!0}},_.prototype.hasValue=function(){return this.array.length>this.index},_.prototype.hasCompleted=function(){return this.array.length===this.index},_);function _(e){this.array=e,this.index=0,this.length=0,this.length=e.length}var b,w=(b=l.OuterSubscriber,i(x,b),x.prototype[c.iterator]=function(){return this},x.prototype.next=function(){var e=this.buffer;return 0===e.length&&this.isComplete?{value:null,done:!0}:{value:e.shift(),done:!1}},x.prototype.hasValue=function(){return 0<this.buffer.length},x.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},x.prototype.notifyComplete=function(){0<this.buffer.length?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},x.prototype.notifyNext=function(e,t,n,r,i){this.buffer.push(t),this.parent.checkIterators()},x.prototype.subscribe=function(e,t){return u.subscribeToResult(this,this.observable,this,t)},x);function x(e,t,n){var r=b.call(this,e)||this;return r.parent=t,r.observable=n,r.stillUnsubscribed=!0,r.buffer=[],r.isComplete=!1,r}}),System.registerDynamic(\"npm:rxjs/internal/operators/zipAll.js\",[\"../observable/zip\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../observable/zip\");t.zipAll=function(t){return function(e){return e.lift(new r.ZipOperator(t))}}}),System.registerDynamic(\"npm:rxjs/operators/index.js\",[\"../internal/operators/audit\",\"../internal/operators/auditTime\",\"../internal/operators/buffer\",\"../internal/operators/bufferCount\",\"../internal/operators/bufferTime\",\"../internal/operators/bufferToggle\",\"../internal/operators/bufferWhen\",\"../internal/operators/catchError\",\"../internal/operators/combineAll\",\"../internal/operators/combineLatest\",\"../internal/operators/concat\",\"../internal/operators/concatAll\",\"../internal/operators/concatMap\",\"../internal/operators/concatMapTo\",\"../internal/operators/count\",\"../internal/operators/debounce\",\"../internal/operators/debounceTime\",\"../internal/operators/defaultIfEmpty\",\"../internal/operators/delay\",\"../internal/operators/delayWhen\",\"../internal/operators/dematerialize\",\"../internal/operators/distinct\",\"../internal/operators/distinctUntilChanged\",\"../internal/operators/distinctUntilKeyChanged\",\"../internal/operators/elementAt\",\"../internal/operators/endWith\",\"../internal/operators/every\",\"../internal/operators/exhaust\",\"../internal/operators/exhaustMap\",\"../internal/operators/expand\",\"../internal/operators/filter\",\"../internal/operators/finalize\",\"../internal/operators/find\",\"../internal/operators/findIndex\",\"../internal/operators/first\",\"../internal/operators/groupBy\",\"../internal/operators/ignoreElements\",\"../internal/operators/isEmpty\",\"../internal/operators/last\",\"../internal/operators/map\",\"../internal/operators/mapTo\",\"../internal/operators/materialize\",\"../internal/operators/max\",\"../internal/operators/merge\",\"../internal/operators/mergeAll\",\"../internal/operators/mergeMap\",\"../internal/operators/mergeMapTo\",\"../internal/operators/mergeScan\",\"../internal/operators/min\",\"../internal/operators/multicast\",\"../internal/operators/observeOn\",\"../internal/operators/onErrorResumeNext\",\"../internal/operators/pairwise\",\"../internal/operators/partition\",\"../internal/operators/pluck\",\"../internal/operators/publish\",\"../internal/operators/publishBehavior\",\"../internal/operators/publishLast\",\"../internal/operators/publishReplay\",\"../internal/operators/race\",\"../internal/operators/reduce\",\"../internal/operators/repeat\",\"../internal/operators/repeatWhen\",\"../internal/operators/retry\",\"../internal/operators/retryWhen\",\"../internal/operators/refCount\",\"../internal/operators/sample\",\"../internal/operators/sampleTime\",\"../internal/operators/scan\",\"../internal/operators/sequenceEqual\",\"../internal/operators/share\",\"../internal/operators/shareReplay\",\"../internal/operators/single\",\"../internal/operators/skip\",\"../internal/operators/skipLast\",\"../internal/operators/skipUntil\",\"../internal/operators/skipWhile\",\"../internal/operators/startWith\",\"../internal/operators/subscribeOn\",\"../internal/operators/switchAll\",\"../internal/operators/switchMap\",\"../internal/operators/switchMapTo\",\"../internal/operators/take\",\"../internal/operators/takeLast\",\"../internal/operators/takeUntil\",\"../internal/operators/takeWhile\",\"../internal/operators/tap\",\"../internal/operators/throttle\",\"../internal/operators/throttleTime\",\"../internal/operators/throwIfEmpty\",\"../internal/operators/timeInterval\",\"../internal/operators/timeout\",\"../internal/operators/timeoutWith\",\"../internal/operators/timestamp\",\"../internal/operators/toArray\",\"../internal/operators/window\",\"../internal/operators/windowCount\",\"../internal/operators/windowTime\",\"../internal/operators/windowToggle\",\"../internal/operators/windowWhen\",\"../internal/operators/withLatestFrom\",\"../internal/operators/zip\",\"../internal/operators/zipAll\"],!0,function(e,t,n){\"use strict\";this||self;Object.defineProperty(t,\"__esModule\",{value:!0});var r=e(\"../internal/operators/audit\");t.audit=r.audit;var i=e(\"../internal/operators/auditTime\");t.auditTime=i.auditTime;var o=e(\"../internal/operators/buffer\");t.buffer=o.buffer;var a=e(\"../internal/operators/bufferCount\");t.bufferCount=a.bufferCount;var s=e(\"../internal/operators/bufferTime\");t.bufferTime=s.bufferTime;var l=e(\"../internal/operators/bufferToggle\");t.bufferToggle=l.bufferToggle;var u=e(\"../internal/operators/bufferWhen\");t.bufferWhen=u.bufferWhen;var c=e(\"../internal/operators/catchError\");t.catchError=c.catchError;var p=e(\"../internal/operators/combineAll\");t.combineAll=p.combineAll;var d=e(\"../internal/operators/combineLatest\");t.combineLatest=d.combineLatest;var h=e(\"../internal/operators/concat\");t.concat=h.concat;var f=e(\"../internal/operators/concatAll\");t.concatAll=f.concatAll;var m=e(\"../internal/operators/concatMap\");t.concatMap=m.concatMap;var v=e(\"../internal/operators/concatMapTo\");t.concatMapTo=v.concatMapTo;var y=e(\"../internal/operators/count\");t.count=y.count;var g=e(\"../internal/operators/debounce\");t.debounce=g.debounce;var _=e(\"../internal/operators/debounceTime\");t.debounceTime=_.debounceTime;var b=e(\"../internal/operators/defaultIfEmpty\");t.defaultIfEmpty=b.defaultIfEmpty;var w=e(\"../internal/operators/delay\");t.delay=w.delay;var x=e(\"../internal/operators/delayWhen\");t.delayWhen=x.delayWhen;var C=e(\"../internal/operators/dematerialize\");t.dematerialize=C.dematerialize;var S=e(\"../internal/operators/distinct\");t.distinct=S.distinct;var E=e(\"../internal/operators/distinctUntilChanged\");t.distinctUntilChanged=E.distinctUntilChanged;var O=e(\"../internal/operators/distinctUntilKeyChanged\");t.distinctUntilKeyChanged=O.distinctUntilKeyChanged;var k=e(\"../internal/operators/elementAt\");t.elementAt=k.elementAt;var D=e(\"../internal/operators/endWith\");t.endWith=D.endWith;var T=e(\"../internal/operators/every\");t.every=T.every;var I=e(\"../internal/operators/exhaust\");t.exhaust=I.exhaust;var P=e(\"../internal/operators/exhaustMap\");t.exhaustMap=P.exhaustMap;var A=e(\"../internal/operators/expand\");t.expand=A.expand;var M=e(\"../internal/operators/filter\");t.filter=M.filter;var R=e(\"../internal/operators/finalize\");t.finalize=R.finalize;var N=e(\"../internal/operators/find\");t.find=N.find;var j=e(\"../internal/operators/findIndex\");t.findIndex=j.findIndex;var F=e(\"../internal/operators/first\");t.first=F.first;var L=e(\"../internal/operators/groupBy\");t.groupBy=L.groupBy;var V=e(\"../internal/operators/ignoreElements\");t.ignoreElements=V.ignoreElements;var B=e(\"../internal/operators/isEmpty\");t.isEmpty=B.isEmpty;var U=e(\"../internal/operators/last\");t.last=U.last;var z=e(\"../internal/operators/map\");t.map=z.map;var q=e(\"../internal/operators/mapTo\");t.mapTo=q.mapTo;var H=e(\"../internal/operators/materialize\");t.materialize=H.materialize;var W=e(\"../internal/operators/max\");t.max=W.max;var G=e(\"../internal/operators/merge\");t.merge=G.merge;var Y=e(\"../internal/operators/mergeAll\");t.mergeAll=Y.mergeAll;var K=e(\"../internal/operators/mergeMap\");t.mergeMap=K.mergeMap;var Z=e(\"../internal/operators/mergeMap\");t.flatMap=Z.mergeMap;var Q=e(\"../internal/operators/mergeMapTo\");t.mergeMapTo=Q.mergeMapTo;var X=e(\"../internal/operators/mergeScan\");t.mergeScan=X.mergeScan;var $=e(\"../internal/operators/min\");t.min=$.min;var J=e(\"../internal/operators/multicast\");t.multicast=J.multicast;var ee=e(\"../internal/operators/observeOn\");t.observeOn=ee.observeOn;var te=e(\"../internal/operators/onErrorResumeNext\");t.onErrorResumeNext=te.onErrorResumeNext;var ne=e(\"../internal/operators/pairwise\");t.pairwise=ne.pairwise;var re=e(\"../internal/operators/partition\");t.partition=re.partition;var ie=e(\"../internal/operators/pluck\");t.pluck=ie.pluck;var oe=e(\"../internal/operators/publish\");t.publish=oe.publish;var ae=e(\"../internal/operators/publishBehavior\");t.publishBehavior=ae.publishBehavior;var se=e(\"../internal/operators/publishLast\");t.publishLast=se.publishLast;var le=e(\"../internal/operators/publishReplay\");t.publishReplay=le.publishReplay;var ue=e(\"../internal/operators/race\");t.race=ue.race;var ce=e(\"../internal/operators/reduce\");t.reduce=ce.reduce;var pe=e(\"../internal/operators/repeat\");t.repeat=pe.repeat;var de=e(\"../internal/operators/repeatWhen\");t.repeatWhen=de.repeatWhen;var he=e(\"../internal/operators/retry\");t.retry=he.retry;var fe=e(\"../internal/operators/retryWhen\");t.retryWhen=fe.retryWhen;var me=e(\"../internal/operators/refCount\");t.refCount=me.refCount;var ve=e(\"../internal/operators/sample\");t.sample=ve.sample;var ye=e(\"../internal/operators/sampleTime\");t.sampleTime=ye.sampleTime;var ge=e(\"../internal/operators/scan\");t.scan=ge.scan;var _e=e(\"../internal/operators/sequenceEqual\");t.sequenceEqual=_e.sequenceEqual;var be=e(\"../internal/operators/share\");t.share=be.share;var we=e(\"../internal/operators/shareReplay\");t.shareReplay=we.shareReplay;var xe=e(\"../internal/operators/single\");t.single=xe.single;var Ce=e(\"../internal/operators/skip\");t.skip=Ce.skip;var Se=e(\"../internal/operators/skipLast\");t.skipLast=Se.skipLast;var Ee=e(\"../internal/operators/skipUntil\");t.skipUntil=Ee.skipUntil;var Oe=e(\"../internal/operators/skipWhile\");t.skipWhile=Oe.skipWhile;var ke=e(\"../internal/operators/startWith\");t.startWith=ke.startWith;var De=e(\"../internal/operators/subscribeOn\");t.subscribeOn=De.subscribeOn;var Te=e(\"../internal/operators/switchAll\");t.switchAll=Te.switchAll;var Ie=e(\"../internal/operators/switchMap\");t.switchMap=Ie.switchMap;var Pe=e(\"../internal/operators/switchMapTo\");t.switchMapTo=Pe.switchMapTo;var Ae=e(\"../internal/operators/take\");t.take=Ae.take;var Me=e(\"../internal/operators/takeLast\");t.takeLast=Me.takeLast;var Re=e(\"../internal/operators/takeUntil\");t.takeUntil=Re.takeUntil;var Ne=e(\"../internal/operators/takeWhile\");t.takeWhile=Ne.takeWhile;var je=e(\"../internal/operators/tap\");t.tap=je.tap;var Fe=e(\"../internal/operators/throttle\");t.throttle=Fe.throttle;var Le=e(\"../internal/operators/throttleTime\");t.throttleTime=Le.throttleTime;var Ve=e(\"../internal/operators/throwIfEmpty\");t.throwIfEmpty=Ve.throwIfEmpty;var Be=e(\"../internal/operators/timeInterval\");t.timeInterval=Be.timeInterval;var Ue=e(\"../internal/operators/timeout\");t.timeout=Ue.timeout;var ze=e(\"../internal/operators/timeoutWith\");t.timeoutWith=ze.timeoutWith;var qe=e(\"../internal/operators/timestamp\");t.timestamp=qe.timestamp;var He=e(\"../internal/operators/toArray\");t.toArray=He.toArray;var We=e(\"../internal/operators/window\");t.window=We.window;var Ge=e(\"../internal/operators/windowCount\");t.windowCount=Ge.windowCount;var Ye=e(\"../internal/operators/windowTime\");t.windowTime=Ye.windowTime;var Ke=e(\"../internal/operators/windowToggle\");t.windowToggle=Ke.windowToggle;var Ze=e(\"../internal/operators/windowWhen\");t.windowWhen=Ze.windowWhen;var Qe=e(\"../internal/operators/withLatestFrom\");t.withLatestFrom=Qe.withLatestFrom;var Xe=e(\"../internal/operators/zip\");t.zip=Xe.zip;var $e=e(\"../internal/operators/zipAll\");t.zipAll=$e.zipAll}),function(e,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports,require(\"tslib\"),require(\"@angular/cdk/tree\"),require(\"@angular/core\"),require(\"@angular/material/core\"),require(\"@angular/cdk/coercion\"),require(\"@angular/common\"),require(\"@angular/cdk/collections\"),require(\"rxjs\"),require(\"rxjs/operators\")):System.registerDynamic(\"npm:@angular/material/bundles/material-tree.umd.js\",[\"tslib\",\"@angular/cdk/tree\",\"@angular/core\",\"@angular/material/core\",\"@angular/cdk/coercion\",\"@angular/common\",\"@angular/cdk/collections\",\"rxjs\",\"rxjs/operators\"],!1,function(e,t,n){return r.call(t,t,e(\"tslib\"),e(\"@angular/cdk/tree\"),e(\"@angular/core\"),e(\"@angular/material/core\"),e(\"@angular/cdk/coercion\"),e(\"@angular/common\"),e(\"@angular/cdk/collections\"),e(\"rxjs\"),e(\"rxjs/operators\"))})}(0,function(e,r,t,n,i,o,a,s,l,u){\"use strict\";var c,p=i.mixinTabIndex(i.mixinDisabled(t.CdkTreeNode)),d=(c=p,r.__extends(h,c),h.decorators=[{type:n.Directive,args:[{selector:\"mat-tree-node\",exportAs:\"matTreeNode\",inputs:[\"disabled\",\"tabIndex\"],host:{\"[attr.aria-expanded]\":\"isExpanded\",\"[attr.aria-level]\":'role === \"treeitem\" ? level : null',\"[attr.role]\":\"role\",class:\"mat-tree-node\"},providers:[{provide:t.CdkTreeNode,useExisting:h}]}]}],h.ctorParameters=function(){return[{type:n.ElementRef},{type:t.CdkTree},{type:String,decorators:[{type:n.Attribute,args:[\"tabindex\"]}]}]},h.propDecorators={role:[{type:n.Input}]},h);function h(e,t,n){var r=c.call(this,e,t)||this;return r._elementRef=e,r._tree=t,r.role=\"treeitem\",r.tabIndex=Number(n)||0,r}var f,m=(f=t.CdkTreeNodeDef,r.__extends(v,f),v.decorators=[{type:n.Directive,args:[{selector:\"[matTreeNodeDef]\",inputs:[\"when: matTreeNodeDefWhen\"],providers:[{provide:t.CdkTreeNodeDef,useExisting:v}]}]}],v.propDecorators={data:[{type:n.Input,args:[\"matTreeNode\"]}]},v);function v(){return null!==f&&f.apply(this,arguments)||this}var y,g=(y=t.CdkNestedTreeNode,r.__extends(_,y),Object.defineProperty(_.prototype,\"disabled\",{get:function(){return this._disabled},set:function(e){this._disabled=o.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"tabIndex\",{get:function(){return this.disabled?-1:this._tabIndex},set:function(e){this._tabIndex=null!=e?e:0},enumerable:!0,configurable:!0}),_.prototype.ngAfterContentInit=function(){y.prototype.ngAfterContentInit.call(this)},_.prototype.ngOnDestroy=function(){y.prototype.ngOnDestroy.call(this)},_.decorators=[{type:n.Directive,args:[{selector:\"mat-nested-tree-node\",exportAs:\"matNestedTreeNode\",host:{\"[attr.aria-expanded]\":\"isExpanded\",\"[attr.role]\":\"role\",class:\"mat-nested-tree-node\"},providers:[{provide:t.CdkNestedTreeNode,useExisting:_},{provide:t.CdkTreeNode,useExisting:_},{provide:t.CDK_TREE_NODE_OUTLET_NODE,useExisting:_}]}]}],_.ctorParameters=function(){return[{type:n.ElementRef},{type:t.CdkTree},{type:n.IterableDiffers},{type:String,decorators:[{type:n.Attribute,args:[\"tabindex\"]}]}]},_.propDecorators={node:[{type:n.Input,args:[\"matNestedTreeNode\"]}],disabled:[{type:n.Input}],tabIndex:[{type:n.Input}]},_);function _(e,t,n,r){var i=y.call(this,e,t,n)||this;return i._elementRef=e,i._tree=t,i._differs=n,i._disabled=!1,i.tabIndex=Number(r)||0,i}var b,w=(b=t.CdkTreeNodePadding,r.__extends(x,b),x.decorators=[{type:n.Directive,args:[{selector:\"[matTreeNodePadding]\",providers:[{provide:t.CdkTreeNodePadding,useExisting:x}]}]}],x.propDecorators={level:[{type:n.Input,args:[\"matTreeNodePadding\"]}],indent:[{type:n.Input,args:[\"matTreeNodePaddingIndent\"]}]},x);function x(){return null!==b&&b.apply(this,arguments)||this}var C=(S.decorators=[{type:n.Directive,args:[{selector:\"[matTreeNodeOutlet]\",providers:[{provide:t.CdkTreeNodeOutlet,useExisting:S}]}]}],S.ctorParameters=function(){return[{type:n.ViewContainerRef},{type:void 0,decorators:[{type:n.Inject,args:[t.CDK_TREE_NODE_OUTLET_NODE]},{type:n.Optional}]}]},S);function S(e,t){this.viewContainer=e,this._node=t}var E,O=(E=t.CdkTree,r.__extends(k,E),k.decorators=[{type:n.Component,args:[{moduleId:module.id,selector:\"mat-tree\",exportAs:\"matTree\",template:\"<ng-container matTreeNodeOutlet></ng-container>\",host:{class:\"mat-tree\",role:\"tree\"},encapsulation:n.ViewEncapsulation.None,changeDetection:n.ChangeDetectionStrategy.Default,providers:[{provide:t.CdkTree,useExisting:k}],styles:[\".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;min-height:48px;flex:1;overflow:hidden;word-wrap:break-word}.mat-nested-tree-ndoe{border-bottom-width:0}/*# sourceMappingURL=tree.css.map */\\n\"]}]}],k.propDecorators={_nodeOutlet:[{type:n.ViewChild,args:[C,{static:!0}]}]},k);function k(){return null!==E&&E.apply(this,arguments)||this}var D,T=(D=t.CdkTreeNodeToggle,r.__extends(I,D),I.decorators=[{type:n.Directive,args:[{selector:\"[matTreeNodeToggle]\",providers:[{provide:t.CdkTreeNodeToggle,useExisting:I}]}]}],I.propDecorators={recursive:[{type:n.Input,args:[\"matTreeNodeToggleRecursive\"]}]},I);function I(){var e=null!==D&&D.apply(this,arguments)||this;return e.recursive=!1,e}var P=[g,m,w,T,O,d,C],A=(M.decorators=[{type:n.NgModule,args:[{imports:[t.CdkTreeModule,a.CommonModule,i.MatCommonModule],exports:P,declarations:P}]}],M);function M(){}var R=(N.prototype._flattenNode=function(e,t,n,r){var i=this,o=this.transformFunction(e,t);if(n.push(o),this.isExpandable(o)){var a=this.getChildren(e);a&&(Array.isArray(a)?this._flattenChildren(a,t,n,r):a.pipe(u.take(1)).subscribe(function(e){i._flattenChildren(e,t,n,r)}))}return n},N.prototype._flattenChildren=function(r,i,o,a){var s=this;r.forEach(function(e,t){var n=a.slice();n.push(t!=r.length-1),s._flattenNode(e,i+1,o,n)})},N.prototype.flattenNodes=function(e){var t=this,n=[];return e.forEach(function(e){return t._flattenNode(e,0,n,[])}),n},N.prototype.expandFlattenedNodes=function(e,r){var i=this,o=[],a=[];return a[0]=!0,e.forEach(function(e){for(var t=!0,n=0;n<=i.getLevel(e);n++)t=t&&a[n];t&&o.push(e),i.isExpandable(e)&&(a[i.getLevel(e)+1]=r.isExpanded(e))}),o},N);function N(e,t,n,r){this.transformFunction=e,this.getLevel=t,this.isExpandable=n,this.getChildren=r}var j,F=(j=s.DataSource,r.__extends(L,j),Object.defineProperty(L.prototype,\"data\",{get:function(){return this._data.value},set:function(e){this._data.next(e),this._flattenedData.next(this._treeFlattener.flattenNodes(this.data)),this._treeControl.dataNodes=this._flattenedData.value},enumerable:!0,configurable:!0}),L.prototype.connect=function(e){var t=this,n=[e.viewChange,this._treeControl.expansionModel.onChange,this._flattenedData];return l.merge.apply(void 0,r.__spread(n)).pipe(u.map(function(){return t._expandedData.next(t._treeFlattener.expandFlattenedNodes(t._flattenedData.value,t._treeControl)),t._expandedData.value}))},L.prototype.disconnect=function(){},L);function L(e,t,n){void 0===n&&(n=[]);var r=j.call(this)||this;return r._treeControl=e,r._treeFlattener=t,r._flattenedData=new l.BehaviorSubject([]),r._expandedData=new l.BehaviorSubject([]),r._data=new l.BehaviorSubject(n),r}var V,B=(V=s.DataSource,r.__extends(U,V),Object.defineProperty(U.prototype,\"data\",{get:function(){return this._data.value},set:function(e){this._data.next(e)},enumerable:!0,configurable:!0}),U.prototype.connect=function(e){var t=this;return l.merge.apply(void 0,r.__spread([e.viewChange,this._data])).pipe(u.map(function(){return t.data}))},U.prototype.disconnect=function(){},U);function U(){var e=null!==V&&V.apply(this,arguments)||this;return e._data=new l.BehaviorSubject([]),e}e.MatTreeNode=d,e.MatTreeNodeDef=m,e.MatNestedTreeNode=g,e.MatTreeNodePadding=w,e.MatTree=O,e.MatTreeModule=A,e.MatTreeNodeToggle=T,e.MatTreeNodeOutlet=C,e.MatTreeFlattener=R,e.MatTreeFlatDataSource=F,e.MatTreeNestedDataSource=B,Object.defineProperty(e,\"__esModule\",{value:!0})}),System.register(\"libs/code-demos/assets/runner/ng2/basic.ts\",[\"rxjs\",\"@angular/core\",\"@angular/animations\",\"@angular/router\",\"@angular/platform-browser-dynamic\",\"@angular/platform-browser-dynamic/testing\",\"@angular/core/testing\",\"@angular/platform-browser/animations\",\"@angular/material/autocomplete\",\"@angular/material/badge\",\"@angular/material/bottom-sheet\",\"@angular/material/button\",\"@angular/material/button-toggle\",\"@angular/material/card\",\"@angular/material/checkbox\",\"@angular/material/chips\",\"@angular/material/core\",\"@angular/material/datepicker\",\"@angular/material/dialog\",\"@angular/material/divider\",\"@angular/material/expansion\",\"@angular/material/form-field\",\"@angular/material/grid-list\",\"@angular/material/icon\",\"@angular/material/input\",\"@angular/material/list\",\"@angular/material/menu\",\"@angular/material/paginator\",\"@angular/material/progress-bar\",\"@angular/material/progress-spinner\",\"@angular/material/radio\",\"@angular/material/select\",\"@angular/material/sidenav\",\"@angular/material/slide-toggle\",\"@angular/material/slider\",\"@angular/material/snack-bar\",\"@angular/material/sort\",\"@angular/material/stepper\",\"@angular/material/table\",\"@angular/material/tabs\",\"@angular/material/toolbar\",\"@angular/material/tooltip\",\"@angular/material/tree\"],function(e,t){\"use strict\";t&&t.id;return{setters:[function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){},function(e){}],execute:function(){}}});"
  },
  {
    "path": "libs/code-demos/assets/runner/ng2/ng2-runner.js",
    "content": "var { join } = require('path');\nvar Builder = require('systemjs-builder');\nconst UglifyJS = require('uglify-js');\nconst rel = 'libs/code-demos/assets/runner/ng2/';\nconst { readFileSync, writeFileSync } = require('fs');\n\nconst config = {\n  transpiler: 'ts',\n  warnings: true,\n  typescriptOptions: {\n    target: 'es5',\n    module: 'system',\n    moduleResolution: 'node',\n    sourceMap: true,\n    emitDecoratorMetadata: true,\n    experimentalDecorators: true,\n    lib: ['es2015', 'dom', 'tslib'],\n    noImplicitAny: true,\n    suppressImplicitAnyIndexErrors: true\n  },\n  meta: {\n    typescript: {\n      exports: 'ts'\n    }\n  },\n  paths: {\n    'npm:': 'node_modules/',\n    'rxjs/': 'node_modules/rxjs/'\n  },\n  // map tells the System loader where to look for things\n  map: {\n    // our app is within the app folder\n    app: 'src',\n    tslib: 'npm:tslib/tslib.js',\n    // angular bundles\n    '@angular/core': 'npm:@angular/core/bundles/core.umd.js',\n    '@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',\n    '@angular/common': 'npm:@angular/common/bundles/common.umd.js',\n    '@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',\n    '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',\n    '@angular/compiler/testing':\n      'npm:@angular/compiler/bundles/compiler-testing.umd.js',\n    '@angular/platform-browser':\n      'npm:@angular/platform-browser/bundles/platform-browser.umd.js',\n    '@angular/material/autocomplete':\n      'npm:@angular/material/bundles/material-autocomplete.umd.js',\n    '@angular/material/badge':\n      'npm:@angular/material/bundles/material-badge.umd.js',\n    '@angular/material/bottom-sheet':\n      'npm:@angular/material/bundles/material-bottom-sheet.umd.js',\n    '@angular/material/button':\n      'npm:@angular/material/bundles/material-button.umd.js',\n    '@angular/material/button-toggle':\n      'npm:@angular/material/bundles/material-button-toggle.umd.js',\n    '@angular/material/card':\n      'npm:@angular/material/bundles/material-card.umd.js',\n    '@angular/material/checkbox':\n      'npm:@angular/material/bundles/material-checkbox.umd.js',\n    '@angular/material/chips':\n      'npm:@angular/material/bundles/material-chips.umd.js',\n    '@angular/material/core':\n      'npm:@angular/material/bundles/material-core.umd.js',\n    '@angular/material/datepicker':\n      'npm:@angular/material/bundles/material-datepicker.umd.js',\n    '@angular/material/dialog':\n      'npm:@angular/material/bundles/material-dialog.umd.js',\n    '@angular/material/divider':\n      'npm:@angular/material/bundles/material-divider.umd.js',\n    '@angular/material/expansion':\n      'npm:@angular/material/bundles/material-expansion.umd.js',\n    '@angular/material/form-field':\n      'npm:@angular/material/bundles/material-form-field.umd.js',\n    '@angular/material/grid-list':\n      'npm:@angular/material/bundles/material-grid-list.umd.js',\n    '@angular/material/icon':\n      'npm:@angular/material/bundles/material-icon.umd.js',\n    '@angular/material/input':\n      'npm:@angular/material/bundles/material-input.umd.js',\n    '@angular/material/list':\n      'npm:@angular/material/bundles/material-list.umd.js',\n    '@angular/material/menu':\n      'npm:@angular/material/bundles/material-menu.umd.js',\n    '@angular/material/paginator':\n      'npm:@angular/material/bundles/material-paginator.umd.js',\n    '@angular/material/progress-bar':\n      'npm:@angular/material/bundles/material-progress-bar.umd.js',\n    '@angular/material/progress-spinner':\n      'npm:@angular/material/bundles/material-progress-spinner.umd.js',\n    '@angular/material/radio':\n      'npm:@angular/material/bundles/material-radio.umd.js',\n    '@angular/material/select':\n      'npm:@angular/material/bundles/material-select.umd.js',\n    '@angular/material/sidenav':\n      'npm:@angular/material/bundles/material-sidenav.umd.js',\n    '@angular/material/slide-toggle':\n      'npm:@angular/material/bundles/material-slide-toggle.umd.js',\n    '@angular/material/slider':\n      'npm:@angular/material/bundles/material-slider.umd.js',\n    '@angular/material/snack-bar':\n      'npm:@angular/material/bundles/material-snack-bar.umd.js',\n    '@angular/material/sort':\n      'npm:@angular/material/bundles/material-sort.umd.js',\n    '@angular/material/stepper':\n      'npm:@angular/material/bundles/material-stepper.umd.js',\n    '@angular/material/table':\n      'npm:@angular/material/bundles/material-table.umd.js',\n    '@angular/material/tabs':\n      'npm:@angular/material/bundles/material-tabs.umd.js',\n    '@angular/material/toolbar':\n      'npm:@angular/material/bundles/material-toolbar.umd.js',\n    '@angular/material/tooltip':\n      'npm:@angular/material/bundles/material-tooltip.umd.js',\n    '@angular/material/tree':\n      'npm:@angular/material/bundles/material-tree.umd.js',\n    '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',\n    '@angular/cdk/platform': 'npm:@angular/cdk/bundles/cdk-platform.umd.js',\n    '@angular/cdk/bidi': 'npm:@angular/cdk/bundles/cdk-bidi.umd.js',\n    '@angular/cdk/coercion': 'npm:@angular/cdk/bundles/cdk-coercion.umd.js',\n    '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js',\n    '@angular/cdk/keycodes': 'npm:@angular/cdk/bundles/cdk-keycodes.umd.js',\n    '@angular/cdk/portal': 'npm:@angular/cdk/bundles/cdk-portal.umd.js',\n    '@angular/cdk/rxjs': 'npm:@angular/cdk/bundles/cdk-rxjs.umd.js',\n    '@angular/cdk/table': 'npm:@angular/cdk/bundles/cdk-table.umd.js',\n    '@angular/cdk/tree': 'npm:@angular/cdk/bundles/cdk-tree.umd.js',\n    '@angular/cdk/stepper': 'npm:@angular/cdk/bundles/cdk-stepper.umd.js',\n    '@angular/cdk/layout': 'npm:@angular/cdk/bundles/cdk-layout.umd.js',\n    '@angular/cdk/text-field': 'npm:@angular/cdk/bundles/cdk-text-field.umd.js',\n    '@angular/cdk/accordion': 'npm:@angular/cdk/bundles/cdk-accordion.umd.js',\n    '@angular/cdk/scrolling': 'npm:@angular/cdk/bundles/cdk-scrolling.umd.js',\n    '@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js',\n    '@angular/cdk/overlay': 'npm:@angular/cdk/bundles/cdk-overlay.umd.js',\n    '@angular/cdk/collections':\n      'npm:@angular/cdk/bundles/cdk-collections.umd.js',\n    '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',\n    '@angular/animations/browser':\n      'npm:@angular/animations/bundles/animations-browser.umd.js',\n    '@angular/platform-browser/animations':\n      'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',\n    '@angular/platform-browser/testing':\n      'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',\n    '@angular/platform-browser-dynamic':\n      'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',\n    '@angular/platform-browser-dynamic/testing':\n      'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',\n    '@angular/http': 'npm:@angular/http/bundles/http.umd.js',\n    '@angular/router': 'npm:@angular/router/bundles/router.umd.js',\n    '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',\n\n    // other libraries\n    'rxjs/operators': 'npm:rxjs/operators',\n    rxjs: 'npm:rxjs',\n    typescript: 'npm:typescript/lib/typescript.js',\n    ts: 'npm:plugin-typescript/lib',\n    'angular2-in-memory-web-api': 'npm:angular2-in-memory-web-api',\n    googlemaps: 'npm:googlemaps/lib/index.js'\n  },\n  // packages tells the System loader how to load when no filename and/or no extension\n  packages: {\n    app: {\n      main: './main',\n      defaultExtension: 'ts'\n    },\n    ts: {\n      main: 'plugin.js'\n    },\n    'rxjs/operators': {\n      main: 'index'\n    },\n    rxjs: {\n      main: 'index'\n    },\n\n    'angular2-in-memory-web-api': {\n      main: 'index',\n      defaultExtension: 'js'\n    }\n  }\n};\n\nconst inputFileName = join(rel, 'basic.ts');\nconst outputFileName = join(rel, 'ng-bundle.js');\n\nconst builder = new Builder('./', config);\nbuilder\n  .bundle(inputFileName, outputFileName)\n  .then(function() {\n    const content = readFileSync(outputFileName, { encoding: 'utf-8' });\n    const minified = UglifyJS.minify(content);\n    if (minified.error) {\n      return Promise.reject(minified.error);\n    } else {\n      writeFileSync(outputFileName, minified.code);\n      console.log('Build complete');\n      console.log('Original File size (kb):', content.length / 1000);\n      console.log('Minified File size (kb): ', minified.code.length / 1000);\n    }\n  })\n  .catch(function(err) {\n    console.log('Build error');\n    console.log(err);\n  });\n"
  },
  {
    "path": "libs/code-demos/assets/runner/ng2/rxjs.operators.ts",
    "content": "import { operators as o } from 'rxjs';\n\nexport const operators = o;\n"
  },
  {
    "path": "libs/code-demos/assets/runner/package.json",
    "content": "{\n  \"name\": \"runner\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"core-js\": \"^2.4.1\",\n    \"zone.js\": \"^0.6.23\"\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/assets/runner/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./dist/out-tsc\",\n    \"baseUrl\": \".\",\n    \"sourceMap\": true,\n    \"declaration\": false,\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"target\": \"es2017\",\n    \"inlineSources\": true,\n    \"allowJs\": true,\n    \"importHelpers\": true,\n    \"resolveJsonModule\": true,\n    \"types\": [\"node\"],\n    \"lib\": [\"dom\", \"esnext.array\"]\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/index.ts",
    "content": "export * from './src';\n"
  },
  {
    "path": "libs/code-demos/jest.config.js",
    "content": "module.exports = {\n  name: 'code-demos',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/libs/code-demos'\n};\n"
  },
  {
    "path": "libs/code-demos/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/code-demos\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/ng-package.prod.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/code-demos\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/package.json",
    "content": "{\n  \"name\": \"@codelab/code-demos\",\n  \"version\": \"0.0.1\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^7.0.0\",\n    \"@angular/core\": \"^7.0.0\"\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/index.ts",
    "content": "export * from './lib';\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo/code-demo.component.css",
    "content": ".wrapper > * {\n  flex: 1;\n}\n\n.wrapper {\n  display: flex;\n  height: 100%;\n  width: 100%;\n}\n\n@media screen and (max-width: 600px) {\n  .wrapper {\n    flex-direction: column;\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo/code-demo.component.html",
    "content": "<div *ngIf=\"files$ | async as compiledCode\" class=\"wrapper\">\n  <code-demo-multitab-editor\n    class=\"quarter\"\n    [enableAutoFolding]=\"enableAutoFolding\"\n    [files]=\"files\"\n    [allowSwitchingFiles]=\"true\"\n    [solutions]=\"solutions\"\n    [(ngModel)]=\"code\"\n    [highlights]=\"highlights\"\n    (ngModelChange)=\"update($event)\"\n  ></code-demo-multitab-editor>\n  <code-demo-runner\n    class=\"quarter\"\n    [url]=\"url\"\n    [presets]=\"presets\"\n    [bootstrap]=\"bootstrap\"\n    [code]=\"compiledCode\"\n  ></code-demo-runner>\n</div>\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo/code-demo.component.ts",
    "content": "import { Component, forwardRef, Input, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  filter,\n  map,\n  publishReplay,\n  refCount,\n  startWith\n} from 'rxjs/operators';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  Observable,\n  ReplaySubject\n} from 'rxjs';\nimport { compileTsFilesWatch } from '../runner/compile-ts-files';\nimport { Code } from '../shared/types';\n\nfunction filterByFileType(type: string, files: Record<string, string>) {\n  return Object.entries(files).reduce((changedFiles, [path, code]) => {\n    if (path.match(new RegExp(`\\\\\\.${type}$`))) {\n      changedFiles[path] = code;\n    }\n    return changedFiles;\n  }, {});\n}\n\nexport function getChanges(current, previous) {\n  return Object.keys(current).reduce((changedFiles, path) => {\n    if (current[path] !== previous[path]) {\n      changedFiles[path] = current[path];\n    }\n    return changedFiles;\n  }, {});\n}\n\n@Component({\n  selector: 'code-demo',\n  templateUrl: 'code-demo.component.html',\n  styleUrls: ['./code-demo.component.css'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => CodeDemoComponent),\n      multi: true\n    }\n  ]\n})\nexport class CodeDemoComponent implements ControlValueAccessor, OnDestroy {\n  @Input() bootstrapTest;\n  @Input() milestone = '';\n  @Input() url = 'about:blank';\n  @Input() translations = {};\n  @Input() codeDemoHighlight = [];\n  @Input() testRunner: 'babel' | 'iframe' = 'iframe';\n  @Input() files: string[];\n  @Input() presets = ['angular'];\n  @Input() bootstrap = 'bootstrap';\n  @Input() solutions: Code = {};\n  @Input() highlights: Record<string, string | RegExp> = {};\n  @Input() allowSwitchingFiles = true;\n  @Input() enableAutoFolding = true;\n  @Input() fontSize = '18';\n\n  openFileIndex = 0;\n  code: Code = {};\n  filesConfig: any;\n  changedTsFilesSubject = new BehaviorSubject<Record<string, string>>({});\n  changedStaticFilesSubject = new ReplaySubject<Record<string, string>>(1);\n\n  public files$: Observable<Record<string, string>>;\n\n  private codeCache: Record<string, string> = {};\n  private onChange: (code: Code) => void;\n\n  constructor() {\n    const ts = this.changedTsFilesSubject.pipe(\n      map(files =>\n        Object.entries(files).reduce((result, [file, code]) => {\n          result[file] = this.retrieveFile(file, code);\n          return result;\n        }, {})\n      ),\n      filter(value => Object.keys(value).length > 0),\n      compileTsFilesWatch(),\n      map(a => a.files),\n      startWith({})\n    );\n\n    const staticFiles = this.changedStaticFilesSubject.pipe(\n      filter(value => Object.keys(value).length > 0),\n      startWith({})\n    );\n\n    this.files$ = combineLatest([ts, staticFiles]).pipe(\n      map(([js, staticFiles]) => ({ ...staticFiles, ...js })),\n      map(files => ({ ...this.code, ...files })),\n      filter(value => Object.keys(value).length > 0),\n      publishReplay(1),\n      refCount()\n    );\n  }\n\n  retrieveFile(file, code) {\n    return code;\n  }\n\n  registerOnTouched() {}\n\n  ngOnDestroy() {\n    this.changedTsFilesSubject.complete();\n    this.changedStaticFilesSubject.complete();\n  }\n\n  registerOnChange(onChange: (code: Code) => void) {\n    this.onChange = onChange;\n  }\n\n  writeValue(code: Record<string, string>) {\n    if (code) {\n      this.code = code;\n      this.files = this.files || [Object.keys(this.code)[0]];\n      this.update(code);\n    }\n  }\n\n  update(code: Record<string, string>) {\n    if (this.onChange) {\n      this.onChange(code);\n    }\n    const changesTs = getChanges(\n      filterByFileType('ts', code),\n      filterByFileType('ts', this.codeCache)\n    );\n    const changesStatic = getChanges(\n      filterByFileType('html|css', code),\n      filterByFileType('html|css', this.codeCache)\n    );\n\n    this.codeCache = { ...code };\n    this.changedTsFilesSubject.next(changesTs);\n    this.changedStaticFilesSubject.next(changesStatic);\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/code-demo-editor.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  NgZone\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MonacoConfigService } from '@codelab/code-demos/src/lib/shared/monaco-config.service';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { CodeDemoEditorInjector } from './code-demo-editor.injector';\n\n@Component({\n  selector: 'code-demo-editor',\n  template: `\n    <div #editor class=\"monaco-editor\"></div>\n  `,\n  styleUrls: ['editor.component.css'],\n  providers: [\n    CodeDemoEditorInjector,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => CodeDemoEditorComponent),\n      multi: true\n    }\n  ]\n})\nexport class CodeDemoEditorComponent\n  implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\n  height: number;\n  @Input() minLines = 6;\n  model: any;\n  editor: any;\n  @Input() debounce = 250;\n  @Input() fontSize = 20;\n  @Input() language = 'typescript';\n  @Input() theme = '';\n  @Input() lineNumbers = true;\n  @Input() autoSize = true;\n  changeSubject = new Subject();\n\n  @Output() change = new EventEmitter();\n  @Output() selectionChange = new EventEmitter();\n  @ViewChild('editor', { static: false }) editorEl;\n  code: string;\n  private subscription: Subscription;\n\n  constructor(\n    private zone: NgZone,\n    private editorInjector: CodeDemoEditorInjector,\n    readonly monacoConfigService: MonacoConfigService\n  ) {\n    this.subscription = this.changeSubject\n      .pipe(debounceTime(this.debounce))\n      .subscribe(a => this.change.emit(a));\n  }\n\n  registerOnTouched(fn: any): void {}\n\n  registerOnChange(onChange: (code: string) => void): void {\n    this.change.subscribe(onChange);\n  }\n\n  writeValue(value: string): void {\n    if (value === null) {\n      return;\n    }\n    this.code = value;\n    this.resize();\n    if (this.model) {\n      this.model.setValue(value);\n    }\n  }\n\n  @HostListener('window:resize')\n  resize() {\n    if (this.editor && this.code) {\n      const actualFontSize =\n        (this.fontSize * document.documentElement.clientWidth) / 1800;\n      this.editor.updateOptions({ fontSize: actualFontSize });\n      const lines = this.code.split('\\n').length;\n      const lineHeight = actualFontSize * 1.6;\n      const height = Math.max(lines * lineHeight, lineHeight * this.minLines);\n\n      if (this.height !== height) {\n        this.height = height;\n        this.editorEl.nativeElement.style.height = height + 'px';\n        this.editor.layout();\n      }\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.fontSize) {\n      this.resize();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    const editor = this.editorEl.nativeElement;\n\n    this.model = this.monacoConfigService.monaco.editor.createModel(\n      this.code,\n      this.language\n    );\n\n    if (this.theme) {\n      this.monacoConfigService.monaco.editor.setTheme(this.theme);\n    }\n\n    this.editor = this.editorInjector.editor = this.monacoConfigService.createEditor(\n      editor,\n      {\n        model: this.model,\n        lineNumbers: this.lineNumbers,\n        folding: true,\n        fontSize: this.fontSize\n      }\n    );\n\n    this.editor.onDidChangeCursorSelection(({ selection }) => {\n      this.zone.run(() => {\n        this.selectionChange.emit(\n          this.editor.getModel().getValueInRange(selection)\n        );\n      });\n    });\n\n    this.model.onDidChangeContent(() => {\n      this.zone.run(() => {\n        this.changeSubject.next(this.editor.getModel().getValue());\n      });\n    });\n\n    this.resize();\n  }\n\n  ngOnDestroy() {\n    this.model.dispose();\n    this.editor.dispose();\n    this.subscription.unsubscribe();\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/code-demo-editor.injector.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { editor } from 'monaco-editor';\nimport IStandaloneCodeEditor = editor.IStandaloneCodeEditor;\n\n@Injectable()\nexport class CodeDemoEditorInjector {\n  editor: IStandaloneCodeEditor;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/directives/code-demo-editor.auto-folding.directive.spec.ts",
    "content": "import { CodeDemoEditorAutoFoldingDirective } from './code-demo-editor.auto-folding.directive';\n\ndescribe('CodeDemoEditorAutoFoldingDirective', () => {\n  it('should create an instance', () => {\n    const directive = new CodeDemoEditorAutoFoldingDirective();\n    expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/directives/code-demo-editor.auto-folding.directive.ts",
    "content": "import { AfterViewInit, Directive, Input, Self } from '@angular/core';\nimport { CodeDemoEditorInjector } from '../code-demo-editor.injector';\n\n@Directive({\n  // tslint:disable-next-line\n  selector: '[autoFolding]'\n})\nexport class CodeDemoEditorAutoFoldingDirective implements AfterViewInit {\n  @Input() autoFolding = true;\n\n  constructor(@Self() private editorInjector: CodeDemoEditorInjector) {}\n\n  ngAfterViewInit(): void {\n    const editor = this.editorInjector.editor;\n    const folding = editor.getAction('editor.fold');\n    if (folding) {\n      folding.run();\n    }\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/directives/code-demo-editor.highlight.directive.ts",
    "content": "import {\n  AfterViewInit,\n  Directive,\n  Input,\n  OnChanges,\n  Optional,\n  Self\n} from '@angular/core';\nimport { findPosition } from '../utils/utils';\nimport { CodeDemoEditorInjector } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.injector';\nimport { MonacoConfigService } from '@codelab/code-demos/src/lib/shared/monaco-config.service';\n\n@Directive({\n  selector: '[codeDemoHighlight]'\n})\nexport class CodeDemoEditorHighlightDirective\n  implements OnChanges, AfterViewInit {\n  decorators = [];\n  @Input() codeDemoHighlight;\n  @Input() ngModel;\n\n  constructor(\n    @Self() @Optional() private editorInjector: CodeDemoEditorInjector,\n    readonly monacoConfigService: MonacoConfigService\n  ) {}\n\n  ngAfterViewInit() {\n    this.highlight();\n    // TODO(kirjs): Get rid of the timeout\n    window.setTimeout(() => {\n      this.highlight();\n    }, 1000);\n  }\n\n  highlight() {\n    if (!this.editorInjector) {\n      return;\n    }\n\n    const editor = this.editorInjector.editor;\n    if (editor) {\n      if (!this.codeDemoHighlight) {\n        return;\n      }\n\n      if (!Array.isArray(this.codeDemoHighlight)) {\n        this.codeDemoHighlight = [this.codeDemoHighlight];\n      }\n\n      if (!editor.getModel()) {\n        return;\n      }\n      const code = editor.getModel().getValue();\n\n      if (!code.length) {\n        return;\n      }\n\n      const decorations = this.codeDemoHighlight\n        .map(match =>\n          typeof match !== 'string' && match.match ? match : { match }\n        )\n        .reduce((ranges, { match, className }) => {\n          const { indexStart, lineStart, indexEnd, lineEnd } = findPosition(\n            code,\n            match\n          );\n          ranges.push({\n            range: new this.monacoConfigService.monaco.Range(\n              lineStart,\n              indexStart,\n              lineEnd,\n              indexEnd\n            ),\n            options: { inlineClassName: className || 'highlighted-code' }\n          });\n\n          return ranges;\n        }, []);\n\n      this.decorators = editor.deltaDecorations(this.decorators, []);\n      this.decorators = editor.deltaDecorations(this.decorators, decorations);\n    }\n  }\n\n  ngOnChanges() {\n    this.highlight();\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/directives/code-demo-editor.line-change.directive.ts",
    "content": "import {\n  AfterViewInit,\n  Directive,\n  EventEmitter,\n  OnDestroy,\n  Output,\n  Self,\n  NgZone\n} from '@angular/core';\nimport { CodeDemoEditorInjector } from '../code-demo-editor.injector';\nimport { IDisposable } from 'monaco-editor';\n\ninterface LineChangeContext {\n  lineNumber: number;\n  line: string;\n  value: string;\n}\n\n@Directive({\n  selector: '[codeDemoLineChange]'\n})\nexport class CodeDemoEditorLineChangeDirective\n  implements AfterViewInit, OnDestroy {\n  @Output() codeDemoLineChange: EventEmitter<\n    LineChangeContext\n  > = new EventEmitter();\n\n  private subscription: IDisposable;\n\n  constructor(\n    private zone: NgZone,\n    @Self() private editorInjector: CodeDemoEditorInjector\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.editorInjector.editor.onDidChangeCursorPosition(() => {\n      this.zone.run(() => {\n        this.onLineChange();\n      });\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this.subscription) {\n      this.subscription.dispose();\n      this.subscription = null;\n    }\n  }\n\n  private onLineChange() {\n    const editor = this.editorInjector.editor;\n\n    const lineNumber = editor.getPosition().lineNumber;\n\n    const model = editor.getModel();\n    this.codeDemoLineChange.emit({\n      lineNumber,\n      line: model.getLineContent(lineNumber),\n      value: model.getValue()\n    });\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/editor.component.css",
    "content": ".monaco-editor {\n  display: block;\n  width: 100%;\n  flex-grow: 1;\n}\n\n:host {\n  display: block;\n}\n\n::ng-deep .decorationsOverviewRuler,\n::ng-deep .current-line {\n  display: none !important;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/themes/devtools.json",
    "content": "{\n  \"base\": \"vs\",\n  \"inherit\": true,\n  \"rules\": [\n    {\n      \"foreground\": \"8e908c\",\n      \"token\": \"comment\"\n    },\n    {\n      \"foreground\": \"666969\",\n      \"token\": \"keyword.operator.class\"\n    },\n    {\n      \"foreground\": \"666969\",\n      \"token\": \"constant.other\"\n    },\n    {\n      \"foreground\": \"666969\",\n      \"token\": \"source.php.embedded.line\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"variable\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"support.other.variable\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"string.other.link\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"string.regexp\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"entity.name.tag\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"entity.other.attribute-name\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"meta.tag\"\n    },\n    {\n      \"foreground\": \"c82829\",\n      \"token\": \"declaration.tag\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"constant.numeric\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"constant.language\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"support.constant\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"constant.character\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"variable.parameter\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"punctuation.section.embedded\"\n    },\n    {\n      \"foreground\": \"f5871f\",\n      \"token\": \"keyword.other.unit\"\n    },\n    {\n      \"foreground\": \"c99e00\",\n      \"token\": \"entity.name.class\"\n    },\n    {\n      \"foreground\": \"c99e00\",\n      \"token\": \"entity.name.type.class\"\n    },\n    {\n      \"foreground\": \"c99e00\",\n      \"token\": \"support.type\"\n    },\n    {\n      \"foreground\": \"c99e00\",\n      \"token\": \"support.class\"\n    },\n    {\n      \"foreground\": \"718c00\",\n      \"token\": \"string\"\n    },\n    {\n      \"foreground\": \"718c00\",\n      \"token\": \"constant.other.symbol\"\n    },\n    {\n      \"foreground\": \"718c00\",\n      \"token\": \"entity.other.inherited-class\"\n    },\n    {\n      \"foreground\": \"718c00\",\n      \"token\": \"markup.heading\"\n    },\n    {\n      \"foreground\": \"3e999f\",\n      \"token\": \"keyword.operator\"\n    },\n    {\n      \"foreground\": \"3e999f\",\n      \"token\": \"constant.other.color\"\n    },\n    {\n      \"foreground\": \"4271ae\",\n      \"token\": \"entity.name.function\"\n    },\n    {\n      \"foreground\": \"4271ae\",\n      \"token\": \"meta.function-call\"\n    },\n    {\n      \"foreground\": \"4271ae\",\n      \"token\": \"support.function\"\n    },\n    {\n      \"foreground\": \"4271ae\",\n      \"token\": \"keyword.other.special-method\"\n    },\n    {\n      \"foreground\": \"4271ae\",\n      \"token\": \"meta.block-level\"\n    },\n    {\n      \"foreground\": \"8959a8\",\n      \"token\": \"keyword\"\n    },\n    {\n      \"foreground\": \"8959a8\",\n      \"token\": \"storage\"\n    },\n    {\n      \"foreground\": \"8959a8\",\n      \"token\": \"storage.type\"\n    },\n    {\n      \"foreground\": \"ffffff\",\n      \"background\": \"c82829\",\n      \"token\": \"invalid\"\n    },\n    {\n      \"foreground\": \"ffffff\",\n      \"background\": \"4271ae\",\n      \"token\": \"meta.separator\"\n    },\n    {\n      \"foreground\": \"ffffff\",\n      \"background\": \"8959a8\",\n      \"token\": \"invalid.deprecated\"\n    }\n  ],\n  \"colors\": {\n    \"editor.foreground\": \"#4D4D4C\",\n    \"editor.background\": \"#FFFFFF\",\n    \"editor.selectionBackground\": \"#D6D6D6\",\n    \"editor.lineHighlightBackground\": \"#EFEFEF\",\n    \"editorCursor.foreground\": \"#AEAFAD\",\n    \"editorWhitespace.foreground\": \"#D1D1D1\"\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/utils/utils.spec.ts",
    "content": "import { findPosition } from './utils';\ndescribe('Utils', () => {\n  describe('findPosition', () => {\n    it('Whole string is matched', () => {\n      expect(findPosition('Hello', 'Hello')).toEqual({\n        lineStart: 1,\n        indexStart: 1,\n        indexEnd: 6,\n        lineEnd: 1\n      });\n    });\n\n    it('Part of the string matched', () => {\n      expect(findPosition('YoHello', 'Hello')).toEqual({\n        lineStart: 1,\n        indexStart: 3,\n        indexEnd: 8,\n        lineEnd: 1\n      });\n    });\n\n    it('Multiline beginning of the line', () => {\n      expect(\n        findPosition(\n          `Yo uuuu\nHello`,\n          'Hello'\n        )\n      ).toEqual({ lineStart: 2, indexStart: 1, indexEnd: 6, lineEnd: 2 });\n    });\n    it('Multiline:2 lines', () => {\n      expect(\n        findPosition(\n          `Yo uuuu\n\nHello`,\n          'Hello'\n        )\n      ).toEqual({ lineStart: 3, indexStart: 1, indexEnd: 6, lineEnd: 3 });\n    });\n    it('Multiline with text in beginning', () => {\n      expect(\n        findPosition(\n          `Yo uuuu\n123Hello`,\n          'Hello'\n        )\n      ).toEqual({ lineStart: 2, indexStart: 4, indexEnd: 9, lineEnd: 2 });\n    });\n\n    it('Multiline with multiline match', () => {\n      expect(\n        findPosition(\n          `Yo uuuu\nHe\\nllo`,\n          'He\\nllo'\n        )\n      ).toEqual({ lineStart: 2, indexStart: 1, indexEnd: 3, lineEnd: 3 });\n    });\n\n    it('Assymetric line break in match', () => {\n      expect(\n        findPosition(\n          `Yo uuuu\nHe\\nlloooo`,\n          'He\\nlloooo'\n        )\n      ).toEqual({ lineStart: 2, indexStart: 1, indexEnd: 6, lineEnd: 3 });\n    });\n\n    it('Multiline with spaces before match', () => {\n      expect(\n        findPosition(\n          `Yo uuuu\n   He\\nlloooo`,\n          'He\\nlloooo'\n        )\n      ).toEqual({ lineStart: 2, indexStart: 4, indexEnd: 6, lineEnd: 3 });\n    });\n\n    it('Regex multiline with spaces before match', () => {\n      expect(findPosition(`aaaaaabbbbbbaaaaaaaa`, /b+/)).toEqual({\n        lineStart: 1,\n        indexStart: 7,\n        indexEnd: 13,\n        lineEnd: 1\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-editor/utils/utils.ts",
    "content": "export function findPosition(code: string, match: string | RegExp) {\n  if (match instanceof RegExp) {\n    try {\n      match = code.match(match)[0];\n    } catch (e) {\n      // tslint:disable-next-line:no-debugger\n      debugger;\n      match = '';\n    }\n  }\n\n  const textBeforeMatch = code.split(match as any)[0];\n  const lineStart = textBeforeMatch.split('\\n').length;\n  const lineStartPosition =\n    textBeforeMatch.lastIndexOf('\\n') + /*compensate for \\n */ 1;\n  const indexStart = textBeforeMatch.length - lineStartPosition + 1;\n  const lastMatchNewLinePosition = match.lastIndexOf('\\n') + 1;\n  const lineEnd = lineStart + match.split('\\n').length - 1;\n  const indexEnd = match.includes('\\n')\n    ? match.length - lastMatchNewLinePosition\n    : indexStart + match.length;\n  return { lineStart, indexStart, indexEnd, lineEnd };\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-runner/code-demo-runner.component.css",
    "content": ""
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-runner/code-demo-runner.component.html",
    "content": "<preview-window [ui]=\"ui\" [url]=\"displayUrl\">\n  <div #runner class=\"runner\"></div>\n</preview-window>\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-runner/code-demo-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { CodeDemoRunnerComponent } from './code-demo-runner.component';\n\ndescribe('CodeDemoRunnerComponent', () => {\n  let component: CodeDemoRunnerComponent;\n  let fixture: ComponentFixture<CodeDemoRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [CodeDemoRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(CodeDemoRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo-runner/code-demo-runner.component.ts",
    "content": "import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { SubscriptionLike } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { createSystemJsSandbox } from '@codelab/code-demos/src/lib/shared/sandbox';\nimport { compileTemplates } from '../runner/prepare-templates';\nimport { ScriptLoaderService } from '@codelab/code-demos/src/lib/shared/script-loader.service';\nimport { addMetaInformation } from '../shared/helpers';\n\ninterface CodeFiles {\n  [key: string]: string;\n}\n\nconst presets = {\n  angular(sandbox, scriptLoaderService) {\n    sandbox.evalJs(scriptLoaderService.getScript('shim'));\n    sandbox.evalJs(scriptLoaderService.getScript('zone'));\n    sandbox.evalJs(scriptLoaderService.getScript('system-config'));\n    sandbox.evalJs(scriptLoaderService.getScript('ng-bundle'));\n  },\n  react(sandbox, scriptLoaderService) {\n    // TODO(kirjs): Make it work\n    // sandbox.addCss(require('../inner.css'));\n    sandbox.setHtml('<div id=\"app\"></div>');\n    sandbox.evalJs(scriptLoaderService.getScript('react'));\n    sandbox.evalJs(scriptLoaderService.getScript('react-dom'));\n    // sandbox.evalJs(transform(code, {presets: ['react']}).code);\n  }\n};\n\n@Component({\n  selector: 'code-demo-runner',\n  templateUrl: './code-demo-runner.component.html',\n  styleUrls: ['./code-demo-runner.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CodeDemoRunnerComponent\n  implements OnDestroy, AfterViewInit, OnChanges {\n  @Input() code: CodeFiles = {};\n  @Input() jsFiles: CodeFiles = {};\n  @Input() bootstrap: string;\n  @Input() url = 'about:blank';\n  @Input() ui = 'browser';\n  changedFilesSubject = new BehaviorSubject<Record<string, string>>({});\n  @ViewChild('runner', { static: false }) runnerElement: ElementRef;\n  presets = ['angular'];\n  private subscription: SubscriptionLike;\n\n  constructor(\n    public scriptLoaderService: ScriptLoaderService,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  get displayUrl() {\n    if (this.url === '/assets/runner') {\n      return 'http://localhost:4200';\n    }\n    return this.url.replace('assets/runner', '');\n  }\n\n  @Input('presets')\n  public set setPresets(presets: any) {\n    if (typeof presets === 'string') {\n      presets = presets.split(',');\n    }\n    this.presets = presets.filter(a => a);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.code) {\n      this.changedFilesSubject.next(changes.code.currentValue);\n    }\n  }\n\n  async ngAfterViewInit() {\n    const sandbox = await createSystemJsSandbox(\n      this.runnerElement.nativeElement,\n      {\n        id: 'testing',\n        url: this.url\n      }\n    );\n\n    sandbox.setHtml(\n      this.code['index.html'] ||\n        '<app-root></app-root><my-app></my-app><div class=\"error\"></div>'\n    );\n\n    this.presets.forEach(preset =>\n      presets[preset](sandbox, this.scriptLoaderService)\n    );\n\n    Object.entries(this.code)\n      .filter(([moduleName]) => moduleName.match(/\\.css/))\n      .forEach(([moduleName, code]) => {\n        sandbox.addCss(code);\n      });\n\n    compileTemplates(this.code, sandbox);\n\n    this.subscription = this.changedFilesSubject.subscribe(files => {\n      addMetaInformation(sandbox, files);\n\n      if (files['index.html']) {\n        sandbox.setHtml(files['index.html']);\n      }\n\n      const jsFiles = Object.entries(files).filter(([path]) =>\n        path.match(/\\.js$/)\n      );\n      const hasErrors = jsFiles.some(([path, code]) => {\n        sandbox.evalJs(\n          `System.registry.delete(System.normalizeSync('./${path.replace(\n            '.js',\n            ''\n          )}'));`\n        );\n\n        try {\n          sandbox.evalJs(code);\n        } catch (e) {\n          const [errorLabel] = e.toString().split('\\r\\n');\n          console.groupCollapsed(errorLabel);\n          console.log(e);\n          console.groupEnd();\n          return true;\n        }\n        return false;\n      });\n\n      Object.entries(files)\n        .filter(([path]) => path.match(/\\.css$/))\n        .forEach(([path, code]) => {\n          // TODO(kirjs): Consider deleting old CSS.\n          sandbox.addCss(code);\n        });\n\n      if (jsFiles.length) {\n        if (!this.bootstrap) {\n          console.error('Bootstrap missing');\n        }\n\n        if (!hasErrors) {\n          sandbox.evalJs(`System.import('${this.bootstrap}')`);\n        }\n      }\n    });\n\n    this.trackIframeUrl(sandbox.iframe);\n  }\n\n  trackIframeUrl(iframe) {\n    const interval = window.setInterval(() => {\n      if (iframe.contentWindow) {\n        const url = iframe.contentWindow.location.href.replace(\n          'assets/runner/',\n          ''\n        ); // .replace(this.urlBase, '')\n        if (this.url !== url) {\n          this.url = url;\n          this.cdr.markForCheck();\n        }\n      } else {\n        window.clearInterval(interval);\n      }\n    }, 200);\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n      this.subscription = null;\n    }\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demo.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoComponent } from './code-demo/code-demo.component';\nimport { EditorFromModelComponent } from './multitab-editor/editor-from-model/editor-from-model.component';\nimport { MultitabEditorComponent } from './multitab-editor/multitab-editor.component';\nimport { FilePathComponent } from './file-path/file-path.component';\nimport { CodeDemoRunnerComponent } from './code-demo-runner/code-demo-runner.component';\nimport { CodeDemoEditorHighlightDirective } from './code-demo-editor/directives/code-demo-editor.highlight.directive';\nimport { CodeDemoEditorComponent } from './code-demo-editor/code-demo-editor.component';\nimport { RealtimeEvalComponent } from './realtime-eval/realtime-eval.component';\n\nimport { CodeDemoEditorAutoFoldingDirective } from './code-demo-editor/directives/code-demo-editor.auto-folding.directive';\nimport { CodeDemoEditorLineChangeDirective } from './code-demo-editor/directives/code-demo-editor.line-change.directive';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    BrowserWindowModule,\n    MatSelectModule,\n    MatButtonModule,\n    MatSnackBarModule,\n    FormsModule\n  ],\n  declarations: [\n    MultitabEditorComponent,\n    EditorFromModelComponent,\n    FilePathComponent,\n    CodeDemoRunnerComponent,\n    CodeDemoComponent,\n    CodeDemoEditorHighlightDirective,\n    CodeDemoEditorComponent,\n    RealtimeEvalComponent,\n    CodeDemoEditorLineChangeDirective,\n    CodeDemoEditorAutoFoldingDirective\n  ],\n  exports: [\n    FilePathComponent,\n    MultitabEditorComponent,\n    CodeDemoRunnerComponent,\n    EditorFromModelComponent,\n    CodeDemoComponent,\n    CodeDemoEditorHighlightDirective,\n    CodeDemoEditorComponent,\n    RealtimeEvalComponent,\n    CodeDemoEditorLineChangeDirective,\n    CodeDemoEditorAutoFoldingDirective\n  ]\n})\nexport class CodeDemoModule {}\n"
  },
  {
    "path": "libs/code-demos/src/lib/code-demos.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { CodeDemoModule } from './code-demo.module';\n\ndescribe('CodeDemoModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [CodeDemoModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(CodeDemoModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/file-path/file-path.component.css",
    "content": ":host ::ng-deep .mat-form-field-infix {\n  padding: 0 !important;\n}\n\n.file {\n  display: block;\n  box-shadow: 0 0 1px #999;\n}\n\n.file.ts:before {\n  content: 'ts';\n  background: #1885ff;\n  color: #eeeeee;\n}\n\n.file.html:before {\n  content: '<>';\n  background: #fbff20;\n  color: #424242;\n}\n\n.file.css:before {\n  content: '{}';\n  background: #6cff37;\n  color: #424242;\n}\n\n.file:before {\n  font-family: roboto-mono, monospace;\n  font-size: 12px;\n  padding: 0.2vw;\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  box-shadow: 0 0 1px #444444;\n  margin: 0.2vw 1vw 0.2vw 0.2vw;\n  line-height: 18px;\n  text-align: center;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/file-path/file-path.component.html",
    "content": "<span class=\"{{ extension }} file\">{{ path }}</span>\n"
  },
  {
    "path": "libs/code-demos/src/lib/file-path/file-path.component.spec.ts",
    "content": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { FilePathComponent } from './file-path.component';\ndescribe('FilePathComponent', () => {\n  let component: FilePathComponent;\n  let fixture: ComponentFixture<FilePathComponent>;\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      declarations: [FilePathComponent]\n    });\n    fixture = TestBed.createComponent(FilePathComponent);\n    component = fixture.componentInstance;\n  });\n  it('can load instance', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/file-path/file-path.component.ts",
    "content": "import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n  selector: 'code-demo-file-path',\n  templateUrl: './file-path.component.html',\n  styleUrls: ['./file-path.component.css']\n})\nexport class FilePathComponent implements OnChanges {\n  // tslint:disable-next-line:no-input-rename\n  @Input('path') pathSetter: string;\n\n  path: string;\n  extension: string;\n\n  constructor() {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('pathSetter' in changes) {\n      this.path = this.pathSetter;\n      const match = this.path.match(/.(\\w+)$/);\n      this.extension = (match && match[1]) || 'unknown';\n    }\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/index.ts",
    "content": "export * from './shared';\nexport * from './code-demo.module';\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/editor-from-model/editor-from-model.component.css",
    "content": ".monaco-editor {\n  height: 100%;\n  flex: 1;\n}\n\n::ng-deep .decorationsOverviewRuler,\n::ng-deep .current-line {\n  display: none !important;\n}\n\n:host {\n  display: block;\n  height: 100%;\n  overflow: hidden;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/editor-from-model/editor-from-model.component.html",
    "content": "<div class=\"monaco-editor\" #editor></div>\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/editor-from-model/editor-from-model.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { EditorFromModelComponent } from './editor-from-model.component';\n\ndescribe('EditorFromModelComponent', () => {\n  let component: EditorFromModelComponent;\n  let fixture: ComponentFixture<EditorFromModelComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [EditorFromModelComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(EditorFromModelComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/editor-from-model/editor-from-model.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\n\nimport { MonacoConfigService } from '@codelab/code-demos/src/lib/shared/monaco-config.service';\nimport { editor, IDisposable } from 'monaco-editor';\nimport { CodeDemoEditorInjector } from '@codelab/code-demos/src/lib/code-demo-editor/code-demo-editor.injector';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport ITextModel = editor.ITextModel;\n\n@Component({\n  selector: 'code-demo-editor-from-model',\n  templateUrl: './editor-from-model.component.html',\n  styleUrls: ['./editor-from-model.component.css'],\n  providers: [CodeDemoEditorInjector, MatSnackBar]\n})\nexport class EditorFromModelComponent\n  implements AfterViewInit, OnChanges, OnDestroy {\n  // tslint:disable-next-line:no-input-rename\n  @Input('model') setModel: ITextModel;\n  @ViewChild('editor', { static: false }) el;\n  @Input() autoSize = true;\n  fontSize = 14;\n  editor: any;\n  height = 0;\n  private didChangeListener: IDisposable;\n  private model: ITextModel;\n\n  constructor(\n    private zone: NgZone,\n    private editorInjector: CodeDemoEditorInjector,\n    readonly monacoConfigService: MonacoConfigService,\n    private snackBar: MatSnackBar\n  ) {}\n\n  resize() {\n    if (!this.autoSize) {\n      return;\n    }\n\n    const lines = this.editor.getModel().getLineCount();\n    const lineHeight = this.fontSize * 1.6;\n    const height = Math.max(lines * lineHeight, lineHeight * 5);\n\n    if (this.height !== height) {\n      this.height = height;\n      this.el.nativeElement.style.height = height + 'px';\n      // Needed for firefox\n      this.el.nativeElement.parentElement.style.height = height + 'px';\n      this.editor.layout();\n    }\n  }\n\n  ngAfterViewInit() {\n    this.editor = this.editorInjector.editor = this.monacoConfigService.createEditor(\n      this.el.nativeElement,\n      {\n        model: this.model,\n        fontSize: this.fontSize\n      }\n    );\n\n    this.editor.addAction({\n      id: 'saveAction',\n      label: 'Save Shortcut Press',\n      keybindings: [\n        this.monacoConfigService.monaco.KeyMod.chord(\n          this.monacoConfigService.monaco.KeyMod.CtrlCmd |\n            this.monacoConfigService.monaco.KeyCode.KEY_S\n        )\n      ],\n      run: () => {\n        this.zone.run(() => {\n          this.snackBar.open('Saved', '', {\n            duration: 2000\n          });\n        });\n      }\n    });\n\n    this.resize();\n\n    this.didChangeListener = this.editor.onDidChangeModelContent(() => {\n      this.zone.run(() => {\n        this.resize();\n      });\n    });\n  }\n\n  ngOnDestroy() {\n    this.editor.dispose();\n\n    if (this.didChangeListener) {\n      this.didChangeListener.dispose();\n      this.didChangeListener = null;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('setModel' in changes) {\n      this.model = this.setModel;\n      if (this.editor) {\n        this.editor.setModel(this.setModel);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/multitab-editor.component.css",
    "content": ":host {\n  display: flex;\n  flex-direction: column;\n}\n\ncode-demo-editor-from-model {\n  display: flex;\n  flex-direction: column;\n}\n\nmat-form-field {\n  width: 50%;\n  margin: 0 20px;\n}\n\n.wrapper {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n}\n\n.panel {\n  flex-shrink: 0;\n  flex-grow: 0;\n}\n\n.editor {\n  flex-grow: 1;\n  display: flex;\n  flex-direction: column;\n}\n\ncode-demo-editor {\n  height: 100%;\n  flex-grow: 1;\n  display: flex;\n  flex-direction: column;\n}\n\n.monaco-editor {\n  display: flex;\n}\n\n.monaco-editor,\n.monaco-editor ::ng-deep > .monaco-single-editor {\n  display: block;\n  width: 100%;\n  height: 500px;\n  flex-grow: 1;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/multitab-editor.component.html",
    "content": "<div\n  class=\"wrapper\"\n  *ngFor=\"let model of openModels; trackBy: trackByEditorIndex; let i = index\"\n>\n  <div class=\"panel\" *ngIf=\"displayFileName\">\n    <code-demo-file-path\n      style=\"margin: 1px 0 10px 0;display: block;\"\n      [path]=\"openModels[i].path\"\n    ></code-demo-file-path>\n  </div>\n  <div class=\"panel\" *ngIf=\"allowSwitchingFiles\">\n    <mat-form-field>\n      <mat-select\n        [ngModel]=\"openModels[i]\"\n        (selectionChange)=\"handleFileChange(i, $event)\"\n      >\n        <mat-select-trigger>\n          <code-demo-file-path\n            [path]=\"openModels[i].path\"\n          ></code-demo-file-path>\n        </mat-select-trigger>\n\n        <mat-option *ngFor=\"let m of models\" [value]=\"m\">\n          <code-demo-file-path [path]=\"m.path\"></code-demo-file-path>\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n    <button\n      mat-button\n      *ngIf=\"solutions[model.path] && solutions[model.path] != code[model.path]\"\n      style=\"cursor: pointer\"\n      (click)=\"loadSolution(model.path)\"\n    >\n      Load solution\n    </button>\n  </div>\n\n  <code-demo-editor-from-model\n    [autoSize]=\"autoSize\"\n    [autoFolding]=\"enableAutoFolding\"\n    [model]=\"model.model\"\n    [codeDemoHighlight]=\"model.highlight\"\n  ></code-demo-editor-from-model>\n</div>\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/multitab-editor.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { MultitabEditorComponent } from './multitab-editor.component';\n\ndescribe('MultitabEditorComponent', () => {\n  let component: MultitabEditorComponent;\n  let fixture: ComponentFixture<MultitabEditorComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [MultitabEditorComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MultitabEditorComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/multitab-editor/multitab-editor.component.ts",
    "content": "import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  NgZone\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { editor } from 'monaco-editor';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { MonacoConfigService } from '../shared/monaco-config.service';\nimport ITextModel = editor.ITextModel;\nimport IStandaloneCodeEditor = editor.IStandaloneCodeEditor;\n\ndeclare const monaco;\nconst extenstionToLang = {\n  ts: 'typescript',\n  js: 'javascript',\n  html: 'html'\n};\n\ninterface MonacoModel {\n  model: ITextModel;\n  path: string;\n  editorIndex?: number;\n  highlight: RegExp;\n}\n\ntype Code = Record<string, string>;\n\n@Component({\n  selector: 'code-demo-multitab-editor',\n  templateUrl: './multitab-editor.component.html',\n  styleUrls: ['./multitab-editor.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => MultitabEditorComponent),\n      multi: true\n    }\n  ]\n})\nexport class MultitabEditorComponent\n  implements OnChanges, OnInit, OnDestroy, ControlValueAccessor {\n  @Input() code: Code = {};\n  @Input() solutions: Code = {};\n  @Input() allowSwitchingFiles = true;\n  @Input() displayFileName = false;\n  @Input() highlights = {};\n  @Input() debounce = 250;\n  @Input() autoFolding = false;\n  // tslint:disable-next-line:no-input-rename\n  @Input('files') setFiles: string | string[];\n  @Input() enableAutoFolding = true;\n  @Input() autoSize = true;\n  files = [];\n  openModels: MonacoModel[];\n  changeSubject = new Subject();\n  private prefix = `prefix/${Math.random()}/`;\n  private onChange: any;\n  private editor: IStandaloneCodeEditor;\n  private models: MonacoModel[];\n\n  private subscription: Subscription;\n\n  constructor(\n    private zone: NgZone,\n    readonly monacoConfigService: MonacoConfigService,\n    readonly cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    this.subscription = this.changeSubject\n      .pipe(debounceTime(this.debounce))\n      .subscribe(changes => {\n        if (this.onChange) {\n          this.onChange(changes);\n        }\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('setFiles' in changes) {\n      let files = this.setFiles;\n      if (typeof files === 'string') {\n        files = files.split(',');\n      }\n      this.files = files;\n      this.updateOpenModels();\n    }\n  }\n\n  handleFileChange(index, { value }) {\n    if (this.models) {\n      const m = this.getModelByFileName(value.path);\n      m.model.setValue(m.model.getValue());\n      delete this.openModels[index].editorIndex;\n      m.editorIndex = index;\n      this.openModels[index] = m;\n      this.openModels = [...this.openModels];\n      this.cdr.markForCheck();\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {}\n\n  loadSolution(file) {\n    const model = this.getModelByFileName(file).model;\n    const solution = this.solutions[file];\n\n    model.pushEditOperations(\n      [],\n      [\n        {\n          range: model.getFullModelRange(),\n          text: solution\n        }\n      ],\n      null\n    );\n  }\n\n  getModelByFileName(file): MonacoModel | undefined {\n    if (this.models) {\n      return this.models.find(({ path }) => path === file);\n    }\n  }\n\n  generateModels() {\n    const textModels = Object.entries(this.code).filter(\n      ([path, code]) => typeof code === 'string'\n    );\n\n    this.models = textModels.map(([path, code]) => {\n      const monacoModel = this.getModelByFileName(path);\n\n      if (monacoModel) {\n        return monacoModel;\n      } else {\n        const language = extenstionToLang[path.match(/\\.(\\w+)$/)[1]];\n\n        const model = this.monacoConfigService.monaco.editor.createModel(\n          code,\n          language,\n          'inmemory://model/' + this.prefix + path\n        );\n\n        model.onDidChangeContent(() => {\n          this.zone.run(() => {\n            this.code[path] = model.getValue();\n            this.changeSubject.next({ ...this.code });\n          });\n        });\n\n        return {\n          highlight: this.highlights[path],\n          path,\n          model\n        };\n      }\n    });\n\n    if (!this.files) {\n      this.files = [Object.keys(this.code)[0]];\n    }\n\n    this.updateOpenModels();\n  }\n\n  writeValue(code: Code): void {\n    if (code) {\n      this.code = { ...code };\n      this.generateModels();\n    }\n  }\n\n  ngOnDestroy() {\n    this.dispose();\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n      this.subscription = null;\n    }\n  }\n\n  trackByEditorIndex(index, model) {\n    return model.editorIndex;\n  }\n\n  private updateOpenModels() {\n    if (this.models) {\n      this.openModels = this.files.map((file, index) => {\n        const model = this.getModelByFileName(file);\n        model.editorIndex = index;\n        return model;\n      });\n      this.cdr.markForCheck();\n    }\n  }\n\n  private dispose() {\n    if (this.models) {\n      this.models.forEach(model => {\n        model.model.dispose();\n      });\n      this.models = null;\n    }\n\n    if (this.editor) {\n      this.editor.dispose();\n      this.editor = null;\n    }\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/realtime-eval/realtime-eval.component.css",
    "content": ".output {\n  font-size: 60px;\n  padding: 10px 0 10px 80px;\n  margin-top: 50px;\n  margin-bottom: 50px;\n}\n\n.wrapper {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n}\n\n.console {\n  display: flex;\n  flex-direction: column;\n  width: 90%;\n  background: #fff;\n  border-radius: 20px;\n}\n\ncode-demo-editor::before {\n  content: '>';\n  font-size: 60px;\n  position: absolute;\n  margin-left: -30px;\n  color: #4eb1ff;\n}\n\n.output::before {\n  content: '<';\n  font-size: 50px;\n  position: absolute;\n  margin-left: -60px;\n  color: #4eb1ff;\n}\n\n.output.error::before {\n  color: #e51400;\n  content: '🙀';\n}\n\ncode-demo-editor {\n  padding-left: 50px;\n  display: block;\n  border-bottom: 1px #444 solid;\n}\n\n:host {\n  height: 100%;\n}\n\n:host ::ng-deep .monaco-editor-background,\n:host ::ng-deep .monaco-editor,\n:host ::ng-deep .monaco-editor .inputarea {\n  background-color: transparent;\n}\n\n.error {\n  color: #e51400;\n  border: 1px #e51400 solid;\n  border-radius: 12px;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/realtime-eval/realtime-eval.component.html",
    "content": "<div class=\"wrapper\">\n  <div class=\"console\">\n    <div class=\"input\">\n      <code-demo-editor\n        [(ngModel)]=\"code\"\n        (ngModelChange)=\"evaluate()\"\n        [language]=\"language\"\n        [lineNumbers]=\"false\"\n        style=\"height: 100px;\"\n        [fontSize]=\"60\"\n      ></code-demo-editor>\n    </div>\n    <code class=\"output result\" *ngIf=\"result\">{{ result }}</code>\n    <code class=\"output error\" *ngIf=\"error\">{{ error }}</code>\n  </div>\n</div>\n"
  },
  {
    "path": "libs/code-demos/src/lib/realtime-eval/realtime-eval.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RealtimeEvalComponent } from './code-demo-realtime-eval.component';\n\ndescribe('RealtimeEvalComponent', () => {\n  let component: RealtimeEvalComponent;\n  let fixture: ComponentFixture<RealtimeEvalComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RealtimeEvalComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RealtimeEvalComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/realtime-eval/realtime-eval.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'code-demo-realtime-eval',\n  templateUrl: './realtime-eval.component.html',\n  styleUrls: ['./realtime-eval.component.css']\n})\nexport class RealtimeEvalComponent implements OnInit {\n  @Input() code = '';\n  @Input() language = 'typescript';\n  result: string;\n  error: string;\n\n  ngOnInit() {}\n\n  evaluate() {\n    try {\n      this.result = eval(this.code);\n      this.error = '';\n    } catch (e) {\n      this.result = '';\n      this.error = e.message;\n    }\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/runner/compile-ts-files.ts",
    "content": "import { BehaviorSubject, Observable, OperatorFunction } from 'rxjs';\nimport { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\nimport * as TsTypes from 'typescript';\n\nconst ts = getTypeScript();\n\nexport interface Files {\n  [key: string]: string;\n}\n\nfunction toObject(acc, outputFile) {\n  if (outputFile) {\n    return {\n      ...acc,\n      [outputFile.name]: outputFile.text\n    };\n  }\n  return acc;\n}\n\ninterface Diagnostic extends TsTypes.Diagnostic {\n  name: string;\n}\n\ninterface Output {\n  diagnostics: Diagnostic[];\n  files: Files;\n}\n\nconst compilerOptions: TsTypes.CompilerOptions = {\n  module: ts.ModuleKind.System,\n  target: ts.ScriptTarget.ES2017,\n  experimentalDecorators: true,\n  emitDecoratorMetadata: true,\n  noImplicitAny: true,\n  declaration: true,\n  lib: ['dom', 'es6']\n};\n\ntype ObservableFiles = Observable<Files>;\n\nfunction watch(\n  source$: ObservableFiles,\n  options: TsTypes.CompilerOptions\n): Observable<Output> {\n  const outputFiles: BehaviorSubject<Output> = new BehaviorSubject<Output>({\n    diagnostics: [],\n    files: {}\n  });\n\n  const files: TsTypes.MapLike<{ version: number; file: string }> = {};\n\n  const getCurrentFileNames = () => {\n    return Object.keys(files);\n  };\n\n  // Create the language service host to allow the LS to communicate with the host\n  const servicesHost: TsTypes.LanguageServiceHost = {\n    getScriptFileNames: () => getCurrentFileNames(),\n    getScriptVersion: fileName =>\n      files[fileName] && files[fileName].version.toString(),\n    getScriptSnapshot: fileName => {\n      const file = files[fileName];\n      if (!file) {\n        return undefined;\n      }\n\n      return ts.ScriptSnapshot.fromString(\n        `/// <amd-module name=\"${fileName.replace('.ts', '')}\" />\\n` + file.file\n      );\n    },\n    getCurrentDirectory: () => '/',\n    getCompilationSettings: () => options,\n    getDefaultLibFileName: () => 'lib.d.ts',\n    fileExists: a => !!files[a],\n    readFile: a => files[a] && files[a].file,\n    readDirectory: () => getCurrentFileNames()\n  };\n\n  // Create the language service files\n  const services = ts.createLanguageService(\n    servicesHost,\n    ts.createDocumentRegistry()\n  );\n\n  const subscription = source$.subscribe(\n    newFiles => {\n      const filteredFiles = Object.entries(newFiles).filter(([fileName, _]) =>\n        fileName.match(/\\.ts$/)\n      );\n\n      filteredFiles.forEach(([fileName, file]) => {\n        if (!files[fileName]) {\n          files[fileName] = { version: 0, file };\n        }\n        files[fileName].version++;\n        files[fileName].file = file;\n      });\n\n      const fileNames = filteredFiles.map(([fileName]) => fileName);\n\n      emitFiles(fileNames);\n    },\n    () => {},\n    () => {\n      try {\n        services.dispose();\n      } catch (e) {\n        // TODO(kirjs): There's some funny error happening. Need to investigate.\n        // Ignore\n      }\n\n      outputFiles.complete();\n      subscription.unsubscribe();\n    }\n  );\n\n  return outputFiles.asObservable();\n\n  function extractDiagnostics(file) {\n    return services\n      .getSemanticDiagnostics(file)\n      .map(d => ({ ...d, name: d.file.fileName }));\n  }\n\n  function emitFiles(fileNames: string[]) {\n    const updated = fileNames.map(emitFile).reduce(toObject, {});\n    const diagnostics = fileNames.map(extractDiagnostics).flat();\n\n    outputFiles.next({\n      diagnostics,\n      files: {\n        ...outputFiles.getValue().files,\n        ...updated\n      }\n    });\n  }\n\n  function emitFile(fileName: string) {\n    try {\n      const output = services.getEmitOutput(fileName);\n\n      if (output.emitSkipped) {\n        logErrors(fileName);\n      }\n\n      const file = output.outputFiles.find(file => /\\.js$/.test(file.name));\n\n      if (file) {\n        file.name = file.name.replace(/^\\//, '');\n      }\n\n      return file;\n    } catch (e) {\n      console.log(`Error when compiling file '${fileName}': ` + e.message);\n    }\n  }\n\n  function logErrors(fileName: string) {\n    console.groupCollapsed(`Emitting ${fileName} failed`);\n    const allDiagnostics = services\n      .getCompilerOptionsDiagnostics()\n      .concat(services.getSyntacticDiagnostics(fileName))\n      .concat(services.getSemanticDiagnostics(fileName));\n\n    allDiagnostics.forEach(diagnostic => {\n      const message = ts.flattenDiagnosticMessageText(\n        diagnostic.messageText,\n        '\\n'\n      );\n      if (diagnostic.file) {\n        const {\n          line,\n          character\n        } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);\n        console.log(\n          `Error ${diagnostic.file.fileName} (${line + 1},${character +\n            1}): ${message}`\n        );\n      } else {\n        console.log(`Error: ${message}`);\n      }\n    });\n    console.groupEnd();\n  }\n}\n\nexport function compileTsFilesWatch(\n  options = compilerOptions\n): OperatorFunction<Record<string, string>, Output> {\n  return (source: Observable<Record<string, string>>) => {\n    return watch(source, options);\n  };\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/runner/prepare-templates.ts",
    "content": "export function compileTemplates(files: Record<string, string>, sandbox) {\n  Object.entries(files)\n    .filter(([moduleName]) => moduleName.match(/\\.html/))\n    .forEach(([moduleName, code]) => {\n      sandbox.iframe.contentWindow.System.register(moduleName, [], function(\n        exports\n      ) {\n        return {\n          setters: [],\n          execute: function() {\n            exports('template', code);\n          }\n        };\n      });\n    });\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/deps-order.service.spec.ts",
    "content": "import { inject, TestBed } from '@angular/core/testing';\nimport { DepsService } from './deps-order.service';\n\nconst deps = {\n  componentA: {\n    path: 'component.ts',\n    code: 'import {a} from \"./depA\"',\n    template: ''\n  },\n  componentABC: {\n    path: 'component.ts',\n    code:\n      'import {a} from \"./depA\";import {a} from \"./depB\";import {a} from \"./depC\";',\n    template: ''\n  },\n  depA: {\n    path: 'depA.ts',\n    code: 'import {Component} from \"@angular/core\"',\n    template: ''\n  },\n  depB: {\n    path: 'depB.ts',\n    code: 'import {Component} from \"@angular/core\"',\n    template: ''\n  },\n  depC: {\n    path: 'depC.ts',\n    code: 'import {Component} from \"@angular/core\"',\n    template: ''\n  },\n  depAB: {\n    path: 'depAB.ts',\n    code: 'import {a} from \"./depA\";import {a} from \"./depB\";',\n    template: ''\n  },\n  depAB_C: {\n    path: 'depAB_C.ts',\n    code: 'import {a} from \"./depAB\";import {a} from \"./depC\";',\n    template: ''\n  },\n  depX_A: {\n    path: 'x/a.ts',\n    code: 'import {a} from \"../depA\";',\n    template: ''\n  }\n};\ndescribe('DepsService', () => {\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      providers: [DepsService]\n    });\n  });\n\n  describe('isLocalDep', () => {\n    it('should return true for local deps', () => {\n      expect(DepsService.isLocalDep('./file')).toBeTruthy();\n    });\n    it('should return false for non local deps', () => {\n      expect(DepsService.isLocalDep('file')).toBeFalsy();\n      // special case\n      expect(DepsService.isLocalDep('./code')).toBeFalsy();\n      expect(DepsService.isLocalDep('@angular/core')).toBeFalsy();\n    });\n  });\n\n  describe('Normalizing file name', () => {\n    it('should normalize simple path', () => {\n      expect(DepsService.normalizePathRelativeToFile('file.ts', './a')).toEqual(\n        'a'\n      );\n    });\n\n    it('should normalize simple path in a folder', () => {\n      expect(\n        DepsService.normalizePathRelativeToFile('folder/file.ts', './a')\n      ).toEqual('folder/a');\n    });\n    it('should normalize simple path in a folder with one level up', () => {\n      expect(\n        DepsService.normalizePathRelativeToFile('folder/file.ts', '../a')\n      ).toEqual('a');\n    });\n\n    it('should normalize simple path in a folder with multiple levels up', () => {\n      expect(\n        DepsService.normalizePathRelativeToFile(\n          'folder/a/b/c/file.ts',\n          '../../../a'\n        )\n      ).toEqual('folder/a');\n    });\n  });\n\n  it('should order two simple files', inject(\n    [DepsService],\n    (service: DepsService) => {\n      expect(service.order([deps.componentA, deps.depA])).toEqual([\n        deps.depA,\n        deps.componentA\n      ]);\n    }\n  ));\n\n  it('should order files with multiple but 1-level deps ', inject(\n    [DepsService],\n    (service: DepsService) => {\n      expect(\n        service.order([deps.depA, deps.componentABC, deps.depB, deps.depC])\n      ).toEqual([deps.depA, deps.depB, deps.depC, deps.componentABC]);\n    }\n  ));\n\n  it('should order files with multiple but 2-level deps ', inject(\n    [DepsService],\n    (service: DepsService) => {\n      expect(\n        service.order([\n          deps.depB,\n          deps.depC,\n          deps.depAB_C,\n          deps.depAB,\n          deps.depA\n        ])\n      ).toEqual([deps.depB, deps.depC, deps.depA, deps.depAB, deps.depAB_C]);\n    }\n  ));\n\n  it('should order files if they are in a folder', inject(\n    [DepsService],\n    (service: DepsService) => {\n      expect(service.order([deps.depX_A, deps.depA])).toEqual([\n        deps.depA,\n        deps.depX_A\n      ]);\n    }\n  ));\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/deps-order.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { FileConfig } from '../../../../../apps/codelab/src/app/shared/interfaces/file-config';\nimport { simpleVisitor } from './visitor';\nimport { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\n\nconst ts = getTypeScript();\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DepsService {\n  constructor() {}\n\n  // TODO(kirjs): Retire this\n  /**\n   * Takes a file path, and another path relative to the first one.\n   * Returns the fulle\n   */\n  static normalizePathRelativeToFile(path: string, file: string) {\n    // TODO: Simplify\n    let fullPath = '/' + path.substr(0, path.lastIndexOf('/')) + '/' + file;\n    while (fullPath.match(/\\/[^/]*\\/\\.\\./)) {\n      fullPath = fullPath.replace(/\\/[^/]*\\/\\.\\./, '');\n    }\n    fullPath = fullPath.replace(/\\/.\\//, '/');\n    return fullPath.replace(/^\\//, '').replace(/^\\//, '');\n  }\n\n  static isLocalDep(string) {\n    return !string.match(/\\/code\\b/) && !!string.match(/^\\./);\n  }\n\n  order(files: Array<FileConfig>) {\n    let deps: { [key: string]: string } = files.reduce((result, file) => {\n      result[file.path] = { file, deps: [] };\n      const source = ts.createSourceFile(\n        file.path,\n        file.code,\n        ts.ScriptTarget.ES5\n      );\n      simpleVisitor(\n        source,\n        node => node.kind === ts.SyntaxKind.ImportDeclaration,\n        (node: any) => {\n          if (DepsService.isLocalDep(node.moduleSpecifier.text)) {\n            result[file.path].deps.push(\n              DepsService.normalizePathRelativeToFile(\n                file.path,\n                node.moduleSpecifier.text + '.ts'\n              )\n            );\n          }\n        }\n      );\n      return result;\n    }, {});\n\n    let orderedFiles = [];\n\n    while (Object.keys(deps).length > 0) {\n      const keys = Object.keys(deps);\n      const depLen = keys.length;\n\n      // Iterate over deps, grab each file with no dependencies, and add it to the list. Repeat.\n      [deps, orderedFiles] = keys.reduce(\n        (\n          [result, orderedFiles_]: any,\n          key\n        ): [{ [key: string]: string }, Array<FileConfig>] => {\n          if (result[key].deps.length === 0) {\n            orderedFiles_.push(result[key].file);\n\n            Object.keys(result).forEach(key_ => {\n              result[key_].deps = result[key_].deps.filter(dep => dep !== key);\n            });\n\n            delete deps[key];\n          }\n\n          return [result, orderedFiles_];\n        },\n        [deps, orderedFiles]\n      );\n\n      if (depLen === Object.keys(deps).length) {\n        throw new Error('cyclic dependencies found, or missing dependencies');\n      }\n    }\n\n    return orderedFiles;\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/helpers.ts",
    "content": "import { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\n\nconst ts = getTypeScript();\nimport babel_traverse from '@babel/traverse';\nimport * as babylon from 'babylon';\nimport * as babel_types from 'babel-types';\n\nexport function addMetaInformation(sandbox, files: { [key: string]: string }) {\n  sandbox.evalJs(`System.registry.delete(System.normalizeSync('./code'));`);\n  (sandbox.iframe.contentWindow as any).System.register('code', [], function(\n    exports\n  ) {\n    return {\n      setters: [],\n      execute: function() {\n        exports('ts', ts);\n        exports('babylon', babylon);\n        exports('babel_traverse', babel_traverse);\n        exports('babel_types', babel_types);\n        Object.entries(files)\n          .filter(([moduleName]) => moduleName.match(/\\.ts$/))\n          .forEach(([path, code]) => {\n            exports(path.replace(/[\\/.-]/gi, '_'), code);\n            exports(\n              path.replace(/[\\/.-]/gi, '_') + '_AST',\n              ts.createSourceFile(path, code, ts.ScriptTarget.ES5)\n            );\n          });\n        Object.entries(files)\n          .filter(([moduleName]) => moduleName.match(/\\.html/))\n          .forEach(([path, code]) => {\n            const templatePath = path.replace(/[\\/.-]/gi, '_');\n            exports(templatePath, code);\n          });\n      }\n    };\n  });\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/index.ts",
    "content": "export * from './monaco-config.service';\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/loop-protection.service.spec.ts",
    "content": "/* tslint:disable:no-unused-variable */\nimport { inject, TestBed } from '@angular/core/testing';\nimport { LoopProtectionService } from './loop-protection.service';\n\ndescribe('LoopProtectionService', () => {\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      providers: [LoopProtectionService]\n    });\n  });\n\n  function withLoopProtection(code: string) {\n    return LoopProtectionService.loopBreaker + code;\n  }\n\n  it('should not modify if it does not contain loops', inject(\n    [LoopProtectionService],\n    (service: LoopProtectionService) => {\n      expect(service.protect('file.ts', `if(true) console.log(153);`)).toEqual(\n        `if(true) console.log(153);`\n      );\n    }\n  ));\n\n  it('should add loop protection to a simple loop with curlies.', inject(\n    [LoopProtectionService],\n    (service: LoopProtectionService) => {\n      expect(\n        service.protect('file.ts', `for(let x = 0;x<10,x){console.log(123)}`)\n      ).toEqual(\n        withLoopProtection(\n          `for(let x = 0;x<10,x){loopBreaker();console.log(123)}`\n        )\n      );\n    }\n  ));\n  it('should add loop protection and curlies to a simple loop without curlies. with multiple staments', inject(\n    [LoopProtectionService],\n    (service: LoopProtectionService) => {\n      expect(\n        service.protect(\n          'file.ts',\n          `for(let x = 0;x<10,x)console.log(123),console.log(1);console.log(2)`\n        )\n      ).toEqual(\n        withLoopProtection(\n          `for(let x = 0;x<10,x){loopBreaker();console.log(123),console.log(1);}console.log(2)`\n        )\n      );\n    }\n  ));\n  it('should add loop protection and curlies to a simple loop without curlies, preserving spaces', inject(\n    [LoopProtectionService],\n    (service: LoopProtectionService) => {\n      expect(\n        service.protect('file.ts', `for(let x = 0;x<10,x)     console.log(123)`)\n      ).toEqual(\n        withLoopProtection(\n          `for(let x = 0;x<10,x)     {loopBreaker();console.log(123)}`\n        )\n      );\n    }\n  ));\n\n  it('should add loop protection to a simple loop with curlies and multiple statements', inject(\n    [LoopProtectionService],\n    (service: LoopProtectionService) => {\n      expect(\n        service.protect(\n          'file.ts',\n          `for(let x = 0;x<10,x){console.log(123);console.log(1)}`\n        )\n      ).toEqual(\n        withLoopProtection(\n          `for(let x = 0;x<10,x){loopBreaker();console.log(123);console.log(1)}`\n        )\n      );\n    }\n  ));\n\n  it('should add loop protection to a simple while loop with curlies and multiple statements', inject(\n    [LoopProtectionService],\n    (service: LoopProtectionService) => {\n      expect(service.protect('file.ts', `while(true)`)).toEqual(\n        withLoopProtection(`while(true){loopBreaker();}`)\n      );\n    }\n  ));\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/loop-protection.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\nconst ts = getTypeScript();\n\n@Injectable()\nexport class LoopProtectionService {\n  public static loopBreaker = `// Breaks out of infinite loops.\nconst loopBreaker = (function(){\n  let iterationsLeft = 100;\n  return function(){\n    iterationsLeft--;\n    if(iterationsLeft === 0){\n      throw new Error(\"Infinite loop detected\");\n    }\n  }\n}());\n      `;\n\n  constructor() {}\n\n  findAllLoops(source) {\n    const messages = [];\n\n    function extractLoops(node) {\n      if (\n        node.kind === ts.SyntaxKind.WhileStatement ||\n        node.kind === ts.SyntaxKind.DoStatement ||\n        node.kind === ts.SyntaxKind.ForStatement\n      ) {\n        const statement = node.statement;\n        messages.push({\n          start: statement.getStart(source),\n          end: statement.getEnd(),\n          text: source.text.substring(\n            statement.getStart(source),\n            statement.getEnd()\n          )\n        });\n      }\n\n      ts.forEachChild(node, extractLoops);\n    }\n\n    extractLoops(source);\n\n    return messages;\n  }\n\n  protect(filename: string, code: string) {\n    if (filename.indexOf('.ts') < 0) {\n      return code;\n    }\n    const source = ts.createSourceFile(filename, code, ts.ScriptTarget.ES5);\n    const messages = this.findAllLoops(source);\n    const replacementsReversed = messages.reverse();\n    for (const { start, end, text } of replacementsReversed) {\n      const replacement =\n        text.slice(0, 1) === '{'\n          ? `{loopBreaker();${text.slice(1)}`\n          : `{loopBreaker();${text}}`;\n\n      code = code.slice(0, start) + replacement + code.slice(end);\n    }\n    if (messages.length > 0) {\n      code = LoopProtectionService.loopBreaker + code;\n    }\n    return code;\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/monaco-config.service.spec.ts",
    "content": "import { inject, TestBed } from '@angular/core/testing';\nimport { MonacoConfigService } from './monaco-config.service';\nimport { DepsService } from './deps-order.service';\n\ndescribe('Service: MonacoConfig', () => {\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      providers: [MonacoConfigService, DepsService]\n    });\n    (window as any).monaco = {};\n  });\n\n  afterEach(() => {\n    delete (window as any).monaco;\n  });\n\n  it('should exist', inject(\n    [MonacoConfigService],\n    (service: MonacoConfigService) => {\n      expect(service).toBeTruthy();\n    }\n  ));\n});\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/monaco-config.service.ts",
    "content": "import { Injectable, NgZone } from '@angular/core';\nimport { environment } from '../../../../../apps/codelab/src/environments/environment';\n\ndeclare const require;\nconst monacoVersion = environment.production ? 'min' : 'dev';\nconst monacoLoaderCode = require('!raw-loader!monaco-editor/' +\n  monacoVersion +\n  '/vs/loader');\n\nconst win = window as any;\ndeclare const monaco;\n\nexport const MONACO_DEFAULTS = {\n  wrappingColumn: 10,\n  scrollBeyondLastLine: false,\n  tabCompletion: true,\n  wordBasedSuggestions: true,\n  lineNumbersMinChars: 3,\n  cursorBlinking: 'phase',\n  renderIndentGuides: false,\n  lineNumbers: false,\n  automaticLayout: true,\n  fontSize: 12,\n  folding: false,\n  minimap: {\n    enabled: false\n  }\n};\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MonacoConfigService {\n  public static monacoReady = new Promise(resolve => {\n    const script = document.createElement('script');\n    script.type = 'text/javascript';\n    script.innerHTML = monacoLoaderCode;\n    document.head.appendChild(script);\n\n    win.require.config({\n      paths: { vs: 'assets/monaco/' + monacoVersion + '/vs' }\n    });\n\n    win.require(['vs/editor/editor.main'], () => {\n      MonacoConfigService.configureMonaco();\n      resolve(monaco);\n    });\n  });\n  static initialized = false;\n  public monaco: any;\n\n  constructor(private readonly zone: NgZone) {\n    this.monaco = monaco;\n  }\n\n  static configureMonaco() {\n    if (MonacoConfigService.initialized) {\n      return;\n    }\n    MonacoConfigService.initialized = true;\n    monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n      target: monaco.languages.typescript.ScriptTarget.ES2016,\n      experimentalDecorators: true,\n      allowNonTsExtensions: true,\n      noImplicitAny: true,\n      moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n      module: monaco.languages.typescript.ModuleKind.CommonJS,\n      noEmit: true,\n      typeRoots: ['node_modules/@types']\n    });\n\n    monaco.languages.registerFoldingRangeProvider('typescript', {\n      provideFoldingRanges: function(model, context, token) {\n        const code = model.getValue();\n\n        const numberOfImports = code\n          .substr(0, code.lastIndexOf('import {'))\n          .split('\\n').length;\n        if (numberOfImports > 1) {\n          return [\n            {\n              start: 1,\n              end: numberOfImports,\n              kind: monaco.languages.FoldingRangeKind.Imports\n            }\n          ];\n        }\n      }\n    });\n\n    // Some fake Angular deps, good for catching silly errors.\n    // I'd still prefer to have the full version.\n\n    // const core = require('!!raw-loader!../../../assets/runner/ng-dts/bundles/@angular/core.d.ts');\n    // monaco.languages.typescript.typescriptDefaults.addExtraLib(core, 'node_modules/@angular/core.d.ts');\n\n    // this.addExtraLibs();\n    this.addExtraLibsTest();\n\n    // monaco.languages.typescript.typescriptDefaults.updateExtraLibs();\n  }\n\n  private static addExtraLibsTest() {\n    let files = require('!!!raw-loader!../../../assets/runner/ng-dts/files.txt');\n    files = JSON.parse(files);\n\n    files.forEach(file => {\n      file.paths.forEach(path => {\n        monaco.languages.typescript.typescriptDefaults.addExtraLib(\n          file.content,\n          'inmemory://model/' + path\n        );\n      });\n    });\n  }\n\n  createEditor(el: HTMLElement, options: any) {\n    const config = { ...MONACO_DEFAULTS, ...options };\n\n    return this.zone.runOutsideAngular(() =>\n      this.monaco.editor.create(el, config)\n    );\n  }\n}\n\nexport function monacoReady() {\n  return MonacoConfigService.monacoReady;\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/monaco-replay.ts",
    "content": "declare const monaco: any;\n\nexport function replay(editor: any) {\n  const keys = [];\n  editor.addCommand(monaco.KeyCode.F9, () => {\n    console.log('starting recording');\n    editor.onKeyDown(key => {\n      keys.push({\n        timestamp: new Date(),\n        key\n      });\n    });\n    editor.trigger('keyboard', 'type', { text: 'test' });\n    editor.trigger('keyboard', monaco.editor.Handler.CursorLeft);\n  });\n  editor.addCommand(monaco.KeyCode.F8, () => {\n    console.log(keys);\n  });\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/sandbox.ts",
    "content": "declare const require;\n\nexport function jsScriptInjector(iframe) {\n  return function(code) {\n    iframe.contentWindow.eval(code);\n  };\n}\n\nexport function cssInjector(iframe) {\n  return function(css) {\n    const s = iframe.contentDocument.createElement('style');\n    s.innerHTML = css;\n    iframe.contentDocument.getElementsByTagName('head')[0].appendChild(s);\n  };\n}\n\nexport interface SandboxConfig {\n  id: string;\n  url: string;\n  restart?: boolean;\n  hidden?: boolean;\n}\n\nexport function createIframe(config: SandboxConfig) {\n  const iframe = document.createElement('iframe');\n  iframe.setAttribute(\n    'sandbox',\n    'allow-modals allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts'\n  );\n  iframe.setAttribute('frameBorder', '0');\n  iframe.setAttribute('src', config.url);\n  iframe.setAttribute('class', config.id);\n  return iframe;\n}\n\nexport interface SandBox {\n  setHtml: (html: string) => void;\n  addCss: (css: string) => void;\n  evalJs: (js: string) => void;\n  iframe?: any;\n}\n\nexport interface SandBoxWithLoader extends SandBox {\n  addDep: (name: string, dep: any) => void;\n  loadSystemJsDep?: (name: string, dep: any) => void;\n  todoFindABetterName?: (name: string, dep: any) => void;\n}\n\nconst iframes = new WeakMap();\n\nexport function wrapSystemJs(systemCode) {\n  // SystemJS expects document.baseURI to be set on the document.\n  // Since it's a readonly property, I'm faking whole document property.\n  return `\n          (function(document){\n              ${systemCode}\n            }({\n              getElementsByTagName: ()=>[],\n              body: {},\n              documentElement: window,\n              createElement: ()=>({ refList: {} }),\n              baseURI: '${document.baseURI}'\n            }));\n          `;\n}\n\nfunction injectSystemJs({ evalJs }) {\n  const systemCode = require('!!raw-loader!systemjs/dist/system.src');\n  // SystemJS expects document.baseURI to be set on the document.\n  // Since it's a readonly property, I'm faking whole document property.\n  const wrappedSystemCode = wrapSystemJs(systemCode);\n  evalJs(wrappedSystemCode);\n}\n\nexport function createSystemJsSandbox(\n  element: any,\n  config: SandboxConfig\n): Promise<SandBoxWithLoader> {\n  return injectIframe(element, config).then(sandbox => {\n    injectSystemJs(sandbox);\n\n    function addDep(name, code) {\n      (sandbox.iframe.contentWindow as any).System.register(name, [], function(\n        exports\n      ) {\n        return {\n          setters: [],\n          execute: function() {\n            exports(code);\n          }\n        };\n      });\n    }\n\n    // TODO: Simplify\n    function loadSystemJsDep(name, code) {\n      (sandbox.iframe.contentWindow as any).loadSystemModule(name, code);\n    }\n\n    return { ...sandbox, addDep, loadSystemJsDep };\n  });\n}\n\nfunction logError(error, message) {\n  console.groupCollapsed(\n    'ERROR in your app:  ' + ((error && error.message) || '').split('\\n')[0]\n  );\n  console.error(error, message);\n  console.groupEnd();\n}\n\nexport function injectIframe(\n  element: any,\n  config: SandboxConfig\n): Promise<SandBox> {\n  if (iframes.has(element)) {\n    iframes.get(element).remove();\n    iframes.delete(element);\n  }\n\n  const iframe = createIframe(config);\n  iframes.set(element, iframe);\n\n  element.appendChild(iframe);\n  const evalJs = jsScriptInjector(iframe);\n  const addCss = cssInjector(iframe);\n\n  return new Promise((resolve, reject) => {\n    if (!iframe.contentWindow) {\n      return reject('iframe is gone');\n    }\n    iframe.contentWindow.onload = () => {\n      function setHtml(html) {\n        iframe.contentDocument.body.innerHTML = html;\n      }\n\n      function setError(html) {\n        const error = iframe.contentDocument.querySelector('.error');\n        if (error) {\n          // TODO(kirjs): Uncommit\n          // error.innerHTML = html;\n        }\n      }\n\n      iframe.contentWindow.console.log = function() {\n        console.log.apply(console, arguments);\n      };\n\n      iframe.contentWindow.onerror = function(error, message) {\n        logError(error, message);\n      };\n      iframe.contentWindow.console.error = function(error, message) {\n        // handle Angular error 1/3\n        logError(error, message);\n\n        setError(`<pre style = \"font-size: 3vw;padding: 20px;\">${error}\n${message}\n</pre>`);\n      };\n\n      resolve({\n        evalJs,\n        setHtml,\n        addCss,\n        iframe\n      });\n    };\n\n    if (config.url === 'about:blank') {\n      // Chrome and FF behave differently here.\n      if (!navigator.userAgent.includes('Firefox')) {\n        iframe.contentWindow.onload({} as any);\n      }\n    }\n  });\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/script-loader.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { assert } from './utils';\n\ndeclare const require;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ScriptLoaderService {\n  private readonly scripts = {\n    SystemJS: require('!!raw-loader!systemjs/dist/system'),\n    mocha: require('!!raw-loader!../../../assets/runner/js/mocha'),\n    chai: require('!!raw-loader!chai/chai'),\n    'test-bootstrap': require('!!raw-loader!../../../assets/runner/js/test-bootstrap'),\n    shim: require('!!raw-loader!core-js/client/shim.min.js'),\n    zone: require('!!raw-loader!zone.js/dist/zone.js'),\n    'system-config': require('!!raw-loader!../../../assets/runner/js/system-config'),\n    'ng-bundle': require('!!raw-loader!../../../assets/runner/ng2/ng-bundle')\n    // TODO(kirjs): not sure we still need vue and react libs\n    // vue: require('!!raw-loader!vue/dist/vue.js'),\n    // react: require('!!raw-loader!react/umd/react.development.js'),\n    // 'react-dom': require('!!raw-loader!react-dom/umd/react-dom.development.js')\n  };\n\n  getScript(url) {\n    assert(this.scripts[url]);\n    return this.scripts[url];\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/types-not-really.d.ts",
    "content": "// interface RouteConfig {\n//   path: string;\n//   component: any;\n// }\n\n// declare module '@angular/core' {\n//   export class EventEmitter<T> {\n//     emit: (param: T) => void;\n//   }\n\n//   export interface DirectiveConfig {\n//     selector: string;\n//   }\n\n//   export interface ComponentConfig {\n//     selector: string;\n//     template?: string;\n//     templateUrl?: string;\n//   }\n\n//   export interface PipeConfig {\n//     name: string;\n//   }\n\n//   export function enableProdMode();\n\n//   export function Component(config: ComponentConfig);\n\n//   export function Directive(config: DirectiveConfig);\n\n//   export class TemplateRef<T> {}\n\n//   export class ViewContainerRef {\n//     clear: () => void;\n//     createEmbeddedView: (ref: TemplateRef<any>, context: any) => void;\n//   }\n\n//   export interface AfterViewInit {\n//     ngAfterViewInit: () => void;\n//   }\n\n//   export interface OnInit {\n//     ngOnInit: () => void;\n//   }\n\n//   export interface NgModuleConfig {\n//     imports?: any[];\n//     declarations?: any[];\n//     providers?: any[];\n//     bootstrap?: any[];\n//     exports?: any[];\n//   }\n\n//   export function NgModule(config: NgModuleConfig);\n\n//   export function Injectable();\n\n//   export function Output();\n\n//   export function Input();\n\n//   export interface OnChanges {\n//     ngOnChanges: (simpleChanges: SimpleChange[]) => void;\n//   }\n\n//   export interface SimpleChange {\n//     [key: string]: any;\n//   }\n\n//   export function Pipe(config: PipeConfig);\n\n//   export interface PipeTransform {\n//     transform(value: string);\n//   }\n// }\n\n// declare module '@angular/forms' {\n//   export class FormsModule {}\n// }\n// declare module '@angular/platform-browser' {\n//   export class BrowserModule {}\n// }\n\n// declare module '@angular/platform-browser/animations' {\n//   export class NoopAnimationsModule {}\n// }\n// declare module '@angular/platform-browser-dynamic' {\n//   export class Platform {\n//     bootstrapModule: (module: any, config?: any) => void;\n//   }\n\n//   export function platformBrowserDynamic(): Platform;\n// }\n\n// declare module '@angular/compiler' {\n//   export class ResourceLoader {}\n// }\n\n// declare class Observable<T> {\n//   subscribe: (T) => void;\n// }\n\n// declare module '@angular/router' {\n//   export type Routes = Array<RouteConfig>;\n\n//   export class RouterModule {\n//     static forRoot: (routes: Routes) => any;\n//   }\n// }\n\n// declare module '@angular/common' {\n//   export class NgIf {\n//     constructor(v: any, t: any);\n//   }\n// }\n\n// declare module '@angular/material' {\n//   export class MatTab {\n//     position: number;\n//   }\n\n//   export class MatTabGroup {\n//     selectedIndex: number;\n//     selectChange: Observable<any>;\n//   }\n\n//   export class MatInputModule {}\n\n//   export class MatTabsModule {}\n\n//   export class MatToolbarModule {}\n\n//   export class MatCardModule {}\n\n//   export class MatButtonModule {}\n// }\n\n// declare class Babylon {\n//   parse: (code: string) => any;\n// }\n\n// // Object.keys(t.vendors).filter(function(t) {\n// //   return t.endsWith(\".d.ts\") || t.endsWith(\"package.json\") || t.endsWith(\".metadata.json\")\n// // }).map(function(e) {\n// //   var n = e.replace(\"https://unpkg.com/\", \"\");\n// //   return {\n// //     path: \"node_modules/\" + n.substr(0, n.lastIndexOf(\"@\")) + n.substr(n.indexOf(\"/\", n.lastIndexOf(\"@\"))),\n// //     content: t.vendors[e].contents\n// //   }\n// // }).concat(Object.keys(t.dependencies).map(function(e) {\n// //   var n = t.dependencies[e];\n// //   return {\n// //     path: \"node_modules/\" + e + \"/package.json\",\n// //     content: '{\"name\":\"' + e + '\",\"version\":\"' + n.version + '\"' + (n.hasOwnProperty(\"types\") ? ',\"types\":\"' + n.types + '\"' : \"\")\n// //       + (n.hasOwnProperty(\"typings\") ? ',\"typings\":\"' + n.typings + '\"' : \"\") + \"}\"\n// //   }\n// // })).forEach(function(t) {\n// //   monaco.languages.typescript.typescriptDefaults._extraLibs[t.path] = t.content\n// // }),\n// //   Object.keys(this.store.getState().project.dependencies).concat(Nl).forEach(function(t) {\n// //     monaco.languages.typescript.typescriptDefaults._extraLibs[\"zuz_/\" + t] = function(t) {\n// //       return 'import {  } from \"' + t + '\"'\n// //     }(t)\n// //   }),\n// //   monaco.languages.typescript.typescriptDefaults.updateExtraLibs(),\n// //   monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n// //     noSemanticValidation: !1,\n// //     noSyntaxValidation: !1\n// //   }),\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/types.ts",
    "content": "export type Code = Record<string, string>;\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/utils.ts",
    "content": "export function assert(x, message = '') {\n  if (x !== undefined) {\n    return x;\n  } else {\n    // tslint:disable-next-line:no-debugger\n    debugger;\n    throw new Error('Assertion failed! ' + message);\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/src/lib/shared/visitor.ts",
    "content": "import { getTypeScript } from '@codelab/utils/src/lib/loaders/loaders';\n\nconst ts = getTypeScript();\n\nnamespace ts {\n  export type Node = any;\n}\n\n// TODO(kirjs): Consider adding a test.\nexport function simpleVisitor(\n  code: ts.Node,\n  filter: (f: ts.Node) => any,\n  callback: (f: ts.Node) => any\n) {\n  function visit(node) {\n    if (filter(node)) {\n      callback(node);\n    }\n    ts.forEachChild(node, visit);\n  }\n\n  visit(code);\n}\n"
  },
  {
    "path": "libs/code-demos/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "libs/code-demos/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jest\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/code-demos/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"resolveJsonModule\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/code-demos/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/code-demos/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codeDemo\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"code-demo\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/console/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nconst { join } = require('path');\nconst getBaseKarmaConfig = require('../../karma.conf');\n\nmodule.exports = function(config) {\n  const baseConfig = getBaseKarmaConfig();\n  config.set({\n    ...baseConfig,\n    coverageIstanbulReporter: {\n      ...baseConfig.coverageIstanbulReporter,\n      dir: join(__dirname, '../../coverage/libs/console')\n    }\n  });\n};\n"
  },
  {
    "path": "libs/console/src/index.ts",
    "content": "export * from './lib/console.module';\n"
  },
  {
    "path": "libs/console/src/lib/console.component.css",
    "content": ".code {\n  flex: 1;\n  border: none;\n  font-family: Monaco, 'Lucida Console', monospace;\n}\n\n.block {\n  border-bottom: 1px #999 solid;\n  padding: 20px;\n  white-space: pre-wrap;\n  word-break: break-all;\n}\n\ntextarea {\n  outline: none;\n  word-wrap: break-word;\n  word-break: break-all;\n}\n"
  },
  {
    "path": "libs/console/src/lib/console.component.html",
    "content": "<div style=\"display: flex; flex-direction: column\">\n  <div>\n    <div #outputBlock *ngFor=\"let block of output; trackBy: trackByFn\">\n      <div\n        *ngIf=\"block.type !== 'dynamic'\"\n        [class]=\"'code block ' + (block.type || '')\"\n        [style.font-size.px]=\"fontSize\"\n        [innerHTML]=\"block.code | safeHtml\"\n      ></div>\n      <div *ngIf=\"block.type === 'dynamic'\" class=\"code dynamic\">\n        <console-display-dynamic-component\n          [component]=\"block.code\"\n          [param]=\"block.param\"\n        ></console-display-dynamic-component>\n      </div>\n    </div>\n  </div>\n  <div style=\"display: flex\">\n    <mat-autocomplete #auto=\"matAutocomplete\">\n      <mat-option *ngFor=\"let option of autocomplete\" [value]=\"option\">\n        {{ option }}\n      </mat-option>\n    </mat-autocomplete>\n\n    <textarea\n      #inp\n      [matAutocomplete]=\"auto\"\n      (ngModelChange)=\"updateAutocomplete()\"\n      (keydown.enter)=\"execute(input); $event.preventDefault()\"\n      (keydown.control.])=\"next(); $event.preventDefault()\"\n      (keydown.control.enter)=\"input = input + '\\n'\"\n      [(ngModel)]=\"input\"\n      class=\"code\"\n      [style.font-size.px]=\"fontSize\"\n      [style.height.px]=\"inputHeight\"\n      (keyup)=\"calcInputHeight()\"\n      (keydown)=\"calcInputHeight()\"\n    ></textarea>\n\n    <div\n      [style.font-size.px]=\"fontSize\"\n      style=\"color: #067aff; line-height: 50px;\"\n    >\n      &gt;\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "libs/console/src/lib/console.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ConsoleComponent } from './console.component';\n\ndescribe('ConsoleComponent', () => {\n  let component: ConsoleComponent;\n  let fixture: ComponentFixture<ConsoleComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ConsoleComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ConsoleComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/console/src/lib/console.component.ts",
    "content": "import {\n  AfterViewInit,\n  Component,\n  HostListener,\n  Input,\n  OnInit,\n  Type,\n  ViewChild,\n  ViewChildren\n} from '@angular/core';\n\nfunction escapeHtml(str) {\n  const div = document.createElement('div');\n  div.appendChild(document.createTextNode(str));\n  return div.innerHTML;\n}\n\n@Component({\n  selector: 'console-console',\n  templateUrl: './console.component.html',\n  styleUrls: ['./console.component.css']\n})\nexport class ConsoleComponent implements OnInit, AfterViewInit {\n  fontSize = 40;\n  output = [];\n  input = '';\n  inputHeight = 50;\n  autocomplete: string[] = [];\n\n  @Input() componentMap: { [key: string]: Type<any> };\n  @Input() commands: string[];\n\n  @ViewChild('inp', { static: false }) inputEl;\n  @ViewChildren('outputBlock') blocks;\n\n  typeInQueue = [];\n\n  currentCommand = 0;\n\n  @HostListener('document:keydown.esc', ['$event'])\n  handleKeyboardEvent() {\n    this.inputEl.nativeElement.focus();\n  }\n\n  trackByFn(a, i) {\n    return i;\n  }\n\n  post(code: any, type: string = 'output') {\n    if (code && code.dynamicComponent) {\n      this.output.push({\n        code: code.dynamicComponent,\n        param: code.param,\n        type: 'dynamic'\n      });\n    } else {\n      this.output.push({ code: code, type });\n    }\n  }\n\n  evalCode(code: string) {\n    return new Function('return (' + code + ')')();\n  }\n\n  ngOnInit() {\n    this.updateAutocomplete();\n  }\n\n  calcInputHeight() {\n    this.inputHeight = Math.max(50, this.inputEl.nativeElement.scrollHeight);\n  }\n\n  next() {\n    this.typeIn(this.commands[this.currentCommand]);\n    this.currentCommand++;\n  }\n\n  ngAfterViewInit() {\n    const that = this;\n    (window as any).explain = (component: string, param: string) =>\n      this.explain(component, param);\n\n    console.log = function() {\n      Array.from(arguments).map(a => that.post(a, 'log'));\n    };\n\n    const addChar = () => {\n      if (this.typeInQueue.length > 0) {\n        const next = this.typeInQueue.shift();\n        if (next === 'execute') {\n          this.execute(this.input);\n        } else {\n          this.input += next;\n        }\n      }\n      window.setTimeout(() => addChar(), Math.random() * 1);\n    };\n\n    requestAnimationFrame(() => {\n      this.next();\n    });\n\n    addChar();\n  }\n\n  execute(code: string) {\n    if (code.trim() === '') {\n      return;\n    }\n\n    if (!/['\"`<]/.test(code[0])) {\n      this.post(code);\n    }\n\n    if (code.trim().substr(0, 1) === '<') {\n      this.post(escapeHtml(code));\n      code = `explain('html', \\`${code}\\`)`;\n    }\n\n    try {\n      this.post(this.evalCode(code), 'result');\n    } catch (e) {\n      this.post(e.message, 'error');\n    }\n\n    requestAnimationFrame(() => {\n      this.calcInputHeight();\n      this.blocks.last.nativeElement.scrollIntoView();\n      this.inputEl.nativeElement.focus();\n    });\n\n    this.input = '';\n  }\n\n  typeIn(code) {\n    this.typeInQueue = this.typeInQueue.concat(code.split(''));\n    this.typeInQueue.push('execute');\n  }\n\n  updateAutocomplete() {\n    if (this.input.length < 3) {\n      this.autocomplete = [];\n    } else {\n      this.autocomplete = this.commands.filter(a => a.includes(this.input));\n    }\n  }\n\n  private explain(s: string, param: string) {\n    if (!this.componentMap[s]) {\n      throw new Error(`Unknown component type: ${s}`);\n    }\n    return {\n      dynamicComponent: this.componentMap[s],\n      param\n    };\n  }\n}\n"
  },
  {
    "path": "libs/console/src/lib/console.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ConsoleComponent } from './console.component';\nimport { SharedPipeModule } from '../../../utils/src/lib/pipes/pipes.module';\nimport { DisplayDynamicComponent } from './display-dynamic.component/display-dynamic-component.component';\nimport { FormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\n\n@NgModule({\n  imports: [SharedPipeModule, CommonModule, FormsModule, MatAutocompleteModule],\n  declarations: [ConsoleComponent, DisplayDynamicComponent],\n  exports: [ConsoleComponent]\n})\nexport class ConsoleModule {}\n"
  },
  {
    "path": "libs/console/src/lib/display-dynamic.component/display-dynamic-component.component.css",
    "content": ""
  },
  {
    "path": "libs/console/src/lib/display-dynamic.component/display-dynamic-component.component.html",
    "content": ""
  },
  {
    "path": "libs/console/src/lib/display-dynamic.component/display-dynamic-component.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { DisplayDynamicComponent } from './display-dynamic-component.component';\n\ndescribe('DisplayDynamicComponent', () => {\n  let component: DisplayDynamicComponent;\n  let fixture: ComponentFixture<DisplayDynamicComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [DisplayDynamicComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(DisplayDynamicComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/console/src/lib/display-dynamic.component/display-dynamic-component.component.ts",
    "content": "import {\n  Component,\n  ComponentFactoryResolver,\n  Input,\n  OnInit,\n  Type,\n  ViewContainerRef\n} from '@angular/core';\n\n@Component({\n  selector: 'console-display-dynamic-component',\n  templateUrl: './display-dynamic-component.component.html',\n  styleUrls: ['./display-dynamic-component.component.css']\n})\nexport class DisplayDynamicComponent implements OnInit {\n  @Input() component: Type<any>;\n  @Input() param: string;\n\n  constructor(\n    private vcr: ViewContainerRef,\n    private componentFactoryResolver: ComponentFactoryResolver\n  ) {}\n\n  ngOnInit() {\n    const cf = this.componentFactoryResolver.resolveComponentFactory(\n      this.component\n    );\n    this.vcr.clear();\n    const componentRef = this.vcr.createComponent(cf);\n    componentRef.instance.param = this.param;\n  }\n}\n"
  },
  {
    "path": "libs/console/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/console/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/console/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2015\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"flatModuleId\": \"AUTOGENERATED\",\n    \"flatModuleOutFile\": \"AUTOGENERATED\"\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/console/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/console/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"console\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"console\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/feedback/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nconst { join } = require('path');\nconst getBaseKarmaConfig = require('../../karma.conf');\n\nmodule.exports = function(config) {\n  const baseConfig = getBaseKarmaConfig();\n  config.set({\n    ...baseConfig,\n    coverageIstanbulReporter: {\n      ...baseConfig.coverageIstanbulReporter,\n      dir: join(__dirname, '../../coverage/libs/feedback')\n    }\n  });\n};\n"
  },
  {
    "path": "libs/feedback/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/feedback\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/feedback/ng-package.prod.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/feedback\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/feedback/package.json",
    "content": "{\n  \"name\": \"@codelab/feedback\",\n  \"version\": \"0.0.1\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^7.0.0\",\n    \"@angular/core\": \"^7.0.0\"\n  }\n}\n"
  },
  {
    "path": "libs/feedback/src/index.ts",
    "content": "export * from './lib/feedback.module';\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-issue-dropdown/feedback-issue-dropdown.component.html",
    "content": "<div class=\"dropdown\">\n  <button class=\"dropdown-btn\" [matMenuTriggerFor]=\"menu\">\n    <img i18n alt=\"icon-tools\" src=\"/assets/images/icons/icon-tools.png\" />\n  </button>\n</div>\n\n<mat-menu #menu=\"matMenu\">\n  <a (click)=\"createIssue()\" mat-menu-item> Take </a>\n  <a (click)=\"createClosedIssue('[Duplicate]')\" mat-menu-item>\n    Close [Duplicate]\n  </a>\n  <a (click)=\"createClosedIssue('[No fix]')\" mat-menu-item> Close [No fix] </a>\n  <a (click)=\"createClosedIssue('[Done]')\" mat-menu-item> Close [Done] </a>\n  <a\n    (click)=\"createClosedIssue('[Nice message, though not a real bug]')\"\n    mat-menu-item\n  >\n    Close [Nice message]\n  </a>\n  <a (click)=\"createClosedIssue('[Can\\'t repcoduce]')\" mat-menu-item>\n    Close [Can't reproduce]\n  </a>\n</mat-menu>\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-issue-dropdown/feedback-issue-dropdown.component.scss",
    "content": ":host {\n  .dropdown {\n    float: right;\n\n    button {\n      cursor: pointer;\n      border: none;\n      background: #f0f3f5;\n    }\n\n    img {\n      width: 15px;\n    }\n  }\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-issue-dropdown/feedback-issue-dropdown.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { GithubService } from '@codelab/utils';\n\n@Component({\n  selector: 'feedback-issue-dropdown',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './feedback-issue-dropdown.component.html',\n  styleUrls: ['./feedback-issue-dropdown.component.scss']\n})\nexport class FeedbackIssueDropdownComponent {\n  @Input() message: object;\n\n  constructor(private ghService: GithubService) {}\n\n  createIssue() {\n    this.ghService.createIssue(this.message);\n  }\n\n  createClosedIssue(reason) {\n    this.ghService.createClosedIssue(this.message, reason);\n  }\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-rating/feedback-rating.component.css",
    "content": ".rate {\n  border-radius: 50%;\n  cursor: pointer;\n  margin-left: auto;\n  margin-right: auto;\n  width: 120px;\n}\n\n.rate:hover {\n  background-image: -ms-linear-gradient(\n    left,\n    #b8e1fc 0%,\n    #90bae4 25%,\n    #90bcea 37%,\n    #bdf3fd 100%\n  );\n  background-image: -webkit-linear-gradient(\n    left,\n    #b8e1fc 0%,\n    #90bae4 25%,\n    #90bcea 37%,\n    #bdf3fd 100%\n  );\n  background-image: -webkit-gradient(\n    left,\n    #b8e1fc 0%,\n    #90bae4 25%,\n    #90bcea 37%,\n    #bdf3fd 100%\n  );\n  background-image: -o-linear-gradient(\n    left,\n    #b8e1fc 0%,\n    #90bae4 25%,\n    #90bcea 37%,\n    #bdf3fd 100%\n  );\n  background-image: -moz-linear-gradient(\n    left,\n    #b8e1fc 0%,\n    #90bae4 25%,\n    #90bcea 37%,\n    #bdf3fd 100%\n  );\n  background-image: linear-gradient(\n    to right,\n    #b8e1fc 0%,\n    #90bae4 25%,\n    #90bcea 37%,\n    #bdf3fd 100%\n  );\n}\n\n.rateheading {\n  width: 140px;\n  text-align: center;\n}\n\n.rateoption {\n  width: 200px;\n  text-align: center;\n  margin-left: 10px;\n  margin-right: 10px;\n}\n\n.rateselected {\n  border: 3px solid slategray;\n}\n\n.ratings {\n  margin-top: 25px;\n}\n\n.ratingshidden {\n  visibility: hidden;\n}\n\n.slideup {\n  animation-name: slideup;\n  -webkit-animation-name: slideup;\n  -moz-animation-name: slideup;\n\n  animation-duration: 1s;\n  -webkit-animation-duration: 1s;\n  -moz-animation-duration: 1s;\n\n  animation-timing-function: ease;\n  -webkit-animation-timing-function: ease;\n  -moz-animation-timing-function: ease;\n}\n\n@keyframes slideup {\n  0% {\n    transform: translateY(100%);\n  }\n  50% {\n    transform: translateY(8%);\n  }\n  65% {\n    transform: translateY(-4%);\n  }\n  80% {\n    transform: translateY(4%);\n  }\n  95% {\n    transform: translateY(-2%);\n  }\n  100% {\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes slideup {\n  0% {\n    -webkit-transform: translateY(100%);\n    transform: translateY(100%);\n  }\n  50% {\n    -webkit-transform: translateY(8%);\n    transform: translateY(8%);\n  }\n  65% {\n    -webkit-transform: translateY(-4%);\n    transform: translateY(-4%);\n  }\n  80% {\n    -webkit-transform: translateY(4%);\n    transform: translateY(4%);\n  }\n  95% {\n    -webkit-transform: translateY(-2%);\n    transform: translateY(-2%);\n  }\n  100% {\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n.slidedown {\n  animation-name: slidedown;\n  -webkit-animation-name: slidedown;\n  -moz-animation-name: slidedown;\n\n  animation-duration: 2s;\n  -webkit-animation-duration: 2s;\n  -moz-animation-duration: 2s;\n\n  animation-timing-function: ease;\n  -webkit-animation-timing-function: ease;\n  -moz-animation-timing-function: ease;\n\n  animation-fill-mode: forwards;\n}\n\n@keyframes slidedown {\n  0% {\n    transform: translateY(0%);\n  }\n  50% {\n    transform: translateY(0%);\n  }\n  99% {\n    transform: translateY(200%);\n  }\n  100% {\n    transform: translateY(200%);\n    visibility: hidden;\n  }\n}\n\n@-webkit-keyframes slidedown {\n  0% {\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n  50% {\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n  99% {\n    -webkit-transform: translateY(200%);\n    transform: translateY(200%);\n  }\n  100% {\n    -webkit-transform: translateY(200%);\n    transform: translateY(200%);\n    visibility: hidden;\n  }\n}\n\n.summarytable {\n  padding: 10px;\n  border-collapse: collapse;\n}\n\n.summarytable tr:nth-child(even) {\n  background-color: lightgoldenrodyellow;\n}\n\n.summarytable tr td {\n  padding: 10px;\n  border-top: 1px solid black;\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-rating/feedback-rating.component.html",
    "content": "<div #translations style=\"display: none\">\n  <div i18n=\"@@perfect\" id=\"perfect\">Perfect</div>\n  <div i18n=\"@@good\" id=\"good\">good</div>\n  <div i18n=\"@@ok\" id=\"ok\">ok</div>\n  <div i18n=\"@@hopedForMore\" id=\"hopedForMore\">Hoped for more</div>\n</div>\n\n<div *ngIf=\"!showSummary\" style=\"height: 340px; overflow: hidden\">\n  <div [class]=\"ratingsClass\">\n    <br />\n    <br />\n    <h1 i18n>Rate this lesson ...</h1>\n    <div row>\n      <div *ngFor=\"let rate of rates; let i = index\" class=\"rateoption\">\n        <div [class]=\"rateClass(i)\" (click)=\"selectRate(i)\">\n          <img [src]=\"'assets/images/' + rate.src\" />\n        </div>\n        <h1>{{ rate.text }}</h1>\n      </div>\n    </div>\n  </div>\n</div>\n<div *ngIf=\"showSummary\">\n  <table class=\"summarytable\">\n    <thead>\n      <tr>\n        <th style=\"width: 40%; text-align: left; vertical-align: bottom;\">\n          <h1>Lesson</h1>\n        </th>\n        <th *ngFor=\"let rate of rates\" class=\"rateheading\">\n          <div class=\"rate\"><img [src]=\"'assets/images/' + rate.src\" /></div>\n          <b>{{ rate.text }}</b>\n        </th>\n      </tr>\n    </thead>\n    <tbody>\n      <tr *ngFor=\"let rating of ratings$ | async; let i = index\">\n        <td>\n          <h3>{{ rating.lesson }}</h3>\n        </td>\n        <td *ngFor=\"let rate of rates\" class=\"rateheading\">\n          <h3>{{ rating[rate.value] }}</h3>\n        </td>\n      </tr>\n    </tbody>\n  </table>\n</div>\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-rating/feedback-rating.component.ts",
    "content": "import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnInit\n} from '@angular/core';\nimport { FeedbackService } from '../feedback.service';\nimport { Observable } from 'rxjs';\n\n@Component({\n  selector: 'feedback-rating',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './feedback-rating.component.html',\n  styleUrls: ['./feedback-rating.component.css']\n})\nexport class FeedbackRatingComponent implements OnInit, AfterViewInit {\n  @Input() showSummary = false;\n  @Input() lesson = '';\n  ratings$: Observable<any[]>;\n  ratingsClass = 'ratings ratingshidden';\n  rateSelected = -1;\n  rates = [\n    {\n      src: 'ng-smile.svg',\n      value: '\"perfect',\n      text: 'Perfect!'\n    },\n    {\n      src: 'ng-ok.svg',\n      value: 'good',\n      text: 'Good'\n    },\n    {\n      src: 'ng-soso.svg',\n      value: 'soso',\n      text: 'Ok'\n    },\n    {\n      src: 'ng-sleepy.svg',\n      value: 'hopedformore',\n      text: 'Hoped for more!'\n    }\n  ];\n\n  constructor(\n    private ref: ChangeDetectorRef,\n    private feedbackService: FeedbackService\n  ) {}\n\n  ngOnInit() {\n    this.ratings$ = this.feedbackService.getRatings();\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => {\n      this.ratingsClass = 'ratings slideup';\n      // TODO: work on animation process\n      this.ref.markForCheck();\n    }, 1000);\n  }\n\n  rateClass(option: number) {\n    let className = '';\n    if (option === this.rateSelected) {\n      className = 'rateselected';\n    }\n    return 'rate ' + className;\n  }\n\n  selectRate(option: number) {\n    this.rateSelected = option;\n    this.ratingsClass = 'ratings slidedown';\n    this.feedbackService.addRating(this.lesson, this.rates[option].value);\n  }\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-widget/feedback-widget.component.html",
    "content": "<button class=\"menu-bar-btn\" [matMenuTriggerFor]=\"menu\">\n  <img alt=\"chat-img\" src=\"/assets/images/chat.png\" />\n  <ng-container *ngIf=\"messages$ | async as message\">\n    <ng-container *ngIf=\"message.length\">\n      <span class=\"messages-count\"> {{ message.length }} </span>\n    </ng-container>\n  </ng-container>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n  <div\n    (click)=\"$event.stopPropagation()\"\n    (keydown)=\"$event.stopPropagation()\"\n    class=\"buttons-nav-bar-modal-content-wrapper\"\n  >\n    <h2 class=\"modal-title\">Feedback</h2>\n    <ng-container *ngIf=\"messages$ | async as message\">\n      <ng-container *ngIf=\"message.length\">\n        <div class=\"feedback-items\">\n          <ng-container *ngFor=\"let item of message\">\n            <div class=\"feedback-item\">\n              <div class=\"header\">\n                <span class=\"name\">{{ item.name }}</span>\n                <div style=\"display: flex;\">\n                  <span class=\"date\"> {{ item.timestamp | date }}</span>\n                  <feedback-issue-dropdown\n                    *ngIf=\"accessService.oldIsAdmin$ | async\"\n                    [message]=\"item\"\n                  ></feedback-issue-dropdown>\n                </div>\n              </div>\n              <div class=\"comment\">{{ item.comment }}</div>\n            </div>\n          </ng-container>\n        </div>\n      </ng-container>\n    </ng-container>\n    <form [formGroup]=\"formGroup\" (submit)=\"submit()\" class=\"form-container\">\n      <input\n        formControlName=\"name\"\n        placeholder=\"Enter your name\"\n        type=\"text\"\n        class=\"mt-0\"\n        i18n-placeholder\n      />\n      <input\n        formControlName=\"email\"\n        type=\"email\"\n        placeholder=\"Enter your email\"\n      />\n      <small class=\"text-muted\" i18n\n        >Email is optional and, will not displayed\n      </small>\n      <div>\n        <textarea\n          i18n-placeholder\n          placeholder=\"Describe your issue or share your ideas\"\n          formControlName=\"comment\"\n          (keydown.control.enter)=\"submit()\"\n        ></textarea>\n      </div>\n      <div>\n        <button\n          (click)=\"submit()\"\n          [disabled]=\"formGroup.invalid\"\n          mat-raised-button\n          type=\"button\"\n          class=\"btn\"\n          i18n\n        >\n          Send\n        </button>\n      </div>\n      <div [class.error]=\"error\">{{ statusMessage }}</div>\n    </form>\n  </div>\n</mat-menu>\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-widget/feedback-widget.component.scss",
    "content": ".modal-title {\n  margin: 0 0 10px 0;\n}\n\n.menu-bar-btn {\n  background-color: #3498db !important;\n}\n\n.messages-count {\n  position: absolute;\n  width: 15px;\n  height: 15px;\n  top: 0;\n  text-align: center;\n  font-size: 13px;\n}\n\n.messages-count {\n  float: right;\n  background: #ff594b;\n  color: white;\n  border-radius: 50%;\n}\n\n.form-container {\n  padding: 10px 10px 10px 0px;\n  max-width: 300px;\n  margin-right: 10px;\n}\n\ntextarea {\n  margin: 10px 0;\n  height: 100px;\n}\n\ninput,\ntextarea {\n  width: 100%;\n  border: 1px #ddd solid;\n  padding: 4px;\n  margin-top: 10px;\n}\n\n.feedback-items {\n  max-height: 300px;\n  overflow-y: auto;\n}\n\n.feedback-item {\n  background: #f0f3f5;\n  border-radius: 4px;\n  padding: 8px;\n  margin: 5px 0;\n}\n\n.feedback-item .header {\n  display: flex;\n  justify-content: space-between;\n  font-size: 12px;\n  margin-bottom: 4px;\n}\n\n.header .date {\n  float: right;\n}\n\n.feedback-item .name {\n  color: #ff594b;\n}\n\n.messages-count {\n  background: #ff594b;\n  color: white;\n  border-radius: 50%;\n}\n\n#message {\n  margin-top: 15px;\n}\n\n.error {\n  color: red;\n}\n\n.email label {\n  color: #999;\n  font-size: 12px;\n}\n\n.comment {\n  white-space: pre-line;\n}\n\n.text-muted {\n  color: #6c757d !important;\n}\n\n.mt-0 {\n  margin-top: 0;\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback-widget/feedback-widget.component.ts",
    "content": "import { ActivatedRoute, Router } from '@angular/router';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { FeedbackService } from '../feedback.service';\nimport { Message } from '../message';\nimport { Observable, Subject } from 'rxjs';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { AccessService } from '../../../../../apps/codelab/src/app/shared/services/access.service';\n\n@Component({\n  selector: 'feedback-widget',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './feedback-widget.component.html',\n  styleUrls: ['./feedback-widget.component.scss']\n})\nexport class FeedbackWidgetComponent implements OnInit, OnDestroy {\n  messages$: Observable<Message[]>;\n\n  formGroup: FormGroup;\n  statusMessage = '';\n  error = false;\n\n  private readonly destroy = new Subject<void>();\n\n  constructor(\n    private readonly fb: FormBuilder,\n    private readonly activatedRoute: ActivatedRoute,\n    private readonly accessService: AccessService,\n    private readonly feedbackService: FeedbackService,\n    private readonly router: Router\n  ) {\n    this.messages$ = this.feedbackService.getMessagesForCurrentPage();\n  }\n\n  ngOnInit() {\n    // TODO: Consider the possibility to transfer logic to it's service.\n    let value = localStorage[`feedback-${this.router.url}-comment`] || '';\n    value = value === 'null' ? '' : value;\n    this.formGroup = this.fb.group({\n      comment: [value, Validators.required],\n      name: [localStorage.getItem('userName') || '', Validators.required],\n      email: [localStorage.getItem('userEmail') || '', []]\n    });\n\n    this.formGroup.valueChanges\n      .pipe(debounceTime(500), takeUntil(this.destroy))\n      .subscribe(data => {\n        localStorage[`feedback-${this.router.url}-comment`] = data.comment;\n      });\n  }\n\n  submit() {\n    const formValues: any = this.formGroup.getRawValue();\n    localStorage.setItem('userName', formValues.name);\n    localStorage.setItem('userEmail', formValues.email);\n\n    this.feedbackService\n      .addMessage(\n        formValues.name,\n        formValues.email,\n        formValues.comment,\n        this.getHeaderText()\n      )\n      .then(() => {\n        this.formGroup.get('comment').reset();\n      })\n      .catch(() => {\n        this.statusMessage = 'Error while sending feedback';\n        this.error = true;\n      });\n  }\n\n  ngOnDestroy() {\n    this.destroy.next(null);\n    this.destroy.complete();\n  }\n\n  private getHeaderText(): string {\n    const el = document.body.querySelector('h1');\n    return el ? el.innerHTML : '';\n  }\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { FeedbackModule } from './feedback.module';\n\ndescribe('FeedbackModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [FeedbackModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(FeedbackModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { AngularFireModule } from '@angular/fire';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { FeedbackService } from './feedback.service';\nimport { FeedbackWidgetComponent } from './feedback-widget/feedback-widget.component';\nimport { FeedbackRatingComponent } from './feedback-rating/feedback-rating.component';\nimport { FeedbackIssueDropdownComponent } from '@codelab/feedback/src/lib/feedback-issue-dropdown/feedback-issue-dropdown.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { GithubModule, GithubService } from '@codelab/utils';\n\nimport { environment } from '../../../../apps/codelab/src/environments/environment';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nexport const angularFire = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    AngularFireDatabaseModule,\n    angularFire,\n    FormsModule,\n    AngularFireDatabaseModule,\n    HttpClientModule,\n    GithubModule,\n    MatMenuModule,\n    MatButtonModule,\n    MatCardModule\n  ],\n  providers: [FeedbackService, GithubService],\n  declarations: [\n    FeedbackWidgetComponent,\n    FeedbackRatingComponent,\n    FeedbackIssueDropdownComponent\n  ],\n  exports: [\n    FeedbackWidgetComponent,\n    FeedbackRatingComponent,\n    FeedbackIssueDropdownComponent\n  ]\n})\nexport class FeedbackModule {}\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback.service.spec.ts",
    "content": "import { ActivatedRoute, Router } from '@angular/router';\nimport { AngularFireDatabase } from '@angular/fire/database';\nimport { async, inject, TestBed } from '@angular/core/testing';\nimport { BehaviorSubject } from 'rxjs';\nimport { Component } from '@angular/core';\nimport { FeedbackService } from './feedback.service';\nimport { RouterTestingModule } from '@angular/router/testing';\n\n@Component({\n  template: `\n    <router-outlet></router-outlet>\n  `\n})\nclass RoutingComponent {}\n\n@Component({\n  template: ''\n})\nclass DummyComponent {}\n\nconst mockActivatedRoute = {\n  url: new BehaviorSubject<string>('')\n};\n\nconst mockMessages = [\n  {\n    name: 'a',\n    href: '/typescript/1',\n    comment: 'blah',\n    email: 'dan@dan.com'\n  },\n  {\n    name: 'b',\n    href: '/typescript/1',\n    comment: 'blah',\n    email: 'dan@dan.com'\n  },\n  {\n    name: 'c',\n    href: '/typescript/2',\n    comment: 'blah',\n    email: 'dan@dan.com'\n  }\n];\n\nlet mockMessageStream: any = new BehaviorSubject(mockMessages);\nmockMessageStream = Object.assign(mockMessageStream, {\n  push: jasmine.createSpy('push')\n});\n\nconst mockDb = {\n  list: jasmine.createSpy('list').and.returnValue(mockMessageStream)\n};\n\nlet fixture;\n\nxdescribe('FeedbackService', () => {\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      providers: [\n        FeedbackService,\n        {\n          provide: AngularFireDatabase,\n          useValue: mockDb\n        },\n        { provide: ActivatedRoute, useValue: mockActivatedRoute }\n      ],\n      imports: [\n        RouterTestingModule.withRoutes([\n          { path: 'typescript/1', component: DummyComponent },\n          { path: 'typescript/2', component: DummyComponent }\n        ])\n      ],\n      declarations: [RoutingComponent, DummyComponent]\n    });\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RoutingComponent);\n    fixture.detectChanges();\n  });\n\n  it('should initialize data source when created', inject(\n    [FeedbackService],\n    (service: FeedbackService) => {\n      expect(mockDb.list).toHaveBeenCalledWith('/feedback');\n    }\n  ));\n\n  it('should list messages filtered by the router url', async(\n    inject(\n      [FeedbackService, ActivatedRoute, Router],\n      (\n        service: FeedbackService,\n        _activatedRoute: ActivatedRoute,\n        router: Router\n      ) => {\n        router.navigateByUrl('typescript/1').then(() => {\n          const stream = service\n            .getMessages(_activatedRoute)\n            .subscribe(values => {\n              expect(values.length).toEqual(2);\n            });\n        });\n      }\n    )\n  ));\n\n  it('should list messages filtered by the router url when the activated route changes', async(\n    inject(\n      [FeedbackService, ActivatedRoute, Router],\n      (\n        service: FeedbackService,\n        _activatedRoute: ActivatedRoute,\n        router: any\n      ) => {\n        let calls = 0;\n        router.navigateByUrl('typescript/1').then(() => {\n          service.getMessages(_activatedRoute).subscribe(values => {\n            if (calls === 0) {\n              expect(values.length).toEqual(2);\n            }\n            if (calls === 1) {\n              expect(values.length).toEqual(1);\n            }\n            calls++;\n          });\n          router.navigateByUrl('typescript/2').then(() => {\n            mockActivatedRoute.url.next('');\n          });\n        });\n      }\n    )\n  ));\n\n  it('should add a message from the current url', async(\n    inject(\n      [FeedbackService, Router],\n      (service: FeedbackService, router: Router) => {\n        router.navigateByUrl('typescript/1').then(() => {\n          service.addMessage('a', 'b', 'c', 'header');\n          expect(mockMessageStream.push).toHaveBeenCalled();\n          const call: jasmine.Spy = mockMessageStream.push;\n          const obj = call.calls.mostRecent().args[0];\n          expect(obj.href).toEqual('/typescript/1');\n        });\n      }\n    )\n  ));\n});\n"
  },
  {
    "path": "libs/feedback/src/lib/feedback.service.ts",
    "content": "import { Event, NavigationEnd, Router } from '@angular/router';\nimport { AngularFireDatabase, AngularFireList } from '@angular/fire/database';\nimport { Injectable } from '@angular/core';\nimport { getRef } from '@angular/fire/database/utils';\nimport { Message } from './message';\nimport { defer, Observable, of } from 'rxjs';\nimport {\n  filter,\n  map,\n  publishReplay,\n  refCount,\n  repeatWhen,\n  switchMap\n} from 'rxjs/operators';\n\nfunction normalize(feedback: Array<any>) {\n  return feedback.map(item => ({\n    ...(item.payload && item.payload.val()),\n    key: item.key\n  }));\n}\n\n@Injectable()\nexport class FeedbackService {\n  private repo$: AngularFireList<any>;\n  private ratings$: AngularFireList<any>;\n\n  constructor(private database: AngularFireDatabase, private router: Router) {\n    this.repo$ = this.database.list('/feedback');\n    this.ratings$ = this.database.list('/ratings');\n  }\n\n  // Get a stream of messages filtered by href (of a message)\n  getMessages(url: string): Observable<Message[]> {\n    return this.database\n      .list('/feedback', ref => ref.orderByChild('href').equalTo(url))\n      .snapshotChanges()\n      .pipe(\n        map(normalize),\n        map((items: Message[]) => items.filter(item => !item.isDone))\n      );\n  }\n\n  getMessagesForCurrentPage(): Observable<Message[]> {\n    const onNavigationEnd: Observable<Event> = this.router.events.pipe(\n      filter(val => val instanceof NavigationEnd)\n    );\n\n    const url: Observable<string> = defer(() => of(this.router.url)).pipe(\n      repeatWhen(() => onNavigationEnd)\n    );\n\n    return url.pipe(\n      switchMap(url => this.getMessages(url)),\n      publishReplay(1),\n      refCount()\n    );\n  }\n\n  addMessage(\n    name: string,\n    email: string,\n    comment: string,\n    header?: string\n  ): any {\n    const message = {\n      name,\n      email,\n      comment,\n      header,\n      timestamp: new Date().toUTCString(),\n      href: this.router.url\n    };\n    return this.repo$.push(message);\n  }\n\n  getRatings(): Observable<any[]> {\n    return this.ratings$.valueChanges();\n  }\n\n  addRating(lesson: string, rating: string) {\n    const path = 'ratings/' + lesson;\n    getRef(this.database.database, path).transaction(ratings => {\n      if (ratings == null) {\n        ratings = {\n          lesson: lesson\n        };\n      }\n      const count = ratings[rating] || 0;\n      ratings[rating] = count + 1;\n      return ratings;\n    });\n  }\n}\n"
  },
  {
    "path": "libs/feedback/src/lib/message.ts",
    "content": "export interface Message {\n  comment: string;\n  name: string;\n  email: string;\n  timestamp?: string;\n  href?: string;\n  header?: string;\n  isDone?: boolean;\n}\n"
  },
  {
    "path": "libs/feedback/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/feedback/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/feedback/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/feedback/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/feedback/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"feedback\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"feedback\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/firebase/README.md",
    "content": "# firebase\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test firebase` to execute the unit tests.\n"
  },
  {
    "path": "libs/firebase/jest.config.js",
    "content": "module.exports = {\n  name: 'firebase',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/libs/firebase',\n  snapshotSerializers: [\n    'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',\n    'jest-preset-angular/build/AngularSnapshotSerializer.js',\n    'jest-preset-angular/build/HTMLCommentSerializer.js'\n  ]\n};\n"
  },
  {
    "path": "libs/firebase/src/index.ts",
    "content": "export * from './lib/firebase.module';\n"
  },
  {
    "path": "libs/firebase/src/lib/firebase.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { FirebaseModule } from './firebase.module';\n\ndescribe('FirebaseModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [FirebaseModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(FirebaseModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/firebase/src/lib/firebase.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SyncFireStoreDirective } from './sync-fire-store.directive';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFirestoreModule } from '@angular/fire/firestore';\n\n@NgModule({\n  imports: [CommonModule, AngularFirestoreModule],\n  exports: [SyncFireStoreDirective],\n  declarations: [SyncFireStoreDirective]\n})\nexport class FirebaseModule {}\n"
  },
  {
    "path": "libs/firebase/src/lib/sync-fire-store.directive.spec.ts",
    "content": "import { SyncFireStoreDirective } from './sync-fire-store.directive';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { FormsModule } from '@angular/forms';\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelab-any',\n  template: `\n    <input [(ngModel)]=\"lol\" syncFireStore=\"pikachu\" />\n  `\n})\nexport class TestComponent {\n  lol = 'hello';\n}\n\ndescribe('SyncFireStoreDirective', () => {\n  let fixture: ComponentFixture<TestComponent>;\n  let component: TestComponent;\n\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      imports: [FormsModule],\n      declarations: [TestComponent, SyncFireStoreDirective]\n    });\n\n    fixture = TestBed.createComponent(TestComponent);\n    component = fixture.componentInstance;\n  });\n\n  it('should create an instance', () => {\n    const directive = new SyncFireStoreDirective();\n    expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/firebase/src/lib/sync-fire-store.directive.ts",
    "content": "import {\n  Directive,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  Input,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  NG_VALUE_ACCESSOR,\n  NgControl\n} from '@angular/forms';\nimport {\n  AngularFirestore,\n  AngularFirestoreDocument\n} from '@angular/fire/firestore';\nimport { Subscription } from 'rxjs';\n\nexport const SYNC_FIRESTORE_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => SyncFireStoreDirective),\n  multi: true\n};\n\n// TODO(kirjs): This is not yet working\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[syncFireStore]'\n})\nexport class SyncFireStoreDirective<T> implements OnChanges {\n  @Input() syncFireStore!: T;\n  private doc: AngularFirestoreDocument<T>;\n  private subscription?: Subscription;\n\n  constructor(private afs: AngularFirestore, control: NgControl) {}\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.key) {\n      if (this.subscription) {\n        this.subscription.unsubscribe();\n        this.subscription = undefined;\n      }\n\n      this.doc = this.afs.doc<T>('items/1');\n      this.subscription = this.doc.valueChanges().subscribe();\n    }\n  }\n}\n"
  },
  {
    "path": "libs/firebase/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "libs/firebase/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "libs/firebase/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"declaration\": true,\n    \"inlineSources\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test-setup.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/firebase/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/firebase/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/firebase-login/index.ts",
    "content": "export * from './src';\n"
  },
  {
    "path": "libs/firebase-login/karma.conf.js",
    "content": "module.exports = function(config) {\n  config.set({\n    basePath: '../',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage-istanbul-reporter'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    coverageIstanbulReporter: {\n      dir: require('path').join(__dirname, '../coverage'),\n      reports: ['html', 'lcovonly'],\n      fixWebpackSourcePaths: true\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false\n  });\n};\n"
  },
  {
    "path": "libs/firebase-login/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/firebase-login\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/firebase-login/package.json",
    "content": "{\n  \"name\": \"@codelab/firebase-login\",\n  \"version\": \"0.0.1\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^7.1.0\",\n    \"@angular/core\": \"^7.1.0\"\n  }\n}\n"
  },
  {
    "path": "libs/firebase-login/src/index.ts",
    "content": "export * from './lib';\n"
  },
  {
    "path": "libs/firebase-login/src/lib/firebase-login.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { FirebaseLoginModule } from './firebase-login.module';\n\ndescribe('FirebaseLoginModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [FirebaseLoginModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(FirebaseLoginModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/firebase-login/src/lib/firebase-login.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { LoginWidgetComponent } from './login-widget/login-widget.component';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@NgModule({\n  imports: [CommonModule, AngularFireAuthModule, MatMenuModule],\n  declarations: [LoginWidgetComponent],\n  exports: [LoginWidgetComponent]\n})\nexport class FirebaseLoginModule {}\n"
  },
  {
    "path": "libs/firebase-login/src/lib/index.ts",
    "content": "export * from './firebase-login.module';\nexport * from './login.service';\n"
  },
  {
    "path": "libs/firebase-login/src/lib/login-widget/login-widget.component.css",
    "content": ".link {\n  text-decoration: underline;\n}\n\n.cursor-pointer {\n  cursor: pointer;\n}\n\n.mb-0 {\n  margin-bottom: 0;\n}\n\n.menu-bar-btn {\n  font-size: 20px;\n}\n"
  },
  {
    "path": "libs/firebase-login/src/lib/login-widget/login-widget.component.html",
    "content": "<button class=\"menu-bar-btn\" [matMenuTriggerFor]=\"menu\">\n  <ng-container *ngIf=\"loginService.user$ | async; else showLogin\">\n    <!-- TODO add an avatar if present? -->\n    👩‍💻\n  </ng-container>\n</button>\n\n<ng-template #showLogin> 🗝</ng-template>\n\n<mat-menu #menu=\"matMenu\">\n  <div class=\"buttons-nav-bar-modal-content-wrapper\">\n    <div *ngIf=\"loginService.user$ | async as user; else showLogin\">\n      <b>{{ user.email }}!</b>\n      <p>More features coming soon!</p>\n      <button (click)=\"logout()\">Logout</button>\n    </div>\n    <ng-template #showLogin>\n      <p class=\"mb-0\">To open an issue in feedback widget,</p>\n      <p>please log in</p>\n      <a class=\"link cursor-pointer\" (click)=\"login()\">Login with Google</a>\n    </ng-template>\n  </div>\n</mat-menu>\n"
  },
  {
    "path": "libs/firebase-login/src/lib/login-widget/login-widget.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LoginWidgetComponent } from './login-widget.component';\nimport { FirebaseLoginModule, LoginService } from '@codelab/firebase-login';\n\ndescribe('LoginWidgetComponent', () => {\n  let component: LoginWidgetComponent;\n  let fixture: ComponentFixture<LoginWidgetComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [FirebaseLoginModule],\n      providers: [\n        {\n          provide: LoginService,\n          useValue: {}\n        }\n      ]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LoginWidgetComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/firebase-login/src/lib/login-widget/login-widget.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { LoginService } from '@codelab/firebase-login/src/lib/login.service';\n\n@Component({\n  selector: 'codelab-login-widget',\n  templateUrl: './login-widget.component.html',\n  styleUrls: ['./login-widget.component.css']\n})\nexport class LoginWidgetComponent {\n  constructor(readonly loginService: LoginService) {}\n\n  login() {\n    this.loginService.loginWithGithub();\n  }\n\n  logout() {\n    this.loginService.logout();\n  }\n}\n"
  },
  {
    "path": "libs/firebase-login/src/lib/login.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { LoginService } from './login.service';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport { of } from 'rxjs';\n\ndescribe('LoginService', () => {\n  beforeEach(() =>\n    TestBed.configureTestingModule({\n      providers: [\n        {\n          provide: AngularFireAuth,\n          useValue: { user: of({}) }\n        }\n      ]\n    })\n  );\n\n  it('should be created', () => {\n    const service: LoginService = TestBed.inject(LoginService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/firebase-login/src/lib/login.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport { first, map } from 'rxjs/operators';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { SyncStatus } from '@codelab/utils/src/lib/sync/common';\nimport { auth } from 'firebase/app';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LoginService {\n  readonly user$ = this.auth.user;\n  readonly isAnonymous$ = this.auth.user.pipe(\n    map(u => (u ? u.isAnonymous : true))\n  );\n  readonly uid$: Observable<string> = this.user$.pipe(\n    map(user => user && user.uid)\n  );\n  readonly preferredStatus$ = new BehaviorSubject(SyncStatus.ADMIN);\n\n  constructor(private auth: AngularFireAuth) {\n    this.user$.pipe(first()).subscribe(a => {\n      if (!a) {\n        this.anonymousLogin();\n      }\n    });\n  }\n\n  anonymousLogin() {\n    return this.auth.auth\n      .signInAnonymously()\n      .then(() => console.log('successful login'))\n      .catch(error => console.log(error));\n  }\n\n  async logout() {\n    await this.auth.auth.signOut();\n    this.anonymousLogin();\n  }\n\n  loginWithGithub() {\n    this.auth.auth.signInWithPopup(new auth.GithubAuthProvider());\n  }\n}\n"
  },
  {
    "path": "libs/firebase-login/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/firebase-login/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/firebase-login/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/firebase-login/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/intro/README.md",
    "content": "# Angular Intro Presentation\n\nThis module contains scripts that convert existing Google Slides [presentation](https://docs.google.com/presentation/d/1ecaXVe5qRS3YcphrTK9JVAaD1qNhLDkLhwgZIZTfNzw/edit) into an Angular based presentation.\n\nThe primary purpose is to conditionally display subset of slides based on the requirements.\n\nThe result is available at https:// TDO\n\n## How it works\n\n1. Using Google Slides API fetches list of slides from a presentation with ID 1ecaXVe5qRS3YcphrTK9JVAaD1qNhLDkLhwgZIZTfNzw\n1. Authorization done as described in https://developers.google.com/drive/api/v3/quickstart/nodejs, tokens stored in TODO\n1. Generates JSON slides metadata and thumbnails in /assets/slides\n\n## Running the script\n\nnpm run build:intro\n"
  },
  {
    "path": "libs/intro/generate/generate-thumbnails.ts",
    "content": "import { createWriteStream, existsSync, mkdirSync, outputJSON } from 'fs-extra';\nimport { resolve } from 'path';\nimport fetch from 'node-fetch';\n\nimport { ASSETS_SLIDES_PATH, SLIDES_METADATA_PATH } from './helpers/const';\nimport { getSlides$ } from './helpers/slides';\n\ngetSlides$.subscribe(\n  async (contentUrls: string[]): Promise<void> => {\n    if (!existsSync(ASSETS_SLIDES_PATH)) {\n      mkdirSync(ASSETS_SLIDES_PATH);\n    }\n\n    await Promise.all(\n      contentUrls.map(async (url, i) => {\n        const dest = resolve(ASSETS_SLIDES_PATH, `slide-${i}.png`);\n        const writeStream = createWriteStream(dest);\n        const response = await fetch(url);\n        response.body.pipe(writeStream);\n      })\n    );\n\n    const count = contentUrls.length;\n    await outputJSON(\n      SLIDES_METADATA_PATH,\n      { count, contentUrls },\n      { spaces: 2 }\n    );\n\n    console.log(`🚀 Generated ${count} thumbnails`);\n  }\n);\n"
  },
  {
    "path": "libs/intro/generate/helpers/const.ts",
    "content": "import { resolve } from 'path';\n\nexport const CODELAB_PRESENTATION_ID =\n  '1ecaXVe5qRS3YcphrTK9JVAaD1qNhLDkLhwgZIZTfNzw';\nexport const SCOPE = ['https://www.googleapis.com/auth/presentations.readonly'];\nexport const CREDENTIALS_PATH = resolve(__dirname, '../credentials.json');\nexport const TOKEN_PATH = resolve(__dirname, '../token.json');\nexport const SLIDES_METADATA_PATH = resolve(__dirname, '../slides.json');\nexport const ASSETS_SLIDES_PATH = resolve(__dirname, '../../assets/slides');\n"
  },
  {
    "path": "libs/intro/generate/helpers/slides.ts",
    "content": "import { forkJoin, from, ObservableInput, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { CODELAB_PRESENTATION_ID } from './const';\nimport { gSlides$ } from './utils';\nimport { GSlides } from './types';\n\nconst getSlides = (gSlides: GSlides): ObservableInput<string[]> =>\n  of(gSlides).pipe(\n    switchMap(() =>\n      gSlides.presentations.get({\n        presentationId: CODELAB_PRESENTATION_ID\n      })\n    ),\n    map(response => response.data.slides.map(slide => slide.objectId)),\n    switchMap(objectIds => {\n      const thumbnailRequests: ObservableInput<string>[] = objectIds.map(\n        (pageObjectId: string): ObservableInput<string> =>\n          from(\n            gSlides.presentations.pages.getThumbnail({\n              presentationId: CODELAB_PRESENTATION_ID,\n              pageObjectId\n            })\n          ).pipe(map(response => response.data.contentUrl))\n      );\n      return forkJoin(thumbnailRequests);\n    })\n  );\n\nexport const getSlides$ = gSlides$.pipe(switchMap(getSlides));\n"
  },
  {
    "path": "libs/intro/generate/helpers/types.ts",
    "content": "import { slides_v1 } from 'googleapis/build/src/apis/slides/v1';\n\nexport type GSlides = slides_v1.Slides;\n\nexport interface Credentials {\n  installed: {\n    client_id: string;\n    project_id: string;\n    auth_uri: string;\n    token_uri: string;\n    auth_provider_x509_cert_url: string;\n    client_secret: string;\n    redirect_uris: string[];\n  };\n}\n\nexport interface Token {\n  access_token: string;\n  refresh_token: string;\n  scope: string;\n  token_type: string;\n  expiry_date: number;\n}\n"
  },
  {
    "path": "libs/intro/generate/helpers/utils.ts",
    "content": "import { outputJSON, readJSONSync, existsSync } from 'fs-extra';\nimport { google } from 'googleapis';\nimport { OAuth2Client } from 'googleapis-common';\nimport { createInterface, Interface } from 'readline';\nimport {\n  bindCallback,\n  bindNodeCallback,\n  defer,\n  from,\n  iif,\n  ObservableInput,\n  of\n} from 'rxjs';\nimport { mapTo, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { Credentials, Token } from './types';\nimport { CREDENTIALS_PATH, SCOPE, TOKEN_PATH } from './const';\n\nif (!existsSync(CREDENTIALS_PATH)) {\n  throw new Error(\"credentials.json doesn't exist\");\n}\n\nconst CREDENTIALS: Credentials = readJSONSync(CREDENTIALS_PATH);\nconst { client_id, client_secret, redirect_uris } = CREDENTIALS.installed;\nconst oAuth2Client: OAuth2Client = new google.auth.OAuth2(\n  client_id,\n  client_secret,\n  redirect_uris[0]\n);\nconst isTokenJsonExists = existsSync(TOKEN_PATH);\nconst TOKEN: Token | null = isTokenJsonExists ? readJSONSync(TOKEN_PATH) : null;\n\nconst readline$ = defer(() =>\n  of<Interface>(\n    createInterface({\n      input: process.stdin,\n      output: process.stdout\n    })\n  )\n).pipe(shareReplay(1));\n\nconst getNewToken = (readline: Interface) =>\n  readline$.pipe(\n    tap(() => {\n      const authUrl = oAuth2Client.generateAuthUrl({\n        access_type: 'offline',\n        scope: SCOPE\n      });\n      console.log('Authorize this app by visiting this url:', authUrl);\n    }),\n    switchMap(() =>\n      bindCallback(\n        readline.question.bind(readline, 'Enter the code from that page here: ')\n      )()\n    ),\n    switchMap(\n      (code): ObservableInput<[Token]> =>\n        bindNodeCallback(oAuth2Client.getToken.bind(oAuth2Client))(code)\n    ),\n    switchMap(\n      ([token]): ObservableInput<Token> =>\n        from(outputJSON(TOKEN_PATH, token, { spaces: 2 })).pipe(mapTo(token))\n    ),\n    tap(() => readline.close())\n  );\n\nconst getNewToken$ = readline$.pipe(switchMap(getNewToken));\n\nconst validateToken$ = iif(\n  () => isTokenJsonExists,\n  of(TOKEN),\n  getNewToken$\n).pipe(\n  tap(token => {\n    oAuth2Client.setCredentials(token);\n  })\n);\n\nexport const gSlides$ = of(\n  google.slides({\n    version: 'v1',\n    auth: oAuth2Client\n  })\n).pipe(switchMap(gSlides => validateToken$.pipe(mapTo(gSlides))));\n"
  },
  {
    "path": "libs/intro/generate/slides.json",
    "content": "{\n  \"count\": 30,\n  \"contentUrls\": [\n    \"https://lh3.googleusercontent.com/dZxroMUtUoXIyzzQfzLARGEMiPv7q3zxjE9zcmlXyU4suGll1h5ohTOoP-lunCUaxR8gLPP-oNVrvyIkrrMKs6s1loquKAnrHIU9J4Kl_KQavQMLwDGQ980KMWhQoEtxu9sAux_yW1G9_NkWplM7_kuG8dG7tGB2wqbajra0G9kfmrqIQRRbEZgc8fndACXzFE1Gr0uCp1Er2xRaegaEg8v2URYmlg=s1600\",\n    \"https://lh4.googleusercontent.com/bnHw-_pX69a21SKEKrKMeOAdkFLKqMFVM-OQ48K8qQm5Gxv9QQZSy_LYJrnFchgq15FurKGGxVDrVyS6Nz3t_P7ITU9eenQXeGhI9GQfrIh_TU-F0nTs1eyzD6p3mBSkkIB-plR0qKptFcpYYw_Pg86hQhSDuDEidN771DlwqLk_DZpaXdc_Myx1Og9R7arAe_Bmpv4Y42zpjgiBvZ2h8bBnUZgsBQ=s1600\",\n    \"https://lh6.googleusercontent.com/mRv_DVKOh5OI8MGInWu4IRp7CB8wt30PseXw3KX--R_6AqLmK5yxvFb4i77IHrfmVgE_OoHOb2_cI0fTEP4tEOdtLfeNlm_Ngc4ug220ks6n0s0s2vyrCHeCx6yie_O7L7vwm2YKL8YoGNlXPOZVxYGNAtgDavULhZMBcMP2QXsJyB4Z5RkorM5jZqZ1BPmeq_8TwD5_wq6q9QaZPUbSDhTKa0_X9A=s1600\",\n    \"https://lh3.googleusercontent.com/--eYt2rtt5vjRJyXjdWNu044x9W91AeyqHL2ijcxARSIdDXYB2mIv4deNjQ4b_RtpF3ZCA0-3qUDhaE-Qb1-Ke6gcFLlRJOnkxgRDPOhPC6fANjIEcs5DCV53uXwRuPEIjCq5BcjodogyA2nZOo7NKnhSLOsqkqu78ouJjahMfdm0Y8KvwEwmGQ0EsxxwVn5wm3q0i5GcKV5be-RJhMEXfCAJ2NcCg=s1600\",\n    \"https://lh5.googleusercontent.com/7XwtvU02urDFB7NtzpMwiXSHDSvhtQKNgIAEPvhM5jHUGv_3se71HenTs6SUg6ZFOZmOod5pgPC0-MMNgvu51wO11Y6OwA024eILNRQ20fNhyiDO4g6AyMVzrSFUsLua3XUvd9i-H74uVZ7PwoXbIfgWsFkC6So4hEE3lTcRBqncxVt6D4U9VtxHKDKAYXdIiovtYWoX3y82eUxWyb6nLieiw8a5Zw=s1600\",\n    \"https://lh5.googleusercontent.com/oAhv_nXbLOu2sGh50kfLJ1e8AZuOtHspIiw3yz_Dq_iUDZqWF_Yf-ENHcGST07v5sRiH5II-8GdB83NUJdHSvC5CCoenn1G_zl4-Df2FrEq8jSkbIHjKvjaDmB6AfbLdS6zSUG8PrVKjZzsm47rKLFOS0t7J2NojWQ8Xzv4cFC6pZQtJP4I_Lfcq0iVHT-kk09K40QN1Fo5gsjegoMY7WOLt1BDFmg=s1600\",\n    \"https://lh4.googleusercontent.com/HIs_tTel0jZcMwMB1VUz-1f9OUp7QHUFjLhEr6j6J-9-UPrpz-EUytAFu00FDT-iuXHSIDDpU6iVETsyQa1mfAvY-L_zTuwWVXpLYzM_Q-GTSQE926kF33cClxn1R5B3hPKhEL1QDApNjbB7cNkYbF9WvlLVEasuc7sa1GN2A0HMHfo0x97G3-NStGyBkDLp9Bbv6aSCBnMG_PXnyqmNuxUAl0wD2g=s1600\",\n    \"https://lh4.googleusercontent.com/NReESqvo8GhNOudzBCQy4_-pBHhATsLnm_sVYXA1zQansVvadrXQ6cUUGKKEh8hgOOlV149J9vgjpqjO1y7yiTJ9pNh1KX7s0lrEdidcepjNV0MUy00OoVPx0_EB6ML2iqCnhdkYtShP5SWFftKvkL72A7HYqXmgi4_bzBy2fRKJqwD9xfezU5gVy3qCT8dlPhiMnskLQkjMgXRIFkbyiQ-yuNgdZw=s1600\",\n    \"https://lh3.googleusercontent.com/ZnoJa-b8SLmRTCKkKitQxf5lOnVFdSiBEFxzUZENMpehbkpnKoONHdGJyGIRuLMrkdeB0xUOaWtuQOxcE-rjYHFyC4sJlxnjdOYeZt8mMAk8kxDZKIdD6vTqrTlDn6E3nHkT-GqfVa7MBRcgaTJ-ipot6o-h7m2zVvUuxzkWSuXXGc8C_Wye4ykTYTJuYfrzeaazNy40kA2QfbFrRhaup8i-aegSWQ=s1600\",\n    \"https://lh3.googleusercontent.com/AhFIsujJel-IDJ42pIV9wBZseeMMPOXXBWkqXlvPrl0A8qJkMcqJ37ttTqiu3fyiRGLyGvJxTBVihM8AkiyD20wISl23G6JUoSkxOQR5cv2hfg57fkYq2gj2xtHsaedV4X1cPoig4n7xic5duSOQ0hrTlBoeDrokaNd7DABnftTUzOdEklgtJW7WcJoPMj2hl_pt2tXuDsq7ftB4R0qjzo7jjjFR3A=s1600\",\n    \"https://lh6.googleusercontent.com/ctRjv_yU4l61oxFkND9qW7wybjY_ZkH0XAlaOsmK50VRAAjHTXJ3nsD_SqB9Ih6DYWMwBnZnVnUXI-lMkOsZZvL0wypU0_uCEPJX_Cn4pbuJ3xxOdo3YGWN4vf9-7zztYe6KVxxXAJ3OYWdNUc-NdlLSWHg8sduhpko6J0lW3DQEzt1vQ-nMrUwBCZ8LB8KLJqccb02HC2552q6FrhXtIFDZAaKfMg=s1600\",\n    \"https://lh4.googleusercontent.com/6k9w0TxpR1v_OhZ8Ulgup7m0vb7jH6AmUhBeWuvGagyqNPpjElMv3XnLhwqn1Qv0CpdFNirpNS5XSHQKw25dhpcacHTxWDocq9mNVTvk03-eKka_bt1fns9RlJ1iy0XU0KSMMIXkavo3MM6bFmmM5NES-3nhSzzEtVvbxEHoMWfzrgZiUk5Jn8V67iHhooAgVXDAZlB4EV9qiZ7_bPEkf7EKYuDgcg=s1600\",\n    \"https://lh4.googleusercontent.com/YVkDmp9JIfOtMpwzYy0Tm9Ae1l0apW8p0zOhlhF9MZc_vP8s38zC-Fu_2PICycKX4N27CQcTAgAEUkN8PNraYC6pk6ECdoByG3akiztQ1ZC0DLH-V0nQRK88qNtLK_kL-siVIAOvUkbLM3WkXQEaJ_V_uM3TUlke4av6gYAVtv0jOnrfKrz7MCfMqeldpZNX4T_uLx8pJC1h5SFazRQGEIDlixIkiQ=s1600\",\n    \"https://lh5.googleusercontent.com/O6ZBdu12JixR_ntUgxzZxj7Ql72laYnQFIoaGLk-uvw8ff6yiFGIvoa2xvLy3BBIfugWkCnXowUZzryB4P6VnFZbLswBhEZvF2GS5yN36hIMiZIl8wHQF-O8KEpVtvVCk7vhzhYh3xpzqr7hljA1cOKVvpIFHLSZsjWrELNrCsTRE8hmfIiI-BKThaaFd_M8NA8jFSx6AIf9raSgX_rJuiBy-m0fmA=s1600\",\n    \"https://lh3.googleusercontent.com/afWNZoZlC4Vgiu1m1IEMm69aIo8zTu9uq8bB2Q2mvmFW6yV_AfbOuzRE3F82Wd0NWfmYfIaBvJYNm53GWZXh7CekWp56-5tMzqZsSmnUo0dzSFytlSvop4_4brXD05yF6-C3SpEIoFgTbll6W9IvGfYBs5K1A_0eR-FNQSU0tpTyJhvBBEiSOJ0_qaEaz0IaYCGFsS9y6rq77d1LM5fdPCbhdbVn-w=s1600\",\n    \"https://lh4.googleusercontent.com/jPPknOyMAbqY7smSVB9mCIJZMjNn29MhrZuKZ5RRQm3VxCmWt8TbXXhq8X5Q6hePpG_703GMzIopB6sGht1WykLwAmmE8rxVLlqA5JZPfVGxAtHUJR2f2MjK3O1XNO9_fFrfttdqo_LCYO4Dne_2shLTlwHMOTwrc0eauEdgKwcB5GzBJaU4PPG2IMpjI8Btatn3AHMDx_4yishVq6P8MHfn0aL_LA=s1600\",\n    \"https://lh6.googleusercontent.com/aa6dOC9j0TyGTJjPCMIeov6VL2Bf544__rCf33Opmmip2ix-fjA5UZdxUbQVu9DU__thd84BGuKpdG6nS9yCaTgG5_CulcVj5WA9GahhaUXvD_NUUmvMNx4XPoEevYfDaNElCDz1rVryA2UkHYNe_bgf8h3J_P6eeaaCggQB4IORchXfLp1F2chJ_J7sG9M04fLnEm0QSkPqdD8Is0SlJ8ssmQvUcw=s1600\",\n    \"https://lh3.googleusercontent.com/V8_AkBbUqS8MgLgP0ic98Yap_7umSPGUDZU-I1AN5kA-_ZD3yMAiH5bKuEi2nNefwtGRw6vMEHFw_GcS8VouCl2rjQURLVyCUvhaarKaFOG7D-oHulDJTlvPIpL_QxTIMAiG4ORV1ZmoFC6Dyh2jrChGvkqUqPDWFi0waNs-ORiS4aClh92Q4KLClNPTk4XE5hTqK7twvRYQByvzmQTl9ijJQzOS4Q=s1600\",\n    \"https://lh3.googleusercontent.com/AoPAoID21J1vb1cMlTIEkM712jH3o_wbzFMqQ6IkYdCMz1uZoVjwST3fuqj8KUdSJ2_ip343XSxPpuWm6qwRm2lWrzjwLVaU6uyHGDzbbdf3RA3ROpjPaQD24v98-656Asn-vZnBUnDKtHAcrpzx6dW-29bCYs_WXbVWP7epzPl9fT9v-XkG1wcS91nFvkE8K5HUUv89Z0foQGGMjhjx5vXh6y3QKQ=s1600\",\n    \"https://lh6.googleusercontent.com/vhvXAZQVXBMhSGagweeHpnkLdJcIJZ53oEfgiMyJkVq_PI93CBuaw6dkmV-yM6bFCTFoIdAkPJ37SUJMku8gotSJdgJQc9qK5Y15GOZ2qVgiQrx0kMH6y31nK3JXRbBM5wwJYnkPvu93PALBxGU0VMTbktaRoAYtsKiWXSeA3GyKMlUqrCRFgsMMUwx6LXCCAOzGaVpT3XuAE-jzMZ8tei5veVFAYA=s1600\",\n    \"https://lh6.googleusercontent.com/Tbb3JkURK5Dm0Sqqf5u8C2R_gNBQUN5bsgquLyOB87dveVYqQjDuxjdIFha3G6wIk7XtwuzjqxdWKJeZ9wWi0exStOABTeYAxElt9PZOV6JjpIf-8QHZEgMiAGggEsm-DM2YZ2jIuD91r_G5rW9hcep_EDnYBnUx5k-nmqmodDRstz7LgziOMrK_PLH197Nh3D73lsqbf3E87QLNJdHX594qeTkQ8g=s1600\",\n    \"https://lh4.googleusercontent.com/h5kSCoSShR4KLU6NOoHKInb2nozG1q8hHC2WA7DueDi_V814UCXK-AgGme367nngMRo5bA1rFbWnPOEuoAYv0kYRLgfFVoafaxjsOzAgeD-O8ohzh7DA0s6-fl9-zaoOXuC27UKBKnoQctUfXcDGKId8RLynxdy67LUhD3FfJ2Fx3eIQEk1nuC3YtSYeWUO0vK2SmABVtOi3LdzUlf-rYSGOjWPObA=s1600\",\n    \"https://lh6.googleusercontent.com/H7QJqVte_rVfIFVJjQrawaX3i7CNhPCdn1MySL2yBEMlM6AWONsf1xR6Bzo3nFm5RpnVN8AsvK7dihwnPdrkRruljvGG5CGhiXmdqK62MPFGu16X1OLYPEvG-Mu4O2Q_ewLuKWLGo9fpZy8kPo11PFBp8ZoWLQ8Ix5YIImSKxUQWcTbJnlV40Hy98wG9oRQCyUpRIvte-0X8FUXpPxzdBDEPWt2xog=s1600\",\n    \"https://lh5.googleusercontent.com/pUy3TLs6-liKbbfodUKsBfwYmbjODrRmd6fDtK9dFJqs_gPZRnUdrX7lbeuGF1Ziy5dg9l8B0B4QSkQ2DSBd_DB5Za_EFx17eeeyzwzAKkF3932KBltU_RecCT98SaIXltVnKMmvI6o2ARS7zPgiXlH-5NOJ3Za5WyK3jvlCCwv_B9EM6Td82M5YjkvbNtpVvS2280h9SsojFqFu8IXFF0WaVvUZGg=s1600\",\n    \"https://lh6.googleusercontent.com/h8hzVc_OhKnJfqM0i1cm98oCygCDSQBwhQkiseTPvD9caWJkYCHlFHs8q2C5rACiGuuZt1jv2tD5kgWtX62HNxlcN9iZ4HEdXhMuD-OM0rEBEAu7DTgAtcoodgQMweGcvdQ63E_wjbbgSoT4jENrIBpiF3SinuImpfFTSys55WL2XKSA59KUFGegcSAOh69FUSToAwFfV1YVHQiJEpKtqL4v735DXA=s1600\",\n    \"https://lh5.googleusercontent.com/4kg7ZQPi1a3XvDq2N_-4nsZGtPe5iU79qwTzBdQ1PyyMK6PcMVQ1zxBk-EHPlj2bcW9g6tQ2I_WE-KTh4cRn9xvYHccTndxif2stLcq-PYyKrmWa25wzBAoXHp_4EweyAeMZqffOcEGhJnhFw_Up1Xho-JdohhlJ3k9H_dsiQeCiurPiPXlJQMUhwToaLj7yoOIEjr60tn6R2TXOfsqNmXWTw62v6Q=s1600\",\n    \"https://lh6.googleusercontent.com/FV388iZIxGLHOo8g5Eyx-eKWOnv_E7swNDERMJOw4GeOuU2RO51aQ4uvAvgof1kklTEB2y2M_SMgGYv_EG7uv64dUdmz_LjnkTPELY3vHeVwmch9G8u90g2jpg9RTAuhoAFSSWczwd1TpjDK-y7he_bW0CINfVYu8S8rKaQtVXNO0_i2n5TZaf9u4sY1B7n6hIc7yMn9sTPmaRIFz_ldYOLWRN5kvQ=s1600\",\n    \"https://lh5.googleusercontent.com/ev4yR29jzJp4ltwDqRdVH8Fv22mFygdL2xoti8I3HAoRZSrYUyia_tKajgjK25LI-wQOZdPcMm2u0vNxOtq4x574kHDBKjtgvcuPEAZNOurQR06C5rSNumg6Qn_7TqXWxmbwxoCFv_tAOa1MNbYLZ3Kh8IqhgNj-mAkjEbGlyZAEfygynILG66Vot7EoGQvUJPQpZjH7AYqozuWvvlcssSw73tNbMw=s1600\",\n    \"https://lh5.googleusercontent.com/Kv_gRVwP8cRRBXl5-X_oKPD2q99hAmZo5T5pK8HAj1uIzAGv8K0kWhFddweYdCwbU3XRGC6RnB9ESRE2EFRklshaj2Fl3AZczu1X_zx3rsparIdvYH3IQxWjuysbvXKGmf_k_8clR_7H1okuJGLZhupTC71e3Ukssb8BR-9qM7wC2hviFR7l3CNLfuEg9hD63G7-4syac72C_XL8AORnjJkteGl6sg=s1600\",\n    \"https://lh6.googleusercontent.com/04n0oi2J281sD61sM4SR_y0S-e1MEhMdWwMMoO1x1rWUuGHd9G1qr1WdEb8l_lqUxUdhWMTzL-r8U2EAJaoE9EVUHdQDIGj_tb_KVob95NCY9URIi1bnrlEy7K33t4n79sifps5JXoXcROdH8A0SL1TMyNv0JbXOgt9hMff_H5sFeSNFzqN521SaNMO9M_iiVVy1uAHnE_JLMx_20JnAfMx5yr1zAQ=s1600\"\n  ]\n}\n"
  },
  {
    "path": "libs/intro/generate/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./dist/out-tsc\",\n    \"baseUrl\": \".\",\n    \"sourceMap\": true,\n    \"declaration\": false,\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"target\": \"es2017\",\n    \"inlineSources\": true,\n    \"allowJs\": true,\n    \"importHelpers\": true,\n    \"resolveJsonModule\": true,\n    \"types\": [\"node\"],\n    \"lib\": [\"dom\", \"esnext.array\"]\n  }\n}\n"
  },
  {
    "path": "libs/intro/jest.config.js",
    "content": "module.exports = {\n  name: 'intro',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/libs/intro',\n  snapshotSerializers: [\n    'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',\n    'jest-preset-angular/build/AngularSnapshotSerializer.js',\n    'jest-preset-angular/build/HTMLCommentSerializer.js'\n  ]\n};\n"
  },
  {
    "path": "libs/intro/package.json",
    "content": "{\n  \"name\": \"@codelab/intro\",\n  \"version\": \"0.1.0\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^9.0.0\",\n    \"@angular/core\": \"^9.0.0\"\n  }\n}\n"
  },
  {
    "path": "libs/intro/src/index.ts",
    "content": "export { IntroModule } from './lib/intro.module';\n"
  },
  {
    "path": "libs/intro/src/lib/intro.component.css",
    "content": ".image {\n  margin: auto;\n  height: 100%;\n}\n"
  },
  {
    "path": "libs/intro/src/lib/intro.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting>\n  <!--  <codelab-progress-bar></codelab-progress-bar>-->\n  <slide-arrows></slide-arrows>\n\n  <!--  <div *slide id=\"start\" no-padding>-->\n  <!--    <codelab-title-slide-->\n  <!--      title=\"Introduction to Codelab\"-->\n  <!--      i18n-title=\"@@Introduction\"-->\n  <!--      description=\"Now let's talk about what Angular is and what awaits you on the Codelab platform.\"-->\n  <!--      i18n-description-->\n  <!--    ></codelab-title-slide>-->\n  <!--    TITLE SLIDE-->\n  <!--  </div>-->\n\n  <div *ngFor=\"let slide of presentation\">\n    <div *slide milestone=\"Intro\">\n      <img\n        class=\"image\"\n        src=\"/assets/intro/slides/slide-{{ slide }}.png\"\n        alt=\"slide number {{ slide }}\"\n      />\n    </div>\n  </div>\n\n  <!--  <ng-container *ngIf=\"presentation.length > 0\">-->\n  <!--    <div *slide id=\"end\">-->\n  <!--      <codelab-closing-slide>-->\n  <!--        <div class=\"header\" header>-->\n  <!--          <codelab-breadcrumb i18n>End of Introduction</codelab-breadcrumb>-->\n  <!--        </div>-->\n  <!--        <div class=\"footer\" footer>-->\n  <!--          <h2>-->\n  <!--            <ng-container i18n>Next:</ng-container>-->\n  <!--            <a routerLink=\"../../create-first-app/0\" i18n>-->\n  <!--              Go to the Create First App milestone-->\n  <!--            </a>-->\n  <!--          </h2>-->\n  <!--        </div>-->\n  <!--      </codelab-closing-slide>-->\n  <!--      CLOSING SLIDE-->\n  <!--    </div>-->\n  <!--  </ng-container>-->\n</slide-deck>\n"
  },
  {
    "path": "libs/intro/src/lib/intro.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport { count } from '../../generate/slides.json';\n\n@Component({\n  selector: 'codelab-slides-intro',\n  templateUrl: './intro.component.html',\n  styleUrls: ['./intro.component.css']\n})\nexport class IntroComponent implements OnInit {\n  public presentation: number[];\n\n  public ngOnInit(): void {\n    this.presentation = Array.from({ length: count }, (_, i) => i);\n  }\n}\n"
  },
  {
    "path": "libs/intro/src/lib/intro.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SlidesModule, SlidesRoutes } from '@ng360/slides';\nimport { FeedbackModule } from '@codelab/feedback';\nimport { CommonModule } from '@angular/common';\nimport { BrowserWindowModule } from '@codelab/browser';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FormsModule } from '@angular/forms';\nimport { IntroComponent } from './intro.component';\n\n@NgModule({\n  imports: [\n    RouterModule.forChild([...SlidesRoutes.get(IntroComponent)]),\n    FeedbackModule,\n    CommonModule,\n    CodeDemoModule,\n    BrowserWindowModule,\n    CodeDemoModule,\n    SlidesModule,\n    FormsModule\n  ],\n  declarations: [IntroComponent],\n  exports: [IntroComponent]\n})\nexport class IntroModule {}\n"
  },
  {
    "path": "libs/intro/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "libs/intro/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "libs/intro/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"declaration\": true,\n    \"inlineSources\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test-setup.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/intro/tsconfig.lib.prod.json",
    "content": "{\n  \"extends\": \"./tsconfig.lib.json\",\n  \"angularCompilerOptions\": {\n    \"enableIvy\": true\n  }\n}\n"
  },
  {
    "path": "libs/intro/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/intro/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/live/README.md",
    "content": "# Live\n\nThis library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.\n\n## Code scaffolding\n\nRun `ng generate component component-name --project live` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project live`.\n\n> Note: Don't forget to add `--project live` or else it will be added to the default project in your `angular.json` file.\n\n## Build\n\nRun `ng build live` to build the project. The build artifacts will be stored in the `dist/` directory.\n\n## Publishing\n\nAfter building your library with `ng build live`, go to the dist folder `cd dist/live` and run `npm publish`.\n\n## Running unit tests\n\nRun `ng test live` to execute the unit tests via [Karma](https://karma-runner.github.io).\n\n## Further help\n\nTo get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).\n"
  },
  {
    "path": "libs/live/jest.config.js",
    "content": "module.exports = {\n  name: 'live',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/libs/live'\n};\n"
  },
  {
    "path": "libs/live/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/live\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/live/package.json",
    "content": "{\n  \"name\": \"@angular-presentation/live\",\n  \"version\": \"0.0.1\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^7.2.0\",\n    \"@angular/core\": \"^7.2.0\"\n  }\n}\n"
  },
  {
    "path": "libs/live/src/index.ts",
    "content": "export * from './lib/live-service.service';\n"
  },
  {
    "path": "libs/live/src/lib/live-service.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { LiveServiceService } from './live-service.service';\n\ndescribe('LiveServiceService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: LiveServiceService = TestBed.inject(LiveServiceService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/live/src/lib/live-service.service.ts",
    "content": "import { Injectable, Input } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LiveServiceService {\n  @Input() user = 'pikachu';\n  @Input() host = 'pirojok';\n  @Input() session = 'live-share';\n  @Input() bucket = 'config';\n\n  constructor() {}\n}\n"
  },
  {
    "path": "libs/live/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "libs/live/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/live/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/live/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [\n      true,\n      \"attribute\",\n      \"angular-presentation\",\n      \"camelCase\"\n    ],\n    \"component-selector\": [\n      true,\n      \"element\",\n      \"angular-presentation\",\n      \"kebab-case\"\n    ]\n  }\n}\n"
  },
  {
    "path": "libs/slides/README.md",
    "content": "# Angular Slides\n\nTODO\n\n## How it works\n\nTODO\n"
  },
  {
    "path": "libs/slides/jest.config.js",
    "content": "module.exports = {\n  name: 'slides',\n  preset: '../../jest.config.js',\n  coverageDirectory: '../../coverage/libs/slides',\n  snapshotSerializers: [\n    'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',\n    'jest-preset-angular/build/AngularSnapshotSerializer.js',\n    'jest-preset-angular/build/HTMLCommentSerializer.js'\n  ]\n};\n"
  },
  {
    "path": "libs/slides/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/libs/slides\",\n  \"lib\": {\n    \"entryFile\": \"src/index.ts\"\n  }\n}\n"
  },
  {
    "path": "libs/slides/package.json",
    "content": "{\n  \"name\": \"@ng360/slides\",\n  \"description\": \"Presentation creator for Angular\",\n  \"version\": \"0.2.0\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/codelab-fun/codelab.git\"\n  },\n  \"homepage\": \"https://github.com/codelab-fun/codelab/tree/master/libs/slides#readme\",\n  \"bugs\": \"https://github.com/codelab-fun/codelab/issues\",\n  \"license\": \"MIT\",\n  \"peerDependencies\": {\n    \"@angular/common\": \"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0\",\n    \"@angular/core\": \"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0\",\n    \"@angular/router\": \"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0\",\n    \"tslib\": \"^1.10.0\"\n  },\n  \"keywords\": [\n    \"angular\",\n    \"slides\",\n    \"presentation\",\n    \"ng360\",\n    \"codelab\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/index.ts",
    "content": "export { FullScreenModeService } from './lib/full-screen-mode';\nexport { SlidesDeckComponent } from './lib/deck/deck.component';\nexport { SlidesRoutes } from './lib/routing/slide-routes';\nexport { SlidesModule } from './lib/slides.module';\n"
  },
  {
    "path": "libs/slides/src/lib/arrows/slides-arrows.component.css",
    "content": ".arrow-left {\n  border-top-right-radius: 40%;\n  border-bottom-right-radius: 40%;\n  left: 0;\n  text-align: right;\n}\n\n.arrow-right {\n  border-top-left-radius: 40%;\n  border-bottom-left-radius: 40%;\n  right: 0;\n  text-align: left;\n}\n\n.arrow:hover,\n.arrow:focus {\n  opacity: 0.5;\n}\n\n.arrow-left,\n.arrow-right {\n  top: calc(44.7% - 6vh / 2);\n  position: fixed;\n  font-size: 6vh;\n  z-index: 100;\n  padding: 20px 5px;\n  background: #ddd;\n  cursor: pointer;\n  line-height: 12vh;\n  opacity: 0.1;\n}\n"
  },
  {
    "path": "libs/slides/src/lib/arrows/slides-arrows.component.html",
    "content": "<button\n  aria-label=\"Previous slide\"\n  *ngIf=\"canGoPrevious()\"\n  class=\"arrow-left arrow\"\n  (click)=\"goToPreviousSlide()\"\n>\n  ◀\n</button>\n<button\n  *ngIf=\"canGoNext()\"\n  i18n-aria-label\n  aria-label=\"Next slide\"\n  class=\"arrow-right arrow\"\n  (click)=\"goToNextSlide()\"\n>\n  ▶\n</button>\n"
  },
  {
    "path": "libs/slides/src/lib/arrows/slides-arrows.component.ts",
    "content": "import { Component, HostBinding } from '@angular/core';\nimport { SlidesDeckComponent } from '../deck/deck.component';\n\n/**\n * Slide arrows are used by slides deck for navigation.\n */\n@Component({\n  selector: 'slide-arrows',\n  templateUrl: './slides-arrows.component.html',\n  styleUrls: ['./slides-arrows.component.css']\n})\nexport class SlidesArrowsComponent {\n  /**\n   * '.shortcuts-context' class is used by shortcuts\n   * directive to distinguish slide navigation keyboard events\n   * from editable field keyboard navigation.\n   */\n  @HostBinding('class.shortcuts-context') context = true;\n\n  constructor(private presentation: SlidesDeckComponent) {}\n\n  goToPreviousSlide() {\n    this.presentation.previousSlide();\n  }\n\n  goToNextSlide() {\n    this.presentation.nextSlide();\n  }\n\n  canGoNext(): boolean {\n    return this.presentation.canGoNext();\n  }\n\n  canGoPrevious(): boolean {\n    return this.presentation.canGoPrevious();\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/deck/deck.component.html",
    "content": "<ng-content></ng-content>\n<div class=\"slide theme-{{ theme }} slides-layout\">\n  <template [ngTemplateOutlet]=\"slides[activeSlideIndex]?.template\"></template>\n</div>\n"
  },
  {
    "path": "libs/slides/src/lib/deck/deck.component.scss",
    "content": "::ng-deep {\n  .has-milestone .btn-bar {\n    display: none;\n  }\n}\n\n:host {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n  position: relative;\n}\n\n:host ::ng-deep {\n  .slide.slide [vertical-split],\n  [vertical-split] .slide.slide {\n    display: flex;\n    flex-direction: row;\n\n    > *:first-child {\n      width: 49vw;\n      margin-right: 1vw;\n    }\n\n    > *:nth-child(2) {\n      width: 49vw;\n      margin-left: 1vw;\n    }\n  }\n\n  .theme-basic {\n    font-family: 'Helvetica Neue', sans-serif;\n\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    li:not(.action-item) {\n      margin: 0;\n      padding: 0;\n      font-weight: 300;\n    }\n\n    b {\n      color: #c04e22;\n      font-weight: 300;\n      background-color: #ffe;\n    }\n\n    h2,\n    li:not(.action-item) {\n      font-size: 3vw;\n      margin-bottom: 1vw;\n    }\n\n    h1 {\n      margin-bottom: 20px;\n    }\n\n    .info,\n    .exercise {\n      font-size: 2vw;\n    }\n\n    .header {\n      font-size: 7vw;\n    }\n\n    .description {\n      font-size: 3vw;\n    }\n\n    .instructions {\n      font-size: 2vw;\n    }\n  }\n\n  [vertical-flex-layout] {\n    display: flex;\n    flex-direction: column;\n\n    [stretch] {\n    }\n  }\n\n  .slides-layout {\n    height: 100%;\n\n    //TODO(kirjs): find a better way to assign a class name\n    & > div {\n      height: 100%;\n      padding: 2vw;\n      box-sizing: border-box;\n      display: flex;\n      flex-direction: column;\n      position: relative;\n\n      &[no-padding] {\n        padding: 0;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/deck/deck.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { SlidesModule } from '../slides.module';\nimport { SlidesDeckComponent } from '../deck/deck.component';\n\ndescribe('Deck', () => {\n  let component: SlidesDeckComponent;\n  let fixture: ComponentFixture<SlidesDeckComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SlidesModule]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SlidesDeckComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/slides/src/lib/deck/deck.component.ts",
    "content": "import {\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Optional,\n  Output,\n  QueryList,\n  TemplateRef\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n  selector: 'slide-deck',\n  templateUrl: './deck.component.html',\n  styleUrls: ['./deck.component.scss']\n})\nexport class SlidesDeckComponent {\n  slides: any[] = [];\n  @Input() theme = 'basic';\n  @ContentChildren(TemplateRef) templates: QueryList<TemplateRef<any>>;\n  activeSlideIndex = 0;\n  @Output() slideChange = new EventEmitter<number>();\n  @Output() slideAdded = new EventEmitter<{ index: number; id: string }>();\n  @HostBinding('class.has-milestone') hasMilestone = false;\n  private milestone = '';\n\n  constructor(\n    private readonly cdr: ChangeDetectorRef,\n    @Optional() private readonly route: ActivatedRoute\n  ) {\n    if (route) {\n      this.milestone = route.snapshot.queryParams.milestone;\n      this.hasMilestone = !!this.milestone;\n    }\n  }\n\n  addSlide(slide) {\n    if (!this.milestone || this.milestone === slide.milestone) {\n      this.slides.push(slide);\n    }\n  }\n\n  goToSlide(index: number) {\n    this.activeSlideIndex = index;\n    this.slideChange.emit(index);\n    this.cdr.markForCheck();\n  }\n\n  nextSlide() {\n    this.goToSlide(this.activeSlideIndex + 1);\n  }\n\n  previousSlide() {\n    this.goToSlide(this.activeSlideIndex - 1);\n  }\n\n  canGoNext(): boolean {\n    return this.activeSlideIndex + 1 < this.slides.length;\n  }\n\n  canGoPrevious(): boolean {\n    return this.activeSlideIndex > 0;\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/full-screen-mode/full-screen-mode.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { FullScreenModeService } from './full-screen-mode.service';\n\ndescribe('FullScreenModeService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: FullScreenModeService = TestBed.inject(\n      FullScreenModeService\n    );\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/slides/src/lib/full-screen-mode/full-screen-mode.service.ts",
    "content": "import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FullScreenModeService {\n  constructor() {}\n\n  toggleFullScreen() {\n    // check if page is in fullscreen\n    if (document['fullscreenElement']) {\n      document.exitFullscreen();\n    } else {\n      document.documentElement.requestFullscreen();\n    }\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/full-screen-mode/index.ts",
    "content": "export * from './full-screen-mode.service';\n"
  },
  {
    "path": "libs/slides/src/lib/routing/slide-routes.ts",
    "content": "export class SlidesRoutes {\n  static get(Component: any) {\n    return [\n      { path: '', redirectTo: '0', pathMatch: 'full' },\n      { path: ':id', component: Component },\n      { path: '**', component: Component }\n    ];\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/routing/slides-routing.directive.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { SlidesDeckComponent } from '../deck/deck.component';\nimport { SlidesRoutingDirective } from './slides-routing.directive';\nimport { EventEmitter } from '@angular/core';\n\ndescribe('SlidesRoutingDirective', () => {\n  let directive: SlidesRoutingDirective;\n\n  beforeEach(() => {\n    const activatedRouteStub = { snapshot: { params: {} } };\n\n    const routerStub = {\n      navigate: () => ({}),\n      events: { pipe: () => ({ subscribe: () => ({}) }) }\n    };\n\n    const slidesDeckComponentStub = {\n      slides: [{ id: 1 }, { id: 2 }],\n      goToSlide(n: number) {\n        this.activeSlideIndex = n;\n        this.slideChange.emit(n);\n      },\n      slideChange: new EventEmitter<number>(),\n      activeSlideIndex: 0\n    };\n\n    TestBed.configureTestingModule({\n      providers: [\n        SlidesRoutingDirective,\n        { provide: ActivatedRoute, useValue: activatedRouteStub },\n        { provide: Router, useValue: routerStub },\n        { provide: SlidesDeckComponent, useValue: slidesDeckComponentStub }\n      ]\n    });\n    directive = TestBed.inject(SlidesRoutingDirective);\n  });\n\n  it('can load instance', () => {\n    expect(directive).toBeTruthy();\n  });\n\n  xit('should call navigate on slideChange event', () => {\n    const slidesDeckComponentStub: SlidesDeckComponent = TestBed.inject(\n      SlidesDeckComponent\n    );\n\n    spyOn(directive, 'getId');\n    slidesDeckComponentStub.slideChange.emit(10);\n    // window.dispatchEvent(new Event('slideChange'));\n    expect(directive.getId).toHaveBeenCalledTimes(1);\n    expect(directive.getId).toHaveBeenCalledWith(10);\n  });\n\n  describe('ngOnInit', () => {\n    it('makes expected calls', () => {\n      const slidesDeckComponentStub: SlidesDeckComponent = TestBed.inject(\n        SlidesDeckComponent\n      );\n      spyOn(slidesDeckComponentStub, 'goToSlide');\n      directive.ngOnInit();\n      expect(slidesDeckComponentStub.goToSlide).toHaveBeenCalled();\n    });\n  });\n\n  describe('getId', () => {\n    it('should return the id prop of the slide at the given index', () => {\n      const slidesDeckComponentStub: SlidesDeckComponent = TestBed.inject(\n        SlidesDeckComponent\n      );\n\n      slidesDeckComponentStub.slides = [\n        { id: 'typescript' },\n        { id: 'javascript' }\n      ];\n\n      slidesDeckComponentStub.slides.forEach((slide, index, arr) => {\n        const retrievedId = directive.getId(index);\n        expect(retrievedId).toBe(slide.id);\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "libs/slides/src/lib/routing/slides-routing.directive.ts",
    "content": "import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport {\n  Directive,\n  EventEmitter,\n  HostListener,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { SlidesDeckComponent } from '../deck/deck.component';\n\n@Directive({\n  // tslint:disable-next-line:all TODO: Fix linter warnings on the selector and delete this comment.\n  selector: '[slidesRouting]'\n})\nexport class SlidesRoutingDirective implements OnInit, OnDestroy {\n  activeSlideId: string;\n  @Output() change = new EventEmitter();\n\n  private ids: { [index: number]: string } = {};\n\n  private ngUnsubscribe$ = new Subject();\n\n  constructor(\n    private router: Router,\n    private route: ActivatedRoute,\n    private deck: SlidesDeckComponent\n  ) {\n    this.handleBackButtonSlideIndexSync();\n  }\n\n  @HostListener('slideChange', ['$event']) slideChange(index) {\n    this.navigate(this.getId(index));\n  }\n\n  ngOnInit() {\n    const index2 = this.getIndexFromRouteParam();\n    this.deck.goToSlide(isNaN(index2) ? 0 : index2);\n  }\n\n  ngOnDestroy(): void {\n    this.ngUnsubscribe$.next();\n    this.ngUnsubscribe$.complete();\n  }\n\n  getId(index: number) {\n    return this.deck.slides &&\n      this.deck.slides[index] &&\n      this.deck.slides[index].id\n      ? this.deck.slides[index].id\n      : index;\n  }\n\n  navigate(url: string) {\n    this.router.navigate(['../' + url], {\n      relativeTo: this.route,\n      queryParamsHandling: 'merge'\n    });\n  }\n\n  getIndexFromRouteParam() {\n    const id: string = this.route.snapshot.params['id'];\n    const index = this.deck.slides.findIndex(s => s.id === id);\n    // TODO(kirjs): Clean this up\n    return Number(index === -1 ? id : index);\n  }\n\n  /**\n   * This is to ensure that the activeSlideIndex of the deck\n   * is always reflective of the router's path for the slide.\n   *\n   * The {@link SlidesDeckComponent} component changes slides only\n   * when the methods to change slide are called. However, this is\n   * only true when {@link SlidesArrowsComponent} invokes it. We\n   * therefore have an issue when the user uses the browser's back\n   * button behavior, which the deck and the arrow does not handle.\n   */\n  private handleBackButtonSlideIndexSync() {\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationEnd),\n        map(() => this.getIndexFromRouteParam()),\n        distinctUntilChanged(),\n        takeUntil(this.ngUnsubscribe$)\n      )\n      .subscribe(slide => {\n        this.deck.goToSlide(slide);\n      });\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/shortcuts/shortcuts.directive.spec.ts",
    "content": "import { ShortcutsDirective } from './shortcuts.directive';\n\ndescribe('ShortcutsDirective', () => {\n  it('should create an instance', () => {\n    // TODO: Write this test.\n    // const directive = new ShortcutsDirective();\n    // expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/slides/src/lib/shortcuts/shortcuts.directive.ts",
    "content": "import { Directive, HostListener, Optional } from '@angular/core';\nimport { FullScreenModeService } from '../full-screen-mode';\nimport { SlidesDeckComponent } from '../deck/deck.component';\n\n@Directive({\n  selector: '[slideShortcuts]'\n})\nexport class ShortcutsDirective {\n  constructor(\n    @Optional() private deck: SlidesDeckComponent,\n    private fullScreenService: FullScreenModeService\n  ) {}\n\n  @HostListener('window:keydown.ArrowRight', ['$event.target'])\n  @HostListener('window:keydown.PageDown', ['$event.target'])\n  next(target) {\n    if (this.canNavigate(target) && this.deck.canGoNext()) {\n      this.deck.nextSlide();\n    }\n  }\n\n  @HostListener('window:keydown.ArrowLeft', ['$event.target'])\n  @HostListener('window:keydown.PageUp', ['$event.target'])\n  previous(target) {\n    if (this.canNavigate(target) && this.deck.canGoPrevious()) {\n      this.deck.previousSlide();\n    }\n  }\n\n  @HostListener('window:keydown.alt.enter', ['$event'])\n  fullScreenModeToggle(e) {\n    // prevent page reload\n    e.preventDefault();\n\n    this.fullScreenService.toggleFullScreen();\n  }\n\n  private canNavigate(target: HTMLElement) {\n    return target === document.body || this.isFromContext(target);\n  }\n\n  /**\n   * Limit keyboard shortcut events to scoped containers\n   * to prevent slide navigation when using keyboard arrows to\n   * navigate an editable field like code editor.\n   * Add '.shortcuts-context' to any component or container containig\n   * focusable elements used for slide navigation.\n   */\n  private isFromContext(target: HTMLElement) {\n    let parent = target;\n\n    while (parent) {\n      if (parent.classList.contains('shortcuts-context')) {\n        return true;\n      }\n      parent = parent.parentElement;\n    }\n\n    return false;\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/slide/slide.directive.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { SlidesModule } from '../slides.module';\nimport { SlidesDeckComponent } from '../deck/deck.component';\nimport { SlideDirective } from './slide.directive';\n\ndescribe('SlideDirective', () => {\n  let fixture: ComponentFixture<SlidesDeckComponent>;\n  let directive: SlidesDeckComponent;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SlidesModule]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SlidesDeckComponent);\n    directive = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create an instance', () => {\n    expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/slides/src/lib/slide/slide.directive.ts",
    "content": "import { Directive, Input, TemplateRef } from '@angular/core';\nimport { SlidesDeckComponent } from '../deck/deck.component';\n\nconst ID_ATTR_NAME = 'id';\nconst MILESTONE_ATTR_NAME = 'milestone';\n\n@Directive({\n  selector: '[slide]'\n})\nexport class SlideDirective {\n  @Input() class;\n\n  constructor(\n    private presentation: SlidesDeckComponent,\n    private template: TemplateRef<any>\n  ) {\n    let slide;\n\n    // TODO: Move milestone extraction to the codelab.\n    // Ivy\n    if ((template as any)._declarationTContainer) {\n      const attrs = (template as any)._declarationTContainer.attrs || [];\n      const indexPredicate = n => n === ID_ATTR_NAME;\n      const idIndex = attrs.findIndex(indexPredicate);\n      const milestoneIndex = attrs.findIndex(indexPredicate);\n      slide = {\n        id: idIndex !== -1 ? attrs[idIndex + 1] : undefined,\n        milestone:\n          milestoneIndex !== -1 ? attrs[milestoneIndex + 1] : undefined,\n        template\n      };\n      // Old renderer\n    } else {\n      const attrs = (template as any)._def.element.template.nodes[0].element\n        .attrs;\n      const attrPredicate = ([_, name]: string[]): boolean =>\n        name === ID_ATTR_NAME;\n      const idAttr = attrs.find(attrPredicate);\n      const milestoneAttr = attrs.find(attrPredicate);\n      slide = {\n        id: idAttr && idAttr[2],\n        milestone: milestoneAttr && milestoneAttr[2],\n        template\n      };\n    }\n\n    presentation.addSlide(slide);\n  }\n}\n"
  },
  {
    "path": "libs/slides/src/lib/slides.module.spec.ts",
    "content": "import { async, TestBed } from '@angular/core/testing';\nimport { SlidesModule } from './slides.module';\n\ndescribe('SlidesModule', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SlidesModule]\n    }).compileComponents();\n  }));\n\n  it('should create', () => {\n    expect(SlidesModule).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "libs/slides/src/lib/slides.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { SlidesDeckComponent } from './deck/deck.component';\nimport { SlideDirective } from './slide/slide.directive';\nimport { ShortcutsDirective } from './shortcuts/shortcuts.directive';\nimport { SlidesRoutingDirective } from './routing/slides-routing.directive';\nimport { SlidesArrowsComponent } from './arrows/slides-arrows.component';\n\n@NgModule({\n  declarations: [\n    SlidesDeckComponent,\n    SlideDirective,\n    ShortcutsDirective,\n    SlidesArrowsComponent,\n    SlidesRoutingDirective\n  ],\n  exports: [\n    SlidesDeckComponent,\n    SlideDirective,\n    ShortcutsDirective,\n    SlidesArrowsComponent,\n    SlidesRoutingDirective\n  ],\n  imports: [CommonModule, RouterModule]\n})\nexport class SlidesModule {}\n"
  },
  {
    "path": "libs/slides/src/test-setup.ts",
    "content": "import 'jest-preset-angular';\n"
  },
  {
    "path": "libs/slides/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"node\", \"jest\"]\n  },\n  \"include\": [\"**/*.ts\"]\n}\n"
  },
  {
    "path": "libs/slides/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"declaration\": true,\n    \"inlineSources\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2018\"]\n  },\n  \"angularCompilerOptions\": {\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"enableResourceInlining\": true\n  },\n  \"exclude\": [\"src/test-setup.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/slides/tsconfig.lib.prod.json",
    "content": "{\n  \"extends\": \"./tsconfig.lib.json\",\n  \"angularCompilerOptions\": {\n    \"enableIvy\": false\n  }\n}\n"
  },
  {
    "path": "libs/slides/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"module\": \"commonjs\",\n    \"types\": [\"jest\", \"node\"]\n  },\n  \"files\": [\"src/test-setup.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/slides/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"slide\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"slide\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "libs/utils/karma.conf.js",
    "content": "module.exports = function(config) {\n  config.set({\n    basePath: '../',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage-istanbul-reporter'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    coverageIstanbulReporter: {\n      dir: require('path').join(__dirname, '../coverage'),\n      reports: ['html', 'lcovonly'],\n      fixWebpackSourcePaths: true\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false\n  });\n};\n"
  },
  {
    "path": "libs/utils/src/index.ts",
    "content": "export * from './lib';\n"
  },
  {
    "path": "libs/utils/src/lib/analytics/analytics.service.spec.ts",
    "content": "import { inject, TestBed } from '@angular/core/testing';\n\nimport { AnalyticsService } from './analytics.service';\n\n// TODO(kirjs): Uncomment\nxdescribe('AnalyticsService', () => {\n  beforeEach(() => {\n    TestBed.configureTestingModule({\n      providers: [AnalyticsService]\n    });\n  });\n\n  it('should ...', inject([AnalyticsService], (service: AnalyticsService) => {\n    expect(service).toBeTruthy();\n  }));\n});\n"
  },
  {
    "path": "libs/utils/src/lib/analytics/analytics.service.ts",
    "content": "import { Injectable, Optional } from '@angular/core';\nimport {\n  Event as RouterEvent,\n  NavigationEnd,\n  NavigationError,\n  Router\n} from '@angular/router';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport declare const ga;\n\n@Injectable()\nexport class AnalyticsService {\n  ga: (\n    action: string,\n    type: string,\n    eventCategory?: string,\n    eventAction?: string,\n    timing?: number | string,\n    extra?: string\n  ) => void;\n\n  constructor(@Optional() router: Router) {\n    this.ga = window['ga'] || (() => 0);\n    if (router) {\n      router.events.subscribe(a => {\n        if (a instanceof NavigationError) {\n          console.log(a);\n          throw new Error('Navigation error');\n        }\n      });\n\n      router.events\n        .pipe(\n          distinctUntilChanged((previous: any, current: RouterEvent) => {\n            if (current instanceof NavigationEnd) {\n              return previous.url === current.url;\n            }\n            return true;\n          })\n        )\n        .subscribe((x: NavigationEnd) => {\n          this.ga('set', 'page', x.url);\n          this.ga('send', 'pageview');\n        });\n    }\n  }\n\n  public sendEvent(\n    eventCategory: string,\n    eventAction: string,\n    eventLabel: string\n  ) {\n    this.ga('send', 'event', eventCategory, eventAction, eventLabel);\n  }\n\n  public sendTiming(\n    eventCategory: string,\n    eventAction: string,\n    timing: number,\n    path: string\n  ) {\n    this.ga('send', 'timing', eventCategory, eventAction, timing, path);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/differ/diffFilesResolver.ts",
    "content": "import { differ } from './differ';\nimport { evaled, hidden, justForReference, test } from './fileHelpers';\nimport { FileConfig } from '../../../../../apps/codelab/src/app/shared/interfaces/file-config';\n\ninterface Override {\n  [key: string]: {\n    [key: string]: string;\n  };\n}\n\ninterface Overrides {\n  file: Override;\n  stage: Override;\n}\n\nexport class DiffFilesResolver {\n  constructor(\n    private files: { [key: string]: string },\n    private stages: Array<string>,\n    private overrides: Overrides\n  ) {}\n\n  resolve(stage: string, files) {\n    const result = [];\n    const bootstrap = (files.bootstrap || []) as Array<string>;\n    if (files.exercise) {\n      files.exercise.forEach(file => {\n        result.push(\n          evaled(\n            this.getFileCodeForStage(file, stage, bootstrap.indexOf(file) >= 0)\n          )\n        );\n      });\n    }\n\n    if (files.reference) {\n      files.reference.forEach(file => {\n        result.push(\n          ...justForReference(\n            this.getFileCodeForStage(file, stage, bootstrap.indexOf(file) >= 0)\n          )\n        );\n      });\n    }\n    if (files.hidden) {\n      files.hidden.forEach(file => {\n        result.push(\n          ...hidden(\n            this.getFileCodeForStage(file, stage, bootstrap.indexOf(file) >= 0)\n          )\n        );\n      });\n    }\n\n    if (files.test) {\n      files.test.forEach(file => {\n        result.push(\n          ...test(\n            this.getFileCodeForStage(file, stage, bootstrap.indexOf(file) >= 0)\n          )\n        );\n      });\n    }\n    return result;\n  }\n\n  getFileByPath(path: string) {\n    if (!this.files[path]) {\n      // tslint:disable-next-line\n      debugger;\n      throw new Error('Incorrect path:' + path);\n    }\n\n    return this.files[path];\n  }\n\n  getFileCodeForStage(\n    path: string,\n    stage: string,\n    bootstrap: boolean\n  ): FileConfig {\n    const type = path.substr(path.lastIndexOf('.') + 1);\n    stage =\n      (this.overrides.stage[path] && this.overrides.stage[path][stage]) ||\n      stage;\n\n    // Using overrides path, but keeping the original path for display purposes.\n    // TODO: This get broken if files are ind different folders\n    const diffs = differ(\n      this.getFileByPath(\n        (this.overrides.file[path] && this.overrides.file[path][stage]) || path\n      ),\n      this.stages\n    );\n\n    if (type === 'ts') {\n      return {\n        bootstrap: bootstrap,\n        excludeFromTesting: bootstrap,\n        type: 'typescript',\n        path,\n        template: diffs[stage],\n        moduleName: path.replace('.ts', ''),\n        code: diffs[stage],\n        solution: diffs[stage + 'Solved']\n      };\n    } else {\n      return {\n        type,\n        path,\n        code: diffs[stage],\n        template: diffs[stage],\n        solution: diffs[stage + 'Solved']\n      };\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/differ/differ.spec.ts",
    "content": "import { differ } from './differ';\n\ndescribe('differ', () => {\n  it('returns the text the way it is, if there are no special tags.', () => {\n    const commits = differ('hi', ['first', 'second']);\n    expect(commits['initial']).toEqual('hi');\n    expect(commits['first']).toEqual('hi');\n    expect(commits['second']).toEqual('hi');\n  });\n\n  it('Progressively adds the text for a single commit.', () => {\n    const commits = differ('hi/*Sd:first*/, world!/*/d*/', ['first']);\n    expect(commits['initial']).toEqual('hi');\n    expect(commits['first']).toEqual('hi, world!');\n  });\n\n  it('Works for multiline strings', () => {\n    const commits = differ(\n      `hi/*d:first*/, wor\n  ld!/*/d*/`,\n      ['first']\n    );\n    expect(commits['initial']).toEqual('hi');\n    expect(commits['first']).toEqual(`hi, wor\n  ld!`);\n  });\n\n  it('Progressively adds the text for multiple commits.', () => {\n    const commits = differ(\n      `/*d:first*/bu/*/d*//*d:second*/ra/*/d*//*d:third*/ti/*/d*//*d:forth*/no/*/d*/`,\n      ['first', 'second', 'third', 'forth']\n    );\n    expect(commits['initial']).toEqual('');\n    expect(commits['first']).toEqual('bu');\n    expect(commits['second']).toEqual('bura');\n    expect(commits['third']).toEqual('burati');\n    expect(commits['forth']).toEqual('buratino');\n  });\n\n  // TODO(kirjs): Nested diffs sound like a fun idea, maybe I'll implement them later.\n  xit('Disallows nested diffs, and throws if they are present', () => {\n    const commits = differ(`/*d:first*/AA/*d:second*/OO/*/d*/AA/*/d*/`, [\n      'first',\n      'second'\n    ]);\n    expect(commits['initial']).toEqual('');\n    expect(commits['first']).toEqual('AAAA');\n    expect(commits['second']).toEqual('AAOOAA');\n  });\n\n  it('Throws if not all commits have been used.', () => {\n    expect(() =>\n      differ(`/*d:first*/AAOO/*/d*/OO/*d:second*/AA/*/d*/`, ['first'])\n    ).toThrow();\n  });\n\n  it('Allows multi-line tags for nicer formatting', () => {\n    const commits = differ(\n      `hi/*\n    d:first\n    */, world!/*/d*/`,\n      ['first']\n    );\n    expect(commits['initial']).toEqual('hi');\n    expect(commits['first']).toEqual('hi, world!');\n  });\n\n  it('Allows to specify a range of commits.', () => {\n    const commits = differ(\n      `/*d:first*/bu/*/d*//*d:second:second*/ra/*/d*//*d:third*/ti/*/d*//*d:forth*/no/*/d*/`,\n      ['first', 'second', 'third', 'forth']\n    );\n    expect(commits['initial']).toEqual('');\n    expect(commits['first']).toEqual('bu');\n    expect(commits['second']).toEqual('bura');\n    expect(commits['third']).toEqual('buti');\n    expect(commits['forth']).toEqual('butino');\n  });\n\n  it('Allows to specify a range of commits for initial', () => {\n    const commits = differ(`/*d:initial:initial*/hi/*/d*//*d:last*/bye/*/d*/`, [\n      'first',\n      'second',\n      'third',\n      'last'\n    ]);\n    expect(commits['initial']).toEqual('hi');\n    expect(commits['second']).toEqual('');\n    expect(commits['third']).toEqual('');\n    expect(commits['last']).toEqual('bye');\n  });\n\n  it('Allows to specify a wider range of commits.', () => {\n    const commits = differ(\n      `/*d:first*/bu/*/d*//*d:second:third*/ra/*/d*//*d:third*/ti/*/d*//*d:forth*/no/*/d*/`,\n      ['first', 'second', 'third', 'forth']\n    );\n    expect(commits['initial']).toEqual('');\n    expect(commits['first']).toEqual('bu');\n    expect(commits['second']).toEqual('bura');\n    expect(commits['third']).toEqual('burati');\n    expect(commits['forth']).toEqual('butino');\n  });\n\n  it('Keeps existing version for the unknown commits.', () => {\n    const commits = differ(\n      `/*d:first*/bu/*/d*//*d:second:third*/ra/*/d*//*d:third*/ti/*/d*//*d:forth*/no/*/d*/`,\n      ['first', 'second', 'secondandahalf', 'third', 'forth']\n    );\n    expect(commits['initial']).toEqual('');\n    expect(commits['first']).toEqual('bu');\n    expect(commits['second']).toEqual('bura');\n    expect(commits['secondandahalf']).toEqual('bura');\n    expect(commits['third']).toEqual('burati');\n    expect(commits['forth']).toEqual('butino');\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/differ/differ.ts",
    "content": "function assertPositive(number, error) {\n  if (number < 0) {\n    throw new Error(error);\n  }\n  return number;\n}\n\nexport function differ(file, commits) {\n  return ['initial']\n    .concat(commits)\n    .concat('neverShow')\n    .reduce((result, commit) => {\n      result.push(commit + 'Pre');\n      result.push(commit);\n      result.push(commit + 'Solved');\n      return result;\n    }, [])\n    .reduce((result, commit, index, arr) => {\n      // tslint:disable-next-line:max-line-length TODO: Can this regex be shortened and this comment removed?\n      result[commit] = file.replace(\n        /\\/\\*[\\r\\n\\s]*d:([a-z]+)(:[a-z]+)?(?:\\/(trimBoth|trimLeading|trimTrailing))?[\\r\\n\\s]*\\*\\/([\\n\\s]*)((?:.|\\n|\\r)*?)([\\r\\n\\s]*)\\/\\*\\/d\\*\\//gi,\n        function(\n          match,\n          from,\n          to,\n          trim: 'trimBoth' | 'trimLeading' | 'trimTrailing',\n          spaceLeading,\n          value,\n          spaceTrailing\n        ) {\n          if (trim === 'trimBoth' || trim === 'trimLeading') {\n            spaceLeading = '';\n          }\n          if (trim === 'trimBoth' || trim === 'trimTrailing') {\n            spaceTrailing = '';\n          }\n          const fromIndex = assertPositive(\n            arr.indexOf(from),\n            `[Differ] Invalid commit: ${from}`\n          );\n          const toIndex = to\n            ? assertPositive(\n                arr.indexOf(to.substr(1)),\n                `[Differ] Invalid commit: ${to.substr(1)}`\n              )\n            : arr.length;\n          return index >= fromIndex && index <= toIndex\n            ? spaceLeading + value + spaceTrailing\n            : '';\n        }\n      );\n      return result;\n    }, {});\n}\n"
  },
  {
    "path": "libs/utils/src/lib/differ/fileHelpers.ts",
    "content": "import { FileConfig } from '../../../../../apps/codelab/src/app/shared/interfaces/file-config';\n\nexport function hidden(...files: FileConfig[]): FileConfig[] {\n  return files.map(file => Object.assign({}, file, { hidden: true }));\n}\n\nexport function readOnly(...files: FileConfig[]): FileConfig[] {\n  return files.map(file => Object.assign({}, file, { readonly: true }));\n}\n\nexport function justForReference(...files: FileConfig[]): FileConfig[] {\n  return collapsed(...readOnly(...files));\n}\n\nexport function collapsed(...files: FileConfig[]): FileConfig[] {\n  return files.map(file => Object.assign({}, file, { collapsed: true }));\n}\n\nexport function test(...files: FileConfig[]): FileConfig[] {\n  return files.map(file =>\n    Object.assign({}, file, {\n      excludeFromTesting: false,\n      test: true,\n      bootstrap: true,\n      before: 'mochaBefore();',\n      after: 'mochaAfter();',\n      hidden: true\n    })\n  );\n}\n\nexport function evaled(file) {\n  return Object.assign(file, {\n    after: `export function evalJs( js ){ return eval(js);}`\n  });\n}\n"
  },
  {
    "path": "libs/utils/src/lib/github-PR-service/github.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\n\n@NgModule({\n  imports: [HttpClientModule]\n})\nexport class GithubModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/github-PR-service/github.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport * as firebase from 'firebase/app';\nimport { AngularFireDatabase } from '@angular/fire/database';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GithubService {\n  repo = 'codelab-fun/codelab';\n  githubAuth;\n\n  constructor(\n    private http: HttpClient,\n    private afAuth: AngularFireAuth,\n    private database: AngularFireDatabase\n  ) {\n    afAuth.authState.subscribe(authData => {\n      if (authData === null) {\n        this.login();\n      } else {\n        this.githubAuth = authData;\n      }\n    });\n  }\n\n  async login() {\n    const provider = new firebase.auth.GithubAuthProvider().addScope('repo');\n    this.githubAuth = await this.afAuth.auth.signInWithPopup(provider);\n  }\n\n  // TODO clean up 'createIssue' and 'createClosedIssue' methods as 60% of code is the same\n\n  async createIssue(message) {\n    if (!this.githubAuth.credential) {\n      await this.login();\n    }\n\n    const issueData = {\n      title: message.comment,\n      body: this.generateIssueBody(message)\n    };\n    const accessToken = this.githubAuth.credential.accessToken;\n\n    const headers = { Authorization: 'token ' + accessToken };\n    const options = { headers };\n    this.http\n      .post(\n        `https://api.github.com/repos/${this.repo}/issues`,\n        issueData,\n        options\n      )\n      .subscribe((responseData: any) => {\n        this.markAsDone(message);\n        this.database\n          .object(`feedback/${message.key}`)\n          .update({ url: responseData.html_url });\n        window.open(responseData.html_url);\n      });\n  }\n\n  async createClosedIssue(message, reason) {\n    if (!this.githubAuth.credential) {\n      await this.login();\n    }\n\n    const issueData = {\n      title: reason + ' ' + message.comment,\n      body: this.generateIssueBody(message)\n    };\n    const accessToken = this.githubAuth.credential.accessToken;\n\n    const headers = { Authorization: 'token ' + accessToken };\n    const options = { headers };\n    this.http\n      .post(\n        `https://api.github.com/repos/${this.repo}/issues`,\n        issueData,\n        options\n      )\n      .subscribe((responseData: any) => {\n        console.log(responseData.html_url);\n        this.database\n          .object(`feedback/${message.key}`)\n          .update({ url: responseData.html_url });\n\n        const changes = { state: 'closed' };\n        const issueId = responseData.number;\n\n        const headers = { Authorization: 'token ' + accessToken };\n        const options = { headers };\n        this.http\n          .patch(\n            `https://api.github.com/repos/${this.repo}/issues/${issueId}`,\n            changes,\n            options\n          )\n          .subscribe(res => {\n            if (res) {\n              this.markAsDone(message);\n            }\n          });\n      });\n  }\n\n  generateIssueBody(message) {\n    return `# What the issue is about\n${message.comment}\n\n# Where to start?\nStart with reproducing [Locally](http://localhost:4200${message.href})\n\n# Metadata:\nThis was filed through the feedback form.\nAuthor: ${message.name}\nDate: ${message.timestamp}\nSlide: [Local](http://localhost:4200${message.href}),[Prod](https://codelab.fun${message.href})`;\n  }\n\n  markAsDone(message) {\n    this.database\n      .object(`feedback/${message.key}`)\n      .update({ isDone: !message.isDone });\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/github-PR-service/index.ts",
    "content": "export * from './github.module';\nexport * from './github.service';\n"
  },
  {
    "path": "libs/utils/src/lib/i18n/i18n-tools.ts",
    "content": "export function extractMessages({ nativeElement }): { [key: string]: string } {\n  return Array.from(nativeElement.children as Array<HTMLElement>).reduce(\n    (result, el) => {\n      result[el.getAttribute('id')] = el.innerHTML;\n      return result;\n    },\n    {}\n  );\n}\n"
  },
  {
    "path": "libs/utils/src/lib/index.ts",
    "content": "export * from './github-PR-service/index';\n"
  },
  {
    "path": "libs/utils/src/lib/loaders/loaders.ts",
    "content": "declare const require;\n\nimport * as ts from 'typescript';\n\n/**\n *  Unfortunately when doing:\n *  'require * as ts from 'typescript'; for the actual code,\n *  webpack tries to ull source-maps and other node deps whichare not needed.\n *\n *  It requires extra configuration and pollutes the terminal.\n *\n *  To avoid it we just require and eval raw code.\n *  This is ugly, but as TS is used in very few places, better than polluting the console.\n *\n */\nexport function getTypeScript(): typeof ts {\n  const w = window as any;\n  if (w.ts) {\n    return w.ts;\n  }\n\n  // Used inside of eval. Typescript will think it's a real module and populate exports.\n  const module = {\n    exports: {}\n  };\n\n  eval(require('!!raw-loader!typescript'));\n  w.ts = module.exports;\n\n  return w.ts;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/loading-indicator/loading-indicator/loading-indicator.component.css",
    "content": "mat-icon.running {\n  animation: rotation 1s infinite linear;\n}\n\n@keyframes rotation {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/loading-indicator/loading-indicator/loading-indicator.component.html",
    "content": "<mat-icon class=\"running\">refresh</mat-icon>\n"
  },
  {
    "path": "libs/utils/src/lib/loading-indicator/loading-indicator/loading-indicator.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LoadingIndicatorComponent } from './loading-indicator.component';\n\ndescribe('LoadingIndicatorComponent', () => {\n  let component: LoadingIndicatorComponent;\n  let fixture: ComponentFixture<LoadingIndicatorComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [LoadingIndicatorComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LoadingIndicatorComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/loading-indicator/loading-indicator/loading-indicator.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-loading-indicator',\n  templateUrl: './loading-indicator.component.html',\n  styleUrls: ['./loading-indicator.component.css']\n})\nexport class LoadingIndicatorComponent {}\n"
  },
  {
    "path": "libs/utils/src/lib/loading-indicator/loading-indicator.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LoadingIndicatorComponent } from './loading-indicator/loading-indicator.component';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n  declarations: [LoadingIndicatorComponent],\n  exports: [LoadingIndicatorComponent],\n  imports: [CommonModule, MatIconModule]\n})\nexport class LoadingIndicatorModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/pipes/pipes.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { SafeHtml } from './safeHtml.pipe';\n\n@NgModule({\n  declarations: [SafeHtml],\n  exports: [SafeHtml]\n})\nexport class SharedPipeModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/pipes/safeHtml.pipe.ts",
    "content": "import { DomSanitizer } from '@angular/platform-browser';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'safeHtml' })\nexport class SafeHtml implements PipeTransform {\n  constructor(private readonly sanitizer: DomSanitizer) {}\n\n  transform(html) {\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/common.spec.ts",
    "content": "import { testReducer } from '../sandbox-runner/common';\n\nfdescribe('Test reducer', () => {\n  const data = {\n    tests: [\n      {\n        name: 'hi',\n        pass: undefined\n      },\n      {\n        name: 'bye',\n        pass: undefined\n      }\n    ]\n  };\n\n  it('sets initial state', () => {\n    const result = testReducer(\n      { tests: [] },\n      {\n        type: 'reset',\n        data: ['hi', 'bye']\n      }\n    );\n\n    expect(result).toEqual(data);\n  });\n\n  it('sets passed state', () => {\n    const result = testReducer(data, {\n      type: 'result',\n      data: {\n        name: 'hi',\n        pass: true\n      }\n    });\n\n    expect(result.tests[0].pass).toEqual(true);\n    expect(result.tests[1].pass).toEqual(undefined);\n  });\n\n  it('sets an error', () => {\n    const result = testReducer(data, {\n      type: 'error',\n      data: 'lol'\n    });\n\n    expect(result.tests).toEqual(data.tests);\n    expect(result.error).toEqual('lol');\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/common.ts",
    "content": "import produce from 'immer';\nimport { TestRunResult } from '../test-results/common';\n\ninterface TestAction {\n  type: 'terminate' | 'reset' | 'result' | 'error';\n  data: any;\n}\n\nexport const testReducer = produce(\n  (data: TestRunResult = { tests: [] }, action: TestAction): TestRunResult => {\n    if (action.type === 'reset') {\n      return {\n        tests: action.data.map(name => ({\n          name,\n          pass: undefined\n        }))\n      };\n    }\n    if (action.type === 'result') {\n      const index = data.tests.findIndex(\n        test => action.data.name === test.name\n      );\n      if (index === -1) {\n        throw new Error('Test missing');\n      }\n\n      data.tests[index] = { ...data.tests[index], ...action.data };\n      return data;\n    }\n\n    if (action.type === 'error') {\n      data.error = action.data;\n      return data;\n    }\n\n    return data;\n  }\n);\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/runners/runner.ts",
    "content": "import { Observable } from 'rxjs';\n\nexport interface Runner {\n  run: (code: string) => void;\n  destroy: () => void;\n  result$: Observable<any>;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/runners/webworker.spec.ts",
    "content": "import { WebworkerRunner } from '@codelab/utils/src/lib/sandbox-runner/runners/webworker';\nimport { Observable } from 'rxjs';\n\nfunction listenToObservable<T>(obs: Observable<T>) {\n  const value: Array<T> = [];\n  let error: T | undefined;\n  let isComplete = false;\n  const sub = obs.subscribe(\n    a => value.push(a),\n    e => (error = e),\n    () => (isComplete = true)\n  );\n\n  return {\n    unsubscribe: () => sub.unsubscribe(),\n    value,\n    error,\n    isComplete\n  };\n}\n\ndescribe('Test runner', () => {\n  it('sets initial state', () => {\n    const runner = new WebworkerRunner();\n    const listener = listenToObservable(runner.result$);\n    runner.run('console.log(\"hey\");');\n    expect(listener.value).toEqual([]);\n    listener.unsubscribe();\n  });\n\n  it('handles errors', () => {\n    const runner = new WebworkerRunner();\n    const listener = listenToObservable(runner.result$);\n    runner.run('debugger; throw \"lol\";');\n    expect(listener.value).toEqual([]);\n    expect(listener.error).toEqual(undefined);\n    listener.unsubscribe();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/runners/webworker.ts",
    "content": "import { Observable, Subject } from 'rxjs';\nimport { shareReplay, switchMap } from 'rxjs/operators';\nimport { Runner } from './runner';\n\nfunction run(code) {\n  return new Observable(function(subscriber) {\n    const file = new Blob([code], { type: 'text/javascript' });\n    const worker = new Worker(window.URL.createObjectURL(file), {\n      name: Math.random().toString(36)\n    });\n\n    worker.onerror = e => {\n      subscriber.next({\n        type: 'error',\n        data: e\n      });\n      subscriber.complete();\n      worker.terminate();\n    };\n\n    worker.onmessage = function(a) {\n      const data = a.data;\n      if (data.type === 'complete') {\n        worker.terminate();\n      } else {\n        subscriber.next(data);\n      }\n    };\n\n    return () => {\n      worker.terminate();\n    };\n  });\n}\n\nexport class WebworkerRunner<E> implements Runner {\n  private readonly executeSubject = new Subject();\n  result$ = this.executeSubject.pipe(switchMap(run), shareReplay(1));\n\n  destroy() {\n    this.executeSubject.complete();\n  }\n\n  run(code: string) {\n    this.executeSubject.next(code);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/sandbox-runner.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TestRunnerComponent } from '@codelab/utils/src/lib/sandbox-runner/test-runner.component';\nimport { TypescriptTestRunnerComponent } from '@codelab/utils/src/lib/sandbox-runner/typescript-test-runner/typescript-test-runner.component';\nimport { TestResultsModule } from '@codelab/utils/src/lib/test-results/test-results.module';\n\n@NgModule({\n  declarations: [TestRunnerComponent, TypescriptTestRunnerComponent],\n  exports: [TestRunnerComponent, TypescriptTestRunnerComponent],\n  imports: [CommonModule, TestResultsModule]\n})\nexport class SandboxRunnerModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner-service.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { TestRunnerService } from './test-runner.service';\n\ndescribe('TestRunnerServiceService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: TestRunnerService = TestBed.inject(TestRunnerService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.component.html",
    "content": "<slides-test-results [result]=\"result$ | async\"></slides-test-results>\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.component.scss",
    "content": ":host {\n  --test-succcess: #058b00;\n  display: block;\n}\n\n:host ::ng-deep codelab-simple-tests-progress {\n  margin-bottom: 20px;\n  display: block;\n\n  .text-box.pass {\n    background: var(--test-succcess);\n  }\n}\n\nmat-checkbox {\n  margin-left: 8px;\n  margin-top: 16px;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TestRunnerComponent } from './test-runner.component';\n\ndescribe('TestRunnerComponent', () => {\n  let component: TestRunnerComponent;\n  let fixture: ComponentFixture<TestRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TestRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TestRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { TestRunnerService } from '@codelab/utils/src/lib/sandbox-runner/test-runner.service';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ReplaySubject } from 'rxjs';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-test-runner',\n  templateUrl: './test-runner.component.html',\n  styleUrls: ['./test-runner.component.scss']\n})\nexport class TestRunnerComponent implements OnChanges, OnDestroy {\n  @Input() code;\n  @Input() tests;\n\n  @Output() result = new EventEmitter();\n  readonly destroy$ = new ReplaySubject(1);\n  readonly result$ = this.testRunner.result$;\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.code || changes.tests) {\n      this.testRunner.run(this.code, this.tests);\n    }\n  }\n\n  constructor(private testRunner: TestRunnerService) {\n    this.result$\n      .pipe(\n        filter(result => {\n          return (\n            !!result.error || result.tests.every(t => t.pass !== undefined)\n          );\n        }),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(this.result);\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { WebworkerRunner } from '@codelab/utils/src/lib/sandbox-runner/runners/webworker';\nimport { ScriptLoaderService } from '@codelab/code-demos/src/lib/shared/script-loader.service';\nimport { TestRunner } from '@codelab/utils/src/lib/sandbox-runner/test-runner';\nimport { Observable } from 'rxjs';\nimport { TestRunResult } from '@codelab/utils/src/lib/test-results/common';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TestRunnerService {\n  readonly testRunner = new TestRunner(\n    this.scriptLoaderService,\n    new WebworkerRunner()\n  );\n  readonly result$: Observable<TestRunResult> = this.testRunner.result$;\n\n  constructor(private scriptLoaderService: ScriptLoaderService) {}\n\n  run(code: string, tests?: string) {\n    this.testRunner.run(code, tests);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.spec.ts",
    "content": "import { TestRunner } from '@codelab/utils/src/lib/sandbox-runner/test-runner';\nimport { ScriptLoaderService } from '@codelab/code-demos/src/lib/shared/script-loader.service';\nimport { Runner } from '@codelab/utils/src/lib/sandbox-runner/runners/runner';\n\ndescribe('Test runner', () => {\n  it('sets initial state', () => {\n    const scriptLoaderService = jasmine.createSpyObj<ScriptLoaderService>(\n      'ScriptLoaderService',\n      ['getScript']\n    );\n    const runner = jasmine.createSpyObj<Runner>('ScriptLoaderService', ['run']);\n\n    const testRunner = new TestRunner(scriptLoaderService, runner);\n\n    testRunner.run(\n      'console.log(lol)',\n      `\n    describe('tests', () => {\n      it('no tests have been setup!', () => {\n        chai.expect(true).to.be.ok;\n      });\n\n      it('I will fail', () => {\n        chai.expect(false).to.be.ok;\n      });\n    });\n\n      `\n    );\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/test-runner.ts",
    "content": "import { ScriptLoaderService } from '@codelab/code-demos/src/lib/shared/script-loader.service';\nimport { Runner } from '@codelab/utils/src/lib/sandbox-runner/runners/runner';\nimport { scan } from 'rxjs/operators';\nimport { testReducer } from '@codelab/utils/src/lib/sandbox-runner/common';\nimport { Observable } from 'rxjs';\nimport { TestRunResult } from '@codelab/utils/src/lib/test-results/common';\nimport { wrapSystemJs } from '@codelab/code-demos/src/lib/shared/sandbox';\n\nconst mochaRun = `\nfunction flattenTests(suite) {\n  const result = [];\n\n  function extractSuite(suite) {\n    suite.suites.forEach(function(suite) {\n      extractSuite(suite);\n    });\n    suite.tests.forEach(function(test) {\n      result.push(test.title);\n    });\n  }\n\n  extractSuite(suite);\n  return result;\n}\n\nconst result = mocha.run();\n\npostMessage({type: 'reset', data: flattenTests(mocha.suite)});\n\nresult.on('end', () => { postMessage({type: 'complete'}); });\nresult.on('pass', (t, e) => { postMessage({type: 'result', data: {pass: true, name: t.title}}); });\nresult.on('fail', (t, e) => { postMessage({type: 'result', data: {pass: false, name: t.title, error: e.message}}); });\n`;\n\nexport class TestRunner {\n  private readonly code = {\n    mocha: this.scriptLoaderService.getScript('mocha'),\n    chai: this.scriptLoaderService.getScript('chai'),\n    SystemJS: this.scriptLoaderService.getScript('SystemJS'),\n    polyfill: `const window = globalThis;`,\n    mochaSetup: `mocha.setup('bdd').reporter(function(a) {});`,\n    mochaRun: mochaRun,\n    systemMochaRun: `\n    System.register(\"runner\", [\"test\"], () => {\n      return {\n        execute: () => {\n            ${mochaRun}\n        }\n    };\n});\n\nSystem.import(\"runner\");\n\n`,\n    defaultTests: `\n    describe('tests', () => {\n        it('no tests have been setup', () => {\n          chai.expect(true).to.be.ok;\n        });\n      });`\n  };\n\n  readonly result$: Observable<TestRunResult> = this.runner.result$.pipe(\n    scan(testReducer, { tests: [] })\n  );\n\n  constructor(\n    private readonly scriptLoaderService: ScriptLoaderService,\n    private readonly runner: Runner\n  ) {}\n\n  run(code, tests = this.code.defaultTests, system = true) {\n    this.runner.run(\n      [\n        this.code.polyfill,\n        this.code.chai,\n        this.code.mocha,\n        this.code.mochaSetup,\n        system ? wrapSystemJs(this.code.SystemJS) : '',\n        code,\n        tests,\n        system ? this.code.systemMochaRun : this.code.mochaRun\n      ].join('\\n')\n    );\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-checker-runner/typescript-checker-runner.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-checker-runner/typescript-checker-runner.component.html",
    "content": "<slides-test-run-results\n  [tests]=\"(result$ | async).tests\"\n  [seeAll]=\"true\"\n  [focused]=\"false\"\n></slides-test-run-results>\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-checker-runner/typescript-checker-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TypescriptCheckerRunnerComponent } from './typescript-checker-runner.component';\n\ndescribe('TypescriptCheckerRunnerComponent', () => {\n  let component: TypescriptCheckerRunnerComponent;\n  let fixture: ComponentFixture<TypescriptCheckerRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TypescriptCheckerRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TypescriptCheckerRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-checker-runner/typescript-checker-runner.component.ts",
    "content": "import { Component, Input, OnChanges } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { compileTsFilesWatch } from '@codelab/code-demos/src/lib/runner/compile-ts-files';\nimport { TestRunResult } from '../../test-results/common';\nimport { getTypeScript } from '../../loaders/loaders';\n\nconst ts = getTypeScript();\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-typescript-checker-runner',\n  templateUrl: './typescript-checker-runner.component.html',\n  styleUrls: ['./typescript-checker-runner.component.css']\n})\nexport class TypescriptCheckerRunnerComponent implements OnChanges {\n  private readonly codeSubject = new Subject();\n  readonly result$: Observable<TestRunResult> = this.codeSubject.pipe(\n    compileTsFilesWatch({\n      module: ts.ModuleKind.None,\n      target: ts.ScriptTarget.ES2017,\n      experimentalDecorators: true,\n      emitDecoratorMetadata: true,\n      noImplicitAny: true,\n      declaration: true\n    }),\n    filter(a => Object.values(a.files).length > 0),\n    map(a => {\n      return {\n        tests: a.diagnostics.map(d => ({\n          pass: false,\n          name: d.messageText.toString()\n        }))\n      };\n    })\n  );\n  @Input() code;\n\n  ngOnChanges() {\n    this.codeSubject.next({ 'main.ts': this.code });\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-checker-runner/typescript-checker-runner.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TypescriptCheckerRunnerComponent } from './typescript-checker-runner.component';\nimport { TestResultsModule } from '../../test-results/test-results.module';\n\n@NgModule({\n  declarations: [TypescriptCheckerRunnerComponent],\n  exports: [TypescriptCheckerRunnerComponent],\n  imports: [CommonModule, TestResultsModule]\n})\nexport class TypescriptCheckerRunnerModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-test-runner/typescript-test-runner.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-test-runner/typescript-test-runner.component.html",
    "content": "<slides-test-runner\n  (result)=\"result.emit($event)\"\n  *ngIf=\"code$ | async as code\"\n  [code]=\"code.code\"\n  [tests]=\"code.tests\"\n>\n</slides-test-runner>\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-test-runner/typescript-test-runner.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TypescriptTestRunnerComponent } from './typescript-test-runner.component';\n\ndescribe('TypescriptTestRunnerComponent', () => {\n  let component: TypescriptTestRunnerComponent;\n  let fixture: ComponentFixture<TypescriptTestRunnerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TypescriptTestRunnerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TypescriptTestRunnerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sandbox-runner/typescript-test-runner/typescript-test-runner.component.ts",
    "content": "import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport {\n  compileTsFilesWatch,\n  Files\n} from '@codelab/code-demos/src/lib/runner/compile-ts-files';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-typescript-test-runner',\n  templateUrl: './typescript-test-runner.component.html',\n  styleUrls: ['./typescript-test-runner.component.css']\n})\nexport class TypescriptTestRunnerComponent implements OnChanges, OnDestroy {\n  @Input() code;\n  @Input() tests;\n\n  @Output() result = new EventEmitter();\n  private readonly codeSubject = new Subject<Files>();\n\n  readonly code$ = this.codeSubject.pipe(\n    compileTsFilesWatch(),\n    filter(a => Object.values(a.files).length > 0),\n    map(a => {\n      return {\n        code: a.files['main.js'],\n        tests: a.files['test.js']\n      };\n    })\n  );\n\n  ngOnChanges() {\n    this.codeSubject.next({\n      'main.ts': this.code,\n      'test.ts': this.tests\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.codeSubject.complete();\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/common.ts",
    "content": "import { AngularFireAction, DatabaseSnapshot } from '@angular/fire/database';\n\nexport enum SyncStatus {\n  OFF = 'off',\n  VIEWING = 'viewing',\n  PRESENTING = 'presenting',\n  ADMIN = 'admin'\n}\n\nexport const canWritePresenterData = status =>\n  status === SyncStatus.PRESENTING || status === SyncStatus.ADMIN;\n\nexport function firebaseToValuesWithKey<T>(\n  list: AngularFireAction<DatabaseSnapshot<T>>[]\n) {\n  return list.map(action => ({ key: action.key, ...action.payload.val() }));\n}\n\nexport function toValuesAndKeys<T>(object: {\n  [k: string]: T;\n}): Array<{ key: string; value: T }> {\n  return Object.entries(object).map(([key, value]) => ({ key, value }));\n}\n\nexport function sum(array) {\n  return array.reduce((a, b) => a + b, 0);\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/configure-sync/configure-sync.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/configure-sync/configure-sync.component.html",
    "content": "<mat-card *isAdmin>\n  <mat-checkbox\n    syncPresenterValue=\"enabled\"\n    [syncPresenterValueDefault]=\"false\"\n    [(ngModel)]=\"enabled\"\n  >\n    Enable the survey\n  </mat-checkbox>\n</mat-card>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/configure-sync/configure-sync.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ConfigureSyncComponent } from './configure-sync.component';\n\ndescribe('ConfigureSyncComponent', () => {\n  let component: ConfigureSyncComponent;\n  let fixture: ComponentFixture<ConfigureSyncComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ConfigureSyncComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ConfigureSyncComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/configure-sync/configure-sync.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-configure-sync',\n  templateUrl: './configure-sync.component.html',\n  styleUrls: ['./configure-sync.component.css']\n})\nexport class ConfigureSyncComponent implements OnInit {\n  enabled: boolean;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/configure-sync/configure-sync.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { ConfigureSyncComponent } from './configure-sync.component';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  declarations: [ConfigureSyncComponent],\n  exports: [ConfigureSyncComponent],\n  imports: [\n    CommonModule,\n    MatCardModule,\n    MatFormFieldModule,\n    MatCheckboxModule,\n    SyncDirectivesModule,\n    FormsModule\n  ]\n})\nexport class ConfigureSyncModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/online-indicator/online-indicator.component.css",
    "content": ".indicator {\n  display: flex;\n  align-items: center;\n  padding: 8px;\n\n  font-family: sans-serif;\n}\n\nmat-icon {\n  margin-right: 10px;\n  animation: rotation 10s infinite linear;\n  color: #ff5207;\n}\n\n@keyframes rotation {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/online-indicator/online-indicator.component.html",
    "content": "<div class=\"indicator\" *ngIf=\"(firebaseInfoService.online$ | async) === false\">\n  <mat-icon>offline_bolt</mat-icon>\n  Connecting...\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/online-indicator/online-indicator.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { OnlineIndicatorComponent } from './online-indicator.component';\nimport { OnlineIndicatorModule } from '@codelab/utils/src/lib/sync/components/online-indicator/online-indicator.module';\n\ndescribe('OnlineIndicatorComponent', () => {\n  let component: OnlineIndicatorComponent;\n  let fixture: ComponentFixture<OnlineIndicatorComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [OnlineIndicatorModule]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(OnlineIndicatorComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/online-indicator/online-indicator.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport { FirebaseInfoService } from '@codelab/utils/src/lib/sync/services/firebase-info.service';\n\n@Component({\n  selector: 'codelab-online-indicator',\n  templateUrl: './online-indicator.component.html',\n  styleUrls: ['./online-indicator.component.css']\n})\nexport class OnlineIndicatorComponent implements OnInit {\n  constructor(readonly firebaseInfoService: FirebaseInfoService) {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/online-indicator/online-indicator.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OnlineIndicatorComponent } from './online-indicator.component';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n  declarations: [OnlineIndicatorComponent],\n  exports: [OnlineIndicatorComponent],\n  imports: [CommonModule, MatIconModule]\n})\nexport class OnlineIndicatorModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.component.html",
    "content": "<div\n  class=\"wrapper\"\n  [class.highlight-index]=\"highlightedIndex !== undefined\"\n  [class.vertical]=\"vertical\"\n  [class.horizontal]=\"!vertical\"\n>\n  <div\n    *ngFor=\"let item of breakdown; trackBy: trackBy; let i = index\"\n    class=\"item\"\n  >\n    <div class=\"bar\" [class.highlighted]=\"i === highlightedIndex\">\n      <div\n        class=\"filler\"\n        [style.height]=\"\n          vertical ? '100%' : ((max - item.value) / max) * 100 + '%'\n        \"\n        [style.width]=\"\n          vertical ? ((max - item.value) / max) * 100 + '%' : '100%'\n        \"\n      >\n        <div class=\"star\" *ngIf=\"item.value > 0\">\n          {{ item.value | number: '1.2-2' }}\n        </div>\n      </div>\n    </div>\n    <div class=\"label\" [class.highlighted]=\"i === highlightedIndex\">\n      {{ item.key }}\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.component.scss",
    "content": "::ng-deep :root {\n  --bar-width: 50px;\n}\n\n.filler {\n  width: var(--bar-width);\n  background: #fff;\n  position: relative;\n  transition: height 1s ease-out;\n}\n\n.bar {\n  width: var(--bar-width);\n  background: #ff4e3d;\n}\n\n.highlight-index {\n  .bar {\n    background: #444;\n  }\n\n  .bar.highlighted {\n    background: #ff4e3d;\n  }\n\n  .label.highlighted {\n    background: #ff4e3d;\n    color: #ffffff;\n  }\n}\n\n.star {\n  position: absolute;\n  text-align: center;\n}\n\ncodelab-stars {\n  display: block;\n  margin: 0 auto;\n  width: calc(var(--bar-width) * 5);\n  margin-bottom: 60px;\n}\n\n::ng-deep codelab-stars .mat-icon {\n  font-size: var(--bar-width);\n  width: var(--bar-width);\n  height: var(--bar-width);\n}\n\n.label {\n  font-size: 20px;\n}\n\n.horizontal {\n  &.wrapper {\n    margin: 40px auto;\n    display: flex;\n    text-align: center;\n    width: calc(var(--bar-width) * 6);\n\n    .item {\n      .bar {\n        height: 200px;\n        margin-right: 10px;\n      }\n\n      .label {\n        margin-top: 20px;\n        width: var(--bar-width);\n        height: var(--bar-width);\n        line-height: var(--bar-width);\n        border-radius: 50%;\n      }\n\n      .star {\n        width: var(--bar-width);\n        bottom: 10px;\n      }\n    }\n  }\n}\n\n.vertical {\n  &.wrapper {\n    display: flex;\n    flex-direction: column;\n\n    .item {\n      display: flex;\n      flex-direction: row-reverse;\n      align-items: center;\n      justify-content: space-between;\n\n      .bar {\n        height: var(--bar-width);\n        width: 100%;\n        margin-right: 100px;\n        margin-bottom: 10px;\n        display: flex;\n        justify-content: flex-end;\n      }\n\n      .label {\n        margin-right: 20px;\n        width: 200px;\n        word-break: break-word;\n        max-height: var(--bar-width);\n        overflow: hidden;\n        text-overflow: ellipsis;\n      }\n\n      .star {\n        height: var(--bar-width);\n        line-height: var(--bar-width);\n        left: 10px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BarChartComponent } from './bar-chart.component';\n\ndescribe('BarChartComponent', () => {\n  let component: BarChartComponent;\n  let fixture: ComponentFixture<BarChartComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [BarChartComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(BarChartComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.component.ts",
    "content": "import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n  selector: 'codelab-bar-chart',\n  templateUrl: './bar-chart.component.html',\n  styleUrls: ['./bar-chart.component.scss']\n})\nexport class BarChartComponent implements OnChanges {\n  @Input() highlightedIndex: number;\n  @Input() vertical = false;\n  @Input() data: { [k: string]: number };\n  max: number;\n  breakdown: { value: number; key: string }[];\n\n  constructor() {}\n\n  trackBy(i: number) {\n    return i;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('data' in changes) {\n      this.breakdown = Object.entries(this.data || {}).map(([key, value]) => ({\n        key,\n        value\n      }));\n      this.max = Math.max(...Object.values(this.data || {}), 0);\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BarChartComponent } from './bar-chart.component';\n\n@NgModule({\n  declarations: [BarChartComponent],\n  exports: [BarChartComponent],\n  imports: [CommonModule]\n})\nexport class BarChartModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/common.ts",
    "content": "export interface SyncPollConfig {\n  type: string;\n  key: string;\n  options?: string[];\n  question: string;\n  time?: number;\n  answer?: string;\n}\n\nexport const LETTERS = String.fromCharCode(\n  ...Array.from(new Array(25), (a, i) => i + 65)\n).split('');\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/stars/stars.component.css",
    "content": ":host.enabled .star {\n  cursor: pointer;\n}\n\n:host.enabled .star:hover {\n  color: #ff4e3d;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/stars/stars.component.html",
    "content": "<mat-icon\n  class=\"star\"\n  *ngFor=\"let star of stars\"\n  (click)=\"setValue(star)\"\n  (mouseover)=\"setHover(star)\"\n  (mouseleave)=\"setHover(0)\"\n  >{{ getStarIcon(star) }}</mat-icon\n>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/stars/stars.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StarsComponent } from './stars.component';\n\ndescribe('StarsComponent', () => {\n  let component: StarsComponent;\n  let fixture: ComponentFixture<StarsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StarsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StarsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/stars/stars.component.ts",
    "content": "import {\n  Component,\n  forwardRef,\n  HostBinding,\n  Input,\n  OnInit\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'codelab-stars',\n  templateUrl: './stars.component.html',\n  styleUrls: ['./stars.component.css'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => StarsComponent),\n      multi: true\n    }\n  ]\n})\nexport class StarsComponent implements OnInit, ControlValueAccessor {\n  @HostBinding('class.enabled') @Input() enabled = true;\n  readonly stars = Array.from(Array(5), (a, i) => i + 1);\n  rating = 0;\n  hover = 0;\n  private onChange!: (n: number) => void;\n\n  constructor() {}\n\n  getStarIcon(star: number) {\n    const rating = (this.hover || this.rating || 0) - star + 1;\n\n    if (rating <= 0) {\n      return 'star_border';\n    }\n    if (rating <= 0.5) {\n      return 'star_half';\n    }\n    return 'star';\n  }\n\n  ngOnInit() {}\n\n  registerOnChange(fn: (n: number) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {}\n\n  writeValue(number: any): void {\n    this.rating = number;\n  }\n\n  setValue(star: number) {\n    if (this.enabled) {\n      this.onChange(star);\n    }\n  }\n\n  setHover(index: number) {\n    if (this.enabled) {\n      this.hover = index;\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/stars/stars.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StarsComponent } from '@codelab/utils/src/lib/sync/components/poll/common/stars/stars.component';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n  declarations: [StarsComponent],\n  exports: [StarsComponent],\n  imports: [CommonModule, MatIconModule]\n})\nexport class StarsModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/sync-poll.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\nimport { calculateUserScore } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\n\ndescribe('SyncPoll', () => {\n  const userData = {\n    // Dog is the only one right.\n    dogIsRight: {\n      dog: { answer: 0, time: 102 },\n      cat: { answer: 1, time: 100 },\n      pikachu: { answer: 1, time: 100 },\n      mouse: { answer: 1, time: 100 }\n    },\n    catIsRightImmediately: {\n      dog: { answer: 0, time: 104 },\n      cat: { answer: 1, time: 100 },\n      pikachu: { answer: 2, time: 100 }\n    },\n    catAndDogAreRightImmediately: {\n      dog: { answer: 1, time: 100 },\n      cat: { answer: 1, time: 100 },\n      pikachu: { answer: 2, time: 100 }\n    },\n    catAndDogAreRightAtTheSameTime: {\n      dog: { answer: 1, time: 120 },\n      cat: { answer: 1, time: 120 },\n      pikachu: { answer: 2, time: 100 }\n    },\n    catAndDogAreRightAtCatIsFaster: {\n      dog: { answer: 1, time: 120 },\n      cat: { answer: 1, time: 110 },\n      pikachu: { answer: 2, time: 100 }\n    },\n    everyoneIsRight: {\n      dog: { answer: 1, time: 101 },\n      cat: { answer: 1, time: 103 },\n      pikachu: { answer: 1, time: 105 }\n    },\n    outsideOfRange: {\n      dog: { answer: 1, time: 30 },\n      cat: { answer: 1, time: 25000 },\n      pikachu: { answer: 1, time: 99 },\n      mouse: { answer: 1, time: 121 }\n    }\n  };\n\n  const testConfig: SyncPollConfig[] = [\n    {\n      key: 'a',\n      type: 'choice',\n      question: 'A???',\n      answer: 'correct',\n      options: ['correct', 'b', 'c', 'd']\n    },\n    {\n      key: 'b',\n      type: 'choice',\n      question: 'B??',\n      answer: 'correct',\n      options: ['a', 'correct', 'c', 'd']\n    },\n    {\n      key: 'c',\n      type: 'choice',\n      question: 'C???',\n      answer: 'correct',\n      options: ['a', 'b', 'correct', 'd']\n    },\n    {\n      key: 'c',\n      type: 'choice',\n      question: 'I do not have an answer',\n      options: ['a', 'b', 'correct', 'd']\n    }\n  ];\n\n  const presenterData = {\n    a: { startTime: 100 },\n    b: { startTime: 100 },\n    c: { startTime: 100 },\n    d: { startTime: 100 }\n  };\n\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  describe('calculateUserScore', () => {\n    it('gracefully handles the case where presented data has a key that presenters data does not have', () => {\n      const v = calculateUserScore(testConfig, presenterData, { goodKey: {} });\n      expect(v).toEqual({});\n    });\n\n    it('handles simple case when the first user is right', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        a: userData.dogIsRight\n      });\n      expect(v).toEqual({ dog: 100, cat: 0, pikachu: 0, mouse: 0 });\n    });\n\n    it('handles simple case when the second user is right immideately', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        b: userData.catIsRightImmediately\n      });\n      expect(v).toEqual({ dog: 0, cat: 100, pikachu: 0 });\n    });\n\n    it('two users gave correct answer immediately', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        b: userData.catAndDogAreRightImmediately\n      });\n      expect(v).toEqual({ dog: 100, cat: 100, pikachu: 0 });\n    });\n\n    it('second user gave correct answer at the same time', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        b: userData.catAndDogAreRightAtTheSameTime\n      });\n      expect(v).toEqual({ dog: 100, cat: 100, pikachu: 0 });\n    });\n\n    it('2 users gave correct answer, but cat was faster', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        b: userData.everyoneIsRight\n      });\n      expect(v).toEqual({ dog: 100, cat: 75, pikachu: 50 });\n    });\n\n    it('Multiple questions', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        a: userData.dogIsRight,\n        b: userData.everyoneIsRight\n      });\n      expect(v).toEqual({\n        mouse: 0,\n        dog: 200,\n        cat: 75,\n        pikachu: 50\n      });\n    });\n\n    it('Ignores answers that are outside of the range', () => {\n      const v = calculateUserScore(testConfig, presenterData, {\n        b: userData.outsideOfRange\n      });\n      expect(v).toEqual({ dog: 0, cat: 0, pikachu: 0, mouse: 100 });\n    });\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/common/sync-poll.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  switchMap,\n  withLatestFrom\n} from 'rxjs/operators';\nimport { combineLatest, interval, Observable, of } from 'rxjs';\nimport produce from 'immer';\nimport { database } from 'firebase/app';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { toValuesAndKeys } from '@codelab/utils/src/lib/sync/common';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\nimport { FirebaseInfoService } from '@codelab/utils/src/lib/sync/services/firebase-info.service';\n\nconst DEFAULT_TEST_TIME_SECONDS = 20;\n\nexport interface UserVote {\n  answer: number;\n  time: number;\n}\n\nfunction getScore(\n  isCorrect: boolean,\n  range: number,\n  speed: number,\n  fastest: number\n) {\n  if (!isCorrect) {\n    return 0;\n  }\n\n  if (range === 0) {\n    return 1;\n  }\n\n  return 0.5 + ((range + fastest - speed) / range) * 0.5;\n}\n\nexport function calculateUserScore(configs, presenterData, userData) {\n  return configs\n    .filter(config => presenterData[config.key])\n    .map(config => {\n      return {\n        ...config,\n        answerIndex: config.options.indexOf(config.answer),\n        startTime: presenterData[config.key].startTime\n      };\n    })\n    .flatMap(config => {\n      if (!userData[config.key]) {\n        return [];\n      }\n\n      const responses = Object.entries<UserVote>(userData[config.key]).map(\n        ([user, answer]) => {\n          const speed = answer.time - config.startTime;\n          return {\n            user,\n            isCorrect:\n              speed >= 0 &&\n              answer.answer === config.answerIndex &&\n              speed <= DEFAULT_TEST_TIME_SECONDS * 1000,\n            speed: speed\n          };\n        }\n      );\n\n      const correctResponses = responses.filter(r => r.isCorrect);\n      const slowest = Math.max(...correctResponses.map(a => a.speed), 0);\n      const fastest = Math.min(...correctResponses.map(a => a.speed), slowest);\n      const range = slowest - fastest;\n      return responses.map(r => {\n        return {\n          ...r,\n          score: 100 * getScore(r.isCorrect, range, r.speed, fastest)\n        };\n      });\n    })\n    .reduce((result, record) => {\n      result[record.user] = (result[record.user] || 0) + record.score;\n      return result;\n    }, {});\n}\n\nexport class SyncPoll {\n  readonly key = this.config.key;\n  readonly presenterSettings = this.syncDataService\n    .getPresenterObject('poll')\n    .object(this.config.key)\n    .withDefault({\n      enabled: true,\n      startTime: 0\n    });\n\n  readonly isPollEnabled$ = this.presenterSettings\n    .valueChanges()\n    .pipe(map(a => a.enabled));\n  readonly timestamp$: Observable<\n    number\n  > = this.presenterSettings.valueChanges().pipe(map(a => a.startTime));\n\n  readonly timeLeft$ = this.timestamp$.pipe(\n    switchMap(time => interval(500).pipe(map(() => time))),\n    withLatestFrom(\n      this.firebaseInfoService.offset$.pipe(distinctUntilChanged())\n    ),\n    map(([time, offset]) =>\n      Math.round(\n        Math.max(\n          0,\n          time +\n            1000 * (this.config.time || DEFAULT_TEST_TIME_SECONDS) -\n            Date.now() +\n            offset\n        ) / 1000\n      )\n    ),\n    distinctUntilChanged()\n  );\n\n  readonly $isPollRunning = this.timeLeft$.pipe(map(time => time > 0));\n  readonly hasVotes$: Observable<boolean>;\n  readonly votesCount$: Observable<number>;\n  private readonly viewerData = this.syncDataService\n    .getCurrentViewerObject('poll')\n    .object(this.key)\n    .withDefault({ answer: null, time: 0 });\n  readonly myVote$ = this.viewerData.valueChanges().pipe(map(a => a.answer));\n  private readonly votesData = this.syncDataService\n    .getAdminAllUserData('poll')\n    .object(this.key)\n    .withDefault({});\n\n  votes$ = this.votesData.valueChanges();\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    readonly config: SyncPollConfig,\n    private readonly firebaseInfoService: FirebaseInfoService\n  ) {\n    // Reformatting breaks this if it's out of the constructor.\n    this.hasVotes$ = this.votes$.pipe(map(v => Object.keys(v).length > 0));\n    this.votesCount$ = this.votes$.pipe(\n      map(votes => Object.values(votes).length)\n    );\n  }\n\n  vote(answer: number) {\n    this.viewerData.set({\n      answer,\n      time: database.ServerValue.TIMESTAMP as number\n    });\n  }\n\n  start() {\n    this.presenterSettings.updateWithCallback(\n      produce(settings => {\n        settings.startTime = database.ServerValue.TIMESTAMP;\n      })\n    );\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SyncPollService {\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    private readonly syncSessionService: SyncSessionService,\n    private readonly firebaseInfoService: FirebaseInfoService,\n    private readonly registrationService: SyncRegistrationService\n  ) {}\n\n  getPoll(config: SyncPollConfig) {\n    return new SyncPoll(this.syncDataService, config, this.firebaseInfoService);\n  }\n\n  calculateScores(syncPollConfigs: SyncPollConfig[]) {\n    const presenterData$ = this.syncDataService\n      .getPresenterObject('poll')\n      .valueChanges()\n      .pipe(filter(a => a !== null));\n    const userData$ = this.syncDataService\n      .getAdminAllUserData('poll')\n      .valueChanges()\n      .pipe(filter(a => a !== null));\n\n    const result$ = combineLatest([\n      of(syncPollConfigs),\n      presenterData$,\n      userData$\n    ]).pipe(\n      map(([configs, presenterData, userData]) =>\n        calculateUserScore(configs, presenterData, userData)\n      )\n    );\n\n    return combineLatest([result$, this.registrationService.usersMap$]).pipe(\n      map(([results, users]) => {\n        return Object.entries(users).reduce((result, [uid, name]) => {\n          result[uid] = { name, score: results[uid] || 0 };\n          return result;\n        }, {});\n      })\n    );\n  }\n\n  calculateMyScore(syncPollConfigs: SyncPollConfig[]) {\n    return combineLatest([\n      this.calculateScores(syncPollConfigs),\n      this.syncSessionService.viewerId$\n    ]).pipe(\n      map(([scoresObj, uid]) => {\n        const scores = toValuesAndKeys<{ score: number; name: string }>(\n          scoresObj\n        ).sort((a, b) => b.value.score - a.value.score);\n        const index = scores.findIndex(score => score.key === uid);\n\n        if (index === -1) {\n          return { place: 0, score: 0 };\n        }\n\n        return {\n          place: index + 1,\n          ...scores[index].value\n        };\n      })\n    );\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-admin/sync-poll-admin.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-admin/sync-poll-admin.component.html",
    "content": "<h1>{{ config.question }}</h1>\n\n<mat-card>\n  <mat-card-content *ngIf=\"config\">\n    <div>\n      <mat-checkbox\n        syncPresenterValue=\"poll/{{ config.key }}/enabled\"\n        [syncPresenterValueDefault]=\"true\"\n        [(ngModel)]=\"pollEnabled\"\n      >\n        Enable the poll\n      </mat-checkbox>\n    </div>\n    <div>\n      <button mat-button (click)=\"start()\">Start the poll</button>\n    </div>\n  </mat-card-content>\n</mat-card>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-admin/sync-poll-admin.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPollAdminComponent } from './sync-poll-admin.component';\n\ndescribe('SyncPollAdminComponent', () => {\n  let component: SyncPollAdminComponent;\n  let fixture: ComponentFixture<SyncPollAdminComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncPollAdminComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPollAdminComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-admin/sync-poll-admin.component.ts",
    "content": "import { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { database } from 'firebase/app';\nimport {\n  SyncPoll,\n  SyncPollService\n} from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\n\n@Component({\n  selector: 'codelab-sync-poll-admin',\n  templateUrl: './sync-poll-admin.component.html',\n  styleUrls: ['./sync-poll-admin.component.css']\n})\nexport class SyncPollAdminComponent implements OnInit, OnChanges {\n  @Input() config: SyncPollConfig;\n\n  pollEnabled: boolean;\n  poll!: SyncPoll;\n  private readonly timing = this.syncDataService.getPresenterObject(\n    'poll-timing'\n  );\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    private readonly pollService: SyncPollService\n  ) {}\n\n  ngOnChanges(changes) {\n    if (changes.config && changes.config.currentValue) {\n      this.timing\n        .object(changes.config.currentValue.key)\n        .set(database.ServerValue.TIMESTAMP);\n    }\n  }\n\n  ngOnInit() {\n    this.poll = this.pollService.getPoll(this.config);\n  }\n\n  start() {\n    this.poll.start();\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/choice-presenter/choice-presenter.component.css",
    "content": ".results {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  font-size: 60px;\n  text-align: center;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/choice-presenter/choice-presenter.component.html",
    "content": "<codelab-bar-chart\n  [data]=\"breakdown\"\n  [highlightedIndex]=\"answerIndex\"\n></codelab-bar-chart>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/choice-presenter/choice-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { ChoicePresenterComponent } from './choice-presenter.component';\n\ndescribe('ChoicePresenterComponent', () => {\n  let component: ChoicePresenterComponent;\n  let fixture: ComponentFixture<ChoicePresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ChoicePresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ChoicePresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/choice-presenter/choice-presenter.component.ts",
    "content": "import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { LETTERS } from '@codelab/utils/src/lib/sync/components/poll/common/common';\nimport { UserVote } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\n\n@Component({\n  selector: 'codelab-choice-presenter',\n  templateUrl: './choice-presenter.component.html',\n  styleUrls: ['./choice-presenter.component.css']\n})\nexport class ChoicePresenterComponent implements OnChanges {\n  @Input() options: string[];\n  @Input() answer: string;\n  @Input() answerIndex: number;\n  @Input() votes: { [key: string]: UserVote };\n\n  breakdown: { [key: string]: number };\n\n  constructor() {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('votes' in changes) {\n      const startMap = this.options\n        .map((a, i) => LETTERS[i])\n        .reduce((r, k) => {\n          r[k] = 0;\n          return r;\n        }, {});\n\n      this.breakdown = Object.values(this.votes || {}).reduce(\n        (result, response) => {\n          const value = response.answer;\n          result[LETTERS[value]] = (result[LETTERS[value]] || 0) + 1;\n          return result;\n        },\n        startMap\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-presenter/leaderboard-presenter.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-presenter/leaderboard-presenter.component.html",
    "content": "<codelab-bar-chart\n  *isPresenting\n  [vertical]=\"true\"\n  [data]=\"leaderboard$ | async\"\n></codelab-bar-chart>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-presenter/leaderboard-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LeaderboardPresenterComponent } from './leaderboard-presenter.component';\n\ndescribe('LeaderboardPresenterComponent', () => {\n  let component: LeaderboardPresenterComponent;\n  let fixture: ComponentFixture<LeaderboardPresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [LeaderboardPresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LeaderboardPresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-presenter/leaderboard-presenter.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { map } from 'rxjs/operators';\n\n@Component({\n  selector: 'codelab-leaderboard-presenter',\n  templateUrl: './leaderboard-presenter.component.html',\n  styleUrls: ['./leaderboard-presenter.component.css']\n})\nexport class LeaderboardPresenterComponent implements OnInit {\n  @Input() config;\n  private leaderboard$: Observable<any>;\n\n  constructor(private readonly syncPollService: SyncPollService) {}\n\n  ngOnInit() {\n    this.leaderboard$ = this.syncPollService\n      .calculateScores(this.config.filter(a => a.answer))\n      .pipe(\n        map(a => {\n          return Object.values<{ name: string; score: number }>(a).reduce(\n            (result, value) => {\n              result[value.name] = value.score;\n              return result;\n            },\n            {}\n          );\n        })\n      );\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-viewer/leaderboard-viewer.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-viewer/leaderboard-viewer.component.html",
    "content": "<div *ngIf=\"myScore$ | async as result\">\n  <h1>Place: {{ result.place }}</h1>\n  <h1>Score: {{ result.score | number: '1.2-2' }}</h1>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-viewer/leaderboard-viewer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LeaderboardViewerComponent } from './leaderboard-viewer.component';\n\ndescribe('LeaderboardViewerComponent', () => {\n  let component: LeaderboardViewerComponent;\n  let fixture: ComponentFixture<LeaderboardViewerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [LeaderboardViewerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LeaderboardViewerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard-viewer/leaderboard-viewer.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\n\n@Component({\n  selector: 'codelab-leaderboard-viewer',\n  templateUrl: './leaderboard-viewer.component.html',\n  styleUrls: ['./leaderboard-viewer.component.css']\n})\nexport class LeaderboardViewerComponent implements OnInit {\n  @Input() config;\n\n  myScore$: Observable<any>;\n\n  constructor(private readonly syncPollService: SyncPollService) {}\n\n  ngOnInit() {\n    this.myScore$ = this.syncPollService.calculateMyScore(\n      this.config.filter(a => a.answer)\n    );\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.component.html",
    "content": "<codelab-leaderboard-presenter\n  *isPresenting\n  [config]=\"config\"\n></codelab-leaderboard-presenter>\n<codelab-leaderboard-viewer\n  *isViewing\n  [config]=\"config\"\n></codelab-leaderboard-viewer>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { LeaderboardComponent } from './leaderboard.component';\n\ndescribe('LeaderboardComponent', () => {\n  let component: LeaderboardComponent;\n  let fixture: ComponentFixture<LeaderboardComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [LeaderboardComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(LeaderboardComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { Observable } from 'rxjs';\n\ninterface Response {\n  correct: boolean;\n  key: string;\n  speed: number;\n  score: number;\n}\n\n@Component({\n  selector: 'codelab-leaderboard',\n  templateUrl: './leaderboard.component.html',\n  styleUrls: ['./leaderboard.component.css']\n})\nexport class LeaderboardComponent implements OnInit {\n  @Input() config;\n  private leaderboard$: Observable<any>;\n\n  constructor(private readonly syncPollService: SyncPollService) {}\n\n  ngOnInit() {\n    this.leaderboard$ = this.syncPollService.calculateScores(\n      this.config.filter(a => a.answer)\n    );\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LeaderboardComponent } from './leaderboard.component';\nimport { BarChartModule } from '@codelab/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { LeaderboardPresenterComponent } from './leaderboard-presenter/leaderboard-presenter.component';\nimport { LeaderboardViewerComponent } from './leaderboard-viewer/leaderboard-viewer.component';\n\n@NgModule({\n  declarations: [\n    LeaderboardComponent,\n    LeaderboardPresenterComponent,\n    LeaderboardViewerComponent\n  ],\n  exports: [LeaderboardComponent],\n  imports: [CommonModule, BarChartModule, SyncDirectivesModule]\n})\nexport class LeaderboardModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/stars-presenter/stars-presenter.component.css",
    "content": "::ng-deep :root {\n  --bar-width: 50px;\n}\n\n.wrapper {\n  margin: 40px auto;\n  display: flex;\n  text-align: center;\n  width: calc(var(--bar-width) * 6);\n}\n\n.filler {\n  width: var(--bar-width);\n  background: #fff;\n  position: relative;\n  transition: height 1s ease-out;\n}\n\n.bar {\n  width: var(--bar-width);\n  height: 200px;\n  background: #ff4e3d;\n  margin-right: 10px;\n}\n\n.star {\n  width: var(--bar-width);\n  position: absolute;\n  bottom: 10px;\n  text-align: center;\n}\n\ncodelab-stars {\n  display: block;\n  margin: 0 auto;\n  width: calc(var(--bar-width) * 5);\n  margin-bottom: 60px;\n}\n\n::ng-deep codelab-stars .mat-icon {\n  font-size: var(--bar-width);\n  width: var(--bar-width);\n  height: var(--bar-width);\n}\n\n.label {\n  width: var(--bar-width);\n  font-size: 20px;\n  margin-top: 20px;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/stars-presenter/stars-presenter.component.html",
    "content": "<codelab-stars readonly [ngModel]=\"average\" [enabled]=\"false\"></codelab-stars>\n\n<div class=\"wrapper\">\n  <div *ngFor=\"let star of breakdown; trackBy: trackBy; let i = index\">\n    <div class=\"bar\">\n      <div class=\"filler\" [style.height]=\"((max - star) / max) * 100 + '%'\">\n        <div class=\"star\" *ngIf=\"star > 0\">{{ star }}</div>\n      </div>\n    </div>\n    <div class=\"label\">{{ i + 1 }}</div>\n  </div>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/stars-presenter/stars-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { StarsPresenterComponent } from './stars-presenter.component';\n\ndescribe('StarsPresenterComponent', () => {\n  let component: StarsPresenterComponent;\n  let fixture: ComponentFixture<StarsPresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [StarsPresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(StarsPresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/stars-presenter/stars-presenter.component.ts",
    "content": "import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { sum } from '@codelab/utils/src/lib/sync/common';\n\n@Component({\n  selector: 'codelab-stars-presenter',\n  templateUrl: './stars-presenter.component.html',\n  styleUrls: ['./stars-presenter.component.css']\n})\nexport class StarsPresenterComponent implements OnChanges {\n  @Input() votes: { [k: string]: number };\n\n  average: number;\n  breakdown: number[];\n  max: number;\n\n  constructor() {}\n\n  trackBy(i: number) {\n    return i;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('votes' in changes) {\n      const values = Object.values(this.votes);\n      this.average = sum(values) / values.length;\n\n      this.breakdown = values\n        .reduce(\n          (r, a) => {\n            r[a]++;\n            return r;\n          },\n          Array.from(Array(6), () => 0)\n        )\n        .slice(1);\n      this.max = Math.max(...this.breakdown);\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/sync-poll-presenter.component.css",
    "content": ".bunny {\n  background-image: url('../../../images/bunny.png');\n  width: 406px;\n  height: 442px;\n  margin: 0 auto;\n}\n\n.question,\n.timer {\n  text-align: center;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/sync-poll-presenter.component.html",
    "content": "<div class=\"time\">\n  <div *ngIf=\"poll.$isPollRunning | async; else timeOver\">\n    <h2 class=\"timer\">⏱ {{ poll.timeLeft$ | async }} seconds left</h2>\n  </div>\n</div>\n<ng-template #timeOver>\n  <h2 class=\"timer\">⏱ Time is over</h2>\n</ng-template>\n\n<h1 class=\"question\">{{ config.question }}</h1>\n\n<ng-container *ngIf=\"poll.isPollEnabled$ | async; else wait\">\n  <ng-container *ngIf=\"poll.hasVotes$ | async; else waiting\">\n    <div *ngIf=\"poll.config.answer && (poll.$isPollRunning | async) === true\">\n      <h2>Collecting answers</h2>\n      <h2>{{ poll.votesCount$ | async }} votes</h2>\n    </div>\n    <div\n      class=\"results\"\n      *ngIf=\"!poll.config.answer || (poll.$isPollRunning | async) === false\"\n    >\n      <codelab-choice-presenter\n        *ngIf=\"config.type === 'choice'\"\n        [answerIndex]=\"\n          (poll.timestamp$ | async) > 0 &&\n          (poll.$isPollRunning | async) === false &&\n          getAnswerIndex()\n        \"\n        [votes]=\"poll.votes$ | async\"\n        [options]=\"poll.config.options\"\n      ></codelab-choice-presenter>\n      <codelab-stars-presenter\n        *ngIf=\"config.type === 'stars'\"\n        [votes]=\"poll.votes$ | async\"\n      ></codelab-stars-presenter>\n    </div>\n  </ng-container>\n  <ng-template #waiting>\n    <div *ngIf=\"poll.$isPollRunning | async\">\n      <h1 style=\"text-align: center;\">Waiting for votes...</h1>\n      <div class=\"bunny\"></div>\n    </div>\n  </ng-template>\n</ng-container>\n\n<ng-template #wait>\n  Poll has not been started yet.\n</ng-template>\n\n<div\n  *ngIf=\"poll.isPollEnabled$ | async; else wait\"\n  [class.disabled]=\"(poll.$isPollRunning | async) !== true\"\n>\n  <codelab-sync-poll-viewer-choice\n    [myVote]=\"\n      (poll.timestamp$ | async) > 0 &&\n      (poll.$isPollRunning | async) === false &&\n      getAnswerIndex()\n    \"\n    [options]=\"config.options\"\n    (vote)=\"poll.vote($event)\"\n    *ngIf=\"config.type === 'choice'\"\n  >\n  </codelab-sync-poll-viewer-choice>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/sync-poll-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPollPresenterComponent } from './sync-poll-presenter.component';\n\ndescribe('SyncPollPresenterComponent', () => {\n  let component: SyncPollPresenterComponent;\n  let fixture: ComponentFixture<SyncPollPresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncPollPresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPollPresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-presenter/sync-poll-presenter.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\nimport {\n  SyncPoll,\n  SyncPollService\n} from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\n\n@Component({\n  selector: 'codelab-sync-poll-presenter',\n  templateUrl: './sync-poll-presenter.component.html',\n  styleUrls: ['./sync-poll-presenter.component.css']\n})\nexport class SyncPollPresenterComponent implements OnInit {\n  @Input() config: SyncPollConfig;\n  poll: SyncPoll;\n\n  constructor(private readonly pollService: SyncPollService) {}\n\n  getAnswerIndex() {\n    return this.config.options.indexOf(this.config.answer);\n  }\n\n  ngOnInit() {\n    this.poll = this.pollService.getPoll(this.config);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer-choice/sync-poll-viewer-choice.component.css",
    "content": ".button-wrapper {\n  margin-bottom: 10px;\n}\n\n.button-wrapper button {\n  width: 100%;\n  position: relative;\n}\n\n.letter {\n  position: absolute;\n  left: -10px;\n  top: 0;\n  width: 32px;\n  border: 1px #ddd solid;\n  border-radius: 10px;\n  background: #fff;\n  transform: rotate(-5deg);\n  color: rgba(0, 0, 0, 0.87);\n}\n\nbutton[disabled].selected {\n  background: #ff4e3d;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer-choice/sync-poll-viewer-choice.component.html",
    "content": "<div *ngFor=\"let answer of options; let i = index\" class=\"button-wrapper\">\n  <button\n    [disabled]=\"!enabled\"\n    (click)=\"enabled && vote.emit(i)\"\n    mat-raised-button\n    [color]=\"i === myVote ? 'warn' : undefined\"\n    [class.selected]=\"i === myVote\"\n    class=\"answer\"\n  >\n    <span class=\"letter\">{{ LETTERS[i] }}</span>\n    {{ answer }}\n  </button>\n</div>\n\n<button\n  *ngIf=\"myVote !== null\"\n  [disabled]=\"!enabled\"\n  (click)=\"enabled && vote.emit(null)\"\n  mat-button\n  class=\"answer\"\n>\n  Clear vote\n</button>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer-choice/sync-poll-viewer-choice.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPollViewerChoiceComponent } from './sync-poll-viewer-choice.component';\n\ndescribe('SyncPollViewerChoiceComponent', () => {\n  let component: SyncPollViewerChoiceComponent;\n  let fixture: ComponentFixture<SyncPollViewerChoiceComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncPollViewerChoiceComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPollViewerChoiceComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer-choice/sync-poll-viewer-choice.component.ts",
    "content": "import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { LETTERS } from '../../common/common';\n\n@Component({\n  selector: 'codelab-sync-poll-viewer-choice',\n  templateUrl: './sync-poll-viewer-choice.component.html',\n  styleUrls: ['./sync-poll-viewer-choice.component.css']\n})\nexport class SyncPollViewerChoiceComponent {\n  readonly LETTERS = LETTERS;\n  @Input() myVote: number;\n  @Input() options: string[];\n  @Input() enabled = true;\n  @Output() vote = new EventEmitter<number | null>();\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer.component.css",
    "content": ".answer {\n  margin-right: 10px;\n}\n\ncodelab-stars {\n  width: 300px;\n  margin: 0 auto;\n  display: block;\n  margin-top: 60px;\n}\n\n::ng-deep codelab-stars .mat-icon {\n  font-size: 50px;\n  width: 50px;\n  height: 50px;\n  margin-right: 10px;\n}\n\n.time {\n  text-align: center;\n}\n\n.disabled {\n  opacity: 0.3;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer.component.html",
    "content": "<div class=\"time\">\n  <div *ngIf=\"poll.$isPollRunning | async; else timeOver\">\n    <h2>⏱ {{ poll.timeLeft$ | async }} seconds left</h2>\n  </div>\n</div>\n<ng-template #timeOver>\n  <h2>⏱ Time is over</h2>\n</ng-template>\n\n<h1>{{ config.question }}</h1>\n\n<div\n  *ngIf=\"poll.isPollEnabled$ | async; else wait\"\n  [class.disabled]=\"(poll.$isPollRunning | async) !== true\"\n>\n  <codelab-stars\n    [enabled]=\"poll.$isPollRunning | async\"\n    *ngIf=\"config.type === 'stars'\"\n    [(ngModel)]=\"stars\"\n    [syncViewerValue]=\"'poll/' + this.poll.key\"\n  ></codelab-stars>\n\n  <codelab-sync-poll-viewer-choice\n    [myVote]=\"poll.myVote$ | async\"\n    [enabled]=\"poll.$isPollRunning | async\"\n    [options]=\"config.options\"\n    (vote)=\"poll.vote($event)\"\n    *ngIf=\"config.type === 'choice'\"\n  >\n  </codelab-sync-poll-viewer-choice>\n</div>\n\n<ng-template #wait>\n  <h1>not started</h1>\n</ng-template>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPollViewerComponent } from './sync-poll-viewer.component';\n\ndescribe('SyncPollViewerComponent', () => {\n  let component: SyncPollViewerComponent;\n  let fixture: ComponentFixture<SyncPollViewerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncPollViewerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPollViewerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\nimport {\n  SyncPoll,\n  SyncPollService\n} from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\n\n@Component({\n  selector: 'codelab-sync-poll-viewer',\n  templateUrl: './sync-poll-viewer.component.html',\n  styleUrls: ['./sync-poll-viewer.component.css']\n})\nexport class SyncPollViewerComponent implements OnInit {\n  @Input() config: SyncPollConfig;\n  stars: string;\n  poll: SyncPoll;\n\n  constructor(private readonly pollService: SyncPollService) {}\n\n  ngOnInit() {\n    this.poll = this.pollService.getPoll(this.config);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll.component.css",
    "content": "h1 {\n  text-align: center;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll.component.html",
    "content": "<codelab-sync-poll-presenter\n  *isPresenting\n  [config]=\"poll\"\n></codelab-sync-poll-presenter>\n<codelab-sync-poll-admin *isAdmin [config]=\"poll\"></codelab-sync-poll-admin>\n<codelab-sync-poll-viewer *isViewing [config]=\"poll\"></codelab-sync-poll-viewer>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPollComponent } from './sync-poll.component';\nimport { SyncPollModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll.module';\n\ndescribe('SyncPollComponent', () => {\n  let component: SyncPollComponent;\n  let fixture: ComponentFixture<SyncPollComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SyncPollModule]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPollComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\n\n/**\n * Coming soon.\n */\n@Component({\n  selector: 'codelab-poll',\n  templateUrl: './sync-poll.component.html',\n  styleUrls: ['./sync-poll.component.css'],\n  providers: [SyncPollService]\n})\nexport class SyncPollComponent {\n  @Input() poll: SyncPollConfig;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/poll/sync-poll.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { SyncPollAdminComponent } from '@codelab/utils/src/lib/sync/components/poll/sync-poll-admin/sync-poll-admin.component';\nimport { SyncPollPresenterComponent } from '@codelab/utils/src/lib/sync/components/poll/sync-poll-presenter/sync-poll-presenter.component';\nimport { SyncPollViewerComponent } from '@codelab/utils/src/lib/sync/components/poll/sync-poll-viewer/sync-poll-viewer.component';\nimport { SyncPollComponent } from '@codelab/utils/src/lib/sync/components/poll/sync-poll.component';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { FormsModule } from '@angular/forms';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\n\nimport { StarsModule } from '@codelab/utils/src/lib/sync/components/poll/common/stars/stars.module';\nimport { StarsPresenterComponent } from './sync-poll-presenter/stars-presenter/stars-presenter.component';\nimport { ChoicePresenterComponent } from './sync-poll-presenter/choice-presenter/choice-presenter.component';\nimport { SyncPollViewerChoiceComponent } from './sync-poll-viewer/sync-poll-viewer-choice/sync-poll-viewer-choice.component';\nimport { BarChartModule } from '@codelab/utils/src/lib/sync/components/poll/common/bar-chart/bar-chart.module';\nimport { LeaderboardModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.module';\n\n@NgModule({\n  declarations: [\n    SyncPollAdminComponent,\n    SyncPollPresenterComponent,\n    SyncPollViewerComponent,\n    SyncPollComponent,\n    StarsPresenterComponent,\n    ChoicePresenterComponent,\n    SyncPollViewerChoiceComponent\n  ],\n  exports: [SyncPollComponent],\n  imports: [\n    CommonModule,\n    MatCardModule,\n    MatCheckboxModule,\n    SyncDirectivesModule,\n    AngularFireDatabaseModule,\n    FormsModule,\n    MatButtonModule,\n    MatIconModule,\n    StarsModule,\n    BarChartModule,\n    MatTabsModule,\n    LeaderboardModule\n  ]\n})\nexport class SyncPollModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/common.ts",
    "content": "export enum QuestionStatus {\n  APPROVED = 'approved',\n  NEW = 'new',\n  ARCHIVED = 'archived'\n}\n\nexport const statuses = Object.values(QuestionStatus);\n\nexport interface QuestionDb {\n  question: string;\n  score: number;\n  time: number;\n  status: QuestionStatus;\n}\n\nexport interface Question extends QuestionDb {\n  key: string;\n  starred: boolean;\n  public: boolean;\n  myVote: 1 | 0 | -1;\n  author: string;\n  displayName: string;\n}\n\nexport interface QuestionConfig {\n  starredQuestionKey: string;\n  requireApproval: boolean;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question/question.component.html",
    "content": "<mat-card class=\"question\" *ngIf=\"question\">\n  <mat-card-content>\n    <div class=\"question-body-wrapper\">\n      <div class=\"questions-score\">{{ question.score }}</div>\n      <div class=\"question-body\">\n        <div class=\"author\">{{ question.displayName }}</div>\n        <div>{{ question.question }}</div>\n      </div>\n    </div>\n  </mat-card-content>\n\n  <mat-card-actions *ngIf=\"showControls\">\n    <ng-container *isViewing>\n      <button\n        mat-icon-button\n        class=\"upvote\"\n        (click)=\"questionsService.setVote(question.key, 1)\"\n        [class.voted]=\"question.myVote === 1\"\n      >\n        <mat-icon aria-hidden=\"false\" aria-label=\"Example home icon\"\n          >thumb_up</mat-icon\n        >\n      </button>\n      <span>{{ question.score }}</span>\n      <button\n        mat-icon-button\n        class=\"downvote\"\n        (click)=\"questionsService.setVote(question.key, -1)\"\n        [class.voted]=\"question.myVote === -1\"\n      >\n        <mat-icon aria-hidden=\"false\" aria-label=\"Example home icon\"\n          >thumb_down</mat-icon\n        >\n      </button>\n    </ng-container>\n    <div *isAdmin>\n      <ng-container *ngFor=\"let status of statuses\">\n        <button\n          mat-raised-button\n          *ngIf=\"question.status !== status\"\n          (click)=\"questionsService.updateQuestionStatus(question, status)\"\n        >\n          {{ status }}\n        </button>\n      </ng-container>\n      <button\n        mat-icon-button\n        *ngIf=\"question.status === QuestionStatus.APPROVED\"\n        (click)=\"\n          questionsService.starQuestion(question.starred ? null : question.key)\n        \"\n      >\n        <mat-icon>{{ question.starred ? 'star' : 'star_border' }}</mat-icon>\n      </button>\n    </div>\n  </mat-card-actions>\n</mat-card>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question/question.component.scss",
    "content": "mat-card {\n  margin-bottom: 10px;\n}\n\n.questions {\n  display: flex;\n}\n\n.upvote,\n.downvote {\n  color: #999;\n}\n\n.voted {\n  color: #000;\n}\n\nh2 {\n  margin-top: 30px;\n}\n\n.question-body {\n  white-space: pre-line;\n}\n\n:host.starred > mat-card {\n  background: #e7ff00;\n\n  .question-body {\n    font-size: 20px;\n  }\n}\n\n.question-body-wrapper {\n  display: flex;\n  max-height: 200px;\n  overflow: hidden;\n}\n\n.questions-score {\n  font-size: 16px;\n  width: 30px;\n  max-height: 30px;\n  background: #811b0a;\n  color: #fff;\n  margin-right: 10px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 32px;\n  min-width: 30px;\n}\n\n.author {\n  font-weight: bold;\n  margin-bottom: 4px;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question/question.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { QuestionComponent } from './question.component';\n\ndescribe('QuestionComponent', () => {\n  let component: QuestionComponent;\n  let fixture: ComponentFixture<QuestionComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QuestionComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QuestionComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question/question.component.ts",
    "content": "import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n  Question,\n  QuestionStatus,\n  statuses\n} from '@codelab/utils/src/lib/sync/components/questions/common/common';\nimport { QuestionsService } from '@codelab/utils/src/lib/sync/components/questions/common/questions.service';\n\n@Component({\n  selector: 'codelab-question',\n  templateUrl: './question.component.html',\n  styleUrls: ['./question.component.scss']\n})\nexport class QuestionComponent {\n  @Input() question: Question;\n  @Input() showControls = true;\n  @Output() vote = new EventEmitter<number>();\n  readonly statuses = statuses;\n  readonly QuestionStatus = QuestionStatus;\n\n  constructor(public readonly questionsService: QuestionsService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question-list/question-list.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question-list/question-list.component.html",
    "content": "<!--TODO(kirjs): add back @questionList. seems like Ivy broke it. -->\n<div *ngFor=\"let question of questions; trackBy: trackBy\">\n  <codelab-question\n    tabindex=\"0\"\n    [question]=\"question\"\n    *ngIf=\"!question.starred\"\n  ></codelab-question>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question-list/question-list.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport { QuestionsComponent } from '@codelab/utils/src/lib/sync/components/questions/questions.component';\n\ndescribe('QuestionsComponent', () => {\n  let component: QuestionsComponent;\n  let fixture: ComponentFixture<QuestionsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QuestionsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QuestionsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/question-list/question-list.component.ts",
    "content": "import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Question } from '@codelab/utils/src/lib/sync/components/questions/common/common';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n  selector: 'codelab-question-list',\n  templateUrl: './question-list.component.html',\n  styleUrls: ['./question-list.component.css'],\n  animations: [\n    trigger('questionList', [\n      transition(':enter', [\n        style({ transform: 'scale(0.5)', opacity: 0 }), // initial\n        animate(\n          '0.5s cubic-bezier(.8, -0.6, 0.2, 1.5)',\n          style({ transform: 'scale(1)', opacity: 1 })\n        ) // final\n      ]),\n      transition(':leave', [\n        style({ transform: 'scale(1)', opacity: 1, height: '*' }),\n        animate(\n          '1s cubic-bezier(.8, -0.6, 0.2, 1.5)',\n          style({\n            transform: 'scale(0.5)',\n            opacity: 0,\n            height: '0px',\n            margin: '0px'\n          })\n        )\n      ])\n    ])\n  ]\n})\nexport class QuestionListComponent {\n  @Input() questions: Question[];\n  @Output() vote = new EventEmitter<{ vote: number; question: Question }>();\n\n  constructor() {}\n\n  trackBy(i, question) {\n    console.log(question.key, '$$');\n    return question.key;\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/questions.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { QuestionsService } from './questions.service';\n\ndescribe('QuestionsService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: QuestionsService = TestBed.inject(QuestionsService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/common/questions.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { combineLatest, Observable } from 'rxjs';\nimport produce from 'immer';\nimport {\n  Question,\n  QuestionDb,\n  QuestionStatus\n} from '@codelab/utils/src/lib/sync/components/questions/common/common';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\n\nconst groupVotesByQuestionId = a => {\n  return Object.values(a).reduce(\n    (a, r) =>\n      Object.entries(r).reduce((a, [key, value]) => {\n        a[key] = (a[key] || 0) + value;\n        return a;\n      }, a),\n    {}\n  );\n};\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class QuestionsService {\n  readonly key = 'qna7';\n\n  readonly presenterObject = this.syncDataService\n    .getPresenterObject(this.key)\n    .withDefault({\n      requireApproval: true,\n      starredQuestionKey: null\n    });\n\n  readonly requireApproval$ = this.presenterObject\n    .valueChanges()\n    .pipe(map(a => a.requireApproval));\n\n  private readonly questionsObject = this.syncDataService\n    .getAdminAllUserData(this.key)\n    .withDefault({});\n\n  public readonly allQuestions$ = this.questionsObject.valueChanges().pipe(\n    map(values => {\n      return Object.entries(values || {})\n        .map(([author, value]) => {\n          return Object.entries(value.questions).map(([key, question]) => ({\n            ...question,\n            author,\n            key\n          }));\n        })\n        .flat();\n    })\n  );\n\n  private readonly starredQuestionKeyData = this.presenterObject.object(\n    'starredQuestionKey'\n  );\n\n  private readonly votesKey = 'votes';\n\n  private readonly votes$ = this.syncDataService\n    .getAdminAllUserData(this.votesKey)\n    .withDefault({})\n    .valueChanges()\n    .pipe(map(groupVotesByQuestionId));\n\n  private readonly myQuestionsList = this.syncDataService\n    .getCurrentViewerObject(this.key)\n    .list('questions');\n\n  readonly myUnapprovedQuestions$ = this.myQuestionsList\n    .valueChanges()\n    .pipe(\n      map((questions: QuestionDb) =>\n        Object.values(questions).filter(\n          a => a.status !== QuestionStatus.APPROVED\n        )\n      )\n    );\n  private readonly myVotesObject = this.syncDataService\n    .getCurrentViewerObject(this.votesKey)\n    .withDefault({});\n\n  readonly questions$: Observable<Question[]> = combineLatest([\n    this.allQuestions$,\n    this.votes$,\n    this.myVotesObject.valueChanges(),\n    this.starredQuestionKeyData.valueChanges(),\n    this.presenterObject.valueChanges(),\n    this.registrationService.usersMap$\n  ]).pipe(\n    map(\n      ([\n        questions,\n        votes,\n        myVotes,\n        starredQuestionKey,\n        presenterData,\n        usersMap\n      ]) => {\n        return questions.map(q => {\n          const status = q.status;\n          return {\n            ...q,\n            displayName: usersMap[q.author],\n            myVote: myVotes[q.key],\n            score: votes[q.key] || 0,\n            starred: starredQuestionKey === q.key,\n            public: presenterData.requireApproval\n              ? status === QuestionStatus.APPROVED\n              : status === QuestionStatus.APPROVED ||\n                status === QuestionStatus.NEW\n          } as Question;\n        });\n      }\n    ),\n    map(questions => {\n      return questions.sort((a, b) => b.score - a.score || a.time - b.time);\n    })\n  );\n\n  publicQuestions$ = this.questions$.pipe(\n    map(questions => questions.filter(q => q.public))\n  );\n\n  starredQuestion$ = combineLatest([\n    this.starredQuestionKeyData.valueChanges(),\n    this.questions$\n  ]).pipe(\n    map(([starredQuestionKey, questions]) => {\n      return starredQuestionKey\n        ? questions.find(q => q.key === starredQuestionKey)\n        : null;\n    })\n  );\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    private readonly registrationService: SyncRegistrationService\n  ) {}\n\n  addQuestion(question: string) {\n    this.myQuestionsList.push({\n      question,\n      score: 0,\n      time: Date.now(),\n      status: QuestionStatus.NEW\n    });\n  }\n\n  setVote(key: string, score: number) {\n    this.myVotesObject.updateWithCallback(\n      produce(upvotes => {\n        upvotes[key] = upvotes[key] === score ? 0 : score;\n      })\n    );\n  }\n\n  updateQuestionStatus(question: Question, status: QuestionStatus) {\n    this.syncDataService\n      .getViewerObject(this.key, question.author)\n      .withDefault({})\n      .updateWithCallback(a => {\n        a.questions[question.key].status = status;\n        return a;\n      });\n  }\n\n  starQuestion(starredQuestionKey: string) {\n    this.starredQuestionKeyData.set(starredQuestionKey);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-admin/questions-admin.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-admin/questions-admin.component.html",
    "content": "<h2>Admin</h2>\n\n<mat-tab-group>\n  <ng-container *ngIf=\"questionsByStatus$ | async as questionsByStatus\">\n    <ng-container *ngFor=\"let status of statuses\">\n      <mat-tab\n        [label]=\"status + ' (' + questionsByStatus[status]?.length + ')'\"\n        *ngIf=\"questionsByStatus[status]?.length\"\n      >\n        <codelab-question\n          *ngIf=\"questionsService.starredQuestion$ | async as question\"\n          tabindex=\"0\"\n          [question]=\"question\"\n          class=\"starred\"\n        ></codelab-question>\n\n        <codelab-question-list [questions]=\"questionsByStatus[status]\">\n        </codelab-question-list>\n      </mat-tab>\n    </ng-container>\n  </ng-container>\n  <mat-tab>\n    <ng-template mat-tab-label>\n      <mat-icon>settings</mat-icon>\n    </ng-template>\n\n    <mat-card>\n      <mat-card-content>\n        <mat-checkbox\n          [(ngModel)]=\"requireApproval\"\n          [syncPresenterValueDefault]=\"true\"\n          syncPresenterValue=\"{{ questionsService.key }}/requireApproval\"\n        >\n          Require approval\n        </mat-checkbox>\n      </mat-card-content>\n    </mat-card>\n  </mat-tab>\n</mat-tab-group>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-admin/questions-admin.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { QuestionsAdminComponent } from './questions-admin.component';\n\ndescribe('QuestionsAdminComponent', () => {\n  let component: QuestionsAdminComponent;\n  let fixture: ComponentFixture<QuestionsAdminComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QuestionsAdminComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QuestionsAdminComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-admin/questions-admin.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { QuestionsService } from '@codelab/utils/src/lib/sync/components/questions/common/questions.service';\nimport { map } from 'rxjs/operators';\nimport { statuses } from '@codelab/utils/src/lib/sync/components/questions/common/common';\n\n@Component({\n  selector: 'codelab-questions-admin',\n  templateUrl: './questions-admin.component.html',\n  styleUrls: ['./questions-admin.component.css'],\n  providers: [QuestionsService]\n})\nexport class QuestionsAdminComponent {\n  readonly statuses = statuses;\n\n  requireApproval: boolean;\n\n  readonly questionsByStatus$ = this.questionsService.questions$.pipe(\n    map(questions => {\n      return questions.reduce((result, question) => {\n        result[question.status] = result[question.status] || [];\n        result[question.status].push(question);\n        return result;\n      }, {});\n    })\n  );\n\n  constructor(readonly questionsService: QuestionsService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-presenter/questions-presenter.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-presenter/questions-presenter.component.html",
    "content": "<ng-container *isPresenting>\n  <h2>Questions</h2>\n\n  <ng-container *ngIf=\"questionsService.publicQuestions$ | async as questions\">\n    <codelab-question\n      *ngIf=\"questionsService.starredQuestion$ | async as question\"\n      tabindex=\"0\"\n      [question]=\"question\"\n      class=\"starred\"\n    ></codelab-question>\n\n    <codelab-question-list [questions]=\"questions\"> </codelab-question-list>\n    <div *ngIf=\"questions.length === 0\">\n      Waiting for questions...\n    </div>\n  </ng-container>\n</ng-container>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-presenter/questions-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { QuestionsPresenterComponent } from './questions-presenter.component';\n\ndescribe('QuestionsPresenterComponent', () => {\n  let component: QuestionsPresenterComponent;\n  let fixture: ComponentFixture<QuestionsPresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QuestionsPresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QuestionsPresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-presenter/questions-presenter.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { QuestionsService } from '@codelab/utils/src/lib/sync/components/questions/common/questions.service';\n\n@Component({\n  selector: 'codelab-questions-presenter',\n  templateUrl: './questions-presenter.component.html',\n  styleUrls: ['./questions-presenter.component.css']\n})\nexport class QuestionsPresenterComponent {\n  constructor(public readonly questionsService: QuestionsService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-viewer/questions-viewer.component.css",
    "content": "textarea,\nmat-form-field {\n  width: 100%;\n}\n\n.question-body {\n  white-space: pre-line;\n}\n\n.question-form {\n  margin-bottom: 20px;\n}\n\nmat-expansion-panel {\n  margin-bottom: 20px;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-viewer/questions-viewer.component.html",
    "content": "<h2>Ask a question:</h2>\n<div class=\"question-form\">\n  <mat-form-field>\n    <mat-label>Your question:</mat-label>\n    <textarea\n      maxlength=\"280\"\n      style=\"height: 120px;\"\n      required\n      matInput\n      #q\n      (keydown.control.enter)=\"addQuestion(q)\"\n      (keydown.command.enter)=\"addQuestion(q)\"\n    ></textarea>\n  </mat-form-field>\n  <button\n    mat-raised-button\n    [disabled]=\"q.value.trim() === ''\"\n    (click)=\"addQuestion(q)\"\n  >\n    Submit\n  </button>\n</div>\n\n<ng-container *ngIf=\"questionsService.requireApproval$ | async\">\n  <ng-container\n    *ngIf=\"questionsService.myUnapprovedQuestions$ | async as unapproved\"\n  >\n    <mat-expansion-panel *ngIf=\"unapproved.length\">\n      <mat-expansion-panel-header>\n        <mat-panel-title>\n          Your questions pending approval: {{ unapproved.length }}\n        </mat-panel-title>\n      </mat-expansion-panel-header>\n\n      <ng-container *ngFor=\"let question of unapproved\">\n        <codelab-question\n          [question]=\"question\"\n          [showControls]=\"false\"\n        ></codelab-question>\n      </ng-container>\n    </mat-expansion-panel>\n  </ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"questionsService.publicQuestions$ | async as questions\">\n  <ng-container *ngIf=\"questions.length\">\n    <h2>All questions:</h2>\n    <codelab-question\n      *ngIf=\"questionsService.starredQuestion$ | async as question\"\n      tabindex=\"0\"\n      [question]=\"question\"\n      class=\"starred\"\n    ></codelab-question>\n\n    <codelab-question-list [questions]=\"questions\"></codelab-question-list>\n  </ng-container>\n</ng-container>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-viewer/questions-viewer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { QuestionsViewerComponent } from './questions-viewer.component';\n\ndescribe('QuestionsViewerComponent', () => {\n  let component: QuestionsViewerComponent;\n  let fixture: ComponentFixture<QuestionsViewerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QuestionsViewerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QuestionsViewerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions-viewer/questions-viewer.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { QuestionsService } from '@codelab/utils/src/lib/sync/components/questions/common/questions.service';\n\n@Component({\n  selector: 'codelab-questions-viewer',\n  templateUrl: './questions-viewer.component.html',\n  styleUrls: ['./questions-viewer.component.css']\n})\nexport class QuestionsViewerComponent {\n  constructor(public readonly questionsService: QuestionsService) {}\n\n  addQuestion(input: HTMLTextAreaElement) {\n    const question = input.value.trim();\n    if (question !== '') {\n      this.questionsService.addQuestion(question);\n      input.value = '';\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions.component.css",
    "content": ".question {\n  margin-bottom: 4px;\n}\n\n.upvote.voted {\n  background: #a6e0c1;\n}\n.downvote.voted {\n  background: #ffaf9e;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions.component.html",
    "content": "<codelab-questions-viewer *isViewing></codelab-questions-viewer>\n<codelab-questions-presenter *isPresenting></codelab-questions-presenter>\n<codelab-questions-admin *isAdmin></codelab-questions-admin>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { QuestionsComponent } from './questions.component';\n\ndescribe('QuestionsComponent', () => {\n  let component: QuestionsComponent;\n  let fixture: ComponentFixture<QuestionsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [QuestionsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(QuestionsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { QuestionsService } from '@codelab/utils/src/lib/sync/components/questions/common/questions.service';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\n\n@Component({\n  selector: 'codelab-questions',\n  templateUrl: './questions.component.html',\n  styleUrls: ['./questions.component.css'],\n  providers: [QuestionsService, SyncDataService]\n})\nexport class QuestionsComponent {\n  constructor(public readonly questionsService: QuestionsService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/questions/questions.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { QuestionsComponent } from '@codelab/utils/src/lib/sync/components/questions/questions.component';\nimport { QuestionsAdminComponent } from '@codelab/utils/src/lib/sync/components/questions/questions-admin/questions-admin.component';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { QuestionsViewerComponent } from './questions-viewer/questions-viewer.component';\nimport { QuestionsPresenterComponent } from './questions-presenter/questions-presenter.component';\nimport { QuestionComponent } from './common/question/question.component';\nimport { QuestionListComponent } from '@codelab/utils/src/lib/sync/components/questions/common/question-list/question-list.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatCardModule,\n    MatTabsModule,\n    MatInputModule,\n    MatCheckboxModule,\n    SyncDirectivesModule,\n    MatIconModule,\n    FormsModule,\n    MatExpansionModule\n  ],\n  declarations: [\n    QuestionsComponent,\n    QuestionsAdminComponent,\n    QuestionsViewerComponent,\n    QuestionsPresenterComponent,\n    QuestionComponent,\n    QuestionListComponent\n  ],\n  exports: [QuestionsComponent]\n})\nexport class QuestionsModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-admin/registration-admin.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-admin/registration-admin.component.html",
    "content": "<div *ngIf=\"registrationService.users$ | async as users\">\n  <codelab-sync-join-instructions></codelab-sync-join-instructions>\n  <div>\n    <mat-checkbox\n      [syncPresenterValue]=\"'registration/shouldDisplayNames'\"\n      [syncPresenterValueDefault]=\"true\"\n      [(ngModel)]=\"displayNames\"\n    >\n      Display names\n    </mat-checkbox>\n  </div>\n\n  <div>\n    <mat-checkbox\n      [syncPresenterValue]=\"'registration/isRegistrationEnabled'\"\n      [syncPresenterValueDefault]=\"true\"\n      [(ngModel)]=\"isRegistrationEnabled\"\n    >\n      Enable registration\n    </mat-checkbox>\n  </div>\n  <ul>\n    <li *ngFor=\"let user of users\">\n      {{ user.name }}\n      <button mat-button (click)=\"drop(user.userId)\">🗑</button>\n    </li>\n  </ul>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-admin/registration-admin.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RegistrationAdminComponent } from './registration-admin.component';\n\ndescribe('RegistrationAdminComponent', () => {\n  let component: RegistrationAdminComponent;\n  let fixture: ComponentFixture<RegistrationAdminComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RegistrationAdminComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RegistrationAdminComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-admin/registration-admin.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\n\n@Component({\n  selector: 'codelab-registration-admin',\n  templateUrl: './registration-admin.component.html',\n  styleUrls: ['./registration-admin.component.css']\n})\nexport class RegistrationAdminComponent {\n  url: string;\n  displayNames: boolean;\n  isRegistrationEnabled: boolean;\n\n  constructor(readonly registrationService: SyncRegistrationService) {}\n\n  drop(userId: string) {\n    this.registrationService.drop(userId);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-presenter/registration-presenter.component.css",
    "content": ".bunny {\n  background-image: url('../../../images/bunny.png');\n  width: 406px;\n  height: 442px;\n  margin: 0 auto;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-presenter/registration-presenter.component.html",
    "content": "<ng-container\n  *ngIf=\"\n    registrationService.isRegistrationEnabled$ | async;\n    else registrationOver\n  \"\n>\n  <codelab-sync-join-instructions></codelab-sync-join-instructions>\n</ng-container>\n<div *ngIf=\"registrationService.users$ | async as users\">\n  <ng-container *ngIf=\"users.length; else waiting\">\n    <h3>Users connected: {{ users.length }}</h3>\n    <ul *ngIf=\"registrationService.shouldDisplayNames$ | async\">\n      <li *ngFor=\"let user of users\">\n        {{ user.name }}\n      </li>\n    </ul>\n  </ng-container>\n</div>\n<ng-template #waiting>\n  <h2>\n    Waiting for users to connect...\n  </h2>\n  <div class=\"bunny\"></div>\n</ng-template>\n<ng-template #registrationOver>\n  <h1>Registration is over</h1>\n</ng-template>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-presenter/registration-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RegistrationPresenterComponent } from './registration-presenter.component';\n\ndescribe('RegistrationPresenterComponent', () => {\n  let component: RegistrationPresenterComponent;\n  let fixture: ComponentFixture<RegistrationPresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RegistrationPresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RegistrationPresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-presenter/registration-presenter.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\n\n@Component({\n  selector: 'codelab-registration-presenter',\n  templateUrl: './registration-presenter.component.html',\n  styleUrls: ['./registration-presenter.component.css']\n})\nexport class RegistrationPresenterComponent {\n  constructor(readonly registrationService: SyncRegistrationService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-viewer/registration-viewer.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-viewer/registration-viewer.component.html",
    "content": "<ng-container\n  *ngIf=\"\n    registrationService.isRegistrationEnabled$ | async;\n    else registrationOver\n  \"\n>\n  <ng-container *ngIf=\"!(registrationService.currentUser$ | async)\">\n    <h2>What is your name?</h2>\n    <mat-form-field class=\"example-full-width\">\n      <input\n        matInput\n        placeholder=\"Name\"\n        maxlength=\"25\"\n        required\n        (keydown.enter)=\"registrationService.save()\"\n        [(ngModel)]=\"registrationService.name\"\n      />\n    </mat-form-field>\n    <button mat-button (click)=\"registrationService.save()\">Save</button>\n  </ng-container>\n  <ng-container *ngIf=\"registrationService.currentUser$ | async as user\">\n    <h2>Your name is: {{ user }}</h2>\n    <button mat-button (click)=\"registrationService.clear()\">Change</button>\n  </ng-container>\n</ng-container>\n<ng-template #registrationOver>\n  <h1>Registration is over</h1>\n</ng-template>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-viewer/registration-viewer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RegistrationViewerComponent } from './registration-viewer.component';\n\ndescribe('RegistrationViewerComponent', () => {\n  let component: RegistrationViewerComponent;\n  let fixture: ComponentFixture<RegistrationViewerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RegistrationViewerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RegistrationViewerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration-viewer/registration-viewer.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\n\n@Component({\n  selector: 'codelab-registration-viewer',\n  templateUrl: './registration-viewer.component.html',\n  styleUrls: ['./registration-viewer.component.css']\n})\nexport class RegistrationViewerComponent {\n  constructor(readonly registrationService: SyncRegistrationService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration.component.html",
    "content": "<codelab-registration-viewer *isViewing></codelab-registration-viewer>\n<codelab-registration-presenter *isPresenting></codelab-registration-presenter>\n<codelab-registration-admin *isAdmin></codelab-registration-admin>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { RegistrationComponent } from './registration.component';\n\ndescribe('RegistrationComponent', () => {\n  let component: RegistrationComponent;\n  let fixture: ComponentFixture<RegistrationComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [RegistrationComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(RegistrationComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/registration.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\n\n@Component({\n  selector: 'codelab-registration',\n  templateUrl: './registration.component.html',\n  styleUrls: ['./registration.component.css'],\n  providers: [SyncRegistrationService]\n})\nexport class RegistrationComponent {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/sync-registration.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { RegistrationComponent } from '@codelab/utils/src/lib/sync/components/registration/registration.component';\nimport { RegistrationViewerComponent } from '@codelab/utils/src/lib/sync/components/registration/registration-viewer/registration-viewer.component';\nimport { RegistrationPresenterComponent } from '@codelab/utils/src/lib/sync/components/registration/registration-presenter/registration-presenter.component';\nimport { RegistrationAdminComponent } from '@codelab/utils/src/lib/sync/components/registration/registration-admin/registration-admin.component';\nimport { FormsModule } from '@angular/forms';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { SyncJoinInstructionsModule } from '@codelab/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.module';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n  declarations: [\n    RegistrationComponent,\n    RegistrationViewerComponent,\n    RegistrationAdminComponent,\n    RegistrationPresenterComponent\n  ],\n  exports: [RegistrationComponent],\n  imports: [\n    SyncJoinInstructionsModule,\n    CommonModule,\n    FormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    SyncDirectivesModule,\n    MatCheckboxModule,\n    MatButtonModule\n  ]\n})\nexport class SyncRegistrationModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/sync-registration.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { SyncRegistrationService } from './sync-registration.service';\n\ndescribe('SyncRegistrationService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: SyncRegistrationService = TestBed.inject(\n      SyncRegistrationService\n    );\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/registration/sync-registration.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SyncRegistrationService {\n  readonly key = 'name';\n  name = '';\n\n  readonly userData = this.syncDataService.getAdminAllUserData(this.key);\n  readonly usersMap$ = this.userData.valueChanges();\n  readonly users$ = this.usersMap$.pipe(\n    map(a => {\n      return a\n        ? Object.entries(a).map(([userId, name]) => ({ userId, name }))\n        : [];\n    })\n  );\n\n  readonly nameObject = this.syncDataService.getCurrentViewerObject(this.key);\n  readonly currentUser$ = this.nameObject.valueChanges();\n\n  readonly registrationConfig$ = this.syncDataService\n    .getPresenterObject('registration')\n    .withDefault({\n      shouldDisplayNames: true,\n      isRegistrationEnabled: true\n    })\n    .valueChanges();\n\n  readonly shouldDisplayNames$ = this.registrationConfig$.pipe(\n    map(a => a.shouldDisplayNames)\n  );\n  readonly isRegistrationEnabled$ = this.registrationConfig$.pipe(\n    map(a => a.isRegistrationEnabled)\n  );\n\n  constructor(private readonly syncDataService: SyncDataService) {}\n\n  save() {\n    const name = this.name.trim();\n    if (name !== '') {\n      this.nameObject.set(name);\n    }\n  }\n\n  clear() {\n    this.nameObject.set(null);\n  }\n\n  drop(userId: string) {\n    this.syncDataService.getViewerObject(this.key, userId).set(null);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-admin/sync-code-game-admin.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-admin/sync-code-game-admin.component.html",
    "content": "{{ this.registrationService.users$ | async | json }}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-admin/sync-code-game-admin.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncCodeGameAdminComponent } from './sync-code-game-admin.component';\n\ndescribe('SyncCodeGameAdminComponent', () => {\n  let component: SyncCodeGameAdminComponent;\n  let fixture: ComponentFixture<SyncCodeGameAdminComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncCodeGameAdminComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncCodeGameAdminComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-admin/sync-code-game-admin.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-sync-code-game-admin',\n  templateUrl: './sync-code-game-admin.component.html',\n  styleUrls: ['./sync-code-game-admin.component.css']\n})\nexport class SyncCodeGameAdminComponent {\n  constructor(readonly registrationService: SyncRegistrationService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-presenter/sync-code-game-presenter.component.css",
    "content": ".selected {\n  background: #ddd;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-presenter/sync-code-game-presenter.component.html",
    "content": "<div style=\"display:flex;\">\n  <div style=\"display:flex;flex-direction: column\">\n    <button\n      *ngFor=\"let user of codeGameService.allStatuses$ | async\"\n      mat-button\n      [class.selected]=\"(selectedUserSubject | async) === user.name\"\n      (click)=\"selectedUserSubject.next(user.name)\"\n    >\n      {{ user.name }}\n      | {{ user.status.maxScore }}\n    </button>\n  </div>\n\n  <div style=\"flex-grow: 1\" *ngIf=\"selectedUser$ | async as user\">\n    <code-demo-editor\n      fontSize=\"20\"\n      [ngModel]=\"user.status.code\"\n    ></code-demo-editor>\n  </div>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-presenter/sync-code-game-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncCodeGamePresenterComponent } from './sync-code-game-presenter.component';\n\ndescribe('SyncCodeGamePresenterComponent', () => {\n  let component: SyncCodeGamePresenterComponent;\n  let fixture: ComponentFixture<SyncCodeGamePresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncCodeGamePresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncCodeGamePresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-presenter/sync-code-game-presenter.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\nimport { SyncCodeGameService } from '@codelab/utils/src/lib/sync/components/sync-code-game/sync-code-game.service';\nimport { combineLatest, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-sync-code-game-presenter',\n  templateUrl: './sync-code-game-presenter.component.html',\n  styleUrls: ['./sync-code-game-presenter.component.css']\n})\nexport class SyncCodeGamePresenterComponent {\n  readonly selectedUserSubject = new Subject<string>();\n\n  constructor(\n    readonly codeGameService: SyncCodeGameService,\n    readonly registrationService: SyncRegistrationService\n  ) {}\n\n  selectedUser$ = combineLatest([\n    this.codeGameService.allStatuses$,\n    this.selectedUserSubject\n  ]).pipe(\n    map(([users, user]) => {\n      return users.find(u => u.name === user);\n    })\n  );\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-viewer/sync-code-game-viewer.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-viewer/sync-code-game-viewer.component.html",
    "content": "<code-demo-editor\n  fontSize=\"20\"\n  [(ngModel)]=\"questions[0].code\"\n></code-demo-editor>\n<!--      <slides-typescript-checker-runner-->\n<!--        [code]=\"q.code\"-->\n<!--      ></slides-typescript-checker-runner>-->\n\n<slides-typescript-test-runner\n  (result)=\"update($event)\"\n  [code]=\"questions[0].code\"\n  [tests]=\"questions[0].tests\"\n></slides-typescript-test-runner>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-viewer/sync-code-game-viewer.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncCodeGameViewerComponent } from './sync-code-game-viewer.component';\n\ndescribe('SyncCodeGameViewerComponent', () => {\n  let component: SyncCodeGameViewerComponent;\n  let fixture: ComponentFixture<SyncCodeGameViewerComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncCodeGameViewerComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncCodeGameViewerComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game-viewer/sync-code-game-viewer.component.ts",
    "content": "import { Component, OnInit } from '@angular/core';\nimport { SyncCodeGameService } from '@codelab/utils/src/lib/sync/components/sync-code-game/sync-code-game.service';\nimport { TestRunResult } from '@codelab/utils/src/lib/test-results/common';\n\ndeclare const require;\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-sync-code-game-viewer',\n  templateUrl: './sync-code-game-viewer.component.html',\n  styleUrls: ['./sync-code-game-viewer.component.css']\n})\nexport class SyncCodeGameViewerComponent implements OnInit {\n  questions = [\n    {\n      title: 'Write an add function',\n      code: `export function result(): number {\n      return 0;\n}\n`,\n      tests: `\n    import {result} from './main';\n\n    describe('result', () => {\n      it('Function \"result\" exists', () => {\n        chai.expect(typeof result).to.equal('function');\n      });\n\n      it('Is greater than 0', () => { chai.expect(result()).to.be.gte(0);});\n      it('Is greater than 1', () => { chai.expect(result()).to.be.gte(1); });\n      it('Is greater than 2', () => { chai.expect(result()).to.be.gte(2); });\n      it('Is greater than 3', () => { chai.expect(result()).to.be.gte(3); });\n      it('Is greater than 4', () => { chai.expect(result()).to.be.gte(4); });\n      it('Is greater than 5', () => { chai.expect(result()).to.be.gte(5); });\n      it('Is greater than 6', () => { chai.expect(result()).to.be.gte(6); });\n      it('Is greater than 7', () => { chai.expect(result()).to.be.gte(7); });\n      it('Is greater than 8', () => { chai.expect(result()).to.be.gte(8); });\n      it('Is greater than 9', () => { chai.expect(result()).to.be.gte(9); });\n    });`\n    },\n    {\n      title: 'Write an subtract function',\n      code: `function subtract(a,b){\n\n}`,\n      tests: `\n    describe('tests', () => {\n      it('Function subtract exists', () => {\n        chai.expect(typeof subtract).to.equal('function');\n      });\n\n      it('Subtracts two numbers', () => {\n        chai.expect(subtract(2,2)).to.equal(0);\n      });\n\n      it('subtracts two other numbers', () => {\n        chai.expect(subtract(24,66)).to.equal(-42);\n      });\n    });`\n    }\n  ];\n  code = `function add(a,b){\n    return a+b;\n}`;\n  tests = require('!!raw-loader!../tests.ts');\n\n  maxScore = 0;\n\n  update(result: TestRunResult) {\n    const score = result.error ? 0 : result.tests.filter(t => t.pass).length;\n\n    const maxScore = Math.max(this.maxScore, score);\n    this.maxScore = maxScore;\n\n    this.codeGameService.viewerStatus.set({\n      score,\n      maxScore,\n      code: this.questions[0].code\n    });\n  }\n\n  constructor(private readonly codeGameService: SyncCodeGameService) {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.component.css",
    "content": ":host {\n  display: block;\n  height: 100%;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.component.html",
    "content": "<slides-sync-code-game-viewer *isViewing></slides-sync-code-game-viewer>\n<slides-sync-code-game-presenter\n  *isPresenting\n></slides-sync-code-game-presenter>\n<slides-sync-code-game-admin *isAdmin></slides-sync-code-game-admin>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncCodeGameComponent } from './sync-code-game.component';\n\ndescribe('CodeInTheDarkComponent', () => {\n  let component: SyncCodeGameComponent;\n  let fixture: ComponentFixture<SyncCodeGameComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncCodeGameComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncCodeGameComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'sync-code-editor',\n  templateUrl: './sync-code-game.component.html',\n  styleUrls: ['./sync-code-game.component.css']\n})\nexport class SyncCodeGameComponent {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SyncCodeGameComponent } from './sync-code-game.component';\nimport { CodeDemoModule } from '@codelab/code-demos';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { SimpleTestsProgressModule } from '@codelab/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.module';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TestResultsModule } from '@codelab/utils/src/lib/test-results/test-results.module';\nimport { TypescriptCheckerRunnerModule } from '@codelab/utils/src/lib/sandbox-runner/typescript-checker-runner/typescript-checker-runner.module';\nimport { SandboxRunnerModule } from '@codelab/utils/src/lib/sandbox-runner/sandbox-runner.module';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { SyncCodeGamePresenterComponent } from './sync-code-game-presenter/sync-code-game-presenter.component';\nimport { SyncCodeGameAdminComponent } from './sync-code-game-admin/sync-code-game-admin.component';\nimport { SyncCodeGameViewerComponent } from './sync-code-game-viewer/sync-code-game-viewer.component';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n  declarations: [\n    SyncCodeGameComponent,\n    SyncCodeGamePresenterComponent,\n    SyncCodeGameAdminComponent,\n    SyncCodeGameViewerComponent\n  ],\n  exports: [SyncCodeGameComponent],\n  imports: [\n    CommonModule,\n    CodeDemoModule,\n    FormsModule,\n    MatIconModule,\n    SimpleTestsProgressModule,\n    MatCheckboxModule,\n    MatTabsModule,\n    TestResultsModule,\n    TypescriptCheckerRunnerModule,\n    SandboxRunnerModule,\n    SyncDirectivesModule,\n    MatButtonModule\n  ]\n})\nexport class SyncCodeGameModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { SyncCodeGameService } from './sync-code-game.service';\n\ndescribe('SyncCodeGameService', () => {\n  let service: SyncCodeGameService;\n\n  beforeEach(() => {\n    TestBed.configureTestingModule({});\n    service = TestBed.inject(SyncCodeGameService);\n  });\n\n  it('should be created', () => {\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/sync-code-game.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SyncCodeGameService {\n  private readonly key = 'coding';\n  readonly viewerStatus = this.syncDataService\n    .getCurrentViewerObject(this.key)\n    .object('session');\n\n  private readonly allStatus = this.syncDataService.getAdminAllUserData(\n    this.key\n  );\n\n  readonly allStatuses$ = this.allStatus.valueChanges().pipe(\n    map(a => {\n      return Object.entries(a || {}).map(([name, value]) => ({\n        name,\n        status: value.session\n      }));\n    })\n  );\n\n  constructor(private readonly syncDataService: SyncDataService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-code-game/tests.ts",
    "content": "describe('a', () => {\n  it('b', () => {});\n  it('c', () => {});\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.component.html",
    "content": "<ng-container *isPresenting>\n  <h2 style=\"font-size: 6vw;\">{{ joinUrl$ | async }}</h2>\n</ng-container>\n\n<ng-container *isAdmin>\n  <mat-form-field>\n    <input\n      placeholder=\"URL\"\n      type=\"text\"\n      matInput\n      [(ngModel)]=\"url\"\n      [syncPresenterValue]=\"'registration/joinUrl'\"\n      [syncPresenterValueDefault]=\"defaultValue\"\n    />\n  </mat-form-field>\n</ng-container>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncJoinInstructionsComponent } from './sync-join-instructions.component';\nimport { SyncJoinInstructionsModule } from '@codelab/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.module';\nimport { getSyncDbService } from '@codelab/utils/src/lib/testing/mocks/sync-db-service';\nimport { getMockAngularFireProviders } from '@codelab/utils/src/lib/testing/mocks/angular-fire';\n\ndescribe('SyncJoinInstructionsComponent', () => {\n  let component: SyncJoinInstructionsComponent;\n  let fixture: ComponentFixture<SyncJoinInstructionsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SyncJoinInstructionsModule],\n      providers: [...getSyncDbService(), ...getMockAngularFireProviders()]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncJoinInstructionsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\n\n@Component({\n  selector: 'codelab-sync-join-instructions',\n  templateUrl: './sync-join-instructions.component.html',\n  styleUrls: ['./sync-join-instructions.component.css']\n})\nexport class SyncJoinInstructionsComponent {\n  readonly key = 'joinUrl';\n  readonly defaultValue = 'kirjs.com/start';\n\n  url: string;\n  readonly joinUrl$ = this.syncDataService\n    .getPresenterObject('registration')\n    .object(this.key)\n    .withDefault(this.defaultValue)\n    .valueChanges();\n\n  constructor(private readonly syncDataService: SyncDataService) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-join-instructions/sync-join-instructions.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { SyncJoinInstructionsComponent } from './sync-join-instructions.component';\nimport { FormsModule } from '@angular/forms';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\n\n@NgModule({\n  declarations: [SyncJoinInstructionsComponent],\n  exports: [SyncJoinInstructionsComponent],\n  imports: [\n    CommonModule,\n    SyncDirectivesModule,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule\n  ]\n})\nexport class SyncJoinInstructionsModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-sessions/sync-sessions.component.css",
    "content": "table {\n  width: 100%;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-sessions/sync-sessions.component.html",
    "content": "<mat-card>\n  <table\n    mat-table\n    [dataSource]=\"sessionsService.sessions$ | async\"\n    class=\"mat-elevation-z8\"\n  >\n    <ng-container matColumnDef=\"name\">\n      <th mat-header-cell *matHeaderCellDef>Name</th>\n      <td mat-cell *matCellDef=\"let session\">{{ session.config.name }}</td>\n    </ng-container>\n\n    <ng-container matColumnDef=\"key\">\n      <th mat-header-cell *matHeaderCellDef>Key</th>\n      <td mat-cell *matCellDef=\"let session\">{{ session.key }}</td>\n    </ng-container>\n\n    <ng-container matColumnDef=\"owner\">\n      <th mat-header-cell *matHeaderCellDef>Owner</th>\n      <td mat-cell *matCellDef=\"let session\">{{ session.config.owner }}</td>\n    </ng-container>\n\n    <ng-container matColumnDef=\"active\">\n      <th mat-header-cell *matHeaderCellDef>active</th>\n      <td mat-cell *matCellDef=\"let session\">\n        <button mat-button (click)=\"sessionsService.flipActive(session.key)\">\n          {{ session.config.active ? '✅' : '' }}\n        </button>\n      </td>\n    </ng-container>\n\n    <ng-container matColumnDef=\"actions\">\n      <th mat-header-cell *matHeaderCellDef></th>\n      <td mat-cell *matCellDef=\"let session\">\n        <button mat-button (click)=\"remove(session.key)\">ⓧ</button>\n      </td>\n    </ng-container>\n\n    <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n    <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n  </table>\n\n  <mat-card-actions>\n    <label for=\"session-name\">Session Name</label>\n    <input\n      id=\"session-name\"\n      type=\"text\"\n      matInput\n      #sessionName\n      value=\"default\"\n      required\n    />\n    <button\n      mat-raised-button\n      (click)=\"sessionsService.create(sessionName.value)\"\n    >\n      New session\n    </button>\n  </mat-card-actions>\n</mat-card>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-sessions/sync-sessions.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncSessionsComponent } from './sync-sessions.component';\n\ndescribe('SyncSessionsComponent', () => {\n  let component: SyncSessionsComponent;\n  let fixture: ComponentFixture<SyncSessionsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncSessionsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncSessionsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-sessions/sync-sessions.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\n\n@Component({\n  selector: 'codelab-sync-sessions',\n  templateUrl: './sync-sessions.component.html',\n  styleUrls: ['./sync-sessions.component.css'],\n  providers: [SyncDataService, SyncSessionService, SyncDbService]\n})\nexport class SyncSessionsComponent {\n  readonly displayedColumns = ['name', 'owner', 'key', 'active', 'actions'];\n\n  constructor(readonly sessionsService: SyncSessionService) {}\n\n  remove(key: string) {\n    this.sessionsService.remove(key);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/components/sync-sessions/sync-sessions.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\nimport { SyncSessionsComponent } from './sync-sessions.component';\n\n@NgModule({\n  declarations: [SyncSessionsComponent],\n  entryComponents: [SyncSessionsComponent],\n  imports: [\n    CommonModule,\n    MatCardModule,\n    MatTableModule,\n    MatButtonModule,\n    MatInputModule\n  ]\n})\nexport class SyncSessionsModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/all-viewer-values.directive.ts",
    "content": "import {\n  AfterViewInit,\n  Directive,\n  Input,\n  OnDestroy,\n  Optional\n} from '@angular/core';\n\nimport { NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[syncAllUserValues]',\n  exportAs: 'allViewerValues'\n})\nexport class AllViewerValuesDirective<T> implements AfterViewInit, OnDestroy {\n  @Input() syncAllUserValues: string;\n  values: { key: string; value: T }[];\n  private onDestroy = new Subject();\n\n  constructor(@Optional() private readonly control: NgControl) {}\n\n  ngOnDestroy(): void {\n    this.onDestroy.next();\n    this.onDestroy.complete();\n  }\n\n  ngAfterViewInit() {\n    // this.sync.statusChange$.pipe(\n    //   status => status === SyncStatus.PRESENTING\n    // )\n    // this.sync.whenPresenting$.subscribe(() => {\n    //   this.sync.getAllViewersValues(this.syncAllUserValues).subscribe(values => {\n    //     this.values = Object.entries(values || {}).map(([key, value]) => ({key, value}));\n    //   });\n    // });\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/is-status.directive.ts",
    "content": "import {\n  Directive,\n  OnInit,\n  TemplateRef,\n  ViewContainerRef\n} from '@angular/core';\nimport { SyncStatus } from '@codelab/utils/src/lib/sync/common';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport class SyncIsStatusDirective<T> implements OnInit {\n  protected readonly status: SyncStatus = SyncStatus.OFF;\n  private readonly destroy = new ReplaySubject(1);\n\n  constructor(\n    private readonly viewContainer: ViewContainerRef,\n    private readonly templateRef: TemplateRef<any>,\n    private readonly syncSession: SyncSessionService\n  ) {}\n\n  ngOnInit() {\n    this.syncSession.status$\n      .pipe(takeUntil(this.destroy))\n      .subscribe((status: SyncStatus) => {\n        this.toggleContentDisplay(status === this.status);\n      });\n  }\n\n  toggleContentDisplay(isDisplayed: boolean) {\n    this.viewContainer.clear();\n    if (isDisplayed) {\n      this.viewContainer.createEmbeddedView(this.templateRef).markForCheck();\n    }\n  }\n}\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[isViewing]'\n})\nexport class SyncIsViewingDirective<T> extends SyncIsStatusDirective<T> {\n  protected readonly status = SyncStatus.VIEWING;\n\n  constructor(\n    viewContainer: ViewContainerRef,\n    templateRef: TemplateRef<any>,\n    syncSession: SyncSessionService\n  ) {\n    super(viewContainer, templateRef, syncSession);\n  }\n}\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[isPresenting]'\n})\nexport class SyncIsPresentingDirective<T> extends SyncIsStatusDirective<T> {\n  protected readonly status = SyncStatus.PRESENTING;\n\n  constructor(\n    viewContainer: ViewContainerRef,\n    templateRef: TemplateRef<any>,\n    syncSession: SyncSessionService\n  ) {\n    super(viewContainer, templateRef, syncSession);\n  }\n}\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[isAdmin]'\n})\nexport class SyncIsAdminDirective<T> extends SyncIsStatusDirective<T> {\n  protected readonly status = SyncStatus.ADMIN;\n\n  constructor(\n    viewContainer: ViewContainerRef,\n    templateRef: TemplateRef<any>,\n    syncSession: SyncSessionService\n  ) {\n    super(viewContainer, templateRef, syncSession);\n  }\n}\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[isOff]'\n})\nexport class SyncIsOffDirective<T> extends SyncIsStatusDirective<T> {\n  protected readonly status = SyncStatus.OFF;\n\n  constructor(\n    viewContainer: ViewContainerRef,\n    templateRef: TemplateRef<any>,\n    syncSession: SyncSessionService\n  ) {\n    super(viewContainer, templateRef, syncSession);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/sync-directives.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n  SyncIsAdminDirective,\n  SyncIsPresentingDirective,\n  SyncIsViewingDirective,\n  SyncIsOffDirective\n} from '@codelab/utils/src/lib/sync/directives/is-status.directive';\nimport { SyncPresenterValueDirective } from '@codelab/utils/src/lib/sync/directives/sync-presenter-value.directive';\nimport { SyncViewerValueDirective } from '@codelab/utils/src/lib/sync/directives/sync-viewer-value.directive';\nimport { SyncUserValueDirective } from '@codelab/utils/src/lib/sync/directives/sync-user-value.directive';\n\n@NgModule({\n  declarations: [\n    SyncIsViewingDirective,\n    SyncIsPresentingDirective,\n    SyncIsAdminDirective,\n    SyncPresenterValueDirective,\n    SyncViewerValueDirective,\n    SyncIsOffDirective,\n    SyncUserValueDirective\n  ],\n  exports: [\n    SyncIsViewingDirective,\n    SyncIsPresentingDirective,\n    SyncIsAdminDirective,\n    SyncPresenterValueDirective,\n    SyncViewerValueDirective,\n    SyncIsOffDirective,\n    SyncUserValueDirective\n  ],\n  imports: [CommonModule]\n})\nexport class SyncDirectivesModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/sync-is-presenting.directive.spec.ts",
    "content": "import { SyncIsPresentingDirective } from '@codelab/utils/src/lib/sync/directives/is-status.directive';\n\ndescribe('SyncIsPresentingDirective', () => {\n  it('should create an instance', () => {\n    // const directive = new SyncIsPresentingDirective();\n    // expect(directive).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/sync-presenter-value.directive.ts",
    "content": "import { Directive, Input, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport {\n  PresenterConfig,\n  SyncDataService\n} from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[syncPresenterValue]',\n  exportAs: 'presenterValue'\n})\nexport class SyncPresenterValueDirective<\n  K extends keyof PresenterConfig,\n  T extends PresenterConfig[K]\n> implements OnInit, OnDestroy {\n  @Input() syncPresenterValue: K;\n  @Input() syncPresenterValueDefault: T;\n\n  private onDestroy$ = new Subject();\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    @Optional() private readonly control: NgControl\n  ) {}\n\n  ngOnDestroy(): void {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  ngOnInit() {\n    if (!this.control) {\n      throw new Error(\n        'syncPresenterValue directive must be attached to a formControl'\n      );\n    }\n\n    const data = this.syncDataService.getPresenterObject(\n      this.syncPresenterValue\n    );\n    data\n      .valueChanges()\n      .pipe(\n        map(a => (a === undefined ? this.syncPresenterValueDefault : a)),\n        takeUntil(this.onDestroy$)\n      )\n      .subscribe(value => {\n        this.control.valueAccessor.writeValue(value);\n      });\n\n    this.control.valueChanges\n      .pipe(\n        filter(a => a !== undefined),\n        takeUntil(this.onDestroy$)\n      )\n      .subscribe(newValue => {\n        data.set(newValue);\n      });\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/sync-user-value.directive.ts",
    "content": "import { Directive, Input, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  first,\n  mergeMapTo,\n  takeUntil,\n  tap\n} from 'rxjs/operators';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { LoginService } from '@codelab/firebase-login';\nimport { SyncDb } from '@codelab/utils/src/lib/sync/services/sync-data.service';\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[syncUserValue]',\n  exportAs: 'presenterValue'\n})\nexport class SyncUserValueDirective<T> implements OnInit, OnDestroy {\n  @Input() syncUserValue: string;\n  @Input() syncUserValueDefault: T;\n\n  private onDestroy$ = new Subject();\n\n  constructor(\n    private readonly dbService: SyncDbService<SyncDb>,\n    private readonly loginService: LoginService,\n    @Optional() private readonly control: NgControl\n  ) {}\n\n  ngOnDestroy(): void {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  ngOnInit() {\n    if (!this.control) {\n      throw new Error(\n        'syncPresenterValue directive must be attached to a formControl'\n      );\n    }\n\n    const syncDataObject = this.dbService\n      .object('user-data')\n      .object(this.loginService.uid$)\n      .object(this.syncUserValue);\n    const dataValue$ = syncDataObject.valueChanges();\n\n    dataValue$.pipe(takeUntil(this.onDestroy$)).subscribe(value => {\n      console.log('FROM STORE', value);\n      this.control.valueAccessor.writeValue(value);\n    });\n\n    dataValue$\n      .pipe(\n        tap(a => {\n          console.log('data', a);\n        }),\n        first(),\n        mergeMapTo(this.control.valueChanges),\n        filter(a => a !== undefined),\n        distinctUntilChanged(),\n        takeUntil(this.onDestroy$)\n      )\n      .subscribe(newValue => {\n        console.log('FROM CONTROL', newValue);\n        syncDataObject.set(newValue);\n      });\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/directives/sync-viewer-value.directive.ts",
    "content": "import { Directive, Input, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport {\n  SyncDataService,\n  ViewerConfig\n} from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[syncViewerValue]',\n  exportAs: 'viewerValue'\n})\nexport class SyncViewerValueDirective<T> implements OnDestroy, OnInit {\n  @Input() syncViewerValue: keyof ViewerConfig;\n  @Input() syncViewerValueDefault: T;\n\n  private onDestroy$ = new Subject();\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    @Optional() private readonly control: NgControl\n  ) {}\n\n  ngOnDestroy(): void {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  ngOnInit() {\n    if (!this.control) {\n      throw new Error(\n        'syncPresenterValue directive must be attached to a formControl'\n      );\n    }\n\n    const data = this.syncDataService.getCurrentViewerObject(\n      this.syncViewerValue\n    );\n\n    data\n      .valueChanges()\n      .pipe(\n        takeUntil(this.onDestroy$),\n        map(a => (a === undefined ? this.syncViewerValueDefault : a))\n      )\n      .subscribe(value => {\n        this.control.valueAccessor.writeValue(value);\n      });\n\n    this.control.valueChanges\n      .pipe(\n        filter(a => a !== undefined),\n        takeUntil(this.onDestroy$)\n      )\n      .subscribe(newValue => {\n        data.set(newValue);\n      });\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/common.ts",
    "content": "export interface FirebaseInfo {\n  connected: string;\n  serverTimeOffset: string;\n}\n\nexport interface FirebaseDb {\n  '.info': FirebaseInfo;\n}\n\nexport type ArrayElement<A> = A extends readonly (infer T)[] ? T : never;\n\nexport function mergeValues(value, defaultValue) {\n  if (value === null) {\n    return defaultValue;\n  }\n\n  if (typeof value === 'object' && typeof defaultValue === 'object') {\n    return { ...defaultValue, ...value };\n  }\n\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/firebase-info.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FirebaseDb } from '@codelab/utils/src/lib/sync/services/common';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FirebaseInfoService {\n  readonly online$ = this.syncDb\n    .object('.info')\n    .object('connected')\n    .valueChanges();\n\n  readonly offset$: Observable<number> = this.syncDb\n    .object('.info')\n    .object('serverTimeOffset')\n    .valueChanges()\n    .pipe(map(a => Number(a)));\n\n  constructor(private readonly syncDb: SyncDbService<FirebaseDb>) {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/sync-data.service.ts",
    "content": "import { Injectable } from '@angular/core';\n\nimport { filter } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport {\n  SyncDataObject,\n  SyncDbService\n} from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { FirebaseDb } from '@codelab/utils/src/lib/sync/services/common';\nimport { QuestionDb } from '@codelab/utils/src/lib/sync/components/questions/common/common';\n\ninterface PresenterPollConfig {\n  enabled: boolean;\n  startTime: number;\n}\n\nexport interface UserVotes {\n  [key: string]: number;\n}\n\ninterface ViewerPollConfig {\n  answer: number;\n  time: number;\n}\n\nexport interface PresenterConfig {\n  qna7: {\n    requireApproval: boolean;\n    starredQuestionKey: string;\n  };\n  poll: { [pollId: string]: PresenterPollConfig };\n  registration: {\n    shouldDisplayNames: boolean;\n    joinUrl: string;\n    isRegistrationEnabled: boolean;\n  };\n  enabled: boolean;\n  currentSlide: number;\n  'poll-timing': number;\n}\n\ninterface PollConfig {\n  [pollId: string]: ViewerPollConfig;\n}\n\nexport interface CodingSession {\n  code: string;\n  score: number;\n  maxScore: number;\n}\n\nexport interface CodingSessions {\n  [key: string]: CodingSession;\n}\n\nexport interface ViewerConfig {\n  poll: { [viewer: string]: PollConfig };\n  name: { [viewer: string]: string };\n  qna7: { [viewer: string]: { questions: QuestionDb[] } };\n  votes: { [viewer: string]: UserVotes };\n  coding: { [viewer: string]: CodingSessions };\n}\n\nexport interface SyncSessionConfig {\n  autojoin: boolean;\n  active: boolean;\n  admins: string[];\n  owner: string;\n  name: string;\n}\n\nexport interface SyncSession {\n  presenter: PresenterConfig;\n  viewer: ViewerConfig;\n  config: SyncSessionConfig;\n}\n\nexport interface SyncDb extends FirebaseDb {\n  'sync-sessions': { [key: string]: SyncSession };\n  authorized_users: { [uid: string]: boolean };\n  admin: { [uid: string]: { permissions: { [permission: string]: boolean } } };\n  'user-data': {\n    [userId: string]: {\n      [key: string]: {\n        valueKey: any;\n      };\n    };\n  };\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SyncDataService {\n  private readonly syncId$: Observable<\n    string\n  > = this.syncSessionService.sessionId$.pipe(filter(a => !!a));\n  private readonly currentSession$ = this.dbService\n    .object('sync-sessions')\n    .object(this.syncId$);\n\n  constructor(\n    private readonly syncSessionService: SyncSessionService,\n    private readonly dbService: SyncDbService<SyncDb>\n  ) {}\n\n  getPresenterObject<K extends keyof PresenterConfig>(key: K) {\n    return this.currentSession$.object('presenter').object(key);\n  }\n\n  getCurrentViewerObject<K extends keyof ViewerConfig>(key: K) {\n    return this.getViewerObject(\n      key,\n      this.syncSessionService.viewerId$.pipe(filter(a => !!a))\n    );\n  }\n\n  getViewerObject<K extends keyof ViewerConfig>(\n    key: K,\n    viewerId: Observable<string> | string\n  ) {\n    return this.currentSession$\n      .object('viewer')\n      .object(key)\n      .object(viewerId);\n  }\n\n  getAdminAllUserData<K extends keyof ViewerConfig>(\n    key: K\n  ): SyncDataObject<ViewerConfig[K]> {\n    return this.currentSession$.object('viewer').object(key);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/sync-db-wrapper.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { SyncDbService } from './sync-db.service';\n\ndescribe('SyncDbService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: SyncDbService = TestBed.inject(SyncDbService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/sync-db.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport {\n  AngularFireDatabase,\n  AngularFireList,\n  AngularFireObject\n} from '@angular/fire/database';\nimport { combineLatest, isObservable, Observable, of, Subject } from 'rxjs';\nimport { first, map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport {\n  ArrayElement,\n  FirebaseDb,\n  mergeValues\n} from '@codelab/utils/src/lib/sync/services/common';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SyncDbService<T> {\n  constructor(private db: AngularFireDatabase) {}\n\n  object<K extends keyof T>(key$: Observable<K> | K): SyncDataObject<T[K]> {\n    if (!isObservable(key$)) {\n      key$ = of(key$);\n    }\n\n    const keyString$ = key$.pipe(map(a => a.toString()));\n\n    const db$ = keyString$.pipe(map(key => this.db.object<T[K]>(key)));\n\n    // TODO(kirjs): Drop any\n    return new SyncDataObject<T[K]>(db$, keyString$, this as any);\n  }\n\n  objectList<K extends keyof T, E extends keyof T[K]>(\n    key$: Observable<K> | K\n  ): SyncDataList<T[K][E]> {\n    // TODO(kirjs): This whole function is only needed for typings.\n    // firebase has no real arrays, and we kinda pretend it does\n    return (this.list(key$) as unknown) as SyncDataList<T[K][E]>;\n  }\n\n  list<K extends keyof T>(\n    key$: Observable<K> | K\n  ): SyncDataList<ArrayElement<T[K]>> {\n    if (!isObservable(key$)) {\n      key$ = of(key$);\n    }\n    const keyString$ = key$.pipe(map(a => a.toString()));\n\n    const db$ = keyString$.pipe(\n      map(key => this.db.list<ArrayElement<T[K]>>(key))\n    );\n    // TODO(kirjs): Drop any\n    return new SyncDataList<ArrayElement<T[K]>>(db$, keyString$, this as any);\n  }\n}\n\nexport class SyncDataObject<T> {\n  private values$?: Observable<T>;\n  private readonly valueChanges$: Observable<T> = this.db$.pipe(\n    switchMap(db => {\n      return db.valueChanges();\n    }),\n    map(value => {\n      return mergeValues(value, this.defaultValue);\n    })\n  );\n\n  private onDestroy: Subject<null> = new Subject<null>();\n\n  constructor(\n    protected readonly db$: Observable<AngularFireObject<T>>,\n    protected readonly key$: Observable<string>,\n    protected readonly syncDbService: SyncDbService<T>,\n    protected readonly defaultValue?: Partial<T>\n  ) {}\n\n  valueChanges(): Observable<T> {\n    if (!this.values$) {\n      this.values$ = this.valueChanges$.pipe(shareReplay(1));\n    }\n    return this.values$;\n  }\n\n  updateWithCallback(callback: (value: T, index: number) => T) {\n    this.valueChanges$\n      .pipe(\n        map(callback),\n        tap(a => {\n          console.log({ a });\n        }),\n        first()\n      )\n      .subscribe(value => this.set(value));\n  }\n\n  withDefault(defaultValue: Partial<T>): SyncDataObject<T> {\n    return new SyncDataObject<T>(\n      this.db$,\n      this.key$,\n      this.syncDbService,\n      defaultValue\n    );\n  }\n\n  set(value: T) {\n    return this.db$.pipe(first()).subscribe(db => {\n      db.set(value);\n    });\n  }\n\n  remove() {\n    this.db$.pipe(first()).subscribe(db => {\n      db.remove();\n    });\n  }\n\n  destroy() {\n    this.onDestroy.next(null);\n    this.onDestroy.complete();\n  }\n\n  object<K extends keyof T>(key$: Observable<K> | K): SyncDataObject<T[K]> {\n    if (!isObservable(key$)) {\n      key$ = of(key$);\n    }\n\n    // TODO(kirjs): There should be a better way than casting to any\n    const newKey$ = this.key$.pipe(\n      switchMap(k => (key$ as Observable<K>).pipe(map(key => `${k}/${key}`)))\n    ) as any;\n    return this.syncDbService.object(newKey$);\n  }\n\n  list<K extends keyof T>(\n    key$: Observable<K> | K\n  ): SyncDataList<ArrayElement<T[K]>> {\n    if (!isObservable(key$)) {\n      key$ = of(key$);\n    }\n    const newKey$ = this.key$.pipe(\n      switchMap(k => (key$ as Observable<K>).pipe(map(key => `${k}/${key}`)))\n    ) as any;\n\n    return this.syncDbService.list(newKey$);\n  }\n}\n\nexport class SyncDataList<T> {\n  values$ = this.db$.pipe(switchMap(db => db.valueChanges()));\n  snapshots$ = this.db$.pipe(\n    switchMap(db => {\n      return db.snapshotChanges();\n    })\n  );\n\n  constructor(\n    protected readonly db$: Observable<AngularFireList<T>>,\n    protected readonly key$: Observable<string>,\n    protected readonly syncDbService: SyncDbService<FirebaseDb>,\n    protected readonly defaultValue?: T[]\n  ) {}\n\n  valueChanges(): Observable<T> {\n    return this.values$.pipe(\n      map(value => mergeValues(value, this.defaultValue))\n    );\n  }\n\n  push(value: T) {\n    return this.db$.pipe(first()).subscribe(db => db.push(value as any));\n  }\n\n  object(key: string): SyncDataObject<T> {\n    const key$ = this.key$.pipe(map(k => `${k}/${key}`)) as any;\n    return this.syncDbService.object(key$);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/sync-session.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { SyncSessionService } from './sync-session.service';\n\ndescribe('SyncSessionService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: SyncSessionService = TestBed.inject(SyncSessionService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/services/sync-session.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { LoginService } from '@codelab/firebase-login';\nimport {\n  firebaseToValuesWithKey,\n  SyncStatus\n} from '@codelab/utils/src/lib/sync/common';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport produce from 'immer';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport {\n  filter,\n  first,\n  map,\n  shareReplay,\n  switchMap,\n  takeUntil,\n  tap\n} from 'rxjs/operators';\nimport {\n  SyncDb,\n  SyncSession\n} from '@codelab/utils/src/lib/sync/services/sync-data.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SyncSessionService {\n  readonly status$: Observable<SyncStatus>;\n  readonly viewerId$: Observable<string> = this.loginService.uid$;\n  readonly canStartSession$ = this.viewerId$.pipe(\n    switchMap((uid: string) => {\n      return this.dbService\n        .object('authorized_users')\n        .object(uid)\n        .withDefault(false)\n        .valueChanges();\n    }),\n    shareReplay(1)\n  );\n\n  private readonly sessionId = new BehaviorSubject<string>(null);\n  readonly sessionConfig = this.dbService\n    .object('sync-sessions')\n    .object(this.sessionId)\n    .object('config');\n\n  readonly sessionId$ = this.sessionId.asObservable();\n  readonly hasActiveSession$ = this.sessionId.pipe(\n    map(sessionId => !!sessionId),\n    shareReplay(1)\n  );\n  private readonly preferredAdminStatusSubject = new BehaviorSubject(null);\n  private readonly preferredAdminStatus$ = combineLatest([\n    this.loginService.preferredStatus$,\n    this.preferredAdminStatusSubject.asObservable()\n  ]).pipe(map(([a, b]) => b || a));\n  private readonly sessions = this.dbService.objectList('sync-sessions');\n  readonly sessions$ = this.sessions.snapshots$.pipe(\n    map(firebaseToValuesWithKey)\n  );\n\n  constructor(\n    private readonly dbService: SyncDbService<SyncDb>,\n    private loginService: LoginService\n  ) {\n    this.status$ = combineLatest([\n      this.viewerId$,\n      this.sessionConfig.valueChanges(),\n      this.preferredAdminStatus$\n    ]).pipe(\n      map(([uid, config, preferredAdminStatus]) => {\n        if (!(config && config.active)) {\n          return SyncStatus.OFF;\n        }\n        if (config.owner === uid || config.admins.includes(uid)) {\n          return preferredAdminStatus || SyncStatus.ADMIN;\n        }\n\n        return SyncStatus.VIEWING;\n      }),\n      shareReplay(1)\n    );\n  }\n\n  create(name: string) {\n    const uid = this.loginService.uid$.pipe(first());\n    uid\n      .pipe(\n        map(uid => {\n          // TODO(kirjs): Figure this out\n          const session: Partial<SyncSession> = {\n            config: {\n              owner: uid,\n              active: true,\n              admins: ['admin'],\n              autojoin: true,\n              name: name\n            }\n          };\n          return session;\n        })\n      )\n      .subscribe(session => this.sessions.push(session as SyncSession));\n    this.autoJoin(name);\n  }\n\n  autoJoin(name: string) {\n    const sessions = this.sessions.snapshots$.pipe(\n      filter(s => !!s),\n      takeUntil(this.hasActiveSession$.pipe(filter(a => a)))\n    );\n\n    const availableSessions = sessions.pipe(\n      map(sessions =>\n        sessions.filter(snapshot => {\n          const config = snapshot.payload.val().config;\n          return config.autojoin && config.active && config.name === name;\n        })\n      )\n    );\n\n    availableSessions.subscribe(a => {\n      if (a.length > 1) {\n        console.log(\n          'cannot autojoin as there are more than one active sessions'\n        );\n        return;\n      }\n\n      if (a.length === 1) {\n        this.sessionId.next(a[0].key);\n      }\n    });\n  }\n\n  dropCurrentSession() {\n    this.sessionConfig.object('active').set(false);\n  }\n\n  remove(key: string) {\n    this.sessions.object(key).remove();\n  }\n\n  flipActive(key: string) {\n    this.sessions.object(key).updateWithCallback(\n      produce(s => {\n        s.config.active = !s.config.active;\n      })\n    );\n  }\n\n  present() {\n    this.preferredAdminStatusSubject.next(SyncStatus.PRESENTING);\n  }\n\n  administer() {\n    this.preferredAdminStatusSubject.next(SyncStatus.ADMIN);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-button/sync-button.component.css",
    "content": ".registration {\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  left: 0;\n  top: 0;\n  background: white;\n  z-index: 100;\n  padding: 20px;\n  box-sizing: border-box;\n}\n\n.menu-button {\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 1000;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-button/sync-button.component.html",
    "content": "<codelab-online-indicator></codelab-online-indicator>\n<mat-menu #userId=\"matMenu\">\n  <button mat-menu-item (click)=\"copyViewerId()\">\n    {{ syncSessionService.viewerId$ | async }}\n  </button>\n</mat-menu>\n\n<div>\n  {{ syncSessionService.hasActiveSession$ | async | json }}FOF\n  <ng-container\n    *ngIf=\"syncSessionService.hasActiveSession$ | async; else noSession\"\n  >\n    <mat-card *isAdmin>\n      <button mat-icon-button (click)=\"present()\">\n        <mat-icon>present_to_all</mat-icon>\n      </button>\n      <button mat-icon-button (click)=\"stop()\">\n        <mat-icon>cancel</mat-icon>\n      </button>\n    </mat-card>\n\n    <button\n      *isViewing\n      mat-icon-button\n      [matMenuTriggerFor]=\"userId\"\n      class=\"menu-button\"\n    >\n      <mat-icon>more_vert</mat-icon>\n    </button>\n\n    <ng-container *isViewing>\n      <div\n        *ngIf=\"\n          registrationService.currentUser$ | async as user;\n          else registation\n        \"\n      >\n        <!--        {{user}}-->\n      </div>\n      <ng-template #registation>\n        <div class=\"registration\">\n          <codelab-registration></codelab-registration>\n        </div>\n      </ng-template>\n      <button mat-icon-button [matMenuTriggerFor]=\"userId\" class=\"menu-button\">\n        <mat-icon>more_vert</mat-icon>\n      </button>\n    </ng-container>\n\n    <ng-container *isPresenting>\n      <button mat-icon-button [matMenuTriggerFor]=\"appMenu\" class=\"menu-button\">\n        <mat-icon>more_vert</mat-icon>\n      </button>\n    </ng-container>\n\n    <mat-menu #appMenu=\"matMenu\">\n      <button mat-menu-item (click)=\"administer()\">\n        <mat-icon>present_to_all</mat-icon>\n        Admin\n      </button>\n    </mat-menu>\n  </ng-container>\n</div>\n\n<ng-template #noSession>\n  <button mat-icon-button [matMenuTriggerFor]=\"userId\" class=\"menu-button\">\n    <mat-icon>more_vert</mat-icon>\n  </button>\n\n  <button\n    mat-raised-button\n    *ngIf=\"syncSessionService.canStartSession$ | async\"\n    style=\"cursor:pointer\"\n    (click)=\"start()\"\n  >\n    ⚫️ start\n  </button>\n</ng-template>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-button/sync-button.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncButtonComponent } from './sync-button.component';\n\ndescribe('SyncButtonComponent', () => {\n  let component: SyncButtonComponent;\n  let fixture: ComponentFixture<SyncButtonComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncButtonComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncButtonComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-button/sync-button.component.ts",
    "content": "import { Component, Input, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { SlidesDeckComponent } from '@ng360/slides';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { SyncStatus } from '@codelab/utils/src/lib/sync/common';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  mergeMapTo,\n  switchMapTo,\n  take,\n  takeUntil\n} from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n  selector: 'codelab-sync-button',\n  templateUrl: './sync-button.component.html',\n  styleUrls: ['./sync-button.component.css'],\n  providers: [SyncRegistrationService]\n})\nexport class SyncButtonComponent implements OnInit, OnDestroy {\n  @Input() name = 'default';\n  sync = {};\n  private readonly onDestroy = new Subject<void>();\n  private readonly currentSlide = this.syncDataService.getPresenterObject(\n    'currentSlide'\n  );\n\n  constructor(\n    private readonly syncDataService: SyncDataService,\n    readonly syncSessionService: SyncSessionService,\n    readonly registrationService: SyncRegistrationService,\n    @Optional() private readonly presentation: SlidesDeckComponent\n  ) {}\n\n  ngOnInit(): void {\n    this.syncSessionService.autoJoin(this.name);\n\n    if (this.presentation) {\n      this.syncSessionService.status$\n        .pipe(\n          filter(s => s === SyncStatus.PRESENTING),\n          mergeMapTo(this.presentation.slideChange),\n          distinctUntilChanged(),\n          takeUntil(this.onDestroy),\n          debounceTime(200)\n        )\n        .subscribe((slide: number) => {\n          this.currentSlide.set(slide);\n        });\n\n      this.syncSessionService.status$\n        .pipe(\n          filter(s => s !== SyncStatus.PRESENTING),\n          switchMapTo(this.currentSlide.valueChanges()),\n          distinctUntilChanged(),\n          filter(s => s !== null && s !== undefined),\n          takeUntil(this.onDestroy)\n        )\n        .subscribe((slide: number) => {\n          this.presentation.goToSlide(slide);\n        });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.onDestroy.next();\n    this.onDestroy.complete();\n  }\n\n  start(): void {\n    this.syncSessionService.create(this.name);\n  }\n\n  stop(): void {\n    this.syncSessionService.dropCurrentSession();\n  }\n\n  present(): void {\n    this.syncSessionService.present();\n  }\n\n  administer(): void {\n    this.syncSessionService.administer();\n  }\n\n  copyViewerId(): void {\n    this.syncSessionService.viewerId$\n      .pipe(take(1))\n      .subscribe(viewerId => copyToClipboard(viewerId));\n  }\n}\n\nfunction copyToClipboard(text: string): void {\n  const inputElement = document.createElement('input');\n  inputElement.value = text;\n  inputElement.select();\n  document.execCommand('copy');\n  inputElement.remove();\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-button/sync-button.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SyncButtonComponent } from '@codelab/utils/src/lib/sync/sync-button/sync-button.component';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { OnlineIndicatorModule } from '@codelab/utils/src/lib/sync/components/online-indicator/online-indicator.module';\nimport { SyncRegistrationModule } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.module';\n\n@NgModule({\n  declarations: [SyncButtonComponent],\n  exports: [SyncButtonComponent],\n  imports: [\n    CommonModule,\n    OnlineIndicatorModule,\n    MatButtonModule,\n    SyncDirectivesModule,\n    MatIconModule,\n    MatCardModule,\n    MatMenuModule,\n    SyncRegistrationModule\n  ]\n})\nexport class SyncButtonModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-presenter/sync-playground-presenter.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-presenter/sync-playground-presenter.component.html",
    "content": "<codelab-sync-playground-test></codelab-sync-playground-test>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-presenter/sync-playground-presenter.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPlaygroundPresenterComponent } from './sync-playground-presenter.component';\n\ndescribe('SyncPlaygroundPresenterComponent', () => {\n  let component: SyncPlaygroundPresenterComponent;\n  let fixture: ComponentFixture<SyncPlaygroundPresenterComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncPlaygroundPresenterComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPlaygroundPresenterComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-presenter/sync-playground-presenter.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\nimport { LoginService } from '@codelab/firebase-login';\nimport { ReplaySubject, Subject } from 'rxjs';\nimport { User } from 'firebase/app';\nimport { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { SyncSessionService } from '@codelab/utils/src/lib/sync/services/sync-session.service';\nimport { SyncDbService } from '@codelab/utils/src/lib/sync/services/sync-db.service';\nimport { SyncStatus } from '@codelab/utils/src/lib/sync/common';\nimport { SyncPollService } from '@codelab/utils/src/lib/sync/components/poll/common/sync-poll.service';\nimport { SyncRegistrationService } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.service';\nimport { TestRunnerService } from '@codelab/utils/src/lib/sandbox-runner/test-runner.service';\nimport { SyncCodeGameService } from '@codelab/utils/src/lib/sync/components/sync-code-game/sync-code-game.service';\n\n@Component({\n  selector: 'codelab-sync-playground-presenter',\n  templateUrl: './sync-playground-presenter.component.html',\n  styleUrls: ['./sync-playground-presenter.component.css'],\n  providers: [\n    TestRunnerService,\n    SyncDataService,\n    SyncSessionService,\n    SyncDbService,\n    SyncPollService,\n    SyncRegistrationService,\n    SyncCodeGameService,\n    {\n      provide: LoginService,\n      useFactory: () => ({\n        uid$: new ReplaySubject<string>(1),\n        user$: new ReplaySubject<any>(1),\n        preferredStatus$: new ReplaySubject<any>(1)\n      })\n    }\n  ]\n})\nexport class SyncPlaygroundPresenterComponent implements OnInit {\n  @Input() userId: string;\n  @Input() preferredStatus: SyncStatus;\n\n  constructor(private readonly loginService: LoginService) {}\n\n  ngOnInit() {\n    (this.loginService.user$ as Subject<User>).next({\n      uid: this.userId,\n      displayName: 'lol'\n    } as User);\n\n    (this.loginService.uid$ as Subject<string>).next(this.userId);\n    (this.loginService.preferredStatus$ as Subject<string>).next(\n      this.preferredStatus\n    );\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-test/sync-playground-test.component.css",
    "content": ""
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-test/sync-playground-test.component.html",
    "content": "<slide-deck slidesRouting>\n  <codelab-sync-button name=\"playground\"></codelab-sync-button>\n  <div *isPresenting slideShortcuts></div>\n\n  <div *slide id=\"start\">\n    <h2 *isPresenting>Only presenter sees this</h2>\n    <h2 *isViewing>Only viewer sees this</h2>\n    <h2 *isAdmin>Only admin sees this</h2>\n  </div>\n  <div *slide id=\"code\">\n    <sync-code-editor></sync-code-editor>\n  </div>\n\n  <div *slide id=\"registration\">\n    <codelab-registration></codelab-registration>\n  </div>\n\n  <div *slide id=\"poll-1\">\n    <codelab-poll [poll]=\"polls[0]\"></codelab-poll>\n  </div>\n  <div *slide id=\"leaderboard-1\">\n    <codelab-leaderboard [config]=\"polls\"></codelab-leaderboard>\n  </div>\n\n  <!--  <div *slide id=\"poll-2\">-->\n  <!--    <codelab-poll [poll]=\"polls[1]\"></codelab-poll>-->\n  <!--  </div>-->\n  <!--  <div *slide id=\"leaderboard-2\">-->\n  <!--    <codelab-leaderboard [config]=\"polls\"></codelab-leaderboard>-->\n  <!--  </div>-->\n  <!--  <div *slide id=\"poll-0\">-->\n  <!--    <slides-poll [poll]=\"polls[0]\">-->\n  <!--      <div class=\"question\"></div>-->\n  <!--    </slides-poll>-->\n  <!--  </div>-->\n\n  <!--  <div *slide id=\"poll-1\">-->\n  <!--    <slides-poll [poll]=\"polls[1]\">-->\n  <!--      <div class=\"question\"></div>-->\n  <!--    </slides-poll>-->\n  <!--  </div>-->\n\n  <!--  <div *slide id=\"poll-2\">-->\n  <!--    <slides-poll [poll]=\"polls[2]\">-->\n  <!--      <div class=\"question\"></div>-->\n  <!--    </slides-poll>-->\n  <!--  </div>-->\n\n  <!--  <div *slide id=\"poll-3\">-->\n  <!--    <slides-poll [poll]=\"polls[3]\">-->\n  <!--      <div class=\"question\"></div>-->\n  <!--    </slides-poll>-->\n  <!--  </div>-->\n\n  <!--  <div *slide>-->\n  <!--    <slides-leaderboard [config]=\"polls\"></slides-leaderboard>-->\n  <!--  </div>-->\n\n  <!--  <div *slide id=\"poll-4\">-->\n  <!--    <slides-poll [poll]=\"polls[4]\">-->\n  <!--      <div class=\"question\"></div>-->\n  <!--    </slides-poll>-->\n  <!--  </div>-->\n\n  <!--  <div *slide id=\"poll-5\">-->\n  <!--    <slides-poll [poll]=\"polls[5]\">-->\n  <!--      <div class=\"question\"></div>-->\n  <!--    </slides-poll>-->\n  <!--  </div>-->\n  <!--  <div *slide id=\"config-1-results\">-->\n  <!--    the-->\n  <!--  </div>-->\n\n  <div *slide id=\"qna\">\n    <codelab-questions></codelab-questions>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-test/sync-playground-test.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPlaygroundTestComponent } from './sync-playground-test.component';\nimport { SyncModule } from '@codelab/utils/src/lib/sync/sync.module';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { getMockAngularFireProviders } from '@codelab/utils/src/lib/testing/mocks/angular-fire';\n\ndescribe('SyncPlaygroundTestComponent', () => {\n  let component: SyncPlaygroundTestComponent;\n  let fixture: ComponentFixture<SyncPlaygroundTestComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      imports: [SyncModule, RouterTestingModule],\n      providers: [...getMockAngularFireProviders()]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPlaygroundTestComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground-test/sync-playground-test.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncPollConfig } from '@codelab/utils/src/lib/sync/components/poll/common/common';\n\n@Component({\n  selector: 'codelab-sync-playground-test',\n  templateUrl: './sync-playground-test.component.html',\n  styleUrls: ['./sync-playground-test.component.css']\n})\nexport class SyncPlaygroundTestComponent {\n  readonly polls: SyncPollConfig[] = [\n    {\n      key: 'favorite',\n      type: 'choice',\n      question: 'What is your favorite framework?',\n      answer: 'Angular',\n      options: ['react', 'Angular', 'Vue', 'Other']\n    },\n    {\n      key: 'other',\n      type: 'choice',\n      question: 'Another question',\n      answer: '3',\n      options: ['1', '2', '3', '4']\n    }\n    /* {\n       key: 'js',\n       type: 'stars',\n       question: 'How well do you know JavaScript',\n     },\n     {\n       key: 'angularjs',\n       type: 'stars',\n       question: 'How well do you know AngularJS (Old version)',\n     },\n     {\n       key: 'angular',\n       type: 'stars',\n       question: 'How well do you know Angular',\n     },\n     {\n       key: 'fruit',\n       type: 'choice',\n       question: 'What is your favorite fruit?',\n       answer: '🍏',\n       options: [\n         '🍏', '🍋', '🍓', '🍍'\n       ]\n     },\n     {\n       key: 'angular question',\n       type: 'choice',\n       question: 'What is your favorite framework?',\n       options: [\n         'react', 'Angular', 'Vue', 'Other',\n       ]\n     },\n     {\n       key: 'longer question',\n       type: 'choice',\n       question: 'Who created angular',\n       options: [\n         'Мега корпорация \"Крошка-Картошка\"', 'Facebook сделал лично Цукерберг', 'Николай Васильевич Гогол',\n         'Google Angular Brad Green Misko',\n       ]\n     }*/\n  ];\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground.component.html",
    "content": "<codelab-sync-playground-presenter\n  userId=\"pikachu\"\n  [preferredStatus]=\"SyncStatus.PRESENTING\"\n></codelab-sync-playground-presenter>\n<codelab-sync-playground-presenter\n  userId=\"chopin\"\n></codelab-sync-playground-presenter>\n<codelab-sync-playground-presenter\n  userId=\"admin\"\n></codelab-sync-playground-presenter>\n<codelab-sync-playground-presenter\n  userId=\"presenter\"\n></codelab-sync-playground-presenter>\n<codelab-sync-playground-presenter\n  userId=\"saens\"\n></codelab-sync-playground-presenter>\n<codelab-sync-playground-presenter\n  userId=\"part\"\n></codelab-sync-playground-presenter>\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground.component.scss",
    "content": ":host {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: 1fr 1fr;\n  height: 100%;\n\n  > * {\n    border: 1px #444 dotted;\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SyncPlaygroundComponent } from './sync-playground.component';\n\ndescribe('SyncPlaygroundComponent', () => {\n  let component: SyncPlaygroundComponent;\n  let fixture: ComponentFixture<SyncPlaygroundComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SyncPlaygroundComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SyncPlaygroundComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync-playground/sync-playground.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { SyncStatus } from '@codelab/utils/src/lib/sync/common';\n\n@Component({\n  selector: 'codelab-sync-playground',\n  templateUrl: './sync-playground.component.html',\n  styleUrls: ['./sync-playground.component.scss']\n})\nexport class SyncPlaygroundComponent {\n  SyncStatus = SyncStatus;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/sync/sync.module.ts",
    "content": "import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { LoginService } from '@codelab/firebase-login';\nimport { SlidesModule } from '@ng360/slides';\nimport { LeaderboardModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll-presenter/leaderboard/leaderboard.module';\nimport { SyncPollModule } from '@codelab/utils/src/lib/sync/components/poll/sync-poll.module';\nimport { QuestionsModule } from '@codelab/utils/src/lib/sync/components/questions/questions.module';\nimport { SyncRegistrationModule } from '@codelab/utils/src/lib/sync/components/registration/sync-registration.module';\nimport { SyncSessionsModule } from '@codelab/utils/src/lib/sync/components/sync-sessions/sync-sessions.module';\nimport { AllViewerValuesDirective } from '@codelab/utils/src/lib/sync/directives/all-viewer-values.directive';\nimport { SyncDirectivesModule } from '@codelab/utils/src/lib/sync/directives/sync-directives.module';\nimport { SyncButtonModule } from '@codelab/utils/src/lib/sync/sync-button/sync-button.module';\nimport { SyncPlaygroundPresenterComponent } from './sync-playground/sync-playground-presenter/sync-playground-presenter.component';\nimport { SyncPlaygroundTestComponent } from './sync-playground/sync-playground-test/sync-playground-test.component';\nimport { SyncPlaygroundComponent } from './sync-playground/sync-playground.component';\nimport { SyncCodeGameModule } from '@codelab/utils/src/lib/sync/components/sync-code-game/sync-code-game.module';\n\n@NgModule({\n  imports: [\n    SyncDirectivesModule,\n    SyncSessionsModule,\n    CommonModule,\n    MatButtonModule,\n    MatSelectModule,\n    AngularFireDatabaseModule,\n    AngularFireAuthModule,\n    MatMenuModule,\n    MatInputModule,\n    SlidesModule,\n    FormsModule,\n    MatCardModule,\n    MatTabsModule,\n    SyncRegistrationModule,\n    QuestionsModule,\n    SyncPollModule,\n    SyncButtonModule,\n    LeaderboardModule,\n    SyncCodeGameModule\n  ],\n  providers: [LoginService],\n  declarations: [\n    AllViewerValuesDirective,\n    SyncPlaygroundComponent,\n    SyncPlaygroundPresenterComponent,\n    SyncPlaygroundTestComponent\n  ],\n  exports: [AllViewerValuesDirective, SyncPlaygroundComponent]\n})\nexport class SyncModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/common.ts",
    "content": "export interface TestResult {\n  pass: boolean;\n  name: string;\n  error?: string;\n  featured?: boolean;\n}\n\nexport interface TestRunResult {\n  tests: TestResult[];\n  error?: Error;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/file-aware-description/file-aware-description.component.css",
    "content": ".filename {\n  text-decoration: underline;\n  cursor: pointer;\n  color: #444;\n  margin-right: -4px;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/file-aware-description/file-aware-description.component.html",
    "content": "<a class=\"filename\" *ngIf=\"file\" (click)=\"selectFile.emit(file)\">\n  {{ file }}\n</a>\n<span *ngIf=\"file\">:&nbsp;</span>\n<span class=\"title\">{{ title }}</span>\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/file-aware-description/file-aware-description.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { FileAwareDescriptionComponent } from './file-aware-description.component';\n\ndescribe('FileAwareDescriptionComponent', () => {\n  let component: FileAwareDescriptionComponent;\n  let fixture: ComponentFixture<FileAwareDescriptionComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [FileAwareDescriptionComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(FileAwareDescriptionComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/file-aware-description/file-aware-description.component.ts",
    "content": "import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nfunction getTestFile(test: string): string | null {\n  const match = test.trim().match(/^([\\w.\\/]+):/);\n  return match && match[1];\n}\n\nfunction getTitle(test: string) {\n  const file = getTestFile(test);\n  return file ? test.replace(file + ':', '') : test;\n}\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-file-aware-description',\n  templateUrl: './file-aware-description.component.html',\n  styleUrls: ['./file-aware-description.component.css']\n})\nexport class FileAwareDescriptionComponent {\n  file: string;\n  title: string;\n\n  @Output() selectFile = new EventEmitter<string>();\n\n  @Input() set test(test: string) {\n    this.file = getTestFile(test);\n    this.title = getTitle(test);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.component.css",
    "content": ".progress {\n  height: 1vw;\n  font-size: 0.7vw;\n  line-height: 1.1vw;\n  display: flex;\n}\n\n.text-box {\n  border: 1px solid #fff;\n  background: #ff6144;\n  flex: 1;\n}\n\n.text-box.pass {\n  background: #5ccb5d;\n}\n\n.counts {\n  margin: 0 10px;\n}\n\n.preparing-tests {\n  display: flex;\n  align-items: center;\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.component.html",
    "content": "<div class=\"progress\">\n  <div\n    *ngFor=\"let test of tests\"\n    [class.pass]=\"test.pass\"\n    class=\"text-box\"\n  ></div>\n  <div class=\"preparing-tests\" *ngIf=\"tests.length === 0\">\n    <slides-loading-indicator></slides-loading-indicator>\n    Preparing tests...\n  </div>\n  <div class=\"counts\" *ngIf=\"tests.length > 0\">\n    {{ countPassing() }}/{{ (tests || []).length }}\n  </div>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SimpleTestsProgressComponent } from './simple-tests-progress.component';\n\ndescribe('SimpleTestsProgressComponent', () => {\n  let component: SimpleTestsProgressComponent;\n  let fixture: ComponentFixture<SimpleTestsProgressComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [SimpleTestsProgressComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SimpleTestsProgressComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should be created', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.component.ts",
    "content": "import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'codelab-simple-tests-progress',\n  templateUrl: './simple-tests-progress.component.html',\n  styleUrls: ['./simple-tests-progress.component.css']\n})\nexport class SimpleTestsProgressComponent implements OnInit {\n  @Input() tests = [];\n\n  countPassing() {\n    return (this.tests || []).filter(test => test.pass).length;\n  }\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SimpleTestsProgressComponent } from '@codelab/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.component';\nimport { LoadingIndicatorModule } from '@codelab/utils/src/lib/loading-indicator/loading-indicator.module';\n\n@NgModule({\n  declarations: [SimpleTestsProgressComponent],\n  exports: [SimpleTestsProgressComponent],\n  imports: [CommonModule, LoadingIndicatorModule]\n})\nexport class SimpleTestsProgressModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-results/test-results.component.html",
    "content": "<div *ngIf=\"result\" class=\"container\">\n  <codelab-simple-tests-progress\n    *ngIf=\"showProgress\"\n    [tests]=\"tests\"\n  ></codelab-simple-tests-progress>\n\n  <slides-test-run-results\n    [seeAll]=\"!focused\"\n    [focused]=\"focused\"\n    [tests]=\"tests\"\n    (selectFile)=\"selectFile.emit($event)\"\n  ></slides-test-run-results>\n\n  <div *ngIf=\"result.error\" class=\"error-message\">\n    Error: {{ result.error?.message }}\n  </div>\n</div>\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-results/test-results.component.scss",
    "content": "codelab-simple-tests-progress {\n  display: block;\n  margin-bottom: 8px;\n}\n\n.container {\n  position: relative;\n\n  .error-message {\n    position: absolute;\n    background: rgb(187, 2, 0);\n    color: white;\n    opacity: 0.9;\n    font-size: 20px;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    padding: 20px;\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-results/test-results.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TestResultsComponent } from './test-results.component';\n\ndescribe('TestResultsComponent', () => {\n  let component: TestResultsComponent;\n  let fixture: ComponentFixture<TestResultsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TestResultsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TestResultsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-results/test-results.component.ts",
    "content": "import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport {\n  TestResult,\n  TestRunResult\n} from '@codelab/utils/src/lib/test-results/common';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-test-results',\n  templateUrl: './test-results.component.html',\n  styleUrls: ['./test-results.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TestResultsComponent implements OnChanges {\n  @Input() result: TestRunResult;\n  @Output() selectFile = new EventEmitter<string>();\n  @Input() focused = true;\n  @Input() showProgress = true;\n  tests: TestResult[];\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.result && this.result && Array.isArray(this.result.tests)) {\n      let hasFailures = false;\n      this.tests = this.result.tests.map(t => {\n        const result = { ...t, featured: !t.pass && !hasFailures };\n        if (!t.pass) {\n          hasFailures = true;\n        }\n        return result;\n      });\n    }\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-results.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TestRunResultsComponent } from './test-run-results/test-run-results.component';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TestResultsComponent } from './test-results/test-results.component';\nimport { SimpleTestsProgressModule } from '@codelab/utils/src/lib/test-results/simple-tests-progress/simple-tests-progress.module';\nimport { FileAwareDescriptionComponent } from './file-aware-description/file-aware-description.component';\n\n@NgModule({\n  declarations: [\n    TestRunResultsComponent,\n    TestResultsComponent,\n    FileAwareDescriptionComponent\n  ],\n  exports: [TestResultsComponent, TestRunResultsComponent],\n  imports: [\n    CommonModule,\n    MatCheckboxModule,\n    FormsModule,\n    MatIconModule,\n    SimpleTestsProgressModule\n  ]\n})\nexport class TestResultsModule {}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-run-results/test-run-results.component.html",
    "content": "<ng-container *ngFor=\"let t of tests; trackBy: getName\">\n  <div\n    *ngIf=\"t.featured || seeAll\"\n    class=\"test\"\n    [class.featured]=\"t.featured\"\n    [class.see-all]=\"seeAll\"\n  >\n    <div class=\"state\">\n      <mat-icon *ngIf=\"t.pass === true\" class=\"pass\">check_circle</mat-icon>\n      <mat-icon *ngIf=\"t.pass === false\" class=\"fail\">error_outline</mat-icon>\n      <mat-icon *ngIf=\"t.pass === undefined\" class=\"running\">refresh</mat-icon>\n    </div>\n    <div>\n      <div class=\"name\" [title]=\"t.name\">\n        <slides-file-aware-description\n          [test]=\"t.name\"\n          (selectFile)=\"selectFile.emit($event)\"\n        ></slides-file-aware-description>\n      </div>\n      <div class=\"error\" *ngIf=\"t.featured\">{{ t.error }}</div>\n    </div>\n  </div>\n</ng-container>\n\n<mat-checkbox [(ngModel)]=\"seeAll\" *ngIf=\"tests?.length > 1 && focused\" i18n>\n  Display all tests\n</mat-checkbox>\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-run-results/test-run-results.component.scss",
    "content": ":host {\n  display: block;\n  min-height: 80px;\n}\n\n.test {\n  display: flex;\n  align-items: start;\n  margin-bottom: 16px;\n  color: #888;\n  padding-left: 8px;\n\n  &.featured {\n    background: rgba(255, 88, 75, 0.21);\n    border-radius: 5px;\n    padding: 16px 8px;\n\n    .name {\n      font-size: 20px;\n      color: #444;\n      margin-bottom: 8px;\n    }\n\n    .error {\n      color: #888;\n    }\n  }\n\n  .state {\n    margin-right: 10px;\n  }\n\n  &:not(.featured) .name {\n    flex: 0;\n    max-width: 400px;\n    line-height: 22px;\n    height: 22px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n\n  .pass {\n    color: var(--test-succcess);\n  }\n\n  .fail {\n    color: #d61f22;\n  }\n}\n\nmat-icon.running {\n  animation: rotation 1s infinite linear;\n}\n\n@keyframes rotation {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-run-results/test-run-results.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { TestRunResultsComponent } from './test-run-results.component';\n\ndescribe('TestRunResultsComponent', () => {\n  let component: TestRunResultsComponent;\n  let fixture: ComponentFixture<TestRunResultsComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [TestRunResultsComponent]\n    }).compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(TestRunResultsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "libs/utils/src/lib/test-results/test-run-results/test-run-results.component.ts",
    "content": "import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { TestResult } from '@codelab/utils/src/lib/test-results/common';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'slides-test-run-results',\n  templateUrl: './test-run-results.component.html',\n  styleUrls: ['./test-run-results.component.scss']\n})\nexport class TestRunResultsComponent implements OnInit {\n  @Output() selectFile = new EventEmitter<string>();\n  @Input() tests: TestResult[];\n  @Input() seeAll = false;\n  @Input() focused = true;\n\n  getName(test) {\n    return test.name;\n  }\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n"
  },
  {
    "path": "libs/utils/src/lib/testing/mocks/angular-fire.ts",
    "content": "import { of } from 'rxjs';\nimport { AngularFireDatabase } from '@angular/fire/database';\nimport { AngularFireAuth } from '@angular/fire/auth';\n\nexport const MockAngularFireDatabase = {\n  list: jasmine.createSpy('list').and.returnValue({\n    snapshotChanges: () => of([]),\n    valueChanges: () => of([])\n  }),\n  object: jasmine.createSpy('object').and.returnValue(\n    of({\n      snapshotChanges: () => of({}),\n      valueChanges: () => of({})\n    })\n  )\n};\n\nexport const MockAngularFireAuth = {\n  user: of({ isAnonymous: true, uid: 'lol' }),\n  authState: of({})\n};\n\nexport function getMockAngularFireProviders() {\n  return [\n    {\n      provide: AngularFireDatabase,\n      useValue: MockAngularFireDatabase\n    },\n    {\n      provide: AngularFireAuth,\n      useValue: MockAngularFireAuth\n    }\n  ];\n}\n"
  },
  {
    "path": "libs/utils/src/lib/testing/mocks/sync-db-service.ts",
    "content": "import { SyncDataService } from '@codelab/utils/src/lib/sync/services/sync-data.service';\nimport { of } from 'rxjs';\n\nexport function getSyncDbService() {\n  return [\n    {\n      provide: SyncDataService,\n      useValue: {\n        getPresenterObject() {\n          return {\n            valueChanges() {\n              return of({});\n            }\n          };\n        }\n      }\n    }\n  ];\n}\n"
  },
  {
    "path": "libs/utils/src/lib/tracking/tracking.directive.ts",
    "content": "import { Directive, HostListener } from '@angular/core';\nimport { AngularFireDatabase } from '@angular/fire/database';\nimport { AngularFireAuth } from '@angular/fire/auth';\nimport { Router } from '@angular/router';\nimport { SlidesDeckComponent } from '@ng360/slides';\n\n@Directive({\n  // tslint:disable-next-line:all TODO: Fix linter warnings on the selector and delete this comment.\n  selector: '[slides-tracking]'\n})\nexport class TrackingDirective {\n  auth;\n  lastSlideChange;\n  history: Array<any> = [];\n\n  constructor(\n    private afDb: AngularFireDatabase,\n    private afAuth: AngularFireAuth,\n    private router: Router,\n    private presentation: SlidesDeckComponent\n  ) {\n    afAuth.auth.signInAnonymously();\n    afAuth.authState.subscribe(authData => {\n      this.auth = authData;\n    });\n    this.lastSlideChange = Date.now();\n  }\n\n  @HostListener('slideChange', ['$event']) slideChange(index) {\n    if (this.auth) {\n      const dateNow = Date.now();\n      const diffMinutes = dateNow - this.lastSlideChange;\n      this.lastSlideChange = dateNow;\n      const userHistory = this.afDb.list('/user_progress/' + this.auth.uid);\n      userHistory.push({\n        slideId: index,\n        timeStamp: dateNow,\n        msDiff: diffMinutes, // time user spent on the prev. slide\n        route: this.router.url,\n        totalSlides: this.presentation.slides.length,\n        milestone: this.router.url.split('/')[1]\n      });\n    }\n    // TODO: use observables to preserve all data\n  }\n}\n"
  },
  {
    "path": "libs/utils/src/lib/tracking/tracking.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TrackingDirective } from './tracking.directive';\nimport { AngularFireModule } from '@angular/fire';\nimport { AngularFireDatabaseModule } from '@angular/fire/database';\nimport { AngularFireAuthModule } from '@angular/fire/auth';\nimport { environment } from '../../../../../apps/codelab/src/environments/environment';\n\nexport const angularFire = AngularFireModule.initializeApp(\n  environment.firebaseConfig\n);\n\n@NgModule({\n  imports: [\n    CommonModule,\n    AngularFireDatabaseModule,\n    AngularFireAuthModule,\n    angularFire\n  ],\n  declarations: [TrackingDirective],\n  exports: [TrackingDirective]\n})\nexport class TrackingModule {}\n"
  },
  {
    "path": "libs/utils/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone';\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "libs/utils/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"jasmine\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "libs/utils/tsconfig.lib.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"target\": \"es2015\",\n    \"module\": \"es2015\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"inlineSources\": true,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"importHelpers\": true,\n    \"types\": [],\n    \"lib\": [\"dom\", \"es2015\"]\n  },\n  \"angularCompilerOptions\": {\n    \"annotateForClosureCompiler\": true,\n    \"skipTemplateCodegen\": true,\n    \"strictMetadataEmit\": true,\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true,\n    \"flatModuleId\": \"AUTOGENERATED\",\n    \"flatModuleOutFile\": \"AUTOGENERATED\"\n  },\n  \"exclude\": [\"src/test.ts\", \"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "libs/utils/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../dist/out-tsc\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\"],\n  \"include\": [\"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "libs/utils/tslint.json",
    "content": "{\n  \"extends\": \"../../tslint.json\",\n  \"rules\": {\n    \"directive-selector\": [true, \"attribute\", \"codelab\", \"camelCase\"],\n    \"component-selector\": [true, \"element\", \"codelab\", \"kebab-case\"]\n  }\n}\n"
  },
  {
    "path": "ng2ts/.prettierignore",
    "content": "**/*\n"
  },
  {
    "path": "ng2ts/api.service.ts",
    "content": "import { VideoItem } from './video/video-item';\n\nconst FAKE_VIDEOS = [\n  {\n    title: 'Scruffy McPurrrr',\n    src: '/assets/images/cat-00.png',\n    description: 'Scruffy McPurrrr is a world famous kitty known for his escapades around the world purring on laps!',\n    views: 100,\n    likes: 49329,\n    date: '2016-11-25'\n  },\n  {\n    title: 'The Itty Bitty Kitty Comittee',\n    src: '/assets/images/cat-01.jpg',\n    description: 'The Itty Bitty Kitty Comittee are a collection of felines coming for you!',\n    views: 100,\n    likes: 20,\n    date: '2016-11-21'\n  }, {\n    title: 'IT A KITTY!',\n    src: '/assets/images/cat-02.jpg',\n    description: 'It\\'s a kitty, I mean, how are you not in love with him?',\n    views: 100,\n    likes: 20,\n    date: '2016-10-02'\n\n  }, {\n    title: 'Cate Purrton\\'s C.I. Purr Edition Cover',\n    src: '/assets/images/cat-03.jpg',\n    description: 'We don\\'t hear any Cat\\'s Illustrated readers complaining about Purrton\\'s cover.',\n    views: 100,\n    likes: 20,\n    date: '2016-09-02'\n  },\n  {\n    title: 'SINGLE SUNSHINE',\n    src: '/assets/images/cat-04.jpg',\n    description: 'It was cat for at least an hour. It was incredible. The camera could not capture the vivid intensity ' +\n    'and brightness. Look into the mirror, look into your soul! What it means.',\n    views: 100,\n    likes: 20,\n    date: '2016-08-02'\n  },\n  {\n    title: 'Mittens',\n    src: '/assets/images/cat-05.png',\n    description: 'Mitty is a kitty with white mittens for paws!',\n    views: 24,\n    likes: 3,\n    date: '2014-06-12'\n  }, {\n    title: 'Cinco de Gato',\n    src: '/assets/images/cat-06.jpg',\n    description: 'To be totally fair, we also wound up celebrating Moewloween, Purrster, Scratching Day, Good Kitty ' +\n    'Day, All Cats Day, and various bank holidays in the exact same way.',\n    views: 5,\n    likes: 5,\n    date: '2017-05-05'\n  },\n  {\n    title: 'Oops, looks like a bug!',\n    src: '/assets/images/dog.jpg',\n    description: 'BAMBOOZLED!',\n    views: 891,\n    likes: 1,\n    date: '2016-08-02'\n  },\n  {\n    title: 'Koffee Kat',\n    src: '/assets/images/cat-07.jpg',\n    description: 'Somedays you really did have too much coffee... That\\'s everyday for Koffee Kat',\n    views: 322,\n    likes: 98,\n    date: '2016-02-02'\n  },\n  {\n    title: 'Bengalore visist Bengalore',\n    src: '/assets/images/cat-08.jpg',\n    description: 'Bengalore vlog in India.',\n    views: 404,\n    likes: 22,\n    date: '2016-08-02'\n  },\n  {\n    title: 'Scooby (CLICKBAIT!!!)',\n    src: '/assets/images/cat-09.jpg',\n    description: 'It\\'s a cat not a doo.',\n    views: 1969,\n    likes: 987,\n    date: '2016-08-02'\n  },\n  {\n    title: 'Kitty Tikki Masala',\n    src: '/assets/images/cat-10.jpg',\n    description: 'Watch a kitty eat chicken tikki masala.',\n    views: 231,\n    likes: 43,\n    date: '2016-05-13'\n  },\n  {\n    title: 'ColourBall Paint',\n    src: '/assets/images/cat-11.jpg',\n    description: 'Speed tutorial of cat painting portrait',\n    views: 1231,\n    likes: 203,\n    date: '2016-11-28'\n  },\n  {\n    title: 'Emerson Meows At Graduation',\n    src: '/assets/images/cat-12.jpg',\n    description: 'Emerson the cat graduates from Emerson College.',\n    views: 385,\n    likes: 34,\n    date: '2015-05-12'\n  },\n  {\n    title: 'Pepperoni Has His First Pizza',\n    src: '/assets/images/cat-13.jpg',\n    description: 'A cat has a slice of pizza!',\n    views: 432,\n    likes: 56,\n    date: '2016-08-02'\n  },\n  {\n    title: 'Nikki\\'s First Feast',\n    src: '/assets/images/cat-14.jpg',\n    description: 'Nikki tries fancy cat food.',\n    views: 99,\n    likes: 1,\n    date: '2016-09-23'\n  },\n  {\n    title: 'Thunder Scared Of Lightning',\n    src: '/assets/images/cat-15.jpg',\n    description: 'Thunder scared to meet the new member of our family.',\n    views: 132,\n    likes: 23,\n    date: '2016-08-02'\n  },\n  {\n    title: 'Tacocat',\n    src: '/assets/images/cat-16.jpg',\n    description: 'It\\'s a palindrome... And a cat eating a taco...',\n    views: 314,\n    likes: 15,\n    date: '2015-03-14'\n  },\n  {\n    title: 'Perseus Flies',\n    src: '/assets/images/cat-17.jpg',\n    description: 'Perseus first trip on a plane.',\n    views: 761,\n    likes: 31,\n    date: '2015-11-02'\n  },\n  {\n    title: 'Gus',\n    src: '/assets/images/cat-18.jpg',\n    description: 'Come on, it\\'s a cat video',\n    views: 893,\n    likes: 243,\n    date: '2017-05-10'\n  },\n];\n\nexport const Api = {\n  fetch(searchString: string): Array<VideoItem> {\n    return FAKE_VIDEOS.filter((video) =>\n      video.title.toLowerCase().indexOf(searchString.toLowerCase()) >= 0\n    );\n  }\n};\n"
  },
  {
    "path": "ng2ts/app.component.ts",
    "content": "import { Component } from '@angular/core';\n/*d:templateAddAction/trimLeading*/\nimport { VideoItem } from './video/video-item';\n/*/d*//*d:diInjectService/trimLeading*/\nimport { VideoService } from './video/video.service';\n/*/d*//*d:templateAllVideos:diInjectService*/\nconst FAKE_VIDEOS = [{\n    title: 'Cute kitten',\n    src: '/assets/images/cat-01.jpg'\n  },\n  {\n    title: 'Kitten on the tree',\n    src: '/assets/images/cat-05.png'\n  },\n  {\n    title: 'Serious cat',\n    src: '/assets/images/cat-03.jpg'\n  }];\n/*/d*//*d:neverShow*//* tslint:disable *//*/d*//*d:createComponentSolved*/\n@Component({\n  selector: 'my-app',\n  /*/d*//*d:createComponentSolved:bootstrapSolved/trimBoth*/\n  template: '<h1>Hello MewTube!</h1>',\n  /*/d*//*d:templatePageSetup/trimBoth*/\n  templateUrl: 'app.html'\n  /*/d*//*d:createComponentSolved/trimTrailing*/\n})\nexport class AppComponent {\n  /*/d*//*d:templateAddActionSolved/trimTrailing*/\n  videos: VideoItem[] = /*/d*//*d:templateAddActionSolved:templateAllVideos/trimTrailing*/ [] /*/d*//*d:neverShow*/ &&\n    /*/d*//*d:templateAllVideosSolved:templateAllVideosSolved/trimTrailing*/ FAKE_VIDEOS /*/d*//*d:neverShow*/ &&\n    /*/d*//*d:diInjectService/trimTrailing*/ [] /*/d*//*d:templateAddActionSolved*/;\n/*/d*//*d:templatePageSetup/trimTrailing*/\n  title = 'MewTube';\n/*/d*//*d:diInjectServiceSolved*/\n  constructor(public videoService: VideoService) {\n  }\n/*/d*//*d:templateAddActionSolved/trimTrailing*/\n  search(searchString: string) {\n    /*/d*//*d:diInjectServiceSolved*/\n    this.videos = this.videoService.search(searchString);\n    /*/d*//*d:templateAllVideosSolved:diInjectService*/\n    this.videos = FAKE_VIDEOS.filter(video => video.title.indexOf(searchString) >= 0);\n  /*/d*//*d:templateAddActionSolved/trimBoth*/}\n  /*/d*//*d:createComponentSolved/trimTrailing*/\n}\n/*/d*//*d:neverShow*/\n// Please ignore\nexport function evalJs(string) {\n  return string;\n}\n/*/d*/\n"
  },
  {
    "path": "ng2ts/app.html",
    "content": "<div>/*d:templatePageSetupSolved:material*/\n  <h1>{{title}}</h1> /*/d*//*d:materialSolved/trimTrailing*/\n  <mat-toolbar color=\"primary\">\n    <span>{{title}}</span>\n  </mat-toolbar>\n  /*/d*//*d:routerSolved/trimTrailing*/\n  <ul>\n    <li><a routerLink=\"/\">Search</a></li>\n    <li><a routerLink=\"/upload\">Upload</a></li>\n  </ul>\n  <router-outlet></router-outlet>\n  /*/d*//*d:templatePageSetupSolved:templateAddAction/trimLeading*/\n  <input type=\"text\" placeholder=\"video\">\n  <button>Search</button>\n  /*/d*//*d:templateAddActionSolved:routerPre*/<input type=\"text\" placeholder=\"video\" #searchTerm>\n  <button (click)=\"search(searchTerm.value)\">Search!</button>\n  /*/d*//*d:templateAddActionSolved:routerPre*/\n  <div *ngIf=\"videos.length == 0\">\n    No videos!\n  </div>\n  /*/d*//*d:templateAllVideosSolved:videoComponentUse*/\n  <div *ngFor=\"let video of videos\">\n    <h2>{{video.title}}</h2>\n    <img [src]=\"video.src\">\n  </div>\n  /*/d*//*d:videoComponentUseSolved:routerPre*/\n  <my-video *ngFor=\"let video of videos\" [video]=\"video\"></my-video>\n  /*/d*/\n</div>\n"
  },
  {
    "path": "ng2ts/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppComponent } from './app.component';\n/*d:thumbsComponentUse/trimLeading*/\nimport { ThumbsComponent } from './thumbs/thumbs.component';\n/*/d*//*d:togglePanelComponentUse/trimLeading*/\nimport { TogglePanelComponent } from './toggle-panel/toggle-panel.component';\n/*/d*//*d:diInjectService/trimLeading*/\nimport { VideoService } from './video/video.service';\n/*/d*//*d:videoComponentUse/trimLeading*/\nimport { VideoComponent } from './video/video.component';\n/*/d*//*d:contextComponentUse/trimLeading*/\nimport { ContextComponent } from './context/context.component';\n/*/d*//*d:fuzzyPipeUse/trimLeading*/\nimport { FuzzyPipe } from './fuzzy-pipe/fuzzy.pipe';\n/*/d*//*d:router/trimLeading*/\nimport { RouterModule, Routes } from '@angular/router';\nimport { SearchComponent } from './search/search.component';\nimport { UploadComponent } from './upload/upload.component';\n/*/d*//*d:material/trimLeading*/\nimport { MatCardModule} from '@angular/material/card'; /*/d*//*d:forms*/\nimport { MatInputModule} from '@angular/material/input';\nimport { MatButtonModule} from '@angular/material/button';\n /*/d*//*d:material*/\nimport { MatToolbarModule} from '@angular/material/toolbar';\n/*/d*//*d:forms/trimLeading*/\nimport { FormsModule } from '@angular/forms';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\n/*/d*//*d:createModuleSolved*/\n@NgModule({\n  imports: [\n    BrowserModule,\n    /*/d*//*d:materialSolved/trimLeading*/\n    MatToolbarModule,\n    MatCardModule,\n    /*/d*//*d:formsSolved/trimLeading*/\n    MatButtonModule,\n    MatInputModule,\n    FormsModule,\n    /*/d*//*d:formsPre/trimLeading*/\n    NoopAnimationsModule,\n    /*/d*//*d:routerSolved/trimLeading*/\n    RouterModule.forRoot([\n      {path: '', component: SearchComponent},\n      {path: 'upload', component: UploadComponent}\n  ]) /*/d*//*d:createModuleSolved/trimTrailing*/\n],\n  declarations: [AppComponent\n    /*/d*//*d:videoComponentUseSolved/trimBoth*/, VideoComponent\n    /*/d*//*d:thumbsComponentUseSolved/trimBoth*/, ThumbsComponent\n    /*/d*//*d:togglePanelComponentUseSolved/trimBoth*/, TogglePanelComponent\n    /*/d*//*d:contextComponentUse/trimBoth*/, ContextComponent\n    /*/d*//*d:router/trimBoth*/, SearchComponent, UploadComponent\n    /*/d*//*d:fuzzyPipeUseSolved/trimBoth*/, FuzzyPipe\n    /*/d*//*d:createModuleSolved/trimBoth*/\n  ],\n  bootstrap: [AppComponent]/*/d*//*d:diInjectServiceSolved/trimTrailing*/,\n  providers: [VideoService]\n  /*/d*//*d:createModuleSolved/trimTrailing*/\n})\nexport class AppModule {\n  /*/d*//*d:createModuleSolved*/\n}\n\n/*/d*//*d:neverShow*/\n// Needed for type checking\nexport function evalJs(param) { return param; }\n/*/d*/\n"
  },
  {
    "path": "ng2ts/code.ts",
    "content": "export declare const thumbs_thumbs_html: string;\nexport declare const video_video_component_html: string;\nexport declare const upload_upload_component_html: string;\nexport declare const search_search_component_html: string;\nexport declare const typescript_intro_Codelab_ts_AST: string;\nexport declare const app_html: string;\nexport declare const app_component_ts: string;\nexport declare const app_module_ts: string;\nexport declare const toggle_panel_toggle_panel_html: string;\nexport declare const context_context_html: string;\nexport declare const ts: any;\nexport declare const babylon: any;\nexport declare const babel_traverse: any;\nexport declare const babel_types: any;\n\n"
  },
  {
    "path": "ng2ts/context/context.component.ts",
    "content": "import {Component} from '@angular/core';\nimport {ContextService} from './context.service';\nimport {VideoComponent} from '../video/video.component';\n\n@Component({\n  selector: 'my-ad',\n  templateUrl: 'context.html'\n})\nexport class ContextComponent {\n  text: string;\n  /*d:contextComponentUseSolved*/\n  constructor(public parent: VideoComponent,\n              private  service: ContextService) {\n  }\n\n  ngOnInit() {\n    this.text = this.service\n      .getAdText(this.parent.video.description);\n  }\n  /*/d*/\n}\n"
  },
  {
    "path": "ng2ts/context/context.html",
    "content": "{{text}}\n"
  },
  {
    "path": "ng2ts/context/context.service.ts",
    "content": "export class ContextService {\n  getAdText(description: string) {\n    // Super secret algorithm, please don't share outside of this course.\n    return description.indexOf('music') >= 0 ?\n      'Buy awesome speakers on our web site.' :\n      'Check out our web site';\n  }\n}\n"
  },
  {
    "path": "ng2ts/data-binding/DataBinding.ts",
    "content": "import {Component, Input} from '@angular/core';\nimport {DomSanitizer} from '@angular/platform-browser';\n\n@Component({\n  selector: 'my-flag',\n\n  template: `<my-rectangle [color]=\"'yellow'\" [height]=\"60\"></my-rectangle>\n    <my-rectangle [color]=\"'blue'\" [height]='30'></my-rectangle>\n    <my-rectangle [color]=\"'red'\" [height]='30'></my-rectangle>`\n\n\n})\nexport class ParentComponent {\n}\n\n@Component({\n  selector: 'my-rectangle',\n  template: `<div  [style]=\"getCss()\">1</div>`\n})\nexport class Rectangle {\n  @Input() color: string;\n  @Input() height: number;\n\n  constructor(private sanitizer: DomSanitizer) {\n  }\n\n  getCss() {\n    return this.sanitizer.bypassSecurityTrustStyle(`\n      width: 300;\n      height: 30px; \n      background: ${this.color};\n    `);\n  }\n}\n\n"
  },
  {
    "path": "ng2ts/data-binding/DataBindingModule.ts",
    "content": "import {BrowserModule} from '@angular/platform-browser';\nimport {NgModule} from '@angular/core';\nimport {ParentComponent, Rectangle} from './DataBinding';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [ParentComponent, Rectangle],\n  bootstrap: [ParentComponent]\n})\nexport class AppModule {\n}\n"
  },
  {
    "path": "ng2ts/fuzzy-pipe/fuzzy.pipe.ts",
    "content": "import {Pipe, PipeTransform} from '@angular/core';\n/*d:fuzzyPipeCreateSolved*/\n@Pipe({name: 'fuzzy'})\nexport class FuzzyPipe implements PipeTransform {\n  transform(value: string) {\n    let date = new Date(value);\n    let dateNow = new Date();\n\n    let millisecondsDifference = dateNow.getTime() - date.getTime();\n    let differenceDays = Math.floor(millisecondsDifference / (1000 * 3600 * 24));\n    let differenceYears = Math.floor(differenceDays / 365);\n\n    if (differenceDays < 365) {\n      return differenceDays + ' ' + 'days';\n    }\n    return differenceYears + ' ' + 'years ago';\n  }\n}\n/*/d*//*d:neverShow*/\n// Please ignore\nexport function evalJs(string) {\n  return string;\n}\n/*/d*/\n"
  },
  {
    "path": "ng2ts/main.ts",
    "content": "import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app.module';\nimport { ApplicationRef, enableProdMode, NgModuleRef } from '@angular/core';\n/*d:templatePageSetup/trimLeading*/\nimport { ResourceLoader } from '@angular/compiler';\nimport * as code from './code';\n\n/* dark magic, please ignore */ try {enableProdMode();} catch (e) {} /* The code below is used to match the Components with the appropriate templates. */class MyResourceLoader extends ResourceLoader {get(url: string): Promise<string> {const templateId = Object.keys(code).find(key => key.includes(url.replace(/[\\/\\.-]/gi, '_')));let template = code[templateId];if (!template) {console.log(template);debugger;}return Promise.resolve(template);};}function createNewHosts(cmps) {const components = Array.prototype.map.call(cmps, function (componentNode) {const newNode = document.createElement(componentNode.tagName);if (!componentNode.parentNode) {document.body.append(componentNode);}const parentNode = componentNode.parentNode;const currentDisplay = newNode.style.display;newNode.style.display = 'none';parentNode.insertBefore(newNode, componentNode);function removeOldHost() {newNode.style.display = currentDisplay;try {parentNode.removeChild(componentNode);} catch (e) {}}return removeOldHost;});return function removeOldHosts() {components.forEach(function (removeOldHost) {return removeOldHost();});};}export const hmrBootstrap = (ngModule: NgModuleRef<any>) => {const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);const elements = appRef.components.map((c) => c.location.nativeElement);const makeVisible = createNewHosts(elements);ngModule.destroy();makeVisible();};if (window['ref']) {hmrBootstrap(window['ref']);window['ref'] = null;}\n\n/*/d*//*d:bootstrapSolved/trimTrailing*/\nconst platform = platformBrowserDynamic();\n/*/d*//*d:bootstrapSolved:bootstrapSolved/trimTrailing*/\n\n\nplatform.bootstrapModule(AppModule);\n/*/d*//*d:templatePageSetup/trimTrailing*/\nplatform.bootstrapModule(AppModule, {\n  providers: [\n    {provide: ResourceLoader, useClass: MyResourceLoader, deps: []}\n  ]\n}).then((ngModuleRef: NgModuleRef<any>) => {\n  window['ref'] = ngModuleRef;\n}).catch(err => console.error(err));\n/*/d*/\n"
  },
  {
    "path": "ng2ts/ng2ts.ts",
    "content": "// tslint:disable:max-line-length TODO: Clean up this file and remove this comment.\n//  TODO: This should be done using require.context\n\nimport { Injectable } from '@angular/core';\nimport { createModuleTest } from './tests/createModuleTest';\nimport { createComponentTest } from './tests/createComponentTest';\nimport { createBootstrapTest } from './tests/bootstrapTest';\nimport { DiffFilesResolver } from '../libs/utils/src/lib/differ/diffFilesResolver';\n\ndeclare const require;\n\nconst preloadedFiles = {\n  'app.component.ts': require(`!raw-loader!./app.component.ts`),\n  'app.module.ts': require('!raw-loader!./app.module.ts'),\n  'app.html': require('!raw-loader!./app.html'),\n  'main.ts': require('!raw-loader!./main.ts'),\n  'style.css': require('!raw-loader!./style.css'),\n  'video/video-item.ts': require('!raw-loader!./video/video-item.ts'),\n  'api.service.ts': require('!raw-loader!./api.service.ts'),\n  'material.css': require('!!raw-loader!@angular/material/prebuilt-themes/indigo-pink.css'),\n  'search/search.component.html': require('!raw-loader!./search/search.component.html'),\n  'search/search.component.ts': require('!raw-loader!./search/search.component.ts'),\n  'upload/upload.component.html': require('!raw-loader!./upload/upload.component.html'),\n  'upload/upload.component.ts': require('!raw-loader!./upload/upload.component.ts'),\n  'video/video.service.ts': require('!raw-loader!./video/video.service.ts'),\n  'video/video.component.html': require('!raw-loader!./video/video.component.html'),\n  'video/video-materialized.component.html': require('!raw-loader!./video/video-materialized.component.html'),\n  'video/video.index.html': require('!raw-loader!./video/video.index.html'),\n  'video/video-wrapper.component.ts': require('!raw-loader!./video/video-wrapper.component.ts'),\n  'video/video.component.ts': require('!raw-loader!./video/video.component.ts'),\n  'thumbs/thumbs.component.ts': require('!raw-loader!./thumbs/thumbs.component.ts'),\n  'thumbs/thumbs.html': require('!raw-loader!./thumbs/thumbs.html'),\n  'toggle-panel/toggle-panel.html': require('!raw-loader!./toggle-panel/toggle-panel.html'),\n  'toggle-panel/toggle-panel.component.ts': require('!raw-loader!./toggle-panel/toggle-panel.component.ts'),\n  'wrapper.component.ts': require('!raw-loader!./wrapper.component.ts'),\n  'context/context.component.ts': require('!raw-loader!./context/context.component.ts'),\n  'context/context.service.ts': require('!raw-loader!./context/context.service.ts'),\n  'context/context.html': require('!raw-loader!./context/context.html'),\n  'typescript-intro/Codelab.ts': require('!raw-loader!./typescript-intro/Codelab.ts'),\n  'typescript-intro/Main.ts': require('!raw-loader!./typescript-intro/Main.ts'),\n  'typescript-intro/Guest.ts': require('!raw-loader!./typescript-intro/Guest.ts'),\n  'fuzzy-pipe/fuzzy.pipe.ts': require('!raw-loader!./fuzzy-pipe/fuzzy.pipe.ts'),\n  'tests/codelabTest.ts': require('!raw-loader!./tests/codelabTest.ts'),\n  'tests/createComponentTest.ts': require('!raw-loader!./tests/createComponentTest.ts'),\n  'tests/createModuleTest.ts': require('!raw-loader!./tests/createModuleTest.ts'),\n  'tests/bootstrapTest.ts': require('!raw-loader!./tests/bootstrapTest.ts'),\n  'tests/templatePageSetupTest.ts': require('!raw-loader!./tests/templatePageSetupTest.ts'),\n  'tests/routerTest.ts': require('!raw-loader!./tests/routerTest.ts'),\n  'tests/formsTest.ts': require('!raw-loader!./tests/formsTest.ts'),\n  'tests/materialTest.ts': require('!raw-loader!./tests/materialTest.ts'),\n  'tests/templateAddActionTest.ts': require('!raw-loader!./tests/templateAddActionTest.ts'),\n  'tests/templateAllVideosTest.ts': require('!raw-loader!./tests/templateAllVideosTest.ts'),\n  'tests/diInjectServiceTest.ts': require('!raw-loader!./tests/diInjectServiceTest.ts'),\n  'tests/videoComponentCreateTest.ts': require('!raw-loader!./tests/videoComponentCreateTest.ts'),\n  'tests/videoComponentUseTest.ts': require('!raw-loader!./tests/videoComponentUseTest.ts'),\n  'tests/ThumbsComponentCreateTest.ts': require('!raw-loader!./tests/ThumbsComponentCreateTest.ts'),\n  'tests/ThumbsComponentUseTest.ts': require('!raw-loader!./tests/ThumbsComponentUseTest.ts'),\n  'tests/togglePanelComponentCreateTest.ts': require('!raw-loader!./tests/togglePanelComponentCreateTest.ts'),\n  'tests/togglePanelComponentUseTest.ts': require('!raw-loader!./tests/togglePanelComponentUseTest.ts'),\n  'tests/contextComponentUseTest.ts': require('!raw-loader!./tests/contextComponentUseTest.ts'),\n  'tests/fuzzyPipeCreateTest.ts': require('!raw-loader!./tests/fuzzyPipeCreateTest.ts'),\n  'tests/fuzzyPipeUseTest.ts': require('!raw-loader!./tests/fuzzyPipeUseTest.ts'),\n  'thumbs.app.module.ts': require('!raw-loader!./thumbs.app.module.ts'),\n  'video.app.module.ts': require('!raw-loader!./video.app.module.ts'),\n  'toggle-panel.app.module.ts': require('!raw-loader!./toggle-panel.app.module.ts'),\n  'index.html': '<base href=\"/assets/runner/\"><my-app></my-app><div class=\"error\"></div>'\n  // 'index.html': '<my-thumbs></my-thumbs><my-wrapper></my-wrapper>'\n};\n\nconst files = {\n  appComponent: 'app.component.ts',\n  appModule: 'app.module.ts',\n  appHtml: 'app.html',\n  main: 'main.ts',\n  video_videoItem: 'video/video-item.ts',\n  apiService: 'api.service.ts',\n  search_search_component_html: 'search/search.component.html',\n  search_search_component: 'search/search.component.ts',\n  upload_upload_component_html: 'upload/upload.component.html',\n  upload_upload_component: 'upload/upload.component.ts',\n  video_videoService: 'video/video.service.ts',\n  video_video_component_html: 'video/video.component.html',\n  video_video_component: 'video/video.component.ts',\n  video_video_wrapper_component: 'video/video-wrapper.component.ts',\n  video_video_index_html: 'video/video.index.html',\n  thumbs_thumbs_component: 'thumbs/thumbs.component.ts',\n  thumbs_thumbs_html: 'thumbs/thumbs.html',\n  toggle_panel_toggle_panel_html: 'toggle-panel/toggle-panel.html',\n  toggle_panel_toggle_panel: 'toggle-panel/toggle-panel.component.ts',\n  wrapperComponent: 'wrapper.component.ts',\n  contextComponent: 'context/context.component.ts',\n  context_context_html: 'context/context.html',\n  contextService: 'context/context.service.ts',\n  typescript_intro_Codelab_ts: 'typescript-intro/Codelab.ts',\n  typescript_intro_Main_ts: 'typescript-intro/Main.ts',\n  typescript_intro_Guest_ts: 'typescript-intro/Guest.ts',\n  fuzzyPipe_fuzzyPipe: 'fuzzy-pipe/fuzzy.pipe.ts',\n  test: 'tests/test.ts',\n  indexHtml: 'index.html',\n  style_css: 'style.css',\n  material_css: 'material.css'\n};\n\n\nconst fileOverrides = {\n  'index.html': {\n    videoComponentCreate: 'video/video.index.html'\n  },\n  'app.module.ts': {\n    videoComponentCreate: 'video.app.module.ts',\n    thumbsComponentCreate: 'thumbs.app.module.ts',\n    togglePanelComponentCreate: 'toggle-panel.app.module.ts'\n  },\n  'tests/test.ts': {\n    codelab: 'tests/codelabTest.ts',\n    createComponent: 'tests/createComponentTest.ts',\n    createModule: 'tests/createModuleTest.ts',\n    bootstrap: 'tests/bootstrapTest.ts',\n    templatePageSetup: 'tests/templatePageSetupTest.ts',\n    templateAddAction: 'tests/templateAddActionTest.ts',\n    templateAllVideos: 'tests/templateAllVideosTest.ts',\n    diInjectService: 'tests/diInjectServiceTest.ts',\n    videoComponentCreate: 'tests/videoComponentCreateTest.ts',\n    videoComponentUse: 'tests/videoComponentUseTest.ts',\n    thumbsComponentCreate: 'tests/ThumbsComponentCreateTest.ts',\n    thumbsComponentUse: 'tests/ThumbsComponentUseTest.ts',\n    togglePanelComponentCreate: 'tests/togglePanelComponentCreateTest.ts',\n    togglePanelComponentUse: 'tests/togglePanelComponentUseTest.ts',\n    contextComponentUse: 'tests/contextComponentUseTest.ts',\n    fuzzyPipeCreate: 'tests/fuzzyPipeCreateTest.ts',\n    fuzzyPipeUse: 'tests/fuzzyPipeUseTest.ts',\n    router: 'tests/routerTest.ts',\n    material: 'tests/materialTest.ts',\n    forms: 'tests/formsTest.ts'\n  },\n  'video/video.component.html': {\n    material: 'video/video-materialized.component.html',\n    forms: 'video/video-materialized.component.html'\n  }\n};\n\nconst stageOverrides = {\n  'main.ts': {\n    createComponent: 'bootstrapSolved',\n    createModule: 'bootstrapSolved',\n  },\n  'app.module.ts': {\n    createComponent: 'bootstrapSolved'\n  }\n};\n\n\nconst stages: string[] = [\n  'codelab',\n  'createComponent',\n  'createModule',\n  'bootstrap',\n  'templatePageSetup',\n  'templateAddAction',\n  'templateAllVideos',\n  'diInjectService',\n  'dataBinding',\n  'videoComponentCreate',\n  'videoComponentUse',\n  'router',\n  'material',\n  'forms',\n  'thumbsComponentCreate',\n  'thumbsComponentUse',\n  'togglePanelComponentCreate',\n  'togglePanelComponentUse',\n  'contextComponentUse',\n  'fuzzyPipeCreate',\n  'fuzzyPipeUse',\n  'neverShow'\n];\n\nconst diffFilesResolver = new DiffFilesResolver(preloadedFiles, stages, {\n  file: fileOverrides,\n  stage: stageOverrides\n});\n\nexport interface CodelabConfigTemplate {\n  name: string;\n  id: string;\n  defaultRunner: string;\n  milestones: MilestoneConfigTemplate[];\n}\n\nexport interface SlideTemplate {\n  slide: true;\n  name: string;\n}\n\nexport interface ExerciseConfigTemplate {\n  slide?: false;\n  name: string;\n  skipTests?: boolean;\n  runner?: string;\n  files: {\n    exercise?: string[];\n    reference?: string[];\n    hidden?: string[];\n    bootstrap?: string[];\n    test?: string[];\n  };\n}\n\nexport interface MilestoneConfigTemplate {\n  name: string;\n  exercises: Array<ExerciseConfigTemplate | SlideTemplate>;\n}\n\nfunction patchATestWithAFunctionINAHackyWay(exercisesFiles, path, callback) {\n  return exercisesFiles.map(file => {\n    if (file.path === path) {\n      file.execute = callback;\n    }\n    return file;\n  });\n}\n\nexport function convertExerciseToMap(exercise) {\n  const convertFilesToMap = (prop = 'template') => (result, file) => {\n    if (file[prop]) {\n      result[file.path] = file[prop];\n\n      if (file.execute) {\n        result[file.path + '.execute'] = file.execute;\n      }\n    }\n    return result;\n  };\n\n  const testBootstrap = exercise.files.find(({bootstrap, excludeFromTesting, template}) => template && bootstrap && !excludeFromTesting);\n  const bootstrapFiles = exercise.files.find(({bootstrap, excludeFromTesting, template}) => template && bootstrap && excludeFromTesting);\n  return {\n    highlights: exercise.files.filter(({highlight}) => highlight).reduce((result, {highlight, path}) => (result[path] = highlight, result), {}),\n    code: exercise.files.reduce(convertFilesToMap(), {}),\n    codeSolutions: exercise.files.map(file => ((file.solution = file.solution || file.template), file)).reduce(convertFilesToMap('solution'), {}),\n    test: exercise.files.filter(file => !file.excludeFromTesting).reduce(convertFilesToMap(), {}),\n    bootstrap: bootstrapFiles && bootstrapFiles.moduleName,\n    bootstrapTest: testBootstrap && testBootstrap.moduleName,\n    file: exercise.files[0].path\n  };\n}\n\nexport const ng2tsConfig: /*TODO: fix the type to be: CodelabConfigTemplate */any = {\n  name: 'Angular 101 Codelab (beta)',\n  id: 'ng2ts',\n  defaultRunner: 'Angular',\n  milestones: [\n    {\n      name: 'Intro to TypeScript',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true\n        },\n        {\n          name: 'TypeScript',\n          runner: 'TypeScript',\n          files: diffFilesResolver.resolve('codelab', {\n            exercise: [\n              files.typescript_intro_Codelab_ts,\n              files.typescript_intro_Guest_ts,\n              files.typescript_intro_Main_ts\n            ],\n            test: [files.test],\n            bootstrap: [\n              files.typescript_intro_Main_ts\n            ]\n          }),\n        }\n      ]\n    },\n    {\n      name: 'Bootstrapping your app',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true\n        },\n        {\n          name: 'Create a component',\n          files: patchATestWithAFunctionINAHackyWay(diffFilesResolver.resolve('createComponent', {\n            exercise: [files.appComponent],\n            reference: [files.appModule, files.main, files.style_css, files.indexHtml],\n            bootstrap: [files.main],\n            test: [files.test],\n          }), 'tests/test.ts', createComponentTest)\n        },\n        {\n          name: 'Create a NgModule',\n          files: patchATestWithAFunctionINAHackyWay(diffFilesResolver.resolve('createModule', {\n            exercise: [files.appModule],\n            reference: [files.appComponent],\n            hidden: [files.main],\n            test: [files.test],\n            bootstrap: [files.main]\n          }), 'tests/test.ts', createModuleTest)\n        },\n        {\n          name: 'Bootstrap the module',\n          skipTests: true,\n          files: patchATestWithAFunctionINAHackyWay(diffFilesResolver.resolve('bootstrap', {\n            exercise: [files.main],\n            reference: [files.appComponent, files.appModule],\n            test: [files.test],\n            bootstrap: [files.main]\n          }), 'tests/test.ts', createBootstrapTest)\n        }\n      ]\n    },\n    {\n      name: 'Templates',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true\n        },\n        {\n          name: 'Set up the page',\n          files: diffFilesResolver.resolve('templatePageSetup', {\n            exercise: [files.appHtml],\n            reference: [files.appComponent, files.appModule, files.main, files.style_css, files.indexHtml],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }, {\n          name: 'Add some action',\n          files: diffFilesResolver.resolve('templateAddAction', {\n            exercise: [files.appComponent, files.appHtml],\n            reference: [files.appModule, files.main, files.video_videoItem, files.style_css, files.indexHtml],\n            test: [files.test],\n            bootstrap: [files.main],\n          })\n        },\n        {\n          name: 'Display all videos',\n          files: diffFilesResolver.resolve('templateAllVideos', {\n            exercise: [files.appComponent, files.appHtml],\n            reference: [files.appModule, files.main, files.video_videoItem, files.style_css, files.indexHtml],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Dependency Injection',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true\n        },\n        {\n          name: 'Service injection',\n          files: diffFilesResolver.resolve('diInjectService', {\n            exercise: [files.video_videoService, files.appModule, files.appComponent],\n            reference: [\n              files.appHtml, files.apiService, files.video_videoItem, files.main, files.style_css, files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    }\n    ,\n    {\n      name: 'Component Tree',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true,\n        },\n        {\n          name: 'Create VideoComponent',\n          files: diffFilesResolver.resolve('videoComponentCreate', {\n            exercise: [files.video_video_component, files.video_video_component_html],\n            reference: [\n              files.appModule,\n              files.video_video_wrapper_component,\n              files.video_videoService, files.appHtml,\n              files.appComponent, files.video_videoItem,\n              files.apiService, files.main, files.style_css, files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        },\n        {\n          name: 'Use VideoComponent',\n          files: diffFilesResolver.resolve('videoComponentUse', {\n            exercise: [files.appModule, files.appHtml],\n            reference: [\n              files.video_video_component_html, files.video_video_component, files.appComponent,\n              files.video_videoService, files.video_videoItem, files.apiService, files.main, files.style_css,\n              files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Routing',\n      exercises: [\n        {\n          name: 'Router',\n          files: diffFilesResolver.resolve('router', {\n            exercise: [\n              files.appModule,\n              files.appHtml,\n              files.search_search_component,\n              files.search_search_component_html,\n              files.upload_upload_component,\n              files.upload_upload_component_html,\n            ],\n            reference: [\n              files.video_video_component_html, files.video_video_component, files.appComponent,\n              files.video_videoService, files.video_videoItem, files.apiService, files.main, files.style_css,\n              files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Material',\n      exercises: [\n        {\n          name: 'Material',\n          files: diffFilesResolver.resolve('material', {\n            exercise: [\n              files.appModule,\n              files.video_video_component_html,\n              files.appHtml,\n            ],\n            reference: [\n              files.video_video_component,\n              files.appComponent,\n              files.video_videoService,\n              files.video_videoItem,\n              files.apiService,\n              files.main,\n              files.style_css,\n              files.indexHtml,\n              files.search_search_component,\n              files.search_search_component_html,\n              files.upload_upload_component,\n              files.upload_upload_component_html,\n              files.material_css\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Forms',\n      exercises: [\n        {\n          name: 'Forms',\n          files: diffFilesResolver.resolve('forms', {\n            exercise: [\n              files.appModule,\n              files.upload_upload_component_html,\n              files.upload_upload_component,\n            ],\n            reference: [\n              files.appHtml,\n              files.search_search_component,\n              files.search_search_component_html,\n              files.video_video_component_html,\n              files.video_video_component,\n              files.appComponent,\n              files.video_videoService,\n              files.video_videoItem,\n              files.apiService,\n              files.main,\n              files.style_css,\n              files.indexHtml,\n              files.material_css\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Custom events',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true\n        },\n        {\n          name: 'Create ThumbsComponent',\n          files: diffFilesResolver.resolve('thumbsComponentCreate', {\n            exercise: [files.thumbs_thumbs_component, files.thumbs_thumbs_html],\n            reference: [files.apiService, files.appModule, files.main, files.style_css, files.indexHtml],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        },\n        {\n          name: 'Use ThumbsComponent',\n          files: diffFilesResolver.resolve('thumbsComponentUse', {\n            exercise: [files.video_video_component, files.video_video_component_html, files.appModule],\n            reference: [\n              files.thumbs_thumbs_component,\n              files.thumbs_thumbs_html,\n              files.appHtml,\n              files.appComponent,\n              files.video_videoService,\n              files.video_videoItem,\n              files.apiService,\n              files.main,\n              files.style_css,\n              files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Content projection',\n      exercises: [\n        {\n          name: 'Intro',\n          slide: true\n        },\n        {\n          name: 'Add TogglePanelComponent',\n          files: diffFilesResolver.resolve('togglePanelComponentCreate', {\n            exercise: [files.toggle_panel_toggle_panel, files.toggle_panel_toggle_panel_html],\n            reference: [\n              files.wrapperComponent, files.apiService, files.appModule, files.main, files.style_css, files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        },\n        {\n          name: 'Use TogglePanelComponent',\n          files: diffFilesResolver.resolve('togglePanelComponentUse', {\n            exercise: [files.video_video_component_html, files.appModule],\n            reference: [\n              files.video_video_component,\n              files.toggle_panel_toggle_panel,\n              files.toggle_panel_toggle_panel_html,\n              files.thumbs_thumbs_component,\n              files.thumbs_thumbs_html,\n              files.appHtml,\n              files.appComponent,\n              files.video_videoService,\n              files.video_videoItem,\n              files.apiService,\n              files.main,\n              files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    },\n    {\n      name: 'Pipes (bonus)',\n      exercises: [\n        {\n          name: 'Create a pipe',\n          files: diffFilesResolver.resolve('fuzzyPipeCreate', {\n            exercise: [files.fuzzyPipe_fuzzyPipe],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }, {\n          name: 'Use the pipe',\n          files: diffFilesResolver.resolve('fuzzyPipeUse', {\n            exercise: [files.appModule, files.video_video_component_html],\n            reference: [\n              files.fuzzyPipe_fuzzyPipe,\n              files.contextService,\n              files.contextComponent,\n              files.context_context_html,\n              files.video_video_component,\n              files.toggle_panel_toggle_panel,\n              files.toggle_panel_toggle_panel_html,\n              files.thumbs_thumbs_component,\n              files.thumbs_thumbs_html,\n              files.appHtml,\n              files.appComponent,\n              files.video_videoService,\n              files.video_videoItem,\n              files.apiService,\n              files.main,\n              files.indexHtml\n            ],\n            test: [files.test],\n            bootstrap: [files.main]\n          })\n        }\n      ]\n    }\n    ,\n    {\n      name: 'Survey',\n      exercises: [\n        {\n          slide: true,\n          name: 'All done!'\n        }\n      ]\n    }\n  ]\n};\n\n@Injectable()\nexport class Ng2TsExercises {\n  getExercises(milestoneId: number, exerciseId: number): ExerciseConfigTemplate {\n    return ng2tsConfig.milestones[milestoneId].exercises[exerciseId];\n  }\n}\n"
  },
  {
    "path": "ng2ts/search/search.component.html",
    "content": "<input type=\"text\" #searchTerm placeholder=\"video\">\n<button (click)=\"search(searchTerm.value)\">Search!</button>\n\n<div *ngIf=\"videos.length == 0\">\n  No videos!\n</div>\n\n<my-video *ngFor=\"let video of videos\" [video]=\"video\"></my-video>\n"
  },
  {
    "path": "ng2ts/search/search.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { VideoItem } from '../video/video-item';\nimport { VideoService } from '../video/video.service';\n\n@Component({\n  selector: 'slides-search-component',\n  templateUrl: './search.component.html'\n})\nexport class SearchComponent {\n  videos: VideoItem[] = [];\n  title = 'MewTube';\n\n  constructor(public videoService: VideoService) {\n    this.search('');\n  }\n\n  search(searchString: string) {\n    this.videos = this.videoService.search(searchString);\n  }\n}\n"
  },
  {
    "path": "ng2ts/style.css",
    "content": "body, html {\n  margin: 0;\n  padding: 0;\n}\n"
  },
  {
    "path": "ng2ts/tests/ThumbsComponentCreateTest.ts",
    "content": "import { Api } from '../api.service';\nimport { TestBed } from '@angular/core/testing';\nimport { Thumbs, ThumbsComponent } from '../thumbs/thumbs.component';\nimport { thumbs_thumbs_html } from '../code';\nimport 'initTestBed';\n\nconst thumbs = Api.fetch('')[0];\n\n\nbeforeEach(() => {\n  try {\n    TestBed.resetTestingModule();\n    TestBed.configureTestingModule({\n      providers: [],\n      declarations: [ThumbsComponent]\n    });\n\n    TestBed.overrideComponent(ThumbsComponent, {\n      set: {\n        template: thumbs_thumbs_html\n      }\n    });\n    try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n  } catch (e) {\n\n  }\n});\n\ndescribe('Component Tree', () => {\n  describe('Make sure things are displayed properly', () => {\n    let fixture;\n    beforeEach(() => {\n      try {\n        fixture = TestBed.createComponent(ThumbsComponent);\n        fixture.detectChanges();\n      } catch (e) {\n\n      }\n    });\n\n    it(`thumbs.html: Add a button with a 'thumbs-up' CSS class.`, () => {\n      chai.expect(fixture.nativeElement.querySelector('.thumbs-up'), `can't find thumbs up button`).to.be.ok;\n    });\n\n    it(`thumbs.html: Add a button with a 'thumbs-down' CSS class.`, () => {\n      chai.expect(fixture.nativeElement.querySelector('.thumbs-down'), `can't find thumbs down button`).to.be.ok;\n    });\n  });\n\n  describe('Make sure things work', () => {\n    it(`Thumbs.Component.ts: Add the '@Component' decorator and set its selector to be 'my-thumbs'.`, () => {\n      const metadata = ThumbsComponent['__annotations__'][0];\n\n      chai.expect(metadata, `ThumbsComponent doesn't have a @Component() annotation`).is.not.undefined;\n      chai.expect(metadata.selector, `ThumbsComponent's selector has to be 'my-thumbs'.`).equals('my-thumbs')\n    });\n\n    it(`Thumbs.Component.ts: Set the templateUrl to load appropriate html file.`, () => {\n      const metadata = ThumbsComponent['__annotations__'][0];\n      chai.expect(metadata, `ThumbsComponent doesn't have a @Component() annotation`).is.not.undefined;\n      chai.expect(metadata.templateUrl, `ThumbsComponent's templateUrl should be set to './thumbs.html'`).equals('./thumbs.html')\n    });\n\n    // TODO: split\n    it(`Thumbs.Component.ts: Add an 'onThumbs' property and set the value to a new EventEmitter. Decorate with @Output()`, () => {\n      const metadata = ThumbsComponent['__annotations__'][0];\n      chai.expect(metadata, `ThumbsComponent doesn't have any @Outputs()'s`).is.not.undefined;\n      chai.expect(Object.keys(metadata).length, `ThumbsComponent doesn't have any @Outputs()'s`).equals(1);\n      chai.expect(metadata.onThumbs, `ThumbsComponent's @Outputs()' should be called onThumbs.`).is.not.undefined;\n    });\n  });\n\n  describe('Make sure things are displayed properly', () => {\n    let fixture;\n    beforeEach(() => {\n      try {\n        fixture = TestBed.createComponent(ThumbsComponent);\n        fixture.detectChanges();\n      } catch (e) {\n\n      }\n    });\n\n    it(`thumbs.html: Make the 'thumbs-up' button emit the onThumbs event with the correct thumbs ENUM value.`, () => {\n      let thumbs = null;\n      fixture.componentInstance.onThumbs.subscribe((event) => {\n        thumbs = event;\n      });\n      chai.expect(thumbs, `OnThumbs was called without pressing the button`).to.be.not.ok;\n      fixture.nativeElement.querySelector('.thumbs-up').click();\n      chai.expect(thumbs, `OnThumbs was not called when pressing the button with the 'thumbs-up' class.`).to.equal(Thumbs.UP);\n    });\n\n    it(`thumbs.html: Make the 'thumbs-down' button emit the onThumbs event with the correct thumbs ENUM value.`, () => {\n      let thumbs = null;\n      fixture.componentInstance.onThumbs.subscribe((event) => {\n        thumbs = event;\n      });\n      chai.expect(thumbs, `OnThumbs was called without pressing the button`).to.be.not.ok;\n      fixture.nativeElement.querySelector('.thumbs-down').click();\n      chai.expect(thumbs, `OnThumbs was not called when pressing the button with the 'thumbs-down' class.`).to.equal(Thumbs.DOWN);\n    });\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/ThumbsComponentUseTest.ts",
    "content": "import { Api } from '../api.service';\nimport { AppModule } from '../app.module';\nimport { TestBed } from '@angular/core/testing';\nimport { thumbs_thumbs_html, video_video_component_html } from '../code';\nimport { ThumbsComponent } from '../thumbs/thumbs.component';\nimport { VideoComponent } from '../video/video.component';\nimport 'initTestBed';\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [],\n    declarations: [VideoComponent, ThumbsComponent]\n  });\n\n  TestBed.overrideComponent(VideoComponent, {\n    set: {\n      template: video_video_component_html\n    }\n  });\n  TestBed.overrideComponent(ThumbsComponent, {\n    set: {\n      template: thumbs_thumbs_html\n    }\n  });\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\n\ndescribe('Component Tree', () => {\n  it(`app.module.ts: Add the ThumbsComponent to the AppModule 'declarations' property`, () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata.declarations || [], `Thumbs component not found`).contains(ThumbsComponent);\n    chai.expect(metadata.declarations || [], `Keep the app component`).contains(VideoComponent);\n  });\n\n  it(`video/video.component.html: Use the thumbs component in the template`, () => {\n    const fixture = TestBed.createComponent(VideoComponent);\n    fixture.componentInstance.video = Api.fetch('')[0];\n    fixture.detectChanges();\n    chai.expect(fixture.nativeElement.querySelector('.thumbs-up')).is.ok;\n    chai.expect(fixture.nativeElement.querySelector('.thumbs-down')).is.ok;\n  });\n\n  it(`VideoComponent: Listen to the thumbs component onThumbs event, and update the amount of likes accordingly`, () => {\n    const fixture = TestBed.createComponent(VideoComponent);\n    fixture.componentInstance.video = Api.fetch('')[0];\n    fixture.detectChanges();\n    const likes = fixture.componentInstance.video.likes;\n    // TODO: test it.\n    fixture.nativeElement.querySelector('.thumbs-up').click();\n    chai.expect(fixture.nativeElement.querySelector('.thumbs-up'), 'Thumbs up component is not present').to.be.ok;\n    chai.expect(fixture.componentInstance.video.likes).equals(likes + 1);\n    fixture.nativeElement.querySelector('.thumbs-down').click();\n    chai.expect(fixture.nativeElement.querySelector('.thumbs-down'), 'Thumbs down component is not present').to.be.ok;\n    chai.expect(fixture.componentInstance.video.likes).equals(likes);\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/bootstrapTest.ts",
    "content": "import { isCallExpression, isIdentifier } from 'babel-types';\nimport { babelTestSuite } from '../../apps/codelab/src/app/components/babel-test-runner/babel-helpers';\n\nconst tests = [\n  {\n    title: `@@allSetBootstrapApp`,\n    condition: ({node, parent}) =>\n      isIdentifier(node, {name: 'AppModule'}) && isCallExpression(parent) && parent.callee.property.name === 'bootstrapModule'\n  }\n];\n\nexport const createBootstrapTest = babelTestSuite('main.ts', tests);\n"
  },
  {
    "path": "ng2ts/tests/codelabTest.ts",
    "content": "/**\n * In the test it's possible to get access to sourcecode, as well as to the code AST.\n */\nimport { ts, typescript_intro_Codelab_ts_AST } from '../code';\n/**\n * This is a good sample sample of a codelab exercise.\n *\n * An exercise is just a folder with a bunch of files.\n *\n * the configuration is in app/codelab/codelab-config.ts.\n *\n *\n * There are\n *\n */\n/**\n * solution/ prefix is used to let the test typechecked.\n * It will be stripped during runtime, and the Codelab module\n * will be loaded.\n */\nimport { Codelab, evalJs } from '../typescript-intro/Codelab';\n\n\nconst guests = [\n  {name: 'me', coming: true},\n  {name: 'notme', coming: false},\n];\n\nfunction getConstructorNode(code) {\n  let constructorNode = undefined;\n\n  /**\n   * Fancy: Require the actual source code, and search in it.\n   */\n  function findConstructor(node) {\n    if (node.kind === ts.SyntaxKind.Constructor) {\n      constructorNode = node;\n    }\n    ts.forEachChild(node, findConstructor);\n  }\n\n  findConstructor(code);\n  return constructorNode;\n}\n\ndescribe('Component', () => {\n  it(`@@createClassCodelab`, () => {\n    /**\n     * We can use evalJs to get into the scope of the user's file.\n     * Currently evalJs has to be manually added to the `before`\n     * section in the file config.\n     *\n     * I expert the primary use case for eval js would be to remind\n     * the user to export something.\n     *\n     * e.g. if the user created teh class, but haven't exported it this\n     * test will still pass.\n     */\n    chai.expect(typeof evalJs('Codelab')).equals('function');\n  });\n\n  it(`@@exportClass`, () => {\n    /**\n     * Require the class, assert it's a function (compile target is es5).\n     */\n    chai.expect(typeof Codelab).equals('function');\n  });\n\n  it('@@addConstructor', () => {\n    let hasConstructor = false;\n\n    /**\n     * Fancy: Require the actual source code, and search in it.\n     */\n    function findConstructor(node) {\n      if (node.kind === ts.SyntaxKind.Constructor) {\n        hasConstructor = true;\n      }\n      ts.forEachChild(node, findConstructor);\n    }\n\n    findConstructor(typescript_intro_Codelab_ts_AST);\n\n    chai.expect(hasConstructor, `Codelab doesn't have a constuctor`).is.true;\n  });\n\n  it(`@@makeConstructorTakeParamGuests`, () => {\n    const constructorNode = getConstructorNode(typescript_intro_Codelab_ts_AST);\n    chai.expect(constructorNode, `Codelab doesn't have a constuctor`).to.be.ok;\n    chai.expect(constructorNode.parameters.length, `Codelab's constructor should take a parameter`).to.equal(1);\n    chai.expect(constructorNode.parameters[0].name.text, `Codelab constructor's parameter should be called 'guests'`).equals('guests');\n  });\n\n  it(`@@specifyTheTypeForGuests`, () => {\n    const constructorNode = getConstructorNode(typescript_intro_Codelab_ts_AST);\n\n    chai.expect(constructorNode, `Codelab doesn't have a constuctor`).to.be.ok;\n    chai.expect(constructorNode.parameters.length, `Codelab's constructor should take a parameter`).to.equal(1);\n    chai.expect(constructorNode.parameters[0].name.text, `Codelab constructor's parameter should be called 'guests'`).equals('guests');\n\n    const type = constructorNode.parameters[0].type;\n    const isArrayOfGuest = /* Array<Guest> */(type.kind === ts.SyntaxKind.TypeReference &&\n      type.typeName.text === 'Array' &&\n      type.typeArguments.length === 1 && type.typeArguments[0].typeName.text === 'Guest') ||\n      /* Guest[] */ (type.kind === ts.SyntaxKind.ArrayType\n      && type.elementType.kind === ts.SyntaxKind.TypeReference && type.elementType.typeName.text === 'Guest');\n\n    chai.expect(isArrayOfGuest, `The type for guests should be Array of Guest \n    (hint: Array<Guest> is one way of doing it.)`).to.be.ok;\n\n  });\n\n  it('@@makeParemeterPublic', () => {\n    const constructorNode = getConstructorNode(typescript_intro_Codelab_ts_AST);\n    const parameter = constructorNode.parameters[0];\n    chai.expect(parameter.modifiers.length === 1 && parameter.modifiers[0].kind === ts.SyntaxKind.PublicKeyword,\n      `'guests' constructor parameter should have 'public' visibility.`).to.be.ok;\n\n  });\n\n  it(`createNewMethodGetGuestsComing`, () => {\n    chai.expect(typeof (new Codelab(guests).getGuestsComing)).equals('function');\n  });\n\n  it(`@@modifyGetGuestsComingToFilter`, () => {\n    const guestsComing = new Codelab(guests).getGuestsComing();\n    chai.assert(Array.isArray(guestsComing), 'getGuestsComing must return an Array, current value: ' + guestsComing);\n    chai.expect(guestsComing.length).equals(1);\n  });\n\n  /*\n   xit(`Let's debug the app! You'll need this if something goes wrong.\n   * Open the dev tools in your browser\n   * Put in the new method add 'debugger;'\n   * The app will stop, and you'll be able to inspect local variables.\n   * Get out using F8\n   * We can't really test this, so this test is marked as passed\n   `, () => {\n\n   });\n   */\n});\n"
  },
  {
    "path": "ng2ts/tests/contextComponentUseTest.ts",
    "content": "import { Api } from '../api.servie';\nimport {\n  app_html,\n  context_context_html,\n  thumbs_thumbs_html,\n  toggle_panel_toggle_panel_html,\n  video_video_component_html\n} from '../code';\nimport { AppComponent } from '../app.component';\nimport { AppModule } from '../app.module';\nimport { ContextComponent } from '../context/context.component';\nimport { ContextService } from '../context/context.service';\nimport { TestBed } from '@angular/core/testing';\nimport { ThumbsComponent } from '../thumbs/thumbs.component';\nimport { TogglePanelComponent } from '../toggle-panel/toggle-panel.component';\nimport { VideoComponent } from '../video/video.component';\nimport { VideoService } from '../video/video.service';\nimport 'initTestBed';\n\nfunction objectValues(object) {\n  return Object.keys(object).reduce((result, key) => {\n    result.push(object[key]);\n    return result;\n  }, []);\n}\n\nfunction objectFindPropOfType(object, Type) {\n  return Object.keys(object).reduce((prop, key) => {\n    if (prop) {\n      return prop;\n    }\n\n    if (object[key] instanceof Type) {\n      return key;\n    }\n  }, undefined);\n}\n\nfunction objectHasAn(object, Type) {\n  return objectValues(object).some(val => val instanceof Type);\n}\n\nconst sampleVideo = Api.fetch('')[0];\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [VideoService, ContextService, /* that's a hack, to provide parent component */ VideoComponent],\n    declarations: [AppComponent, VideoComponent, TogglePanelComponent, ContextComponent, ThumbsComponent]\n  });\n  TestBed.overrideComponent(AppComponent, {set: {template: app_html}});\n  TestBed.overrideComponent(VideoComponent, {set: {template: video_video_component_html}});\n  TestBed.overrideComponent(TogglePanelComponent, {set: {template: toggle_panel_toggle_panel_html}});\n  TestBed.overrideComponent(ContextComponent, {set: {template: context_context_html}});\n  TestBed.overrideComponent(ThumbsComponent, {set: {template: thumbs_thumbs_html}});\n\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\n\ndescribe('Children', () => {\n  it(`ContextComponent: Inject the ContextService into the constructor and store it as a property.`, () => {\n    const fixture = TestBed.createComponent(ContextComponent);\n    chai.expect(objectHasAn(fixture.componentInstance, ContextService)).to.be.true;\n  });\n\n  it(`ContextComponent: Inject the parent component (VideoComponent) into the constructor and store it as a property.`, () => {\n    const fixture = TestBed.createComponent(ContextComponent);\n    chai.expect(objectHasAn(fixture.componentInstance, VideoComponent)).to.be.true;\n  });\n\n  it(`ContextComponent: Add an ngOnInit method to the component.\n      (It's a special method angular will call when the component is created).`, () => {\n    const fixture = TestBed.createComponent(ContextComponent);\n    chai.expect(fixture.componentInstance.ngOnInit).is.a('function');\n  });\n\n  it(`ContextComponent: In the onOnInit method Call 'getAdText' on the service,\n      and pass it the video 'description' provided by the injected video component.\n      Assign the result to the declared text property.`, () => {\n    const fixture = TestBed.createComponent(ContextComponent);\n    const componentInstance = fixture.componentInstance;\n\n    const vcProp = objectFindPropOfType(componentInstance, VideoComponent);\n    chai.expect(vcProp, `'VideoComponent' was not injected.`).to.not.be.undefined;\n\n    componentInstance[vcProp].video = sampleVideo;\n    chai.expect(componentInstance.ngOnInit).is.a('function');\n    componentInstance[vcProp].video.description = 'music';\n    componentInstance.ngOnInit();\n    fixture.detectChanges();\n\n    chai.expect(fixture.nativeElement.innerHTML).to.contain('speakers');\n\n    componentInstance[vcProp].video.description = 'banana';\n    componentInstance.ngOnInit();\n    fixture.detectChanges();\n    chai.expect(fixture.nativeElement.innerHTML).to.contain('Check out our web site');\n  });\n\n  it(`app.module.ts: Add the ContextComponent to the AppModule declarations (We did this for you).`, () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata.declarations || [], `Video component not found`).contains(ContextComponent);\n  });\n\n  it(`video/video.component.html: Actually display the ad (We actually also did it for you).`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    // TODO: Actually write a test\n    // chai.expect(fixture.nativeElement.querySelector('my-ad')).to.be.ok\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/createComponentTest.ts",
    "content": "import {\n  babelTestSuite,\n  expectClass,\n  expectDecorator,\n  expectDecoratorPropertyStringValue,\n  expectExportedClass\n} from '../../apps/codelab/src/app/components/babel-test-runner/babel-helpers';\n\nconst tests = [\n  {\n    title: `@@createClassAppComponent`,\n    condition: expectClass('AppComponent')\n  },\n  {\n    title: `@@exportClass`,\n    condition: expectExportedClass('AppComponent')\n  },\n  {\n    title: `@@addComponentDecorator`,\n    condition: expectDecorator('Component')\n  },\n  {\n    title: `@@addSelectorMyApp`,\n    condition: expectDecoratorPropertyStringValue(\n      'Component',\n      'selector',\n      'my-app'\n    )\n  },\n  {\n    title: `@@addTemplateHelloMewTube`,\n    condition: expectDecoratorPropertyStringValue(\n      'Component',\n      'template',\n      /<h1>\\s*Hello MewTube!\\s*<\\/h1>/\n    )\n  }\n];\n\nexport const createComponentTest = babelTestSuite('app.component.ts', tests);\n"
  },
  {
    "path": "ng2ts/tests/createModuleTest.ts",
    "content": "import { isDecorator, isIdentifier, isObjectProperty } from 'babel-types';\nimport {\n  babelTestSuite,\n  expectClass,\n  expectDecorator,\n  expectExportedClass\n} from '../../apps/codelab/src/app/components/babel-test-runner/babel-helpers';\n\n\nconst tests = [\n  {\n    title: `@@createClassAppModule`,\n    condition: expectClass('AppModule')\n  },\n  {\n    title: `@@exportClass`,\n    condition: expectExportedClass('AppModule')\n  },\n  {\n    title: `@@addNgModuleDecorator`,\n    condition: expectDecorator('NgModule')\n  },\n  {\n    title: `@@addBrowserModuleToNgModule`,\n    condition: (path) => {\n      if (!isIdentifier(path.node, {name: 'BrowserModule'})) {\n        return false;\n      }\n\n      const ObjectProperty = path.findParent(n => isObjectProperty(n));\n      const Decorator = path.findParent(n => isDecorator(n));\n\n      return ObjectProperty &&\n        Decorator &&\n        ObjectProperty.node.key.name === 'imports' &&\n        Decorator.node.expression.callee.name === 'NgModule';\n    }\n  },\n  {\n    title: `@@addAppComponentToDeclarations`,\n    condition: (path) => {\n      if (!isIdentifier(path.node, {name: 'AppComponent'})) {\n        return false;\n      }\n\n      const ObjectProperty = path.findParent(n => isObjectProperty(n));\n      const Decorator = path.findParent(n => isDecorator(n));\n\n      return ObjectProperty &&\n        Decorator &&\n        ObjectProperty.node.key.name === 'declarations' &&\n        Decorator.node.expression.callee.name === 'NgModule';\n    }\n  },\n  {\n    title: `@@addAppComponentToBootstrap`,\n    condition: (path) => {\n      if (!isIdentifier(path.node, {name: 'AppComponent'})) {\n        return false;\n      }\n\n      const ObjectProperty = path.findParent(n => isObjectProperty(n));\n      const Decorator = path.findParent(n => isDecorator(n));\n\n      return ObjectProperty &&\n        Decorator &&\n        ObjectProperty.node.key.name === 'bootstrap' &&\n        Decorator.node.expression.callee.name === 'NgModule';\n    }\n  }\n];\n\n\nexport const createModuleTest = babelTestSuite('app.module.ts', tests);\n"
  },
  {
    "path": "ng2ts/tests/diInjectServiceTest.ts",
    "content": "import { app_component_ts, app_html } from '../code';\nimport { AppComponent, evalJs } from '../app.component';\nimport { AppModule } from '../app.module';\nimport { TestBed } from '@angular/core/testing';\nimport { VideoService } from '../video/video.service';\nimport 'initTestBed';\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [VideoService],\n    declarations: [AppComponent]\n  });\n  TestBed.overrideComponent(AppComponent, {\n    set: {\n      template: app_html,\n      templateUrl: undefined\n    }\n  });\n  try {\n    TestBed.compileComponents();\n  } catch (e) {\n    console.log(e);\n  }\n});\n\ndescribe('Blabla', () => {\n  it(`@@addIjectableDecoraterToClass`, () => {\n    let metadata;\n    try {\n      metadata = VideoService['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata, 'Class VideoService has no decorators attached to it')\n      .not.undefined;\n  });\n\n  it(`@@addVideoServiceToNgModule`, () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n\n    chai.expect(\n      metadata.providers,\n      'Can not find \"providers\" property in the NgModule decorator of the app module'\n    ).not.to.be.undefined;\n    chai\n      .expect(metadata.providers.length, '\"providers\" array is empty')\n      .to.be.greaterThan(0);\n    chai\n      .expect(\n        metadata.providers[0],\n        'Expect the first provider to be VideoService'\n      )\n      .equals(VideoService);\n  });\n\n  it(`@@getRidOfFakeVideos`, () => {\n    chai\n      .expect(\n        evalJs('typeof FAKE_VIDEOS;'),\n        'Variable FAKE_VIDEOS is still present in the code'\n      )\n      .equals('undefined');\n  });\n\n  it(`@@injectVideoService`, () => {\n    chai\n      .expect(\n        AppComponent.length,\n        `App component constructor doesn't take any parameters`\n      )\n      .to.equal(1);\n    chai.expect(app_component_ts).matches(/VideoService/);\n  });\n\n  it(`@@updateAppComponentSearchmethod`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.componentInstance.search('Itty');\n    chai.expect(fixture.componentInstance.videos.length).to.equal(3);\n  });\n});\n"
  },
  {
    "path": "ng2ts/tests/diInjectServiceTestBabel.ts",
    "content": "import { isDecorator, isIdentifier, isObjectProperty } from 'babel-types';\nimport { MiniTsQuery, tsAstTestSuite } from '../../apps/codelab/src/app/components/babel-test-runner/babel-helpers';\n\nconst tests = [\n  {\n    title: `@@addIjectableDecoraterToClass`,\n    file: 'video/video.service.ts',\n    condition(ast: MiniTsQuery) {\n      return ast.hasDecorator('Injectable');\n    }\n  },\n  {\n    title: `@@addVideoServiceToNgModule`,\n    file: 'app.module.ts',\n    condition(ast: MiniTsQuery) {\n      return ast.hasProvider('VideoService');\n    }\n  },\n  {\n    title: `@@getRidOfFakeVideos`,\n    file: 'app.component.ts',\n    condition(ast: MiniTsQuery) {\n      return !ast.hasVariableDeclaration('FAKE_VIDEOS');\n    }\n  },\n  {\n    title: `@@injectVideoService`,\n    file: 'app.component.ts',\n    condition(ast: MiniTsQuery) {\n      return ast.hasConstructorParam('videoService', 'VideoService');\n    }\n  },\n];\n\n\nexport const createDITest = tsAstTestSuite(tests);\n"
  },
  {
    "path": "ng2ts/tests/formsTest.ts",
    "content": "import { upload_upload_component_html } from '../code';\nimport { TestBed } from '@angular/core/testing';\nimport { MatInputModule } from '@angular/material/input';\nimport { AppModule } from '../app.module';\nimport { UploadComponent } from '../upload/upload.component';\nimport { FormsModule } from '@angular/forms';\nimport 'initTestBed';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\n\nexport function createFakeEvent(type: string) {\n  const event = document.createEvent('Event');\n  event.initEvent(type, true, true);\n  return event;\n}\n\nexport function dispatchFakeEvent(node: Node | Window, type: string) {\n  node.dispatchEvent(createFakeEvent(type));\n}\n\ndescribe('forms', () => {\n  beforeEach(() => {\n    try {\n      TestBed.resetTestingModule();\n      TestBed.configureTestingModule({\n        declarations: [UploadComponent],\n        imports: [FormsModule, MatInputModule, NoopAnimationsModule]\n      });\n      TestBed.overrideComponent(UploadComponent, {\n        set: {\n          template: upload_upload_component_html,\n          templateUrl: undefined\n        }\n      });\n      try {\n        TestBed.compileComponents();\n      } catch (e) {\n        console.log(e);\n      }\n    } catch (e) {}\n  });\n\n  it('AddFormsModule', () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata.imports).to.contain(MatInputModule);\n    chai.expect(metadata.imports).to.contain(FormsModule);\n  });\n\n  it('AddInput', done => {\n    const fixture = TestBed.createComponent(UploadComponent);\n    fixture.detectChanges();\n\n    fixture.whenStable().then(() => {\n      const input = fixture.nativeElement.querySelector('input');\n      chai.expect(input).is.ok;\n      done();\n    });\n  });\n\n  it('AddTitle', done => {\n    const fixture = TestBed.createComponent(UploadComponent);\n    fixture.componentInstance.title = 'hello';\n    fixture.detectChanges();\n\n    fixture.whenStable().then(() => {\n      const input = fixture.nativeElement.querySelector('input');\n      chai.expect(input.value).is.equal('hello');\n      fixture.componentInstance.title = 'greatTitle';\n      fixture.detectChanges();\n      fixture.whenStable().then(() => {\n        chai.expect(input.value).to.equal(fixture.componentInstance.title);\n        done();\n      });\n    });\n  });\n\n  it('AddDescription', done => {\n    const fixture = TestBed.createComponent(UploadComponent);\n    fixture.componentInstance.description = 'hello';\n    fixture.detectChanges();\n\n    fixture.whenStable().then(() => {\n      const textarea = fixture.nativeElement.querySelector('textarea');\n      chai.expect(textarea).is.ok;\n      chai.expect(textarea.value).is.equal('hello');\n      fixture.componentInstance.description = 'greatdescription';\n      fixture.detectChanges();\n      fixture.whenStable().then(() => {\n        chai\n          .expect(textarea.value)\n          .to.equal(fixture.componentInstance.description);\n        done();\n      });\n    });\n  }, 4000);\n});\n"
  },
  {
    "path": "ng2ts/tests/fuzzyPipeCreateTest.ts",
    "content": "import { evalJs, FuzzyPipe } from '../fuzzy-pipe/fuzzy.pipe';\nimport 'reflect-metadata';\n\nlet metadata;\nbeforeEach(() => {\n  try {\n    metadata = FuzzyPipe['__annotations__'][0];\n  } catch (e) {\n  }\n});\n\nconst d = new Date();\nd.setDate(d.getDate() - 2);\nconst formattedDate = d.toISOString().slice(0, 10);\n\n\ndescribe('Pipe', () => {\n  it(`Create a class called FuzzyPipe`, () => {\n    chai.expect(typeof evalJs('FuzzyPipe')).equals('function');\n  });\n\n  it(`Export it`, () => {\n    chai.expect(typeof FuzzyPipe).equals('function');\n  });\n\n  it(`Add a @Pipe() decorator`, () => {\n    chai.expect(metadata).is.an('array')\n  });\n\n  it(`Set the name to fuzzy`, () => {\n    chai.expect(metadata.name).equals('fuzzy');\n  });\n\n  it(`Make it return '2 days ago for '${formattedDate}'`, () => {\n    let fuzzyTime = new FuzzyPipe();\n    chai.expect(fuzzyTime.transform(d.toISOString().slice(0, 10)).toLowerCase()).equals('2 ' + 'days');\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/fuzzyPipeUseTest.ts",
    "content": "import {Api} from '../api.service';\nimport {\n  app_html,\n  context_context_html,\n  thumbs_thumbs_html,\n  toggle_panel_toggle_panel_html,\n  video_video_component_html\n} from '../code';\nimport {AppComponent} from '../app.component';\nimport {AppModule} from '../app.module';\nimport {ContextComponent} from '../context/context.component';\nimport {ContextService} from '../context/context.service';\nimport {FuzzyPipe} from '../fuzzy-pipe/fuzzy.pipe';\nimport {TestBed} from '@angular/core/testing';\nimport {ThumbsComponent} from '../thumbs/thumbs.component';\nimport {TogglePanelComponent} from '../toggle-panel/toggle-panel.component';\nimport {VideoComponent} from '../video/video.component';\nimport {VideoService} from '../video/video.service';\nimport 'initTestBed';\n\n\nconst sampleVideo = Api.fetch('')[0];\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [VideoService, ContextService, /* that's a hack, to provide parent component */ VideoComponent],\n    declarations: [AppComponent, VideoComponent, ThumbsComponent, TogglePanelComponent, ContextComponent, FuzzyPipe]\n  });\n  TestBed.overrideComponent(AppComponent, {set: {template: app_html}});\n  TestBed.overrideComponent(VideoComponent, {set: {template: video_video_component_html}});\n  TestBed.overrideComponent(ThumbsComponent, {set: {template: thumbs_thumbs_html}});\n  TestBed.overrideComponent(TogglePanelComponent, {set: {template: toggle_panel_toggle_panel_html}});\n  TestBed.overrideComponent(ContextComponent, {set: {template: context_context_html}});\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\nfunction sampleFuzzy(value) {\n  const date = new Date(value);\n  const dateNow = new Date();\n  const millisecondsDifference = dateNow.getTime() - date.getTime();\n  const differenceDays = Math.floor(millisecondsDifference / (1000 * 3600 * 24));\n\n  return differenceDays + ' ' + 'days';\n}\n\ndescribe('Pipes', () => {\n\n\n  it(`app.module.ts: Add the FuzzyPipe to the AppModule declarations`, () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata.declarations || [], `Fuzzy pipe not found`).contains(FuzzyPipe);\n  });\n\n  it(`video/video.component.html: Use the pipe on the date.`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    fixture.nativeElement.querySelector('button').click();\n    fixture.detectChanges();\n    chai.expect(fixture.nativeElement.querySelector('my-video').innerHTML).contains(sampleFuzzy(sampleVideo.date));\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/materialTest.ts",
    "content": "import { MatCardModule } from '@angular/material/card';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { app_html, search_search_component_html, video_video_component_html } from '../code';\nimport { TestBed } from '@angular/core/testing';\nimport { VideoService } from '../video/video.service';\nimport { AppComponent } from '../app.component';\nimport { RouterModule } from '@angular/router';\nimport { VideoComponent } from '../video/video.component';\nimport 'initTestBed';\nimport { SearchComponent } from '../search/search.component';\nimport { Api } from '../api.service';\nimport { AppModule } from '../app.module';\n\nfunction getCard() {\n  const fixture = TestBed.createComponent(VideoComponent);\n  fixture.componentInstance.video = Api.fetch('')[0];\n  fixture.detectChanges();\n  return fixture.nativeElement.querySelector('mat-card');\n}\n\ndescribe('material', () => {\n  beforeEach(() => {\n    try {\n      TestBed.resetTestingModule();\n      TestBed.configureTestingModule({\n        providers: [VideoService],\n        declarations: [AppComponent, SearchComponent, VideoComponent],\n        imports: [RouterModule.forRoot([{path: '', component: SearchComponent}]), MatToolbarModule, MatCardModule]\n      });\n      TestBed.overrideComponent(AppComponent, {\n        set: {\n          template: app_html,\n          templateUrl: undefined\n        }\n      });\n      TestBed.overrideComponent(VideoComponent, {set: {template: video_video_component_html, templateUrl: undefined}});\n      TestBed.overrideComponent(SearchComponent, {\n        set: {\n          template: search_search_component_html,\n          templateUrl: undefined\n        }\n      });\n\n      try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n    } catch (e) {\n    }\n  });\n\n  it('AddMatModules', () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata.imports).to.contain(MatCardModule);\n    chai.expect(metadata.imports).to.contain(MatToolbarModule);\n  });\n\n  it('AddMatToolbar', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n\n    const toolbar = fixture.nativeElement.querySelector('mat-toolbar');\n    chai.expect(toolbar).is.ok;\n    chai.expect(toolbar.innerHTML).to.contain('MewTube');\n    // TODO(kirjs): Make sure the title is there only once.\n  });\n\n  it('UseMatCard', () => {\n    chai.expect(getCard()).is.ok;\n  });\n\n  it('AddMatCardTitle', () => {\n    const title = getCard().querySelector('mat-card-title');\n    chai.expect(title).is.ok;\n    chai.expect(title.innerText).to.contain(Api.fetch('')[0].title);\n  });\n\n  it('AddMatCardSubtitle', () => {\n    const subTitle = getCard().querySelector('mat-card-subtitle');\n    chai.expect(subTitle).is.ok;\n    chai.expect(subTitle.innerText).to.contain(Api.fetch('')[0].description);\n  });\n\n\n  it('AddMatImage', () => {\n    const img = getCard().querySelector('img[mat-card-image]');\n    chai.expect(img).is.ok;\n  });\n\n  it('MoveDataToNewComponent', () => {\n    const content = getCard().querySelector('mat-card-content');\n    chai.expect(content).is.ok;\n    chai.expect(content.innerText).contains(Api.fetch('')[0].likes);\n    chai.expect(content.innerText).contains(Api.fetch('')[0].views);\n    chai.expect(content.innerText).contains(Api.fetch('')[0].date);\n  });\n});\n"
  },
  {
    "path": "ng2ts/tests/routerTest.ts",
    "content": "import { AppModule } from '../app.module';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { SearchComponent } from '../search/search.component';\nimport { app_html } from '../code';\n\nfunction getRoutes() {\n  let metadata;\n  try {\n    metadata = AppModule['__annotations__'][0];\n    const routerImport = metadata.imports.find(imp => imp.ngModule === RouterModule);\n\n    function findRecByToken(dep) {\n      if (Array.isArray(dep)) {\n        for (let d = 0; d < dep.length; d++) {\n          const rec = findRecByToken(dep[d]);\n          if (rec) {\n            return rec;\n          }\n        }\n        return;\n      }\n      // Well...\n      return dep.provide && dep.provide._desc && dep.provide._desc === 'ROUTES' && dep.useValue;\n    }\n\n    return findRecByToken(routerImport.providers);\n  } catch (e) {\n    // Do nothing, we have assertions below for this case\n  }\n  return undefined;\n}\n\ndescribe('router', () => {\n  it('UseRouterModule', () => {\n    chai.expect(Array.isArray(getRoutes()), 'Can\\'t find any routes provided').to.be.true;\n  });\n\n  it('AddEmptyRoute', () => {\n    const routes = getRoutes();\n    chai.expect(routes.length, 'Empty array was provided, need actual routes.').to.be.above(0);\n    const route = routes.find(r => r.path === '');\n    chai.expect(route, 'Can\\'t find a route with empty path').not.to.be.undefined;\n    chai.expect(route.component && route.component.toString()\n      .includes('SearchComponent'), 'There\\'s a module with empty path, but it doesn\\'t display SearchComponent')\n      .to.be.true;\n  });\n\n  it('AddUploadRoute', () => {\n    const routes = getRoutes();\n    chai.expect(routes.length, 'Empty array was provided, need actual routes.').to.be.above(0);\n    const route = routes.find(r => r.path === 'upload');\n    chai.expect(route, 'Can\\'t find a route with empty path').not.to.be.undefined;\n    chai.expect(route.component && route.component.toString()\n      .includes('UploadComponent'), 'There\\'s a module with empty path, but it doesn\\'t display SearchComponent')\n      .to.be.true;\n  });\n\n  it('AddRouterOutlet', () => {\n    const div = document.createElement('div');\n    div.innerHTML = app_html;\n    chai.expect(!!div.querySelector('router-outlet'), 'Can\\'t find router outlet').to.be.true;\n  });\n\n  it('AddSearchMenu', () => {\n    const div = document.createElement('div');\n    div.innerHTML = app_html;\n    const search = div.querySelector('[routerLink=\"/\"]');\n    chai.expect(!!search, 'Can\\'t find a menu item with a routerLink of \"/\"').to.be.true;\n    chai.expect(search.innerHTML.toLowerCase().includes('search'), 'The menu item should contain word \"search\"').to.be.true;\n  });\n\n  it('AddUploadMenu', () => {\n    const div = document.createElement('div');\n    div.innerHTML = app_html;\n    const search = div.querySelector('[routerLink=\"/upload\"]');\n    chai.expect(!!search, 'Can\\'t find a menu item with a routerLink of \"/upload\"').to.be.true;\n    chai.expect(search.innerHTML.toLowerCase().includes('upload'), 'The menu item should contain word \"upload\"').to.be.true;\n  });\n});\n"
  },
  {
    "path": "ng2ts/tests/templateAddActionTest.ts",
    "content": "import { app_html } from '../code';\nimport { AppComponent } from '../app.component';\nimport { TestBed } from '@angular/core/testing';\nimport 'initTestBed';\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({declarations: [AppComponent]});\n\n  TestBed.overrideComponent(AppComponent, {\n    set: {\n      template: app_html,\n      templateUrl: undefined\n    }\n  });\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\n\ndescribe('Blabla', () => {\n  it(`@@addVideosProperty`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    chai.expect(fixture.componentInstance.videos, `No videos property on the component`).is.not.undefined;\n    chai.expect(fixture.componentInstance.videos, `Videos property on the component is not an array.`).is.an('array');\n  });\n\n\n  it(`@@addSearchMethodOnComponent`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    chai.expect(fixture.componentInstance.search, `Search should be a function`).is.a('function');\n    chai.expect(fixture.componentInstance.search.length, `Search should take one parameter`).equals(1);\n  });\n\n  it(`@@addClickHandlerToButtonCallSearch`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const input = fixture.nativeElement.querySelector('input');\n    const button = fixture.nativeElement.querySelector('button');\n\n\n    function testSearch(searchString) {\n      let passedValue = undefined;\n      let called = false;\n      fixture.componentInstance.search = function (value) {\n        called = true;\n        passedValue = value;\n      };\n\n      input.value = searchString;\n      button.click();\n      chai.expect(called, `Search function should be called when the search button is pressed`).equals(true);\n      chai.expect(passedValue, `Input value is not passed to the search function`).equals(input.value);\n    }\n\n    testSearch('Awesome kittens');\n    testSearch('Other value');\n  });\n\n  it(`@@addMessageNoVideos`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    fixture.componentInstance.videos = [];\n    chai.expect(fixture.nativeElement.innerHTML.toLowerCase()).contains('no videos');\n\n    fixture.componentInstance.videos = [{title: 'Hi', src: 'Test'}];\n\n    fixture.detectChanges();\n    chai.expect(fixture.nativeElement.innerHTML.toLowerCase()).not.contains('no videos');\n  });\n\n\n});\n\n"
  },
  {
    "path": "ng2ts/tests/templateAllVideosTest.ts",
    "content": "import { app_html } from '../code';\nimport { AppComponent } from '../app.component';\nimport { TestBed } from '@angular/core/testing';\nimport 'initTestBed';\n\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({ declarations: [AppComponent] });\n\n  TestBed.overrideComponent(AppComponent, {\n    set: {\n      template: app_html,\n      templateUrl: undefined\n    }\n  });\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\n\ndescribe('Blabla', () => {\n  it(`@@assignFakeVideosToComponent`, () => {\n      const fixture = TestBed.createComponent(AppComponent);\n      fixture.componentInstance.search('');\n    chai.expect(fixture.componentInstance.videos.length, 'Should have no dogs').equals(3);\n    });\n\n  it(`@@IterateWithNgForAndDisplayTitle`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.componentInstance.search('itten');\n    fixture.detectChanges();\n    chai.expect(fixture.nativeElement.innerHTML).contains(fixture.componentInstance.videos[0].title);\n    chai.expect(fixture.nativeElement.innerHTML).contains(fixture.componentInstance.videos[1].title);\n\n    fixture.componentInstance.search('cat');\n    fixture.detectChanges();\n    chai.expect(fixture.nativeElement.innerHTML).contains(fixture.componentInstance.videos[0].title);\n  });\n\n  it(`@@alsoDisplayThumbnail`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    fixture.componentInstance.search('');\n    fixture.detectChanges();\n    const images = fixture.nativeElement.querySelectorAll('img');\n    chai.expect(images.length).equals(3);\n    chai.expect(images[1].getAttribute('src')).equals(fixture.componentInstance.videos[1].src);\n    chai.expect(images[0].getAttribute('src')).equals(fixture.componentInstance.videos[0].src);\n  });\n\n  it(`@@insideSearchMethodFilterFakeVideos`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.componentInstance.search('itten');\n    chai.expect(fixture.componentInstance.videos.length, 'Should have 2 kitten videos').equals(2);\n    fixture.componentInstance.search('cat');\n    chai.expect(fixture.componentInstance.videos.length, 'Should have 1 cat').equals(1);\n    fixture.componentInstance.search('dog');\n    chai.expect(fixture.componentInstance.videos.length, 'Should have no dogs').equals(0);\n  });\n\n  // it(`#Bonus app.html: Make hitting enter work in the input trigger the search`, () => {\n  //   //TODO\n  // });\n\n  it(`@@bonusDisplayAllVideosByDefault`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const images = fixture.nativeElement.querySelectorAll('img');\n    chai.expect(images.length).equals(3);\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/templatePageSetupTest.ts",
    "content": "import { TestBed } from '@angular/core/testing';\nimport { AppComponent } from '../app.component';\nimport 'initTestBed';\nimport { app_html } from '../code';\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({declarations: [AppComponent]});\n\n  TestBed.overrideComponent(AppComponent, {\n    set: {\n      template: app_html,\n      templateUrl: undefined\n    }\n  });\n\n});\n\ndescribe('Blabla', () => {\n  it(`@@addH1HeaderWithATitle`, () => {\n    try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const header = fixture.nativeElement.querySelector('h1');\n    chai.expect(header, `Can't find any h1 headers`).is.not.null;\n    chai.expect(header.innerHTML).contains('MewTube');\n    fixture.componentInstance.title = 'SomethingElse';\n    fixture.detectChanges();\n\n    const header2 = fixture.nativeElement.querySelector('h1');\n    chai.expect(header2.innerHTML, `Use the curly braces to put component title property in the header`).contains('SomethingElse');\n  });\n\n  it(`@@addInputWithPlaceholderVideo`, () => {\n    try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const input = fixture.nativeElement.querySelector('input');\n    chai.expect(input, `Can't find any inputs`).is.not.null;\n    chai.expect(input.placeholder, `Input placeholder should contain word 'video'`).contains('video');\n  });\n\n  it(`@@addButtonWithtextSearch`, () => {\n    try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const button = fixture.nativeElement.querySelector('button');\n    chai.expect(button, `Can't find any buttons`).is.not.null;\n    chai.expect(button.innerHTML.toLowerCase()).contains('search');\n  });\n\n\n});\n\n"
  },
  {
    "path": "ng2ts/tests/test.ts",
    "content": ""
  },
  {
    "path": "ng2ts/tests/togglePanelComponentCreateTest.ts",
    "content": "import { By } from '@angular/platform-browser';\nimport { TestBed } from '@angular/core/testing';\nimport { toggle_panel_toggle_panel_html } from '../code';\nimport { TogglePanelComponent } from '../toggle-panel/toggle-panel.component';\nimport { WrapperComponent } from '../wrapper.component';\nimport 'initTestBed';\n\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [],\n    declarations: [TogglePanelComponent, WrapperComponent]\n  });\n\n  TestBed.overrideComponent(TogglePanelComponent, {\n    set: {\n      template: toggle_panel_toggle_panel_html\n    }\n  });\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\n\ndescribe('Content projection', () => {\n  it(`TogglePanel.Component.ts: We added the template and the selector for you, enjoy!`, () => {\n  });\n\n  it(`TogglePanel.Component.ts: Add a boolean property to the component. The property can have any name, and must have a default value.`, () => {\n    let fixture = TestBed.createComponent(TogglePanelComponent);\n    // the intent is to let them come up with the property name, so we assume there will be one.\n    const props = Object.keys(fixture.componentInstance);\n\n    chai.expect(props.length, `A property with a default value was not declared on the component.`).is.not.equal(0);\n    chai.expect(props.length, `Too many properties were declared.`).is.not.greaterThan(1);\n    const prop = props[0];\n    chai.expect(fixture.componentInstance[prop], `Property '${prop}' is not of type boolean`).is.a('boolean');\n    chai.expect(fixture.componentInstance[prop], `Property '${prop}' must have a default value`).is.not.undefined;\n  });\n\n  it(`togglePanel.html: Use content projection to only display the content with the selector .description by default.`, () => {\n    let fixture = TestBed.createComponent(WrapperComponent);\n    fixture.detectChanges();\n    chai.expect(fixture.debugElement.query(By.css('.description')), `Description should be displayed`).not.null;\n    chai.expect(fixture.debugElement.query(By.css('.extra')), `Extra information should be hidden`).is.null;\n  });\n\n  it(`togglePanel.html: Add a button to show extra information`, () => {\n    let fixture = TestBed.createComponent(WrapperComponent);\n    fixture.detectChanges();\n    let buttons = fixture.nativeElement.querySelectorAll('button');\n    chai.expect(buttons.length, `Should show exactly one button`).to.equals(1);\n  });\n\n  it(`togglePanel.html: When the button is pressed, switch the flag and only display the content with the '.extra' selector.`, () => {\n    let fixture = TestBed.createComponent(WrapperComponent);\n    fixture.detectChanges();\n    let button = fixture.nativeElement.querySelector('button');\n    button.click();\n    fixture.detectChanges();\n    chai.expect(fixture.debugElement.query(By.css('.description')), `Description should be hidden`).is.null;\n    chai.expect(fixture.debugElement.query(By.css('.extra')), `Extra information should be displayed`).not.null;\n  });\n\n  it(`togglePanel.html: Add a button to come back to the description`, () => {\n    let fixture = TestBed.createComponent(WrapperComponent);\n    fixture.detectChanges();\n    fixture.nativeElement.querySelector('button').click();\n    fixture.detectChanges();\n    fixture.nativeElement.querySelector('button').click();\n    fixture.detectChanges();\n    chai.expect(fixture.debugElement.query(By.css('.description')), `Description should be displayed`).not.null;\n    chai.expect(fixture.debugElement.query(By.css('.extra')), `Extra information should be hidden`).is.null;\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/togglePanelComponentUseTest.ts",
    "content": "import { Api } from '../api.service';\nimport {\n  app_html,\n  thumbs_thumbs_html,\n  toggle_panel_toggle_panel_html,\n  video_video_component_html\n  } from '../code';\nimport { AppComponent } from '../app.component';\nimport { AppModule } from '../app.module';\nimport { TestBed } from '@angular/core/testing';\nimport { ThumbsComponent } from '../thumbs/thumbs.component';\nimport { TogglePanelComponent } from '../toggle-panel/toggle-panel.component';\nimport { VideoComponent } from '../video/video.component';\nimport { VideoService } from '../video/video.service';\nimport 'initTestBed';\n\nconst video = Api.fetch('')[0];\n\nbeforeEach(() => {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [VideoService],\n    declarations: [AppComponent, VideoComponent, TogglePanelComponent, ThumbsComponent]\n  });\n  TestBed.overrideComponent(AppComponent, { set: { template: app_html } });\n  TestBed.overrideComponent(ThumbsComponent, { set: { template: thumbs_thumbs_html } });\n  TestBed.overrideComponent(VideoComponent, { set: { template: video_video_component_html } });\n  TestBed.overrideComponent(TogglePanelComponent, { set: { template: toggle_panel_toggle_panel_html } });\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n});\n\ndescribe('Component Tree', () => {\n  it(`app.module.ts: Add the TogglePanelComponent to the declarations.`, () => {\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n    chai.expect(metadata.declarations || [], `Keep the video component`).contains(VideoComponent);\n    chai.expect(metadata.declarations || [], `Keep the app component`).contains(AppComponent);\n    chai.expect(metadata.declarations || [], `Add TogglePanelComponent`).contains(TogglePanelComponent);\n  });\n\n  it(`video/video.component.html: Use the TogglePanel component in the template`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const panel = fixture.nativeElement.querySelector('my-toggle-panel');\n    chai.expect(panel).is.not.null;\n  });\n\n\n  it(`video/video.component.html: Add .description as TogglePanel's content`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const panel = fixture.nativeElement.querySelector('my-toggle-panel');\n\n    chai.expect(panel.querySelector('.description')).is.not.null;\n    chai.expect(panel.querySelector('.extra')).is.null;\n\n    chai.expect(fixture.nativeElement.querySelector('my-video').innerHTML, `Should display description text.`).contains(video.description);\n    chai.expect(fixture.nativeElement.querySelector('my-video').innerHTML, `Should not display likes `).not.contains(video.likes);\n  });\n\n  it(`video/video.component.html: Add .extra as TogglePanel's content`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const panel = fixture.nativeElement.querySelector('my-toggle-panel');\n\n    panel.querySelector('button').click();\n    fixture.detectChanges();\n    chai.expect(panel.querySelector('.description')).is.null.null;\n    chai.expect(panel.querySelector('.extra')).is.not.null;\n\n    chai.expect(fixture.nativeElement.querySelector('my-video').innerHTML, `Should not description text.`).not.contains(video.description);\n    chai.expect(fixture.nativeElement.querySelector('my-video').innerHTML, `Should display likes`).contains(video.likes);\n\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/videoComponentCreateTest.ts",
    "content": "import { Api } from '../api.service';\nimport { TestBed } from '@angular/core/testing';\nimport { video_video_component_html } from '../code';\nimport { VideoComponent } from '../video/video.component';\nimport { VideoService } from '../video/video.service';\nimport 'initTestBed';\n\nconst video = Api.fetch('')[0];\n\nbeforeEach(() => {\n  try {\n    TestBed.resetTestingModule();\n    TestBed.configureTestingModule({\n      providers: [VideoService],\n      declarations: [VideoComponent]\n    });\n    TestBed.overrideComponent(VideoComponent, {\n      set: {\n        template: video_video_component_html,\n        templateUrl: undefined\n      }\n    });\n    try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n  } catch (e) {\n    // whatever\n  }\n});\n\ndescribe('Component Tree', () => {\n  describe('Make sure metadata is in place', () => {\n\n    it(`@@addComponentDecoratorAndSetSelectorToMyVideo`, () => {\n      const metadata = VideoComponent['__annotations__'][0];\n      chai.expect(metadata, `VideoComponent doesn't have a @Component() annotation`).is.not.undefined;\n      chai.expect(metadata.selector, `VideoComponent's selector has to be 'my-video'.`).equals('my-video');\n    });\n\n\n    it(`@@setTemplateUrlToLoadAppropriateFile`, () => {\n      const metadata = VideoComponent['__annotations__'][0];\n      chai.expect(metadata, `VideoComponent doesn't have a @Component() annotation`).is.not.undefined;\n      chai.expect(metadata.templateUrl, `VideoComponent's templateUrl should be set to './video.component.html'`)\n        .matches(/\\.\\/video\\.component\\.html/);\n    });\n\n\n    it(`@@addVideoPropertyAndDecorateWithInput`, () => {\n      const metadata = VideoComponent['__prop__metadata__'];\n\n      chai.expect(metadata, `VideoComponent doesn't have any @Input()'s`).is.not.undefined;\n      chai.expect(Object.keys(metadata).length, `VideoComponent doesn't have any @Input()'s`).equals(1);\n      chai.expect(metadata.video, `VideoComponent's @Input()' should be called video.`).is.not.undefined;\n    });\n  });\n\n\n  describe('Make sure things are displayed properly', () => {\n    let fixture;\n    beforeEach(() => {\n      try {\n\n        fixture = TestBed.createComponent(VideoComponent);\n        fixture.componentInstance.video = video;\n        fixture.detectChanges();\n      } catch (e) {\n\n      }\n    });\n\n\n    it(`displayVideoTitle`, () => {\n      chai.expect(fixture.nativeElement.innerHTML, `can't find the video title`).contains(video.title);\n    });\n\n    it(`@@displayVideoThumbnail`, () => {\n      const image = fixture.nativeElement.querySelector('img');\n      chai.expect(image, `Can't find the thumbnail`).is.not.null;\n      chai.expect(image.getAttribute('src')).equals(video.src);\n    });\n\n    it(`@@displayVideoDescription`, () => {\n      chai.expect(fixture.nativeElement.innerHTML, `can't find the video description`).contains(video.description);\n    });\n\n    it(`@@displayVideoData`, () => {\n      chai.expect(fixture.nativeElement.innerHTML, `can't find the video date`).contains(video.date);\n    });\n    it(`@@displayNumberOfVideoLikes`, () => {\n      chai.expect(fixture.nativeElement.innerHTML, `can't find the video like`).contains(video.likes);\n    });\n    it(`@@displayNumberOfVideoViews`, () => {\n      chai.expect(fixture.nativeElement.innerHTML, `can't find the video description`).contains(video.views);\n    });\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/tests/videoComponentUseTest.ts",
    "content": "import { Api } from '../api.service';\nimport { app_html, video_video_component_html } from '../code';\nimport { AppComponent } from '../app.component';\nimport { AppModule } from '../app.module';\nimport { TestBed } from '@angular/core/testing';\nimport { VideoComponent } from '../video/video.component';\nimport { VideoService } from '../video/video.service';\nimport 'initTestBed';\nimport { Component, Input } from '@angular/core';\n\nfunction prepareTestingModule(videoComponent: any = VideoComponent) {\n  TestBed.resetTestingModule();\n  TestBed.configureTestingModule({\n    providers: [VideoService],\n    declarations: [AppComponent, videoComponent]\n  });\n\n  TestBed.overrideComponent(AppComponent, {\n    set: {\n      template: app_html,\n      templateUrl: undefined\n    }\n  });\n  TestBed.overrideComponent(videoComponent, {\n    set: {\n      template: video_video_component_html,\n      templateUrl: undefined\n    }\n  });\n  try { TestBed.compileComponents(); } catch(e) { console.log(e); }\n}\n\ndescribe('Component Tree', () => {\n  it(`@@addVideoComponentToAppModule`, () => {\n    prepareTestingModule();\n    let metadata;\n    try {\n      metadata = AppModule['__annotations__'][0];\n    } catch (e) {\n      // Do nothing, we have assertions below for this case\n    }\n\n    chai.expect(metadata.declarations || [], `Video component not found`).contains(VideoComponent);\n    chai.expect(metadata.declarations || [], `Keep the app component`).contains(AppComponent);\n  });\n\n  it(`@@replaceTitleAndThumbnail`, () => {\n    @Component({\n      selector: '' + 'my-video',\n      template: 'v'\n    })\n    class MockVideoComponent {\n      @Input() video = {\n        title: 'Kittens coming soon!!!'\n      };\n    }\n\n    prepareTestingModule(MockVideoComponent);\n\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.componentInstance.videos = Api.fetch('');\n    // TODO: if the element is added, but the video prop is not present, this test will fail with\n    // a useless message. Passing video prop should actually be tested in the next test, and this\n    // one should pass.\n\n    fixture.detectChanges();\n\n    const myVideos = fixture.nativeElement.querySelectorAll('my-video');\n    chai.expect(myVideos.length, `can't find any <my-video> elements in the app component`).is.greaterThan(0);\n    chai.expect(myVideos.length, `There should be one <my-video> element for each video`).equals(fixture.componentInstance.videos.length);\n  });\n\n  it(`@@useDataBindingToPassVideoToComponent`, () => {\n    prepareTestingModule();\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.componentInstance.videos = Api.fetch('');\n    fixture.detectChanges();\n    const video = fixture.nativeElement.querySelector('my-video');\n    chai.expect(video.getAttribute('ng-reflect-video')).equals('[object Object]');\n  });\n});\n\n"
  },
  {
    "path": "ng2ts/thumbs/thumbs.component.ts",
    "content": "import {Component, Output, EventEmitter} from '@angular/core';\n\n/**\n * Yes, TypeScript has enums!\n * There's no nice way to use them in the template though.\n */\nexport enum Thumbs {\n  UP,\n  DOWN\n}\n/*d:thumbsComponentCreateSolved/trimTrailing*/\n@Component({\n  selector: 'my-thumbs',\n  templateUrl: 'thumbs.html'\n})\n/*/d*/\nexport class ThumbsComponent {\n  /*d:thumbsComponentCreateSolved/trimBoth*/\n  @Output() onThumbs: EventEmitter<Thumbs> = new EventEmitter<Thumbs>();\n\n  thumbsUp() {\n    this.onThumbs.emit(Thumbs.UP)\n  }\n\n  thumbsDown() {\n    this.onThumbs.emit(Thumbs.DOWN)\n  }\n  /*/d*/\n}\n"
  },
  {
    "path": "ng2ts/thumbs/thumbs.html",
    "content": "/*d:initial:thumbsComponentCreate/trimBoth*/\n<!-- Write your code here -->\n/*/d*//*d:thumbsComponentCreateSolved/trimBoth*/\n<button (click)=\"thumbsUp()\" class=\"thumbs-up\">\n  Thumbs up\n</button>\n<button (click)=\"thumbsDown()\" class=\"thumbs-down\">\n  Thumbs down\n</button>\n/*/d*/\n"
  },
  {
    "path": "ng2ts/thumbs.app.module.ts",
    "content": "import {BrowserModule} from '@angular/platform-browser';\nimport {NgModule} from '@angular/core';\nimport {ThumbsComponent} from './thumbs/thumbs.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [ThumbsComponent],\n  bootstrap: [ThumbsComponent]\n})\nexport class AppModule {\n}\n"
  },
  {
    "path": "ng2ts/toggle-panel/toggle-panel.component.ts",
    "content": "import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-toggle-panel',\n  templateUrl: 'toggle-panel.html'\n})\nexport class TogglePanelComponent {\n/*d:togglePanelComponentCreateSolved*/  showDescription = true;/*/d*/\n}\n"
  },
  {
    "path": "ng2ts/toggle-panel/toggle-panel.html",
    "content": "/*d:togglePanelComponentCreate:togglePanelComponentCreate/trimBoth*/\n<!-- Write your code here -->\n/*/d*//*d:togglePanelComponentCreateSolved/trimBoth*/\n<div *ngIf=\"showDescription\">\n  <ng-content select=\".description\"></ng-content>\n  <button (click)=\"showDescription=false\">Show meta</button>\n</div>\n<div *ngIf=\"!showDescription\">\n  <ng-content select=\".extra\"></ng-content>\n  <button (click)=\"showDescription=true\">Show description</button>\n</div>\n/*/d*/\n"
  },
  {
    "path": "ng2ts/toggle-panel.app.module.ts",
    "content": "import {BrowserModule} from '@angular/platform-browser';\nimport {NgModule} from '@angular/core';\nimport {TogglePanelComponent} from './toggle-panel/toggle-panel.component';\nimport {WrapperComponent} from './wrapper.component';\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [WrapperComponent, TogglePanelComponent],\n  bootstrap: [WrapperComponent]\n})\nexport class AppModule {\n}\n"
  },
  {
    "path": "ng2ts/typescript-intro/Codelab.ts",
    "content": "import {Guest} from './Guest';\n/*d:initial:initial*/// Add your code here\n/*/d*//*d:codelabSolved*/\nexport class Codelab {\n  constructor(public guests: Guest[]) {\n  }\n\n  getGuestsComing() {\n    return this.guests.filter(guest => guest.coming);\n  }\n}\n/*/d*//*d:neverShow*/\n// Needed for type checking\nexport function evalJs(param){ return param;}\n/*/d*/\n"
  },
  {
    "path": "ng2ts/typescript-intro/Guest.ts",
    "content": "export interface Guest {\n  coming: boolean,\n  name: string\n}\n"
  },
  {
    "path": "ng2ts/typescript-intro/Main.ts",
    "content": "import { Codelab } from './Codelab';\nimport { Guest } from './Guest';\n\n// Use this file for reference.\nconst guests: Guest[] = [\n  {\n    coming: true,\n    name: `Sir Isaac Newton`\n  },\n  {\n    coming: true,\n    name: `Marie Curie`\n  },\n  {\n    coming: true,\n    name: `Albert Einstein`\n  },\n  {\n    coming: false,\n    name: `Charles Darwin`\n  }];\n\nlet guestsOutput;\ntry {\n  const codelab = new Codelab(guests);\n   guestsOutput = codelab.getGuestsComing && codelab.getGuestsComing().map((guest: Guest) => `<li>${guest.name}</li>`).join('');\n} catch (e) {\n  /* swallow */\n}\nif (guestsOutput) {\n  // Angular is so much better than this:\n  document.body.innerHTML = '<ul>' + guestsOutput + '</ul>';\n\n} else {\n  document.body.innerHTML = 'make all tests pass to see the preview';\n}\n"
  },
  {
    "path": "ng2ts/upload/upload.component.html",
    "content": "/*d:router:forms/trimLeading*/\n<h1>Uploading coming soon!</h1>\n/*/d*//*d:formsSolved/trimBoth*/\n<div>\n  <mat-form-field class=\"example-full-width\">\n    <input matInput #titleInput=\"ngModel\" placeholder=\"Title\" required [(ngModel)]=\"title\">\n    <mat-error>\n      Title is <strong>required</strong>\n    </mat-error>\n  </mat-form-field>\n</div>\n<div>\n  <mat-form-field class=\"example-full-width\">\n    <textarea matInput placeholder=\"Description\" [(ngModel)]=\"description\"></textarea>\n  </mat-form-field>\n</div>\n<button mat-button>Submit</button>\n/*/d*/\n"
  },
  {
    "path": "ng2ts/upload/upload.component.ts",
    "content": "/*d:router/trimleading*/\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'slides-upload-component',\n  templateUrl: './upload.component.html'\n})\nexport class UploadComponent {\n  /*/d*//*d:forms/trimboth*/\n  title: string;\n  description: string;\n  /*/d*//*d:router/trimleading*/\n\n}\n"
  },
  {
    "path": "ng2ts/video/video-item.ts",
    "content": "export interface VideoItem {\n  title: string;\n  src: string;\n  // \"?\" after property name means the property is optional.\n  description?: string;\n  views?: number;\n  likes?: number;\n  date?: string;\n}\n"
  },
  {
    "path": "ng2ts/video/video-materialized.component.html",
    "content": "/*d:material:material/trimLeading*/\n<h2>{{video.title}}</h2>\n<img [src]=\"video.src\">\n<div>Date {{video.date}}</div>\n<div>Views {{video.views}}</div>\n<div>Likes {{video.likes}}</div>\n<div>Description {{video.description}}</div>\n/*/d*//*d:materialSolved/trimLeading*/\n<mat-card>\n  <mat-card-title>{{video.title}}</mat-card-title>\n  <mat-card-subtitle>{{video.description}}</mat-card-subtitle>\n  <img mat-card-image [src]=\"video.src\">\n  <mat-card-content>\n    <div>Date {{video.date}}</div>\n    <div>Views {{video.views}}</div>\n    <div>Likes {{video.likes}}</div>\n  </mat-card-content>\n</mat-card>\n/*/d*/\n"
  },
  {
    "path": "ng2ts/video/video-wrapper.component.ts",
    "content": "import {Component, Input} from '@angular/core';\n\n@Component({\n  selector: 'video-wrapper',\n  template: `<my-video [video]=\"video\"></my-video>`\n})\nexport class VideoWrapperComponent {\n  private video = {\n    date: new Date().toDateString(),\n    title: 'Cute Cat',\n    src: '/assets/images/cat-00.png',\n    description: 'here is the descr',\n    views: 10,\n    likes: 9\n  };\n}\n"
  },
  {
    "path": "ng2ts/video/video.component.html",
    "content": "/*d:initial:initial*/<!-- Write your code here -->\n/*/d*//*d:videoComponentCreateSolved/trimLeading*/\n<h2>{{video.title}}</h2>\n<img [src]=\"video.src\">\n/*/d*//*d:videoComponentCreateSolved:fuzzyPipeUseSolved/trimLeading*/\n<div>Date {{video.date}}</div>\n/*/d*//*d:fuzzyPipeUseSolved*/<div>Date {{video.date | fuzzy}}</div>\n/*/d*//*d:videoComponentCreateSolved:togglePanelComponentUse/trimLeading*/\n<div>Views {{video.views}}</div>\n<div>Likes {{video.likes}}</div>\n<div>Description {{video.description}}</div>\n/*/d*//*d:thumbsComponentUseSolved/trimBoth*/\n<my-thumbs (onThumbs)=\"onThumbs($event)\"></my-thumbs>\n/*/d*//*d:togglePanelComponentUseSolved*/\n<my-toggle-panel>\n  <div class=\"description\">Description: {{video?.description}}</div>\n  <div class=\"extra\">\n    <div class=\"views\">Views: {{video?.views}}</div>\n    <div class=\"likes\">Likes: {{video?.likes}}</div>\n  </div>\n</my-toggle-panel>\n/*/d*/\n"
  },
  {
    "path": "ng2ts/video/video.component.ts",
    "content": "import { Component, Input } from '@angular/core';\nimport { VideoItem } from './video-item';\n/*d:thumbsComponentUse*/\nimport { Thumbs } from '../thumbs/thumbs.component';\n/*/d*//*d:videoComponentCreateSolved/trimTrailing*/\n@Component({\n  selector: 'my-video',\n  templateUrl: './video.component.html'\n})\n/*/d*/\nexport class VideoComponent {\n  /*d:videoComponentCreateSolved/trimBoth*/\n  @Input() video: VideoItem;\n  /*/d*//*d:thumbsComponentUseSolved/trimTrailing*/\n\n  onThumbs(thumbs: Thumbs) {\n    if (thumbs === Thumbs.UP) {\n      this.video.likes++;\n    }\n    if (thumbs === Thumbs.DOWN) {\n      this.video.likes--;\n    }\n  }\n  /*/d*/\n}\n"
  },
  {
    "path": "ng2ts/video/video.index.html",
    "content": "<video-wrapper></video-wrapper>\n"
  },
  {
    "path": "ng2ts/video/video.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { Api } from '../api.service';\n/*d:diInjectServiceSolved/trimTrailing*/\n@Injectable()\n/*/d*//*d:initial*/\nexport class VideoService {\n  search(searchString: string) {\n    return Api.fetch(searchString);\n  }\n}\n/*/d*/\n"
  },
  {
    "path": "ng2ts/video.app.module.ts",
    "content": "import {BrowserModule} from '@angular/platform-browser';\nimport {NgModule} from '@angular/core';\nimport {VideoWrapperComponent} from './video/video-wrapper.component';\nimport {VideoComponent} from './video/video.component';\n\n\n@NgModule({\n  imports: [BrowserModule],\n  declarations: [VideoWrapperComponent, VideoComponent],\n  bootstrap: [VideoWrapperComponent]\n})\nexport class AppModule {\n}\n"
  },
  {
    "path": "ng2ts/wrapper.component.ts",
    "content": "import {Component} from '@angular/core';\n\n@Component({\n  selector: 'my-wrapper',\n  // Just using template here to avoid extra files.\n  // Please don't do this at home.\n  template: `\n    <my-toggle-panel>\n    <div class='description'>Either show me</div>\n    <div class='extra'>Or show me</div>\n    </my-toggle-panel>\n    `\n})\nexport class WrapperComponent {\n\n}\n"
  },
  {
    "path": "nx.json",
    "content": "{\n  \"npmScope\": \"codelab\",\n  \"implicitDependencies\": {\n    \"angular.json\": \"*\",\n    \"package.json\": \"*\",\n    \"tsconfig.json\": \"*\",\n    \"tslint.json\": \"*\",\n    \"nx.json\": \"*\"\n  },\n  \"projects\": {\n    \"codelab\": {\n      \"tags\": []\n    },\n    \"browser\": {\n      \"tags\": []\n    },\n    \"console\": {\n      \"tags\": []\n    },\n    \"utils\": {\n      \"tags\": []\n    },\n    \"kirjs\": {\n      \"tags\": []\n    },\n    \"angular-ast-viz\": {\n      \"tags\": []\n    },\n    \"angular-slides-to-pdf\": {\n      \"tags\": []\n    },\n    \"feedback\": {\n      \"tags\": []\n    },\n    \"slides\": {\n      \"tags\": []\n    },\n    \"code-demos\": {\n      \"tags\": []\n    },\n    \"live\": {\n      \"tags\": []\n    },\n    \"firebase-login\": {\n      \"tags\": []\n    },\n    \"angular-thirty-seconds\": {\n      \"tags\": []\n    },\n    \"blog\": {\n      \"tags\": []\n    },\n    \"lis\": {\n      \"tags\": []\n    },\n    \"playground\": {\n      \"tags\": []\n    },\n    \"firebase\": {\n      \"tags\": []\n    },\n    \"intro\": {\n      \"tags\": []\n    }\n  }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"codelab\",\n  \"version\": \"0.0.1\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"ng\": \"node --max_old_space_size=16000 ./node_modules/@angular/cli/bin/ng\",\n    \"//--------------- CODELAB ---------------------\": \"\",\n    \"start\": \"ng serve\",\n    \"build\": \"ng build\",\n    \"build:prod\": \"ng build --prod\",\n    \"build:bundler\": \"ts-node -P libs/code-demos/assets/runner/tsconfig.json libs/code-demos/assets/runner/ng-dts/bundler.ts && node libs/code-demos/assets/runner/ng2/ng2-runner.js\",\n    \"build:intro\": \"ts-node -P libs/intro/generate/tsconfig.json libs/intro/generate/generate-thumbnails.ts\",\n    \"build:intro:verbose\": \"NODE_DEBUG=cluster,net,http,fs,tls,module,timers ts-node -P libs/intro/generate/tsconfig.json libs/intro/generate/generate-thumbnails.ts\",\n    \"test\": \"ng test\",\n    \"lint\": \"ng lint\",\n    \"i18n\": \"ng xi18n codelab --i18n-format xmb --output-path src/locale\",\n    \"build:ru\": \"ng build codelab --configuration ru\",\n    \"deploy:next\": \"npm run build:prod && npm run build:ru && npm run build:30s && firebase deploy --only hosting:codelab-next\",\n    \"serve:ru\": \"npm run ng -- serve --configuration ru\",\n    \"pre-deploy\": \"npm run build:prod && npm run build:ru && npm run build:30s\",\n    \"deploy\": \"npm run pre-deploy && firebase deploy --only hosting:codelab\",\n    \"cypress\": \"cypress\",\n    \"cypress:approve\": \"npm run cypress run -- --env updateSnapshots=true\",\n    \"cypress:open\": \"cypress open\",\n    \"cypress:reporter\": \"npm run cypress run --reporter cypress-image-snapshot/reporter\",\n    \"//--------------- KIRJS   ---------------------\": \"\",\n    \"deploy:kirjs\": \"ng build kirjs --prod && firebase deploy  --only hosting:kirjs\",\n    \"deploy:kirjs:ru\": \"ng build kirjs --configuration ru --prod && firebase deploy  --only hosting:kirjs\",\n    \"serve:kirjs:ru\": \"ng serve kirjs --configuration ru\",\n    \"build:kirjs:ru\": \"ng build kirjs --configuration ru\",\n    \"build:kirjs\": \"ng build kirjs  --prod\",\n    \"xi18n:kirjs\": \"ng xi18n kirjs --i18n-format xmb --output-path src/locale\",\n    \"//--------------- Playground   ---------------------\": \"\",\n    \"deploy:playground\": \"ng build playground --prod && firebase deploy --only hosting:angular-ivy\",\n    \"serve:playground\": \"ng serve playground\",\n    \"build:playground\": \"ng build playground  --prod\",\n    \"//--------------- LIS   ---------------------\": \"\",\n    \"deploy:lis\": \"ng build lis --prod && firebase deploy --only hosting:lis\",\n    \"serve:lis\": \"ng serve lis\",\n    \"build:lis\": \"ng build lis  --prod\",\n    \"//--------------- 30s OF ANGULAR   -------------------\": \"\",\n    \"build:30s\": \"npm run ng build angular-thirty-seconds --prod\",\n    \"serve:30s\": \"ng serve angular-thirty-seconds\",\n    \"//--------------- NX      ---------------------\": \"\",\n    \"affected:apps\": \"./node_modules/.bin/nx affected:apps\",\n    \"affected:libs\": \"./node_modules/.bin/nx affected:libs\",\n    \"affected:build\": \"./node_modules/.bin/nx affected:build\",\n    \"affected:test\": \"./node_modules/.bin/nx affected:test --watch=false\",\n    \"affected:lint\": \"./node_modules/.bin/nx affected:lint\",\n    \"affected:dep-graph\": \"./node_modules/.bin/nx affected:dep-graph\",\n    \"format\": \"./node_modules/.bin/nx format:write\",\n    \"format:write\": \"./node_modules/.bin/nx format:write\",\n    \"format:check\": \"./node_modules/.bin/nx format:check\",\n    \"update\": \"ng update @nrwl/workspace\",\n    \"update:check\": \"ng update\",\n    \"dep-graph\": \"./node_modules/.bin/nx dep-graph\",\n    \"workspace-schematic\": \"./node_modules/.bin/nx workspace-schematic\",\n    \"help\": \"./node_modules/.bin/nx help\",\n    \"postinstall\": \"ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"npm run format:write && git add .\"\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:codelab-fun/codelab.git\"\n  },\n  \"public\": true,\n  \"dependencies\": {\n    \"@angular-builders/custom-webpack\": \"^9.0.0\",\n    \"@angular-devkit/schematics\": \"9.0.4\",\n    \"@angular/animations\": \"9.0.4\",\n    \"@angular/cdk\": \"9.0.1\",\n    \"@angular/common\": \"9.0.4\",\n    \"@angular/compiler\": \"9.0.4\",\n    \"@angular/core\": \"9.0.4\",\n    \"@angular/fire\": \"5.4.2\",\n    \"@angular/forms\": \"9.0.4\",\n    \"@angular/localize\": \"9.0.4\",\n    \"@angular/material\": \"9.0.1\",\n    \"@angular/platform-browser\": \"9.0.4\",\n    \"@angular/platform-browser-dynamic\": \"9.0.4\",\n    \"@angular/router\": \"9.0.4\",\n    \"@babel/core\": \"^7.8.4\",\n    \"@babel/generator\": \"^7.8.4\",\n    \"@babel/traverse\": \"^7.8.4\",\n    \"binary-loader\": \"0.0.1\",\n    \"binary-parser\": \"^1.3.2\",\n    \"chai\": \"^4.2.0\",\n    \"console\": \"^0.7.2\",\n    \"core-js\": \"2.6.2\",\n    \"dom-to-image\": \"^2.6.0\",\n    \"firebase\": \"^7.8.2\",\n    \"flamelink\": \"^1.0.0-alpha.27\",\n    \"fullscreen-api-polyfill\": \"^1.1.2\",\n    \"glob\": \"^7.1.6\",\n    \"gray-matter\": \"^4.0.2\",\n    \"husky\": \"^4.2.3\",\n    \"immer\": \"^5.3.6\",\n    \"mocha\": \"^7.0.1\",\n    \"monaco-editor\": \"^0.20.0\",\n    \"monaco-editor-webpack-plugin\": \"^1.8.2\",\n    \"ngx-markdown\": \"^8.2.2\",\n    \"raw-loader\": \"1.0.0\",\n    \"rxjs\": \"^6.5.4\",\n    \"slugify\": \"^1.3.6\",\n    \"wabt\": \"^1.0.11\",\n    \"zone.js\": \"^0.10.2\"\n  },\n  \"devDependencies\": {\n    \"@angular-devkit/build-angular\": \"^0.900.4\",\n    \"@angular-devkit/build-ng-packagr\": \"0.900.4\",\n    \"@angular/cli\": \"9.0.4\",\n    \"@angular/compiler-cli\": \"9.0.4\",\n    \"@angular/language-service\": \"9.0.4\",\n    \"@bahmutov/add-typescript-to-cypress\": \"^2.0.0\",\n    \"@nrwl/cypress\": \"9.3.0\",\n    \"@nrwl/jest\": \"9.3.0\",\n    \"@nrwl/workspace\": \"9.3.0\",\n    \"@nrwl/angular\": \"9.3.0\",\n    \"@types/fs-extra\": \"^9.0.1\",\n    \"@types/jasmine\": \"3.5.3\",\n    \"@types/jest\": \"25.1.2\",\n    \"@types/node\": \"^13.7.1\",\n    \"@types/node-fetch\": \"^2.5.7\",\n    \"acorn\": \"^7.1.0\",\n    \"babel-types\": \"^6.25.0\",\n    \"babylon\": \"^6.17.3\",\n    \"codelyzer\": \"^5.2.1\",\n    \"cypress\": \"~4.0.1\",\n    \"cypress-image-snapshot\": \"^3.0.0\",\n    \"dotenv\": \"8.2.0\",\n    \"eslint\": \"^6.8.0\",\n    \"firebase-tools\": \"^7.13.0\",\n    \"fs-extra\": \"^9.0.0\",\n    \"github-api\": \"^3.0.0\",\n    \"gomoku-tools\": \"^0.1.0\",\n    \"googleapis\": \"^51.0.0\",\n    \"jasmine-core\": \"~3.5.0\",\n    \"jest\": \"25.1.0\",\n    \"jest-preset-angular\": \"8.0.0\",\n    \"karma\": \"^4.4.1\",\n    \"karma-chrome-launcher\": \"~3.1.0\",\n    \"karma-cli\": \"~2.0.0\",\n    \"karma-coverage-istanbul-reporter\": \"^2.1.1\",\n    \"karma-jasmine\": \"~3.1.1\",\n    \"karma-jasmine-html-reporter\": \"^1.5.2\",\n    \"ng-packagr\": \"^9.0.0\",\n    \"node-fetch\": \"^2.6.0\",\n    \"prettier\": \"1.19.1\",\n    \"protractor\": \"^5.4.2\",\n    \"systemjs\": \"0.20.12\",\n    \"systemjs-builder\": \"^0.16.4\",\n    \"ts-jest\": \"25.2.0\",\n    \"ts-node\": \"^8.6.2\",\n    \"tsickle\": \"^0.38.0\",\n    \"tslib\": \"^1.10.0\",\n    \"tslint\": \"^6.0.0\",\n    \"typescript\": \"^3.7.5\",\n    \"uglify-js\": \"^3.7.7\"\n  }\n}\n"
  },
  {
    "path": "tools/schematics/slide/README.md",
    "content": "# Generating new presentations\n\nYou can generate new presentation using\n`npm run workspace-schematic slide modules/schematic-name -- --project=codelab`\n\nIf you want to debug the schematic, you can run it this way:\n\n`node --inspect-brk ./node_modules/.bin/nx workspace-schematic slide modules/schematic-name --project codelab`\nnpm run workspace-schematic slide modules/msk -- --project=kirjs\n"
  },
  {
    "path": "tools/schematics/slide/files/code.bs",
    "content": "\nimport { SlidesRoutes } from '@ng360/slides';\nimport { RouterModule } from '@angular/router';\n\nconst routes = RouterModule.forChild(\n  SlidesRoutes.get(EmptyComponent)\n);\n"
  },
  {
    "path": "tools/schematics/slide/files/template.component.html",
    "content": "<slide-deck slideShortcuts slidesRouting slides-tracking>\n  <div *slide id=\"start\"><h1>Hello</h1></div>\n\n  <div *slide id=\"list\">\n    <ul>\n      <li>a</li>\n      <li>b</li>\n    </ul>\n  </div>\n</slide-deck>\n"
  },
  {
    "path": "tools/schematics/slide/index.ts",
    "content": "import {\n  chain,\n  externalSchematic,\n  Rule,\n  SchematicContext,\n  Tree\n} from '@angular-devkit/schematics';\nimport { addImportToModule } from '@schematics/angular/utility/ast-utils';\nimport * as ts from '@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript';\nimport * as fs from 'fs';\nimport { join } from 'path';\nimport { InsertChange } from '@schematics/angular/utility/change';\nimport { classify } from '@angular-devkit/core/src/utils/strings';\n\nfunction overrideHtml(): Rule {\n  return (host: Tree, context: SchematicContext) => {\n    const path: string = host.actions.find(a =>\n      a.path.endsWith('.component.html')\n    ).path;\n    const html = fs\n      .readFileSync(join(__dirname, './files/template.component.html'), 'utf-8')\n      .toString();\n    host.overwrite(path, html);\n  };\n}\n\ninterface SlideSchema {\n  name: string;\n  project: string;\n}\n\nfunction updateSlidesModule(schema: SlideSchema): Rule {\n  return (host: Tree, context: SchematicContext) => {\n    const modulePath: string = host.actions.find(a =>\n      a.path.endsWith('.module.ts')\n    ).path;\n\n    const sourceFile = ts.createSourceFile(\n      modulePath,\n      host.read(modulePath).toString('utf-8'),\n      ts.ScriptTarget.Latest,\n      true\n    );\n\n    let code = fs\n      .readFileSync(join(__dirname, './files/code.bs'), 'utf-8')\n      .toString();\n\n    const componentName = classify(schema.name.split('/').pop()) + 'Component';\n\n    code = code.replace('EmptyComponent', componentName);\n\n    const moduleImportChanges = addImportToModule(\n      sourceFile,\n      modulePath,\n      'SlidesModule',\n      '@ng360/slides'\n    );\n\n    const routingImportChanges = addImportToModule(\n      sourceFile,\n      modulePath,\n      'routes',\n      null\n    );\n\n    const changes = [...moduleImportChanges, ...routingImportChanges];\n\n    const recorder = host.beginUpdate(modulePath);\n    changes.forEach((change: InsertChange) => {\n      recorder.insertLeft(change.pos, change.toAdd);\n    });\n\n    const classDeclaration = [...sourceFile.statements].find(s =>\n      ts.isClassDeclaration(s)\n    );\n    recorder.insertLeft(classDeclaration.pos, code);\n\n    [...sourceFile.statements].find(s => ts.isIdentifier(s));\n\n    host.commitUpdate(recorder);\n  };\n}\n\nexport default function(schema: SlideSchema): Rule {\n  return chain([\n    externalSchematic('@schematics/angular', 'module', {\n      name: schema.name,\n      project: schema.project\n    }),\n    updateSlidesModule(schema),\n    externalSchematic('@schematics/angular', 'component', {\n      name: schema.name,\n      project: schema.project\n    }),\n    overrideHtml()\n  ]);\n}\n"
  },
  {
    "path": "tools/schematics/slide/schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/schema\",\n  \"id\": \"slide\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Presentation name\",\n      \"$default\": {\n        \"$source\": \"argv\",\n        \"index\": 0\n      }\n    },\n    \"project\": {\n      \"type\": \"string\",\n      \"description\": \"Presentation name\",\n      \"$default\": {\n        \"$source\": \"project\"\n      }\n    }\n  },\n  \"required\": [\"name\"]\n}\n"
  },
  {
    "path": "tools/tsconfig.tools.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"../dist/out-tsc\",\n    \"rootDir\": \".\",\n    \"module\": \"commonjs\",\n    \"target\": \"es6\",\n    \"moduleResolution\": \"node\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"include\": [\"**/*.ts\"],\n  \"lib\": [\"es2018\", \"dom\"],\n  \"module\": \"es2015\"\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"angularCompilerOptions\": {\n    \"enableIvy\": false\n  },\n  \"compilerOptions\": {\n    \"outDir\": \"./dist/out-tsc\",\n    \"baseUrl\": \".\",\n    \"sourceMap\": true,\n    \"declaration\": false,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"resolveJsonModule\": true,\n    \"target\": \"es2015\",\n    \"paths\": {\n      \"jszip\": [\"node_modules/jszip/dist/jszip.min.js\"],\n      \"@codelab/*\": [\"libs/*\"],\n      \"@ng360/slides\": [\"libs/slides/src/index.ts\"],\n      \"@codelab/browser\": [\"libs/browser/src/index.ts\"],\n      \"@codelab/console\": [\"libs/console/src/index.ts\"],\n      \"@codelab/utils\": [\"libs/utils/src/index.ts\"],\n      \"@codelab/angular-ast-viz\": [\"libs/angular-ast-viz/src/index.ts\"],\n      \"@codelab/angular-slides-to-pdf\": [\n        \"libs/angular-slides-to-pdf/src/index.ts\"\n      ],\n      \"vm\": [\"node_modules/vm-shim\"],\n      \"@codelab/feedback\": [\"libs/feedback/src/index.ts\"],\n      \"@codelab/code-demos\": [\"libs/code-demos/src/index.ts\"],\n      \"@angular-presentation/live\": [\"libs/live/src/index.ts\"],\n      \"@angular-presentation/firebase-login\": [\n        \"libs/firebase-login/src/index.ts\"\n      ],\n      \"@codelab/firebase\": [\"libs/firebase/src/index.ts\"],\n      \"@codelab/intro\": [\"libs/intro/src/index.ts\"]\n    },\n    \"typeRoots\": [\"node_modules/@types\"],\n    \"lib\": [\"es2018\", \"esnext\", \"dom\"],\n    \"rootDir\": \".\"\n  }\n}\n"
  },
  {
    "path": "tslint.json",
    "content": "{\n  \"rulesDirectory\": [\n    \"node_modules/codelyzer\",\n    \"node_modules/@nrwl/workspace/src/tslint\"\n  ],\n  \"rules\": {\n    \"arrow-return-shorthand\": true,\n    \"callable-types\": true,\n    \"class-name\": true,\n    \"comment-format\": [true, \"check-space\"],\n    \"curly\": true,\n    \"deprecation\": {\n      \"severity\": \"warn\"\n    },\n    \"eofline\": true,\n    \"forin\": true,\n    \"import-blacklist\": [true, \"rxjs/Rx\"],\n    \"import-spacing\": true,\n    \"indent\": [true, \"spaces\"],\n    \"interface-over-type-literal\": true,\n    \"label-position\": true,\n    \"max-line-length\": [true, 200],\n    \"member-access\": false,\n    \"member-ordering\": [\n      true,\n      {\n        \"order\": [\n          \"static-field\",\n          \"instance-field\",\n          \"static-method\",\n          \"instance-method\"\n        ]\n      }\n    ],\n    \"no-arg\": true,\n    \"no-bitwise\": false,\n    \"no-console\": [true, \"debug\", \"info\", \"time\", \"timeEnd\", \"trace\"],\n    \"no-construct\": true,\n    \"no-debugger\": true,\n    \"no-duplicate-super\": true,\n    \"no-empty\": false,\n    \"no-empty-interface\": true,\n    \"no-eval\": false,\n    \"no-inferrable-types\": [true, \"ignore-params\"],\n    \"no-misused-new\": true,\n    \"no-non-null-assertion\": true,\n    \"no-redundant-jsdoc\": true,\n    \"no-shadowed-variable\": false,\n    \"no-string-literal\": false,\n    \"no-string-throw\": true,\n    \"no-switch-case-fall-through\": true,\n    \"no-trailing-whitespace\": true,\n    \"no-unnecessary-initializer\": true,\n    \"no-unused-expression\": true,\n    \"no-var-keyword\": true,\n    \"object-literal-sort-keys\": false,\n    \"one-line\": [\n      true,\n      \"check-open-brace\",\n      \"check-catch\",\n      \"check-else\",\n      \"check-whitespace\"\n    ],\n    \"prefer-const\": true,\n    \"radix\": true,\n    \"semicolon\": [true, \"always\"],\n    \"triple-equals\": [true, \"allow-null-check\"],\n    \"typedef-whitespace\": [\n      true,\n      {\n        \"call-signature\": \"nospace\",\n        \"index-signature\": \"nospace\",\n        \"parameter\": \"nospace\",\n        \"property-declaration\": \"nospace\",\n        \"variable-declaration\": \"nospace\"\n      }\n    ],\n    \"unified-signatures\": true,\n    \"variable-name\": false,\n    \"whitespace\": [\n      true,\n      \"check-branch\",\n      \"check-decl\",\n      \"check-operator\",\n      \"check-separator\",\n      \"check-type\"\n    ],\n    \"no-output-on-prefix\": true,\n    \"no-inputs-metadata-property\": true,\n    \"no-outputs-metadata-property\": true,\n    \"no-host-metadata-property\": true,\n    \"no-input-rename\": true,\n    \"no-output-rename\": true,\n    \"use-lifecycle-interface\": true,\n    \"use-pipe-transform-interface\": true,\n    \"component-class-suffix\": true,\n    \"directive-class-suffix\": true\n  }\n}\n"
  }
]